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

📄 handler_dg_charinfo.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "stdafx.h"
#include ".\handler_dg_charinfo.h"
#include <PacketStruct_DG.h>
#include <PacketStruct_CG.h>
#include <PacketStruct_AG.h>
#include "PlayerManager.h"
#include "Player.h"
#include <Macro.h>
#include "ServerSession.h"
#include <VarPacket.h>
#include "ItemManager.h"
#include "SCItemSlotContainer.h"
#include "DropManager.h"
#include "ObjectFactory.h"
#include "PlayerDisconnectHandler.h"
#include "QuestManager.h"
#include "MissionManager.h"
#include "Skill.h"
#include "SkillManager.h"
#include "GameZone.h"
#include "GameZoneManager.h"
#include "WarehouseSlotContainer.h"
#include "QuickManager.h"
#include "EventInventorySlotContainer.h"


Handler_DG_CHARINFO::Handler_DG_CHARINFO()
{
}

Handler_DG_CHARINFO::~Handler_DG_CHARINFO()
{
}
Handler_DG_CHARINFO_IMPL( DG_CHARINFO_CHAR_ITEM_CMD )
{
	MSG_DG_CHARINFO_CHAR_ITEM_CMD * pRecvMsg = (MSG_DG_CHARINFO_CHAR_ITEM_CMD *)pMsg;
	DWORD UserKey = pRecvMsg->m_dwKey;
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( UserKey );
	if( !pPlayer ) return ;

	pPlayer->SetCharInfo( &pRecvMsg->m_CharacterInfo );

	pPlayer->SerializeItemTotalInfo( pRecvMsg->m_ItemInfo, SERIALIZE_STORE );

}
Handler_DG_CHARINFO_IMPL( DG_CHARINFO_SKILL_CMD )
{
	MSG_DG_CHARINFO_SKILL_CMD * pRecvMsg = (MSG_DG_CHARINFO_SKILL_CMD *)pMsg;
	DWORD UserKey = pRecvMsg->m_dwKey;
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( UserKey );
	if( !pPlayer ) return ;

	pPlayer->SerializeSkillTotalInfo( pRecvMsg->m_SkillInfo, SERIALIZE_STORE );
}
Handler_DG_CHARINFO_IMPL( DG_CHARINFO_QUICK_CMD )
{
	MSG_DG_CHARINFO_QUICK_CMD * pRecvMsg = (MSG_DG_CHARINFO_QUICK_CMD *)pMsg;
	DWORD UserKey = pRecvMsg->m_dwKey;
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( UserKey );
	if( !pPlayer ) return ;

	pPlayer->SerializeQuickTotalInfo( pRecvMsg->m_QuickInfo, SERIALIZE_STORE );
	pPlayer->GetQuickManager()->UpdateOriginalItems();
}

Handler_DG_CHARINFO_IMPL( DG_CHARINFO_STYLE_CMD )
{
	MSG_DG_CHARINFO_STYLE_CMD * pRecvMsg = (MSG_DG_CHARINFO_STYLE_CMD *)pMsg;
	DWORD UserKey = pRecvMsg->m_dwKey;
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( UserKey );
	if( !pPlayer ) return ;

	pPlayer->SerializeStyleTotalInfo( pRecvMsg->m_StyleInfo, SERIALIZE_STORE );
}

Handler_DG_CHARINFO_IMPL( DG_CHARINFO_QUEST_CMD )
{
	MSG_DG_CHARINFO_QUEST_CMD * pRecvMsg = (MSG_DG_CHARINFO_QUEST_CMD *)pMsg;
	DWORD UserKey = pRecvMsg->m_dwKey;
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( UserKey );
	if( !pPlayer ) return ;

	pPlayer->GetMissionManager()->SerializeStream( pRecvMsg->m_pMissionStream, MAX_MISSIONSTREAM_SIZE, SERIALIZE_STORE );
	pPlayer->GetQuestManager()->SerializeStream( pRecvMsg->m_pQuestStream, MAX_QUESTSTREAM_SIZE, SERIALIZE_STORE );

	// Agent肺 QUEST沥焊 焊晨
	/*MSG_AG_CHARINFO_QUEST_CMD msg;
	memcpy( msg.m_pMissionStream, pRecvMsg->m_pMissionStream, MAX_MISSIONSTREAM_SIZE );
	memcpy( msg.m_pQuestStream, pRecvMsg->m_pQuestStream, MAX_MISSIONSTREAM_SIZE );
	pPlayer->SendPacket( &msg, sizeof(msg) );*/
}
/*
Handler_DG_CHARINFO_IMPL( DG_CHARINFO_WAREHOUSE_CMD )
{
	MSG_DG_CHARINFO_WAREHOUSE_CMD * pRecvMsg = (MSG_DG_CHARINFO_WAREHOUSE_CMD *)pMsg;
	DWORD UserKey = pRecvMsg->m_dwKey;
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( UserKey );
	if( !pPlayer ) return ;

	pPlayer->SerializeWarehouseTotalInfo( pRecvMsg->m_ItemInfo, SERIALIZE_STORE);
}
*/
Handler_DG_CHARINFO_IMPL( DG_CHARINFO_UDPATE_ACK )
{
	MSG_DG_CHARINFO_UDPATE_ACK * pRecvMsg = (MSG_DG_CHARINFO_UDPATE_ACK *)pMsg;
	DWORD UserKey = pRecvMsg->m_dwKey;
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( UserKey );
	if( !pPlayer ) return;

	/*
	sSWITCH( pRecvMsg->m_byType )
	CASE( MSG_DG_CHARINFO_UDPATE_ACK::UNREGISTER )
		MSG_AG_CONNECTION_UNREGISTER_ACK msg;
		pPlayer->SendPacket( &msg, sizeof(msg) );
	DEFAULT
		
	eSWITCH
	*/
	MSG_AG_ZONE_ROOM_LEAVE_ACK msg;
	pPlayer->SendPacket( &msg, sizeof(msg) );

	PlayerManager::Instance()->RemovePlayer( pPlayer );
	ObjectFactory::Instance()->FreeObject( pPlayer );
}

class PassiveSkillListOpr
{
	BYTE		m_byCount;
	SLOTCODE	*m_SkillCodeArray;
public:
	PassiveSkillListOpr( SLOTCODE *SkillCodeArray ) : m_SkillCodeArray(SkillCodeArray), m_byCount(0) {}
	BYTE		GetCount()		{ return m_byCount; }

	VOID operator () ( Skill *pSkill ) 
	{
		m_SkillCodeArray[m_byCount] = pSkill->GetSkillCode();
		++m_byCount;
	}
};

Handler_DG_CHARINFO_IMPL( DG_CHARINFO_ALL_REQ_ACK )
{
	MSG_DG_CHARINFO_ALL_REQ_ACK * pRecvMsg = (MSG_DG_CHARINFO_ALL_REQ_ACK *)pMsg;
	DWORD UserKey = pRecvMsg->m_dwKey;
	// 某腐磐 沥焊甸 历厘
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( UserKey );
	if( !pPlayer ) return;

	sSWITCH( pRecvMsg->m_byType )
	CASE( MSG_DG_CHARINFO_ALL_REQ_ACK::JOIN_VILLAGE )


		
		MSG_CG_CHARINFO_CHAR_ITEM_CMD msg1;
		pPlayer->CopyToCharInfo( msg1.m_CharacterInfo );
		pPlayer->SerializeInventoryTotalInfo( msg1.m_ItemInfo, SERIALIZE_LOAD );
		pPlayer->SendPacket( &msg1, msg1.GetSize() );

		MSG_CG_CHARINFO_SKILL_CMD msg2;
		pPlayer->SerializeSkillTotalInfo( msg2.m_SkillInfo, SERIALIZE_LOAD );
		pPlayer->SendPacket( &msg2, msg2.GetSize() );

		// 菩矫宏 胶懦府胶飘绰 宏肺靛肺 朝妨具茄促.
/*		MSG_CG_SKILL_PASSIVE_SKILL_LIST_CMD msg3;
		PassiveSkillListOpr PassiveOpr( msg3.m_SkillCode );
		pPlayer->GetSkillManager()->ForEachPassiveSkill( PassiveOpr );
		msg3.m_dwObjectKey = pPlayer->GetObjectKey();
		msg3.m_byCount = PassiveOpr.GetCount();
		pPlayer->SendPacketAround( &msg3, msg3.GetSize() );*/

		MSG_CG_CHARINFO_QUICK_CMD msg4;
		pPlayer->SerializeQuickTotalInfo( msg4.m_QuickInfo, SERIALIZE_LOAD );
		pPlayer->SendPacket( &msg4, msg4.GetSize() );

		MSG_CG_CHARINFO_STYLE_CMD msg5;
		pPlayer->SerializeStyleTotalInfo( msg5.m_StyleInfo, SERIALIZE_LOAD );
		pPlayer->SendPacket( &msg5, msg5.GetSize() );

		//SUNLOG( eFULL_LOG,  "[U:%d,P:%d,ID:%s]:付阑俊 甸绢 咳", pPlayer->GetUserKey(), pPlayer->GetObjectKey(), pPlayer->GetUserID() );
	eSWITCH

	pPlayer->SetState( PLAYER_LOADING );

	//肺弊牢矫 酒捞袍 沥焊 巢扁扁
	GAMELOG->WriteInvenInfoOnLogin( pPlayer, g_pGameServer->GetServerGUID() );
	//肺弊牢矫 酒捞袍 沥焊 巢扁扁 场

	//某腐磐 立加 肺弊
	GAMELOG->WriteCharConnect( pPlayer, g_pGameServer->GetServerGUID() );
	//某腐磐 立加 肺弊 场

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

}

Handler_DG_CHARINFO_IMPL( DG_CHARINFO_ALL_REQ_NAK )
{
	MSG_DG_CHARINFO_ALL_REQ_NAK * pRecvMsg = (MSG_DG_CHARINFO_ALL_REQ_NAK *)pMsg;
	DWORD UserKey = pRecvMsg->m_dwKey;
	// 某腐磐 沥焊甸 历厘
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( UserKey );
	if( !pPlayer ) return;

	SUNLOG( eCRITICAL_LOG,  "[Handler_DG_CHARINFO_IMPL( DG_CHARINFO_ALL_REQ_NAK )] !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
	SUNLOG( eCRITICAL_LOG,  "[Handler_DG_CHARINFO_IMPL( DG_CHARINFO_ALL_REQ_NAK )] [U:%d,ID:%s]DG_CHARINFO_ALL_REQ_NAK : 甸绢 棵 荐 绝促!!!!!!!!!!!!!!!!!!!!!!!!!!!", pPlayer->GetUserKey(), pPlayer->GetUserID() );
	SUNLOG( eCRITICAL_LOG,  "[Handler_DG_CHARINFO_IMPL( DG_CHARINFO_ALL_REQ_NAK )] !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

	MSG_AG_ZONE_ROOM_JOIN_NAK msg;
	msg.m_dwErrorCode = pRecvMsg->m_dwErrorCode;
	pPlayer->SendPacket( &msg, sizeof(msg) );
}


Handler_DG_CHARINFO_IMPL( DG_ITEM_SERIAL_ACK )
{
	MSG_DG_ITEM_SERIAL_ACK * pRecvMsg = (MSG_DG_ITEM_SERIAL_ACK *)pMsg;

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

	SCSlotContainer *pContainer = pPlayer->GetItemManager()->GetItemSlotContainer(pRecvMsg->m_SlotIdx);
	SCSlot & slot = pContainer->GetSlot(pRecvMsg->m_ItemPos);
	ASSERT( slot.GetSerial() == TEMP_DBSERIAL_VALUE );
	slot.SetSerial( pRecvMsg->m_DBSerial );
	pContainer->SetLock(pRecvMsg->m_ItemPos,FALSE);
}
/*
Handler_DG_CHARINFO_IMPL( DG_ITEM_WAREHOUSEITEMALL_ACK )
{
	MSG_DG_ITEM_WAREHOUSEITEMALL_ACK * pRecvMsg = (MSG_DG_ITEM_WAREHOUSEITEMALL_ACK *)pMsg;

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

	ItemManager * pMGR = pPlayer->GetItemManager();
	pPlayer->SerializeWarehouseTotalInfo( pRecvMsg->m_ItemInfo, SERIALIZE_STORE );
	pMGR->SetWarehouseMoney( pRecvMsg->m_Money );

	MSG_CG_ITEM_WAREHOUSEITEMALL_ACK msg;
	msg.m_WarehouseMoney	= pMGR->GetWarehouseMoney();
	pPlayer->SerializeWarehouseTotalInfo( msg.m_ItemInfo, SERIALIZE_LOAD );
	pPlayer->SendPacket( &msg, msg.GetSize() );
}
*/
Handler_DG_CHARINFO_IMPL( DG_WAREHOUSE_START_ACK )
{
	MSG_DG_WAREHOUSE_START_ACK * pRecvMsg = (MSG_DG_WAREHOUSE_START_ACK *)pMsg;

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

	// 芒绊 矫累 惑怕肺 官厕
	CWarehouseSlotContainer * pContainer = pPlayer->GetWarehouseContainer();
	ASSERT( !pContainer->IsStarted() );
	pContainer->SerializeItemInfo( pRecvMsg->m_ItemInfo, SERIALIZE_STORE );
	pContainer->SerializeMoney( pRecvMsg->m_WarehouseMoney );
	pContainer->StartWarehouse();

	MSG_CG_WAREHOUSE_START_ACK msg;
	msg.m_WarehouseMoney	= pContainer->GetCurMoney();
	pContainer->SerializeItemInfo( msg.m_ItemInfo, SERIALIZE_LOAD );
	pPlayer->SendPacket( &msg, msg.GetSize() );

	//芒绊 沥焊 肺弊 巢扁扁
	for( POSTYPE i=0; i < pContainer->GetMaxSlotNum(); i++ )
	{
		if( !pContainer->IsEmpty(i) )
		{
			SCItemSlot& rItemSlot = (SCItemSlot&)pContainer->GetSlot(i);
			GAMELOG->WriteWareHouseInfo( pPlayer, g_pGameServer->GetServerGUID(), &rItemSlot, (DWORD)pContainer->GetCurMoney() );
		}
	}
	//芒绊 沥焊 肺弊 巢扁扁 场
}

Handler_DG_CHARINFO_IMPL( DG_WAREHOUSE_START_NAK )
{
	MSG_DG_WAREHOUSE_START_NAK * pRecvMsg = (MSG_DG_WAREHOUSE_START_NAK *)pMsg;

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

	MSG_CG_WAREHOUSE_START_NAK msg;
	msg.m_dwErrorCode = pRecvMsg->m_dwErrorCode;
	pPlayer->SendPacket( &msg, sizeof(msg) );
}

Handler_DG_CHARINFO_IMPL( DG_WAREHOUSE_END_ACK )
{
	MSG_DG_WAREHOUSE_END_ACK * pRecvMsg = (MSG_DG_WAREHOUSE_END_ACK *)pMsg;

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

	CWarehouseSlotContainer * pContainer = pPlayer->GetWarehouseContainer();

	//芒绊 辆丰 沥焊 肺弊 巢扁扁
	for( POSTYPE i=0; i < pContainer->GetMaxSlotNum(); i++ )
	{
		if( !pContainer->IsEmpty(i) )
		{
			SCItemSlot& rItemSlot = (SCItemSlot&)pContainer->GetSlot(i);
			GAMELOG->WriteWareHouseInfo( pPlayer, g_pGameServer->GetServerGUID(), &rItemSlot, (DWORD)pContainer->GetCurMoney() );
		}
	}
	//芒绊 沥焊 肺弊 巢扁扁 场
	pContainer->ClearAll();

	MSG_CG_WAREHOUSE_END_ACK msg;
	pPlayer->SendPacket( &msg, sizeof(msg) );
}

Handler_DG_CHARINFO_IMPL( DG_WAREHOUSE_END_NAK )
{
	MSG_DG_WAREHOUSE_END_NAK * pRecvMsg = (MSG_DG_WAREHOUSE_END_NAK *)pMsg;

	Player * pPlayer = PlayerManager::Instance()->FindPlayer( pRecvMsg->m_dwKey );
	ASSERT( pPlayer );
	if( !pPlayer ) return ;
		
	CWarehouseSlotContainer * pContainer = pPlayer->GetWarehouseContainer();
	// 矫累惑怕肺 登倒覆
	pContainer->StartWarehouse();

	MSG_CG_WAREHOUSE_END_NAK msg;
	msg.m_dwErrorCode = pRecvMsg->m_dwErrorCode;
	pPlayer->SendPacket( &msg, sizeof(msg) );
}

Handler_DG_CHARINFO_IMPL( DG_EVENT_SELECT_ACK )
{
	MSG_DG_EVENT_SELECT_ACK * pRecvMsg = (MSG_DG_EVENT_SELECT_ACK *)pMsg;

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

	pPlayer->GetEventSlotContainer()->OnSelect( TRUE, &pRecvMsg->m_TotalInfo );

	MSG_CG_EVENT_SELECT_ACK msg;
	pPlayer->GetEventSlotContainer()->Serialize( msg.m_TotalInfo, SERIALIZE_LOAD );
	pPlayer->SendPacket( &msg, msg.GetSize() );

}
Handler_DG_CHARINFO_IMPL( DG_EVENT_SELECT_NAK )
{
	MSG_DG_EVENT_SELECT_NAK * pRecvMsg = (MSG_DG_EVENT_SELECT_NAK *)pMsg;

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

	pPlayer->GetEventSlotContainer()->OnSelect( FALSE, NULL );

	MSG_CG_EVENT_SELECT_NAK msg;
	msg.m_byErrorCode = RC::RC_EVENT_NOTEXIST_EVENTITEM;//pRecvMsg->m_byErrorCode;//< 酒捞袍捞 绝阑 版快父 肺流利栏肺 nak啊 坷霸登绢乐澜
	pPlayer->SendPacket( &msg, sizeof(msg) );

}

Handler_DG_CHARINFO_IMPL( DG_EVENT_UPDATE_ACK )
{
	MSG_DG_EVENT_UPDATE_ACK * pRecvMsg = (MSG_DG_EVENT_UPDATE_ACK *)pMsg;

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


	MSG_CG_EVENT_MOVE_ITEM_TO_INVEN_ACK msg;
	pPlayer->GetEventSlotContainer()->OnMoveItemToInventory( TRUE, pRecvMsg->m_ItemPos, &msg.m_TotalInfo );

	pPlayer->SendPacket( &msg, msg.GetSize() );

}
Handler_DG_CHARINFO_IMPL( DG_EVENT_UPDATE_NAK )
{
	MSG_DG_EVENT_UPDATE_NAK * pRecvMsg = (MSG_DG_EVENT_UPDATE_NAK *)pMsg;

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

	pPlayer->GetEventSlotContainer()->OnMoveItemToInventory( FALSE, 0, NULL );

	MSG_CG_EVENT_MOVE_ITEM_TO_INVEN_NAK msg;
	msg.m_byErrorCode = pRecvMsg->m_byErrorCode;
	pPlayer->SendPacket( &msg, sizeof(msg) );

}

⌨️ 快捷键说明

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