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

📄 handler_cg_item.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "StdAfx.h"
#include ".\handler_cg_item.h"
#include <Protocol_CG.h>
#include <Protocol_DG.h>
#include <PacketStruct_CG.h>
#include <PacketStruct_DG.h>
#include "Player.h"
#include "ItemManager.h"
#include "PlayerManager.h"
#include "GameServer.h"
#include <SCItemSlotContainer.h>
#include "Field.h"
#include "Item.h"
#include "Sector.h"
#include "ObjectFactory.h"
#include "QuickManager.h"
#include "Map.h"
#include "GameServer.h"

Handler_CG_ITEM::Handler_CG_ITEM()
{
}

Handler_CG_ITEM::~Handler_CG_ITEM()
{
}

Handler_CG_ITEM_IMPL( CG_ITEM_ENCHANT_SYN )
{
	MSG_CG_ITEM_ENCHANT_SYN * pRecvMsg = (MSG_CG_ITEM_ENCHANT_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	RC::eITEM_RESULT rt = pPlayer->GetItemManager()->EnchantEx( pRecvMsg->m_TargetPos, pRecvMsg->m_SuccessRateIndex );
	switch( rt )
	{
	case RC::RC_ITEM_ENCHANT_SUCCESS:
		{
			// 己傍
			MSG_CG_ITEM_ENCHANT_SUCCESS_ACK msg;
			//msg.m_TargetPos		= pRecvMsg->m_TargetPos;
			pPlayer->SendPacket(&msg,sizeof(msg));
		}
		break;
	case RC::RC_ITEM_ENCHANT_FAILED:
		{
			// 角菩
			MSG_CG_ITEM_ENCHANT_FAILED_ACK msg;
			//msg.m_TargetPos		= pRecvMsg->m_TargetPos;
			pPlayer->SendPacket(&msg,sizeof(msg));
		}
		break;
	default:
		{
			MSG_CG_ITEM_ENCHANT_NAK msg;
			msg.m_byErrorCode	= rt;
			pPlayer->SendPacket(&msg,sizeof(msg));
		}
	}
}

Handler_CG_ITEM_IMPL( CG_ITEM_ENCHANTUP_SYN )
{
	MSG_CG_ITEM_ENCHANTUP_SYN * pRecvMsg = (MSG_CG_ITEM_ENCHANTUP_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	BYTE Enchant = 0;
	RC::eITEM_RESULT rt = pPlayer->GetItemManager()->Enchant( pRecvMsg->m_TargetPos, Enchant );
	switch( rt )
	{
	case RC::RC_ITEM_ENCHANT_SUCCESS:
		{
			// 己傍
			MSG_CG_ITEM_ENCHANTUP_ACK msg;
			msg.m_TargetPos		= pRecvMsg->m_TargetPos;
			msg.m_TargetItemEnchant = Enchant;
			pPlayer->SendPacket(&msg,sizeof(msg));
		}
		break;
	case RC::RC_ITEM_ENCHANT_DOWN_FAILED:
		{
			// 角菩
			// 促款
			MSG_CG_ITEM_ENCHANTUP_ACK msg;
			msg.m_TargetPos		= pRecvMsg->m_TargetPos;
			msg.m_TargetItemEnchant = Enchant;
			pPlayer->SendPacket(&msg,sizeof(msg));
		}
		break;
	case RC::RC_ITEM_ENCHANT_CRACK_FAILED:
		{
			// 角菩
			// 家戈
			MSG_CG_ITEM_ENCHANTUP_ACK msg;
			msg.m_TargetPos		= pRecvMsg->m_TargetPos;
			msg.m_TargetItemEnchant = 0;
			pPlayer->SendPacket(&msg,sizeof(msg));
		}
		break;
	default:
		{
			MSG_CG_ITEM_ENCHANTUP_NAK msg;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket(&msg,sizeof(msg));
		}
	}
}

Handler_CG_ITEM_IMPL( CG_ITEM_RANKUP_SYN )
{
	MSG_CG_ITEM_RANKUP_SYN * pRecvMsg = (MSG_CG_ITEM_RANKUP_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;
	POSTYPE RankUpItemPos = 0;
	POSTYPE DeletedItemPos = 0;
	MONEY RankUpFare = 0;
	BOOL bCreatedSocket = FALSE;
	
	//珐农诀 矫档 
	GAMELOG->WriteItemRankUpStart( pPlayer, g_pGameServer->GetServerGUID(), pRecvMsg->m_TargetPos[0], pRecvMsg->m_TargetPos[1] );

	RC::eITEM_RESULT rt = pPlayer->GetItemManager()->RankUpEx( pRecvMsg->m_TargetPos[0], pRecvMsg->m_TargetPos[1], 
																RankUpItemPos, DeletedItemPos, RankUpFare, bCreatedSocket );
	switch( rt )
	{
	case RC::RC_ITEM_SUCCESS:
		{
			MSG_CG_ITEM_RANKUP_ACK msg;
			msg.m_TargetPos[0]	= RankUpItemPos;
			msg.m_TargetPos[1]	= DeletedItemPos;
			SCItemSlot & rSlot	= (SCItemSlot &)pPlayer->GetItemManager()->GetItemSlotContainer(SI_INVENTORY)->GetSlot( RankUpItemPos );
			rSlot.CopyOut(msg.m_TargetItemStream);
			msg.m_Money			= pPlayer->GetMoney();
			pPlayer->SendPacket(&msg,sizeof(msg));

			//珐农诀 己傍 肺弊
			GAMELOG->WriteItemRankUpResult( pPlayer, g_pGameServer->GetServerGUID(), &rSlot, (DWORD)RankUpFare, bCreatedSocket );
			//珐农诀 己傍 肺弊 场
		}
		break;
	default:
		{
			MSG_CG_ITEM_RANKUP_NAK msg;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket(&msg,sizeof(msg));
		}
	}
}
Handler_CG_ITEM_IMPL( CG_ITEM_SOCKET_FILL_SYN )
{
	MSG_CG_ITEM_SOCKET_FILL_SYN * pRecvMsg = (MSG_CG_ITEM_SOCKET_FILL_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	RC::eITEM_RESULT rt = pPlayer->GetItemManager()->FillSocket( pRecvMsg->m_SocketItemPos, pRecvMsg->m_TargetPos );
	switch( rt )
	{
	case RC::RC_ITEM_SUCCESS:
		{
			MSG_CG_ITEM_SOCKET_FILL_ACK msg;
			msg.m_SocketItemPos	= pRecvMsg->m_SocketItemPos;
			msg.m_TargetPos		= pRecvMsg->m_TargetPos;
			SCItemSlot & rSlot = (SCItemSlot &)pPlayer->GetItemManager()->GetItemSlotContainer(SI_INVENTORY)->GetSlot( msg.m_TargetPos );
			rSlot.CopyOut(msg.m_TargetItemStream);
			pPlayer->SendPacket(&msg,sizeof(msg));
		}
		break;
	default:
		{
			MSG_CG_ITEM_SOCKET_FILL_NAK msg;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket(&msg,sizeof(msg));
		}
	}
}
Handler_CG_ITEM_IMPL( CG_ITEM_SOCKET_EXTRACT_SYN )
{
	MSG_CG_ITEM_SOCKET_EXTRACT_SYN * pRecvMsg = (MSG_CG_ITEM_SOCKET_EXTRACT_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	RC::eITEM_RESULT rt = pPlayer->GetItemManager()->ExtractSocket( pRecvMsg->m_TargetPos );
	switch( rt )
	{
	case RC::RC_ITEM_EXTRACTSOCKET_SUCCESS:
		{
			MSG_CG_ITEM_SOCKET_EXTRACT_SUCCESS_ACK msg;
			msg.m_TargetPos			= pRecvMsg->m_TargetPos;
			SCItemSlot & rSlot = (SCItemSlot &)pPlayer->GetItemManager()->GetItemSlotContainer(SI_INVENTORY)->GetSlot( msg.m_TargetPos );
			rSlot.CopyOut(msg.m_TargetItemStream);
			pPlayer->SendPacket(&msg,sizeof(msg));
		}
		break;
	case RC::RC_ITEM_EXTRACTSOCKET_FAILED:
		{
			MSG_CG_ITEM_SOCKET_EXTRACT_FAILED_ACK msg;
			msg.m_TargetPos			= pRecvMsg->m_TargetPos; 
			pPlayer->SendPacket(&msg,sizeof(msg));
		}
		break;
	default:
		{
			MSG_CG_ITEM_SOCKET_EXTRACT_NAK msg;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket(&msg,sizeof(msg));
		}
	}
}

Handler_CG_ITEM_IMPL( CG_ITEM_ACCESSORY_CREATE_SYN )
{
	MSG_CG_ITEM_ACCESSORY_CREATE_SYN * pRecvMsg = (MSG_CG_ITEM_ACCESSORY_CREATE_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	MSG_CG_ITEM_ACCESSORY_CREATE_ACK amsg;
	RC::eITEM_RESULT rt = pPlayer->GetItemManager()->CreateAccessory( pRecvMsg->m_type, pRecvMsg->m_SocketItemPos, &amsg.m_ItemInfo );
	switch( rt )
	{
	case RC::RC_ITEM_SUCCESS:
		{
			amsg.m_type = pRecvMsg->m_type;
			amsg.m_SocketItemPos = pRecvMsg->m_SocketItemPos;
			amsg.m_Money = pPlayer->GetMoney();
			pPlayer->SendPacket(&amsg,amsg.GetSize());
		}
		break;
	default:
		{
			MSG_CG_ITEM_ACCESSORY_CREATE_NAK msg;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket(&msg,sizeof(msg));
		}
	}
}
VOID Handler_CG_ITEM::OnCG_ITEM_MOVE_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_CG_ITEM_MOVE_SYN * pRecvMsg = (MSG_CG_ITEM_MOVE_SYN *)pMsg;
	
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	RC::eITEM_RESULT rt = pPlayer->GetItemManager()->Move( pRecvMsg->m_fromIndex, pRecvMsg->m_fromPos, pRecvMsg->m_toIndex, pRecvMsg->m_toPos );
	switch( rt )
	{
	case RC::RC_ITEM_SUCCESS:
		{
			MSG_CG_ITEM_MOVE_ACK msg;
			msg.m_byCategory	= CG_ITEM;
			msg.m_byProtocol	= CG_ITEM_MOVE_ACK;
			msg.m_fromIndex		= pRecvMsg->m_fromIndex;
			msg.m_fromPos		= pRecvMsg->m_fromPos;
			msg.m_toIndex		= pRecvMsg->m_toIndex;
			msg.m_toPos			= pRecvMsg->m_toPos;

			pPlayer->SendPacket( &msg, sizeof( MSG_CG_ITEM_MOVE_ACK ) );

			//肺弊颇老阑 巢变促.
			//1. 芒绊俊 该扁扁
			if(msg.m_fromIndex == SI_INVENTORY && msg.m_toIndex == SI_WAREHOUSE)
			{
				SCItemSlotContainer * pInventory = pPlayer->GetItemManager()->GetItemSlotContainer( SI_INVENTORY );
				SCItemSlot & rSlot = (SCItemSlot &)pInventory->GetSlot(pRecvMsg->m_fromPos);
				GAMELOG->WriteItemMoveInWareHouse( pPlayer, g_pGameServer->GetServerGUID(), TRUE, &rSlot );
			}
			//2. 芒绊俊辑 茫扁
			else if(msg.m_fromIndex == SI_WAREHOUSE && msg.m_toIndex == SI_INVENTORY)
			{
				SCItemSlotContainer * pWareHouse = pPlayer->GetItemManager()->GetItemSlotContainer( SI_WAREHOUSE );
				SCItemSlot & rSlot = (SCItemSlot &)pWareHouse->GetSlot(pRecvMsg->m_fromPos);
				GAMELOG->WriteItemMoveInWareHouse( pPlayer, g_pGameServer->GetServerGUID(), FALSE, &rSlot );
			}

		}
		break;
	case RC::RC_ITEM_INVALIDPOS:
	default:
		{
			MSG_CG_ITEM_MOVE_NAK msg;
			msg.m_byCategory	= CG_ITEM;
			msg.m_byProtocol	= CG_ITEM_MOVE_NAK;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket( &msg, sizeof( MSG_CG_ITEM_MOVE_NAK ) );
		}
	}
}

VOID Handler_CG_ITEM::OnCG_ITEM_PICK_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_CG_ITEM_PICK_SYN * pRecvMsg = (MSG_CG_ITEM_PICK_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;


	MSG_CG_ITEM_PICK_ACK amsg;
	RC::eITEM_RESULT rt = pPlayer->GetItemManager()->Pick( pRecvMsg->m_dwFieldItemObjectKey, &amsg.m_ItemInfo );
	switch( rt )
	{
	case RC::RC_ITEM_SUCCESS:
		{
			pPlayer->SendPacket( &amsg, amsg.GetSize() );
		}
		break;
	default:
		{
			MSG_CG_ITEM_PICK_NAK msg;
			msg.m_dwErrorCode	= rt;
			msg.m_dwFieldItemObjectKey = pRecvMsg->m_dwFieldItemObjectKey;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
	}
}

VOID Handler_CG_ITEM::OnCG_ITEM_DROP_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_CG_ITEM_DROP_SYN * pRecvMsg = (MSG_CG_ITEM_DROP_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	RC::eITEM_RESULT rt = pPlayer->GetItemManager()->Drop( pRecvMsg->m_atIndex, pRecvMsg->m_atPos );
	switch( rt )
	{
	case RC::RC_ITEM_SUCCESS:
		{
			MSG_CG_ITEM_DROP_ACK msg;
			msg.m_byCategory	= CG_ITEM;
			msg.m_byProtocol	= CG_ITEM_DROP_ACK;
			msg.m_atIndex		= pRecvMsg->m_atIndex;
			msg.m_atPos			= pRecvMsg->m_atPos;

			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
		break;
	default:
		{
			MSG_CG_ITEM_DROP_NAK msg;
			msg.m_byCategory	= CG_ITEM;
			msg.m_byProtocol	= CG_ITEM_DROP_NAK;
			msg.m_dwErrorCode	= rt;
			pPlayer->SendPacket( &msg, sizeof( msg ) );
		}
	}
}

VOID Handler_CG_ITEM::OnCG_ITEM_COMBINE_SYN( ServerSession * pServerSession, MSG_BASE * pMsg, WORD wSize )
{
	MSG_CG_ITEM_COMBINE_SYN * pRecvMsg = (MSG_CG_ITEM_COMBINE_SYN *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;

	RC::eITEM_RESULT rt = pPlayer->GetItemManager()->Combine( pRecvMsg->m_fromIndex, pRecvMsg->m_fromPos, pRecvMsg->m_toIndex, pRecvMsg->m_toPos );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -