Monster_10490403.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using CommonAI.Zone;
  2. using XmdsCommonServer.XLS.Data;
  3. using XmdsCommon.Plugin;
  4. using XmdsCommonServer.Plugin;
  5. using XmdsCommonServer.Plugin.Units;
  6. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  7. using XmdsCommonSkill.Plugin.Buffs;
  8. using System.Collections.Generic;
  9. using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
  10. using CommonLang;
  11. namespace XmdsCommonSkill.Plugin.Skills.Monster
  12. {
  13. /// <summary>
  14. /// 卵之束缚:喷吐蛛液,被命中的敌人将被虫卵覆盖,被虫卵覆盖后无法移动和攻击,并每秒持续流失生命x%。
  15. /// 虫卵具有y点生命值,可被打破,打破后敌人将恢复自由.
  16. /// </summary>
  17. public class Monster_10490403 : XmdsSkillBase
  18. {
  19. /// <summary>
  20. /// 技能ID.
  21. /// </summary>
  22. public static int ID = 10490403;
  23. /// <summary>
  24. /// Buff效果.
  25. /// </summary>
  26. public static int Buff_ID = 104000;
  27. public static XmdsSkillValue Buff_Damage;
  28. public static XmdsSkillValue Buff_Bug_Life;
  29. /// <summary>
  30. /// 虫卵.
  31. /// </summary>
  32. public static int SummonUnit = 60402;
  33. /// <summary>
  34. /// 虫卵血量.
  35. /// </summary>
  36. public static int SummonUnit_HP;
  37. /// <summary>
  38. /// 获取技能ID.
  39. /// </summary>
  40. public override int SkillID
  41. {
  42. get
  43. {
  44. return ID;
  45. }
  46. }
  47. protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
  48. {
  49. XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID);
  50. BuffTemplate bt = pack.mBuffTemplate;
  51. bt.IsHarmful = true;
  52. pack.BindTemplateAndDispose();
  53. unit.RegistSendBuff(bt);
  54. }
  55. protected override void OnSkillLogicEvent(BattleParams param)
  56. {
  57. //此次攻击没有伤害.
  58. param.UseDamageType = CommonAI.Data.DamageType.None;
  59. //关联.
  60. var buff2 = param.Attacker.GetRegisBuffVirtual(Buff_ID, 0) as XmdsBuff_UnitLink;
  61. buff2.OnHandleBuffBeginEvent += ((hitter, attacker, state) =>
  62. {
  63. {
  64. UnitInfo info = XmdsBattleSkill.GetUnitInfo(SummonUnit);
  65. List<XmdsBuffVirtual> list = null;
  66. if (state.Tag != null)
  67. {
  68. list = state.Tag as List<XmdsBuffVirtual>;
  69. }
  70. XmdsBuff_UnitLink b = null;
  71. if (list != null && list.Count > 0)
  72. {
  73. for (int i = 0; i < list.Count; i++)
  74. {
  75. if (list[i] is XmdsBuff_UnitLink)
  76. {
  77. b = list[i] as XmdsBuff_UnitLink;
  78. AddUnitEvent aue = null;
  79. info.LifeTimeMS = 5000;
  80. var unit = (attacker.mUnit.Parent.AddUnit(
  81. info, info.Name,
  82. attacker.mUnit.Force, 1,
  83. hitter.mUnit.X,
  84. hitter.mUnit.Y,
  85. attacker.mUnit.Direction,
  86. out aue,
  87. attacker.mUnit)) as XmdsInstanceSummonUnit;
  88. if (unit != null)
  89. {
  90. //关联单位设置.
  91. b.LinkTarget = unit.Virtual as XmdsVirtual;
  92. //设置虫卵血量.
  93. SummonUnit_HP = this.GetTargetFormulaValue(param.GameSkill.SkillLevel, Buff_Bug_Life);
  94. unit.MaxHP = SummonUnit_HP;
  95. unit.CurrentHP = SummonUnit_HP;
  96. //召唤单位坐标与玩家绑定.
  97. unit.BindUnit = hitter.mUnit;
  98. unit.Master = null;
  99. }
  100. }
  101. }
  102. }
  103. }
  104. });
  105. //单位不受伤害.
  106. var buff3 = param.Attacker.GetRegisBuffVirtual(Buff_ID, 1) as XmdsBuff_Nothingness;
  107. //受buff影响.
  108. buff3.ChangeType = XmdsBuff_Nothingness.NothingnessType.NothingnessIgnoreSkill;
  109. //持续受到BUFF伤害.
  110. var buff4 = param.Attacker.GetRegisBuffVirtual(Buff_ID, 2) as XmdsBuff_Bleed;
  111. float pec = this.GetTargetFormulaValue(param.GameSkill.SkillLevel, Buff_Damage) / XmdsDamageCalculator.PERER;
  112. buff4.ChangeValue = CUtils.CastInt(param.Hitter.mUnit.MaxHP * pec);
  113. BuffTemplate bt = param.Attacker.GetRegistBuff(Buff_ID);
  114. bt.LifeTimeMS = 5000;
  115. bt.IsHarmful = true;
  116. (bt.Properties as XmdsBuffProperties).Dispelled = true;
  117. param.Hitter.mUnit.AddBuff(Buff_ID, param.Attacker.mUnit);
  118. }
  119. protected override void OnInitSkillParam()
  120. {
  121. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  122. InitData(data, out Buff_Damage, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
  123. InitData(data, out Buff_Bug_Life, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  124. }
  125. }
  126. }