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