Pet_80280.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using CommonAI.Zone;
  2. using CommonAI.Zone.Instance;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using XmdsCommon.Plugin;
  9. using XmdsCommonServer.Plugin;
  10. using XmdsCommonServer.XLS.Data;
  11. using XmdsCommonSkill.Plugin.Buffs;
  12. using XmdsCommonSkill.Plugin.Interface;
  13. using XmdsCommonSkill.Plugin.Skills;
  14. namespace XmdsCommonSkill.Plugin.PassiveSkills.Pet20200515
  15. {
  16. /// <summary>
  17. /// 宠物装备被动:死亡有几率触发 -》 给主人加狂暴buff
  18. /// </summary>
  19. ///
  20. class Pet_80280 : PetEquipSkillBase
  21. {
  22. /// 技能ID.
  23. private static int ID = 80280;
  24. public override int SkillID { get { return ID; } }
  25. private static readonly int Buff_ID = (int)XmdsBuffBase.XmdsBuffList.PET_EQUIPSKILL_RAGE_DEAD; //主人狂暴buff
  26. //狂暴效果:攻击力,攻速,时间
  27. protected XmdsSkillValue mRageValue;
  28. //宠物触发特效
  29. private LaunchSpell mBindSpell;
  30. private int mSkillLv;
  31. protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner)
  32. {
  33. XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID);
  34. //攻击
  35. XmdsBuff_PropChange buff = (XmdsBuff_PropChange)pack.GetXmdsBuff(0);
  36. buff.CurentChangeType = XmdsVirtual.UnitAttributeType.Attack;
  37. buff.CurrentValue = mRageValue.GetValue(skillInfo.SkillLevel, 1);
  38. buff.IsPercent = true;
  39. //攻速
  40. XmdsBuff_PropChange buff1 = (XmdsBuff_PropChange)pack.GetXmdsBuff(1);
  41. buff1.CurentChangeType = XmdsVirtual.UnitAttributeType.AttackSpeed;
  42. buff1.CurrentValue = mRageValue.GetValue(skillInfo.SkillLevel, 2);
  43. buff1.IsPercent = true;
  44. BuffTemplate bt = pack.mBuffTemplate;
  45. bt.IsHarmful = true;
  46. bt.LifeTimeMS = mRageValue.GetValue(skillInfo.SkillLevel, 3);
  47. pack.BindTemplateAndDispose();
  48. owner.RegistSendBuff(bt);
  49. owner.mUnit.OnDead += OnPetDead;
  50. this.mSkillLv = skillInfo.SkillLevel;
  51. }
  52. protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit)
  53. {
  54. var buff1 = unit.GetRegisBuffVirtual(Buff_ID, 0) as XmdsBuff_PropChange;
  55. buff1.CurrentValue = mRageValue.GetValue(gs.SkillLevel, 1);
  56. var buff2 = unit.GetRegisBuffVirtual(Buff_ID, 1) as XmdsBuff_PropChange;
  57. buff2.CurrentValue = mRageValue.GetValue(gs.SkillLevel, 2);
  58. var bt = unit.GetRegistBuff(Buff_ID);
  59. bt.LifeTimeMS = mRageValue.GetValue(gs.SkillLevel, 3);
  60. this.mSkillLv = gs.SkillLevel;
  61. }
  62. private void OnPetDead(InstanceUnit unit, InstanceUnit attacker)
  63. {
  64. if (base.IsTrigger((XmdsVirtual)unit.Virtual, this.mSkillLv))
  65. {
  66. //主人添加buff
  67. InstancePet pet = unit as InstancePet;
  68. if (pet != null && pet.Master != null)
  69. {
  70. pet.Master.AddBuff(Buff_ID, unit);
  71. }
  72. }
  73. }
  74. protected override void OnDispose(XmdsVirtual owner)
  75. {
  76. owner.mUnit.OnDead -= OnPetDead;
  77. }
  78. protected override void OnInitConfig(GameSkill skillInfo)
  79. {
  80. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(this.SkillID);
  81. XmdsSkillValue triggerInterval, triggerRate, bindEffectSpell;
  82. InitData(data, out triggerInterval, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  83. InitData(data, out triggerRate, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
  84. InitData(data, out bindEffectSpell, XmdsSkillData.XmdsSkillDataKey.ValueSet3);
  85. InitData(data, out mRageValue, XmdsSkillData.XmdsSkillDataKey.ValueSet4);
  86. base.initEquipSkillBase(triggerInterval, triggerRate, skillInfo.SkillLevel);
  87. mBindSpell = ComSpellTemplate.Instance().GetSpellBySpellID(bindEffectSpell.GetValue());
  88. if (mBindSpell == null)
  89. {
  90. log.Error("Pet_80280找不到绑定特效法术ID:" + bindEffectSpell.GetValue());
  91. }
  92. }
  93. }
  94. }