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.PetGive { /// /// 神通·凝神聚气 : <$6>秒内<$7>次普攻命中同一敌人时,对其造成伤害提高<$5>%,持续<$8>秒,冷却时间<$9>秒 /// class PetGive_910008 : XmdsPassiveSkillBase { /// 技能ID. public static readonly int ID = 910008; private static readonly int Buff_ID_1 = (int)XmdsBuffBase.XmdsBuffList.PET_CONSUM_6_1; //耗6-伤害提高buff private int skillLevel = 0; //伤害提高 private static XmdsSkillValue valueSet; //限制时间 private static XmdsSkillValue valueSet2; //普攻次数 private static XmdsSkillValue valueSet3; //buff触发时间 private long BuffNextTriggerTime = 0; //效果触发CD private static int triggerCD = 0; //触发叠层时间间隔 private long BuffOverLayerEndTime = 0; //是否该技能首次 private bool mIsSkillFirst = true; //技能命中次数 private byte hitTimes = 0; private int mUUID_1 = 0; private int mUUID_2 = 0; /// 获取技能ID. public override int SkillID {get{return ID;}} protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner) { //单位攻击监听 mUUID_1 = owner.RegistLaunchSkillOver(OnLaunchSkillOver, null, true); //单位攻击监听 mUUID_2 = owner.RegistOnHitOther(OnHandleOnHitOther, null); // Buff1修改 var pack1 = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID_1); var buff1 = pack1.GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility.Brand_2) as XmdsBuff_Brand_2; buff1.BuffValue = valueSet.GetValue(skillInfo.SkillLevel); var bt1 = pack1.mBuffTemplate; bt1.IsHarmful = true; bt1.LifeTimeMS = valueSet2.GetValue(skillInfo.SkillLevel); pack1.BindTemplateAndDispose(); owner.RegistSendBuff(bt1); this.skillLevel = skillInfo.SkillLevel; this.BuffNextTriggerTime = CommonLang.CUtils.localTimeMS; } protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit) { var buff = unit.GetRegisBuffVirtual(Buff_ID_1) as XmdsBuff_Brand_2; buff.BuffValue = valueSet.GetValue(gs.SkillLevel); var bt = unit.GetRegistBuff(Buff_ID_1); bt.LifeTimeMS = valueSet2.GetValue(gs.SkillLevel); } //释放技能 private int OnLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual launcher, CommonAI.Zone.Instance.InstanceUnit.SkillState skill) { if (skill.GetSkillType() == XmdsSkillType.normalAtk) { mIsSkillFirst = true; } return 0; } private float OnHandleOnHitOther(float damage, XmdsVirtual hitter, XmdsVirtual attacker, AttackSource source, ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch) { if(mIsSkillFirst && BuffNextTriggerTime < CommonLang.CUtils.localTimeMS) { mIsSkillFirst = false; //在叠层触发时间内,才增加叠层 if (CommonLang.CUtils.localTimeMS < BuffOverLayerEndTime) { hitTimes++; } else { hitTimes = 1; } if(hitTimes > valueSet3.GetValue(this.skillLevel))//触发了buff { hitter.mUnit.AddBuff(Buff_ID_1, attacker.mUnit); BuffNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerCD; hitTimes = 0; } else { BuffOverLayerEndTime = CommonLang.CUtils.localTimeMS + valueSet2.GetValue(this.skillLevel); } } 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); 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.UnRegistLaunchSkillOver(mUUID_1); owner.UnRegistOnHitOther(mUUID_2); } } }