123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- using CommonAI.Zone;
- using CommonAI.Zone.Helper;
- using CommonAI.Zone.Instance;
- using System;
- using XmdsCommon.Plugin;
- using XmdsCommonServer.Plugin;
- using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
- using XmdsCommonServer.XLS.Data;
- using XmdsCommonSkill.Plugin.Buffs;
- using XmdsCommonSkill.Plugin.PassiveSkills.Magic;
- using static CommonAI.Zone.Instance.InstanceUnit;
- using static XmdsCommonSkill.Plugin.Buffs.XmdsBuff_SwordShadow;
- namespace XmdsCommonSkill.Plugin.Skills.Magic
- {
- /// <summary>
- /// 法师普攻
- /// </summary>
- public class Magic_310000 : XmdsSkillBase
- {
- public static int ID = 310000;
- private static readonly byte MAX_MUTIL_STEP = 3;
- public override int SkillID { get { return ID; } }
- //编辑器写死
- private static readonly byte actionqueueIndex_ZhiBao = 8;
- public XmdsSkillValue dmgValue;
- public AbstractSkill mPassiveSkill; //剑影基础伤害提高
- //至宝被动
- public AbstractSkill mSkill_ZhiBao;
- //攻击间隔
- private int mAttackInterval;
- //当前动作形态
- private byte mCurActionStep = 0;
- //下一次可攻击时间
- private long mNextAttackTime = 0;
- protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
- {
- unit.RegistTryLaunchSkillEvent(OnTryLaunchSkillEventHandle, info);
- unit.RegistLaunchSkillOver(OnLaunchSkillOver, info);
- }
- protected override void OnInitOver(XmdsVirtual unit, GameSkill info)
- {
- //1. 剑影基础伤害加成
- this.mPassiveSkill = unit.SkillHelper.GetPlayerSkillByIdExt(Magic_310601.ID);
- this.mSkill_ZhiBao = unit.SkillHelper.GetPlayerSkillByIdExt(Other_100200_ZhiBao.ID);
- }
- //接口之前相互手动调用
- public override void DoSkillDispose(int skillID)
- {
- if(this.mSkill_ZhiBao != null && this.mSkill_ZhiBao.SkillID == skillID)
- {
- this.mSkill_ZhiBao = null;
- }
- }
- //剑影伤害计算
- protected override void OnSkillDamagePerEvent(BattleParams param)
- {
- //1. 至宝改变技能形态
- if (param.AtkProp.DamagePerID == Other_100200_ZhiBao.DAMAGE_INDEX)
- {
- param.SkillDamageAdd = mSkill_ZhiBao == null ? 0 : mSkill_ZhiBao.GetSkillValue(AbstractSkillType.Value1);
- param.SkillDamagePer = mSkill_ZhiBao == null ? 0 : mSkill_ZhiBao.GetSkillValue(AbstractSkillType.Value4);
- return;
- }
- ///////////////////////2. 自有技能逻辑
- param.SkillDamageAdd = dmgValue.GetValue(1);
- param.SkillDamagePer = dmgValue.GetValue(2);
- //有剑影buff
- InstanceUnit unit = param.Attacker.mUnit;
- if (param.AtkProp.DamagePerID > 0)
- {
- //剑影被动效果
- param.SkillDamagePer += mPassiveSkill.GetSkillValue(AbstractSkillType.Value4);
- //剑气层数效果 - 1层,伤害增加
- param.SkillDamagePer += mPassiveSkill.GetSkillValue(AbstractSkillType.Value1);
- //剑气层数效果 - 2层,穿透增加
- param.Source.ignoreDef = mPassiveSkill.GetSkillValue(AbstractSkillType.Value2);
- //剑气层数效果 - 3层,附带减速
- if(mPassiveSkill.GetSkillValue(AbstractSkillType.Value3) > 0)
- {
- param.Hitter.mUnit.AddBuff(Magic_310601.Buff_SPEED_DOWN, param.Attacker.mUnit);
- }
- }
- }
- private bool OnTryLaunchSkillEventHandle(GameSkill skillInfo, ref InstanceUnit.SkillState skill, XmdsVirtual launcher, ref InstanceUnit.LaunchSkillParam param)
- {
- if (this.mNextAttackTime > CommonLang.CUtils.localTimeMS)
- {
- return false;
- }
- if (mSkill_ZhiBao != null && mSkill_ZhiBao.GetSkillValue(AbstractSkillType.Value2) > 0)
- {
- skill.LockActionStep = actionqueueIndex_ZhiBao;
- return true;
- }
- InstanceUnit unit = launcher.mUnit;
- BuffState buff = unit.GetBuffByID(XmdsBuff_SwordShadow.BuffID);
- if (buff != null)
- {
- int step = 0;
- skill.LockActionStep = XmdsBuff_SwordShadow.GetShadowIndex(launcher, ref buff, ref step) + 2;
- }
- else
- {
- skill.LockActionStep = mCurActionStep;
- }
- return true;
- }
- private int OnLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual launcher, CommonAI.Zone.Instance.InstanceUnit.SkillState skill)
- {
- //攻速影响攻击间隔
- float finalInterval = (mAttackInterval/* + skill.Data.ActionQueue[mCurActionStep].TotalTimeMS*/) / (XmdsUnitProp.PER * launcher.MirrorProp.AttackSpeed);
- this.mNextAttackTime = (int)finalInterval + CommonLang.CUtils.localTimeMS;
- if (mSkill_ZhiBao != null && mSkill_ZhiBao.GetSkillValue(AbstractSkillType.Value2) > 0)
- {
- skill.LockActionStep = actionqueueIndex_ZhiBao;
- //技能使用强化效果, 偷懒用这个接口
- mSkill_ZhiBao.GetSkillValue(AbstractSkillType.Value3);
- return 0;
- }
- BuffState buff = launcher.mUnit.GetBuffByID(XmdsBuff_SwordShadow.BuffID);
- if (buff != null)
- {
- int step = 0;
- skill.LockActionStep = XmdsBuff_SwordShadow.GetShadowIndex(launcher, ref buff, ref step) + 2;
- XmdsBuff_SwordShadow.LanucherNormalSkill(launcher, ref buff);
- //使用了一层buff
- if (buff.OverlayLevel == 255)
- {
- launcher.mUnit.removeBuff(XmdsBuff_SwordShadow.BuffID);
- }
- else
- {
- //刷新buff状态
- launcher.mUnit.queueEvent(new SyncUnitBuffState(launcher.mUnit.ID, buff.ID, buff.OverlayLevel, buff.BuffExtData));
- }
- }
- else
- {
- skill.LockActionStep = mCurActionStep;
- if (++mCurActionStep >= MAX_MUTIL_STEP)
- {
- mCurActionStep = 0;
- }
- }
- return 0;
- }
- protected override void OnInitConfig()
- {
- XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
- InitData(data, out dmgValue, XmdsSkillData.XmdsSkillDataKey.DmgRate);
- XmdsSkillValue tempValue;
- InitData(data, out tempValue, XmdsSkillData.XmdsSkillDataKey.ValueSet);
- this.mAttackInterval = tempValue.GetValue();
- }
- }
- }
|