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 System.Collections.Generic; using CommonAI.Data; using CommonLang; namespace XmdsCommonSkill.Plugin.PassiveSkills.PetGive { /// ///神通·不动如山 : 受到控制效果时触发,<$7>秒内防御力提高<$5>%,增益消失时对周围敌人造成<$6>%攻击力伤害,冷却时间<$9>秒 /// class PetGive_910012 : XmdsPassiveSkillBase { /// 技能ID. public static readonly int ID = 910007; //效果触发CD private static int triggerCD = 0; //buff下次触发时间 private long BuffNextTriggerTime = 0; private static readonly int Buff_ID_1 = (int)XmdsBuffBase.XmdsBuffList.PET_DEFENCE_6_1; //防6-防御buff private int mUUID_1 = 0; private int mUUID_2 = 0; //防御提升系数 private static XmdsSkillValue valueSet; //buff结束,额外伤害 private static XmdsSkillValue valueSet2; //持续时间 private static XmdsSkillValue valueSet3; /// 获取技能ID. public override int SkillID {get{return ID;}} protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner) { var pack1 = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID_1); var buff1 = pack1.GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility.PropChange) as XmdsBuff_PropChange; buff1.CurentChangeType = XmdsVirtual.UnitAttributeType.Defence; buff1.IsPercent = true; buff1.CurrentValue = valueSet.GetValue(skillInfo.SkillLevel); var bt1 = pack1.mBuffTemplate; bt1.LifeTimeMS = valueSet3.GetValue(skillInfo.SkillLevel); bt1.IsHarmful = false; pack1.BindTemplateAndDispose(); owner.RegistSendBuff(bt1); //收到攻击监听注册 mUUID_1 = owner.RegistTryAddBuffEvent(OnTryAddBuffEvent, skillInfo); //攻击监听 mUUID_2 = owner.RegistCalDamage(OnCallDamageProcess, skillInfo, false); this.BuffNextTriggerTime = CommonLang.CUtils.localTimeMS; } protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit) { var Buff = unit.GetRegisBuffVirtual(Buff_ID_1) as XmdsBuff_PropChange; Buff.CurrentValue = valueSet.GetValue(gs.SkillLevel); var bt = unit.GetRegistBuff(Buff_ID_1); bt.LifeTimeMS = valueSet3.GetValue(gs.SkillLevel); } private bool OnTryAddBuffEvent(ref BuffTemplate buff, XmdsVirtual attacker, XmdsVirtual hitter, GameSkill skill) { if (CommonLang.CUtils.localTimeMS > this.BuffNextTriggerTime) { if(XmdsInstanceUtils.IsControlBuff(buff)) { hitter.mUnit.AddBuff(Buff_ID_1, hitter.mUnit); this.BuffNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerCD; } } return true; } public virtual bool OnCallDamageProcess(XmdsVirtual attacker, XmdsVirtual hitter, AttackSource source, GameSkill gs, ref XmdsCommonServer.Plugin.XmdsVirtual.AtkResult result, ref int damage) { int damageBase = CUtils.CastInt(attacker.MirrorProp.GetFinalAttack(hitter.mUnit.IsMonster) * XmdsUnitProp.PER * valueSet2.GetValue(gs.SkillLevel)); damage = XmdsDamageCalculator.GetDamage(damageBase, attacker, hitter, source) ; return true; } 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); XmdsSkillValue cdTime; InitData(data, out cdTime, XmdsSkillData.XmdsSkillDataKey.CDTime); triggerCD = cdTime.GetValue(); } protected override void OnDispose(XmdsVirtual owner) { owner.UnRegistTryAddBuffEvent(mUUID_1); owner.UnRegistCalDamage(mUUID_2); } } }