Kaynağa Gözat

MMO-19472: 随从受伤机制调整导致【技能机制】调整

meijun 3 yıl önce
ebeveyn
işleme
7f7598800c

+ 0 - 2
Common/CommonAI/Zone/Formula/IFormulas.cs

@@ -323,8 +323,6 @@ namespace CommonAI.Zone.Formula
 		InstanceUnit GetMasterUnit();
 		void StartRecoverMP(bool reset = false);
 		bool IsCanReduceMP(bool force);
-		/** 分发宠物为主人承担伤害事件 */
-		void DispatchShareMasterDmgEvent(int shareDmg, InstanceUnit sender);
 
 	   //获取玩家宠物接口
 		InstanceUnit GetPetUnit();

+ 3 - 3
XmdsCommonServer/Plugin/Units/XmdsInstancePet.cs

@@ -500,11 +500,11 @@ namespace XmdsCommonServer.Plugin.Units
 		public override void PetShareDamage(int baseDmgValue, InstanceUnit sender)
 		{
 			XmdsVirtual petVirtual = this.Virtual as XmdsVirtual;
+			int finalDmg = XmdsDamageCalculator.GetPetDamage(baseDmgValue, petVirtual);
 
 			//分发事件
-			petVirtual.DispatchShareMasterDmgEvent(baseDmgValue, sender);
-
-			int finalDmg = XmdsDamageCalculator.GetPetDamage(baseDmgValue, petVirtual);			
+			finalDmg = petVirtual.DispatchShareMasterDmgEvent(finalDmg, sender);
+			
 			this.AddHP(-finalDmg, sender);
 		}
 

+ 3 - 3
XmdsCommonServer/Plugin/XmdsSkillTemplate/DamageCalculator/XmdsDamageCalculator.cs

@@ -352,10 +352,10 @@ namespace XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator
 					//猎妖防御系数
 					if(hitter.GetStateLv() > 0)
 					{
-						int hitDef = GetMonsterDefAddition(attacker.GetStateLv());
-						if(hitDef > 0)
+						int atkMonsterDef = GetMonsterDefAddition(attacker.GetStateLv());
+						if(atkMonsterDef > 0)
 						{
-							monsterAtkPer = 2.0f * hitDef / (hitDef + hitter.MirrorProp.MaxMonsterDef);
+							monsterAtkPer = 2.0f * atkMonsterDef / (atkMonsterDef + hitter.MirrorProp.MaxMonsterDef);
 						}						
 					}					
 				}

+ 1 - 1
XmdsCommonServer/Plugin/XmdsSkillTemplate/Skills/XmdsSkill.cs

@@ -494,7 +494,7 @@ namespace XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills
 	public delegate bool IAddOtherHPEvent(int hp, InstanceUnit sender, InstanceUnit hitter, out int finalHP);
 
 	//宠物承担主人伤害事件
-	public delegate bool IShareMasterDmgEvent(int hp, InstanceUnit sender, InstanceUnit unit);
+	public delegate int IShareMasterDmgEvent(int hp, InstanceUnit sender, InstanceUnit unit, GameSkill info, ref bool isEndDispatch);
 
 	//扣定力
 	public delegate bool IReduceOtherMpEvent(int mp, InstanceUnit sender, InstanceUnit hitter, out int finalMP, AttackSource source);

+ 7 - 2
XmdsCommonServer/Plugin/XmdsVirtual/XmdsVirtual.Event.cs

@@ -1502,16 +1502,21 @@ namespace XmdsCommonServer.Plugin
 		}
 
 		/** 分发宠物承担主人伤害事件 */
-		public void DispatchShareMasterDmgEvent(int shareDmg, InstanceUnit sender)
+		public int DispatchShareMasterDmgEvent(int shareDmg, InstanceUnit sender)
 		{
+			bool isEndDispatch = false;
 			for (int i = mShareMasterDmgList.Count - 1; i >= 0; --i)
 			{
 				OnShareMasterDmgEvent hitend = mShareMasterDmgList[i];
-				if (hitend.m_hand.Invoke(shareDmg, sender, this.mUnit))
+
+				shareDmg = hitend.m_hand.Invoke(shareDmg, sender, this.mUnit, hitend.m_skill, ref isEndDispatch);
+				if (isEndDispatch)
 				{
 					break;
 				}
 			}
+
+			return shareDmg;
 		}
 
 

+ 30 - 12
XmdsVSPlugins/XmdsCommonSkill/Plugin/PassiveSkills/Pet20200515/Pet_80009.cs

@@ -57,7 +57,8 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 			owner.RegistSendBuff(bt);
 
 			this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerInterval.GetValue();
-			mUUID_1 = owner.RegistOnHitDamage(OnHandleHitDamage, skillInfo, true);
+			//mUUID_1 = owner.RegistOnHitDamage(OnHandleHitDamage, skillInfo, true);
+			mUUID_1 = owner.RegistShareMasterDmgEvent(OnShareMasterDmgEvent, skillInfo);
 		}
 
 		protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit)
@@ -72,22 +73,38 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 			bt.LifeTimeMS = buffTime.GetValue(gs.SkillLevel);
 		}
 
-		private float OnHandleHitDamage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
-		ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
+		private int OnShareMasterDmgEvent(int hp, InstanceUnit sender, InstanceUnit unit, GameSkill skill, ref bool isEndDispatch)
 		{
-			UnitFateType fateType = hitted.GetUnitFateType();
-			if (fateType != UnitFateType.None && damageType == DamageType.Damage && 
-				this.mNextTriggerTime < CommonLang.CUtils.localTimeMS &&
-				IsTrigger(hitted, triggerRate, triggerRateExt, skill, fateType))
+			XmdsVirtual virUnit = unit.Virtual as XmdsVirtual;
+			UnitFateType fateType = virUnit.GetUnitFateType();
+			if (fateType != UnitFateType.None && hp > 0 && this.mNextTriggerTime < CommonLang.CUtils.localTimeMS &&
+				IsTrigger(virUnit, triggerRate, triggerRateExt, skill, fateType))
 			{
-				hitted.mUnit.AddBuff(Buff_ID, hitted.mUnit);
+				virUnit.mUnit.AddBuff(Buff_ID, virUnit.mUnit);
 
 				this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerInterval.GetValue();
-				base.NotifyTriggerAblity(hitted.mUnit, this.SkillID);
+				base.NotifyTriggerAblity(virUnit.mUnit, this.SkillID);
 			}
 
-			return damage;
-		}		
+			return hp;
+		}
+
+		//private float OnHandleHitDamage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
+		//ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
+		//{
+		//	UnitFateType fateType = hitted.GetUnitFateType();
+		//	if (fateType != UnitFateType.None && damageType == DamageType.Damage && 
+		//		this.mNextTriggerTime < CommonLang.CUtils.localTimeMS &&
+		//		IsTrigger(hitted, triggerRate, triggerRateExt, skill, fateType))
+		//	{
+		//		hitted.mUnit.AddBuff(Buff_ID, hitted.mUnit);
+
+		//		this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerInterval.GetValue();
+		//		base.NotifyTriggerAblity(hitted.mUnit, this.SkillID);
+		//	}
+
+		//	return damage;
+		//}		
 
 		protected override void OnInitSkillParam()
 		{
@@ -101,7 +118,8 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 
 		protected override void OnDispose(XmdsVirtual owner)
 		{
-			owner.UnRegistOnHitDamage(mUUID_1);
+			//owner.UnRegistOnHitDamage(mUUID_1);
+			owner.UnRegistShareMasterDmgEvent(mUUID_1);
 		}
 	}
 }

+ 26 - 7
XmdsVSPlugins/XmdsCommonSkill/Plugin/PassiveSkills/Pet20200515/Pet_80011.cs

@@ -52,7 +52,8 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 			owner.RegistSendBuff(bt);
 
 			this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerInterval.GetValue();
-			mUUID_1 = owner.RegistOnHitDamage(OnHandleHitDmage, skillInfo, true);
+			//mUUID_1 = owner.RegistOnHitDamage(OnHandleHitDmage, skillInfo, true);
+			mUUID_1 = owner.RegistShareMasterDmgEvent(OnShareMasterDmgEvent, skillInfo);
 		}
 
 		protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit)
@@ -64,13 +65,13 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 			bt.LifeTimeMS = buffTime.GetValue(gs.SkillLevel);
 		}
 
-		private float OnHandleHitDmage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
-		  ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
+		private int OnShareMasterDmgEvent(int hp, InstanceUnit sender, InstanceUnit unit, GameSkill skill, ref bool isEndDispatch)
 		{
+			XmdsVirtual hitted = unit.Virtual as XmdsVirtual;
 			UnitFateType fateType = hitted.GetUnitFateType();
-			if (fateType != UnitFateType.None && damageType == DamageType.Damage && this.mNextTriggerTime < CommonLang.CUtils.localTimeMS)
+			if (fateType != UnitFateType.None && hp > 0 && this.mNextTriggerTime < CommonLang.CUtils.localTimeMS)
 			{
-				long triggerHP = (long)(hitted.mUnit.MaxHP * XmdsUnitProp.PER * hpTriggerData.GetValue(skill.SkillLevel));
+				long triggerHP = (long)(hitted.mUnit.MaxHP * XmdsUnitProp.PER * hpTriggerData.GetValue(skill.SkillLevel)) * 5;
 				if(hitted.mUnit.CurrentHP < triggerHP)
 				{
 					hitted.mUnit.AddBuff(Buff_ID, hitted.mUnit);
@@ -79,8 +80,25 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 
 				this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerInterval.GetValue();
 			}
-			return damage;
+			return hp;
 		}
+		//private float OnHandleHitDmage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
+		//  ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
+		//{
+		//	UnitFateType fateType = hitted.GetUnitFateType();
+		//	if (fateType != UnitFateType.None && damageType == DamageType.Damage && this.mNextTriggerTime < CommonLang.CUtils.localTimeMS)
+		//	{
+		//		long triggerHP = (long)(hitted.mUnit.MaxHP * XmdsUnitProp.PER * hpTriggerData.GetValue(skill.SkillLevel));
+		//		if(hitted.mUnit.CurrentHP < triggerHP)
+		//		{
+		//			hitted.mUnit.AddBuff(Buff_ID, hitted.mUnit);
+		//			base.NotifyTriggerAblity(hitted.mUnit, this.SkillID);
+		//		}
+
+			//		this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerInterval.GetValue();
+			//	}
+			//	return damage;
+			//}
 
 		protected override void OnInitSkillParam()
 		{
@@ -95,7 +113,8 @@ namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
 
 		protected override void OnDispose(XmdsVirtual owner)
 		{
-			owner.UnRegistOnHitDamage(mUUID_1);
+			//owner.UnRegistOnHitDamage(mUUID_1);
+			owner.UnRegistShareMasterDmgEvent(mUUID_1);
 		}
 	}
 }