cgusepotionfrominventoryhandler.cpp

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

CPP
784
字号
		Serum* pSerum      = dynamic_cast<Serum*>(pItem);		int RegenHP = 0;		RegenHP = pSerum->getHPAmount();				int    RegenPeriod = pSerum->getPeriod();    // 窜困 矫埃狼 林扁		int    RegenCount  = pSerum->getCount();     // 割锅 窜困 矫埃阑 馆汗且 巴牢啊?		//int    RegenHPUnit = (int)((float)MaxHP* (float)RegenHP*0.01); // 茄锅俊 雀汗窍绰 HP狼 剧		int    RegenHPUnit = RegenHP;		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);	}	else if (pCreature->isOusters())	{		Ousters*    pOusters    = dynamic_cast<Ousters*>(pCreature);		Inventory* pInventory = pOusters->getInventory();		Zone*      pZone      = pOusters->getZone();		if (pZone == NULL || pInventory == NULL) return;		CoordInven_t InvenX = pPacket->getX();		CoordInven_t InvenY = pPacket->getY();		if (InvenX >= pInventory->getWidth() || InvenY >= pInventory->getHeight())		{			GCCannotUse _GCCannotUse;			_GCCannotUse.setObjectID(pPacket->getObjectID());			pGamePlayer->sendPacket(&_GCCannotUse);			return;		}		Item* pItem = pInventory->getItem(InvenX, InvenY);		if (pItem == NULL)		{			GCCannotUse _GCCannotUse;			_GCCannotUse.setObjectID(pPacket->getObjectID());			pGamePlayer->sendPacket(&_GCCannotUse);			return;		}		// 牢亥配府俊 乐绰 酒捞袍狼 Object甫 罐绰促.		ObjectID_t ItemObjectID = pItem->getObjectID();		if ( ItemObjectID != pPacket->getObjectID() )		{			GCCannotUse _GCCannotUse;			_GCCannotUse.setObjectID(pPacket->getObjectID());			pGamePlayer->sendPacket(&_GCCannotUse);			return;		}		if ( pItem->getItemClass() == Item::ITEM_CLASS_PUPA )		{			HP_t	MaxHP    = pOusters->getHP(ATTR_MAX);			HP_t	CurrentHP= pOusters->getHP(ATTR_CURRENT);			Pupa* pPupa = dynamic_cast<Pupa*>(pItem);			// 茄畔俊 雀汗登绰 剧			int		HPQuantity = pPupa->getHPQuantity();			// 茄畔捞 割檬 牢啊.			int		HPDelayProvider = pPupa->getHPDelay();			HP_t    PupaHPAmount = pPupa->getHPAmount();						int     HPAmount = min(MaxHP - CurrentHP , (int)PupaHPAmount);			// HP 雀汗剧捞 粮犁茄促搁...			if (HPAmount != 0 && HPQuantity != 0)			{				if (CurrentHP < MaxHP) 				{					EffectManager* pEffectManager = pOusters->getEffectManager();					double temp     = (double)((double)HPAmount/(double)HPQuantity);					int    Period   = (uint)ceil(temp);					Turn_t Deadline = Period* HPDelayProvider;					if (pOusters->isFlag(Effect::EFFECT_CLASS_HP_RECOVERY)) 					{						Effect* pEffect = pEffectManager->findEffect(Effect::EFFECT_CLASS_HP_RECOVERY);						EffectHPRecovery* pEffectHPRecoveryEffect = dynamic_cast<EffectHPRecovery*>(pEffect);						// 扁粮狼 窜困剧苞 冉荐肺 盲快绰 HP剧阑 拌魂茄促.						// 弊巴阑 泅犁 雀汗剧俊 歹茄促.						int PrevHPAmount = pEffectHPRecoveryEffect->getHPQuantity()* pEffectHPRecoveryEffect->getPeriod();						HPAmount = min((int)(HPAmount + PrevHPAmount), MaxHP - CurrentHP);						// 笛 吝俊 奴 窜困雀汗剧苞 累篮 掉饭捞甫 掘绢辰促.						HPQuantity      = max(HPQuantity,      (int)(pEffectHPRecoveryEffect->getHPQuantity()));						HPDelayProvider = min(HPDelayProvider, (int)(pEffectHPRecoveryEffect->getDelay()));						// 泅犁 雀汗剧阑 啊瘤绊, 倔付究 割锅俊 雀汗且 巴牢啊甫 搬沥茄促.						temp     = (double)((double)HPAmount/(double)HPQuantity);						Period   = (uint)ceil(temp);						Deadline = Period* HPDelayProvider;						// HP Recovery effect甫 盎脚茄促.						pEffectHPRecoveryEffect->setDeadline(Deadline);						pEffectHPRecoveryEffect->setDelay(HPDelayProvider);						pEffectHPRecoveryEffect->setHPQuantity(HPQuantity);						pEffectHPRecoveryEffect->setPeriod(Period);						// 雀汗 矫累窍扼绰 菩哦阑 磊脚俊霸 焊辰促.						GCHPRecoveryStartToSelf gcHPRecoveryStartToSelf;						gcHPRecoveryStartToSelf.setPeriod(pEffectHPRecoveryEffect->getPeriod());						gcHPRecoveryStartToSelf.setDelay(pEffectHPRecoveryEffect->getDelay());						gcHPRecoveryStartToSelf.setQuantity(pEffectHPRecoveryEffect->getHPQuantity());						pGamePlayer->sendPacket(&gcHPRecoveryStartToSelf);						// 雀汗 矫累窍扼绰 菩哦阑 促弗捞甸俊霸 焊辰促.						// 雀汗 盎脚 菩哦, 矫累苞 度 鞍篮 菩哦阑 焊辰促.						GCHPRecoveryStartToOthers gcHPRecoveryStartToOthers;						gcHPRecoveryStartToOthers.setObjectID(pOusters->getObjectID());						gcHPRecoveryStartToOthers.setPeriod(pEffectHPRecoveryEffect->getPeriod());						gcHPRecoveryStartToOthers.setDelay(pEffectHPRecoveryEffect->getDelay());						gcHPRecoveryStartToOthers.setQuantity(pEffectHPRecoveryEffect->getHPQuantity());						pZone->broadcastPacket(pOusters->getX(), pOusters->getY(), &gcHPRecoveryStartToOthers, pOusters);						GCUseOK _GCUseOK;						pGamePlayer->sendPacket(&_GCUseOK);					} 					else 					{						EffectHPRecovery* pEffectHPRecovery = new EffectHPRecovery();						pEffectHPRecovery->setTarget(pOusters);						pEffectHPRecovery->setDeadline(Deadline);						pEffectHPRecovery->setDelay(HPDelayProvider);						pEffectHPRecovery->setNextTime(0);						pEffectHPRecovery->setHPQuantity(HPQuantity);						pEffectHPRecovery->setPeriod(Period);						pEffectManager->addEffect(pEffectHPRecovery);						// 雀汗 矫累窍扼绰 菩哦阑 磊脚俊霸 焊辰促.						GCHPRecoveryStartToSelf gcHPRecoveryStartToSelf;						gcHPRecoveryStartToSelf.setPeriod(Period);						gcHPRecoveryStartToSelf.setDelay(HPDelayProvider);						gcHPRecoveryStartToSelf.setQuantity(HPQuantity);						pGamePlayer->sendPacket(&gcHPRecoveryStartToSelf);						// 雀汗 矫累窍扼绰 菩哦阑 焊绰捞甸俊霸 焊辰促.						GCHPRecoveryStartToOthers gcHPRecoveryStartToOthers;						gcHPRecoveryStartToOthers.setObjectID(pOusters->getObjectID());						gcHPRecoveryStartToOthers.setPeriod(Period);						gcHPRecoveryStartToOthers.setDelay(HPDelayProvider);						gcHPRecoveryStartToOthers.setQuantity(HPQuantity);						pZone->broadcastPacket(pOusters->getX(), pOusters->getY(), &gcHPRecoveryStartToOthers, pOusters);						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, pOusters->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);		}		else if ( pItem->getItemClass() == Item::ITEM_CLASS_COMPOS_MEI )		{			MP_t	MaxMP    = pOusters->getMP(ATTR_MAX);			MP_t	CurrentMP= pOusters->getMP(ATTR_CURRENT);			ComposMei* pComposMei  = dynamic_cast<ComposMei*>(pItem);			// 茄畔俊 雀汗登绰 剧			int		MPQuantity = pComposMei->getMPQuantity();			// 茄畔捞 割檬 牢啊.			int		MPDelayProvider = pComposMei->getMPDelay();			Attr_t INT = pOusters->getINT();			MP_t    ComposMeiMPAmount = pComposMei->getMPAmount();						int     MPAmount = min(MaxMP - CurrentMP , (int)(ComposMeiMPAmount* (double)(1 + (double)((double)INT / 300.0))));			// MP 雀汗剧捞 粮犁茄促搁...			if (MPAmount != 0 && MPQuantity != 0 )			{				if (CurrentMP < MaxMP) 				{					EffectManager* pEffectManager = pOusters->getEffectManager();					double temp     = (double)((double)MPAmount/(double)MPQuantity);					uint   Period   = (uint)ceil(temp);					Turn_t Deadline = Period* MPDelayProvider;					if (pOusters->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(pOusters);						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);					}				} 				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, pOusters->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY);		}		else		{			GCCannotUse _GCCannotUse;			_GCCannotUse.setObjectID(pPacket->getObjectID());			pGamePlayer->sendPacket(&_GCCannotUse);			return;		}	}#endif    __END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

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