cgshoprequestbuyhandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 927 行 · 第 1/3 页
CPP
927 行
{ //cout << "add ok" << endl; // pReturnItem苞 pItem捞 鞍促绰 富篮 酒捞袍捞 阶捞绰 酒捞袍捞 // 酒聪菌促绰 富捞促. // 扁粮狼 ItemID甫 弊措肺 蜡瘤茄促. // ItemID啊 0捞搁.. create()且锭 促矫 ItemID甫 罐绰促. // by sigi. 2002.10.28 pItem->create(pPC->getName(), STORAGE_INVENTORY, 0, x, y, pItem->getItemID()); // 窜鉴洒 create父 何福搁 DB俊绰 器记狼 肮荐 鞍篮 巴阑 1俺肺 父电促. // 弊矾骨肺 促矫 技捞宏甫 阂矾辑 角力利牢 肮荐甫 技泼秦拎具 茄促. //pItem->save(pPC->getName(), STORAGE_INVENTORY, 0, x, y); // 俺荐甫 官肺 历厘窍档废 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-itemMoney); pPlayer->sendPacket(&OKPacket); log(LOG_BUY_ITEM, pPC->getName(), "", pItem->toString()); } else { //cout << "pile ok" << endl; 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-itemMoney); pPlayer->sendPacket(&OKPacket); } // ItemTrace 肺弊甫 巢变促 if ( pItem != NULL && pItem->isTraceItem() ) { remainTraceLog( pItem, pNPC->getName(), pCreature->getName(), ITEM_LOG_CREATE, DETAIL_SHOPBUY); } //cout << "send OK" << endl; // mysterious item捞 酒囱 版快.. if (!bMysteriousRack) { 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 (bMysteriousRack) { // mysterious item牢 版快绰 惑痢篮 弊措肺 滴搁 等促. //cout << "mysterious item" << endl; } 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); 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()); } } #endif __END_DEBUG_EX __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 葛磐 荤捞努狼 备涝阑 贸府茄促.//////////////////////////////////////////////////////////////////////////////void CGShopRequestBuyHandler::executeMotorcycle (CGShopRequestBuy* pPacket , Player* pPlayer) throw (ProtocolException , Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ // 菩哦 沥焊甫 惶酒辰促. ObjectID_t NPCID = pPacket->getObjectID(); ShopRackType_t shopType = pPacket->getShopType(); BYTE shopIndex = pPacket->getShopIndex(); ZoneCoord_t x = pPacket->getX(); ZoneCoord_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); Price_t itemMoney = g_pPriceManager->getPrice(pItem, pNPC->getMarketCondSell(), shopType, pPC); Item::ItemClass IClass; ItemType_t IType; Inventory* pInventory = pPC->getInventory(); Gold_t playerMoney = pPC->getGold(); list<OptionType_t> optionNULL; Item* pTestKey = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_KEY, 0, optionNULL); Assert(pTestKey != NULL); if (playerMoney < itemMoney) { GCShopBuyFail gcShopBuyFail; gcShopBuyFail.setCode(GC_SHOP_BUY_FAIL_NOT_ENOUGH_MONEY); gcShopBuyFail.setAmount(0); pPlayer->sendPacket(&gcShopBuyFail); SAFE_DELETE(pTestKey); return; } if (!pInventory->canAddingEx(x, y, pTestKey)) { GCShopBuyFail gcShopBuyFail; gcShopBuyFail.setCode(GC_SHOP_BUY_FAIL_NOT_ENOUGH_SPACE); gcShopBuyFail.setAmount(0); pPlayer->sendPacket(&gcShopBuyFail); SAFE_DELETE(pTestKey); return; } // 敲饭捞绢啊 魂 酒捞袍捞 胶其既 酒捞袍捞扼搁 惑痢 滚傈阑 棵赴促. if (shopType == SHOP_RACK_SPECIAL) pNPC->increaseShopVersion(shopType); // 敲饭捞绢狼 捣阑 临牢促. //pPC->setGoldEx(playerMoney - itemMoney); // by sigi. 2002.9.4 pPC->decreaseGoldEx(itemMoney); // 刚历 葛磐 荤捞努阑 NPC狼 柳凯厘俊辑 波郴绢 粮俊促 嘿牢促. // 臂绊 DB俊促啊 葛磐 荤捞努捞 迫啡促绰 巴阑 敬促. TPOINT pt = pZone->addItem(pItem, pPC->getX(), pPC->getY(), false); if (pt.x == -1) { // 辑滚 螟狼 NPC俊霸辑 规陛 迫赴 葛磐 荤捞努阑 瘤款促. //pNPC->removeShopItem(shopType, shopIndex); //SAFE_DELETE(pItem); // 坷配官捞甫 粮俊促 歹且 荐啊 绝菌促. 浆飘... 傲 府畔窍磊. cerr << "######################################################" << endl; cerr << "# CRITICAL ERROR!!! Cannot add MOTORCYCLE to ZONE!!! #" << endl; cerr << "######################################################" << endl; return; } pItem->create(pPC->getName(), STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y); ItemID_t MotorcycleID = pItem->getItemID(); // 葛磐荤捞努阑 欢欧 季磐俊 殿废秦 霖促. MotorcycleBox* pBox = new MotorcycleBox(dynamic_cast<Motorcycle*>(pItem), pZone, pt.x, pt.y); Assert(pBox != NULL); g_pParkingCenter->addMotorcycleBox(pBox); // 促澜栏肺 规陛 积己茄 葛磐 荤捞努俊 嘎绰 虐甫 积己茄促. // 臂绊 DB俊促啊 葛磐 荤捞努 虐啊 敲饭捞绢俊霸 逞绢艾促绰 巴阑 敬促. Item* pKey = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_KEY, 2, optionNULL); Assert(pKey != NULL); (pZone->getObjectRegistry()).registerObject(pKey); dynamic_cast<Key*>(pKey)->setTarget(MotorcycleID); pKey->create(pPC->getName(), STORAGE_INVENTORY, 0, x, y); // 葛磐 荤捞努 虐甫 敲饭捞绢狼 牢亥配府俊 歹茄促. pInventory->addItemEx(x, y, pKey); // 辑滚 螟狼 NPC俊霸辑 规陛 迫赴 葛磐 荤捞努阑 瘤款促. pNPC->removeShopItem(shopType, shopIndex); // OK 菩哦阑 焊辰促. GCShopBuyOK OKPacket; OKPacket.setObjectID(NPCID); OKPacket.setShopVersion(pNPC->getShopVersion(shopType)); OKPacket.setItemObjectID(pKey->getObjectID()); OKPacket.setItemClass(pKey->getItemClass()); OKPacket.setItemType(pKey->getItemType()); OKPacket.setOptionType(pKey->getOptionTypeList()); OKPacket.setDurability(pKey->getDurability()); OKPacket.setItemNum(1); OKPacket.setSilver(pKey->getSilver()); OKPacket.setGrade(pKey->getGrade()); OKPacket.setEnchantLevel(pKey->getEnchantLevel()); OKPacket.setPrice(playerMoney-itemMoney); pPlayer->sendPacket(&OKPacket); // 迫赴 葛磐 荤捞努捞 畴钢 葛磐 荤捞努捞扼搁... // 鞍篮 鸥涝, 努贰胶狼 葛磐 荤捞努阑 积己茄促. if (shopType == SHOP_RACK_NORMAL) { IClass = Item::ITEM_CLASS_MOTORCYCLE; IType = pItem->getItemType(); const list<OptionType_t>& OType = pItem->getOptionTypeList(); 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(); Creature* pNearCreature = NULL; Player* pNearPlayer = NULL; GCShopSold soldpkt; soldpkt.setObjectID(NPCID); soldpkt.setShopVersion(pNPC->getShopVersion(shopType));
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?