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

📄 handler_cg_trade.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 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 + -