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

📄 conditiontriggers.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
VOID CONDITION_ENTER_AREA::onMsg( TRIGGER_MSG * pmsg )
{
	switch( pmsg->m_dwMsgID )
	{
	case eTRIGGER_ENTER_AREA:
		{
			TRIGGER_ENTER_AREA * pMsg = (TRIGGER_ENTER_AREA *)pmsg;
			if( Get()->GetAreaID() == pMsg->m_AreaID )
			{
				IsSatisfied();
			}
		}break;
	case eTRIGGER_LEAVE_AREA:
		{
			TRIGGER_LEAVE_AREA * pMsg = (TRIGGER_LEAVE_AREA *)pmsg;
			if( Get()->GetAreaID() == pMsg->m_AreaID )
			{
				IsSatisfied();
			}
		}break;
	}
}


class HaveItemPlayer
{
	SLOTCODE m_ItemCode;
public:
	HaveItemPlayer( SLOTCODE ItemCode ):m_ItemCode(ItemCode){}
	~HaveItemPlayer(){}

	BOOL operator()( Trigger::PLAYER_TRIGGER_INFO * pPlayerInfo )
	{
		Player * pPlayer = pPlayerInfo->m_pPlayer;
		if( pPlayer->GetItemManager()->IsExistItem( SI_INVENTORY, m_ItemCode ) )
		{
			return TRUE;
		}
		return FALSE;
	}
};

__IMPL_POOL(CONDITION_HAVE_ITEM)
BOOL CONDITION_HAVE_ITEM::IsSatisfied()
{
	if( m_bSatisfied ) return TRUE;

	// 咯矾荤恩老 版快啊 绝瘤父 康开俊 甸绢柯 荤恩苞 努腐茄 荤恩阑 历厘
	// 笛 吝 窍唱
	/*
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( getParent()->GetClickedUserKey() );
	if( pPlayer->GetItemManager()->IsExistItem( SI_INVENTORY, Get()->GetItemCode() ) )
	{
		setSatisfied( TRUE );
	}
	else
	{
		HaveItemPlayer op(Get()->GetItemCode());
		if( getParent()->FindPlayer( op ) )
		{
			setSatisfied( TRUE );
		}
	}
	*/
	
	return m_bSatisfied;
}



__IMPL_POOL(CONDITION_MULTI_SWITCH)
BOOL CONDITION_MULTI_SWITCH::IsSatisfied()
{
	if( m_bSatisfied ) return TRUE;

	int satisfiedNum = 0;
	for( BYTE idx = 0 ; idx < CONDITION_MULTI_SWITCH_INFO::_MAX_SWITCH_ID_NUM ; ++idx )
	{
		if( INVALID_SWITCH_ID_VALUE == Get()->GetSwitchID( idx ) ) continue;

		BYTE value = getMGR()->GetSwitchValue( Get()->GetSwitchID( idx ) );
		sSWITCH( Get()->GetOperationType1() )
		CASE(eCOMPARE_EQUAL)
			if( value == Get()->GetValue1() ) ++satisfiedNum;
		CASE(eCOMPARE_MORE)
			if( value > Get()->GetValue1() ) ++satisfiedNum;
		CASE(eCOMPARE_LESS)
			if( value < Get()->GetValue1() ) ++satisfiedNum;
		CASE(eCOMPARE_LESSTHAN)
			if( value <= Get()->GetValue1() ) ++satisfiedNum;
		CASE(eCOMPARE_MORETHAN)
			if( value >= Get()->GetValue1() ) ++satisfiedNum;
		CASE(eCOMPARE_NOTEQUAL)
			if( value != Get()->GetValue1() ) ++satisfiedNum;
		DEFAULT
		eSWITCH
	}
	
	sSWITCH( Get()->GetOperationType2() )
	CASE(eCOMPARE_EQUAL)
		if( satisfiedNum == Get()->GetValue2() ) setSatisfied( TRUE );
	CASE(eCOMPARE_MORE)
		if( satisfiedNum > Get()->GetValue2() ) setSatisfied( TRUE );
	CASE(eCOMPARE_LESS)
		if( satisfiedNum < Get()->GetValue2() ) setSatisfied( TRUE );
	CASE(eCOMPARE_LESSTHAN)
		if( satisfiedNum <= Get()->GetValue2() ) setSatisfied( TRUE );
	CASE(eCOMPARE_MORETHAN)
		if( satisfiedNum >= Get()->GetValue2() ) setSatisfied( TRUE );
	CASE(eCOMPARE_NOTEQUAL)
		if( satisfiedNum != Get()->GetValue2() ) setSatisfied( TRUE );
	DEFAULT
	eSWITCH
	
	DEBUG_CODE( if(m_bSatisfied) SUNLOG( eFULL_LOG,  "[CONDITION_MULTI_SWITCH::IsSatisfied] [ID:%u]:TriggerMultiSwitchCondition", getParent()->TriggerID() ); );
	
	return m_bSatisfied;
}




__IMPL_POOL(CONDITION_MISSION_POINT)
VOID CONDITION_MISSION_POINT::OnInit()
{
	m_iNumberOfPlayersInArea = 0;
}

VOID CONDITION_MISSION_POINT::onMsg( TRIGGER_MSG * pmsg )
{
	/*
	switch( pmsg->m_dwMsgID )
	{
	case eTRIGGER_ENTER_AREA:
		{
			TRIGGER_ENTER_AREA * pMsg = (TRIGGER_ENTER_AREA *)pmsg;

			//捞康开俊 敲饭捞绢啊 乐绰瘤 眉农
			if( Get()->GetAreaID() == pMsg->m_AreaID )
			{
				Player * pPlayer = PlayerManager::Instance()->FindPlayer( pMsg->m_dwUserKey );
				WzVector vPlayerPos;
				pPlayer->GetPos( &vPlayerPos );

				WzSpecialArea * pAreaInfo = getMGR()->GetAreaInfo( Get()->GetAreaID() );
				ASSERT( pAreaInfo );
				if( pAreaInfo->m_wbvRegion.m_eBvType == BVT_AABB )
				{
					BvAABB & aabb = pAreaInfo->m_wbvRegion.m_aabb;
					//if( aabb.m_wvMin.x <= vPlayerPos.x &&  vPlayerPos.x <= aabb.m_wvMax.x )
					{
						//if( aabb.m_wvMin.y <= vPlayerPos.y &&  vPlayerPos.y <= aabb.m_wvMax.y )
						{
							if( pPlayer->GetMissionManager()->GetMissionPoint(0) >= Get()->GetMissionPoint() )
							{
								Trigger::PLAYER_TRIGGER_INFO * pPlayerInfo = getParent()->GetConditionPlayer( pPlayer->GetUserKey() );
								if( pPlayerInfo ) 
									pPlayerInfo->m_State |= Trigger::ENTER_AREA_POINT_PLAYER;
								else
									getParent()->AddConditionPlayer( pPlayer, Trigger::ENTER_AREA_POINT_PLAYER );

								SUNLOG( eFULL_LOG,  "[ID:%u]:CONDITION_MISSION_POINT", getParent()->TriggerID() );
								setSatisfied( TRUE );
							}
						}
					}
				}
				else if( pAreaInfo->m_wbvRegion.m_eBvType == BVT_PATH_TILE_INDEX )
				{
					INT iPlayerTileIdx = getMGR()->GetTileToStand( &vPlayerPos );
					if( -1 == iPlayerTileIdx )
					{
						SUNLOG( eFULL_LOG,  "困摹沥焊啊 肋给登菌促.-1" );
						return ;
					}

					BvPathTileIndex * pTile = &pAreaInfo->m_wbvRegion.m_BvPathTileIndex;
					// TEMP // !!!!! 悼扁拳 救嘎酒辑 快急 眉农 救窃
					//for(WORD idx = 0 ; idx < pTile->m_nCount ; ++idx )
					{
						//if( pTile->m_pdwData[idx] == iPlayerTileIdx )
						{
							// 固记器牢飘啊 倔付 捞惑老锭
							if( pPlayer->GetMissionManager()->GetMissionPoint(0) >= Get()->GetMissionPoint() )
							{
								Trigger::PLAYER_TRIGGER_INFO * pPlayerInfo = getParent()->GetConditionPlayer( pPlayer->GetUserKey() );
								if( pPlayerInfo ) 
									pPlayerInfo->m_State |= Trigger::ENTER_AREA_POINT_PLAYER;
								else
									getParent()->AddConditionPlayer( pPlayer, Trigger::ENTER_AREA_POINT_PLAYER );
								
								SUNLOG( eFULL_LOG,  "[ID:%u]:CONDITION_MISSION_POINT", getParent()->TriggerID() );
								setSatisfied( TRUE );
							}
							
							break;
						}
					}
				}
			}
		}
		break;
	case eTRIGGER_LEAVE_AREA:
		{
			TRIGGER_LEAVE_AREA * pMsg = (TRIGGER_LEAVE_AREA *)pmsg;

			if( Get()->GetAreaID() == pMsg->m_AreaID )
			{
				Player * pPlayer = PlayerManager::Instance()->FindPlayer( pMsg->m_dwUserKey );
				WzVector vPlayerPos;
				pPlayer->GetPos( &vPlayerPos );

				WzSpecialArea * pAreaInfo = getMGR()->GetAreaInfo( Get()->GetAreaID() );
				ASSERT( pAreaInfo );
				if( pAreaInfo->m_wbvRegion.m_eBvType == BVT_AABB )
				{
					BvAABB & aabb = pAreaInfo->m_wbvRegion.m_aabb;
					//if( aabb.m_wvMin.x <= vPlayerPos.x &&  vPlayerPos.x <= aabb.m_wvMax.x )
					{
						//if( aabb.m_wvMin.y <= vPlayerPos.y &&  vPlayerPos.y <= aabb.m_wvMax.y )
						{
							Trigger::PLAYER_TRIGGER_INFO * pPlayerInfo = getParent()->GetConditionPlayer( pMsg->m_dwUserKey );
							if( pPlayerInfo->m_State == Trigger::ENTER_AREA_POINT_PLAYER )
							{
								getParent()->RemoveConditionPlayer( pMsg->m_dwUserKey );
							}
							else
							{
								pPlayerInfo->m_State &= ~Trigger::ENTER_AREA_POINT_PLAYER;
							}

							if( IsSatisfied() )
								setSatisfied( FALSE );							
						}
					}
				}
				else if( pAreaInfo->m_wbvRegion.m_eBvType == BVT_PATH_TILE_INDEX )
				{
					INT iPlayerTileIdx = getMGR()->GetTileToStand( &vPlayerPos );
					if( -1 == iPlayerTileIdx )
					{
						SUNLOG( eFULL_LOG,  "困摹沥焊啊 肋给登菌促.-1" );
						return ;
					}

					BvPathTileIndex * pTile = &pAreaInfo->m_wbvRegion.m_BvPathTileIndex;
					// TEMP // !!!!! 悼扁拳 救嘎酒辑 快急 眉农 救窃
					//for(WORD idx = 0 ; idx < pTile->m_nCount ; ++idx )
					{
						//if( pTile->m_pdwData[idx] == iPlayerTileIdx )
						{
							Trigger::PLAYER_TRIGGER_INFO * pPlayerInfo = getParent()->GetConditionPlayer( pMsg->m_dwUserKey );
							if( pPlayerInfo->m_State == Trigger::ENTER_AREA_POINT_PLAYER )
							{
								getParent()->RemoveConditionPlayer( pMsg->m_dwUserKey );
							}
							else
							{
								pPlayerInfo->m_State &= ~Trigger::ENTER_AREA_POINT_PLAYER;
							}

							if( IsSatisfied() )
								setSatisfied( FALSE );
							break;
						}
					}
				}

				
			}
		}
		break;
	}
	*/
}





⌨️ 快捷键说明

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