cgaddinventorytomousehandler.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 183 行

CPP
183
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGAddInventoryToMouseHandler.cc// Written By  : elca@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "CGAddInventoryToMouse.h"#ifdef __GAME_SERVER__	#include "GamePlayer.h"	#include "Zone.h"	#include "PlayerCreature.h"	#include "Inventory.h"	#include "Item.h"	#include "ItemFactoryManager.h"	#include "ItemUtil.h"	#include "TradeManager.h"	#include "ObjectRegistry.h"	#include "Gpackets/GCTradeVerify.h"	#include "Gpackets/GCCannotAdd.h"	#include "Gpackets/GCCreateItem.h"	#include <stdio.h>#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGAddInventoryToMouseHandler::execute(CGAddInventoryToMouse* pPacket , Player* pPlayer)	throw (ProtocolException, Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	Assert(pGamePlayer != NULL);	Creature* pCreature = pGamePlayer->getCreature();	Assert(pCreature != NULL);	PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);	Assert(pPC != NULL);	Zone* pZone = pPC->getZone();	Assert(pZone != NULL);	CoordInven_t InvenX = pPacket->getX();	CoordInven_t InvenY = pPacket->getY();	ObjectID_t   ItemOID = pPacket->getObjectID();	Inventory* pInventory = pPC->getInventory();	Assert(pInventory != NULL);	// 牢亥配府 谅钎甫 逞绢啊搁 帮鄂窍促...	if (InvenX >= pInventory->getWidth() || InvenY >= pInventory->getHeight())	{		GCCannotAdd _GCCannotAdd;		_GCCannotAdd.setObjectID(pPacket->getObjectID());		pPlayer->sendPacket(&_GCCannotAdd);		return;	}	Item* pItem          = pInventory->getItem(InvenX, InvenY);	Item* pExtraSlotItem = pPC->getExtraInventorySlotItem();	// 歹窍绊磊 窍绰 酒捞袍捞 绝芭唱, 捞固 付快胶俊 购啊啊 嘿绢乐促搁	// 甸 荐 绝促.	if (pItem == NULL || pExtraSlotItem != NULL)	{		GCCannotAdd _GCCannotAdd;		_GCCannotAdd.setObjectID(pPacket->getObjectID());		pPlayer->sendPacket(&_GCCannotAdd);		return;	}	// 老馆利牢 酒捞袍 付快胶 歹窍扁 风凭	if (ItemOID != 0)	{		// OID啊 老摹窍瘤 臼栏搁 帮鄂窍促...		if (pItem->getObjectID() != ItemOID)		{			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);			return;		}		pInventory->deleteItem(pItem->getObjectID());		pPC->addItemToExtraInventorySlot(pItem);		//pItem->save(pPC->getName(), STORAGE_EXTRASLOT, 0, 0, 0);		// item历厘 弥利拳. by sigi. 2002.5.13		char pField[80];		sprintf(pField, "Storage=%d, StorageID=0", STORAGE_EXTRASLOT);		pItem->tinysave(pField);		TradeManager* pTradeManager = pZone->getTradeManager();		TradeInfo* pInfo = pTradeManager->getTradeInfo(pCreature->getName());		if (pInfo != NULL && pInfo->getStatus() == TRADE_FINISH)		{			GCTradeVerify gcTradeVerify;			gcTradeVerify.setCode(GC_TRADE_VERIFY_CODE_INVENTORY_TO_MOUSE_OK);			pPlayer->sendPacket(&gcTradeVerify);		}	}	// 般摹绰 酒捞袍 盒府窍扁 风凭	else	{		// 般摹绰 酒捞袍捞 酒聪芭唱, 泅犁 箭磊啊 2 固父捞扼搁 盒府且 荐 绝促.		if (!isStackable(pItem) || pItem->getNum() < 2 || (pItem->getItemClass() == Item::ITEM_CLASS_MOON_CARD && pItem->getItemType() == 2 && pItem->getNum() == 99))		{			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);			return;		}		// 扁粮狼 酒捞袍阑 官帕栏肺 鞍篮 酒捞袍阑 积己茄促. 		Item::ItemClass IClass = pItem->getItemClass();		ItemType_t      IType  = pItem->getItemType();		const list<OptionType_t>& OType  = pItem->getOptionTypeList();		Item* pNewItem = g_pItemFactoryManager->createItem(IClass, IType, OType);		Assert(pNewItem != NULL);		// 付快胶俊促 歹且 酒捞袍篮 扁粮狼 OID甫 啊廉啊绊,		// 牢亥配府俊 巢阑 酒捞袍篮 货肺款 OID甫 罐酒具 茄促.		Zone* pZone = pPC->getZone();		Assert(pZone != NULL);		ObjectRegistry& OR = pZone->getObjectRegistry();		OR.registerObject(pNewItem);		// 牢亥配府俊 巢酒乐绰 酒捞袍狼 箭磊绰 盔贰 箭磊俊辑 1阑 猾 箭磊啊 等促.		// 扁粮狼 酒捞袍篮 付快胶肺 颗败脸栏骨肺, 箭磊啊 1捞 等促.		// 牢亥配府俊辑 付快胶肺 颗败柳 酒捞袍阑 昏力窍绊, 		// 货肺 积己等 酒捞袍阑 歹茄促.		pInventory->deleteItem(pItem->getObjectID());		pPC->addItemToExtraInventorySlot(pItem);		int NewNum = pItem->getNum() - 1;		pNewItem->setNum(NewNum); 		pItem->setNum(1);		pInventory->addItem(InvenX, InvenY, pNewItem);		// 崔扼柳 困摹 沥焊甫 技捞宏茄促...		//pItem->save(pPC->getName(), STORAGE_EXTRASLOT, 0, 0, 0);		// item历厘 弥利拳. by sigi. 2002.5.13		char pField[80];		sprintf(pField, "Num=%d, Storage=%d, StorageID=0", 1, STORAGE_EXTRASLOT);		pItem->tinysave(pField);		pNewItem->create(pPC->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);		//pNewItem->setNum(NewNum); // 困俊辑 沁绰单 肚 窍匙. -_-;		//pNewItem->save(pPC->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);		// item历厘 弥利拳. by sigi. 2002.5.13		sprintf(pField, "Num=%d, Storage=%d, StorageID=0", NewNum, STORAGE_INVENTORY);		pNewItem->tinysave(pField);		// 努扼捞攫飘俊霸绰 GCCreateItem 菩哦阑 捞侩秦 		// 牢亥配府俊 货肺捞(?) 积己等 酒捞袍俊 措茄 沥焊甫 焊郴霖促.		GCCreateItem gcCreateItem;		gcCreateItem.setObjectID(pNewItem->getObjectID());		gcCreateItem.setItemClass((BYTE)pNewItem->getItemClass());		gcCreateItem.setItemType(pNewItem->getItemType());		gcCreateItem.setOptionType(pNewItem->getOptionTypeList());		gcCreateItem.setDurability(pNewItem->getDurability());		gcCreateItem.setSilver(pNewItem->getSilver());		gcCreateItem.setEnchantLevel(pNewItem->getEnchantLevel());		gcCreateItem.setItemNum(pNewItem->getNum());		gcCreateItem.setInvenX(InvenX);		gcCreateItem.setInvenY(InvenY);		pPlayer->sendPacket(&gcCreateItem);	}	#endif	// __GAME_SERVER__    __END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?