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

📄 actiontriggers.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	else
	{
		RemoveItemFromInventoryForCondition op(Get()->GetItemCode(), Get()->GetAllOfItem());
		getParent()->FindPlayer( op );
	}
	*/

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

// 鞘靛惑俊 乐绰 敲饭捞绢俊霸 牢亥配府俊 焊惑酒捞袍阑 霖促.
class DistributeItemToInventoryOnField
{
	CODETYPE m_ItemCode;
public :
	DistributeItemToInventoryOnField(CODETYPE ItemCode):m_ItemCode(ItemCode){}
	~DistributeItemToInventoryOnField(){}

	VOID	operator () ( Player * pPlayer )
	{
		//g_DropManager.DropItemToField( pPlayer->GetUserKey(), m_ItemCode );
		///!!!!! temp TEMPTEMPTEMTPE
		///!!!!! temp TEMPTEMPTEMTPE
		///!!!!! temp TEMPTEMPTEMTPE
		///!!!!! temp TEMPTEMPTEMTPE
		///!!!!! temp TEMPTEMPTEMTPE
		///!!!!! temp TEMPTEMPTEMTPE
		///!!!!! temp TEMPTEMPTEMTPE

	}
};
// 炼扒俊 钦寸茄 敲饭捞绢俊霸 牢亥配府俊 焊惑阑 霖促.
class DistributeItemToInventoryForCondition
{
	CODETYPE m_ItemCode;
public:
	DistributeItemToInventoryForCondition( CODETYPE ItemCode ):m_ItemCode(ItemCode){}
	~DistributeItemToInventoryForCondition(){}

	BOOL operator()( Trigger::PLAYER_TRIGGER_INFO * pPlayerInfo )
	{
		Player * pPlayer = pPlayerInfo->m_pPlayer;
		///g_DropManager.DropItemToField( pPlayer->GetUserKey(), m_ItemCode );
		///!!!!! temp TEMPTEMPTEMTPE
		///!!!!! temp TEMPTEMPTEMTPE
		///!!!!! temp TEMPTEMPTEMTPE
		///!!!!! temp TEMPTEMPTEMTPE
		///!!!!! temp TEMPTEMPTEMTPE
		///!!!!! temp TEMPTEMPTEMTPE
		///!!!!! temp TEMPTEMPTEMTPE

		return FALSE;
	}
};
__IMPL_POOL(ACTION_REWARD_PLAYER)
VOID ACTION_REWARD_PLAYER::OnAction()
{
	/*
	if( Get()->GetIsParty() == PARTY )
	{
		// 牢亥配府俊 持绢霖促父 狼固乐促.
		ASSERT( Get()->GetIsDrop() == ACTION_REWARD_PLAYER_INFO::INVENTORY );

		//鞘靛狼 葛电 荤恩俊 酒捞袍阑 霖促.
		DistributeItemToInventoryOnField op(Get()->GetItemCode());
		getMGR()->ForeachPlayer( op );

	}
	else
	{
		Player * pPlayer = PlayerManager::Instance()->FindPlayer(getParent()->GetClickedUserKey());
		if( NULL == pPlayer )
		{
			SUNLOG( eFULL_LOG, "[U:%d]ACTION_REWARD_PLAYER Player NULL!!", getParent()->GetClickedUserKey());
			return;
		}

		DEBUG_CODE( if( !pPlayer->GetField() ) return ; );
		DEBUG_CODE( if( !pPlayer->GetField()->GetMap() ) return ; );
		DEBUG_CODE( if( !pPlayer->GetField()->GetMap()->GetEnteredZone() ) return ; );

		ASSERT( Get()->GetIsParty() == PERSONAL );
		if( Get()->GetIsDrop() == ACTION_REWARD_PLAYER_INFO::INVENTORY )
		{
			// 牢亥
			// 炼扒俊 嘎绰 葛电 蜡历
			DistributeItemToInventoryForCondition op(Get()->GetItemCode());
			getParent()->FindPlayer( op );
		}
		else
		{
			ASSERT( Get()->GetIsDrop() == ACTION_REWARD_PLAYER_INFO::DROPFIELD );
			// 靛而茄促.
			// 鞘靛俊 冻绢 哆覆
			WzVector vPos = {0,0,0};
			pPlayer->GetPos( &vPos );
			RandomRangeVector( &vPos, 3 );
			DURATYPE Dura = 0;
			BASE_ITEMINFO * pInfo = ItemInfoParser::Instance()->GetItemInfo( Get()->GetItemCode() );
			SCItemSlot slot;
			slot.SetCode(Get()->GetItemCode());
			g_DropManager.DropItemToField( pPlayer->GetField(), &vPos, pPlayer->GetObjectKey(), 0, slot );
		}
	}
	*/
//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_REWARD_PLAYER", getParent()->TriggerID() );
}


class ClearMissionMessenger
{
public :

	ClearMissionMessenger(){}
	~ClearMissionMessenger(){}

	VOID		operator () ( Player * pPlayer )
	{
		BYTE MapCode =  (BYTE)pPlayer->GetField()->GetMap()->GetMapCode();
		MissionManager * pMGR = pPlayer->GetMissionManager();
		// 鞘靛狼 葛电 荤恩俊霸 固记 努府绢 沥焊 历厘
		// 吝汗 焊惑篮 绝促!
		MSG_CG_TRIGGER_REWARD_WINDOW_CMD cmsg;
		cmsg.m_Num = MapCode;
		cmsg.m_Type = ( pMGR->GetMissionPoint(MapCode) == 0 ? 0 : 1 );
		pPlayer->SendPacket( &cmsg, sizeof(cmsg) );
		
		ASSERT( pMGR->GetMissionState(MapCode) != MISSION_REWARD );
		pMGR->SetMissionState(MapCode, MISSION_REWARD);
		pMGR->SetMissionPoint(MapCode, pMGR->GetMissionPoint(MapCode)+1);
	}
};

__IMPL_POOL(ACTION_CLEAR_MISSION)
VOID ACTION_CLEAR_MISSION::OnAction()
{
	ClearMissionMessenger msgr;
	getMGR()->ForeachPlayer( msgr );

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

__IMPL_POOL(ACTION_PORTAL_RANDOM)
VOID ACTION_PORTAL_RANDOM::OnAction()
{
	// 秦寸 康开阑 掘绢客辑
	CODETYPE EnterFieldCode = Get()->GetMapID();
	if( Get()->GetRandom() == 0 )
	{
		int nRandArea = rand() % 8;
		// 罚待窍霸 况橇
		if( Get()->GetTarget() == PARTY )
		{
			// 泅犁 鞘靛俊 乐绰 荤恩阑 葛滴 况橇
			// 炼扒俊 秦寸窍绰 荤恩阑 舅 鞘夸 绝澜

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

			if( getParent()->GetClickedUserKey() != 0 )
			{
				Player * pPlayer = PlayerManager::Instance()->FindPlayer(getParent()->GetClickedUserKey());
				if( NULL == pPlayer )
				{
					SUNLOG( eFULL_LOG, "[ACTION_PORTAL_RANDOM::OnAction] [U:%d] Player NULL!!", getParent()->GetClickedUserKey());
					return;
				}
				WARP_PLAYER::Warp( pPlayer,EnterFieldCode,Get()->GetAreaID( nRandArea ) );
			}
			else
			{
				WarpPlayerForField op(EnterFieldCode,Get()->GetAreaID( nRandArea ));
				getParent()->For_EachSatisfiedPlayer(op);
				getParent()->RemoveAllSatisfiedPlayer();
			}
		}
	}
	else //if( Get()->GetRandom() == ACTION_PORTAL_RANDOM::_ORDER )
	{
		// 颇萍盔甸阑 鉴辑措肺 捞悼矫挪促
		if( Get()->GetTarget() == PARTY )
		{
			// 泅犁 鞘靛俊 乐绰 荤恩阑 葛滴 况橇
			// 炼扒俊 秦寸窍绰 荤恩阑 舅 鞘夸 绝澜

			BackToTheVillage op;
			getMGR()->ForeachPlayer( op );
			//WarpPlayerForField op(EnterFieldCode,Get()->GetAreaID());
			
		}
		else
		{
			ASSERT( Get()->GetTarget() == 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() );

	// 捞悼沁促绊 舅妨霖促
//	SUNLOG( eFULL_LOG,  "备泅救凳!" );
//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_PORTAL_RANDOM", getParent()->TriggerID() );
}

__IMPL_POOL(ACTION_ACTIVATE_TRIGGER)
VOID ACTION_ACTIVATE_TRIGGER::OnAction()
{
	getMGR()->ActiveTrigger( Get()->GetWzTriggerID(), (Get()->GetFlag()==0?TRUE:FALSE) );
//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_ACTIVATE_TRIGGER", getParent()->TriggerID() );
}

__IMPL_POOL(ACTION_AREA_DAMAGE)

class AreaDamageHandler
{
	DWORD	m_dwObjectKey;
	int		m_dist;
	WzVector m_vPos;
	float	m_fDamage;
public :

	AreaDamageHandler( DWORD dwObjectKey, WzVector * pvPos, int dist, float fDamage )
	{
		m_dwObjectKey = dwObjectKey;
		m_vPos = *pvPos;
		m_dist = dist;
		m_fDamage = fDamage;
	}
	~AreaDamageHandler(){}

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

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

		if( fDist2 <= m_dist )
		{
			pPlayer->DecreaseHP( m_fDamage );
			MSG_CG_TRIGGER_AREADAMAGE_BRD msg;
			msg.m_byCategory	= CG_BATTLE;
			msg.m_byProtocol	= CG_BATTLE_O2P_ATTACK_BRD;
			msg.m_dwObjectKey	= pPlayer->GetObjectKey();
			msg.m_wDamage		= m_fDamage;
			msg.m_dwHP			= pPlayer->GetHP();
			pPlayer->SendPacketAround( (MSG_BASE_FORWARD*)&msg, sizeof(msg) );
		}
	}
};

VOID ACTION_AREA_DAMAGE::OnAction()
{
	// 坷宏璃飘 罐酒辑
	MapObject * pMapObject = getMGR()->FindMapObject( Get()->GetObjectIndex() );
	ASSERT(NULL != pMapObject);
	DEBUG_CODE( if( !pMapObject ) return ; );

	// 裹困 救俊 鸥百(俺牢/颇萍) 乐绰瘤 眉农窍咯 单固瘤 林磊
	WzVector vPos;
	pMapObject->GetPos( &vPos );

	AreaDamageHandler handler( Get()->GetObjectIndex(), &vPos, 10, Get()->GetDamage() );
	getMGR()->ForeachPlayer( handler );	// 裹困 救俊 俺牢捞电 颇萍电 乐栏搁 促 林绰 芭 酒囱啊?
//	SUNLOG( eFULL_LOG,  "备泅救凳!" );
	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_AREA_DAMAGE", getParent()->TriggerID() );
}

__IMPL_POOL(ACTION_OPERATE_SWITCH)
VOID ACTION_OPERATE_SWITCH::OnAction()
{
	BYTE Value = getMGR()->GetSwitchValue( Get()->GetSwitchID() );
	BYTE Result = 0;
	sSWITCH ( Get()->GetOperationType() )
	CASE(eOPERATION_EQUAL)
		getMGR()->SetSwitchValue( Get()->GetSwitchID(), Get()->GetArgument() );
	CASE(eOPERATION_PLUS)
		Result = Value + Get()->GetArgument();
		getMGR()->SetSwitchValue( Get()->GetSwitchID(), Result );
	CASE(eOPERATION_MINUS)
		Result = Value - Get()->GetArgument();
		getMGR()->SetSwitchValue( Get()->GetSwitchID(), Result );
	CASE(eOPERATION_MULTIPLE)
		Result = Value * Get()->GetArgument();
		getMGR()->SetSwitchValue( Get()->GetSwitchID(), Result );
	CASE(eOPERATION_DIVIDE)
		Result = Value / Get()->GetArgument();
		getMGR()->SetSwitchValue( Get()->GetSwitchID(), Result );
	eSWITCH
//	SUNLOG( eFULL_LOG,  "[ID:%u]:ACTION_OPERATE_SWITCH", getParent()->TriggerID() );
}

__IMPL_POOL( ACTION_ROAD_CONNECT )		// 辨 楷搬阑 汲沥/秦力 茄促
VOID ACTION_ROAD_CONNECT::OnAction()
{
}

__IMPL_POOL(ACTION_CREATE_DIR_MONSTER)
VOID ACTION_CREATE_DIR_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_DIR_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 );

			float fAngle;
			WORD wAngle;
			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}, vDir = {Get()->GetDirX(), Get()->GetDirY(), Get()->GetDirZ()}, vNormal;
				VectorNormalize( &vNormal, &vDir );
				fAngle = Math_GetAngleFromVector( &vNormal );
				wAngle = static_cast< WORD > ( fAngle * 180.0f / WZ_PI );	// 橇肺配妮俊 持绢临 弥辆 巨臂蔼
				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_Dir( Get()->GetMonsterCode(), 1, &vPos, Get()->GetAreaID(), 0, wAngle );
				}
	//			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}, vDir = {Get()->GetDirX(), Get()->GetDirY(), Get()->GetDirZ()}, vNormal;
				VectorNormalize( &vNormal, &vDir );
				fAngle = Math_GetAngleFromVector( &vNormal );
				wAngle = static_cast< WORD > ( fAngle * 180.0f / WZ_PI );	// 橇肺配妮俊 持绢临 弥辆 巨臂蔼

				vPos = pAreaInfo->m_wbvRegion.m_BvSphere.m_wvCenter;
				getMGR()->CreateNPC_Dir( Get()->GetMonsterCode(), 1, &vPos, Get()->GetAreaID(), 0, wAngle );
				++m_iRegenCount;
			}
//			DEBUG_CODE( if( pAreaInfo->m_wbvRegion.m_eBvType != BVT_PATH_TILE_INDEX ) return TRUE; );
		}
		
	}
	return TRUE;
}

__IMPL_POOL(ACTION_CHANGE_LIGHT)
VOID ACTION_CHANGE_LIGHT::OnAction()
{
}

__IMPL_POOL(ACTION_CHANGE_OBJECT_TYPE)
VOID ACTION_CHANGE_OBJECT_TYPE::OnAction()
{
}

⌨️ 快捷键说明

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