Magic_310600.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using CommonAI.Zone.Helper;
  2. using CommonAI.Zone.Instance;
  3. using XmdsCommonServer.Plugin;
  4. using XmdsCommonServer.XLS.Data;
  5. using XmdsCommonSkill.Plugin.Buffs;
  6. using System;
  7. using static CommonAI.Zone.Instance.InstanceUnit;
  8. using XmdsCommon.Plugin;
  9. using CommonAI.Zone;
  10. using XmdsCommonServer.Plugin.Units;
  11. using CommonAI.Zone.Formula;
  12. using XmdsCommonSkill.Plugin.Skills;
  13. using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
  14. using XmdsCommonSkill.Plugin.Skills.Magic;
  15. using CommonAI.Data;
  16. using CommonLang;
  17. namespace XmdsCommonSkill.Plugin.PassiveSkills.Magic
  18. {
  19. /// <summary>
  20. /// 法师被动
  21. /// 剑气缠绕:剑影释放打中,会积攒n%剑气能量,当剑气能量满了的时候,突破期间消耗能量的技能不会使能量降低,增加能量的也不会延续时间。成功了,升一层,能量槽清空。如果没能成功,则能量槽内的能量会掉落回n3%。
  22. /// 每层剑气会维持n4秒,最多叠加到三层,维持期间没突破就会掉一层。 每层剑气提供额外攻击力n% 脱战开始按一定速率(n%/s)掉剑气能量
  23. /// </summary>
  24. public class Magic_310600 : XmdsPassiveSkillBase
  25. {
  26. /// 技能ID.
  27. public static int ID = 310600;
  28. public override int SkillID { get { return ID; } }
  29. //每层剑气上限,每层保持时间
  30. protected static XmdsSkillValue valueSet;
  31. // 每隔X毫秒降低Y
  32. protected static XmdsSkillValue valueSet2;
  33. // 脱离战斗XX毫秒开始降低剑气
  34. protected static XmdsSkillValue valueSet3;
  35. //剑气层额外增伤:
  36. protected static XmdsSkillValue valueSet4;
  37. //每次获得剑影,增加剑气值
  38. protected static XmdsSkillValue valueSet5;
  39. private int mUUID_1 = 0;
  40. private XmdsVirtual mOwner;
  41. protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner)
  42. {
  43. this.mOwner = owner;
  44. //无等级概念,为适应客户端偷懒这么写的
  45. IntIntIntData refreshRule = new IntIntIntData(valueSet3.GetValue(), valueSet2.GetValue(1, 1), valueSet2.GetValue(1, 2));
  46. IntIntData[] talnetData = new IntIntData[4];
  47. for(int i = 0; i < 4; i++)
  48. {
  49. talnetData[i] = new IntIntData(valueSet.GetValue(i+1, 1), valueSet.GetValue(i+1, 2));
  50. }
  51. var playerCache = XmdsPlayerCache.PlayerTalnetInit(XmdsUnitPro.Magic, owner.mUnit, 0, refreshRule, talnetData) as PlayerCache_Magic;
  52. playerCache.SetSwordAddTalentValue(valueSet5.GetValue(skillInfo.GetPassiveLevel()));
  53. this.mOwner.SetPlayerCache(playerCache);
  54. //单位攻击监听
  55. mUUID_1 = owner.RegistOnHitOther(OnHandleOnHit, skillInfo, true);
  56. }
  57. protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit)
  58. {
  59. var playerCache = unit.GetPlayerCache() as PlayerCache_Magic;
  60. if(playerCache != null)
  61. {
  62. playerCache.SetSwordAddTalentValue(valueSet5.GetValue(gs.GetPassiveLevel()));
  63. }
  64. }
  65. protected override void OnUpdate(int intervalMS, bool slowRefresh)
  66. {
  67. base.OnUpdate(intervalMS, slowRefresh);
  68. if (slowRefresh)
  69. {
  70. this.mOwner.Talent_Refresh();
  71. }
  72. }
  73. //单位攻击
  74. private float OnHandleOnHit(float damage, XmdsVirtual hitter, XmdsVirtual attacker, AttackSource source,
  75. ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
  76. {
  77. //如果释放的是该强化技能,伤害增加
  78. byte talentLv = this.mOwner.GetPlayerCache().GetTalentLv();
  79. if (talentLv > 0)
  80. {
  81. damage += (damage * XmdsUnitProp.PER * valueSet4.GetValue(skill.GetPassiveLevel(), talentLv));
  82. }
  83. return damage;
  84. }
  85. protected override void OnDispose(XmdsVirtual owner)
  86. {
  87. owner.UnRegistOnHitOther(mUUID_1);
  88. XmdsPlayerCache.PlayerTalnetDestory(owner.mUnit);
  89. }
  90. protected override void OnInitSkillParam()
  91. {
  92. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  93. InitData(data, out valueSet, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  94. InitData(data, out valueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
  95. InitData(data, out valueSet3, XmdsSkillData.XmdsSkillDataKey.ValueSet3);
  96. InitData(data, out valueSet4, XmdsSkillData.XmdsSkillDataKey.ValueSet4);
  97. InitData(data, out valueSet5, XmdsSkillData.XmdsSkillDataKey.ValueSet5);
  98. }
  99. }
  100. }