123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- using CommonAI.Zone;
- using CommonAI.Zone.Helper;
- using CommonAI.Zone.Instance;
- using CommonLang;
- using XmdsCommon.Plugin;
- using XmdsCommonServer.Plugin;
- using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
- using XmdsCommonServer.XLS.Data;
- using XmdsCommonSkill.Plugin.Buffs;
- using XmdsCommonSkill.Plugin.Interface;
- using XmdsCommonSkill.Plugin.PassiveSkills.Magic;
- using XmdsCommonSkill.Plugin.PassiveSkills.Remedy;
- using static CommonAI.Zone.Instance.InstanceUnit;
- using static XmdsCommonSkill.Plugin.Interface.ComSpellTemplate;
- namespace XmdsCommonSkill.Plugin.Skills.Remedy
- {
- /// <summary>
- /// 治疗普攻:
- /// </summary>
- public class Remedy_510000 : RemedySkillBase
- {
- public static readonly int ID = 510000;
- private static readonly byte MAX_MUTIL_STEP = 3;
- // 伤害倍数:固定值_百分比
- protected XmdsSkillValue valueSet;
- //强化普攻伤害系数
- public AbstractSkill damagePer_3_4;
- public AbstractSkill damagePer_3_5;
- public AbstractSkill damagePer_5_5;
- //至宝被动
- public AbstractSkill damagePer_ZhiBao;
- //锁定index
- private static readonly int damgeAddAll = -1;
- private static readonly int damageIndex_Normal = 1; // 普通普攻
- private static readonly int damageIndex_3_4 = 2; // 飞花伤害
- private static readonly int damageIndex_3_5 = 3; // 弹射伤害
- //Action帧
- private static readonly int actionqueueIndex_3_4 = 3;
- private static readonly int actionqueueIndex_3_5 = 4;
- private static readonly int actionqueueIndex_ZhiBao = 5;
- //攻击间隔
- private int mAttackInterval;
- //当前动作形态
- private byte mCurActionStep = 0;
- //下一次可攻击时间
- private long mNextAttackTime = 0;
- public override int SkillID {get{return ID;}}
- protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
- {
- base.OnInit(info, unit, ref template);
- unit.RegistTryLaunchSkillEvent(OnTryLaunchSkillEventHandle, info);
- unit.RegistLaunchSkillOver(OnLaunchSkillOver, info);
- unit.RegistSkillBlockEvent(OnSkillBlockEvent, info);
- this.RegistEvent(EventType.UseFormluaType, OnUseFormluaTypeEvent);
- }
- protected override void OnInitOver(XmdsVirtual unit, GameSkill info)
- {
- //普攻伤害加成
- this.damagePer_3_4 = unit.SkillHelper.GetPlayerSkillById(Remedy_510340.ID);
- //3-5, 3-6的效果
- this.damagePer_3_5 = unit.SkillHelper.GetPlayerSkillById(Remedy_510350.ID);
- if (this.damagePer_3_5 == null)
- {
- this.damagePer_3_5 = unit.SkillHelper.GetPlayerSkillById(Remedy_510360.ID);
- }
- this.damagePer_5_5 = unit.SkillHelper.GetPlayerSkillById(Remedy_510550.ID);
- if (this.damagePer_5_5 == null)
- {
- this.damagePer_5_5 = unit.SkillHelper.GetPlayerSkillById(Remedy_510560.ID);
- }
- this.damagePer_ZhiBao = unit.SkillHelper.GetPlayerSkillByIdExt(Other_100200_ZhiBao.ID);
- }
- //接口之前相互手动调用
- public override void DoSkillDispose(int skillID)
- {
- if (this.damagePer_ZhiBao != null && this.damagePer_ZhiBao.SkillID == skillID)
- {
- this.damagePer_ZhiBao = null;
- }
- }
- protected override void OnSkillDamagePerEvent(BattleParams param)
- {
- //1. 至宝改变技能形态
- if(param.AtkProp.DamagePerID == Other_100200_ZhiBao.DAMAGE_INDEX)
- {
- param.SkillDamageAdd = damagePer_ZhiBao == null ? 0 : damagePer_ZhiBao.GetSkillValue(AbstractSkillType.Value1);
- param.SkillDamagePer = damagePer_ZhiBao == null ? 0 : damagePer_ZhiBao.GetSkillValue(AbstractSkillType.Value4);
- return;
- }
- ///////////////////////2. 自有技能逻辑
- //3-5弹射有加血,特殊处理
- if(param.UseDamageType == CommonAI.Data.DamageType.Heal && param.AtkProp.DamagePerID == damageIndex_3_5)
- {
- param.SkillDamagePer = this.GetSkillDamageAdd(param.Attacker, param.AtkProp.DamagePerID, AbstractSkillType.Value2);
- return;
- }
- param.SkillDamageAdd = valueSet.GetValue(1);
- param.SkillDamagePer = valueSet.GetValue(2);
- //5-5的全部基础伤害加成
- //MMO-16584 sub MMO-16572修改成治疗buff状态下才有这个效果
- if(param.Attacker.mUnit.GetBuffByID(Remedy_510500.Buff_ID) != null)
- {
- param.SkillDamagePer += this.GetSkillDamageAdd(param.Attacker, damgeAddAll);
- }
- //特殊普攻形态伤害加成
- if(param.AtkProp.DamagePerID != damgeAddAll)
- {
- param.SkillDamagePer += this.GetSkillDamageAdd(param.Attacker, param.AtkProp.DamagePerID);
- }
- }
- private bool OnTryLaunchSkillEventHandle(GameSkill info, ref InstanceUnit.SkillState skill, XmdsVirtual launcher, ref InstanceUnit.LaunchSkillParam param)
- {
- if (this.mNextAttackTime > CommonLang.CUtils.localTimeMS)
- {
- return false;
- }
- if(damagePer_ZhiBao != null && damagePer_ZhiBao.GetSkillValue(AbstractSkillType.Value2) > 0)
- {
- skill.LockActionStep = actionqueueIndex_ZhiBao;
- }
- else if (launcher.mUnit.GetBuffByID(Remedy_510350.Buff_ID_3_5) != null)
- {
- skill.LockActionStep = actionqueueIndex_3_5;
- }
- else if (launcher.mUnit.GetBuffByID(Remedy_510340.Buff_ID_3_4) != null)
- {
- skill.LockActionStep = actionqueueIndex_3_4;
- }
- 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 (damagePer_ZhiBao != null && damagePer_ZhiBao.GetSkillValue(AbstractSkillType.Value2) > 0)
- {
- skill.LockActionStep = actionqueueIndex_ZhiBao;
- //技能使用强化效果, 偷懒用这个接口
- damagePer_ZhiBao.GetSkillValue(AbstractSkillType.Value3);
- }
- else if (launcher.mUnit.GetBuffByID(Remedy_510340.Buff_ID_3_4) != null)
- {
- skill.LockActionStep = actionqueueIndex_3_4;
- launcher.mUnit.removeBuff(Remedy_510340.Buff_ID_3_4);
- }
- else if (launcher.mUnit.GetBuffByID(Remedy_510350.Buff_ID_3_5) != null)
- {
- skill.LockActionStep = actionqueueIndex_3_5;
- launcher.mUnit.removeBuff(Remedy_510350.Buff_ID_3_5);
- }
- else
- {
- skill.LockActionStep = mCurActionStep;
- if (++mCurActionStep >= MAX_MUTIL_STEP)
- {
- mCurActionStep = 0;
- }
- }
- return 0;
- }
- // 技能被打断监听
- private bool OnSkillBlockEvent(XmdsVirtual launcher, InstanceUnit.StateSkill skill, InstanceUnit.State newState)
- {
- //float finalInterval = mAttackInterval / (XmdsUnitProp.PER * launcher.MirrorProp.AttackSpeed);
- //this.mNextAttackTime = (int)finalInterval + CommonLang.CUtils.localTimeMS;
- return true;
- }
- private void OnUseFormluaTypeEvent(BattleParams param)
- {
- if (damageIndex_3_5 == param.AtkProp.DamagePerID)
- {
- param.UseDamageType = base.AutoGetDamageType(param);
- }
- else
- {
- param.UseDamageType = CommonAI.Data.DamageType.Damage;
- }
- }
- protected override void OnInitConfig()
- {
- XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
- base.InitBaseConfig(data);
- InitData(data, out valueSet, XmdsSkillData.XmdsSkillDataKey.DmgRate);
- XmdsSkillValue tempValue;
- InitData(data, out tempValue, XmdsSkillData.XmdsSkillDataKey.ValueSet);
- this.mAttackInterval = tempValue.GetValue();
- }
- private int GetSkillDamageAdd(XmdsVirtual unit, int type, AbstractSkillType skillType = AbstractSkillType.Value1)
- {
- if (type == damageIndex_Normal)
- {
- }
- else if (type == damageIndex_3_4)
- {
- return this.damagePer_3_4 == null ? 0 : this.damagePer_3_4.GetSkillValue(skillType);
- }
- else if (type == damageIndex_3_5)
- {
- return this.damagePer_3_5 == null ? 0 : this.damagePer_3_5.GetSkillValue(skillType);
- }
- else if (type == damgeAddAll)
- {
- return this.damagePer_5_5 == null ? 0 : this.damagePer_5_5.GetSkillValue(skillType);
- }
- return 0;
- }
- }
- }
|