using CommonAI.data; using CommonAI.Zone; using CommonAI.Zone.Helper; using CommonAI.Zone.Instance; using CommonLang; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator; using XmdsCommonServer.XLS.Data; using XmdsCommonSkill.Plugin.Buffs; using XmdsCommonSkill.Plugin.Skills; using static CommonAI.Zone.Instance.InstanceUnit; /// /// 法师【1】技能 1 基类 ///1技能段数与剑气值以及剑气层有关联。第一部分只有一段(2-3下相同的法术及伤害填值),释放后会出现第二部分的图标,持续n秒。 ///如果此时有足够的剑气,那么第二部分的图标会亮,持续时间T秒,不释放则进入cd图标。二部分的法术段数与剑气层数有关,1层n段,伤害为N1 2层n2段伤害N2,3层n3段伤害N3) ///释放第二部分技能,需要消耗剑气能量n%(生成剑影依旧是整个技能就1个) (每一段里面的法术次数不同,但数值填值为一个,而伤害值可以填成每多一层是递增n%来填) ///特殊写法,后面坚决不接这种单, ///第一动作: 基础动作 ///第二动作: 剑气0层 ///第三动作:剑气一层 ///第四动作: 剑气二层 ///第五动作:剑气三层 /// /// namespace XmdsCommonSkill.Plugin.Skills.Magic { public class Magic_310100 : XmdsSkillBase { /// 技能ID. private static int ID = 310100; public override int SkillID { get { return ID; } } //固定值_百分比 protected XmdsSkillValue mValueSet1; //基础二段需要剑气值,伤害1,伤害2,伤害3 protected XmdsSkillValue mValueSet8; //是否有第二段 protected long mIsHasNextValidTime; //释放时剑气等级 protected int mLaunchTalentLv; protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template) { } protected override void OnSkillDamagePerEvent(BattleParams param) { param.SkillDamageAdd = mValueSet1.GetValue(param.GameSkill.SkillLevel, param.AtkProp.DamagePerID); param.SkillDamagePer = mValueSet1.GetValueExt(param.GameSkill.SkillLevel, param.AtkProp.DamagePerID); } protected override bool OnUnitLaunchSkillEvent(GameSkill info, ref InstanceUnit.SkillState skill, XmdsVirtual launcher, ref InstanceUnit.LaunchSkillParam param) { IPlayerCache cache = launcher.GetPlayerCache(); if(cache == null) { return true; } if (CommonLang.CUtils.localTimeMS < this.mIsHasNextValidTime) { skill.LockActionStep = -1; skill.SetActionIndex(0); int talentLv = launcher.GetPlayerCache().GetTalentLv(); skill.setMaxMutilStep(1 + talentLv); } else { skill.LockActionStep = 0; } return true; } protected override int OnUnitLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual launcher, CommonAI.Zone.Instance.InstanceUnit.SkillState state) { IPlayerCache cache = launcher.GetPlayerCache(); if (cache == null) { return 0; } if (CommonLang.CUtils.localTimeMS < this.mIsHasNextValidTime) { this.mIsHasNextValidTime = 0; state.IsInMutilTime = false; state.LogicToCD(); //释放了第二段:扣除剑气值 launcher.GetPlayerCache().UseTalentValue(mValueSet8.GetValue(info.SkillLevel, 1)); } else { int talentValue = launcher.GetPlayerCache().GetTalentValue(); if (talentValue < mValueSet8.GetValue(info.SkillLevel, 1)) { state.IsInMutilTime = false; state.LogicToCD(); } else { state.SetCodeControlNext(); state.IsInMutilTime = true; this.mIsHasNextValidTime = CommonLang.CUtils.localTimeMS + state.Data.SingleActionCoolDownMS; //第二段需要的等级,在这个时候绑定一下 //System.Console.WriteLine("剑气等级:" + cache.GetTalentLv()); mLaunchTalentLv = cache.GetTalentLv(); } } return 0; } protected override void OnInitConfig() { XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID); InitData(data, out mValueSet1, XmdsSkillData.XmdsSkillDataKey.ValueSet); // 扩展配置 InitData(data, out mValueSet8, XmdsSkillData.XmdsSkillDataKey.ValueSet8); } } }