cgusepotionfromquickslothandler.cpp

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

CPP
684
字号
			} 			else 			{				notRecoverMP = true;			}			if (notRecoverHP && notRecoverMP) 			{				GCCannotUse _GCCannotUse;				_GCCannotUse.setObjectID(pPacket->getObjectID());				pGamePlayer->sendPacket(&_GCCannotUse);				return;			}			else			{				decreaseItemNum(pBeltItem, pBeltInventory, pSlayer->getName(), STORAGE_BELT, pBelt->getItemID(), SlotID, 0);			}		}		else if ( pCreature->isOusters() )		{			Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);			Zone*   pZone   = pOusters->getZone();			// SlotID甫 罐绰促.			SlotID_t SlotID = pPacket->getSlotID();			Ousters::WearPart part = ( SlotID > 2 ? Ousters::WEAR_ARMSBAND2 : Ousters::WEAR_ARMSBAND1 );			if ( SlotID > 2 ) SlotID -= 3;			Item* pOustersArmsband = pOusters->getWearItem(part);						if (pOustersArmsband == NULL)			{				GCCannotUse _GCCannotUse;				_GCCannotUse.setObjectID(pPacket->getObjectID());				pGamePlayer->sendPacket(&_GCCannotUse);				return;			}			// 骇飘狼 牢亥配府甫 罐酒柯促.			Inventory* pOustersArmsbandInventory = ((OustersArmsband*)pOustersArmsband)->getInventory();						// 浇儿狼 裹困甫 檬苞窍搁 荤侩且 荐 绝促.			if (SlotID >= pOustersArmsbandInventory->getWidth())			{				GCCannotUse _GCCannotUse;				_GCCannotUse.setObjectID(pPacket->getObjectID());				pGamePlayer->sendPacket(&_GCCannotUse);				return;			}						// 骇飘狼 瘤沥 浇儿狼 酒捞袍阑 罐酒柯促.			Item* pOustersArmsbandItem = pOustersArmsbandInventory->getItem(SlotID, 0);						// 酒捞袍捞 绝栏搁 寸楷洒 荤侩且 荐 绝促.			if (pOustersArmsbandItem == NULL)			{				GCCannotUse _GCCannotUse;				_GCCannotUse.setObjectID(pPacket->getObjectID());				pGamePlayer->sendPacket(&_GCCannotUse);				return;			}						// 浇儿俊 乐绰 酒捞袍狼 Object甫 罐绰促.			ObjectID_t ItemObjectID = pOustersArmsbandItem->getObjectID();			// 单捞磐啊 老摹窍瘤 臼芭唱, 仟颇唱 霓器胶皋捞啊 酒聪扼搁 荤侩且 荐 绝促.			if (ItemObjectID != pPacket->getObjectID()				|| ( pOustersArmsbandItem->getItemClass() != Item::ITEM_CLASS_PUPA && pOustersArmsbandItem->getItemClass() != Item::ITEM_CLASS_COMPOS_MEI )				)			{				GCCannotUse _GCCannotUse;				_GCCannotUse.setObjectID(pPacket->getObjectID());				pGamePlayer->sendPacket(&_GCCannotUse);				return;			}			if ( pOustersArmsbandItem->getItemClass() == Item::ITEM_CLASS_PUPA )			{				HP_t  MaxHP     = pOusters->getHP(ATTR_MAX);				HP_t  CurrentHP = pOusters->getHP(ATTR_CURRENT);				Pupa* pPupa     = dynamic_cast<Pupa*>(pOustersArmsbandItem);				// 茄畔俊 雀汗登绰 剧				int		HPQuantity = pPupa->getHPQuantity();				// 茄畔捞 割檬 牢啊.				int		HPDelayProvider = pPupa->getHPDelay();				HP_t    PupaHPAmount = 0;				PupaHPAmount = pPupa->getHPAmount();				int     HPAmount     = min(MaxHP - CurrentHP , (int)PupaHPAmount);				bool    notRecoverHP = false;				// HP 雀汗剧捞 粮犁茄促搁...				if (HPAmount != 0 && HPQuantity != 0)				{					if (CurrentHP < MaxHP) 					{						EffectManager* pEffectManager = pOusters->getEffectManager();						double temp     = (double)((double)HPAmount/(double)HPQuantity);						uint   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 				{					notRecoverHP = true;				}				if (notRecoverHP) 				{					GCCannotUse _GCCannotUse;					_GCCannotUse.setObjectID(pPacket->getObjectID());					pGamePlayer->sendPacket(&_GCCannotUse);					return;				}				else				{					decreaseItemNum(pOustersArmsbandItem, pOustersArmsbandInventory, pOusters->getName(), STORAGE_BELT, pOustersArmsband->getItemID(), SlotID, 0);				}			}			else if ( pOustersArmsbandItem->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*>(pOustersArmsbandItem);				// 茄畔俊 雀汗登绰 剧				int		MPQuantity = pComposMei->getMPQuantity();				// 茄畔捞 割檬 牢啊.				int		MPDelayProvider = pComposMei->getMPDelay();				Attr_t INT = pOusters->getINT();				MP_t    ComposMeiMPAmount = 0;				ComposMeiMPAmount = pComposMei->getMPAmount();				int     MPAmount     = min(MaxMP - CurrentMP , (int)(pComposMei->getMPAmount()* (1 + (double)((double)INT / 300.0))));				bool    notRecoverMP = false;				// 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 				{					notRecoverMP = true;				}				if (notRecoverMP) 				{					GCCannotUse _GCCannotUse;					_GCCannotUse.setObjectID(pPacket->getObjectID());					pGamePlayer->sendPacket(&_GCCannotUse);					return;				}				else				{					decreaseItemNum(pOustersArmsbandItem, pOustersArmsbandInventory, pOusters->getName(), STORAGE_BELT, pOustersArmsband->getItemID(), SlotID, 0);				}			}		}	} 	catch (Throwable & t) 	{			//cout << t.toString();	}	#endif	// __GAME_SERVER__    __END_DEBUG_EX __END_CATCH}

⌨️ 快捷键说明

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