cguseitemfrominventoryhandler.cpp

来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 2,063 行 · 第 1/5 页

CPP
2,063
字号
			if (pSlayer->isFlag(Effect::EFFECT_CLASS_MP_RECOVERY)) 			{				Effect* pEffect = pEffectManager->findEffect(Effect::EFFECT_CLASS_MP_RECOVERY);				EffectMPRecovery* pEffectMPRecoveryEffect = dynamic_cast<EffectMPRecovery*>(pEffect);				// 扁粮狼 窜困剧苞 冉荐肺 盲快绰 MP剧阑 拌魂茄促.				// 弊巴阑 泅犁 雀汗剧俊 歹茄促.				int PrevMPAmount = pEffectMPRecoveryEffect->getMPQuantity()* pEffectMPRecoveryEffect->getPeriod();				MPAmount = min((int)(MPAmount + PrevMPAmount), MaxMP - CurrentMP);				// 笛 吝俊 奴 窜困雀汗剧苞 累篮 掉饭捞甫 掘绢辰促.				MPQuantity      = max(MPQuantity,      (int)(pEffectMPRecoveryEffect->getMPQuantity()));				MPDelayProvider = min(MPDelayProvider, (int)(pEffectMPRecoveryEffect->getDelay()));				// 泅犁 雀汗剧阑 啊瘤绊, 倔付究 割锅俊 雀汗且 巴牢啊甫 搬沥茄促.				temp     = (double)((double)MPAmount/(double)MPQuantity);				Period   = (uint)ceil(temp);				Deadline = Period* MPDelayProvider;				// MP Recovery effect甫 盎脚茄促.				pEffectMPRecoveryEffect->setDeadline(Deadline);				pEffectMPRecoveryEffect->setDelay(MPDelayProvider);				pEffectMPRecoveryEffect->setMPQuantity(MPQuantity);				pEffectMPRecoveryEffect->setPeriod(Period);				// 雀汗 矫累窍扼绰 菩哦阑 磊脚俊霸 焊辰促.				GCMPRecoveryStart gcMPRecoveryStart;				gcMPRecoveryStart.setPeriod(pEffectMPRecoveryEffect->getPeriod());				gcMPRecoveryStart.setDelay(pEffectMPRecoveryEffect->getDelay());				gcMPRecoveryStart.setQuantity(pEffectMPRecoveryEffect->getMPQuantity());				pGamePlayer->sendPacket(&gcMPRecoveryStart);				GCUseOK _GCUseOK;				pGamePlayer->sendPacket(&_GCUseOK);			} 			else 			{				EffectMPRecovery* pEffectMPRecovery = new EffectMPRecovery();				pEffectMPRecovery->setTarget(pSlayer);				pEffectMPRecovery->setDeadline(Deadline);				pEffectMPRecovery->setDelay(MPDelayProvider);				pEffectMPRecovery->setNextTime(0);				pEffectMPRecovery->setMPQuantity(MPQuantity);				pEffectMPRecovery->setPeriod(Period);				pEffectManager->addEffect(pEffectMPRecovery);				// 雀汗 矫累窍扼绰 菩哦阑 磊脚俊霸 焊辰促.				GCMPRecoveryStart gcMPRecoveryStart;				gcMPRecoveryStart.setPeriod(Period);				gcMPRecoveryStart.setDelay(MPDelayProvider);				gcMPRecoveryStart.setQuantity(MPQuantity);				pGamePlayer->sendPacket(&gcMPRecoveryStart);				GCUseOK _GCUseOK;				pGamePlayer->sendPacket(&_GCUseOK);			}			decreaseItemNum(pItem, pInventory, pSlayer->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);		} 		else 		{			GCCannotUse _GCCannotUse;			_GCCannotUse.setObjectID(pPacket->getObjectID());			pGamePlayer->sendPacket(&_GCCannotUse);			return;		}	} 	else 	{		notRecoverMP = true;	}	if (notRecoverHP && notRecoverMP)	{		GCCannotUse _GCCannotUse;		_GCCannotUse.setObjectID(pPacket->getObjectID());		pGamePlayer->sendPacket(&_GCCannotUse);		return;	}#endif    __END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGUseItemFromInventoryHandler::executeMagazine(CGUseItemFromInventory* 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();	PlayerCreature* pPC          = dynamic_cast<PlayerCreature*>(pCreature);	Inventory*      pInventory   = pPC->getInventory();	//Zone*           pZone        = pPC->getZone();	CoordInven_t    InvenX       = pPacket->getX();	CoordInven_t    InvenY       = pPacket->getY();	Item*           pItem        = pInventory->getItem(InvenX, InvenY);	ObjectID_t      ItemObjectID = pItem->getObjectID();	Assert(pCreature->isSlayer());	Slayer*      pSlayer     = dynamic_cast<Slayer*>(pCreature);	Item*        pArmsItem   = pSlayer->getWearItem(Slayer::WEAR_RIGHTHAND);	bool         bSuccess    = false;	if (pArmsItem != NULL) 	{		if (isArmsWeapon(pArmsItem))		{			SkillSlot*	pVivid = pSlayer->getSkill( SKILL_VIVID_MAGAZINE );			bool		hasVivid = (pVivid != NULL) && pVivid->canUse();			if (isSuitableMagazine(pArmsItem, pItem, hasVivid)) bSuccess = true;		}	} 	// reload delay啊 乐栏骨肺 effect俊 殿废 矫挪促.	EffectManager* pEffectManager = pSlayer->getEffectManager();	if (pEffectManager == NULL) return;	if (bSuccess && !pSlayer->isFlag(Effect::EFFECT_CLASS_RELOAD_TIMER)) 	{		EffectReloadTimer* pEffect = new EffectReloadTimer(pSlayer);				pEffect->setFromInventory(true);		pEffect->setObjectID(ItemObjectID);		pEffect->setInventoryXY(InvenX, InvenY);				// by sigi. 2002.12.3.  1檬 --> 0.7檬		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(pPacket->getObjectID());		pPlayer->sendPacket(&_GCCannotUse);	}#endif    __END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGUseItemFromInventoryHandler::executeETC(CGUseItemFromInventory* 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();	PlayerCreature* pPC          = dynamic_cast<PlayerCreature*>(pCreature);	Inventory*      pInventory   = pPC->getInventory();	//Zone*           pZone        = pPC->getZone();	CoordInven_t    InvenX       = pPacket->getX();	CoordInven_t    InvenY       = pPacket->getY();	Item*           pItem        = pInventory->getItem(InvenX, InvenY);	//ObjectID_t      ItemObjectID = pItem->getObjectID();	// 酒捞袍捞 阶捞绰 辆幅狼 酒捞袍捞扼搁, 	// 荤侩阑 沁栏聪 弊父怒 昏力甫 秦 霖促.	if (isStackable(pItem))	{		decreaseItemNum(pItem, pInventory, pCreature->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);	}	else 	{		// 阶捞瘤 臼绰 酒捞袍篮 官肺官肺 昏力秦霖促.		pInventory->deleteItem(InvenX, InvenY);		pItem->destroy();		SAFE_DELETE(pItem);	}#endif    __END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGUseItemFromInventoryHandler::executeSerum(CGUseItemFromInventory* 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();	PlayerCreature* pPC          = dynamic_cast<PlayerCreature*>(pCreature);	Inventory*      pInventory   = pPC->getInventory();	Zone*           pZone        = pPC->getZone();	CoordInven_t    InvenX       = pPacket->getX();	CoordInven_t    InvenY       = pPacket->getY();	Item*           pItem        = pInventory->getItem(InvenX, InvenY);	//ObjectID_t      ItemObjectID = pItem->getObjectID();	Assert(pCreature->isVampire());	Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);	// 内付 惑怕扼搁 荤侩且 荐 绝促.	if (pVampire->isFlag(Effect::EFFECT_CLASS_COMA)		// 价祈牢 版快绰 蜡丰 荤侩磊啊 酒聪搁 荤侩且 荐 绝促.		|| pItem->getItemType()==5 && !pGamePlayer->isPayPlaying() && !pGamePlayer->isPremiumPlay())	{		GCCannotUse _GCCannotUse;		_GCCannotUse.setObjectID(pPacket->getObjectID());		pGamePlayer->sendPacket(&_GCCannotUse);		return;	}	HP_t   MaxHP       = pVampire->getHP(ATTR_MAX);	HP_t   CurrentHP   = pVampire->getHP(ATTR_CURRENT);	Serum* pSerum      = dynamic_cast<Serum*>(pItem);	int    RegenHP     = 0;	RegenHP = pSerum->getHPAmount();	int    RegenPeriod = pSerum->getPeriod()*10; // 窜困 矫埃狼 林扁	int    RegenCount  = pSerum->getCount();     // 割锅 窜困 矫埃阑 馆汗且 巴牢啊?	int    RegenHPUnit = (int)((float)MaxHP* (float)RegenHP* 0.01); // 茄锅俊 雀汗窍绰 HP狼 剧	int    HPAmount    = min(MaxHP - CurrentHP , RegenHPUnit* RegenCount);	// HP 雀汗剧捞 粮犁茄促搁...	if (HPAmount != 0)	{		// 倔付究 割锅 割檬付促.		if (CurrentHP < MaxHP) 		{			EffectManager* pEffectManager = pVampire->getEffectManager(); 			Turn_t 	       Period         = RegenCount; // 割锅 雀汗矫虐唱?			Turn_t	       Deadline       = RegenPeriod* Period;   // 攫力 场唱唱?			if (pVampire->isFlag(Effect::EFFECT_CLASS_HP_RECOVERY)) 			{				Effect*     pEffect           = pEffectManager->findEffect(Effect::EFFECT_CLASS_HP_RECOVERY);				EffectHPRecovery* pEffectHPRecoveryEffect = dynamic_cast<EffectHPRecovery*>(pEffect);				// 割锅 歹 秦具 茄促绰 巴阑 盎脚秦 霖促.				Turn_t OldCount  = pEffectHPRecoveryEffect->getPeriod();				Turn_t NewPeriod = OldCount + Period;				pEffectHPRecoveryEffect->setPeriod(NewPeriod);				pEffectHPRecoveryEffect->setDeadline(NewPeriod* RegenPeriod);				// 雀汗 矫累窍扼绰 菩哦阑 磊脚俊霸 焊辰促.				GCHPRecoveryStartToSelf gcHPRecoveryStartToSelf;				gcHPRecoveryStartToSelf.setPeriod(NewPeriod); // 割锅 雀汗窍唱?				gcHPRecoveryStartToSelf.setDelay(RegenPeriod); // 割 檬 窜困肺 窍唱?				gcHPRecoveryStartToSelf.setQuantity(RegenHPUnit); // 茄锅俊 倔付唱 雀汗窍唱?				pGamePlayer->sendPacket(&gcHPRecoveryStartToSelf);				// 雀汗 矫累窍扼绰 菩哦阑 促弗捞甸俊霸 焊辰促.				// 雀汗 盎脚 菩哦, 矫累苞 度 鞍篮 菩哦阑 焊辰促.				GCHPRecoveryStartToOthers gcHPRecoveryStartToOthers;				gcHPRecoveryStartToOthers.setObjectID(pVampire->getObjectID());				gcHPRecoveryStartToOthers.setPeriod(NewPeriod);				gcHPRecoveryStartToOthers.setDelay(RegenPeriod );				gcHPRecoveryStartToOthers.setQuantity(RegenHPUnit);				pZone->broadcastPacket(pVampire->getX(), pVampire->getY(), &gcHPRecoveryStartToOthers, pVampire);				GCUseOK _GCUseOK;				pGamePlayer->sendPacket(&_GCUseOK);			} 			else 			{				EffectHPRecovery* pEffectHPRecovery = new EffectHPRecovery();				pEffectHPRecovery->setTarget(pVampire);				pEffectHPRecovery->setDeadline(Deadline);				pEffectHPRecovery->setDelay(RegenPeriod);				pEffectHPRecovery->setNextTime(0);				pEffectHPRecovery->setHPQuantity(RegenHPUnit);				pEffectHPRecovery->setPeriod(Period);				pEffectManager->addEffect(pEffectHPRecovery);				// 雀汗 矫累窍扼绰 菩哦阑 磊脚俊霸 焊辰促.				GCHPRecoveryStartToSelf gcHPRecoveryStartToSelf;				gcHPRecoveryStartToSelf.setPeriod(Period);				gcHPRecoveryStartToSelf.setDelay(RegenPeriod);				gcHPRecoveryStartToSelf.setQuantity(RegenHPUnit);				pGamePlayer->sendPacket(&gcHPRecoveryStartToSelf);				// 雀汗 矫累窍扼绰 菩哦阑 焊绰捞甸俊霸 焊辰促.				GCHPRecoveryStartToOthers gcHPRecoveryStartToOthers;				gcHPRecoveryStartToOthers.setObjectID(pVampire->getObjectID());				gcHPRecoveryStartToOthers.setPeriod(Period);				gcHPRecoveryStartToOthers.setDelay(RegenPeriod);				gcHPRecoveryStartToOthers.setQuantity(RegenHPUnit);				pZone->broadcastPacket(pVampire->getX(), pVampire->getY(), &gcHPRecoveryStartToOthers, pVampire);				GCUseOK _GCUseOK;				pGamePlayer->sendPacket(&_GCUseOK);			}		} 		else 		{			GCCannotUse _GCCannotUse;			_GCCannotUse.setObjectID(pPacket->getObjectID());			pGamePlayer->sendPacket(&_GCCannotUse);			return;		}	}	else	{		GCCannotUse _GCCannotUse;		_GCCannotUse.setObjectID(pPacket->getObjectID());		pGamePlayer->sendPacket(&_GCCannotUse);		return;	}	decreaseItemNum(pItem, pInventory, pVampire->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);#endif    __END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGUseItemFromInventoryHandler::executeVampireETC(CGUseItemFromInventory* 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();	PlayerCreature* pPC          = dynamic_cast<PlayerCreature*>(pCreature);	Inventory*      pInventory   = pPC->getInventory();	Zone*           pZone        = pPC->getZone();	CoordInven_t    InvenX       = pPacket->getX();	CoordInven_t    InvenY       = pPacket->getY();	Item*           pItem        = pInventory->getItem(InvenX, InvenY);	ObjectID_t      ItemObjectID = pItem->getObjectID();	// 酒捞袍捞 阶捞绰 辆幅狼 酒捞袍捞扼搁, 	// 荤侩阑 沁栏聪 弊父怒 昏力甫 秦 霖促.	if (isStackable(pItem))	{		decreaseItemNum(pItem, pInventory, pCreature->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);	}	else 	{		// 阶捞瘤 臼绰 酒捞袍篮 官肺官肺 昏力秦霖促.		pInventory->deleteItem(InvenX, InvenY);		pItem->destroy();		SAFE_DELETE(pItem);	}	*/#endif    __END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGUseItemFromInventoryHandler::executeSlayerPortalItem(CGUseItemFromInventory* pPacket, Player* pPlayer)	throw (ProtocolException, Error){	__BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__	Assert(pPacket != NULL);	Assert(pPlayer != NULL);

⌨️ 快捷键说明

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