PetGive_910007.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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 System.Collections.Generic;
  15. using CommonAI.Data;
  16. using CommonLang;
  17. namespace XmdsCommonSkill.Plugin.PassiveSkills.PetGive
  18. {
  19. /// <summary>
  20. ///神通·不动如山 : 受到控制效果时触发,<$7>秒内防御力提高<$5>%,增益消失时对周围敌人造成<$6>%攻击力伤害,冷却时间<$9>秒
  21. /// </summary>
  22. class PetGive_910012 : XmdsPassiveSkillBase
  23. {
  24. /// 技能ID.
  25. public static readonly int ID = 910007;
  26. //效果触发CD
  27. private static int triggerCD = 0;
  28. //buff下次触发时间
  29. private long BuffNextTriggerTime = 0;
  30. private static readonly int Buff_ID_1 = (int)XmdsBuffBase.XmdsBuffList.PET_DEFENCE_6_1; //防6-防御buff
  31. private int mUUID_1 = 0;
  32. private int mUUID_2 = 0;
  33. //防御提升系数
  34. private static XmdsSkillValue valueSet;
  35. //buff结束,额外伤害
  36. private static XmdsSkillValue valueSet2;
  37. //持续时间
  38. private static XmdsSkillValue valueSet3;
  39. /// 获取技能ID.
  40. public override int SkillID {get{return ID;}}
  41. protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner)
  42. {
  43. var pack1 = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID_1);
  44. var buff1 = pack1.GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility.PropChange) as XmdsBuff_PropChange;
  45. buff1.CurentChangeType = XmdsVirtual.UnitAttributeType.Defence;
  46. buff1.IsPercent = true;
  47. buff1.CurrentValue = valueSet.GetValue(skillInfo.SkillLevel);
  48. var bt1 = pack1.mBuffTemplate;
  49. bt1.LifeTimeMS = valueSet3.GetValue(skillInfo.SkillLevel);
  50. bt1.IsHarmful = false;
  51. pack1.BindTemplateAndDispose();
  52. owner.RegistSendBuff(bt1);
  53. //收到攻击监听注册
  54. mUUID_1 = owner.RegistTryAddBuffEvent(OnTryAddBuffEvent, skillInfo);
  55. //攻击监听
  56. mUUID_2 = owner.RegistCalDamage(OnCallDamageProcess, skillInfo, false);
  57. this.BuffNextTriggerTime = CommonLang.CUtils.localTimeMS;
  58. }
  59. protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit)
  60. {
  61. var Buff = unit.GetRegisBuffVirtual(Buff_ID_1) as XmdsBuff_PropChange;
  62. Buff.CurrentValue = valueSet.GetValue(gs.SkillLevel);
  63. var bt = unit.GetRegistBuff(Buff_ID_1);
  64. bt.LifeTimeMS = valueSet3.GetValue(gs.SkillLevel);
  65. }
  66. private bool OnTryAddBuffEvent(ref BuffTemplate buff, XmdsVirtual attacker, XmdsVirtual hitter, GameSkill skill)
  67. {
  68. if (CommonLang.CUtils.localTimeMS > this.BuffNextTriggerTime)
  69. {
  70. if(XmdsInstanceUtils.IsControlBuff(buff))
  71. {
  72. hitter.mUnit.AddBuff(Buff_ID_1, hitter.mUnit);
  73. this.BuffNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerCD;
  74. }
  75. }
  76. return true;
  77. }
  78. public virtual bool OnCallDamageProcess(XmdsVirtual attacker, XmdsVirtual hitter, AttackSource source, GameSkill gs,
  79. ref XmdsCommonServer.Plugin.XmdsVirtual.AtkResult result, ref int damage)
  80. {
  81. int damageBase = CUtils.CastInt(attacker.MirrorProp.GetFinalAttack(hitter.mUnit.IsMonster) * XmdsUnitProp.PER * valueSet2.GetValue(gs.SkillLevel));
  82. damage = XmdsDamageCalculator.GetDamage(damageBase, attacker, hitter, source) ;
  83. return true;
  84. }
  85. protected override void OnInitSkillParam()
  86. {
  87. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  88. InitData(data, out valueSet, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  89. InitData(data, out valueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
  90. InitData(data, out valueSet3, XmdsSkillData.XmdsSkillDataKey.ValueSet3);
  91. XmdsSkillValue cdTime;
  92. InitData(data, out cdTime, XmdsSkillData.XmdsSkillDataKey.CDTime);
  93. triggerCD = cdTime.GetValue();
  94. }
  95. protected override void OnDispose(XmdsVirtual owner)
  96. {
  97. owner.UnRegistTryAddBuffEvent(mUUID_1);
  98. owner.UnRegistCalDamage(mUUID_2);
  99. }
  100. }
  101. }