Boss_91000.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using CommonAI.data;
  2. using CommonAI.Data;
  3. using CommonAI.Zone.Formula;
  4. using CommonLang;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using XmdsCommon.Plugin;
  11. using XmdsCommonServer.Plugin;
  12. using XmdsCommonServer.XLS.Data;
  13. using XmdsCommonSkill.Plugin.Buffs;
  14. using XmdsCommonSkill.Plugin.Skills;
  15. namespace XmdsCommonSkill.Plugin.PassiveSkills.Boss
  16. {
  17. /// <summary>
  18. /// boss - 被动狂暴,血量下降到x%时,增加属性
  19. /// </summary>
  20. class Boss_91000 : XmdsPassiveSkillBase
  21. {
  22. private int mUUID_1 = 0;
  23. public static readonly int ID = 91000;
  24. public override int SkillID { get { return ID; } }
  25. //绑定buffID
  26. private static int mBuffID = (int)XmdsBuffBase.XmdsBuffList.BOSS_CRAZE;
  27. private static XmdsSkillValue mValueSet1; // 血量阀值
  28. private static XmdsSkillValue mValueSet2; // 血量系数
  29. private static XmdsSkillValue mValueSet3; // 攻击系数
  30. private static XmdsSkillValue mValueSet4; // 防御系数
  31. private static XmdsSkillValue mValueSet5; // 暴击系数
  32. private static XmdsSkillValue mValueSet6; // 爆伤系数
  33. private static XmdsSkillValue mValueSet7; // 攻速系数
  34. private static XmdsSkillValue mValueSet8; // 移速系数
  35. //内部数据
  36. private long mTriggerHP = 0;
  37. private XmdsVirtual mOwner = null;
  38. private long mNextTriggerTime;
  39. private static int mBuffTime = 3600000;
  40. protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner)
  41. {
  42. mUUID_1 = owner.RegistOnHitDamage(OnHandleHitDmage, skillInfo, true);
  43. this.mOwner = owner;
  44. this.mTriggerHP = CUtils.CastInt(owner.mUnit.MaxHP * XmdsUnitProp.PER * mValueSet1.GetValue(skillInfo.SkillLevel));
  45. //buff初始化
  46. var pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(mBuffID);
  47. var buff1 = pack.GetXmdsBuff(0) as XmdsBuff_PropChange;
  48. buff1.CurentChangeType = XmdsVirtual.UnitAttributeType.MaxHP;
  49. buff1.IsPercent = true;
  50. buff1.CurrentValue = mValueSet2.GetValue(skillInfo.SkillLevel);
  51. var buff2 = pack.GetXmdsBuff(1) as XmdsBuff_PropChange;
  52. buff2.CurentChangeType = XmdsVirtual.UnitAttributeType.Attack;
  53. buff2.IsPercent = true;
  54. buff2.CurrentValue = mValueSet3.GetValue(skillInfo.SkillLevel);
  55. var buff3 = pack.GetXmdsBuff(2) as XmdsBuff_PropChange;
  56. buff3.CurentChangeType = XmdsVirtual.UnitAttributeType.Defence;
  57. buff3.IsPercent = true;
  58. buff3.CurrentValue = mValueSet4.GetValue(skillInfo.SkillLevel);
  59. var buff4 = pack.GetXmdsBuff(3) as XmdsBuff_PropChange;
  60. buff4.CurentChangeType = XmdsVirtual.UnitAttributeType.CritRate;
  61. buff4.IsPercent = true;
  62. buff4.CurrentValue = mValueSet5.GetValue(skillInfo.SkillLevel);
  63. var buff5 = pack.GetXmdsBuff(4) as XmdsBuff_PropChange;
  64. buff5.CurentChangeType = XmdsVirtual.UnitAttributeType.CritDamage;
  65. buff5.IsPercent = true;
  66. buff5.CurrentValue = mValueSet6.GetValue(skillInfo.SkillLevel);
  67. var buff6 = pack.GetXmdsBuff(5) as XmdsBuff_PropChange;
  68. buff6.CurentChangeType = XmdsVirtual.UnitAttributeType.AttackSpeed;
  69. buff6.IsPercent = true;
  70. buff6.CurrentValue = mValueSet7.GetValue(skillInfo.SkillLevel);
  71. var buff7 = pack.GetXmdsBuff(6) as XmdsBuff_PropChange;
  72. buff7.CurentChangeType = XmdsVirtual.UnitAttributeType.MoveSpeed;
  73. buff7.IsPercent = true;
  74. buff7.CurrentValue = mValueSet8.GetValue(skillInfo.SkillLevel);
  75. var bt = pack.mBuffTemplate;
  76. bt.IsHarmful = false;
  77. bt.LifeTimeMS = mBuffTime;
  78. pack.BindTemplateAndDispose();
  79. owner.RegistSendBuff(bt);
  80. }
  81. private float OnHandleHitDmage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
  82. ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
  83. {
  84. if (this.mNextTriggerTime < CommonLang.CUtils.localTimeMS)
  85. {
  86. int tempHp = this.mOwner.mUnit.CurrentHP - (int)damage;
  87. if(tempHp > 0 && tempHp <= this.mTriggerHP)
  88. {
  89. hitted.mUnit.AddBuff(mBuffID, hitted.mUnit);
  90. this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + mBuffTime;
  91. }
  92. }
  93. return damage;
  94. }
  95. protected override void OnUpdate(int intervalMS, bool slowRefresh)
  96. {
  97. if(this.mNextTriggerTime > CommonLang.CUtils.localTimeMS && this.mOwner.GetBattleStatus() == BattleStatus.None)
  98. {
  99. this.mNextTriggerTime = 0;
  100. this.mOwner.mUnit.removeBuff(mBuffID);
  101. }
  102. }
  103. protected override void OnInitSkillParam()
  104. {
  105. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  106. InitData(data, out mValueSet1, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  107. InitData(data, out mValueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
  108. InitData(data, out mValueSet3, XmdsSkillData.XmdsSkillDataKey.ValueSet3);
  109. InitData(data, out mValueSet4, XmdsSkillData.XmdsSkillDataKey.ValueSet4);
  110. InitData(data, out mValueSet5, XmdsSkillData.XmdsSkillDataKey.ValueSet5);
  111. InitData(data, out mValueSet6, XmdsSkillData.XmdsSkillDataKey.ValueSet6);
  112. InitData(data, out mValueSet7, XmdsSkillData.XmdsSkillDataKey.ValueSet7);
  113. InitData(data, out mValueSet8, XmdsSkillData.XmdsSkillDataKey.ValueSet8);
  114. }
  115. protected override void OnDispose(XmdsVirtual owner)
  116. {
  117. owner.UnRegistOnHitDamage(mUUID_1);
  118. }
  119. }
  120. }