⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cureall.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			_GCSkillToObjectOK4.setTargetObjectID(TargetObjectID);						_GCSkillToObjectOK5.setObjectID(pSlayer->getObjectID());			_GCSkillToObjectOK5.setSkillType(param.SkillType);			_GCSkillToObjectOK5.setTargetObjectID (TargetObjectID);			_GCSkillToObjectOK5.setDuration (0);			pPlayer->sendPacket(&_GCSkillToObjectOK1);			if (pTargetCreature->isPC()) 			{				Player* pTargetPlayer = pTargetCreature->getPlayer();				Assert(pTargetPlayer != NULL);				pTargetPlayer->sendPacket(&_GCSkillToObjectOK2);			}						list<Creature*> cList;			cList.push_back(pSlayer);			cList.push_back(pTargetCreature);			cList = pZone->broadcastSkillPacket(myX, myY, targetX, targetY, &_GCSkillToObjectOK5, cList);			pZone->broadcastPacket(myX, myY,  &_GCSkillToObjectOK3 , cList);			pZone->broadcastPacket(targetX, targetY,  &_GCSkillToObjectOK4 , cList);						pSkillSlot->setRunTime(param.Delay);		} 		else 		{			executeSkillFailNormal(pSlayer, param.SkillType, pTargetCreature);		}	} 	catch(Throwable & t)  	{		executeSkillFailException(pSlayer, param.SkillType);	}	__END_CATCH}//////////////////////////////////////////////////////////////////////////////// 浇饭捞绢 伎橇 勤甸矾//////////////////////////////////////////////////////////////////////////////void CureAll::execute(Slayer* pSlayer, SkillSlot* pSkillSlot, CEffectID_t CEffectID)	throw(Error){	__BEGIN_TRY	Assert(pSlayer != NULL);	Assert(pSkillSlot != NULL);	SkillInput input(pSlayer, pSkillSlot);	SkillOutput output;	input.TargetType = SkillInput::TARGET_SELF;	computeOutput(input, output);	SIMPLE_SKILL_INPUT param;	param.SkillType     = getSkillType();	param.SkillDamage   = output.Damage;	param.Delay         = output.Delay;	param.STRMultiplier = 1;	param.DEXMultiplier = 1;	param.INTMultiplier = 8;	param.Level         = CureAllBloodDrainLevel;	try 	{		Player* pPlayer = pSlayer->getPlayer();		Zone* pZone = pSlayer->getZone();		GCSkillToSelfOK1 _GCSkillToSelfOK1;		GCSkillToSelfOK2 _GCSkillToSelfOK2;		SkillInfo*        pSkillInfo = g_pSkillInfoManager->getSkillInfo(param.SkillType);		SkillDomainType_t DomainType = pSkillInfo->getDomainType();		Level_t 		  SkillLevel = pSkillSlot->getExpLevel();		int  RequiredMP  = (int)pSkillInfo->getConsumeMP();		bool bManaCheck  = hasEnoughMana(pSlayer, RequiredMP);		bool bTimeCheck  = verifyRunTime(pSkillSlot);		bool bRangeCheck = checkZoneLevelToUseSkill(pSlayer);		bool bHitRoll    = HitRoll::isSuccessMagic(pSlayer, pSkillInfo, pSkillSlot);		bool bHPCheck    = false;		EffectBloodDrain* pEffectBloodDrain = NULL;				bool bEffected  = false; // 酒公 历林唱 吧妨 乐栏搁 囊促.		if (pSlayer->getHP(ATTR_CURRENT) < pSlayer->getHP(ATTR_MAX))		{			bHPCheck = true;		}		if (pSlayer->isFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN))		{			Effect* pEffect = pSlayer->findEffect(Effect::EFFECT_CLASS_BLOOD_DRAIN);			pEffectBloodDrain = dynamic_cast<EffectBloodDrain*>(pEffect);			Assert(pEffectBloodDrain != NULL);							if (pEffectBloodDrain->getLevel() < param.Level) bHPCheck = true;			bEffected = true;		}		bool bDoom      = false;		bool bBlunting  = false;		bool bParalyze  = false;		bool bSeduction = false;		EffectDoom*      pEffectDoom     = NULL;		EffectBlunting*  pEffectBlunting = NULL;		EffectParalyze*  pEffectParalyze = NULL;		EffectSeduction* pEffectSeduction = NULL;		// 历林 拌凯 秦家		if (pSlayer->isEffect(Effect::EFFECT_CLASS_DOOM)) 		{			pEffectDoom = (EffectDoom*)pSlayer->findEffect(Effect::EFFECT_CLASS_DOOM);			Assert(pEffectDoom != NULL);			bDoom = HitRoll::isSuccessRemoveCurse(75, SkillLevel, 10, pEffectDoom->getLevel(), 25);			bEffected = true;			bHPCheck = true;		}		if (pSlayer->isEffect(Effect::EFFECT_CLASS_BLUNTING)) 		{			pEffectBlunting = (EffectBlunting*)pSlayer->findEffect(Effect::EFFECT_CLASS_BLUNTING);			Assert(pEffectBlunting != NULL);			bBlunting = HitRoll::isSuccessRemoveCurse(75, SkillLevel, 15, pEffectBlunting->getLevel(), 25);			bEffected = true;			bHPCheck = true;		}		if (pSlayer->isEffect(Effect::EFFECT_CLASS_PARALYZE)) 		{			pEffectParalyze = (EffectParalyze*)pSlayer->findEffect(Effect::EFFECT_CLASS_PARALYZE);			Assert(pEffectParalyze != NULL);			bParalyze = HitRoll::isSuccessRemoveCurse(75, SkillLevel, 20, pEffectParalyze->getLevel(), 25);			bEffected = true;			bHPCheck = true;		}		if (pSlayer->isEffect(Effect::EFFECT_CLASS_SEDUCTION)) 		{			pEffectSeduction = (EffectSeduction*)pSlayer->findEffect(Effect::EFFECT_CLASS_SEDUCTION);			Assert(pEffectSeduction != NULL);			bSeduction = HitRoll::isSuccessRemoveCurse(75, SkillLevel, 30, pEffectSeduction->getLevel(), 25);			bEffected = true;			bHPCheck = true;		}		// 刀 拌凯 秦家		bool bGreenPoison    = false; // GreenPoison阑 摹丰且鳖狼 咯何		bool bYellowPoison   = false; // YellowPoison阑 摹丰且鳖狼 咯何		bool bDarkBluePoison = false; // DarkBluePoison阑 摹丰且鳖狼 咯何		bool bGreenStalker   = false; // GreenStalker甫 摹丰且鳖狼 咯何		EffectPoison*                 pEffectPoison                 = NULL;		EffectYellowPoisonToCreature* pEffectYellowPoisonToCreature = NULL;		EffectDarkBluePoison*         pEffectDBP                   = NULL;		EffectGreenStalker*           pEffectGreenStalker           = NULL;		if (pSlayer->isEffect(Effect::EFFECT_CLASS_POISON)) 		{			pEffectPoison = (EffectPoison*)pSlayer->findEffect(Effect::EFFECT_CLASS_POISON);			Assert(pEffectPoison != NULL);			bGreenPoison = HitRoll::isSuccessCurePoison(75, SkillLevel, 10, pEffectPoison->getLevel(), 25);			bEffected = true;			bHPCheck = true;		}		if (pSlayer->isEffect(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE)) 		{			pEffectYellowPoisonToCreature = (EffectYellowPoisonToCreature*)pSlayer->findEffect(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE);			Assert(pEffectYellowPoisonToCreature != NULL);			bYellowPoison = HitRoll::isSuccessCurePoison(75, SkillLevel, 20, pEffectYellowPoisonToCreature->getLevel(), 25);			bEffected = true;			bHPCheck = true;		}		if (pSlayer->isEffect(Effect::EFFECT_CLASS_DARKBLUE_POISON)) 		{			pEffectDBP = (EffectDarkBluePoison*)pSlayer->findEffect(Effect::EFFECT_CLASS_DARKBLUE_POISON);			Assert(pEffectDBP != NULL);			bDarkBluePoison = HitRoll::isSuccessCurePoison(75, SkillLevel, 30, pEffectDBP->getLevel(), 25);			bEffected = true;			bHPCheck = true;		}		if (pSlayer->isEffect(Effect::EFFECT_CLASS_GREEN_STALKER)) 		{			pEffectGreenStalker = (EffectGreenStalker*)pSlayer->findEffect(Effect::EFFECT_CLASS_GREEN_STALKER);			Assert(pEffectGreenStalker != NULL);			bGreenStalker = HitRoll::isSuccessCurePoison(75, SkillLevel, 40, pEffectGreenStalker->getLevel(), 25);			bEffected = true;			bHPCheck = true;		}		if (bManaCheck && bTimeCheck && bRangeCheck && bHitRoll && bHPCheck && pSlayer->isAlive())		{			decreaseMana(pSlayer, RequiredMP, _GCSkillToSelfOK1);			uint HealPoint = param.SkillDamage;			// 软趋寸茄 惑怕扼搁 软趋 惑怕甫 朝妨霖促.			if (pEffectBloodDrain != NULL && pEffectBloodDrain->getLevel() < param.Level)			{                                // 软趋 酒福官捞飘甫 规瘤窍扁 困茄 饶蜡刘 捞棋飘甫 嘿咯霖促.				if (pSlayer->isFlag(Effect::EFFECT_CLASS_AFTERMATH))				{						Effect* pEffect = pSlayer->findEffect(Effect::EFFECT_CLASS_AFTERMATH);						EffectAftermath* pEffectAftermath = dynamic_cast<EffectAftermath*>(pEffect);						pEffectAftermath->setDeadline(5*600); // 5盒 悼救 瘤加等促.				}				else				{						EffectAftermath* pEffectAftermath = new EffectAftermath(pSlayer);						pEffectAftermath->setDeadline(5*600); // 5盒 悼救 瘤加等促.						pSlayer->addEffect(pEffectAftermath);						pSlayer->setFlag(Effect::EFFECT_CLASS_AFTERMATH);						pEffectAftermath->create(pSlayer->getName());				}				pEffectBloodDrain->destroy(pSlayer->getName());				pSlayer->deleteEffect(Effect::EFFECT_CLASS_BLOOD_DRAIN);				SLAYER_RECORD prev;				pSlayer->getSlayerRecord(prev);				pSlayer->initAllStat();				pSlayer->sendRealWearingInfo();				pSlayer->addModifyInfo(prev, _GCSkillToSelfOK1);				GCRemoveEffect gcRemoveEffect;				gcRemoveEffect.setObjectID(pSlayer->getObjectID());				gcRemoveEffect.addEffectList((EffectID_t)Effect::EFFECT_CLASS_BLOOD_DRAIN);				pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcRemoveEffect);			}			// 阿阿狼 历林甫 昏力窍绊,			// 菩哦俊促 捞棋飘 昏力窍扼绊 歹茄促.			GCRemoveEffect gcRemoveEffect;			gcRemoveEffect.setObjectID(pSlayer->getObjectID());			if (bDoom)			{				pEffectDoom->setDeadline(0);				pSlayer->removeFlag(Effect::EFFECT_CLASS_DOOM);				gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_DOOM);			}			if (bBlunting)			{				pEffectBlunting->setDeadline(0);				pSlayer->removeFlag(Effect::EFFECT_CLASS_BLUNTING);				gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_BLUNTING);			}			if (bParalyze)			{				pEffectParalyze->setDeadline(0);				pSlayer->removeFlag(Effect::EFFECT_CLASS_PARALYZE);				gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_PARALYZE);			}			if (bSeduction)			{				pEffectSeduction->setDeadline(0);				pSlayer->removeFlag(Effect::EFFECT_CLASS_SEDUCTION);				gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_SEDUCTION);			}			// 阿阿狼 刀付促 摹丰甫 窍绊,			// 菩哦俊促 捞棋飘 昏力窍扼绊 歹茄促.			if (bGreenPoison)			{				pEffectPoison->setDeadline(0);				pSlayer->removeFlag(Effect::EFFECT_CLASS_POISON);				gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_POISON);			}			if (bYellowPoison)			{				pEffectYellowPoisonToCreature->setDeadline(0);				pSlayer->removeFlag(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE);				gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_YELLOW_POISON_TO_CREATURE);			}			if (bDarkBluePoison)			{				pEffectDBP->setDeadline(0);				pSlayer->removeFlag(Effect::EFFECT_CLASS_DARKBLUE_POISON);				gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_DARKBLUE_POISON);			}			if (bGreenStalker)			{				pEffectGreenStalker->setDeadline(0);				pSlayer->removeFlag(Effect::EFFECT_CLASS_GREEN_STALKER);				gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_GREEN_STALKER);			}			if( bEffected ) {				pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcRemoveEffect);			}			// HP甫 技泼茄促.			HP_t CurrentHP = pSlayer->getHP(ATTR_CURRENT);			HP_t MaxHP     = pSlayer->getHP(ATTR_MAX);			// 角力 雀汗 荐摹甫 拌魂茄促.			int RealHealPoint = 0;			if( CurrentHP + HealPoint <= MaxHP ) {				RealHealPoint = max( (unsigned int)0, HealPoint );			} else {				RealHealPoint = max( 0, MaxHP - CurrentHP );			}			// 版氰摹甫 棵妨霖促.			shareAttrExp(pSlayer, RealHealPoint, param.STRMultiplier, param.DEXMultiplier, param.INTMultiplier, _GCSkillToSelfOK1);			increaseDomainExp(pSlayer, DomainType, pSkillInfo->getPoint(), _GCSkillToSelfOK1);			increaseSkillExp(pSlayer, DomainType, pSkillSlot, pSkillInfo, _GCSkillToSelfOK1);			CurrentHP = min((int)MaxHP, (int)(CurrentHP + HealPoint));			pSlayer->setHP(CurrentHP , ATTR_CURRENT);			// HP甫 宏肺靛某胶泼茄促.			GCStatusCurrentHP gcStatusCurrentHP;			gcStatusCurrentHP.setObjectID(pSlayer->getObjectID());			gcStatusCurrentHP.setCurrentHP (CurrentHP);			pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcStatusCurrentHP);						ZoneCoord_t myX = pSlayer->getX();			ZoneCoord_t myY = pSlayer->getY();			_GCSkillToSelfOK1.setSkillType(param.SkillType);			_GCSkillToSelfOK1.setCEffectID(CEffectID);			_GCSkillToSelfOK1.setDuration(0);						_GCSkillToSelfOK2.setObjectID(pSlayer->getObjectID());			_GCSkillToSelfOK2.setSkillType(param.SkillType);			_GCSkillToSelfOK2.setDuration (0);			// Send Packet			pPlayer->sendPacket(&_GCSkillToSelfOK1);			pZone->broadcastPacket(myX, myY, &_GCSkillToSelfOK2, pSlayer);			pSkillSlot->setRunTime(param.Delay);		} 		else 		{			executeSkillFailNormal(pSlayer, param.SkillType, NULL);		}	} 	catch(Throwable & t)  	{		executeSkillFailException(pSlayer, param.SkillType);	}	__END_CATCH}CureAll g_CureAll;

⌨️ 快捷键说明

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