cgaddmousetoinventoryhandler.cpp

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

CPP
422
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGAddMouseToInventoryHandler.cc// Written By  : elca@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "CGAddMouseToInventory.h"#ifdef __GAME_SERVER__	#include "GamePlayer.h"	#include "Zone.h"	#include "Slayer.h"	#include "Vampire.h"	#include "Inventory.h"	#include "Item.h"	#include "ItemUtil.h"	#include "ItemInfo.h"	#include "ItemInfoManager.h"	#include "ItemFactoryManager.h"	#include "TradeManager.h"	#include "PacketUtil.h"	#include "VariableManager.h"	#include "Gpackets/GCCannotAdd.h"	#include "Gpackets/GCTradeVerify.h"	#include "Gpackets/GCCreateItem.h"	#include "Gpackets/GCNoticeEvent.h"	#include "Gpackets/GCDeleteInventoryItem.h"	#include <stdio.h>#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGAddMouseToInventoryHandler::execute(CGAddMouseToInventory* pPacket , Player* pPlayer)	throw (ProtocolException, Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	Assert(pPacket != NULL);	Assert(pPlayer != NULL);	//cout << "AddMouseToInventory execute start" << endl;	try 	{		GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);		Assert(pGamePlayer != NULL);		Creature* pCreature = pGamePlayer->getCreature();		Assert(pCreature != NULL);		Assert(pCreature->isPC());		PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);		Assert(pPC != NULL);		Zone* pZone = pPC->getZone();		Assert(pZone != NULL);		Inventory* pInventory = pPC->getInventory();		Assert(pInventory != NULL);		Item* pItem   = pPC->getExtraInventorySlot()->getItem();		bool  Success = false;		if (pItem == NULL)		{			//cout << "pItem NULL" << endl;			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);			return;		}		//Item::ItemClass itemClass = pItem->getItemClass();		//ItemType_t	itemType	 = pItem->getItemType();		ObjectID_t  itemObjectID = pItem->getObjectID();		CoordInven_t InvenX      = pPacket->getInvenX();		CoordInven_t InvenY      = pPacket->getInvenY();		if (InvenX >= 10 || InvenY >= 6)		{			//cout << "inventory over" << endl;			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);			return;		}		// 酒捞袍狼 ObjectID啊 老摹窍绰瘤 眉农茄促.		if (itemObjectID != pPacket->getObjectID())		{			//cout << "wrong objectID" << endl;			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);			return;		}		// 牢亥配府俊 持阑 荐 乐绰瘤 眉农茄促.		if (!pInventory->canAdding(InvenX, InvenY, pItem))		{			//cout << "cannot add" << endl;			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);			return;		}		TPOINT pt;		pt.x = 99;		pt.y = 99;		//cout << "chk relic1" << endl;				// 持阑妨绰 Inventory Slot狼 Item阑 罐酒柯促.		Item* pPrevItem = pInventory->searchItem(InvenX, InvenY , pItem, pt);		// 弊 厘家俊 酒捞袍捞 乐促搁		if (pPrevItem != NULL) 		{			//cout << "prevItem!=0" << endl;			bool bisSame = true;			// 酒捞袍 努贰胶啊 鞍阑锭 箭磊甫 棵妨 林绊 付快胶俊 乐绰 巴篮 绝矩促.			if (canStack(pItem, pPrevItem))			{				int MaxStack = ItemMaxStack[pItem->getItemClass()];				VolumeWidth_t  ItemWidth  = pItem->getVolumeWidth();				VolumeHeight_t ItemHeight = pItem->getVolumeHeight();				VolumeWidth_t  InvenWidth = pInventory->getWidth();				VolumeWidth_t  InvenHeight= pInventory->getHeight();				if ((InvenX + ItemWidth <= InvenWidth) && (InvenY + ItemHeight <= InvenHeight)) 				{					for (int x = InvenX; x < (InvenX + ItemWidth); x++) 					{						for (int y = InvenY; y < (InvenY + ItemHeight); y++) 						{							if (pInventory->hasItem(x, y)) 							{								if( pInventory->getItem(x,y) != pPrevItem ) {									bisSame = false;									break;								}							} else {								bisSame = false;								break;							}						}					}				}				// 甸绢哎 酒捞袍苞 甸绢乐绰 酒捞袍狼 谅钎啊 怖 老摹 茄促搁?				if( bisSame ) {					// 箭磊啊 9俺甫 逞栏搁 9俺 瞪锭鳖瘤父 Add 窍绊 唱赣瘤绰 付快胶俊 崔酒敌促.					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);						pInventory->increaseNum(MaxStack - CurrentNum);						pInventory->increaseWeight(pItem->getWeight()* (MaxStack - CurrentNum));						//pPrevItem->save(pPC->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);						// item历厘 弥利拳. by sigi. 2002.5.13						char pField[80];						sprintf(pField, "Num=%d, Storage=%d, X=%d, Y=%d", MaxStack, STORAGE_INVENTORY, InvenX, InvenY);						pPrevItem->tinysave(pField);						//pItem->save(pPC->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 					{						pPC->deleteItemFromExtraInventorySlot();						pPrevItem->setNum(pPrevItem->getNum() + pItem->getNum());						pInventory->increaseNum(pItem->getNum());						pInventory->increaseWeight(pItem->getWeight()* pItem->getNum());						//pPrevItem->save(pPC->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);						// item历厘 弥利拳. by sigi. 2002.5.13						char pField[80];						sprintf(pField, "Num=%d, Storage=%d, X=%d, Y=%d", pPrevItem->getNum(), STORAGE_INVENTORY, InvenX, InvenY);						pPrevItem->tinysave(pField);						pItem->destroy();						SAFE_DELETE(pItem);						Success = true;					}					if ( g_pVariableManager->getVariable(NETMARBLE_CARD_EVENT) != 0 && pPrevItem->getItemClass() == Item::ITEM_CLASS_MOON_CARD && pPrevItem->getItemType() == 2 && pPrevItem->getNum() == 99 )					{						GCNoticeEvent gcNE;						gcNE.setCode( NOTICE_EVENT_NETMARBLE_CARD_FULL );						pGamePlayer->sendPacket( &gcNE );						cout << "gcNE sent" << endl;					}					if ( pPrevItem->getItemClass() == Item::ITEM_CLASS_LUCKY_BAG							&& pPrevItem->getItemType() == 3							&& pPrevItem->getNum() == 50 )					{						GCDeleteInventoryItem gcDI;						gcDI.setObjectID( pPrevItem->getObjectID() );						pGamePlayer->sendPacket( &gcDI );						pInventory->deleteItem( pPrevItem->getObjectID() );						pPrevItem->destroy();						SAFE_DELETE( pPrevItem );												Item* pNewItem = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_EVENT_ITEM, 28, list<OptionType_t>() );						pZone->registerObject( pNewItem );						if ( !pInventory->addItem(pt.x, pt.y, pNewItem) )						{							cout << "-_-;" << endl;							return;						}						pNewItem->create( pPC->getName(), STORAGE_INVENTORY, 0, pt.x, pt.y );						if ( pNewItem != NULL )						{							GCCreateItem gcCI;							makeGCCreateItem( &gcCI, pNewItem, pt.x, pt.y );							pGamePlayer->sendPacket( &gcCI );						}					}				} else {					pInventory->deleteItem(pPrevItem->getObjectID());					pPC->deleteItemFromExtraInventorySlot();					pPC->addItemToExtraInventorySlot(pPrevItem);					pInventory->addItem(InvenX , InvenY , pItem);					//pPrevItem->save(pPC->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(pPC->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);					// item历厘 弥利拳. by sigi. 2002.5.13					sprintf(pField, "Storage=%d, X=%d, Y=%d", STORAGE_INVENTORY, InvenX, InvenY);					pItem->tinysave(pField);					Success = true;				}			} 			else // 酒捞袍 努贰胶啊 促福芭唱, 阶捞绰 酒捞袍捞 酒聪扼搁.			{				pInventory->deleteItem(pPrevItem->getObjectID());				pPC->deleteItemFromExtraInventorySlot();				pPC->addItemToExtraInventorySlot(pPrevItem);				pInventory->addItem(InvenX , InvenY , pItem);				//pPrevItem->save(pPC->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(pPC->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);				// item历厘 弥利拳. by sigi. 2002.5.13				sprintf(pField, "Storage=%d, X=%d, Y=%d", STORAGE_INVENTORY, InvenX, InvenY);				pItem->tinysave(pField);				Success = true;			}		} 		else // 弊 厘家俊 酒捞袍捞 绝促搁.		{			//cout << "prevItem is NULL" << endl;			// Inventory俊 漂沥 酒捞袍阑 持绰促.			pInventory->addItem(InvenX , InvenY , pItem);			// 持扁俊 己傍窍搁 付快胶俊 崔妨乐绰 酒捞袍阑 绝矩促.			pPC->deleteItemFromExtraInventorySlot();			//pItem->save(pPC->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);			// item历厘 弥利拳. by sigi. 2002.5.13			char pField[80];			sprintf(pField, "Storage=%d, X=%d, Y=%d", STORAGE_INVENTORY, InvenX, InvenY);			pItem->tinysave(pField);			Success = true;		}		if (Success) 		{			//cout << "success" << endl;			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_MOUSE_TO_INVENTORY_OK);				pPlayer->sendPacket(&gcTradeVerify);			}			// 飘府 炼阿老 版快			if ( pItem != NULL && pItem->getItemClass() == Item::ITEM_CLASS_EVENT_TREE)			{				ItemType_t itemtype = pItem->getItemType();				// 农府胶付胶 飘府 炼阿捞搁				if ( itemtype <= 11 )				{					// 农府胶付胶 飘府 炼阿捞 嘎苗瘤绰瘤 夯促.					TPOINT pt = checkEventPuzzle( pPC, InvenX, InvenY, 0 );					if ( pt.x != -1 && pt.y != -1 )					{						// 嘎苗柳 飘府 炼阿阑 瘤款促.						deleteInventoryItem( pInventory, pt.x, pt.y, pt.x + 2, pt.y + 3 );						// 飘府甫 积己茄促.						list<OptionType_t> optionType;						Item* pTreeItem = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_EVENT_TREE, 12, optionType );						pZone->getObjectRegistry().registerObject( pTreeItem );						pInventory->addItem( pt.x, pt.y, pTreeItem );						pTreeItem->create( pPC->getName(), STORAGE_INVENTORY, 0, pt.x, pt.y );						// 努扼捞攫飘俊 飘府啊 父甸绢脸促绰 吧 舅赴促.						GCCreateItem gcCreateItem;						makeGCCreateItem( &gcCreateItem, pTreeItem, pt.x, pt.y );						pGamePlayer->sendPacket(&gcCreateItem);					}				}				// 农府胶付胶 飘府 炼阿捞搁				else if ( itemtype > 12 && itemtype <= 24 )				{					// 农府胶付胶 飘府 炼阿捞 嘎苗瘤绰瘤 夯促.					TPOINT pt = checkEventPuzzle( pPC, InvenX, InvenY, 13 );					if ( pt.x != -1 && pt.y != -1 )					{						// 嘎苗柳 飘府 炼阿阑 瘤款促.						deleteInventoryItem( pInventory, pt.x, pt.y, pt.x + 2, pt.y + 3 );						// 飘府甫 积己茄促.						list<OptionType_t> optionType;						Item* pTreeItem = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_EVENT_TREE, 25, optionType );						pTreeItem->setQuestItem();						pZone->getObjectRegistry().registerObject( pTreeItem );						pInventory->addItem( pt.x, pt.y, pTreeItem );						pTreeItem->create( pPC->getName(), STORAGE_INVENTORY, 0, pt.x, pt.y );						// 努扼捞攫飘俊 飘府啊 父甸绢脸促绰 吧 舅赴促.						GCCreateItem gcCreateItem;						makeGCCreateItem( &gcCreateItem, pTreeItem, pt.x, pt.y );						pGamePlayer->sendPacket(&gcCreateItem);					}				}				// 农府胶付胶 飘府 炼阿捞搁				else if ( itemtype > 28 && itemtype <= 40 )				{					// 农府胶付胶 飘府 炼阿捞 嘎苗瘤绰瘤 夯促.					TPOINT pt = checkEventPuzzle( pPC, InvenX, InvenY, 29 );					if ( pt.x != -1 && pt.y != -1 )					{						// 嘎苗柳 飘府 炼阿阑 瘤款促.						deleteInventoryItem( pInventory, pt.x, pt.y, pt.x + 2, pt.y + 3 );						// 飘府甫 积己茄促.						list<OptionType_t> optionType;						Item* pTreeItem = g_pItemFactoryManager->createItem( Item::ITEM_CLASS_EVENT_TREE, 41, optionType );						pTreeItem->setQuestItem();						pZone->getObjectRegistry().registerObject( pTreeItem );						pInventory->addItem( pt.x, pt.y, pTreeItem );						pTreeItem->create( pPC->getName(), STORAGE_INVENTORY, 0, pt.x, pt.y );						// 努扼捞攫飘俊 飘府啊 父甸绢脸促绰 吧 舅赴促.						GCCreateItem gcCreateItem;						makeGCCreateItem( &gcCreateItem, pTreeItem, pt.x, pt.y );						pGamePlayer->sendPacket(&gcCreateItem);					}				}			}		}		else		{			//cout << "cannot add" << endl;			GCCannotAdd _GCCannotAdd;			_GCCannotAdd.setObjectID(pPacket->getObjectID());			pPlayer->sendPacket(&_GCCannotAdd);		}	} 	catch (Throwable & t) 	{		//cout << t.toString();	}	//cout << "AddMouseToInventory execute OK" << endl;#endif	// __GAME_SERVER__    __END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

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