📄 handler_cg_trade.cpp
字号:
#include "stdafx.h"
#include ".\Handler_CG_TRADE.h"
#include ".\TradeManager.h"
#include ".\Player.h"
#include ".\PlayerManager.h"
#include ".\TradeSlotContainer.h"
#include "GameServer.h"
Handler_CG_TRADE::Handler_CG_TRADE()
{
}
Handler_CG_TRADE::~Handler_CG_TRADE()
{
}
Handler_CG_TRADE_IMPL( CG_TRADE_REQ_SYN )
{
MSG_CG_TRADE_REQ_SYN * pRecvMsg = (MSG_CG_TRADE_REQ_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
if( !pPlayer->GetField() ) return;
// 芭贰 夸没
Player * pTargetPlayer = PlayerManager::Instance()->FindPlayerForObjectKey( pRecvMsg->m_dwTargetPlayerKey );
if( !pTargetPlayer || !pTargetPlayer->GetField() ||
pTargetPlayer->GetBehave() != PLAYER_BEHAVE_IDLE_STATE ||
pPlayer->GetBehave() != PLAYER_BEHAVE_IDLE_STATE )
{
MSG_CG_TRADE_REQ_NAK nmsg;
nmsg.m_dwErrorCode = 1982;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
return;
}
// Target(惑措规)俊霸 芭贰 夸没茄促绰 皋技瘤 焊晨
MSG_CG_TRADE_REQ_CMD cmsg;
cmsg.m_dwPlayerKey = pPlayer->GetObjectKey();
pTargetPlayer->SendPacket( &cmsg, sizeof(cmsg) );
// 俺牢 芭贰 夸没 肺弊
GAMELOG->WriteItemTradeStatus( pPlayer, g_pGameServer->GetServerGUID(), pTargetPlayer, 0 );
// 俺牢 芭贰 夸没 肺弊 场
}
Handler_CG_TRADE_IMPL( CG_TRADE_RES_SYN )
{
// 芭贰 夸没俊 措茄 措翠 菩哦
MSG_CG_TRADE_RES_SYN * pRecvMsg = (MSG_CG_TRADE_RES_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
if( !pPlayer->GetField() ) return;
Player * pRequestPlayer = PlayerManager::Instance()->FindPlayerForObjectKey( pRecvMsg->m_dwPlayerKey );
if( !pRequestPlayer || !pRequestPlayer->GetField() ||
pPlayer->GetBehave() != PLAYER_BEHAVE_IDLE_STATE ||
pRequestPlayer->GetBehave() != PLAYER_BEHAVE_IDLE_STATE )
{
MSG_CG_TRADE_RES_NAK nmsg;
nmsg.m_dwErrorCode = 1983;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
return;
}
if( pRecvMsg->m_Type == MSG_CG_TRADE_RES_SYN::ACCEPT )
{
// 荐遏
if( FALSE == g_TradeManager.CreateTradeContainer(pPlayer, pRequestPlayer) )
{
MSG_CG_TRADE_RES_NAK nmsg;
nmsg.m_dwErrorCode = 1989;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
}
else
{
MSG_CG_TRADE_RES_ACK amsg;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
MSG_CG_TRADE_RES_CMD cmsg;
cmsg.m_Type = MSG_CG_TRADE_RES_CMD::ACCEPT;
pRequestPlayer->SendPacket( &cmsg, sizeof(cmsg) );
// 俺牢 芭贰 夸没 荐遏
GAMELOG->WriteItemTradeStatus( pPlayer, g_pGameServer->GetServerGUID(), pRequestPlayer, 1 );
// 俺牢 芭贰 夸没 荐遏 场
}
}
else
{
// 芭例
MSG_CG_TRADE_RES_CMD cmsg;
cmsg.m_Type = MSG_CG_TRADE_RES_CMD::REFUSE;
pRequestPlayer->SendPacket( &cmsg, sizeof(cmsg) );
// 俺牢 芭贰 夸没 芭例
GAMELOG->WriteItemTradeStatus( pPlayer, g_pGameServer->GetServerGUID(), pRequestPlayer, 2 );
// 俺牢 芭贰 夸没 芭例 场
}
}
Handler_CG_TRADE_IMPL( CG_TRADE_PUT_SYN )
{
MSG_CG_TRADE_PUT_SYN * pRecvMsg = (MSG_CG_TRADE_PUT_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
if( !pPlayer->GetField() ) return;
MSG_CG_TRADE_PUT_CMD cmsg;
RC::eTRADE_RESULT rt = g_TradeManager.PutItem( pPlayer, pRecvMsg->m_OrgPos, cmsg.m_TradePos, cmsg.m_ItemStream );
switch(rt)
{
case RC::RC_TRADE_SUCCESS:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
MSG_CG_TRADE_PUT_ACK amsg;
amsg.m_OrgPos = pRecvMsg->m_OrgPos;
amsg.m_TradePos = cmsg.m_TradePos;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
// 惑措祈俊 舅妨霖促.
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
break;
/*
case RC::RC_TRADE_CANCEL:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
if( g_TradeManager.DestroyTradeContainer( pPlayer ) )
{
MSG_CG_TRADE_CANCEL_CMD amsg;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
MSG_CG_TRADE_CANCEL_CMD cmsg;
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
}
break;
*/
default:
{
MSG_CG_TRADE_PUT_NAK nmsg;
nmsg.m_dwErrorCode = 1985;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
return;
}
}
}
Handler_CG_TRADE_IMPL( CG_TRADE_PUT_MONEY_SYN )
{
MSG_CG_TRADE_PUT_MONEY_SYN * pRecvMsg = (MSG_CG_TRADE_PUT_MONEY_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
if( !pPlayer->GetField() ) return;
RC::eTRADE_RESULT rt = g_TradeManager.PutMoney( pPlayer, pRecvMsg->m_money );
switch(rt)
{
case RC::RC_TRADE_SUCCESS:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
MSG_CG_TRADE_PUT_MONEY_ACK amsg;
amsg.m_money = pRecvMsg->m_money;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
// 惑措祈俊 舅妨霖促.
MSG_CG_TRADE_PUT_MONEY_CMD cmsg;
cmsg.m_money = pRecvMsg->m_money;
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
break;
/*
case RC::RC_TRADE_CANCEL:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
if( g_TradeManager.DestroyTradeContainer( pPlayer ) )
{
MSG_CG_TRADE_CANCEL_CMD amsg;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
MSG_CG_TRADE_CANCEL_CMD cmsg;
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
}
break;
*/
default:
{
MSG_CG_TRADE_PUT_NAK nmsg;
nmsg.m_dwErrorCode = 1985;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
return;
}
}
}
Handler_CG_TRADE_IMPL( CG_TRADE_GET_SYN )
{
MSG_CG_TRADE_GET_SYN * pRecvMsg = (MSG_CG_TRADE_GET_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
if( !pPlayer->GetField() ) return;
RC::eTRADE_RESULT rt = g_TradeManager.TakeItem( pPlayer, pRecvMsg->m_TradePos );
switch(rt)
{
case RC::RC_TRADE_SUCCESS:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
MSG_CG_TRADE_GET_ACK amsg;
amsg.m_TradePos = pRecvMsg->m_TradePos;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
// 惑措祈俊 舅妨霖促.
MSG_CG_TRADE_GET_CMD cmsg;
cmsg.m_TradePos = pRecvMsg->m_TradePos;
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
break;
/*
case RC::RC_TRADE_CANCEL:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
if( g_TradeManager.DestroyTradeContainer( pPlayer ) )
{
MSG_CG_TRADE_CANCEL_CMD amsg;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
MSG_CG_TRADE_CANCEL_CMD cmsg;
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
}
break;
*/
default:
{
MSG_CG_TRADE_GET_NAK nmsg;
nmsg.m_dwErrorCode = 1996;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
return;
}
}
}
Handler_CG_TRADE_IMPL( CG_TRADE_GET_MONEY_SYN )
{
MSG_CG_TRADE_GET_MONEY_SYN * pRecvMsg = (MSG_CG_TRADE_GET_MONEY_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
if( !pPlayer->GetField() ) return;
RC::eTRADE_RESULT rt = g_TradeManager.TakeMoney( pPlayer, pRecvMsg->m_money );
switch(rt)
{
case RC::RC_TRADE_SUCCESS:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
MSG_CG_TRADE_GET_MONEY_ACK amsg;
amsg.m_money = pRecvMsg->m_money;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
// 惑措祈俊 舅妨霖促.
MSG_CG_TRADE_GET_MONEY_CMD cmsg;
cmsg.m_money = pRecvMsg->m_money;
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
break;
/*
case RC::RC_TRADE_CANCEL:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
if( g_TradeManager.DestroyTradeContainer( pPlayer ) )
{
MSG_CG_TRADE_CANCEL_CMD amsg;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
MSG_CG_TRADE_CANCEL_CMD cmsg;
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
}
break;
*/
default:
{
MSG_CG_TRADE_GET_MONEY_NAK nmsg;
nmsg.m_dwErrorCode = 1997;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
return;
}
}
}
Handler_CG_TRADE_IMPL( CG_TRADE_PROPOSAL_SYN )
{
MSG_CG_TRADE_PROPOSAL_SYN * pRecvMsg = (MSG_CG_TRADE_PROPOSAL_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
if( !pPlayer->GetField() ) return;
RC::eTRADE_RESULT rt = g_TradeManager.Proposal( pPlayer );
switch(rt)
{
case RC::RC_TRADE_SUCCESS:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
MSG_CG_TRADE_PROPOSAL_ACK amsg;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
// 惑措祈俊 舅妨霖促.
MSG_CG_TRADE_PROPOSAL_CMD cmsg;
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
break;
/*
case RC::RC_TRADE_CANCEL:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
if( g_TradeManager.DestroyTradeContainer( pPlayer ) )
{
MSG_CG_TRADE_CANCEL_CMD amsg;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
MSG_CG_TRADE_CANCEL_CMD cmsg;
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
}
break;
*/
default:
{
MSG_CG_TRADE_PROPOSAL_NAK nmsg;
nmsg.m_dwErrorCode = 2101;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
return;
}
}
}
Handler_CG_TRADE_IMPL( CG_TRADE_MODIFY_SYN )
{
MSG_CG_TRADE_MODIFY_SYN * pRecvMsg = (MSG_CG_TRADE_MODIFY_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
if( !pPlayer->GetField() ) return;
RC::eTRADE_RESULT rt = g_TradeManager.Modify( pPlayer );
switch(rt)
{
case RC::RC_TRADE_SUCCESS:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
MSG_CG_TRADE_MODIFY_ACK amsg;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
// 惑措祈俊 舅妨霖促.
MSG_CG_TRADE_MODIFY_CMD cmsg;
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
break;
/*
case RC::RC_TRADE_CANCEL:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
if( g_TradeManager.DestroyTradeContainer( pPlayer ) )
{
MSG_CG_TRADE_CANCEL_CMD amsg;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
MSG_CG_TRADE_CANCEL_CMD cmsg;
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
}
break;
*/
default:
{
MSG_CG_TRADE_MODIFY_NAK nmsg;
nmsg.m_dwErrorCode = 2101;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
return;
}
}
}
Handler_CG_TRADE_IMPL( CG_TRADE_ACCEPT_SYN )
{
MSG_CG_TRADE_ACCEPT_SYN * pRecvMsg = (MSG_CG_TRADE_ACCEPT_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
if( !pPlayer->GetField() ) return;
MSG_CG_TRADE_TRADE_BRD bmsg1;
MSG_CG_TRADE_TRADE_BRD bmsg2;
RC::eTRADE_RESULT rt = g_TradeManager.Exchange( pPlayer, bmsg1.m_TradeInfo, bmsg1.m_Money, bmsg2.m_TradeInfo, bmsg2.m_Money );
switch(rt)
{
case RC::RC_TRADE_COUNTERPARTNER_NOTACCEPT:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
MSG_CG_TRADE_ACCEPT_ACK amsg;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
// 惑措祈俊 舅妨霖促.
MSG_CG_TRADE_ACCEPT_CMD cmsg;
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
break;
/*
case RC::RC_TRADE_CANCEL:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
if( g_TradeManager.DestroyTradeContainer( pPlayer ) )
{
MSG_CG_TRADE_CANCEL_CMD amsg;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
MSG_CG_TRADE_CANCEL_CMD cmsg;
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
}
break;
*/
case RC::RC_TRADE_SUCCESS:
{
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
pPlayer->SendPacket( &bmsg1, bmsg1.GetSize() );
// 惑措祈俊 舅妨霖促.
pCounterPlayer->SendPacket( &bmsg2, bmsg2.GetSize() );
BOOL bRet = g_TradeManager.DestroyTradeContainer( pPlayer );
ASSERT( bRet );
}
break;
default:
{
MSG_CG_TRADE_ACCEPT_NAK nmsg;
nmsg.m_dwErrorCode = rt;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
return;
}
}
}
Handler_CG_TRADE_IMPL( CG_TRADE_CANCEL_SYN )
{
MSG_CG_TRADE_CANCEL_SYN * pRecvMsg = (MSG_CG_TRADE_CANCEL_SYN *)pMsg;
Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
ASSERT( pPlayer );
if( !pPlayer ) return ;
if( !pPlayer->GetField() ) return;
if( !g_TradeManager.ValidState(pPlayer) )
{
MSG_CG_TRADE_CANCEL_NAK nmsg;
//nmsg.m_dwErrorCode = 19990;
pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
return;
}
Player * pCounterPlayer = pPlayer->GetTradeContainer()->GetCounterPlayer();
if( g_TradeManager.DestroyTradeContainer( pPlayer ) )
{
MSG_CG_TRADE_CANCEL_ACK amsg;
pPlayer->SendPacket( &amsg, sizeof(amsg) );
MSG_CG_TRADE_CANCEL_CMD cmsg;
pCounterPlayer->SendPacket( &cmsg, sizeof(cmsg) );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -