cgpickupmoneyhandler.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· 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 + -
显示快捷键?