📄 handler_ag_zone.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 + -