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

📄 mapnetworkmsgparser.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 5 页
字号:
#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 + -