⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 actiontriggers.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "StdAfx.h"
#include ".\actiontriggers.h"
#include ".\actionInfo.h"
#include ".\Trigger.h"
#include ".\TriggerManager.h"
#include ".\Player.h"
#include ".\PacketStruct_CG.h"
#include ".\PacketStruct_AG.h"
#include ".\Map.h"
#include ".\ItemInfoParser.h"
#include ".\ItemManager.h"
#include <Global.h>
#include ".\MissionManager.h"
#include ".\GameZone.h"

// 规氢 瘤沥 阁胶磐 府哩 困秦
#include ".\handler_cg_sync.h"
#include <PublicMath.h>
#include <3DEngine/Common/MathAssistant.h>

// 裹困 单固瘤 困秦
#include <MapObject.h>

__IMPL_POOL(ACTION_CHANGE_OBJECTANI)
VOID ACTION_CHANGE_OBJECTANI::OnAction()
{
//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_CHANGE_OBJECTANI", getParent()->TriggerID() );
}

__IMPL_POOL(ACTION_CHANGE_PATHTILE)
VOID ACTION_CHANGE_PATHTILE::OnAction()
{
	if( CANMOVE == Get()->GetAttribute() )
	{
		getMGR()->UnsetAttribute( Get()->GetTileID(), PTA_NO_WALK);
	}
	else if( CANNOTMOVE == Get()->GetAttribute() )
	{
		getMGR()->SetAttribute( Get()->GetTileID(), PTA_NO_WALK);
	}
	
//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_CHANGE_PATHTILE", getParent()->TriggerID() );
}

__IMPL_POOL(ACTION_CHANGE_OBJECTSTATE)
VOID ACTION_CHANGE_OBJECTSTATE::OnAction()
{
	
	MapObject * pMapObject = getMGR()->FindMapObject( Get()->GetObjectID() );
	ASSERT(NULL != pMapObject);
	DEBUG_CODE( if( !pMapObject ) return ; );

	switch( Get()->GetState() )
	{
	case ACTION_CHANGE_OBJECTSTATE_INFO::APPEAR:
		{
//			SUNLOG( eFULL_LOG,  "备泅救凳!" );
		}
		break;
	case ACTION_CHANGE_OBJECTSTATE_INFO::DISAPPEAR:
		{
//			SUNLOG( eFULL_LOG,  "备泅救凳!" );
		}
		break;
	case ACTION_CHANGE_OBJECTSTATE_INFO::REMOVE:
		{
			if( !getMGR()->RemoveMapObject( Get()->GetObjectID() ) )
			{
				SUNLOG( eCRITICAL_LOG,  "[ACTION_CHANGE_OBJECTSTATE::OnAction] [ID:%u]:ACTION_CHANGE_OBJECTSTATE is Failed!!!!!!!!!!!", getParent()->TriggerID() );
			}
		}
		break;
	}
	
//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_CHANGE_OBJECTSTATE", getParent()->TriggerID() );
}

__IMPL_POOL(ACTION_PLAY_EVENT)
VOID ACTION_PLAY_EVENT::OnAction()
{
	// 捞亥飘甫 敲饭捞窍扼绊 舅妨扼!
	Player * pPlayer = PlayerManager::Instance()->FindPlayer(getParent()->GetClickedUserKey());
	if( NULL == pPlayer )
	{
		SUNLOG( eFULL_LOG, "[ACTION_PLAY_EVENT::OnAction] [U:%d]Player NULL!!", getParent()->GetClickedUserKey());
		return;
	}

	MSG_CG_TRIGGER_PLAY_EVENT_CMD	msg;

	msg.m_nEventIndex = Get()->GetEventID();
	pPlayer->SendPacket( &msg, sizeof(msg) );

//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_PLAY_EVENT", getParent()->TriggerID() );
}

__IMPL_POOL(ACTION_SET_ISATTACK)
VOID ACTION_SET_ISATTACK::OnAction()
{
//	SUNLOG( eFULL_LOG,  "备泅救凳!" );
//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_SET_ISATTACK", getParent()->TriggerID() );
}


class WARP_PLAYER
{
public:
	static VOID Warp( Player * pPlayer, CODETYPE EnterFieldCode, WzID AreaID )
	{
		DEBUG_CODE( if( !pPlayer->GetField() ) return ; );
		DEBUG_CODE( if( !pPlayer->GetField()->GetMap() ) return ; );
		DEBUG_CODE( if( !pPlayer->GetField()->GetMap()->GetGameZone() ) return ; );

		GameZone * pZone = pPlayer->GetField()->GetMap()->GetGameZone();
		pZone->Warp( pPlayer, EnterFieldCode, AreaID );

		MSG_CG_TRIGGER_PORTAL_ACK msg;
		msg.m_MapCode		= pZone->GetMap()->GetMapCode();
		msg.m_FieldCode		= EnterFieldCode;
		pPlayer->SendPacket( &msg, sizeof(msg) );
		return;
	}
};

class BackToTheVillage
{
	
public:
	BackToTheVillage(){}
	~BackToTheVillage(){}
	VOID operator()( Player * pPlayer )
	{
		MSG_AG_ZONE_MISSION_LEAVE_CMD msg;
		pPlayer->SendPacket( &msg, sizeof(msg) );
	}
};

class WarpPlayerForField
{
	CODETYPE m_FieldCode;
	WzID m_AreaID;
public: 
	WarpPlayerForField(CODETYPE FieldCode, WzID AreaID ):m_FieldCode(FieldCode),m_AreaID(AreaID){}
	~WarpPlayerForField(){}
	VOID operator() ( Player * pPlayer ) { WARP_PLAYER::Warp( pPlayer, m_FieldCode, m_AreaID ); }
};

__IMPL_POOL(ACTION_PORTAL_PLAYER)
VOID ACTION_PORTAL_PLAYER::OnAction()
{
	CODETYPE EnterFieldCode = Get()->GetMapCode();
	if( Get()->GetType() == ACTION_PORTAL_PLAYER_INFO::FIELDCODE )
	{
		if( Get()->GetIsParty() == PARTY )
		{
			// 泅犁 鞘靛俊 乐绰 荤恩阑 葛滴 况橇
			// 炼扒俊 秦寸窍绰 荤恩阑 舅 鞘夸 绝澜

			WarpPlayerForField op(EnterFieldCode,Get()->GetAreaID());
			getMGR()->ForeachPlayer( op );
		}
		else
		{
			ASSERT( Get()->GetIsParty() == PERSONAL );

			if( getParent()->GetClickedUserKey() != 0 )
			{
				Player * pPlayer = PlayerManager::Instance()->FindPlayer(getParent()->GetClickedUserKey());
				if( NULL == pPlayer )
				{
					SUNLOG( eFULL_LOG, "[ACTION_PORTAL_PLAYER::OnAction] [U:%d]ACTION_REWARD_PLAYER Player NULL!!", getParent()->GetClickedUserKey());
					return;
				}
				WARP_PLAYER::Warp( pPlayer,EnterFieldCode,Get()->GetAreaID() );
			}
			else
			{
				/*
				WarpPlayerForCondition op(EnterFieldCode,Get()->GetAreaID());
				getParent()->FindPlayer( op);
				*/
				WarpPlayerForField op(EnterFieldCode,Get()->GetAreaID());
				getParent()->For_EachSatisfiedPlayer(op);
				getParent()->RemoveAllSatisfiedPlayer();
			}
		}
	}
	else //if( Get()->GetType() == ACTION_PORTAL_PLAYER_INFO::RELATEDVILLAGE )
	{
		if( Get()->GetIsParty() == PARTY )
		{
			// 泅犁 鞘靛俊 乐绰 荤恩阑 葛滴 况橇
			// 炼扒俊 秦寸窍绰 荤恩阑 舅 鞘夸 绝澜

			BackToTheVillage op;
			getMGR()->ForeachPlayer( op );
			//WarpPlayerForField op(EnterFieldCode,Get()->GetAreaID());
			
		}
		else
		{
			ASSERT( Get()->GetIsParty() == PERSONAL );

			if( getParent()->GetClickedUserKey() != 0 )
			{
				Player * pPlayer = PlayerManager::Instance()->FindPlayer(getParent()->GetClickedUserKey());
				if( NULL == pPlayer )
				{
					SUNLOG( eFULL_LOG, "[ACTION_PORTAL_PLAYER::OnAction] [U:%d]ACTION_REWARD_PLAYER Player NULL!!", getParent()->GetClickedUserKey());
					return;
				}
				BackToTheVillage op;
				op(pPlayer);
//				WARP_PLAYER::Warp( pPlayer,EnterFieldCode,Get()->GetAreaID() );
			}
			else
			{
				/*
				WarpPlayerForCondition op(EnterFieldCode,Get()->GetAreaID());
				getParent()->FindPlayer( op);
				*/
				BackToTheVillage op;
				getParent()->For_EachSatisfiedPlayer(op);
				getParent()->RemoveAllSatisfiedPlayer();
			}
		}
	}
	
//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_PORTAL_PLAYER", getParent()->TriggerID() );
}

__IMPL_POOL(ACTION_SET_OBJECTTHRUST)
VOID ACTION_SET_OBJECTTHRUST::OnAction()
{
//	SUNLOG( eFULL_LOG,  "备泅救凳!" );
//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_SET_OBJECTTHRUST", getParent()->TriggerID() );
}


__IMPL_POOL(ACTION_APPLY_DAMAGE)
VOID ACTION_APPLY_DAMAGE::OnAction()
{
//	SUNLOG( eFULL_LOG,  "备泅救凳!" );
//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_APPLY_DAMAGE", getParent()->TriggerID() );
}


/*
// 林函何狼 敲饭捞绢父阑 眉农窍绰 巴栏肺 官曹 鞘夸 乐澜
class ReflectDamageHandler
{
	int		m_dist;
	WzVector m_vPos;
public :

	ReflectDamageHandler( WzVector * pvPos, int dist ){ m_vPos = *pvPos; m_dist = dist; }
	~ReflectDamageHandler(){}

	VOID		operator () ( Player * pPlayer )
	{
		WzVector curPos;
		pPlayer->GetPos( &curPos );

		WzVector wvDist = m_vPos - curPos;
		float fDist2 = VectorLength2( &wvDist );

		if( fDist2 <= m_dist )
		{
			pPlayer->DecreaseHP( 15 );
			MSG_CG_TRIGGER_REFLECTDAMAGE_BRD msg;
			msg.m_byCategory	= CG_BATTLE;
			msg.m_byProtocol	= CG_BATTLE_P2O_ATTACK_BRD;
			msg.m_dwObjectKey	= pPlayer->GetObjectKey();
			msg.m_dwDamage		= 15;
			msg.m_dwHP			= pPlayer->GetHP();
			pPlayer->SendPacketAround( (MSG_BASE_FORWARD*)&msg, sizeof(msg) );
		}
	}
};
*/
__IMPL_POOL(ACTION_REFLECT_DAMAGE)
VOID ACTION_REFLECT_DAMAGE::OnAction()
{
	/*
	MapObject * pMapObject = getMGR()->FindMapObject( Get()->m_iObjectID );
	ASSERT( NULL != pMapObject );
	DEBUG_CODE( if( !pMapObject ) return; );

	INT ReflectDamage = (INT)(( pMapObject->GetMaxHP() - pMapObject->GetHP() ) * Get()->m_fDamage);

	// 老沥 裹困救狼 Object俊霸 单固瘤 馆荤
	// TODO: ReflectDamage??

	WzVector vPos;
	pMapObject->GetPos( &vPos );

	Field * pField = getMGR()->GetField();
	ReflectDamageHandler handler( &vPos, 10 );
	pField->ForeachPlayer( handler );
	*/
//	SUNLOG( eFULL_LOG,  "备泅救凳!" );
//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_REFLECT_DAMAGE", getParent()->TriggerID() );
}



__IMPL_POOL(ACTION_CREATE_MONSTER)
VOID ACTION_CREATE_MONSTER::OnAction()
{
	m_iRegenCount = 0;
	m_RegenTimer.SetTimer(0);	//< 贸澜俊绰 馆靛矫 茄锅 角青茄促.
	if( Get()->GetIsParty() == PERSONAL )
	{
		// 酒流 蜡历啊 甘俊 甸绢 坷瘤 臼篮惑炔俊辑 0捞 瞪 荐 乐促.!!!!!@@@@
		DWORD num = getMGR()->GetPlayerNum();
		m_iMaxCreateCount = Get()->GetCreateCount()*(num==0?1:num);
	}
	else
		m_iMaxCreateCount = Get()->GetCreateCount();

//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_CREATE_MONSTER,俺荐(%d)", getParent()->TriggerID(), m_iMaxCreateCount );
}
BOOL ACTION_CREATE_MONSTER::OnActionUpdate()
{
	if( m_iRegenCount == Get()->GetLoopCount() ) 
	{
		return FALSE;
	}
	else
	{ 
		if( m_RegenTimer.IsExpired() )
		{
			m_RegenTimer.SetTimer(Get()->GetDelayTime());

			WzSpecialArea * pAreaInfo = getMGR()->GetAreaInfo( Get()->GetAreaID() );
			ASSERT( pAreaInfo );
			if( pAreaInfo->m_wbvRegion.m_eBvType == BVT_PATH_TILE_INDEX )
			{
//			ASSERT( pAreaInfo->m_wbvRegion.m_eBvType == BVT_PATH_TILE_INDEX );
//			DEBUG_CODE( if( pAreaInfo->m_wbvRegion.m_eBvType != BVT_PATH_TILE_INDEX ) return TRUE; );

				WzVector vPos = {0,0,0};
				for( int i = 0 ; i < m_iMaxCreateCount ; ++ i)
				{
					DWORD dwSelectedTile = random( 0, pAreaInfo->m_wbvRegion.m_BvPathTileIndex.m_nCount - 1 );
					vPos = getMGR()->GetRandomPosInTile( pAreaInfo->m_wbvRegion.m_BvPathTileIndex.m_pdwData[dwSelectedTile] );
					getMGR()->CreateNPC( Get()->GetMonsterCode(), 1, &vPos, Get()->GetAreaID(), Get()->GetType() );
				}
	//			SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_CREATE_MONSTER COUNT(%d), Tick(%u)", getParent()->TriggerID(), m_iRegenCount, GetTickCount() );
	//			SUNLOG( eFULL_LOG,  "[ID:%u]:Monster(CODE:%d)(Area:%d)(GroupID:%d)", getParent()->TriggerID(), Get()->GetMonsterCode(), Get()->GetAreaID(), Get()->GetType() );
				++m_iRegenCount;
			}
			else if( pAreaInfo->m_wbvRegion.m_eBvType == BVT_SPHERE )
			{
				WzVector vPos = {0,0,0};
				vPos = pAreaInfo->m_wbvRegion.m_BvSphere.m_wvCenter;
				getMGR()->CreateNPC( Get()->GetMonsterCode(), 1, &vPos, Get()->GetAreaID(), Get()->GetType() );
				++m_iRegenCount;
			}
//			DEBUG_CODE( if( pAreaInfo->m_wbvRegion.m_eBvType != BVT_PATH_TILE_INDEX ) return TRUE; );
		}
		
	}
	return TRUE;
}

__IMPL_POOL(ACTION_DISPLAY_MSGBOX)
VOID ACTION_DISPLAY_MSGBOX::OnAction()
{
//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_DISPLAY_MSGBOX", getParent()->TriggerID() );
}

class RemoveItemFromInventoryForCondition
{
	SLOTCODE	m_ItemCode;
	BYTE		m_byAllOfItem;
public:
	RemoveItemFromInventoryForCondition( SLOTCODE ItemCode, BYTE all ):m_ItemCode(ItemCode), m_byAllOfItem(all){}
	~RemoveItemFromInventoryForCondition(){}

	BOOL operator()( Trigger::PLAYER_TRIGGER_INFO * pPlayerInfo )
	{
		//if( pPlayerInfo->m_State )
		{
			Player * pPlayer = pPlayerInfo->m_pPlayer;
			pPlayer->GetItemManager()->Lose( m_ItemCode, m_byAllOfItem );
		}
		return FALSE;
	}
};
__IMPL_POOL(ACTION_REMOVE_ITEM)
VOID ACTION_REMOVE_ITEM::OnAction()
{
	/*
	if( getParent()->GetClickedUserKey() != 0 )
	{
		// 努腐茄 蜡历
		Player * pPlayer = PlayerManager::Instance()->FindPlayer(getParent()->GetClickedUserKey());
		if( NULL == pPlayer )
		{
			SUNLOG( eFULL_LOG, "[U:%d]ACTION_REMOVE_ITEM Player NULL!!", getParent()->GetClickedUserKey());
			return;
		}
		pPlayer->GetItemManager()->Lose( Get()->GetItemCode(), Get()->GetAllOfItem() );
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -