cgselectwaypointhandler.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 483 行

CPP
483
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGSelectWayPointHandler.cpp// Written By  : excel96// Description ://////////////////////////////////////////////////////////////////////////////#include "CGSelectWayPoint.h"#ifdef __GAME_SERVER__	#include "GamePlayer.h"	#include "WayPoint.h"	#include "Zone.h"	#include "ZoneUtil.h"	#include "ZoneInfoManager.h"	#include "VariableManager.h"	#include "PacketUtil.h"	#include "Properties.h"	#include "StringPool.h"	#include "war/WarSystem.h"	#include "CreatureUtil.h"	#include "Ousters.h"	#include "FlagSet.h"	#include "SweeperBonusManager.h"	#include "LevelWarManager.h"	#include "LevelWarZoneInfoManager.h"	#include "ctf/FlagManager.h"	#include "Gpackets/GCAddHelicopter.h"	#include "Gpackets/GCSystemMessage.h"	#include "Gpackets/GCNoticeEvent.h"	#include "Gpackets/GCModifyInformation.h"	#include <cmath>#endif	// __GAME_SERVER__////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGSelectWayPointHandler::execute(CGSelectWayPoint* pPacket , Player* pPlayer)	 throw (Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	Assert(pPacket != NULL);	Assert(pPlayer != NULL);	static map<Level_t,Price_t> sPriceMap;	try 	{		// 霸烙 敲饭捞绢狼 惑怕啊 沥惑捞 酒聪扼搁 傲 府畔茄促.		GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);		Assert(pGamePlayer != NULL);		if (pGamePlayer->getPlayerStatus() != GPS_NORMAL) return;		// 农府媚啊 浇饭捞绢啊 酒聪扼搁 府畔茄促.		Creature* pCreature = pGamePlayer->getCreature();		Assert(pCreature != NULL);		if ( pCreature->hasRelicItem() ) return;		// 农府媚啊 磷菌栏搁 府畔		if ( pCreature->isDead() ) return;		// 檬焊粮栏肺 甸绢啊绰 版快浚 辆练 惑包绝捞 焊郴霖促.		if ( pPacket->getZoneID() == 1122 )		{			ZONE_COORD pos(1122);			if ( pCreature->isSlayer() )			{				pos.x = 107;				pos.y = 27;			}			else if ( pCreature->isVampire() )			{				pos.x = 18;				pos.y = 27;			}			else if ( pCreature->isOusters() )			{				pos.x = 12;				pos.y = 103;			}			else return;			if ( !canEnterBeginnerZone( pCreature ) ) return;			// 檬焊粮捞 蜡丰粮老荐档 乐阑扼唱...?#if defined(__PAY_SYSTEM_ZONE__) || defined(__PAY_SYSTEM_FREE_LIMIT__)			ZoneInfo* pZoneInfo = g_pZoneInfoManager->getZoneInfo( pos.id );						// 蜡丰粮牢单 蜡丰荤侩磊啊 酒聪搁...			if (pZoneInfo==NULL				|| (pZoneInfo->isPayPlay() || pZoneInfo->isPremiumZone())					&& ( !pGamePlayer->isPayPlaying() && !pGamePlayer->isFamilyFreePass() ))			{				//Statement* pStmt = NULL;				string connectIP = pGamePlayer->getSocket()->getHost();				// 蜡丰 辑厚胶 荤侩捞 啊瓷茄啊?				if (pGamePlayer->loginPayPlay(connectIP, pGamePlayer->getID()))				{					sendPayInfo(pGamePlayer);				}				else if (pZoneInfo->isPayPlay())				{					// 蜡丰 辑厚胶 荤侩 阂啊牢 版快					GCSystemMessage gcSystemMessage;					if (g_pConfig->getPropertyInt("IsNetMarble")==0)					{						gcSystemMessage.setMessage( g_pStringPool->getString( STRID_CANNOT_ENTER ) );					}					else					{						gcSystemMessage.setMessage( g_pStringPool->getString( STRID_CANNOT_ENTER ) );					}					pGamePlayer->sendPacket (&gcSystemMessage);					return;				}			}#endif			transportCreature(pCreature, pos.id, pos.x, pos.y, false);			return;		}		if ( pPacket->getZoneID() == 1131 )		{			if ( g_pVariableManager->getVariable( ACTIVE_LEVEL_WAR ) == 0 )			{				GCSystemMessage gcSystemMessage;				gcSystemMessage.setMessage( g_pStringPool->getString( STRID_CANNOT_ENTER ) );				pGamePlayer->sendPacket( &gcSystemMessage );				return;			}/*			if ( g_pConfig->getPropertyInt( "ServerID" ) != 0 )			{				GCNoticeEvent gcNoticeEvent;				gcNoticeEvent.setCode( NOTICE_EVENT_NOT_FIRST_SERVER );				pGamePlayer->sendPacket( &gcNoticeEvent );//				GCSystemMessage gcSystemMessage;//				gcSystemMessage.setMessage( g_pStringPool->getString( STRID_LEVEL_WAR_ONLY_FIRST_SERVER ) );//				pGamePlayer->sendPacket (&gcSystemMessage);				return;			}*/			// 农府媚 沥焊 焊绊 舅酒辑 屁败林磊 =_=;;			ZONE_COORD pos(g_pLevelWarZoneInfoManager->getCreatureZoneID( pCreature ));			if (g_pSweeperBonusManager->isAble(g_pLevelWarZoneInfoManager->getCreatureZoneID( pCreature )))			{				GCSystemMessage gcSystemMessage;				gcSystemMessage.setMessage( g_pStringPool->getString( STRID_NO_WAR_IN_ACTIVE ) );				pGamePlayer->sendPacket (&gcSystemMessage);				return;			}			if ( pCreature->isSlayer() )			{				pos.x = 12;				pos.y =  9;			}			else if ( pCreature->isVampire() )			{				pos.x = 117;				pos.y =   8;			}			else if ( pCreature->isOusters() )			{				pos.x =   9;				pos.y = 111;			}			#if defined(__PAY_SYSTEM_ZONE__) || defined(__PAY_SYSTEM_FREE_LIMIT__)			Zone* pZone = getZoneByZoneID( pos.id );			Assert( pZone != NULL );						LevelWarManager* pLevelWarManager = pZone->getLevelWarManager();			Assert( pLevelWarManager != NULL );			if (!pLevelWarManager->hasWar() && !g_pVariableManager->canEnterLevelWarZoneFree() && !pGamePlayer->isPayPlaying() && !pGamePlayer->isFamilyFreePass() && !pLevelWarManager->canEnterFreeUser() )			{				GCSystemMessage gcSystemMessage;				gcSystemMessage.setMessage( g_pStringPool->getString( STRID_CANNOT_ENTER_LEVEL_WAR_ZONE ) );				pGamePlayer->sendPacket (&gcSystemMessage);				return;			}#endif						transportCreature(pCreature, pos.id, pos.x, pos.y, false);			return;		}		if ( pPacket->getZoneID() == 72 )		{			if ( !g_pWarSystem->hasActiveRaceWar() )			{				GCSystemMessage gcSystemMessage;				gcSystemMessage.setMessage( g_pStringPool->getString( STRID_NO_WAR_IN_ACTIVE ) );				pGamePlayer->sendPacket (&gcSystemMessage);				return;			}/*			if ( g_pConfig->getPropertyInt( "ServerID" ) != 0 )			{				GCNoticeEvent gcNoticeEvent;				gcNoticeEvent.setCode( NOTICE_EVENT_NOT_FIRST_SERVER );				pGamePlayer->sendPacket( &gcNoticeEvent );//				GCSystemMessage gcSystemMessage;//				gcSystemMessage.setMessage( g_pStringPool->getString( STRID_LEVEL_WAR_ONLY_FIRST_SERVER ) );//				pGamePlayer->sendPacket (&gcSystemMessage);				return;			}*/			// 农府媚 沥焊 焊绊 舅酒辑 屁败林磊 =_=;;			ZONE_COORD pos;			if ( pCreature->isSlayer() )			{				pos.id = 73;				pos.x = 30;				pos.y = 124;			}			else if ( pCreature->isVampire() )			{				pos.id = 71;				pos.x = 104;				pos.y = 128; 			}			else if ( pCreature->isOusters() )			{				pos.id = 72;				pos.x = 67;				pos.y = 165;			}#if defined(__PAY_SYSTEM_ZONE__) || defined(__PAY_SYSTEM_FREE_LIMIT__)			ZoneInfo* pZoneInfo = g_pZoneInfoManager->getZoneInfo( pos.id );						// 蜡丰粮牢单 蜡丰荤侩磊啊 酒聪搁...			if (pZoneInfo==NULL				|| (pZoneInfo->isPayPlay() || pZoneInfo->isPremiumZone())					&& ( !pGamePlayer->isPayPlaying() && !pGamePlayer->isFamilyFreePass() ))			{				//Statement* pStmt = NULL;				string connectIP = pGamePlayer->getSocket()->getHost();				// 蜡丰 辑厚胶 荤侩捞 啊瓷茄啊?				if (pGamePlayer->loginPayPlay(connectIP, pGamePlayer->getID()))				{					sendPayInfo(pGamePlayer);				}				else if (pZoneInfo->isPayPlay())				{					// 蜡丰 辑厚胶 荤侩 阂啊牢 版快					GCSystemMessage gcSystemMessage;					if (g_pConfig->getPropertyInt("IsNetMarble")==0)					{						gcSystemMessage.setMessage( g_pStringPool->getString( STRID_CANNOT_ENTER ) );					}					else					{						gcSystemMessage.setMessage( g_pStringPool->getString( STRID_CANNOT_ENTER ) );					}					pGamePlayer->sendPacket (&gcSystemMessage);					return;				}			}#endif			if ( !g_pVariableManager->isActiveRaceWarLimiter() || pCreature->isFlag(Effect::EFFECT_CLASS_RACE_WAR_JOIN_TICKET) )			{				transportCreature(pCreature, pos.id, pos.x, pos.y, false);				return;			}			else 			{				GCSystemMessage gcSystemMessage;				gcSystemMessage.setMessage( g_pStringPool->getString(STRID_CANNOT_ENTER_DURING_RACE_WAR));				pGamePlayer->sendPacket( &gcSystemMessage );				return;			}		}		if (!pCreature->isSlayer() && !pCreature->isOusters())		{			// 购啊甫 秦具窍瘤 臼阑鳖?			return;		}				if (pCreature->isFlag(Effect::EFFECT_CLASS_HAS_FLAG))		{			// 购啊甫 秦具窍瘤 臼阑鳖?			return;		}		if (pCreature->isFlag(Effect::EFFECT_CLASS_HAS_SWEEPER))		{			// 购啊甫 秦具窍瘤 臼阑鳖?			return;		}		//Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);		//Assert(pSlayer != NULL);		bool bCancel = false;		// 捞棋飘啊 吧妨乐绢具 沥惑利牢 捞悼捞促.		if (pCreature->isOusters()				|| (pCreature->isSlayer() && pCreature->isFlag(Effect::EFFECT_CLASS_SLAYER_PORTAL))		   )		{			ZoneID_t    id = pPacket->getZoneID();			ZoneCoord_t x  = pPacket->getX();			ZoneCoord_t y  = pPacket->getY();			if (id == 0 && x == 0 && y == 0)			{				bCancel = true;			}			else			{				// 籍拳 惑怕老 版快 积瘪促.				if ( pCreature->isFlag( Effect::EFFECT_CLASS_PARALYZE ) )				{					bCancel = true;				}				// 傀捞器牢飘 概聪历甫 烹秦辑 努扼捞攫飘啊 焊郴柯				// 傀捞器牢飘啊 沥惑利牢 傀捞器牢飘牢瘤甫 八刘茄促.				if (!g_pWayPointManager->isValidWayPoint(id, x, y, pCreature->getRace()))				{					// 购啊甫 秦具窍瘤 臼阑鳖?					bCancel = true;					//return;				}				try {					if (!bCancel)					{#if defined(__PAY_SYSTEM_ZONE__) || defined(__PAY_SYSTEM_FREE_LIMIT__)						ZoneInfo* pZoneInfo = g_pZoneInfoManager->getZoneInfo( id );												// 蜡丰粮牢单 蜡丰荤侩磊啊 酒聪搁...						if (pZoneInfo==NULL							|| (pZoneInfo->isPayPlay() || pZoneInfo->isPremiumZone())								&& ( !pGamePlayer->isPayPlaying() && !pGamePlayer->isFamilyFreePass() ))						{							//Statement* pStmt = NULL;							string connectIP = pGamePlayer->getSocket()->getHost();							// 蜡丰 辑厚胶 荤侩捞 啊瓷茄啊?							if (pGamePlayer->loginPayPlay(connectIP, pGamePlayer->getID()))							{								sendPayInfo(pGamePlayer);							}							else if (pZoneInfo->isPayPlay())							{								// 蜡丰 辑厚胶 荤侩 阂啊牢 版快								GCSystemMessage gcSystemMessage;								if (g_pConfig->getPropertyInt("IsNetMarble")==0)								{									gcSystemMessage.setMessage( g_pStringPool->getString( STRID_CANNOT_ENTER ) );								}								else								{									gcSystemMessage.setMessage( g_pStringPool->getString( STRID_CANNOT_ENTER ) );								}								pGamePlayer->sendPacket (&gcSystemMessage);								bCancel = true;							}						}#endif						if ( !bCancel )						{							// 捞悼矫虐扁 傈俊 捞棋飘甫 昏力茄促.							if ( pCreature->isSlayer() )								pCreature->removeFlag(Effect::EFFECT_CLASS_SLAYER_PORTAL);							if ( pCreature->isOusters() )							{								Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);								Assert( pOusters != NULL );								GCNoticeEvent gcNoticeEvent;								// 措瘤沥飞狼 辉阑 荤侩且扼搁 矫坷恩苞 拌距阑 肝菌绢具 茄促.								if ( !pOusters->getFlagSet()->isOn(FLAGSET_GNOMES_HORN) )								{									gcNoticeEvent.setCode( NOTICE_EVENT_CONTRACT_GNOMES_HORN );									pPlayer->sendPacket( &gcNoticeEvent );									return;								}								Level_t level = pOusters->getLevel();								Price_t price = sPriceMap[level];								if ( price == 0 )								{									price = (Price_t)(pow((double)level, 1.3) * 100);									sPriceMap[level] = price;								}								/*if ( g_pFlagManager->hasFlagWar() && 										pPacket->getZoneID() == 32 &&										pPacket->getX() == 124 &&										pPacket->getY() == 144 ) price = 0;*/								if ( pOusters->getGold() < price )								{									gcNoticeEvent.setCode( NOTICE_EVENT_NOT_ENOUGH_MONEY );									pPlayer->sendPacket( &gcNoticeEvent );									return;								}								else								{									pOusters->decreaseGoldEx( price );									GCModifyInformation gcMI;									gcMI.addLongData(MODIFY_GOLD, pOusters->getGold());									pPlayer->sendPacket(&gcMI);								}							}							// 棵官弗 傀捞器牢飘扼搁 浇饭捞绢甫 捞悼矫难霖促.							transportCreature(pCreature, id, x, y, false);						}					}				} catch (NoSuchElementException&) {					bCancel = true;				}			}		}		if (bCancel && pCreature->isSlayer())		{			Zone* pZone = pCreature->getZone();			Assert(pZone != NULL);			// id, x, y啊 葛滴 0老 版快 捞悼阑 秒家茄促绰 舵捞促.			pCreature->removeFlag(Effect::EFFECT_CLASS_SLAYER_PORTAL);			// 秋扁甫 力芭窍扼绊 谎妨霖促.			GCAddHelicopter gcAddHelicopter;			gcAddHelicopter.setObjectID(pCreature->getObjectID());			gcAddHelicopter.setCode(1);			pZone->broadcastPacket(pCreature->getX(), pCreature->getY(), &gcAddHelicopter);		}	} 	catch (Throwable & t) 	{ 		cerr << t.toString() << endl; 	}#endif	// __GAME_SERVER__			__END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

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