Monster_605051.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using CommonAI.Zone;
  2. using CommonLang;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using XmdsCommon.Plugin;
  8. using XmdsCommonServer.Plugin;
  9. using XmdsCommonServer.Plugin.Units;
  10. using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
  11. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  12. using XmdsCommonServer.XLS.Data;
  13. using XmdsCommonSkill.Plugin.Buffs;
  14. namespace XmdsCommonSkill.Plugin.Skills.Monster
  15. {
  16. /// <summary>
  17. /// 埋葬沙堆 持续施法 埋葬一名敌人,如果没有人解救,他会受到持续5%的最大生命值伤害,直到死亡 参考技能10490403制作,已实现,
  18. /// </summary>
  19. class Monster_605051 : XmdsSkillBase
  20. {
  21. public static int ID = 605051;
  22. /// Buff效果.
  23. public static int Buff_ID = 104000;
  24. public static XmdsSkillValue Buff_Damage;
  25. public static XmdsSkillValue Buff_Bug_Life;
  26. /// 虫卵.
  27. public static int SummonUnit = 60507;
  28. /// 虫卵血量.
  29. public static int SummonUnit_HP;
  30. public override int SkillID { get { return ID; } }
  31. protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
  32. {
  33. XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID);
  34. BuffTemplate bt = pack.mBuffTemplate;
  35. bt.IsHarmful = true;
  36. pack.BindTemplateAndDispose();
  37. unit.RegistSendBuff(bt);
  38. }
  39. protected override void OnSkillLogicEvent(BattleParams param)
  40. {
  41. //此次攻击没有伤害.
  42. param.UseDamageType = CommonAI.Data.DamageType.None;
  43. //关联.
  44. var buff2 = param.Attacker.GetRegisBuffVirtual(Buff_ID, 0) as XmdsBuff_UnitLink;
  45. buff2.OnHandleBuffBeginEvent += ((hitter, attacker, state) =>
  46. {
  47. {
  48. UnitInfo info = XmdsBattleSkill.GetUnitInfo(SummonUnit);
  49. List<XmdsBuffVirtual> list = null;
  50. if (state.Tag != null)
  51. {
  52. list = state.Tag as List<XmdsBuffVirtual>;
  53. }
  54. XmdsBuff_UnitLink b = null;
  55. if (list != null && list.Count > 0)
  56. {
  57. for (int i = 0; i < list.Count; i++)
  58. {
  59. if (list[i] is XmdsBuff_UnitLink)
  60. {
  61. b = list[i] as XmdsBuff_UnitLink;
  62. AddUnitEvent aue = null;
  63. info.LifeTimeMS = 5000;
  64. var unit = (attacker.mUnit.Parent.AddUnit(
  65. info, info.Name,
  66. attacker.mUnit.Force, 1,
  67. hitter.mUnit.X,
  68. hitter.mUnit.Y,
  69. attacker.mUnit.Direction,
  70. out aue,
  71. attacker.mUnit)) as XmdsInstanceSummonUnit;
  72. if (unit != null)
  73. {
  74. //关联单位设置.
  75. b.LinkTarget = unit.Virtual as XmdsVirtual;
  76. //设置虫卵血量.
  77. SummonUnit_HP = this.GetTargetFormulaValue(param.GameSkill.SkillLevel, Buff_Bug_Life);
  78. unit.MaxHP = SummonUnit_HP;
  79. unit.CurrentHP = SummonUnit_HP;
  80. //召唤单位坐标与玩家绑定.
  81. unit.BindUnit = hitter.mUnit;
  82. unit.Master = null;
  83. }
  84. }
  85. }
  86. }
  87. }
  88. });
  89. //单位不受伤害.
  90. var buff3 = param.Attacker.GetRegisBuffVirtual(Buff_ID, 1) as XmdsBuff_Nothingness;
  91. //受buff影响.
  92. buff3.ChangeType = XmdsBuff_Nothingness.NothingnessType.NothingnessIgnoreSkill;
  93. //持续受到BUFF伤害.
  94. var buff4 = param.Attacker.GetRegisBuffVirtual(Buff_ID, 2) as XmdsBuff_Bleed;
  95. float pec = this.GetTargetFormulaValue(param.GameSkill.SkillLevel, Buff_Damage) / XmdsDamageCalculator.PERER;
  96. buff4.ChangeValue = CUtils.CastInt(param.Hitter.mUnit.MaxHP * pec);
  97. BuffTemplate bt = param.Attacker.GetRegistBuff(Buff_ID);
  98. bt.LifeTimeMS = 5000;
  99. bt.IsHarmful = true;
  100. (bt.Properties as XmdsBuffProperties).Dispelled = true;
  101. param.Hitter.mUnit.AddBuff(Buff_ID, param.Attacker.mUnit);
  102. }
  103. protected override void OnInitSkillParam()
  104. {
  105. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  106. InitData(data, out Buff_Damage, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
  107. InitData(data, out Buff_Bug_Life, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  108. }
  109. }
  110. }