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

📄 handler_ag_zone.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "StdAfx.h"
#include ".\handler_ag_zone.h"
#include <PacketStruct_AG.h>
#include <PacketStruct_DG.h>
#include "Player.h"
#include "ItemManager.h"
#include "ObjectFactory.h"
#include "GameServer.h"
#include "PartyManager.h"
#include "ServerSession.h"
#include "MissionManager.h"
#include "QuestManager.h"
#include "GameZoneManager.h"
#include "GameLobbyRoom.h"
#include "GameHuntingRoom.h"
#include "GameMissionRoom.h"
#include "GameVillage.h"
#include "GamePVPRoom.h"
#include "PVPManager.h"
#include <LimitedMapPortParser.h>

Handler_AG_ZONE::Handler_AG_ZONE(void)
{
}

Handler_AG_ZONE::~Handler_AG_ZONE(void)
{
}

Handler_AG_ZONE_IMPL( AG_ZONE_LOBBY_CREATE_CMD )
{
	MSG_AG_ZONE_LOBBY_CREATE_CMD * pRecvMsg = (MSG_AG_ZONE_LOBBY_CREATE_CMD *)pMsg;
	DWORD UserKey = pRecvMsg->m_dwKey;
	GameLobbyRoom * pRoom = g_GameZoneManager.CreateLobbyRoom( pRecvMsg->m_RoomKey, pRecvMsg->m_MapCode, 
																pRecvMsg->m_pszRoomTitle, pRecvMsg->m_pszRoomPWD, &pRecvMsg->m_RoomInfo );
	pRoom->SetMasterUserKey( UserKey );
}
Handler_AG_ZONE_IMPL( AG_ZONE_HUNTING_CREATE_CMD )
{
	MSG_AG_ZONE_HUNTING_CREATE_CMD * pRecvMsg = (MSG_AG_ZONE_HUNTING_CREATE_CMD *)pMsg;
	DWORD UserKey = pRecvMsg->m_dwKey;
	GameHuntingRoom * pRoom = g_GameZoneManager.CreateHuntingRoom( pRecvMsg->m_RoomKey, pRecvMsg->m_MapCode, 
																pRecvMsg->m_pszRoomTitle, pRecvMsg->m_pszRoomPWD, &pRecvMsg->m_RoomInfo, &pRecvMsg->m_AdditionalInfo );
	pRoom->SetMasterUserKey( UserKey );
	pRoom->CreateParty( UserKey );
}
Handler_AG_ZONE_IMPL( AG_ZONE_MISSION_CREATE_CMD )
{
	MSG_AG_ZONE_MISSION_CREATE_CMD * pRecvMsg = (MSG_AG_ZONE_MISSION_CREATE_CMD *)pMsg;

	DWORD UserKey = pRecvMsg->m_dwKey;
	GameMissionRoom * pRoom = g_GameZoneManager.CreateMissionRoom( pRecvMsg->m_RoomKey, pRecvMsg->m_MapCode, 
																pRecvMsg->m_pszRoomTitle, pRecvMsg->m_pszRoomPWD, &pRecvMsg->m_RoomInfo );
	pRoom->SetMasterUserKey( UserKey );
	pRoom->CreateParty( UserKey );
}

Handler_AG_ZONE_IMPL( AG_ZONE_PVP_CREATE_CMD )
{
	MSG_AG_ZONE_PVP_CREATE_CMD * pRecvMsg = (MSG_AG_ZONE_PVP_CREATE_CMD *)pMsg;
	DWORD UserKey = pRecvMsg->m_dwKey;

	GamePVPRoom * pRoom = g_GameZoneManager.CreatePVPRoom( pRecvMsg->m_RoomKey, pRecvMsg->m_MapCode, 
																	pRecvMsg->m_pszRoomTitle, pRecvMsg->m_pszRoomPWD, &pRecvMsg->m_RoomInfo, &pRecvMsg->m_AdditionalPVPInfo );
	pRoom->SetMasterUserKey( UserKey );
}

Handler_AG_ZONE_IMPL( AG_ZONE_VILLAGE_CREATE_CMD )
{
	MSG_AG_ZONE_VILLAGE_CREATE_CMD * pRecvMsg = (MSG_AG_ZONE_VILLAGE_CREATE_CMD *)pMsg;
	GameVillage * pRoom = g_GameZoneManager.CreateVillage( pRecvMsg->m_RoomKey, pRecvMsg->m_MapCode, NULL, NULL, NULL );
	//SUNLOG( eFULL_LOG,  "[%d]:付阑 积己", pRecvMsg->m_RoomKey );
}

Handler_AG_ZONE_IMPL( AG_ZONE_ROOM_DESTROY_CMD )
{
	MSG_AG_ZONE_ROOM_DESTROY_CMD * pRecvMsg = (MSG_AG_ZONE_ROOM_DESTROY_CMD *)pMsg;

	g_GameZoneManager.DestroyZone( pRecvMsg->m_RoomKey );
}

Handler_AG_ZONE_IMPL( AG_ZONE_ROOM_JOIN_CMD )
{
	MSG_AG_ZONE_ROOM_JOIN_CMD * pRecvMsg = (MSG_AG_ZONE_ROOM_JOIN_CMD *)pMsg;

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

	GameZone * pZone = g_GameZoneManager.GetZone( pRecvMsg->m_RoomKey );
	if(!pZone) 
	{
		SUNLOG( eCRITICAL_LOG,  "[Handler_AG_ZONE_IMPL( AG_ZONE_ROOM_JOIN_CMD )] MSG_AG_ZONE_ROOM_JOIN_CMD:规虐:%d狼 规捞绝促.!!!!!!!!!!!!!!!!!!!!!!!!!!", pRecvMsg->m_RoomKey );
		return;
	}

	g_GameZoneManager.ReadyPlayer( pRecvMsg->m_RoomKey, pPlayer, pZone->GetEntryFieldCode(), pZone->GetEntryAreaID() );

	//SUNLOG( eFULL_LOG,  "[U:%d,P:%d,ID:%s][%d]:敲饭捞绢 霸烙辑滚 立加沁澜CMD", UserKey, pPlayer->GetObjectKey(), pPlayer->GetUserID(), pRecvMsg->m_RoomKey );
}

Handler_AG_ZONE_IMPL( AG_ZONE_ROOM_JOIN_SYN )
{
	MSG_AG_ZONE_ROOM_JOIN_SYN * pRecvMsg = (MSG_AG_ZONE_ROOM_JOIN_SYN *)pMsg;

	DWORD UserKey = pRecvMsg->m_dwKey;
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( UserKey );
	DEBUG_CODE( if( pPlayer ) return; );
	//////////////////////////////////////////////////////////////
	// 吝汗肺弊牢狼 巩力肺 咯扁俊 吧副 荐 乐促!!!!!!!!
	//////////////////////////////////////////////////////////////

	GameZone * pZone = g_GameZoneManager.GetZone( pRecvMsg->m_RoomKey );
	if(!pZone) 
	{
		SUNLOG( eCRITICAL_LOG,  "[Handler_AG_ZONE_IMPL( AG_ZONE_ROOM_JOIN_SYN )] MSG_AG_ZONE_ROOM_JOIN_SYN:规虐:%d狼 规捞绝促.!!!!!!!!!!!!!!!!!!!!!!!!!!", pRecvMsg->m_RoomKey );
		return;
	}

	// 敲饭捞绢 积己
	pPlayer = (Player *)ObjectFactory::Instance()->AllocObject( PLAYER_OBJECT );
	pPlayer->Create( pServerSession, UserKey, pRecvMsg->m_pszUserID );
	pPlayer->SetObjectKey( pRecvMsg->m_dwPlayerKey );
	pPlayer->SetReservedValue( pRecvMsg->m_dwReservedValue );
	PlayerManager::Instance()->AddPlayer( pPlayer );	//!!!!!!< 敲饭捞绢 虐 傈崔秦具 等绰芭 酒囱啊?

	g_GameZoneManager.ReadyPlayer( pRecvMsg->m_RoomKey, pPlayer, pZone->GetEntryFieldCode(), pZone->GetEntryAreaID() );

	//SUNLOG( eFULL_LOG,  "[U:%d:P:%d:ID:%s][%d]:敲饭捞绢 霸烙辑滚 立加沁澜!", UserKey, pPlayer->GetObjectKey(), pPlayer->GetUserID(), pRecvMsg->m_RoomKey );

	MSG_DG_CHARINFO_ALL_REQ_SYN msg;
	msg.m_dwKey						= UserKey;
	msg.m_bySelectedCharSlotIndex	= pRecvMsg->m_bySelectedCharIndex;
	msg.m_dwCharGUID				= pRecvMsg->m_dwCharGUID;
	// 敲饭捞绢 惑怕 CHARINFO_REQUESTED肺 函版
	pPlayer->SetState( PLAYER_CHARINFO_REQUESTED );	

	switch( pRecvMsg->m_byRoomType )
	{
	case eZONETYPE_VILLAGE:
		{
			msg.m_byType = MSG_DG_CHARINFO_ALL_REQ_SYN::JOIN_VILLAGE;
		}
		break;
	case eZONETYPE_HUNTING:
		{
			msg.m_byType = MSG_DG_CHARINFO_ALL_REQ_SYN::JOIN_HUNTING;
		}
		break;
	case eZONETYPE_MISSION:
		{
			msg.m_byType = MSG_DG_CHARINFO_ALL_REQ_SYN::JOIN_MISSION;
		}
		break;
	case eZONETYPE_LOBBY:
		{
			SUNLOG( eCRITICAL_LOG,  "[Handler_AG_ZONE_IMPL( AG_ZONE_ROOM_JOIN_SYN )] 甸绢 棵荐绝绰单 恐 捞墨丑@@@@@!!!!" );
		}
		break;
	}

	if( FALSE == pPlayer->SendToGameDBPServer( &msg, sizeof(msg) ) )
	{
		SUNLOG( eFULL_LOG,  "[Handler_AG_ZONE_IMPL( AG_ZONE_ROOM_JOIN_SYN )] [ERROR]DBP俊菩哦(MSG_AG_ZONE_ROOM_JOIN_NAK)阑傈崔且荐绝嚼聪促." );
		MSG_AG_ZONE_ROOM_JOIN_NAK nmsg;
		nmsg.m_dwErrorCode = RC::RC_ZONE_DISCONNECTED_DBPROXY;
		pPlayer->SendPacket( &nmsg, sizeof(nmsg) );

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

		return;
	}

	//咯扁辑 GM 喉发府胶飘甫 八祸窍绊, 乐促搁 秦寸 GM俊霸 立加舅覆阑 茄促.
	
}

Handler_AG_ZONE_IMPL( AG_ZONE_ROOM_LEAVE_CMD )
{
	MSG_AG_ZONE_ROOM_LEAVE_CMD * pRecvMsg = (MSG_AG_ZONE_ROOM_LEAVE_CMD *)pMsg;

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

	GameZone * pEnterZone	= NULL;
	CODETYPE EnterFieldCode = 0;
	eZONE_STATE eRoomState	= pPlayer->GetGameZone( pEnterZone, EnterFieldCode );
	if( eRoomState & ePRS_AT_ZONE )
	{
		g_GameZoneManager.LeavePlayer( pRecvMsg->m_RoomKey, pPlayer );
		//SUNLOG( eFULL_LOG,  "[Room:%d][U:%d]:AG_ZONE_ROOM_LEAVE_CMD菩哦咳", pRecvMsg->m_RoomKey, UserKey );
	}

}

Handler_AG_ZONE_IMPL( AG_ZONE_ROOM_LEAVE_SYN )
{
	MSG_AG_ZONE_ROOM_LEAVE_SYN * pRecvMsg = (MSG_AG_ZONE_ROOM_LEAVE_SYN *)pMsg;

	DWORD UserKey = pRecvMsg->m_dwKey;
	Player * pPlayer = PlayerManager::Instance()->FindPlayer( UserKey );
	if( !pPlayer ) 
	{
		// 规俊辑 唱啊扼绰 夸没牢单 捞固 规俊 绝促搁 歹捞惑 贸府且 鞘夸档 舅副 鞘夸档 绝绰霸 嘎阑瘤档...
/*		MSG_AG_ZONE_ROOM_LEAVE_NAK NakMsg;
		NakMsg.m_dwErrorCode = RC_ROOM_NOT_EXIST_MEMBER;
		pServerSession->Send( &NakMsg, sizeof(NakMsg) );*/
		// 清泼 官肺啊扁 楷鸥甫 沁阑 版快 积变促.
		ASSERT( ! "The Player doesn't exist at The GameServer" );
		return;
	}

	GameZone * pEnterZone	= NULL;
	CODETYPE EnterFieldCode = 0;
	eZONE_STATE eRoomState	= pPlayer->GetGameZone( pEnterZone, EnterFieldCode );
	if( eRoomState & ePRS_AT_ZONE )
	{
		g_GameZoneManager.LeavePlayer( pRecvMsg->m_RoomKey, pPlayer );
	}
	else
	{
		ASSERT( ! "[AG_ZONE_ROOM_LEAVE_SYN] The ZoneState of Player is not ePRS_AT_ZONE" );

		// 酒流 叼厚肺何磐 MSG_DG_CHARINFO_UDPATE_ACK 皋矫瘤甫 罐瘤臼篮 惑怕老 荐 乐栏骨肺
		// 吝汗 肺弊牢阑 乔窍扁 困秦 NAK甫 焊辰促.
//		MSG_AG_ZONE_ROOM_LEAVE_NAK NakMsg;
//		pServerSession->Send( (BYTE*)&NakMsg, sizeof(NakMsg) );
		return;
	}

	if( FALSE == pPlayer->SerializeInfoToDBProxy() )
	{
		SUNLOG( eFULL_LOG,  "[Handler_AG_ZONE_IMPL( AG_ZONE_ROOM_LEAVE_SYN )] [ERROR]DBP俊菩哦(AG_ZONE_ROOM_LEAVE_SYN:SerializeInfoToDBProxy)阑傈崔且荐绝嚼聪促." );
		MSG_AG_ZONE_ROOM_LEAVE_NAK nmsg;
		nmsg.m_dwErrorCode = RC::RC_ZONE_DISCONNECTED_DBPROXY;
		pPlayer->SendPacket( &nmsg, sizeof(nmsg) );
		PlayerManager::Instance()->RemovePlayer( pPlayer );
		ObjectFactory::Instance()->FreeObject( pPlayer );
		return;
	}

	MSG_DG_CHARINFO_UDPATE_SYN msg;
	msg.m_dwKey = pPlayer->GetUserKey();
	pPlayer->SendToGameDBPServer( &msg, sizeof(msg) );
}

Handler_AG_ZONE_IMPL( AG_ZONE_MASTER_CHANGED_CMD )
{
	MSG_AG_ZONE_MASTER_CHANGED_CMD * pRecvMsg = (MSG_AG_ZONE_MASTER_CHANGED_CMD *)pMsg;

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

	GameZone *pZone = g_GameZoneManager.GetZone( pRecvMsg->m_RoomKey );
	if( !pZone || pZone->GetZoneType() == eZONETYPE_VILLAGE )
	{
		return;
	}

	// 规厘 棺 颇萍厘阑 函版茄促.
	GameRoom *pRoom = (GameRoom*)pZone;
	pRoom->ChangeMaster( UserKey );
}

Handler_AG_ZONE_IMPL( AG_ZONE_PVP_INFO_CMD )
{
	MSG_AG_ZONE_PVP_INFO_CMD * pRecvMsg = (MSG_AG_ZONE_PVP_INFO_CMD *)pMsg;

	GameZone * pZone = g_GameZoneManager.GetZone( pRecvMsg->m_RoomKey );
	if( !pZone || pZone->GetZoneType() != eZONETYPE_PVP )
	{
		return;
	}

	GamePVPRoom * pPVPRoom = (GamePVPRoom *)pZone;
	for( int i = 0 ; i < pRecvMsg->m_Count ; ++i )
		pPVPRoom->GetPVPManager()->AddPVPInfo( pRecvMsg->m_Info[i].m_dwPlayerKey, pRecvMsg->m_Info[i].m_Team );

	pPVPRoom->GetPVPManager()->StartPVP();

}

Handler_AG_ZONE_IMPL( AG_ZONE_VILLAGE_MOVE_SYN )
{
	MSG_AG_ZONE_VILLAGE_MOVE_SYN * pRecvMsg = (MSG_AG_ZONE_VILLAGE_MOVE_SYN *)pMsg;

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

	GameZone * pEnterZone	= NULL;
	CODETYPE EnterFieldCode = 0;
	eZONE_STATE eRoomState	= pPlayer->GetGameZone( pEnterZone, EnterFieldCode );
	if( eRoomState != ePRS_AT_VILLAGE )
	{
		SUNLOG( eCRITICAL_LOG, "付阑俊 乐瘤臼促.[%u,s:%u]捞绝促.", EnterFieldCode, eRoomState );
		goto SEND_NAK;
	}
	
	// 1. 固记 肯丰俊 蝶扼 捞悼且 荐 乐绰 甘牢啊?
	// 2. 厚侩捞 乐绰瘤 眉农 -> 捣 家葛 贸府
	BYTE byErrorCode = RC::RC_ROOM_INVALID_MAPCODE;
	sMapPort * pVillagePort = LimitedMapPortParser::Instance()->FindVillage( pEnterZone->GetMapCode() );
	if(!pVillagePort)
	{
		SUNLOG( eCRITICAL_LOG, "捞悼且付阑[%u,%u,s:%u]捞绝促.", pEnterZone->GetMapCode(), EnterFieldCode, eRoomState );
		goto SEND_NAK;
	}

	sVILLAGEPORT * pPort = pVillagePort->m_VillagePort;
	for( int i = 0 ; i < eVILLAGE_MAX ; ++i )
	{
		if( 0 != pPort[i].m_MapCode &&
			pPort[i].m_MapCode == pRecvMsg->m_VillageMapCode )
		{
			if( pPort[i].m_Fare > pPlayer->GetMoney() )
			{
				byErrorCode = RC::RC_ROOM_INSUFFICIENT_MONEY;
				goto SEND_NAK;
			}

			//抛胶飘甫 困秦 烙矫肺 林籍贸府(20060105)
			if( 0 != pPort[i].m_PreMissionCode &&
				0 == pPlayer->GetMissionManager()->GetMissionPoint(pPort[i].m_PreMissionCode) )
			{
				byErrorCode = RC::RC_ROOM_PREVIOUS_MISSION_CLEAR;
				goto SEND_NAK;
			}

			if( 0 != pPort[i].m_Fare )
				pPlayer->MinusMoney( pPort[i].m_Fare );
			MSG_AG_ZONE_VILLAGE_MOVE_ACK msg;
			msg.m_VillageMapCode = pRecvMsg->m_VillageMapCode;
			pPlayer->SendPacket( &msg, sizeof(msg) );
			return;
		}
	}
	
SEND_NAK:
	MSG_AG_ZONE_VILLAGE_MOVE_NAK nmsg;
	nmsg.m_byErrorCode = byErrorCode;
	pPlayer->SendPacket( &nmsg, sizeof(nmsg) );

}

⌨️ 快捷键说明

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