cgshoprequestsellhandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 593 行 · 第 1/2 页
CPP
593 行
//////////////////////////////////////////////////////////////////////////////// Filename : CGShopRequestSellHandler.cpp// Written By : 辫己刮// Description : //////////////////////////////////////////////////////////////////////////////#include "CGShopRequestSell.h"#ifdef __GAME_SERVER__ #include "GamePlayer.h" #include "NPC.h" #include "Slayer.h" #include "Vampire.h" #include "ItemInfo.h" #include "ItemInfoManager.h" #include "PriceManager.h" #include "ParkingCenter.h" #include "ZoneUtil.h" #include "RelicUtil.h" #include "ItemUtil.h" #include "VariableManager.h" #include "item/Key.h" #include "item/Potion.h" #include "item/Magazine.h" #include "item/Belt.h" #include "Gpackets/GCShopSellOK.h" #include "Gpackets/GCShopSellFail.h" #include "Gpackets/GCShopBought.h" #include "Gpackets/GCDeleteObject.h"#endif//////////////////////////////////////////////////////////////////////////////// 敲饭捞绢啊 迫妨绊 窍绰 酒捞袍阑 啊瘤绊 乐绰瘤 犬牢茄 促澜俊,// 老馆 酒捞袍苞 葛磐 荤捞努 贸府 何盒栏肺 盒扁茄促.//////////////////////////////////////////////////////////////////////////////void CGShopRequestSellHandler::execute (CGShopRequestSell* pPacket , Player* pPlayer) throw (ProtocolException , Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); ObjectID_t ITEMOID = pPacket->getItemObjectID(); BYTE OPCODE = pPacket->getOpCode(); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); if (OPCODE == SHOP_REQUEST_SELL_NORMAL) { // 敲饭捞绢啊 迫妨绊 窍绰 酒捞袍阑 啊瘤绊 乐绰瘤 八荤 Inventory* pInventory = pPC->getInventory(); if (pInventory->hasItem(ITEMOID) == false) throw ProtocolException("CGShopRequestSellHandler::execute() : No such item to sell!"); Item* pItem = pInventory->getItemWithObjectID(ITEMOID); if (pItem == NULL) return sendFailPacket(pPacket, pPlayer); //ItemInfo* pItemInfo = g_pItemInfoManager->getItemInfo( pItem->getItemClass(), pItem->getItemType() ); //Assert(pItemInfo!=NULL); // 蜡聪农 酒捞袍篮 给魄促. // 漂沥 酒捞袍 努贰胶绰 迫 荐 绝促. by sigi. 2002.8.29 // 急拱 惑磊绰 迫 荐 乐促. by bezz. 2002.12.13 // 目敲傅篮 迫 荐 绝促. by Sequoia. 2003. 3. 3 // ItemUtil 救俊 canSell 肺 Extract 2003. 3. 3 if ( !canSell( pItem ) ) { return sendFailPacket(pPacket, pPlayer); } else if (pItem->getItemClass() == Item::ITEM_CLASS_KEY && pItem->getItemType() == 2) { executeMotorcycle(pPacket, pPlayer); } else { executeNormal(pPacket, pPlayer); } } else if (OPCODE == SHOP_REQUEST_SELL_ALL_SKULL) { executeOpAllSkull(pPacket, pPlayer); } else { throw ProtocolException("CGShopRequestSellHandler::execute() : unknown op code"); } #endif __END_DEBUG_EX __END_CATCH}//////////////////////////////////////////////////////////////////////////////// // 老馆 酒捞袍阑 贸府茄促.////////////////////////////////////////////////////////////////////////////////void CGShopRequestSellHandler::executeNormal (CGShopRequestSell* pPacket , Player* pPlayer) throw (ProtocolException , Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ ObjectID_t NPCID = pPacket->getObjectID(); ObjectID_t ITEMOID = pPacket->getItemObjectID(); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); BYTE index = 0; bool bSpecialItem = false; Zone* pZone = pPC->getZone(); if (pZone == NULL) return sendFailPacket(pPacket, pPlayer); Creature* pNPCBase = NULL; /* try { pNPCBase = pZone->getCreature(NPCID); } catch (NoSuchElementException & nsee) { pNPCBase = NULL; } */ // NoSuch力芭. by sigi. 2002.5.2 pNPCBase = pZone->getCreature(NPCID); if (pNPCBase == NULL || !pNPCBase->isNPC()) return sendFailPacket(pPacket, pPlayer); NPC* pNPC = dynamic_cast<NPC*>(pNPCBase); // 敲饭捞绢啊 迫妨绊 窍绰 酒捞袍阑 啊瘤绊 乐绰瘤 八荤 Inventory* pInventory = pPC->getInventory(); //Gold_t playerMoney = pPC->getGold(); Item* pItem = pInventory->getItemWithObjectID(ITEMOID); ItemNum_t itemNumber = pItem->getNum(); Price_t itemPrice = g_pPriceManager->getPrice(pItem, pNPC->getMarketCondBuy(), SHOP_RACK_NORMAL, pPC) * itemNumber; // 敲饭捞绢狼 牢亥配府俊 酒捞袍阑 力芭茄促. pInventory->deleteItem(ITEMOID); pItem->whenPCLost(pPC); if (!pItem->destroy()) { filelog("shopDBBug.txt", "NoSuchItemInDB-destroy: %s", pItem->toString().c_str()); throw DisconnectException("酒捞袍 瘤匡妨绰单 DB俊 绝促."); } // 父距 骇飘扼搁 救俊 乐绰 器记阑 昏力秦霖促. // DB俊辑 瘤快绰 巴篮 Belt::destroy()甫 何福绰 巴父栏肺 器记鳖瘤 昏力等促. if (pItem->getItemClass() == Item::ITEM_CLASS_BELT) { Inventory* pBeltInventory = dynamic_cast<Belt*>(pItem)->getInventory(); for (int y=0; y<pBeltInventory->getHeight(); y++) { for (int x=0; x<pBeltInventory->getWidth(); x++) { Item* pBeltItem = pBeltInventory->getItem(x, y); if (pBeltItem != NULL) { pBeltInventory->deleteItem(x, y); SAFE_DELETE(pBeltItem); } } } } // Skull 老 版快 Variable Manager 俊辑 赣府蔼 硅荐 蔼栏肺 啊拜阑 货肺 拌魂茄促 if (pItem->getItemClass() == Item::ITEM_CLASS_SKULL) { itemPrice = itemPrice * (g_pVariableManager->getHeadPriceBonus() / 100); } // ItemTrace Log 甫 巢败具 茄促搁 巢变促 if ( pItem != NULL && pItem->isTraceItem() ) { remainTraceLog( pItem, pCreature->getName() , pNPC->getName(), ITEM_LOG_DELETE, DETAIL_SHOPSELL); } // 敲饭捞绢俊霸 拱扒蔼阑 瘤阂茄促. // pPC->setGoldEx(playerMoney+itemPrice); // by sigi. 2002.9.4 pPC->increaseGoldEx(itemPrice); // 敲饭捞绢啊 拱扒 迫 锭 贸府且 巴甸阑 贸府茄促. pPC->sellItem( pItem ); // NPC俊霸 磊府啊 面盒窍促搁 敲饭捞绢啊 魄 酒捞袍阑 焊包茄促. // 款康磊 疙飞绢肺 父电 酒捞袍篮 官肺 绝矩促. // 窜 胶其既 酒捞袍父阑 焊包茄促. 畴富 酒捞袍篮 弊成 滚覆. // 涅胶飘 酒捞袍篮 焊包窍瘤 臼绊 滚赴促. if (pNPC->getShopType()==SHOPTYPE_NORMAL && pItem->getCreateType()!=Item::CREATE_TYPE_CREATE && !pItem->getOptionTypeList().empty() && !pItem->isTimeLimitItem() ) { bSpecialItem = true; index = pNPC->getFirstEmptySlot(SHOP_RACK_SPECIAL); if (index < SHOP_RACK_INDEX_MAX) { // 酒捞袍阑 眠啊茄促. pNPC->insertShopItem(SHOP_RACK_SPECIAL, index, pItem); // 胶其既 酒捞袍阑 NPC啊 柳凯厘俊 眠啊沁栏骨肺, 惑痢 滚傈捞 棵扼埃促. pNPC->increaseShopVersion(SHOP_RACK_SPECIAL); //////////////////////////////////////////////////////////////////////////// // 辟贸狼 敲饭捞绢甸俊霸绰 GCShopBought甫... //////////////////////////////////////////////////////////////////////////// int CenterX = pNPC->getX(); int CenterY = pNPC->getY(); Creature* pNearCreature = NULL; Player* pNearPlayer = NULL; GCShopBought boughtpkt; boughtpkt.setObjectID(NPCID); if (!pItem->getOptionTypeList().empty()) { boughtpkt.setShopVersion(pNPC->getShopVersion(SHOP_RACK_SPECIAL)); boughtpkt.setShopType(SHOP_RACK_SPECIAL); } else { boughtpkt.setShopVersion(pNPC->getShopVersion(SHOP_RACK_NORMAL)); boughtpkt.setShopType(SHOP_RACK_NORMAL); } boughtpkt.setShopIndex(index); boughtpkt.setItemObjectID(ITEMOID); boughtpkt.setItemClass(pItem->getItemClass()); boughtpkt.setItemType(pItem->getItemType()); boughtpkt.setOptionType(pItem->getOptionTypeList()); boughtpkt.setDurability(pItem->getDurability()); boughtpkt.setSilver(pItem->getSilver()); boughtpkt.setGrade(pItem->getGrade()); boughtpkt.setEnchantLevel(pItem->getEnchantLevel()); //pZone->broadcastPacket(pNPC->getX(), pNPC->getY(), &boughtpkt, pPC); try { for (int zx=CenterX-5; zx<=CenterX+5; zx++) { for (int zy=CenterY-5; zy<=CenterY+5; zy++) { // 官款靛甫 逞绢啊瘤 臼绰啊甫 眉农 if (!isValidZoneCoord(pZone, zx, zy)) continue; Tile & tile = pZone->getTile(zx, zy); // 吧绢促聪绰 农府媚甫 八祸 if (tile.hasCreature(Creature::MOVE_MODE_WALKING)) { pNearCreature = tile.getCreature(Creature::MOVE_MODE_WALKING); if (pNearCreature == NULL) continue; // 规陛 拱扒阑 魄 敲饭捞绢扼搁 积帆 if (pNearCreature->getObjectID() == pPC->getObjectID()) continue; // 父距 敲饭捞绢扼搁 菩哦阑 焊郴霖促. if (pNearCreature->isPC()) { pNearPlayer = pNearCreature->getPlayer(); if (pNearPlayer == NULL) continue; pNearPlayer->sendPacket(&boughtpkt); } } // 朝酒促聪绰 农府媚甫 八祸 if (tile.hasCreature(Creature::MOVE_MODE_FLYING)) { pNearCreature = tile.getCreature(Creature::MOVE_MODE_FLYING); if (pNearCreature == NULL) continue; // 规陛 拱扒阑 魄 敲饭捞绢扼搁 积帆 if (pNearCreature->getObjectID() == pPC->getObjectID()) continue; // 父距 敲饭捞绢扼搁 菩哦阑 焊郴霖促. if (pNearCreature->isPC()) { pNearPlayer = pNearCreature->getPlayer();
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?