123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- using CommonAI.Data;
- using CommonAI.Zone;
- using CommonAI.Zone.Formula;
- using CommonAI.Zone.Helper;
- using CommonAI.Zone.Instance;
- 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 XmdsCommonSkill.Plugin.PassiveSkills.Remedy;
- using static CommonAI.Zone.Instance.InstanceUnit;
- namespace XmdsCommonSkill.Plugin.Skills.Warrior
- {
- /// <summary>
- /// 战士普攻:
- /// </summary>
- public class Warrior_110000 : XmdsSkillBase
- {
- private static readonly int ID = 110000;
- private static readonly byte MAX_MUTIL_STEP = 3;
- //编辑器写死
- private static readonly byte actionqueueIndex_ZhiBao = 3;
- /// 伤害倍数: 固定值,百分比
- protected XmdsSkillValue dmgValue;
- //攻击间隔
- private int mAttackInterval;
- //当前动作形态
- private byte mCurActionStep = 0;
- //下一次可攻击时间
- private long mNextAttackTime = 0;
- //至宝被动
- private AbstractSkill damagePer_ZhiBao;
- private bool mIsFirstHit;
- public override int SkillID {get{return ID;}}
- protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
- {
- unit.RegistTryLaunchSkillEvent(OnTryLaunchSkillEventHandle, info);
- unit.RegistLaunchSkillOver(OnLaunchSkillOver, info);
- //unit.RegistSkillBlockEvent(OnSkillBlockEvent, info);
- unit.RegistOnHitOther(OnHitOther, info);
- }
- protected override void OnInitOver(XmdsVirtual unit, GameSkill info)
- {
- 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 virtual float OnHitOther(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
- ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
- {
- if (mIsFirstHit)
- {
- mIsFirstHit = false;
- var cache = attacker.GetPlayerCache() as PlayerCache_Warrior;
- if (cache != null)
- {
- cache.NormalHitAddAnger();
- }
- }
- return damage;
- }
- private bool OnTryLaunchSkillEventHandle(GameSkill skillInfo, 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
- {
- skill.LockActionStep = mCurActionStep;
- }
-
- return true;
- }
- private int OnLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual launcher, CommonAI.Zone.Instance.InstanceUnit.SkillState skill)
- {
- //攻速影响攻击间隔
- mIsFirstHit = true;
- 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
- {
- 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;
- //}
- 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. 自有技能逻辑
- param.SkillDamageAdd = dmgValue.GetValue(1);
- param.SkillDamagePer = dmgValue.GetValue(2);
- }
- 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();
- }
- }
- }
|