using CommonAI.Zone.Helper; using CommonAI.Zone.Instance; using XmdsCommonServer.Plugin; using XmdsCommonServer.XLS.Data; using XmdsCommonSkill.Plugin.Buffs; using System; using static CommonAI.Zone.Instance.InstanceUnit; using XmdsCommon.Plugin; using CommonAI.Zone; using XmdsCommonServer.Plugin.Units; using CommonAI.Zone.Formula; using XmdsCommonSkill.Plugin.Skills; using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator; using CommonAI.Data; using CommonLang; namespace XmdsCommonSkill.Plugin.PassiveSkills.PetGive { /// /// 秘法·绵如泽 : 当前生命值低于<$6>%时,将普攻伤害的<$5>%恢复自己等量的生命值,冷却时间<$9>秒 /// class PetGive_910004 : XmdsPassiveSkillBase { /// 技能ID. public static int ID = 910004; //buff下次触发时间 private long BuffNextTriggerTime = 0; private int mUUID_1 = 0; //效果触发CD private static int triggerCD = 0; //恢复生命百分比 private static XmdsSkillValue valueSet; //生命触发阀值 private static XmdsSkillValue valueSet2; /// 获取技能ID. public override int SkillID { get { return ID; } } protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner) { //收到攻击监听注册 mUUID_1 = owner.RegistOnHitOther(OnHitOther, skillInfo, true); this.BuffNextTriggerTime = CommonLang.CUtils.localTimeMS; } protected virtual float OnHitOther(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source, ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch) { if(source.FromSkillType != XmdsSkillType.normalAtk || !hitted.mUnit.IsMonster || CommonLang.CUtils.localTimeMS < this.BuffNextTriggerTime) { return damage; } bool isTrigger = ((attacker.mUnit.CurrentHP - damage) / attacker.mUnit.MaxHP * XmdsDamageCalculator.PERER) < valueSet2.GetValue(skill.SkillLevel); if (isTrigger) { int addHP = Math.Max(1, CUtils.CastInt(damage * XmdsUnitProp.PER * valueSet.GetValue(skill.SkillLevel))); attacker.mUnit.AddHP(addHP, attacker.mUnit); this.BuffNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerCD; } return damage; } protected override void OnInitSkillParam() { XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID); InitData(data, out valueSet, XmdsSkillData.XmdsSkillDataKey.ValueSet); InitData(data, out valueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2); XmdsSkillValue cdTime; InitData(data, out cdTime, XmdsSkillData.XmdsSkillDataKey.CDTime); triggerCD = cdTime.GetValue(); } protected override void OnDispose(XmdsVirtual owner) { owner.UnRegistOnHitOther(mUUID_1); } } }