cgpickupmoneyhandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 257 行
CPP
257 行
//////////////////////////////////////////////////////////////////////////////// Filename : CGPickupMoneyHandler.cc// Written By : excel96// Description : //////////////////////////////////////////////////////////////////////////////#include "CGPickupMoney.h"#ifdef __GAME_SERVER__ #include "GamePlayer.h" #include "Zone.h" #include "Slayer.h" #include "Vampire.h" #include "Ousters.h" #include "Item.h" #include "ItemUtil.h" #include "LogClient.h" #include "ZoneUtil.h" #include "VariableManager.h" #include "item/Money.h" #include "Gpackets/GCDeleteandPickUpOK.h" #include "Gpackets/GCDeleteObject.h" #include "Gpackets/GCCannotAdd.h" #include <stdio.h>#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGPickupMoneyHandler::execute (CGPickupMoney* pPacket, Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX __BEGIN_DEBUG #ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); try { GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); bool bSuccess = false; bool bMargin = false; Gold_t itemGold = 0; Gold_t currentGold = 0; Gold_t marginGold = 0; Slayer* pSlayer = NULL; Vampire* pVampire = NULL; Ousters* pOusters = NULL; Zone* pZone = NULL; Coord_t ZoneX = pPacket->getZoneX(); Coord_t ZoneY = pPacket->getZoneY(); if (pCreature->isSlayer()) { pSlayer = dynamic_cast<Slayer*>(pCreature); pZone = pSlayer->getZone(); } else if (pCreature->isVampire()) { pVampire = dynamic_cast<Vampire*>(pCreature); pZone = pVampire->getZone(); } else if (pCreature->isOusters()) { pOusters = dynamic_cast<Ousters*>(pCreature); pZone = pOusters->getZone(); } else throw ProtocolException("CGDropMoneyHandler::execute() : 舅 荐 绝绰 敲饭捞绢 农府媚."); Assert(pZone != NULL); // 官款靛甫 逞绢啊搁 救 等促. if (!isValidZoneCoord(pZone, ZoneX, ZoneY)) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); return; } // 鸥老俊 酒捞袍捞 绝促搁 府畔捞促. Tile& _Tile = pZone->getTile(ZoneX, ZoneY); if (!_Tile.hasItem()) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); return; } Item* pItem = _Tile.getItem(); Assert(pItem != NULL); Item::ItemClass IClass = pItem->getItemClass(); ObjectID_t ObjectID = pItem->getObjectID(); // 酒捞袍捞 捣捞 嘎绰瘤, 弊府绊 坷宏璃飘 ID啊 嘎绰瘤 眉农茄促. if ((IClass == Item::ITEM_CLASS_MONEY) && (ObjectID == pPacket->getObjectID())) { Money* pMoney = dynamic_cast<Money*>(pItem); itemGold = pMoney->getAmount(); marginGold = 0; if (pCreature->isSlayer()) currentGold = pSlayer->getGold(); else if (pCreature->isVampire()) currentGold = pVampire->getGold(); else if (pCreature->isOusters()) currentGold = pOusters->getGold(); // 惑措规狼 捣篮 甸瘤 给茄促. if ( (pCreature->isSlayer() && pItem->getItemType() != 0) || (pCreature->isVampire() && pItem->getItemType() != 1) || (pCreature->isOusters() && pItem->getItemType() != 2) ) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); return; } if (currentGold + itemGold > MAX_MONEY) { // 泅犁 家蜡茄 捣俊促 官蹿俊 乐绰 捣阑 歹窍搁 钙胶甫 檬苞且 版快 // 官蹿俊 乐绰 捣狼 老何父阑 林况具 茄促. Gold_t pickupMoney = MAX_MONEY - currentGold; marginGold = currentGold + itemGold - MAX_MONEY; pMoney->setAmount(marginGold); //if (pCreature->isSlayer()) pSlayer->setGoldEx(MAX_MONEY); //else pVampire->setGoldEx(MAX_MONEY); // by sigi. 2002.9.4 if (pCreature->isSlayer()) pSlayer->increaseGoldEx(pickupMoney); else if (pCreature->isVampire()) pVampire->increaseGoldEx(pickupMoney); else if (pCreature->isOusters()) pOusters->increaseGoldEx(pickupMoney); bSuccess = true; bMargin = true; } else { //if (pCreature->isSlayer()) pSlayer->setGoldEx(currentGold + itemGold); //else pVampire->setGoldEx(currentGold + itemGold); // by sigi. 2002.9.4 if (pCreature->isSlayer()) pSlayer->increaseGoldEx(itemGold); else if (pCreature->isVampire()) pVampire->increaseGoldEx(itemGold); else if (pCreature->isOusters()) pOusters->increaseGoldEx(itemGold); bSuccess = true; bMargin = false; } } else // 捣捞 酒匆 版快俊绰 弊成 { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); return; } if (bSuccess) { log(LOG_PICKUP_MONEY, pCreature->getName(), "", pItem->toString()); // 老窜篮 粮栏肺何磐 酒捞袍阑 昏力茄促. pZone->deleteItem(pItem, ZoneX, ZoneY); GCDeleteandPickUpOK _GCDeleteandPickUpOK; _GCDeleteandPickUpOK.setObjectID(pItem->getObjectID()); pPlayer->sendPacket(&_GCDeleteandPickUpOK); if (pCreature->isSlayer()) { // 辟贸俊 乐绰 促弗 荤恩甸俊罢 酒捞袍俊 荤扼脸促绰 巴阑 焊郴霖促. GCDeleteObject _GCDeleteObject; _GCDeleteObject.setObjectID(pItem->getObjectID()); pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &_GCDeleteObject , pSlayer); } else if (pCreature->isVampire()) { // 辟贸俊 乐绰 促弗 荤恩甸俊罢 酒捞袍俊 荤扼脸促绰 巴阑 焊郴霖促. GCDeleteObject _GCDeleteObject; _GCDeleteObject.setObjectID(pItem->getObjectID()); pZone->broadcastPacket(pVampire->getX(), pVampire->getY(), &_GCDeleteObject , pVampire); } else if (pCreature->isOusters()) { // 辟贸俊 乐绰 促弗 荤恩甸俊罢 酒捞袍俊 荤扼脸促绰 巴阑 焊郴霖促. GCDeleteObject _GCDeleteObject; _GCDeleteObject.setObjectID(pItem->getObjectID()); pZone->broadcastPacket(pOusters->getX(), pOusters->getY(), &_GCDeleteObject , pOusters); } // 捣捞 巢酒乐促搁 巢酒乐绰 咀荐父怒狼 捣阑 促矫 积己秦辑 冻绢哆赴促. if (bMargin) { TPOINT pt = pZone->addItem(pItem, ZoneX, ZoneY); if (pt.x != -1) { //pItem->save("", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y); // item历厘 弥利拳. by sigi. 2002.5.13 char pField[80]; sprintf(pField, "Storage=%d, StorageID=%lu, X=%d, Y=%d", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y); pItem->tinysave(pField); } else { // 捣阑 冻绢哆府瘤 给沁促搁 弊成 昏力茄促. //cout << "#############################################" << endl; //cout << "# CRITICAL ERROR! CANNOT ADD MONEY TO ZONE! #" << endl; //cout << "#############################################" << endl; SAFE_DELETE(pItem); } } else { pItem->destroy(); SAFE_DELETE(pItem); } // 捣肺弊 巢辨 咀荐搁 捣肺弊 巢变促 if ( (itemGold - marginGold) >= g_pVariableManager->getMoneyTraceLogLimit() ) { char zoneName[15]; sprintf(zoneName, "%4d%3d%3d", pZone->getZoneID(), ZoneX, ZoneY); remainMoneyTraceLog( zoneName, pCreature->getName(), ITEM_LOG_MOVE, DETAIL_PICKUP, itemGold - marginGold ); } } else { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); } } catch (Throwable & t) { //cout << t.toString() << endl; }#endif // __GAME_SERVER__ __END_DEBUG __END_DEBUG_EX __END_CATCH}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?