cglogouthandler.cpp

来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 247 行

CPP
247
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGLogoutHandler.cc// Written By  : Reiot// Description ://////////////////////////////////////////////////////////////////////////////#include "CGLogout.h"#ifdef __GAME_SERVER__	#include "GamePlayer.h"	#include "PlayerCreature.h"	#include "Inventory.h"	#include "Relic.h"	#include "Creature.h"	#include "LoginServerManager.h"	#include "ZonePlayerManager.h"	#include "Zone.h"	#include "ZoneUtil.h"	#include "RelicUtil.h"	#include "ZoneInfoManager.h"	#include "ZoneGroupManager.h"	#include "IncomingPlayerManager.h"	#include "Properties.h"	#include "Slayer.h"	#include "Vampire.h"	#include "Ousters.h"	#include "ResurrectLocationManager.h"	#include "PKZoneInfoManager.h"	#include <stdio.h>	#include "Gpackets/GLIncomingConnection.h"	#include "Gpackets/GCSystemMessage.h"#endif//////////////////////////////////////////////////////////////////////////////// 努扼捞攫飘啊 CGLogout 菩哦阑 焊郴搁, 霸烙 辑滚绰 农府贸甫 粮俊辑 昏力窍绊,// 农府贸客 酒捞袍 沥焊甫 DB俊 历厘茄 饶, 立加阑 辆丰茄促.//////////////////////////////////////////////////////////////////////////////void CGLogoutHandler::execute (CGLogout* pPacket , Player* pPlayer)	 throw (ProtocolException , Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__//	Assert(pPacket != NULL);	Assert(pPlayer != NULL);		// 货肺弊牢 备炼俊辑绰 Logout阑 窍搁 措扁 惑怕肺 唱啊具 茄促.	// Logout 菩哦阑 罐栏搁 敲饭捞绢甫 IncomingPlayerManager肺 焊辰促.	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	//cout << "CGLogoutHandler: " << pGamePlayer->getID() << endl;	Creature* pCreature = pGamePlayer->getCreature();	Assert(pCreature != NULL);	Zone* pZone = pCreature->getZone();	Assert(pZone != NULL);    try 	{		// 肺弊酒眶且锭 己拱, 乔狼 己辑 炼阿阑 冻绢哆赴促.//		bool bSendPacket = false;//		dropRelicToZone( pCreature, bSendPacket );		if ( pCreature->isPLAYER() && g_pPKZoneInfoManager->isPKZone( pCreature->getZoneID() ) )		{			g_pPKZoneInfoManager->leavePKZone( pCreature->getZoneID() );		}		if ( g_pConfig->hasKey("Hardcore") && g_pConfig->getPropertyInt("Hardcore")!=0 && pPacket==NULL )		{		}		else		{			// 农府贸狼 沥焊甫 历厘茄促.			pCreature->save();			//////////////////////////////////////////////////////////////			// 敲饭捞绢啊 COMA惑怕(泅犁 磷篮 惑怕)扼搁 肺弊酒眶矫 磊悼栏肺			// 何劝困摹肺 某腐磐甫 捞悼矫挪促.			// Login/Logout狼 馆汗栏肺 何劝扁贱阑 荤侩窍瘤 给窍霸 窃			//			// Creature狼 沥焊甫 刚历 DB俊 诀单捞飘茄 饶 货肺 诀单捞飘甫 茄促.			//////////////////////////////////////////////////////////////			// 捞磐聪萍甫 茄锅 敬 惑怕肺 肺弊酒眶窍搁 何劝 困摹肺 朝扼埃促.			if (pCreature->isFlag(Effect::EFFECT_CLASS_COMA) || pCreature->isFlag(Effect::EFFECT_CLASS_ETERNITY))			{				//cout << "COMA 惑怕俊辑 肺弊酒眶沁澜" << endl;				ZoneID_t  ZoneID = 0;				ZoneCoord_t ZoneX = 0;				ZoneCoord_t ZoneY = 0;				ZONE_COORD ResurrectCoord;				if ( pCreature->isPC() )				{					PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);					g_pResurrectLocationManager->getPosition( pPC, ResurrectCoord );					ZoneID = ResurrectCoord.id;					ZoneX  = ResurrectCoord.x;					ZoneY  = ResurrectCoord.y;					char pField[80];					sprintf(pField, "ZoneID=%d, XCoord=%d, YCoord=%d, CurrentHP=HP", ZoneID, ZoneX, ZoneY);					if ( pPC->isSlayer() )					{						Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);						pSlayer->tinysave(pField);					}					else if ( pPC->isVampire() )					{						Vampire* pVampire = dynamic_cast<Vampire*>(pPC);						pVampire->tinysave(pField);					}					else if ( pPC->isOusters() )					{						Ousters* pOusters = dynamic_cast<Ousters*>(pPC);						pOusters->tinysave(pField);					}				}			}/*			if(pCreature->isSlayer())			{				Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);				Assert(pSlayer != NULL);				if (g_pResurrectLocationManager->getSlayerPosition(pSlayer->getResurrectZoneID(), ResurrectCoord))				{					ZoneID = ResurrectCoord.id;					ZoneX  = ResurrectCoord.x;					ZoneY  = ResurrectCoord.y;				}				else				{					if (g_pResurrectLocationManager->getSlayerPosition(pSlayer->getZone()->getZoneID(), ResurrectCoord))					{						ZoneID = ResurrectCoord.id;						ZoneX  = ResurrectCoord.x;						ZoneY  = ResurrectCoord.y;					}					else					{						throw Error("Critical Error: ResurrectInfo is not established");					}				}				char pField[80];				sprintf(pField, "ZoneID=%d, XCoord=%d, YCoord=%d, CurrentHP=HP", ZoneID, ZoneX, ZoneY);				pSlayer->tinysave(pField);			}			else if(pCreature->isVampire())			{				Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);				Assert(pVampire != NULL);				if (g_pResurrectLocationManager->getVampirePosition(pVampire->getResurrectZoneID(), ResurrectCoord))				{					ZoneID = ResurrectCoord.id;					ZoneX  = ResurrectCoord.x;					ZoneY  = ResurrectCoord.y;				}				else				{					if (g_pResurrectLocationManager->getVampirePosition(pVampire->getZone()->getZoneID(), ResurrectCoord))					{						ZoneID = ResurrectCoord.id;						ZoneX  = ResurrectCoord.x;						ZoneY  = ResurrectCoord.y;					}					else					{						throw Error("Critical Error: ResurrectInfo is not established");					}				}				// 捞力 沥焊甫 历厘茄促.				char pField[80];				sprintf(pField, "ZoneID=%d, XCoord=%d, YCoord=%d, CurrentHP=HP", ZoneID, ZoneX, ZoneY);				pVampire->tinysave(pField);			}*/		}		//		// 捞力, 粮俊辑 PC甫 昏力茄促.		//		// *CAUTION*		//		// pCreature狼 谅钎啊 角力肺 pCreature啊 粮犁窍绰 鸥老狼 谅钎客 鞍酒具 茄促.		// 蝶扼辑, 捞 皋筋靛甫 龋免窍扁 傈俊 谅钎甫 肋 官层出具 茄寸..		//		pZone->deleteCreature(pCreature , pCreature->getX() , pCreature->getY());		////cout << "PC deleted from Zone >> ";		// 粮弊缝狼 ZPM俊辑 敲饭捞绢甫 昏力茄促.		// ZonePlayerManager狼 ProcessCommand 救俊辑 瘤快绰 巴捞骨肺 馆靛矫 NoBlocked 栏肺 瘤况具 茄促.		pZone->getZoneGroup()->getZonePlayerManager()->deletePlayer(pGamePlayer->getSocket()->getSOCKET());		// IPM栏肺 敲饭捞绢甫 颗变促.		//g_pIncomingPlayerManager->pushPlayer(pGamePlayer);		// Core狼 备炼甫 官操搁辑 静饭靛肺 何磐 刀赋利栏肺 青窍扁 困窍咯 第俊 茄波锅俊 贸府窍扁 困秦辑		// OutList肺 持绰促.		pZone->getZoneGroup()->getZonePlayerManager()->pushOutPlayer(pGamePlayer);		////cout << "Move PC to IPM >> ";	} 	catch (NoSuchElementException & nsee) 	{		throw DisconnectException();	}	// 肺弊牢 辑滚肺 GLIncomingConnection阑 焊辰促.	// PlayerName苞 ClientIP甫 鞍捞 角绢辑 焊辰促.	/*	GLIncomingConnection glIncomingConnection;	glIncomingConnection.setPlayerID(pGamePlayer->getID());	glIncomingConnection.setClientIP(pGamePlayer->getSocket()->getHost());	if (g_pConfig->getProperty("User") == "excel96")		g_pLoginServerManager->sendPacket("211.117.52.12" , g_pConfig->getPropertyInt("LoginServerUDPPort"), &glIncomingConnection);	else if (g_pConfig->getProperty("User") == "elcastle")		g_pLoginServerManager->sendPacket("211.117.52.12" , g_pConfig->getPropertyInt("LoginServerUDPPort"), &glIncomingConnection);	else if (g_pConfig->getProperty("User") == "elca")		g_pLoginServerManager->sendPacket("211.117.52.12" , g_pConfig->getPropertyInt("LoginServerUDPPort"), &glIncomingConnection);	*/	pGamePlayer->setPlayerStatus(GPS_AFTER_SENDING_GL_INCOMING_CONNECTION);#endif	__END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

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