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; namespace XmdsCommonSkill.Plugin.PassiveSkills.Warrior { /// /// 战士被动 /// 荒原血统:每次受到伤害时,获得1层不屈效果:防御值提升1%,可叠加10层,持续5s(每次受伤持续时间刷新)未受伤害消失,下次重新叠加 /// public class Warrior_110601 : XmdsPassiveSkillBase { /// 技能ID. public static int ID = 110601; public override int SkillID { get { return ID; } } private static int Buff_ID = (int)XmdsBuffBase.XmdsBuffList.HUANYUAN_SZ_6; // 荒原血统 //被动数值 protected static XmdsSkillValue valueSet; // buff时间 protected static XmdsSkillValue valueSet2; // 妖兽伤害减免 protected static XmdsSkillValue valueSet3; //减伤比例 private static float mMonsterDmgPrecent; private int mUUID_1 = 0; //获得天赋buff2 public static int GetTalentBufID() { return Warrior_110601.Buff_ID; } protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner) { XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID); //荒原血统 XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID); XmdsBuff_PropChange buff = (XmdsBuff_PropChange)pack.GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility.PropChange); buff.IsPercent = true; buff.CurentChangeType = XmdsVirtual.UnitAttributeType.Defence; buff.CurrentValue = valueSet.GetValue(skillInfo.GetPassiveLevel()); BuffTemplate bt = pack.mBuffTemplate; bt.IsHarmful = false; bt.LifeTimeMS = valueSet2.GetValue(skillInfo.GetPassiveLevel()); pack.BindTemplateAndDispose(); owner.RegistSendBuff(bt); //收到攻击监听注册 mUUID_1 = owner.RegistOnHitDamage(OnHandleOnHitDamage, skillInfo, true); mMonsterDmgPrecent = 1.0f - valueSet3.GetValue(skillInfo.GetPassiveLevel()) / XmdsDamageCalculator.PERER; } protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit) { mMonsterDmgPrecent = 1.0f - valueSet3.GetValue(gs.GetPassiveLevel()) / XmdsDamageCalculator.PERER; var buff = unit.GetRegisBuffVirtual(Buff_ID) as XmdsBuff_PropChange; buff.CurrentValue = valueSet.GetValue(gs.GetPassiveLevel()); var bt = unit.GetRegistBuff(Buff_ID); bt.LifeTimeMS = valueSet2.GetValue(gs.GetPassiveLevel()); } //单位受击 private float OnHandleOnHitDamage(float damage, XmdsVirtual hitter, XmdsVirtual attacker, AttackSource source, ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch) { if(damageType == DamageType.Damage) { hitter.mUnit.AddBuff(Buff_ID, hitter.mUnit); } // 妖兽免伤 if (attacker.mUnit.IsMonster) { return damage * mMonsterDmgPrecent; } return damage;// * (XmdsDamageCalculator.PERER - buff.CurrentValue) * XmdsUnitProp.PER; } protected override void OnDispose(XmdsVirtual owner) { owner.UnRegistOnHitDamage(mUUID_1); } protected override void OnInitSkillParam() { XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID); InitData(data, out valueSet, XmdsSkillData.XmdsSkillDataKey.ValueSet); InitData(data, out valueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2); InitData(data, out valueSet3, XmdsSkillData.XmdsSkillDataKey.ValueSet3); } } }