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 static XmdsCommonSkill.Plugin.Interface.ComSpellTemplate; using XmdsCommonSkill.Plugin.Interface; using CommonAI.Data; namespace XmdsCommonSkill.Plugin.PassiveSkills.PetGive { /// /// 秘法·突如刺 : 攻击目标时造成<$5>%减速效果,持续<$6>秒,冷却时间<$9>秒 /// class PetGive_910005 : XmdsPassiveSkillBase { /// 技能ID. public static int ID = 910005; private static int Buff_ID_1 = (int)XmdsBuffBase.XmdsBuffList.SPEED_DOWN; //减速 //效果触发CD private static int triggerCD = 0; //buff下次触发时间 private long BuffNextTriggerTime = 0; //减速比例 private static XmdsSkillValue valueSet; //持续时间 private static XmdsSkillValue valueSet2; private int mUUID_1 = 0; /// 获取技能ID. public override int SkillID {get{return ID;}} protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner) { //单位攻击监听 mUUID_1 = owner.RegistOnHitOther(OnHandleOnHitOther, null); //修改减速buff XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID_1); XmdsBuff_MoveSpeedDown buffAdd = (XmdsBuff_MoveSpeedDown)pack.GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility.MoveSpeedDown); buffAdd.ChangePercent = -valueSet.GetValue(skillInfo.SkillLevel); BuffTemplate bt = pack.mBuffTemplate; bt.IsHarmful = true; bt.LifeTimeMS = valueSet2.GetValue(skillInfo.SkillLevel); pack.BindTemplateAndDispose(); owner.RegistSendBuff(bt); this.BuffNextTriggerTime = CommonLang.CUtils.localTimeMS; } //单位攻击 private float OnHandleOnHitOther(float damage, XmdsVirtual hitter, XmdsVirtual attacker, AttackSource source, ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch) { if (hitter.mUnit.IsMonster && CommonLang.CUtils.localTimeMS > this.BuffNextTriggerTime) { hitter.mUnit.AddBuff(Buff_ID_1, attacker.mUnit); this.BuffNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerCD; } return damage; } protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit) { var buff = unit.GetRegisBuffVirtual(Buff_ID_1) as XmdsBuff_MoveSpeedDown; buff.ChangePercent = -valueSet.GetValue(gs.SkillLevel); var bt = unit.GetRegistBuff(Buff_ID_1); bt.LifeTimeMS = valueSet2.GetValue(gs.SkillLevel); } 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); } } }