S2018.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using Common.Utility.CombatEvent;
  2. using Fort23.Core;
  3. using GameLogic.Combat.Buff;
  4. using GameLogic.Combat.CombatTool;
  5. using GameLogic.Player;
  6. namespace GameLogic.Combat.Skill
  7. {
  8. /// <summary>
  9. /// 厚土护体
  10. ///每使用一个土系功法时获得{0}点土系值,达到100时获得{1}%防御。持续{2}秒,每对敌人施加一次细尘额外获得{3}点
  11. /// </summary>
  12. public class S2018 : SkillBasic
  13. {
  14. private int addValue;
  15. private long addDef;
  16. private float _time;
  17. private bool _isUpdate;
  18. protected override void ProActiveSkill()
  19. {
  20. CombatEventManager.Instance.AddEventListener(CombatEventType.AddBuff, AddBuff);
  21. CombatEventManager.Instance.AddEventListener(CombatEventType.UseSkill, UseSkill);
  22. }
  23. protected override void ProUseSkill()
  24. {
  25. }
  26. protected override void ProDispose()
  27. {
  28. CombatEventManager.Instance.RemoveEventListener(CombatEventType.AddBuff, AddBuff);
  29. CombatEventManager.Instance.RemoveEventListener(CombatEventType.UseSkill, UseSkill);
  30. }
  31. private void AddTuXiZhiValue(int v)
  32. {
  33. addValue += v;
  34. if (addValue > 100)
  35. {
  36. _isUpdate = true;
  37. _time = 0;
  38. if (addDef == 0)
  39. {
  40. addDef = CombatCalculateTool.Instance.GetVlaueRatioForLong(
  41. CombatHeroEntity.MaxCombatHeroInfo.defense.Value, effectValue[1]);
  42. CombatHeroEntity.CurrCombatHeroInfo.defense += addDef;
  43. }
  44. }
  45. }
  46. protected override void ProCombatUpdate(float time)
  47. {
  48. if (!_isUpdate)
  49. {
  50. return;
  51. }
  52. _time += time;
  53. if (_time > effectValue[2])
  54. {
  55. _isUpdate = false;
  56. CombatHeroEntity.CurrCombatHeroInfo.defense -= addDef;
  57. }
  58. }
  59. private void AddBuff(IEventData iEventData)
  60. {
  61. BuffEventData buffEventData = iEventData as BuffEventData;
  62. if (buffEventData.source == CombatHeroEntity && buffEventData.BuffBasic is b_1013)
  63. {
  64. AddTuXiZhiValue((int)effectValue[3]);
  65. }
  66. }
  67. private void UseSkill(IEventData iEventData)
  68. {
  69. CombatUseSkillEventData combatUseSkillEventData = iEventData as CombatUseSkillEventData;
  70. if (combatUseSkillEventData.useSkill.CombatHeroEntity == CombatHeroEntity &&
  71. combatUseSkillEventData.useSkill.wuXingType.HasFlag(WuXingType.Earth))
  72. {
  73. AddTuXiZhiValue((int)effectValue[0]);
  74. }
  75. }
  76. }
  77. }