📄 handler_cg_item.cpp
字号:
switch( rt )
{
case RC::RC_ITEM_SUCCESS:
{
MSG_CG_ITEM_COMBINE_ACK msg;
msg.m_byCategory = CG_ITEM;
msg.m_byProtocol = CG_ITEM_COMBINE_ACK;
msg.m_fromIndex = pRecvMsg->m_fromIndex;
msg.m_toIndex = pRecvMsg->m_toIndex;
msg.m_fromPos = pRecvMsg->m_fromPos;
msg.m_toPos = pRecvMsg->m_toPos;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
break;
default:
{
MSG_CG_ITEM_COMBINE_NAK msg;
msg.m_byCategory = CG_ITEM;
msg.m_byProtocol = CG_ITEM_COMBINE_NAK;
msg.m_dwErrorCode = rt;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
}
}
// 家葛己 酒捞袍父 贸府窃
VOID Handler_CG_ITEM::OnCG_ITEM_USE_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
MSG_CG_ITEM_USE_SYN * pRecvMsg = (MSG_CG_ITEM_USE_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
RC::eITEM_RESULT rt = pPlayer->GetItemManager()->Use( pRecvMsg->m_atIndex, pRecvMsg->m_atPos );
switch( rt )
{
case RC::RC_ITEM_SUCCESS:
{
MSG_CG_ITEM_USE_ACK msg;
msg.m_byCategory = CG_ITEM;
msg.m_byProtocol = CG_ITEM_USE_ACK;
msg.m_atIndex = pRecvMsg->m_atIndex;
msg.m_atPos = pRecvMsg->m_atPos;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
break;
default:
{
MSG_CG_ITEM_USE_NAK msg;
msg.m_byCategory = CG_ITEM;
msg.m_byProtocol = CG_ITEM_USE_NAK;
msg.m_dwErrorCode = rt;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
}
}
VOID Handler_CG_ITEM::OnCG_ITEM_SELL_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
MSG_CG_ITEM_SELL_SYN * pRecvMsg = (MSG_CG_ITEM_SELL_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
RC::eITEM_RESULT rt = pPlayer->GetItemManager()->Sell( pRecvMsg->m_atIndex, pRecvMsg->m_atPos );
switch( rt )
{
case RC::RC_ITEM_SUCCESS:
{
MSG_CG_ITEM_SELL_ACK msg;
msg.m_byCategory = CG_ITEM;
msg.m_byProtocol = CG_ITEM_SELL_ACK;
msg.m_atIndex = pRecvMsg->m_atIndex;
msg.m_atPos = pRecvMsg->m_atPos;
msg.m_Money = pPlayer->GetMoney();
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
break;
default:
{
MSG_CG_ITEM_SELL_NAK msg;
msg.m_byCategory = CG_ITEM;
msg.m_byProtocol = CG_ITEM_SELL_NAK;
msg.m_dwErrorCode = rt;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
}
}
VOID Handler_CG_ITEM::OnCG_ITEM_BUY_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
MSG_CG_ITEM_BUY_SYN * pRecvMsg = (MSG_CG_ITEM_BUY_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
MSG_CG_ITEM_BUY_ACK amsg;
RC::eITEM_RESULT rt = pPlayer->GetItemManager()->Buy( pRecvMsg->m_dwShopListID, pRecvMsg->m_ShopTabIndex, pRecvMsg->m_ShopItemIndex, &amsg.m_TotalInfo );
switch( rt )
{
case RC::RC_ITEM_SUCCESS:
{
amsg.m_Money = pPlayer->GetMoney();
pPlayer->SendPacket( &amsg, amsg.GetSize() );
}
break;
default:
{
MSG_CG_ITEM_BUY_NAK msg;
msg.m_dwErrorCode = rt;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
}
}
VOID Handler_CG_ITEM::OnCG_ITEM_DROP_MONEY_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
MSG_CG_ITEM_DROP_MONEY_SYN * pRecvMsg = (MSG_CG_ITEM_DROP_MONEY_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
RC::eITEM_RESULT rt = pPlayer->GetItemManager()->DropMoney( pRecvMsg->m_dwDropMoney );
switch( rt )
{
case RC::RC_ITEM_SUCCESS:
{
/* Nothing To Do */
}
break;
default:
{
MSG_CG_ITEM_DROP_MONEY_NAK msg;
msg.m_byCategory = CG_ITEM;
msg.m_byProtocol = CG_ITEM_DROP_MONEY_NAK;
msg.m_dwErrorCode = rt;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
}
}
class TotalLevelSum
{
float m_limitDistance;
Player * m_pStandardPlayer;
LEVELTYPE m_TotalLevelSum;
public:
TotalLevelSum( Player * pStandardPlayer ):m_TotalLevelSum(0),m_pStandardPlayer(pStandardPlayer){}
~TotalLevelSum(){}
inline LEVELTYPE GetTotalLevelSum() { return m_TotalLevelSum; }
inline VOID SetDistance( float limitDistance ) { m_limitDistance = limitDistance; }
VOID operator()( Player * pPlayer )
{
if( m_limitDistance == 0.0f )
{
m_TotalLevelSum += pPlayer->GetLevel();
}
else
{
if( pPlayer->GetDist(m_pStandardPlayer) < m_limitDistance )
{
m_TotalLevelSum += pPlayer->GetLevel();
}
}
}
};
VOID Handler_CG_ITEM::OnCG_ITEM_PICK_MONEY_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
MSG_CG_ITEM_PICK_MONEY_SYN * pRecvMsg = (MSG_CG_ITEM_PICK_MONEY_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
if( !pPlayer->GetItemManager()->ValidState() )
{
MSG_CG_ITEM_PICK_MONEY_NAK msg;
msg.m_dwErrorCode = RC::RC_ITEM_INVALIDSTATE;
msg.m_dwFieldItemObjectKey = pRecvMsg->m_dwFieldItemObjectKey;
pPlayer->SendPacket( &msg, sizeof( msg ) );
return;
}
Field * pField = pPlayer->GetField();
ObjectFinder<Item> finder( pRecvMsg->m_dwFieldItemObjectKey );
if( !pField->SearchNeighborFieldItemAt( pPlayer->GetSectorIndex(), finder ) )
{
MSG_CG_ITEM_PICK_MONEY_NAK msg;
msg.m_dwErrorCode = RC::RC_ITEM_NOTEXISTITEMATFIELD;
msg.m_dwFieldItemObjectKey = pRecvMsg->m_dwFieldItemObjectKey;
pPlayer->SendPacket( &msg, sizeof( msg ) );
return;
}
Item * pItem = finder.GetTargetObject();
/*
LEVELTYPE TotalLevelOfPlayers = 1;
if( pField->GetMap()->GetZoneType() == eZONETYPE_MISSION )
{
TotalLevelSum sum(pPlayer);
pPlayer->GetField()->ForeachPlayer(sum);
TotalLevelOfPlayers = sum.GetTotalLevelSum();
ASSERT( TotalLevelOfPlayers != 0 );
ASSERT( pPlayer->GetField()->GetPlayerNum() != 0 );
TotalLevelOfPlayers = (TotalLevelOfPlayers==0?1:TotalLevelOfPlayers);
}
else
{
TotalLevelSum sum(pPlayer);
sum.SetDistance(15.0f);
pPlayer->GetField()->ForeachNeighborPlayerAt(pPlayer->GetSectorIndex(), sum);
TotalLevelOfPlayers = sum.GetTotalLevelSum();
ASSERT( TotalLevelOfPlayers != 0 );
ASSERT( pPlayer->GetField()->GetPlayerNum() != 0 );
TotalLevelOfPlayers = (TotalLevelOfPlayers==0?1:TotalLevelOfPlayers);
}
*/
if( pItem->GetFromMonsterKey() != 0 )
{
// 清泼捞衬 固记捞衬
// 付阑
SharingMoney<MSG_CG_ITEM_PICK_MONEY_ACK> sp(pPlayer,pItem->GetMoney());
if( pField->GetMap()->GetZoneType() == eZONETYPE_MISSION )
{
// 固记
pPlayer->GetField()->ForeachPlayer(sp);
}
else
{
// 付阑, 清泼
sp.SetDistance( 15.0f );
pPlayer->GetField()->ForeachNeighborPlayerAt(pPlayer->GetSectorIndex(), sp);
}
}
// pPlayer->SetMoney( pPlayer->GetMoney() +pItem->GetMoney());
pPlayer->PlusMoney( pItem->GetMoney() ); // SetMoney肺 捣 冈绰 何盒 傈何 PlusMoney()肺 背眉吝(泅芒)
pPlayer->GetField()->LeaveField( pItem );
ObjectFactory::Instance()->FreeObject( pItem );
MSG_CG_ITEM_PICK_MONEY_ACK sendMsg;
sendMsg.m_Money = pPlayer->GetMoney();
pPlayer->SendPacket( &sendMsg, sizeof( sendMsg ) );
}
Handler_CG_ITEM_IMPL( CG_ITEM_QUICK_LINKITEM_SYN )
{
MSG_CG_ITEM_QUICK_LINKITEM_SYN * pRecvMsg = (MSG_CG_ITEM_QUICK_LINKITEM_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
RC::eQUICK_RESULT rt = pPlayer->GetQuickManager()->LinkItem( pRecvMsg->m_OrgPos, pRecvMsg->m_ToPos );
switch( rt )
{
case RC::RC_QUICK_SUCCESS:
{
MSG_CG_ITEM_QUICK_LINKITEM_ACK msg;
msg.m_OrgPos = pRecvMsg->m_OrgPos;
msg.m_ToPos = pRecvMsg->m_ToPos;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
break;
default:
{
MSG_CG_ITEM_QUICK_LINKITEM_NAK msg;
msg.m_dwErrorCode = rt;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
}
}
Handler_CG_ITEM_IMPL( CG_ITEM_QUICK_LINKSKILL_SYN )
{
MSG_CG_ITEM_QUICK_LINKSKILL_SYN * pRecvMsg = (MSG_CG_ITEM_QUICK_LINKSKILL_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
RC::eQUICK_RESULT rt = pPlayer->GetQuickManager()->LinkSkill( pRecvMsg->m_SkillCode, pRecvMsg->m_ToPos );
switch( rt )
{
case RC::RC_QUICK_SUCCESS:
{
MSG_CG_ITEM_QUICK_LINKSKILL_ACK msg;
msg.m_SkillCode = pRecvMsg->m_SkillCode;
msg.m_ToPos = pRecvMsg->m_ToPos;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
break;
default:
{
MSG_CG_ITEM_QUICK_LINKSKILL_NAK msg;
msg.m_dwErrorCode = rt;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
}
}
Handler_CG_ITEM_IMPL( CG_ITEM_QUICK_UNLINK_SYN )
{
MSG_CG_ITEM_QUICK_UNLINK_SYN * pRecvMsg = (MSG_CG_ITEM_QUICK_UNLINK_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
RC::eQUICK_RESULT rt = pPlayer->GetQuickManager()->Unlink( pRecvMsg->m_atPos );
switch( rt )
{
case RC::RC_QUICK_SUCCESS:
{
MSG_CG_ITEM_QUICK_UNLINK_ACK msg;
msg.m_atPos = pRecvMsg->m_atPos;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
break;
default:
{
MSG_CG_ITEM_QUICK_UNLINK_NAK msg;
msg.m_dwErrorCode = rt;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
}
}
Handler_CG_ITEM_IMPL( CG_ITEM_QUICK_MOVE_SYN )
{
MSG_CG_ITEM_QUICK_MOVE_SYN * pRecvMsg = (MSG_CG_ITEM_QUICK_MOVE_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
RC::eQUICK_RESULT rt = pPlayer->GetQuickManager()->Move( pRecvMsg->m_fromPos, pRecvMsg->m_toPos );
switch( rt )
{
case RC::RC_QUICK_SUCCESS:
{
MSG_CG_ITEM_QUICK_MOVE_ACK msg;
msg.m_fromPos = pRecvMsg->m_fromPos;
msg.m_toPos = pRecvMsg->m_toPos;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
break;
default:
{
MSG_CG_ITEM_QUICK_MOVE_NAK msg;
msg.m_dwErrorCode = rt;
pPlayer->SendPacket( &msg, sizeof( msg ) );
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -