Pet_80001.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 CommonAI.Data;
  15. using CommonLang;
  16. using XmdsCommonSkill.Plugin.PassiveSkills.Pet20200515;
  17. namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
  18. {
  19. /// <summary>
  20. /// NewPet - 攻2(最大血量每减少N%,提高当前攻击力N(固定值)+N%(当前攻击力),检测逻辑间隔N秒。)不能实时变化攻击力,暂时转化成实时加成最终伤害
  21. /// </summary>
  22. class Pet_80001 : PetPassiveBase
  23. {
  24. public static readonly int ID = 80001;
  25. private static XmdsSkillValue triggerInterval; // 触发间隔
  26. private static XmdsSkillValue hpReducePer; // HP减少XX触发
  27. private static XmdsSkillValue attackAddition; // 攻击力增加:固定值+百分比
  28. //内部数据
  29. private int mUUID_1 = 0;
  30. private float mDamageAddition = 0.0f; //伤害加成,攻击力转换过来的
  31. private long mNextTriggerTime = 0;
  32. public override int SkillID { get { return ID; } }
  33. protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner)
  34. {
  35. mUUID_1 = owner.RegistOnHitOther(OnHandleHitOther, skillInfo, true);
  36. }
  37. // 检测被动
  38. private void CheckPassive(XmdsVirtual owner, GameSkill skill)
  39. {
  40. //直接算生命加成最终伤害值
  41. if (this.mNextTriggerTime < CommonLang.CUtils.localTimeMS)
  42. {
  43. float hpLevel = (int)((owner.mUnit.MaxHP - owner.mUnit.CurrentHP) /
  44. (owner.mUnit.MaxHP * XmdsUnitProp.PER * hpReducePer.GetValue(skill.SkillLevel)));
  45. float attackLayerAdd = attackAddition.GetValue(skill.SkillLevel) + owner.MirrorProp.BaseAttack * XmdsUnitProp.PER * attackAddition.GetValueExt(skill.SkillLevel);
  46. this.mDamageAddition = hpLevel * attackLayerAdd / owner.MirrorProp.MaxAttack;
  47. this.mNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerInterval.GetValue();
  48. }
  49. }
  50. // 攻击其他人
  51. private float OnHandleHitOther(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
  52. ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
  53. {
  54. CheckPassive(attacker, skill);
  55. if (mDamageAddition > 0)
  56. {
  57. damage = damage * (1 + mDamageAddition);
  58. }
  59. return damage;
  60. }
  61. protected override void OnInitSkillParam()
  62. {
  63. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  64. //ValueSet, ValueSet2-客户端命格概率假数据
  65. InitData(data, out triggerInterval, XmdsSkillData.XmdsSkillDataKey.ValueSet3);
  66. InitData(data, out hpReducePer, XmdsSkillData.XmdsSkillDataKey.ValueSet4);
  67. InitData(data, out attackAddition, XmdsSkillData.XmdsSkillDataKey.ValueSet5);
  68. }
  69. protected override void OnDispose(XmdsVirtual owner)
  70. {
  71. owner.UnRegistOnHitOther(mUUID_1);
  72. }
  73. }
  74. }