Pet_80320.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using CommonAI.Data;
  2. using CommonAI.Zone;
  3. using CommonAI.Zone.Formula;
  4. using CommonAI.Zone.Instance;
  5. using CommonLang;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using XmdsCommon.Plugin;
  12. using XmdsCommonServer.Plugin;
  13. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  14. using XmdsCommonServer.XLS.Data;
  15. using XmdsCommonSkill.Plugin.Skills;
  16. namespace XmdsCommonSkill.Plugin.PassiveSkills.Pet20200515
  17. {
  18. /// <summary>
  19. /// 宠物装备被动:死亡几率触发 -》 召唤友方小石怪
  20. /// </summary>
  21. ///
  22. class Pet_80320 : PetEquipSkillBase
  23. {
  24. /// 技能ID.
  25. private static int ID = 80320;
  26. public override int SkillID { get { return ID; } }
  27. //召唤物id, 数量
  28. private XmdsSkillValue mSummonInfo;
  29. //召唤物攻防血继承比例
  30. private XmdsSkillValue mSummonValue;
  31. //内部变量
  32. private int mSkillLv;
  33. protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner)
  34. {
  35. owner.mUnit.OnDead += OnPetDead;
  36. this.mSkillLv = skillInfo.SkillLevel;
  37. }
  38. protected override void OnDispose(XmdsVirtual owner)
  39. {
  40. owner.mUnit.OnDead -= OnPetDead;
  41. }
  42. protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit)
  43. {
  44. this.mSkillLv = gs.SkillLevel;
  45. }
  46. private void OnPetDead(InstanceUnit unit, InstanceUnit attacker)
  47. {
  48. XmdsVirtual_Pet virtualPet = (XmdsVirtual_Pet)unit.Virtual;
  49. if (virtualPet != null && base.IsTrigger(virtualPet, this.mSkillLv))
  50. {
  51. UnitInfo info = XmdsBattleSkill.GetUnitInfo(mSummonInfo.GetValue(this.mSkillLv, 1));
  52. if(info == null)
  53. {
  54. log.Error("Pet_80320 - OnPetDead找不到单位信息:" + mSummonInfo.GetValue(this.mSkillLv, 1));
  55. }
  56. //继承宠物属性: 攻防血
  57. XmdsUnitProperties unitProp = (info.Properties as XmdsUnitProperties);
  58. unitProp.ServerData.Prop.BaseAttack = CUtils.CastInt(virtualPet.MirrorProp.MaxAttack * XmdsUnitProp.PER * mSummonValue.GetValue(this.mSkillLv, 1));
  59. unitProp.ServerData.Prop.BaseDefence = CUtils.CastInt(virtualPet.MirrorProp.Defence * XmdsUnitProp.PER * mSummonValue.GetValue(this.mSkillLv, 2));
  60. unitProp.ServerData.Prop.HP = CUtils.CastInt(virtualPet.MirrorProp.MaxHP * XmdsUnitProp.PER * mSummonValue.GetValue(this.mSkillLv, 3));
  61. unitProp.ServerData.Prop.BaseMaxHP = unitProp.ServerData.Prop.HP;
  62. unitProp.LoadDataConfig = false;
  63. XmdsUnitProperties masterProp = virtualPet.GetMaster().mUnit.Properties as XmdsUnitProperties;
  64. if(masterProp != null)
  65. {
  66. unitProp.ServerData.UnitPKInfo = masterProp.ServerData.UnitPKInfo;
  67. }
  68. for (int i = 0; i < mSummonInfo.GetValue(this.mSkillLv, 2); i++)
  69. {
  70. AddUnitEvent aue = null;
  71. var summonUnit = unit.Parent.AddUnit(
  72. info, info.Name,
  73. unit.Force, virtualPet.GetUnitLv(),
  74. unit.X + GetRandomDis(unit), unit.Y + GetRandomDis(unit),
  75. unit.Direction,
  76. out aue);
  77. }
  78. }
  79. }
  80. private float GetRandomDis(InstanceUnit unit)
  81. {
  82. int addOrReduce = unit.RandomN.Next() % 2 == 0 ? 1 : -1;
  83. return 1.5f + 2.0f * addOrReduce * (unit.RandomN.Next() % 10) / 10.0f;
  84. }
  85. protected override void OnInitConfig(GameSkill skillInfo)
  86. {
  87. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(this.SkillID);
  88. XmdsSkillValue triggerInterval, triggerRate;
  89. InitData(data, out triggerInterval, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  90. InitData(data, out triggerRate, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
  91. InitData(data, out mSummonInfo, XmdsSkillData.XmdsSkillDataKey.ValueSet3);
  92. InitData(data, out mSummonValue, XmdsSkillData.XmdsSkillDataKey.ValueSet4);
  93. base.initEquipSkillBase(triggerInterval, triggerRate, skillInfo.SkillLevel);
  94. }
  95. }
  96. }