Warrior_110000.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. using CommonAI.Data;
  2. using CommonAI.Zone;
  3. using CommonAI.Zone.Formula;
  4. using CommonAI.Zone.Helper;
  5. using CommonAI.Zone.Instance;
  6. using XmdsCommon.Plugin;
  7. using XmdsCommonServer.Plugin;
  8. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  9. using XmdsCommonServer.XLS.Data;
  10. using XmdsCommonSkill.Plugin.Buffs;
  11. using XmdsCommonSkill.Plugin.PassiveSkills.Magic;
  12. using XmdsCommonSkill.Plugin.PassiveSkills.Remedy;
  13. using static CommonAI.Zone.Instance.InstanceUnit;
  14. namespace XmdsCommonSkill.Plugin.Skills.Warrior
  15. {
  16. /// <summary>
  17. /// 战士普攻:
  18. /// </summary>
  19. public class Warrior_110000 : XmdsSkillBase
  20. {
  21. private static readonly int ID = 110000;
  22. private static readonly byte MAX_MUTIL_STEP = 3;
  23. //编辑器写死
  24. private static readonly byte actionqueueIndex_ZhiBao = 3;
  25. /// 伤害倍数: 固定值,百分比
  26. protected XmdsSkillValue dmgValue;
  27. //攻击间隔
  28. private int mAttackInterval;
  29. //当前动作形态
  30. private byte mCurActionStep = 0;
  31. //下一次可攻击时间
  32. private long mNextAttackTime = 0;
  33. //至宝被动
  34. private AbstractSkill damagePer_ZhiBao;
  35. private bool mIsFirstHit;
  36. public override int SkillID {get{return ID;}}
  37. protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
  38. {
  39. unit.RegistTryLaunchSkillEvent(OnTryLaunchSkillEventHandle, info);
  40. unit.RegistLaunchSkillOver(OnLaunchSkillOver, info);
  41. //unit.RegistSkillBlockEvent(OnSkillBlockEvent, info);
  42. unit.RegistOnHitOther(OnHitOther, info);
  43. }
  44. protected override void OnInitOver(XmdsVirtual unit, GameSkill info)
  45. {
  46. this.damagePer_ZhiBao = unit.SkillHelper.GetPlayerSkillByIdExt(Other_100200_ZhiBao.ID);
  47. }
  48. //接口之前相互手动调用
  49. public override void DoSkillDispose(int skillID)
  50. {
  51. if (this.damagePer_ZhiBao != null && this.damagePer_ZhiBao.SkillID == skillID)
  52. {
  53. this.damagePer_ZhiBao = null;
  54. }
  55. }
  56. protected virtual float OnHitOther(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
  57. ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
  58. {
  59. if (mIsFirstHit)
  60. {
  61. mIsFirstHit = false;
  62. var cache = attacker.GetPlayerCache() as PlayerCache_Warrior;
  63. if (cache != null)
  64. {
  65. cache.NormalHitAddAnger();
  66. }
  67. }
  68. return damage;
  69. }
  70. private bool OnTryLaunchSkillEventHandle(GameSkill skillInfo, ref InstanceUnit.SkillState skill, XmdsVirtual launcher, ref InstanceUnit.LaunchSkillParam param)
  71. {
  72. if (this.mNextAttackTime > CommonLang.CUtils.localTimeMS)
  73. {
  74. return false;
  75. }
  76. if (damagePer_ZhiBao != null && damagePer_ZhiBao.GetSkillValue(AbstractSkillType.Value2) > 0)
  77. {
  78. skill.LockActionStep = actionqueueIndex_ZhiBao;
  79. }
  80. else
  81. {
  82. skill.LockActionStep = mCurActionStep;
  83. }
  84. return true;
  85. }
  86. private int OnLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual launcher, CommonAI.Zone.Instance.InstanceUnit.SkillState skill)
  87. {
  88. //攻速影响攻击间隔
  89. mIsFirstHit = true;
  90. float finalInterval = (mAttackInterval/* + skill.Data.ActionQueue[mCurActionStep].TotalTimeMS*/) / (XmdsUnitProp.PER * launcher.MirrorProp.AttackSpeed);
  91. this.mNextAttackTime = (int)finalInterval + CommonLang.CUtils.localTimeMS;
  92. if (damagePer_ZhiBao != null && damagePer_ZhiBao.GetSkillValue(AbstractSkillType.Value2) > 0)
  93. {
  94. skill.LockActionStep = actionqueueIndex_ZhiBao;
  95. //技能使用强化效果, 偷懒用这个接口
  96. damagePer_ZhiBao.GetSkillValue(AbstractSkillType.Value3);
  97. }
  98. else
  99. {
  100. skill.LockActionStep = mCurActionStep;
  101. if (++mCurActionStep >= MAX_MUTIL_STEP)
  102. {
  103. mCurActionStep = 0;
  104. }
  105. }
  106. return 0;
  107. }
  108. // 技能被打断监听
  109. //private bool OnSkillBlockEvent(XmdsVirtual launcher, InstanceUnit.StateSkill skill, InstanceUnit.State newState)
  110. //{
  111. // //float finalInterval = mAttackInterval / (XmdsUnitProp.PER * launcher.MirrorProp.AttackSpeed);
  112. // //this.mNextAttackTime = (int)finalInterval + CommonLang.CUtils.localTimeMS;
  113. // return true;
  114. //}
  115. protected override void OnSkillDamagePerEvent(BattleParams param)
  116. {
  117. //1. 至宝改变技能形态
  118. if (param.AtkProp.DamagePerID == Other_100200_ZhiBao.DAMAGE_INDEX)
  119. {
  120. param.SkillDamageAdd = damagePer_ZhiBao == null ? 0 : damagePer_ZhiBao.GetSkillValue(AbstractSkillType.Value1);
  121. param.SkillDamagePer = damagePer_ZhiBao == null ? 0 : damagePer_ZhiBao.GetSkillValue(AbstractSkillType.Value4);
  122. return;
  123. }
  124. ///////////////////////2. 自有技能逻辑
  125. param.SkillDamageAdd = dmgValue.GetValue(1);
  126. param.SkillDamagePer = dmgValue.GetValue(2);
  127. }
  128. protected override void OnInitConfig()
  129. {
  130. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  131. InitData(data, out dmgValue, XmdsSkillData.XmdsSkillDataKey.DmgRate);
  132. XmdsSkillValue tempValue;
  133. InitData(data, out tempValue, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  134. this.mAttackInterval = tempValue.GetValue();
  135. }
  136. }
  137. }