cgtradepreparehandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 270 行
CPP
270 行
//////////////////////////////////////////////////////////////////////////////// Filename : CGTradePrepareHandler.cpp// Written By : excel96// Description : //////////////////////////////////////////////////////////////////////////////#include "CGTradePrepare.h"#ifdef __GAME_SERVER__ #include "GamePlayer.h" #include "Slayer.h" #include "Vampire.h" #include "Ousters.h" #include "TradeManager.h" #include "ZoneUtil.h" #include "StringStream.h" #include "Gpackets/GCTradePrepare.h" #include "Gpackets/GCTradeError.h" #include "Gpackets/GCTradeVerify.h"#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGTradePrepareHandler::execute (CGTradePrepare* pPacket , Player* pPlayer) throw (ProtocolException , Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); ObjectID_t TargetOID = pPacket->getTargetObjectID(); BYTE CODE = pPacket->getCode(); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); GCTradePrepare gcTradePrepare; Creature* pSender = pGamePlayer->getCreature(); Assert(pSender != NULL); Zone* pZone = pSender->getZone(); Assert(pZone != NULL); TradeManager* pTradeManager = pZone->getTradeManager(); Assert(pTradeManager != NULL); // 背券 惑措磊甫 粮俊辑 茫酒夯促. Creature* pReceiver = NULL; /* try { pReceiver = pZone->getCreature(TargetOID); } catch (NoSuchElementException) { pReceiver = NULL; } */ // NoSuch力芭. by sigi. 2002.5.2 pReceiver = pZone->getCreature(TargetOID); // 背券阑 且 仇捞 粮犁窍瘤 臼绰促搁 寸楷洒 背券且 荐 绝促. if (pReceiver == NULL) { pTradeManager->cancelTrade(pSender); executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_TARGET_NOT_EXIST); return; } // 背券阑 且 仇苞 罐阑 仇狼 捞抚捞 鞍促搁, 溜 鞍篮 某腐捞扼搁 立加阑 肋扼滚赴促. // 角力肺 捞繁 版快啊 惯积沁促. 掂倔 立加牢 巴 鞍篮单... 2002-03-04 辫己刮 if (pSender->getName() == pReceiver->getName()) { StringStream msg; msg << "CGTradePrepare : Error, Same Creature!!! Name[" << pSender->getName() << "]"; filelog("TradeError.log", "%s", msg.toString().c_str()); throw ProtocolException(msg.toString()); } // 背券阑 且 仇捞 PC啊 酒聪芭唱, 辆练捞 促福促搁 背券阑 且 荐啊 绝促. if (!pReceiver->isPC() || !isSameRace(pSender, pReceiver)) { pTradeManager->cancelTrade(pSender); executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_RACE_DIFFER); return; } // 笛 促 救傈 瘤措俊 乐绰瘤 眉农甫 茄促. if (!isInSafeZone(pSender) || !isInSafeZone(pReceiver)) { pTradeManager->cancelTrade(pSender); executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_NOT_SAFE); return; } // 坷配官捞甫 鸥绊 乐促搁 俊矾促. if (pSender->isSlayer() && pReceiver->isSlayer()) { Slayer* pSlayer1 = dynamic_cast<Slayer*>(pSender); Slayer* pSlayer2 = dynamic_cast<Slayer*>(pReceiver); if (pSlayer1->hasRideMotorcycle() || pSlayer2->hasRideMotorcycle()) { pTradeManager->cancelTrade(pSender); executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_MOTORCYCLE); return; } } if (pSender->isOusters() && pReceiver->isOusters()) { Ousters* pOusters1 = dynamic_cast<Ousters*>(pSender); Ousters* pOusters2 = dynamic_cast<Ousters*>(pReceiver); if ( pOusters1->isFlag(Effect::EFFECT_CLASS_SUMMON_SYLPH) || pOusters2->isFlag(Effect::EFFECT_CLASS_SUMMON_SYLPH) ) { pTradeManager->cancelTrade(pSender); executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_MOTORCYCLE); return; } } TradeInfo* pInfo1 = pTradeManager->getTradeInfo(pSender->getName()); TradeInfo* pInfo2 = pTradeManager->getTradeInfo(pReceiver->getName()); Player* pReceiverPlayer = pReceiver->getPlayer(); // A啊 B俊霸 背券阑 力老 贸澜 夸备沁促... switch (CODE) { //////////////////////////////////////////////////////////// // A啊 B俊霸 背券阑 夸备沁栏骨肺, // B俊霸 A啊 背券阑 夸备窍绊 乐促绰 荤角阑 舅妨霖促. //////////////////////////////////////////////////////////// case CG_TRADE_PREPARE_CODE_REQUEST: // 背券阑 夸备茄 仇捞 背券 吝捞扼搁... -_- if (pInfo1 != NULL) { pTradeManager->cancelTrade(pSender); executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_ALREADY_TRADING); return; } // 背券阑 夸备罐篮 仇捞 背券 吝捞扼搁, // 官悔聪鳖 背券俊 览且 荐 绝促. if (pInfo2 != NULL) { gcTradePrepare.setTargetObjectID(pPacket->getTargetObjectID()); gcTradePrepare.setCode(GC_TRADE_PREPARE_CODE_BUSY); pPlayer->sendPacket(&gcTradePrepare); return; } // 菩哦阑 焊郴霖促. gcTradePrepare.setTargetObjectID(pSender->getObjectID()); gcTradePrepare.setCode(GC_TRADE_PREPARE_CODE_REQUEST); pReceiverPlayer->sendPacket(&gcTradePrepare); // 笛 促 背券 葛靛肺 甸绢艾栏骨肺, TradeInfo甫 积己秦 霖促. pTradeManager->initTrade(pSender, pReceiver); break; //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// case CG_TRADE_PREPARE_CODE_CANCEL: // 背券 吝牢瘤甫 眉农茄促. if (pTradeManager->isTrading(pSender, pReceiver)) { gcTradePrepare.setTargetObjectID(pSender->getObjectID()); gcTradePrepare.setCode(GC_TRADE_PREPARE_CODE_CANCEL); pReceiverPlayer->sendPacket(&gcTradePrepare); // 背券阑 芭何沁栏骨肺, TradeInfo甫 昏力秦 霖促. pTradeManager->cancelTrade(pSender, pReceiver); } else { executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_NOT_TRADING); return; } break; //////////////////////////////////////////////////////////// // B啊 背券俊 览茄促绰 荤角阑 A俊霸 舅妨霖促. //////////////////////////////////////////////////////////// case CG_TRADE_PREPARE_CODE_ACCEPT: // 背券 吝牢瘤甫 眉农茄促. if (pTradeManager->isTrading(pSender, pReceiver)) { gcTradePrepare.setTargetObjectID(pSender->getObjectID()); gcTradePrepare.setCode(GC_TRADE_PREPARE_CODE_ACCEPT); pReceiverPlayer->sendPacket(&gcTradePrepare); } else { executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_NOT_TRADING); return; } break; //////////////////////////////////////////////////////////// // B啊 背券阑 芭何茄促绰 荤角阑 A俊霸 舅妨霖促. //////////////////////////////////////////////////////////// case CG_TRADE_PREPARE_CODE_REJECT: // 背券 吝牢瘤甫 眉农茄促. if (pTradeManager->isTrading(pSender, pReceiver)) { gcTradePrepare.setTargetObjectID(pSender->getObjectID()); gcTradePrepare.setCode(GC_TRADE_PREPARE_CODE_REJECT); pReceiverPlayer->sendPacket(&gcTradePrepare); // 背券阑 芭何沁栏骨肺, TradeInfo甫 昏力秦 霖促. pTradeManager->cancelTrade(pSender, pReceiver); } else { executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_NOT_TRADING); return; } break; //////////////////////////////////////////////////////////// // B啊 泅犁 背券俊 览且 荐 绝绰 惑怕(惑痢俊 乐绰 版快)扼绰 // 巴阑 A俊霸 舅妨霖促. //////////////////////////////////////////////////////////// case CG_TRADE_PREPARE_CODE_BUSY: if (pTradeManager->isTrading(pSender, pReceiver)) { // 菩哦阑 焊郴霖促. gcTradePrepare.setTargetObjectID(pSender->getObjectID()); gcTradePrepare.setCode(GC_TRADE_PREPARE_CODE_BUSY); pReceiverPlayer->sendPacket(&gcTradePrepare); // 背券阑 芭何沁栏骨肺, TradeInfo甫 昏力秦霖促. pTradeManager->cancelTrade(pSender, pReceiver); } else { executeError(pPacket, pPlayer, GC_TRADE_ERROR_CODE_NOT_TRADING); return; } break; // 舅荐 绝绰 内靛促... default: throw ProtocolException("CGTradePrepare::execute() : 舅 荐 绝绰 内靛"); }#endif __END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGTradePrepareHandler::executeError (CGTradePrepare* pPacket , Player* pPlayer, BYTE ErrorCode) throw (ProtocolException , Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ GCTradeError gcTradeError; gcTradeError.setTargetObjectID(pPacket->getTargetObjectID()); gcTradeError.setCode(ErrorCode); pPlayer->sendPacket(&gcTradeError);#endif __END_DEBUG_EX __END_CATCH}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?