cgreloadfromquickslothandler.cpp

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

CPP
150
字号
//////////////////////////////////////////////////////////////////////////////// Filename    : CGReloadFromQuickSlotHandler.cc// Written By  : elca@ewestsoft.com// Description : //////////////////////////////////////////////////////////////////////////////#include "CGReloadFromQuickSlot.h"#ifdef __GAME_SERVER__	#include "GamePlayer.h"	#include "Zone.h"	#include "Slayer.h"	#include "Inventory.h"	#include "Item.h"	#include "ItemInfo.h"	#include "ItemInfoManager.h"	#include "EffectManager.h"	#include "item/Belt.h"	#include "item/SG.h"	#include "item/AR.h"	#include "item/SMG.h"	#include "item/SR.h"	#include "item/Magazine.h"	#include "ItemUtil.h"	#include "skill/EffectReloadTimer.h"	#include "Gpackets/GCCannotUse.h"#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGReloadFromQuickSlotHandler::execute (CGReloadFromQuickSlot* pPacket , Player* pPlayer)	throw (ProtocolException, Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	Assert(pPacket != NULL);	Assert(pPlayer != NULL);	try 	{		GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);		Creature*   pCreature   = pGamePlayer->getCreature();		Assert(pCreature->isSlayer());		Slayer*    pSlayer      = dynamic_cast<Slayer*>(pCreature);		Item*      pArmsItem    = pSlayer->getWearItem(Slayer::WEAR_RIGHTHAND);		Item*      pBeltItem    = NULL;		bool       Success      = false;		ObjectID_t ItemObjectID = 0;		SlotID_t   SlotID;				if (pArmsItem != NULL) 		{			if (isArmsWeapon(pArmsItem)) 			{				Item* pBelt = pSlayer->getWearItem(Slayer::WEAR_BELT);						if (pBelt == NULL)				{					GCCannotUse _GCCannotUse;					_GCCannotUse.setObjectID(pPacket->getObjectID());					pPlayer->sendPacket(&_GCCannotUse);					return;				}				Inventory* pBeltInventory = ((Belt*)pBelt)->getInventory();				SlotID = pPacket->getSlotID();				if (SlotID >= pBeltInventory->getWidth())				{					GCCannotUse _GCCannotUse;					_GCCannotUse.setObjectID(pPacket->getObjectID());					pPlayer->sendPacket(&_GCCannotUse);					return;				}						pBeltItem = pBeltInventory->getItem(SlotID, 0);						if (pBeltItem == NULL)				{					GCCannotUse _GCCannotUse;					_GCCannotUse.setObjectID(pPacket->getObjectID());					pPlayer->sendPacket(&_GCCannotUse);					return;				}						// 浇儿俊 乐绰 酒捞袍狼 Object甫 罐绰促.				ItemObjectID = pBeltItem->getObjectID();				// 酒捞袍捞 乐绰瘤 弊 酒捞袍狼 ObjectID啊 老摹窍绰瘤 眉农茄促.				if (ItemObjectID == pPacket->getObjectID() && 					pBeltItem->getItemClass() == Item::ITEM_CLASS_MAGAZINE) 				{					SkillSlot*	pVivid = pSlayer->getSkill( SKILL_VIVID_MAGAZINE );					bool		hasVivid = (pVivid != NULL) && pVivid->canUse();					if (isSuitableMagazine(pArmsItem, pBeltItem, hasVivid))					{						Success = true;					}				}			}		} 		// 八刘 菩哦阑 朝赴促.		EffectManager* pEffectManager = pSlayer->getEffectManager();		if (Success && !pSlayer->isFlag(Effect::EFFECT_CLASS_RELOAD_TIMER))		{			EffectReloadTimer* pEffect = new EffectReloadTimer(pSlayer);			pEffect->setFromInventory(false);			pEffect->setObjectID(ItemObjectID);			pEffect->setSlotID(SlotID);			if (pSlayer->hasSkill(SKILL_FAST_RELOAD))			{				pEffect->setDeadline(7);    // 狐弗 reload(0.7檬)			}			else			{				pEffect->setDeadline(2*10);    // 焊烹 reload(2sec)			}			pSlayer->setFlag(Effect::EFFECT_CLASS_RELOAD_TIMER);			pEffectManager->addEffect(pEffect);		} 		else 		{			GCCannotUse _GCCannotUse;			_GCCannotUse.setObjectID(ItemObjectID);			pPlayer->sendPacket(&_GCCannotUse);		}	} 	catch (Throwable & t) 	{		//cout << t.toString();	}#endif	// __GAME_SERVER__    __END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

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