cgshoprequestbuyhandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 927 行 · 第 1/3 页
CPP
927 行
soldpkt.setShopType(shopType); soldpkt.setShopIndex(shopIndex); 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) { // 规陛 酒捞袍阑 备涝茄 敲饭捞绢扼搁 积帆 if (pNearCreature->getObjectID() == pPC->getObjectID()) continue; // 父距 敲饭捞绢扼搁 菩哦阑 焊郴霖促. if (pNearCreature->isPC()) { pNearPlayer = pNearCreature->getPlayer(); if (pNearPlayer != NULL) pNearPlayer->sendPacket(&soldpkt); } } } if (tile.hasCreature(Creature::MOVE_MODE_FLYING)) { // 朝酒促聪绰 农府媚甫 八祸 pNearCreature = tile.getCreature(Creature::MOVE_MODE_FLYING); if (pNearCreature != NULL) { // 规陛 酒捞袍阑 备涝茄 敲饭捞绢扼搁 积帆 if (pNearCreature->getObjectID() == pPC->getObjectID()) continue; // 父距 敲饭捞绢扼搁 菩哦阑 焊郴霖促. if (pNearCreature->isPC()) { pNearPlayer = pNearCreature->getPlayer(); if (pNearPlayer != NULL) pNearPlayer->sendPacket(&soldpkt); } } } } // for (ZoneCoord_t zy...) 场 } // for (ZoneCoord_t zx...) 场 } catch (Throwable& t) { filelog("shopbug_packet.log", "%s", t.toString().c_str()); } } // if (shopType == SHOP_RACK_NORMAL) else 场 SAFE_DELETE(pTestKey);#endif __END_DEBUG_EX __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 捞亥飘 酒捞袍狼 备涝阑 贸府茄促.//////////////////////////////////////////////////////////////////////////////void CGShopRequestBuyHandler::executeEvent(CGShopRequestBuy* pPacket , Player* pPlayer) throw (ProtocolException , Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__#ifdef __XMAS_EVENT_CODE__ //cout << "CGShopRequestBuy::executeChildrenEvent() : BEGIN" << endl; ObjectID_t NPCID = pPacket->getObjectID(); ShopRackType_t shopType = pPacket->getShopType(); BYTE shopIndex = pPacket->getShopIndex(); ItemNum_t itemNum = pPacket->getItemNum(); Coord_t x = pPacket->getX(); Coord_t y = pPacket->getY(); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Zone* pZone = pPC->getZone(); NPC* pNPC = dynamic_cast<NPC*>(pZone->getCreature(NPCID)); // NoSuch力芭. by sigi. 2002.5.2 if (pNPC==NULL) return; Item* pItem = pNPC->getShopItem(shopType, shopIndex); Item::ItemClass IClass = pItem->getItemClass(); ItemType_t IType = pItem->getItemType(); const list<OptionType_t>& OType = pItem->getOptionTypeList(); Inventory* pInventory = pPC->getInventory(); Gold_t playerMoney = pPC->getGold(); XMAS_STAR star; // 捞亥飘侩 酒捞袍狼 捞亥飘 啊拜阑 备茄促. g_pPriceManager->getStarPrice(pItem, star); //cout << "荤妨绊 窍绰 酒捞袍:" << endl << pItem->toString() << endl; //cout << "荤妨绊 窍绰 酒捞袍狼 啊拜:" << endl // << "COLOR:" << star.color << ",AMOUNT:" << star.amount << endl; // 刚历 器记捞唱, 藕芒 鞍篮 版快俊绰 酒捞袍 肮荐甫 技泼秦 林绊 唱辑... // 荤角 捞亥飘 酒捞袍俊绰 器记捞唱 藕芒捞 器窃登绢 乐瘤 臼瘤父... switch (pItem->getItemClass()) { case Item::ITEM_CLASS_POTION: dynamic_cast<Potion*>(pItem)->setNum(itemNum); break; case Item::ITEM_CLASS_MAGAZINE: dynamic_cast<Magazine*>(pItem)->setNum(itemNum); break; default: break; } // 捞 何盒俊辑 秦寸窍绰 啊拜父怒狼 喊阑 啊瘤绊 乐绰瘤甫 眉农茄促. if (!pInventory->hasEnoughStar(star)) { //cout << "敲饭捞绢绰 秦寸窍绰 父怒狼 喊阑 啊瘤绊 乐瘤 给钦聪促." << endl; GCShopBuyFail gcShopBuyFail; gcShopBuyFail.setCode(GC_SHOP_BUY_FAIL_NOT_ENOUGH_MONEY); gcShopBuyFail.setAmount(0); pPlayer->sendPacket(&gcShopBuyFail); return; } //cout << "敲饭捞绢绰 秦寸窍绰 父怒 捞惑狼 喊阑 啊瘤绊 乐嚼聪促." << endl; // 趣矫扼档 磊府啊 绝促搁... if (!pInventory->canAddingEx(x, y, pItem)) { //cout << "牢亥配府俊 磊府啊 绝嚼聪促." << endl; GCShopBuyFail gcShopBuyFail; gcShopBuyFail.setCode(GC_SHOP_BUY_FAIL_NOT_ENOUGH_SPACE); gcShopBuyFail.setAmount(0); pPlayer->sendPacket(&gcShopBuyFail); return; } // 敲饭捞绢啊 魂 酒捞袍捞 胶其既 酒捞袍捞扼搁 惑痢 滚傈阑 棵赴促. if (shopType == SHOP_RACK_SPECIAL) { pNPC->increaseShopVersion(shopType); } // 捞 何盒俊辑 敲饭捞绢狼 喊阑 临牢促. pInventory->decreaseStar(star); //cout << "敲饭捞绢狼 喊阑 临看嚼聪促." << endl; Item* pReturnItem = pInventory->addItemEx(x, y, pItem); if (pReturnItem == pItem) { // pReturnItem苞 pItem捞 鞍促绰 富篮 酒捞袍捞 阶捞绰 酒捞袍捞 // 酒聪菌促绰 富捞促. pItem->create(pPC->getName(), STORAGE_INVENTORY, 0, x, y); // 窜鉴洒 create父 何福搁 DB俊绰 器记狼 肮荐 鞍篮 巴阑 1俺肺 父电促. // 弊矾骨肺 促矫 技捞宏甫 阂矾辑 角力利牢 肮荐甫 技泼秦拎具 茄促. //pItem->save(pPC->getName(), STORAGE_INVENTORY, 0, x, y); // item狼 create俊辑 俺荐甫 历厘窍档废 官插促. // item历厘 弥利拳. by sigi. 2002.5.13 // OK 菩哦阑 焊辰促. GCShopBuyOK OKPacket; OKPacket.setObjectID(NPCID); OKPacket.setShopVersion(pNPC->getShopVersion(shopType)); OKPacket.setItemObjectID(pItem->getObjectID()); OKPacket.setItemClass(pItem->getItemClass()); OKPacket.setItemType(pItem->getItemType()); OKPacket.setOptionType(pItem->getOptionTypeList()); OKPacket.setDurability(pItem->getDurability()); OKPacket.setItemNum(pItem->getNum()); OKPacket.setSilver(pItem->getSilver()); OKPacket.setGrade(pItem->getGrade()); OKPacket.setEnchantLevel(pItem->getEnchantLevel()); OKPacket.setPrice(playerMoney); pPlayer->sendPacket(&OKPacket); log(LOG_BUY_ITEM, pPC->getName(), "", pItem->toString()); } else { log(LOG_BUY_ITEM, pPC->getName(), "", pItem->toString()); // pReturnItem苞 pItem捞 促福促绰 富篮 酒捞袍捞 // 阶捞绰 酒捞袍捞菌促绰 富捞促. 弊矾骨肺 歹窍扼绊 焊辰 pItem篮 // 昏力秦 拎具 茄促. SAFE_DELETE(pItem); //pReturnItem->save(pPC->getName(), STORAGE_INVENTORY, 0, x, y); // item历厘 弥利拳. by sigi. 2002.5.13 char pField[80]; sprintf(pField, "Num=%d", pReturnItem->getNum()); pReturnItem->tinysave(pField); // OK 菩哦阑 焊辰促. GCShopBuyOK OKPacket; OKPacket.setObjectID(NPCID); OKPacket.setShopVersion(pNPC->getShopVersion(shopType)); OKPacket.setItemObjectID(pReturnItem->getObjectID()); OKPacket.setItemClass(pReturnItem->getItemClass()); OKPacket.setItemType(pReturnItem->getItemType()); OKPacket.setOptionType(pReturnItem->getOptionTypeList()); OKPacket.setDurability(pReturnItem->getDurability()); OKPacket.setItemNum(pReturnItem->getNum()); OKPacket.setSilver(pReturnItem->getSilver()); OKPacket.setGrade(pReturnItem->getGrade()); OKPacket.setEnchantLevel(pReturnItem->getEnchantLevel()); OKPacket.setPrice(playerMoney); pPlayer->sendPacket(&OKPacket); } pNPC->removeShopItem(shopType, shopIndex); if (shopType == SHOP_RACK_NORMAL) { // 迫赴 酒捞袍捞 畴钢 酒捞袍捞扼搁 鞍篮 鸥涝, 努贰胶狼 酒捞袍阑 积己茄促. Item* pNewItem = g_pItemFactoryManager->createItem(IClass, IType, OType); Assert(pNewItem != NULL); (pZone->getObjectRegistry()).registerObject(pNewItem); pNPC->insertShopItem(shopType, shopIndex, pNewItem); } else if (shopType == SHOP_RACK_MYSTERIOUS) { } else { // 迫赴 酒捞袍捞 畴钢 酒捞袍捞 酒聪扼搁, // 辟贸狼 敲饭捞绢甸俊霸 惑痢狼 拱扒捞 迫啡促绰 荤角阑 舅妨拎具 茄促. int CenterX = pNPC->getX(); int CenterY = pNPC->getY(); GCShopSold soldpkt; soldpkt.setObjectID(NPCID); soldpkt.setShopVersion(pNPC->getShopVersion(shopType)); soldpkt.setShopType(shopType); soldpkt.setShopIndex(shopIndex); //VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1); 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)) { Creature* pNearCreature = tile.getCreature(Creature::MOVE_MODE_WALKING); if (pNearCreature != NULL) { // 规陛 酒捞袍阑 备涝茄 敲饭捞绢扼搁 积帆 if (pNearCreature->getObjectID() == pPC->getObjectID()) continue; // 父距 敲饭捞绢扼搁 菩哦阑 焊郴霖促. if (pNearCreature->isPC()) { Player* pNearPlayer = pNearCreature->getPlayer(); if (pNearPlayer != NULL) pNearPlayer->sendPacket(&soldpkt); } } } // 朝酒促聪绰 农府媚甫 八祸 if (tile.hasCreature(Creature::MOVE_MODE_FLYING)) { Creature* pNearCreature = tile.getCreature(Creature::MOVE_MODE_FLYING); if (pNearCreature != NULL) { // 规陛 酒捞袍阑 备涝茄 敲饭捞绢扼搁 积帆 if (pNearCreature->getObjectID() == pPC->getObjectID()) continue; // 父距 敲饭捞绢扼搁 菩哦阑 焊郴霖促. if (pNearCreature->isPC()) { Player* pNearPlayer = pNearCreature->getPlayer(); if (pNearPlayer != NULL) pNearPlayer->sendPacket(&soldpkt); } } } } // for (ZoneCoord_t zy...) 场 } // for (ZoneCoord_t zx...) 场 } catch (Throwable& t) { filelog("shopbug_packet.log", "%s", t.toString().c_str()); } } //cout << "CGShopRequestBuy::executeEvent() : END" << endl;#endif#endif __END_DEBUG_EX __END_CATCH}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?