cgselectwaypointhandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· 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 + -
显示快捷键?