📄 conditiontriggers.cpp
字号:
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 + -