using CommonAI.data; using CommonAI.Data; using CommonAI.Zone.Formula; using CommonLang; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.XLS.Data; using XmdsCommonSkill.Plugin.Buffs; using XmdsCommonSkill.Plugin.Skills; namespace XmdsCommonSkill.Plugin.PassiveSkills.Boss { /// /// boss - 被动狂暴,血量下降到x%时,增加属性 /// class Boss_91000 : XmdsPassiveSkillBase { private int mUUID_1 = 0; public static readonly int ID = 91000; public override int SkillID { get { return ID; } } //绑定buffID private static int mBuffID = (int)XmdsBuffBase.XmdsBuffList.BOSS_CRAZE; private static XmdsSkillValue mValueSet1; // 血量阀值 private static XmdsSkillValue mValueSet2; // 血量系数 private static XmdsSkillValue mValueSet3; // 攻击系数 private static XmdsSkillValue mValueSet4; // 防御系数 private static XmdsSkillValue mValueSet5; // 暴击系数 private static XmdsSkillValue mValueSet6; // 爆伤系数 private static XmdsSkillValue mValueSet7; // 攻速系数 private static XmdsSkillValue mValueSet8; // 移速系数 //内部数据 private long mTriggerHP = 0; private XmdsVirtual mOwner = null; private long mNextTriggerTime; private static int mBuffTime = 3600000; protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner) { mUUID_1 = owner.RegistOnHitDamage(OnHandleHitDmage, skillInfo, true); this.mOwner = owner; this.mTriggerHP = CUtils.CastInt(owner.mUnit.MaxHP * XmdsUnitProp.PER * mValueSet1.GetValue(skillInfo.SkillLevel)); //buff初始化 var pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(mBuffID); var buff1 = pack.GetXmdsBuff(0) as XmdsBuff_PropChange; buff1.CurentChangeType = XmdsVirtual.UnitAttributeType.MaxHP; buff1.IsPercent = true; buff1.CurrentValue = mValueSet2.GetValue(skillInfo.SkillLevel); var buff2 = pack.GetXmdsBuff(1) as XmdsBuff_PropChange; buff2.CurentChangeType = XmdsVirtual.UnitAttributeType.Attack; buff2.IsPercent = true; buff2.CurrentValue = mValueSet3.GetValue(skillInfo.SkillLevel); var buff3 = pack.GetXmdsBuff(2) as XmdsBuff_PropChange; buff3.CurentChangeType = XmdsVirtual.UnitAttributeType.Defence; buff3.IsPercent = true; buff3.CurrentValue = mValueSet4.GetValue(skillInfo.SkillLevel); var buff4 = pack.GetXmdsBuff(3) as XmdsBuff_PropChange; buff4.CurentChangeType = XmdsVirtual.UnitAttributeType.CritRate; buff4.IsPercent = true; buff4.CurrentValue = mValueSet5.GetValue(skillInfo.SkillLevel); var buff5 = pack.GetXmdsBuff(4) as XmdsBuff_PropChange; buff5.CurentChangeType = XmdsVirtual.UnitAttributeType.CritDamage; buff5.IsPercent = true; buff5.CurrentValue = mValueSet6.GetValue(skillInfo.SkillLevel); var buff6 = pack.GetXmdsBuff(5) as XmdsBuff_PropChange; buff6.CurentChangeType = XmdsVirtual.UnitAttributeType.AttackSpeed; buff6.IsPercent = true; buff6.CurrentValue = mValueSet7.GetValue(skillInfo.SkillLevel); var buff7 = pack.GetXmdsBuff(6) as XmdsBuff_PropChange; buff7.CurentChangeType = XmdsVirtual.UnitAttributeType.MoveSpeed; buff7.IsPercent = true; buff7.CurrentValue = mValueSet8.GetValue(skillInfo.SkillLevel); var bt = pack.mBuffTemplate; bt.IsHarmful = false; bt.LifeTimeMS = mBuffTime; pack.BindTemplateAndDispose(); owner.RegistSendBuff(bt); } private float OnHandleHitDmage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source, ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch) { if (this.mNextTriggerTime < CommonLang.CUtils.localTimeMS) { int tempHp = this.mOwner.mUnit.CurrentHP - (int)damage; if(tempHp > 0 && tempHp <= this.mTriggerHP) { hitted.mUnit.AddBuff(mBuffID, hitted.mUnit); this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + mBuffTime; } } return damage; } protected override void OnUpdate(int intervalMS, bool slowRefresh) { if(this.mNextTriggerTime > CommonLang.CUtils.localTimeMS && this.mOwner.GetBattleStatus() == BattleStatus.None) { this.mNextTriggerTime = 0; this.mOwner.mUnit.removeBuff(mBuffID); } } protected override void OnInitSkillParam() { XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID); InitData(data, out mValueSet1, XmdsSkillData.XmdsSkillDataKey.ValueSet); InitData(data, out mValueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2); InitData(data, out mValueSet3, XmdsSkillData.XmdsSkillDataKey.ValueSet3); InitData(data, out mValueSet4, XmdsSkillData.XmdsSkillDataKey.ValueSet4); InitData(data, out mValueSet5, XmdsSkillData.XmdsSkillDataKey.ValueSet5); InitData(data, out mValueSet6, XmdsSkillData.XmdsSkillDataKey.ValueSet6); InitData(data, out mValueSet7, XmdsSkillData.XmdsSkillDataKey.ValueSet7); InitData(data, out mValueSet8, XmdsSkillData.XmdsSkillDataKey.ValueSet8); } protected override void OnDispose(XmdsVirtual owner) { owner.UnRegistOnHitDamage(mUUID_1); } } }