XmdsBuff_ChangeSkillTotalTime.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using XmdsCommon.Plugin;
  6. using XmdsCommonServer.Plugin;
  7. using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
  8. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  9. namespace XmdsCommonSkill.Plugin.Buffs
  10. {
  11. /// <summary>
  12. /// FileName: XmdsBuff_ChangeSkillTotalTime.cs
  13. /// Author: Alex.Yu
  14. /// Corporation:...
  15. /// Description: 技能CD时间改变.
  16. /// DateTime: 2015/7/17 17:54:17
  17. /// </summary>
  18. public class XmdsBuff_ChangeSkillTotalTime : XmdsBuffBase
  19. {
  20. /// <summary>
  21. /// 指定影响技能,等于0时影响单位所拥有的技能.
  22. /// </summary>
  23. public int TargetSkill = 0;
  24. /// <summary>
  25. /// 变更时间:>0增加CD时间.小于减少CD时间.
  26. /// </summary>
  27. public int ChangeTime = 0;
  28. /// <summary>
  29. /// 是否为百分比.
  30. /// </summary>
  31. public bool IsPercent = false;
  32. public override int GetAbilityID()
  33. {
  34. return (int)XmdsCommon.Plugin.XmdsBuffProperties.XmdsBuffAbility.ChangeSkillTotalTime;
  35. }
  36. public override void CopyTo(UnitBuff other)
  37. {
  38. var ret = other as XmdsBuff_ChangeSkillTotalTime;
  39. ret.TargetSkill = this.TargetSkill;
  40. ret.ChangeTime = this.ChangeTime;
  41. ret.IsPercent = this.IsPercent;
  42. base.CopyTo(other);
  43. }
  44. protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, CommonAI.Zone.Instance.InstanceUnit.BuffState state)
  45. {
  46. if (TargetSkill != 0)
  47. {
  48. //指定技能.
  49. CommonAI.Zone.Instance.InstanceUnit.SkillState ss = hitter.mUnit.getSkillState(TargetSkill);
  50. if (ss != null)
  51. {
  52. XmdsCommonServer.Plugin.XmdsVirtual.FormatLog("BuffBegin 【{0}】技能【{1}】CD改变{2}", hitter.mProp.ServerData.BaseInfo.name, ss.Data.Name, ChangeTime);
  53. BeginEffect(hitter, ss, state.OverlayLevel + 1);
  54. }
  55. }
  56. else
  57. {
  58. //所有技能修改.
  59. //CommonAI.Zone.Instance.InstanceUnit.SkillState[] states = hitter.mUnit.SkillStatus;
  60. List<CommonAI.Zone.Instance.InstanceUnit.SkillState> states = (List<CommonAI.Zone.Instance.InstanceUnit.SkillState>)hitter.mUnit.SkillStatus;
  61. for (int i = 0 ; i < states.Count ; i++)
  62. {
  63. XmdsCommonServer.Plugin.XmdsVirtual.FormatLog("BuffBegin 【{0}】技能【{1}】CD改变{2}", hitter.mProp.ServerData.BaseInfo.name, states[i].Data.Name, ChangeTime);
  64. BeginEffect(hitter, states[i], state.OverlayLevel + 1);
  65. }
  66. }
  67. }
  68. protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, CommonAI.Zone.Instance.InstanceUnit.BuffState state, bool replace)
  69. {
  70. if (TargetSkill != 0)
  71. {
  72. //指定技能.
  73. CommonAI.Zone.Instance.InstanceUnit.SkillState ss = hitter.mUnit.getSkillState(TargetSkill);
  74. if (ss != null)
  75. {
  76. XmdsCommonServer.Plugin.XmdsVirtual.FormatLog("BuffEnd 【{0}】技能【{1}】CD改变{2}", hitter.mProp.ServerData.BaseInfo.name, ss.Data.Name, ChangeTime);
  77. EndEffect(hitter, ss, state.OverlayLevel + 1);
  78. }
  79. }
  80. else
  81. {
  82. //所有技能修改.
  83. //CommonAI.Zone.Instance.InstanceUnit.SkillState[] states = hitter.mUnit.SkillStatus;
  84. List<CommonAI.Zone.Instance.InstanceUnit.SkillState> states = (List<CommonAI.Zone.Instance.InstanceUnit.SkillState>)hitter.mUnit.SkillStatus;
  85. for (int i = 0 ; i < states.Count ; i++)
  86. {
  87. XmdsCommonServer.Plugin.XmdsVirtual.FormatLog("BuffEnd 【{0}】技能【{1}】CD改变{2}", hitter.mProp.ServerData.BaseInfo.name, states[i].Data.Name, ChangeTime);
  88. EndEffect(hitter, states[i], state.OverlayLevel + 1);
  89. }
  90. }
  91. }
  92. private void BeginEffect(XmdsVirtual unit, CommonAI.Zone.Instance.InstanceUnit.SkillState ss, int overlay)
  93. {
  94. int v = 0;
  95. if (IsPercent)
  96. {
  97. v = (int)(-1 * ChangeTime * XmdsUnitProp.PER * ss.Data.CoolDownMS);
  98. }
  99. else
  100. {
  101. v = -1 * ChangeTime;
  102. }
  103. int old_v = ss.GetDecreaseTotalTimeMS();
  104. int new_v = old_v + v;
  105. //只对未施放的技能有效.
  106. ss.SetDecreaseTotalTimeMS(new_v);
  107. unit.mUnit.DecreaseSkillCD(ss.Data.ID, v);
  108. }
  109. private void EndEffect(XmdsVirtual unit, CommonAI.Zone.Instance.InstanceUnit.SkillState ss, int overlay)
  110. {
  111. int v = 0;
  112. if (IsPercent)
  113. {
  114. v = (int)(-1 * ChangeTime * XmdsUnitProp.PER * ss.Data.CoolDownMS);
  115. }
  116. else
  117. {
  118. v = -1 * ChangeTime;
  119. }
  120. int old_v = ss.GetDecreaseTotalTimeMS();
  121. int new_v = old_v - v;
  122. //只对未施放的技能有效.
  123. ss.SetDecreaseTotalTimeMS(new_v);
  124. }
  125. }
  126. }