📄 mapnetworkmsgparser.cpp
字号:
#include "stdafx.h"
#include "MapNetworkMsgParser.h"
#include "Network.h"
#include "MapDBMsgParser.h"
#include "CharMove.h"
#include "PackedData.h"
#include "MugongManager.h"
#include "..\[CC]Header\GameResourceManager.h"
#include "Player.h"
#include "PartyManager.h"
#include "UserTable.h"
#include "UngijosikManager.h"
#include "PeaceWarModManager.h"
#include "ItemManager.h"
#include "QuickManager.h"
#include "TacticManager.h"
#include "MunpaManager.h"
#include "SkillManager_Server.h"
#include "StreetStallManager.h"
#include "PyogukManager.h"
#include "BattleSystem_Server.h"
#include "CharacterManager.h"
#include "BootManager.h"
#include "objectstatemanager.h"
#include "PKManager.h"
#include "AbilityManager.h"
#include "FriendManager.h"
#include "ChannelSystem.h"
#include "RecallManager.h"
#include "WantedManager.h"
#include "QuestManager.h"
#include "LootingManager.h"
#include "JournalManager.h"
#include "Party.h"
#include "CharacterCalcManager.h"
#include "..\[CC]Suryun\SuryunManager_Server.h"
#include "FameManager.h"
#include "ObjectFactory.h"
#include "GuildManager.h"
#include "EventMapMgr.h"
extern HWND g_hWnd;
extern BOOL g_bCloseWindow;
void MP_MonitorMsgParser(DWORD dwConnectionIndex, char* pMsg, DWORD dwLength)
{
MSGROOT* pTempMsg = (MSGROOT*)pMsg;
switch(pTempMsg->Protocol)
{
case MP_MORNITORMAPSERVER_NOTICESEND_SYN:
{
// 傍瘤荤亲
ASSERT(0);
}
break;
case MP_MORNITORMAPSERVER_PING_SYN:
{
pTempMsg->Protocol = MP_MORNITORMAPSERVER_PING_ACK;
g_Network.Send2Server(dwConnectionIndex, pMsg, dwLength);
}
break;
case MP_MORNITORMAPSERVER_QUERYUSERCOUNT_SYN:
{
MSGUSERCOUNT * pmsg = (MSGUSERCOUNT *)pMsg;
pmsg->Protocol = MP_MORNITORMAPSERVER_QUERYUSERCOUNT_ACK;
pmsg->dwUserCount = g_pUserTable->GetUserCount();
pmsg->ServerPort = g_pServerTable->GetSelfServer()->wPortForServer;
g_Network.Send2Server(dwConnectionIndex, pMsg, sizeof(MSGUSERCOUNT));
}
break;
case MP_MORNITORMAPSERVER_QUERY_CHANNELINFO_SYN:
{
CHANNELSYSTEM->SendChannelInfoToMS( dwConnectionIndex );
}
break;
case MP_MORNITORMAPSERVER_ASSERTMSGBOX_SYN:
{
MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
g_bAssertMsgBox = (BOOL)pmsg->dwData;
if(g_bAssertMsgBox)
g_Console.LOG(4,"Assert MsgBox is On");
else
g_Console.LOG(4,"Assert MsgBox is Off");
}
break;
case MP_MORNITORMAPSERVER_SERVEROFF_SYN:
{
g_bCloseWindow = TRUE;
}
break;
}
}
void MP_POWERUPMsgParser(DWORD dwConnectionIndex, char* pMsg, DWORD dwLength)
{
BOOTMNGR->NetworkMsgParse(dwConnectionIndex, pMsg, dwLength);
}
void MP_MAPSERVERMsgParser(DWORD dwConnectionIndex, char* pMsg, DWORD dwLength)
{
ASSERT(0);
/*
MSGROOT* pTempMsg = (MSGROOT*)pMsg;
switch(pTempMsg->Protocol)
{
case MP_SERVER_PWRUP:
{
MSG_WORD * msg = (MSG_WORD *)pMsg;
SERVERINFO * info = g_pServerTable->FindServer(msg->wData);//port
//PACKDATA俊辑 荤侩窍绰 函荐
if(g_pServerTable->GetMaxServerConnectionIndex() < dwConnectionIndex)
g_pServerTable->SetMaxServerConnectionIndex(dwConnectionIndex);
ASSERT(info);
if(info)
{
info->dwConnectionIndex = dwConnectionIndex;
if(info->wServerKind == AGENT_SERVER || info->wServerKind == MONITOR_SERVER || info->wServerKind == MONITOR_AGENT_SERVER)
{
REGIST_MAP msg;
msg.Category = MP_SERVER;
msg.Protocol = MP_SERVER_REGISTMAP_ACK;
msg.mapServerPort = g_pServerTable->GetSelfServer()->wPortForServer;
msg.mapnum = GAMERESRCMNGR->GetLoadMapNum();
g_Network.Send2Server(dwConnectionIndex, (char*)&msg, sizeof(msg));
}
}
}
break;
case MP_SERVER_REGISTMAP_SYN:
{
REGIST_MAP msg;
msg.Category = MP_SERVER;
msg.Protocol = MP_SERVER_REGISTMAP_ACK;
msg.mapServerPort = g_pServerTable->GetSelfServer()->wPortForServer;
msg.mapnum = GAMERESRCMNGR->GetLoadMapNum();
g_Network.Send2Server(dwConnectionIndex, (char*)&msg, sizeof(msg));
}
break;
}*/
}
void MP_CHARMsgParser(DWORD dwConnectionIndex, char* pMsg, DWORD dwLength)
{
MSGBASE* pTempMsg = (MSGBASE*)pMsg;
switch(pTempMsg->Protocol)
{
/*
case MP_CHAR_LEVELDOWN_SYN:
{
MSG_WORD* pmsg = (MSG_WORD*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(!pPlayer) return;
CHARMGR->SetCharLevelDown(pPlayer, pmsg->wData);
}
break;
*/
case MP_CHAR_POINTADD_SYN:
{
MSG_WORD* pmsg = (MSG_WORD*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(!pPlayer) return;
// 瘤陛 敲饭捞绢啊 器牢飘甫 棵副荐 乐绰 惑怕牢啊?眉农
CHARMGR->ArrangeCharLevelPoint(pPlayer, pmsg->wData);
}
break;
case MP_CHAR_STATE_NOTIFY:
{
MSG_BYTE* pmsg = (MSG_BYTE*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(!pPlayer) return;
if( pPlayer->GetState() == pmsg->bData && pPlayer->GetState() != eObjectState_Die )
OBJECTSTATEMGR_OBJ->EndObjectState(pPlayer, pmsg->bData);
}
break;
case MP_CHAR_ABILITY_UPGRADE_SYN:
{
MSG_WORD* pmsg = (MSG_WORD*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(!pPlayer) return;
MSG_WORD msg;
msg.Category = MP_CHAR;
if(ABILITYMGR->UpgradeAbility(pmsg->wData,pPlayer->GetAbilityGroup()) == TRUE)
msg.Protocol = MP_CHAR_ABILITY_UPGRADE_ACK;
else
msg.Protocol = MP_CHAR_ABILITY_UPGRADE_NACK;
msg.wData = pmsg->wData;
pPlayer->SendMsg(&msg,sizeof(msg));
}
break;
case MP_CHAR_EXITSTART_SYN:
{
MSGBASE* pmsg = (MSGBASE*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if( !pPlayer ) return;
if( pPlayer->IsExitStart() ) return;
int errorCode;
if( ( errorCode = pPlayer->CanExitStart() ) == eEXITCODE_OK )
{
pPlayer->SetExitStart( TRUE );
MSGBASE msgAck;
msgAck.Category = MP_CHAR;
msgAck.Protocol = MP_CHAR_EXITSTART_ACK;
pPlayer->SendMsg(&msgAck, sizeof(msgAck));
}
else
{
MSG_BYTE msgNack;
msgNack.Category = MP_CHAR;
msgNack.Protocol = MP_CHAR_EXITSTART_NACK;
msgNack.bData = errorCode;
pPlayer->SendMsg(&msgNack, sizeof(msgNack));
}
}
break;
case MP_CHAR_EXIT_SYN:
{
MSGBASE* pmsg = (MSGBASE*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if( !pPlayer ) return;
if( !pPlayer->IsExitStart() ) return;
int nErrorCode;
if( ( nErrorCode = pPlayer->CanExit() ) == eEXITCODE_OK )
{
OBJECTSTATEMGR_OBJ->StartObjectState( pPlayer, eObjectState_Exit, 0 );
pPlayer->SetNormalExit();
pPlayer->SetExitStart( FALSE );
MSGBASE msgAck;
msgAck.Category = MP_CHAR;
msgAck.Protocol = MP_CHAR_EXIT_ACK;
pPlayer->SendMsg(&msgAck, sizeof(msgAck));
}
else
{
pPlayer->SetExitStart( FALSE );
MSG_BYTE msgNack;
msgNack.Category = MP_CHAR;
msgNack.Protocol = MP_CHAR_EXIT_NACK;
msgNack.bData = nErrorCode;
pPlayer->SendMsg(&msgNack, sizeof(msgNack));
}
}
break;
case MP_CHAR_BADFAME_SYN:
{
MSG_FAME* pmsg = (MSG_FAME*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(!pPlayer) return;
if( FAMEMGR->BailBadFame( pPlayer, pmsg->Fame ) == TRUE)
{
pPlayer->SetBadFame( pPlayer->GetBadFame() - pmsg->Fame );
pPlayer->SetMoney( pmsg->Fame * BAIL_PRICE, MONEY_SUBTRACTION, 0, eItemTable_Inventory, eMoneyLog_LoseBadFrameBail, pPlayer->GetID() );
CharacterBadFameUpdate( pPlayer->GetID(), pPlayer->GetBadFame(), pPlayer->GetMoney() );
//傈眉俊霸 焊郴扁
FAMEMGR->SendBadFameMsg( pPlayer, pPlayer->GetBadFame() );
//唱俊霸 犬牢 焊郴扁(皋技瘤 焊咯林扁)
MSG_FAME msg;
msg.Category = MP_CHAR;
msg.Protocol = MP_CHAR_BADFAME_ACK;
msg.dwObjectID = pPlayer->GetID();
msg.Fame = pmsg->Fame;
pPlayer->SendMsg(&msg, sizeof(msg));
}
else
{
MSGBASE msg;
msg.Category = MP_CHAR;
msg.Protocol = MP_CHAR_BADFAME_NACK;
msg.dwObjectID = pPlayer->GetID();
pPlayer->SendMsg(&msg, sizeof(msg));
}
}
break;
case MP_CHAR_PLAYTIME_SYN:
{
MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
if(!pPlayer) return;
int edst = abs((int)( pmsg->dwData - pPlayer->GetPlayTime() ));
MSG_DWORD msg;
msg.Category = MP_CHAR;
msg.dwData = pPlayer->GetPlayTime();
if(edst < MAX_ALLOWANCE)
{
msg.Protocol = MP_CHAR_PLAYTIME_ACK;
}
else
{
msg.Protocol = MP_CHAR_PLAYTIME_NACK;
// Assert
char buf[256] = { 0, };
sprintf(buf, "敲饭捞矫埃捞 坷瞒裹困甫 哈绢车嚼聪促. player:%d Server:%d ecost:%d allowance:%d",
pmsg->dwData, pPlayer->GetPlayTime(), edst, MAX_ALLOWANCE);
ASSERTMSG(0, buf);
}
pPlayer->SendMsg(&msg, sizeof(msg));
}
break;
}
}
void MP_CHATMsgParser(DWORD dwConnectionIndex, char* pMsg, DWORD dwLength)
{
MSGBASE* pTempMsg = (MSGBASE*)pMsg;
switch(pTempMsg->Protocol)
{
case MP_CHAT_ALL:
{
TESTMSG* pmsg = (TESTMSG*)pMsg;
// g_Console.LOG(4, pmsg->Msg);
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
//taiyo code
if(!pPlayer) return;
if( pPlayer->GetUserLevel() == eUSERLEVEL_GM )
pmsg->Protocol = MP_CHAT_GM;
PACKEDDATA_OBJ->QuickSend(pPlayer,pmsg,dwLength);
}
break;
case MP_CHAT_GUILD:
{
TESTMSGID * pmsg = (TESTMSGID*)pMsg;
GUILDMGR->SendChatMsg(pmsg->dwObjectID, pmsg->dwSenderID, pmsg->Msg);
}
break;
default:
//GAMESYSTEM_OBJ->m_ConnectionTable.SendToCharacter(pTempMsg,dwLength);
break;
}
}
void MP_USERCONNMsgParser(DWORD dwConnectionIndex, char* pMsg, DWORD dwLength)
{
MSGBASE* pTempMsg = (MSGBASE*)pMsg;
switch(pTempMsg->Protocol)
{
case MP_USERCONN_CHANNELINFO_SYN:
{
MSG_DWORD* pmsg = (MSG_DWORD*)pTempMsg;
CHANNELSYSTEM->SendChannelInfo(pmsg, dwConnectionIndex);
}
break;
case MP_USERCONN_GAMEIN_SYN: // 努扼捞攫飘俊辑 焊辰巴
{
MSG_DWORD3* pmsg = (MSG_DWORD3*)pMsg;
CPlayer* pPlayer = g_pServerSystem->AddPlayer(pmsg->dwObjectID,dwConnectionIndex,pmsg->dwData1, pmsg->dwData2);
if(!pPlayer)
return;
pPlayer->SetUserLevel( pmsg->dwData3 );
CharacterNumSendAndCharacterInfo(pmsg->dwObjectID, MP_USERCONN_GAMEIN_SYN);
CharacterMugongInfo(pmsg->dwObjectID, MP_USERCONN_GAMEIN_SYN);
CharacterItemInfo(pmsg->dwObjectID, MP_USERCONN_GAMEIN_SYN);
CharacterItemOptionInfo(pmsg->dwObjectID, MP_USERCONN_GAMEIN_SYN);
CharacterAbilityInfo(pmsg->dwObjectID, MP_USERCONN_GAMEIN_SYN);
// CharacterGMControlInfo(pmsg->dwObjectID, MP_USERCONN_GAMEIN_SYN);
QuestTotalInfo(pmsg->dwObjectID); // 檬焊磊 涅胶飘
// quest 沥焊 qurey 眠啊
QUESTMGR->CreateQuestForPlayer( pPlayer );
QuestMainQuestLoad(pmsg->dwObjectID);
QuestSubQuestLoad(pmsg->dwObjectID);
QuestItemload(pmsg->dwObjectID);
}
break;
case MP_USERCONN_GAMEIN_NACK:
{ // GAMEIN_ACK甫 焊陈阑锭 俊捞怜飘俊辑 蜡聪农 酒捞叼啊 撇府搁
// 捞 皋技瘤甫 朝妨霖促. 弊 纳腐磐甫 弊成 瘤况滚府搁 等促.
CPlayer* pPlayer = (CPlayer *)g_pUserTable->FindUser(pTempMsg->dwObjectID);
if(pPlayer == NULL)
return;
g_pServerSystem->RemovePlayer(pTempMsg->dwObjectID);
}
break;
case MP_USERCONN_DISCONNECTED:
{
//KES //立加捞 谗板阑锭父 捞府肺 甸绢坷绰啊?
CPlayer* pPlayer = (CPlayer *)g_pUserTable->FindUser(pTempMsg->dwObjectID);
if(pPlayer == NULL)
return;
PARTYMGR->UserLogOut(pPlayer);
FRIENDMGR->UserLogOut(pTempMsg->dwObjectID);
if( !pPlayer->IsNormalExit() )
{
//碍力 辆丰俊 蝶弗 力力
if( pPlayer->IsPKMode() )
PKMGR->PKModeExitPanelty( pPlayer );
LOOTINGMGR->DiePlayerExitPanelty( pPlayer );
}
g_pServerSystem->RemovePlayer(pTempMsg->dwObjectID);
//
ConfirmUserOut( dwConnectionIndex, pPlayer->GetUserID(), pPlayer->GetID(), 2 );
}
break;
case MP_USERCONN_CHANGEMAP_SYN:
{
MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
CPlayer* pPlayer = (CPlayer *)g_pUserTable->FindUser(pmsg->dwObjectID);
if(pPlayer == NULL)
return;
if( pPlayer->IsPKMode() || LOOTINGMGR->IsLootedPlayer( pPlayer->GetID() ) || pPlayer->GetState() == eObjectState_Die )
{
MSGBASE msgNack;
msgNack.Category = MP_USERCONN;
msgNack.Protocol = MP_USERCONN_CHANGEMAP_NACK;
msgNack.dwObjectID = pPlayer->GetID();
pPlayer->SendMsg( &msgNack, sizeof(msgNack) );
return;
}
MAPCHANGE_INFO* ChangeInfo = GAMERESRCMNGR->GetMapChangeInfo(pmsg->dwData);
if( !ChangeInfo ) return;
LEVELTYPE lvl = pPlayer->GetLevel();
EXPTYPE exp = pPlayer->GetPlayerExpPoint();
g_pServerSystem->RemovePlayer(pPlayer->GetID());
// 府畔 罐栏搁 甘 酒眶 皋矫瘤 焊晨.
SaveMapChangePointReturn(pmsg->dwObjectID, pmsg->dwData, dwConnectionIndex, lvl, exp, pPlayer->GetMoney(eItemTable_Pyoguk));
}
break;
case MP_USERCONN_CHANGEMAP_NACK:
{
g_Console.Log(eLogDisplay, 4, "Recv OK!!!");
}
break;
case MP_USERCONN_SAVEPOINT_SYN:
{
MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
LOGINPOINT_INFO* LoginInfo = GAMERESRCMNGR->GetLoginPointInfo(pmsg->dwData);
ASSERT(LoginInfo);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -