cgaddmousetoquickslothandler.cpp

来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 348 行

CPP
348
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGAddMouseToQuickSlotHandler.cc// Written By  : elca@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "CGAddMouseToQuickSlot.h"#ifdef __GAME_SERVER__	#include "GamePlayer.h"	#include "Zone.h"	#include "Slayer.h"	#include "Ousters.h"	#include "Inventory.h"	#include "Item.h"	#include "ItemUtil.h"	#include "item/Belt.h"	#include "item/OustersArmsband.h"	#include "Gpackets/GCCannotAdd.h"	#include <stdio.h>#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGAddMouseToQuickSlotHandler::execute (CGAddMouseToQuickSlot* pPacket , Player* pPlayer)	throw (ProtocolException, Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	Assert(pPacket != NULL);	Assert(pPlayer != NULL);	GamePlayer*    pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);	Creature*      pCreature   = pGamePlayer->getCreature();	bool           Success     = false;	if (pCreature->isSlayer())	{		Slayer*        pSlayer    = dynamic_cast<Slayer*>(pCreature);		InventorySlot* pExtraSlot = pSlayer->getExtraInventorySlot();		Item*          pItem      = pExtraSlot->getItem();		if (pItem == NULL)		{			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);			return;		}		ObjectID_t      ItemObjectID = pItem->getObjectID();		SlotID_t        SlotID       = pPacket->getSlotID();		Item::ItemClass IClass       = pItem->getItemClass();		// 酒捞袍狼 ObjectID啊 老摹窍绰瘤 眉农茄促.		if (ItemObjectID != pPacket->getObjectID()) 		{			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);			return;		}		// 骇飘甫 涝绊 乐瘤 臼促搁 骇飘俊促 酒捞袍阑 歹且 荐啊 绝促.		if (!pSlayer->isWear(Slayer::WEAR_BELT))		{			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);			return;		}		// 器记档 酒聪绊, 藕芒档 酒聪扼搁 歹且 荐啊 绝瘤.		if (IClass != Item::ITEM_CLASS_POTION && IClass != Item::ITEM_CLASS_MAGAZINE)		{			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);			return;		}		Item*      pBelt          = pSlayer->getWearItem(Slayer::WEAR_BELT);		Inventory* pBeltInventory = ((Belt*)pBelt)->getInventory();		if (pBeltInventory->canAdding(SlotID, 0,  pItem)) 		{			// 泅犁 骇飘俊 乐绰 Item阑 罐酒柯促.			Item* pPrevItem = pBeltInventory->getItem(SlotID, 0);			// 瘤沥茄 磊府俊 酒捞袍捞 乐促搁...			if (pPrevItem != NULL)			{				// 酒捞袍捞 肯傈洒 鞍篮 酒捞袍捞扼搁...				if (isSameItem(pItem, pPrevItem))				{					int MaxStack = ItemMaxStack[pItem->getItemClass()];					if (pItem->getNum() + pPrevItem->getNum() > MaxStack) 					{						ItemNum_t CurrentNum = pPrevItem->getNum();						ItemNum_t AddNum     = pItem->getNum();						ItemNum_t NewNum	 = AddNum + CurrentNum - MaxStack;						pPrevItem->setNum(MaxStack);						pItem->setNum(NewNum);						pBeltInventory->increaseNum(MaxStack - CurrentNum);						pBeltInventory->increaseWeight(pItem->getWeight()* (MaxStack - CurrentNum));						//pPrevItem->save(pSlayer->getName(), STORAGE_BELT, pBelt->getItemID(), SlotID, 0);						// item历厘 弥利拳. by sigi. 2002.5.13						char pField[80];						sprintf(pField, "Num=%d, Storage=%d, StorageID=%lu, X=%d", MaxStack, STORAGE_BELT, pBelt->getItemID(), SlotID);						pPrevItem->tinysave(pField);						//pItem->save(pSlayer->getName(), STORAGE_EXTRASLOT, 0, 0, 0);						// item历厘 弥利拳. by sigi. 2002.5.13						sprintf(pField, "Num=%d, Storage=%d", NewNum, STORAGE_EXTRASLOT);						pItem->tinysave(pField);						Success = true;					} 					else // 箭磊啊 9俺甫 逞瘤 臼阑 锭.					{						pSlayer->deleteItemFromExtraInventorySlot();						pPrevItem->setNum(pPrevItem->getNum() + pItem->getNum());						pBeltInventory->increaseNum(pItem->getNum());						pBeltInventory->increaseWeight(pItem->getWeight()* pItem->getNum());						//pPrevItem->save(pSlayer->getName(), STORAGE_BELT , pBelt->getItemID(), SlotID, 0);						// item历厘 弥利拳. by sigi. 2002.5.13						char pField[80];						sprintf(pField, "Num=%d, Storage=%d, StorageID=%lu, X=%d", pPrevItem->getNum(), STORAGE_BELT, pBelt->getItemID(), SlotID);						pPrevItem->tinysave(pField);						pItem->destroy();						SAFE_DELETE(pItem);						Success = true;					}				} 				else // 努贰胶尔 鸥涝捞 鞍瘤 臼阑锭				{					// 付快胶俊 崔妨乐绰 酒捞袍苞 骇飘俊 乐绰 酒捞袍阑 力芭茄促.					pSlayer->deleteItemFromExtraInventorySlot();					pBeltInventory->deleteItem(pPrevItem->getObjectID());					// 笛狼 困摹甫 官层 霖促.					pSlayer->addItemToExtraInventorySlot(pPrevItem);					pBeltInventory->addItem(SlotID , 0 , pItem);					// DB俊促啊 历厘阑 茄促.					//pPrevItem->save(pSlayer->getName(), STORAGE_EXTRASLOT, 0, 0, 0);					// item历厘 弥利拳. by sigi. 2002.5.13					char pField[80];					sprintf(pField, "Storage=%d", STORAGE_EXTRASLOT);					pPrevItem->tinysave(pField);					//pItem->save(pSlayer->getName(), STORAGE_BELT , pBelt->getItemID(), SlotID, 0);					// item历厘 弥利拳. by sigi. 2002.5.13					sprintf(pField, "Storage=%d, StorageID=%lu, X=%d", STORAGE_BELT, pBelt->getItemID(), SlotID);					pItem->tinysave(pField);					Success = true;				}			} 			else // 浇儿俊 酒公繁 扁粮狼 酒捞袍捞 绝阑锭.			{				// Inventory俊 漂沥 酒捞袍阑 持绰促.				pBeltInventory->addItem(SlotID, 0 , pItem);				// 持扁俊 己傍窍搁 付快胶俊 崔妨乐绰 酒捞袍阑 绝矩促.				pSlayer->deleteItemFromExtraInventorySlot();				//pItem->save(pSlayer->getName(), STORAGE_BELT, pBelt->getItemID(), SlotID, 0);				// item历厘 弥利拳. by sigi. 2002.5.13				char pField[80];				sprintf(pField, "Storage=%d, StorageID=%lu, X=%d", STORAGE_BELT, pBelt->getItemID(), SlotID);				pItem->tinysave(pField);				Success = true;			}		} // end of if (pBeltInventory->canAdding(SlotID, 0,  pItem)) 	} // if (pCreature->isSlayer())	else if (pCreature->isOusters())	{		Ousters*        pOusters  = dynamic_cast<Ousters*>(pCreature);		InventorySlot* pExtraSlot = pOusters->getExtraInventorySlot();		Item*          pItem      = pExtraSlot->getItem();		if (pItem == NULL)		{			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);			return;		}		ObjectID_t      ItemObjectID = pItem->getObjectID();		SlotID_t        SlotID       = pPacket->getSlotID();		Item::ItemClass IClass       = pItem->getItemClass();		// 酒捞袍狼 ObjectID啊 老摹窍绰瘤 眉农茄促.		if (ItemObjectID != pPacket->getObjectID()) 		{			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);			return;		}		Ousters::WearPart part = ( SlotID > 2 ? Ousters::WEAR_ARMSBAND2 : Ousters::WEAR_ARMSBAND1 );		if ( SlotID > 2 ) SlotID -= 3;		// 秦寸 鞠胶龟靛啊 绝促		if (!pOusters->isWear(part)) 		{			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);			return;		}		// 仟颇档 酒聪绊, 霓器胶皋捞档 酒聪扼搁 歹且 荐啊 绝瘤.		if (IClass != Item::ITEM_CLASS_PUPA && IClass != Item::ITEM_CLASS_COMPOS_MEI )		{			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);			return;		}		Item*      pArmsband          = pOusters->getWearItem(part);		Inventory* pArmsbandInventory = ((OustersArmsband*)pArmsband)->getInventory();		if (pArmsbandInventory->canAdding(SlotID, 0,  pItem)) 		{			// 泅犁 骇飘俊 乐绰 Item阑 罐酒柯促.			Item* pPrevItem = pArmsbandInventory->getItem(SlotID, 0);			// 瘤沥茄 磊府俊 酒捞袍捞 乐促搁...			if (pPrevItem != NULL)			{				// 酒捞袍捞 肯傈洒 鞍篮 酒捞袍捞扼搁...				if (isSameItem(pItem, pPrevItem))				{					int MaxStack = ItemMaxStack[pItem->getItemClass()];					if (pItem->getNum() + pPrevItem->getNum() > MaxStack) 					{						ItemNum_t CurrentNum = pPrevItem->getNum();						ItemNum_t AddNum     = pItem->getNum();						ItemNum_t NewNum	 = AddNum + CurrentNum - MaxStack;						pPrevItem->setNum(MaxStack);						pItem->setNum(NewNum);						pArmsbandInventory->increaseNum(MaxStack - CurrentNum);						pArmsbandInventory->increaseWeight(pItem->getWeight()* (MaxStack - CurrentNum));						//pPrevItem->save(pOusters->getName(), STORAGE_BELT, pArmsband->getItemID(), SlotID, 0);						// item历厘 弥利拳. by sigi. 2002.5.13						char pField[80];						sprintf(pField, "Num=%d, Storage=%d, StorageID=%lu, X=%d", MaxStack, STORAGE_BELT, pArmsband->getItemID(), SlotID);						pPrevItem->tinysave(pField);						//pItem->save(pOusters->getName(), STORAGE_EXTRASLOT, 0, 0, 0);						// item历厘 弥利拳. by sigi. 2002.5.13						sprintf(pField, "Num=%d, Storage=%d", NewNum, STORAGE_EXTRASLOT);						pItem->tinysave(pField);						Success = true;					} 					else // 箭磊啊 9俺甫 逞瘤 臼阑 锭.					{						pOusters->deleteItemFromExtraInventorySlot();						pPrevItem->setNum(pPrevItem->getNum() + pItem->getNum());						pArmsbandInventory->increaseNum(pItem->getNum());						pArmsbandInventory->increaseWeight(pItem->getWeight()* pItem->getNum());						//pPrevItem->save(pOusters->getName(), STORAGE_BELT , pArmsband->getItemID(), SlotID, 0);						// item历厘 弥利拳. by sigi. 2002.5.13						char pField[80];						sprintf(pField, "Num=%d, Storage=%d, StorageID=%lu, X=%d", pPrevItem->getNum(), STORAGE_BELT, pArmsband->getItemID(), SlotID);						pPrevItem->tinysave(pField);						pItem->destroy();						SAFE_DELETE(pItem);						Success = true;					}				} 				else // 努贰胶尔 鸥涝捞 鞍瘤 臼阑锭				{					// 付快胶俊 崔妨乐绰 酒捞袍苞 骇飘俊 乐绰 酒捞袍阑 力芭茄促.					pOusters->deleteItemFromExtraInventorySlot();					pArmsbandInventory->deleteItem(pPrevItem->getObjectID());					// 笛狼 困摹甫 官层 霖促.					pOusters->addItemToExtraInventorySlot(pPrevItem);					pArmsbandInventory->addItem(SlotID , 0 , pItem);					// DB俊促啊 历厘阑 茄促.					//pPrevItem->save(pOusters->getName(), STORAGE_EXTRASLOT, 0, 0, 0);					// item历厘 弥利拳. by sigi. 2002.5.13					char pField[80];					sprintf(pField, "Storage=%d", STORAGE_EXTRASLOT);					pPrevItem->tinysave(pField);					//pItem->save(pOusters->getName(), STORAGE_BELT , pArmsband->getItemID(), SlotID, 0);					// item历厘 弥利拳. by sigi. 2002.5.13					sprintf(pField, "Storage=%d, StorageID=%lu, X=%d", STORAGE_BELT, pArmsband->getItemID(), SlotID);					pItem->tinysave(pField);					Success = true;				}			} 			else // 浇儿俊 酒公繁 扁粮狼 酒捞袍捞 绝阑锭.			{				// Inventory俊 漂沥 酒捞袍阑 持绰促.				pArmsbandInventory->addItem(SlotID, 0 , pItem);				// 持扁俊 己傍窍搁 付快胶俊 崔妨乐绰 酒捞袍阑 绝矩促.				pOusters->deleteItemFromExtraInventorySlot();				//pItem->save(pOusters->getName(), STORAGE_BELT, pArmsband->getItemID(), SlotID, 0);				// item历厘 弥利拳. by sigi. 2002.5.13				char pField[80];				sprintf(pField, "Storage=%d, StorageID=%lu, X=%d", STORAGE_BELT, pArmsband->getItemID(), SlotID);				pItem->tinysave(pField);				Success = true;			}		} // end of if (pArmsbandInventory->canAdding(SlotID, 0,  pItem)) 	} // if (pCreature->isOusters())	// QuickSlot俊 持绰 巴阑 角菩 窍看阑锭 角菩 菩哦阑 朝赴促.	if (!Success) 	{		GCCannotAdd _GCCannotAdd;		_GCCannotAdd.setObjectID(pPacket->getObjectID());		pPlayer->sendPacket(&_GCCannotAdd);	}#endif	// __GAME_SERVER__    __END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

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