cgdropmoneyhandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 166 行
CPP
166 行
//////////////////////////////////////////////////////////////////////////////// Filename : CGDropMoneyHandler.cc// Written By :// Description : //////////////////////////////////////////////////////////////////////////////#include "CGDropMoney.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 "ItemFactoryManager.h" #include "VariableManager.h" #include "item/Money.h" #include "Gpackets/GCDeleteandPickUpOK.h" #include "Gpackets/GCDeleteObject.h" #include <stdio.h>#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGDropMoneyHandler::execute (CGDropMoney* pPacket, Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX __BEGIN_DEBUG #ifdef __GAME_SERVER__ // -_-; 公矫// return; throw DisconnectException( "捣篮 滚副 荐 绝嚼聪促." ); Assert(pPacket != NULL); Assert(pPlayer != NULL); try { GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pPC = pGamePlayer->getCreature(); Gold_t amount = pPacket->getAmount(); Slayer* pSlayer = NULL; Vampire* pVampire = NULL; Ousters* pOusters = NULL; Zone* pZone = NULL; ZoneCoord_t ZoneX = pPC->getX(); ZoneCoord_t ZoneY = pPC->getY(); if (amount == 0) { // 泅犁肺辑绰 傲 府畔茄促. // 捣 冻绢哆府扁甫 角菩沁促绰 菩哦阑 父甸绢具 窍绰 吧鳖? return; } if (pPC->isSlayer()) { pSlayer = dynamic_cast<Slayer*>(pPC); pZone = pSlayer->getZone(); } else if (pPC->isVampire()) { pVampire = dynamic_cast<Vampire*>(pPC); pZone = pVampire->getZone(); } else if (pPC->isOusters()) { pOusters = dynamic_cast<Ousters*>(pPC); pZone = pOusters->getZone(); } else throw ProtocolException("CGDropMoneyHandler::execute() : 舅 荐 绝绰 敲饭捞绢 农府媚."); // 敲饭捞绢啊 冻绢哆府绊磊 窍绰 咀荐父怒狼 捣阑 啊瘤绊 乐绰瘤 犬牢茄促. Item* pItem = NULL; list<OptionType_t> optionNULL; if (pPC->isSlayer()) { if (pSlayer->getGold() < amount) return; pItem = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_MONEY, 0, optionNULL); } else if (pPC->isVampire()) { if (pVampire->getGold() < amount) return; pItem = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_MONEY, 1, optionNULL); } else if (pPC->isOusters()) { if (pOusters->getGold() < amount) return; pItem = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_MONEY, 2, optionNULL); } // 捣 酒捞袍阑 积己茄促. dynamic_cast<Money*>(pItem)->setAmount(amount); // 捣 酒捞袍阑 殿废茄促. pZone->getObjectRegistry().registerObject(pItem); // 捣阑 粮俊促 冻绢哆赴促. 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, "OwnerID='', Storage=%d, StorageID=%lu, X=%d, Y=%d", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y); pItem->tinysave(pField); //pItem->create("", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y); // 捣肺弊 巢辨 咀荐搁 捣肺弊 巢变促 if ( amount >= g_pVariableManager->getMoneyTraceLogLimit() ) { char zoneName[15]; sprintf(zoneName, "%4d%3d%3d", pZone->getZoneID(), ZoneX, ZoneY); remainMoneyTraceLog( pPC->getName(), zoneName, ITEM_LOG_MOVE, DETAIL_DROP, amount); } log(LOG_DROP_MONEY, pPC->getName(), "", pItem->toString()); } else { log(LOG_DROP_MONEY, pPC->getName(), "", "CANNOT DROP! : " + pItem->toString()); //cout << "#############################################" << endl; //cout << "# CRITICAL ERROR! CANNOT ADD MONEY TO ZONE! #" << endl; //cout << "#############################################" << endl; SAFE_DELETE(pItem); return; } // 敲饭捞绢肺何磐 捣阑 化绰促. //if (pPC->isSlayer()) pSlayer->setGoldEx(pSlayer->getGold() - amount); //else if (pPC->isVampire()) pVampire->setGoldEx(pVampire->getGold() - amount); // by sigi. 2002.9.4 if (pPC->isSlayer()) pSlayer->decreaseGoldEx(amount); else if (pPC->isVampire()) pVampire->decreaseGoldEx(amount); else if (pPC->isOusters()) pOusters->decreaseGoldEx(amount); } catch (Throwable & t) { //cout << t.toString() << endl; }#endif // __GAME_SERVER__ __END_DEBUG __END_DEBUG_EX __END_CATCH}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?