Monster_10480202.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. 
  2. using XmdsCommonServer.XLS.Data;
  3. using XmdsCommonServer.Plugin;
  4. using XmdsCommonSkill.Plugin.Buffs;
  5. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  6. using CommonAI.Zone;
  7. using XmdsCommon.Plugin;
  8. using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
  9. namespace XmdsCommonSkill.Plugin.Skills.Monster
  10. {
  11. /// <summary>
  12. /// 毒血卫士 - 麻痹: 对敌人发起攻击,使敌人中毒,在10秒内总共造成x%魔攻伤害和额外y点魔法伤害,
  13. /// 中毒5秒后如果敌人身上仍然存在中毒效果,敌人将被麻痹3秒无法动弹.
  14. /// </summary>
  15. public class Monster_10480202 : XmdsSkillBase
  16. {
  17. public static int ID = 10480202;
  18. public static XmdsSkillValue DP_1;
  19. /// 毒.
  20. public static int Buff_ID = (int)XmdsBuffBase.XmdsBuffList.DU;
  21. public static XmdsSkillValue Buff_Rate;
  22. public static XmdsSkillValue BuffLifeTime;
  23. public static XmdsSkillValue BuffDamageHP;
  24. /// 麻痹.
  25. public static int Buff_ID2 = (int)XmdsBuffBase.XmdsBuffList.MA_BI;
  26. public static XmdsSkillValue BuffLifeTime2;
  27. public override int SkillID { get { return ID; } }
  28. protected override void OnSkillLogicEvent(BattleParams param)
  29. {
  30. // 加第1个debuff - 毒.
  31. if (param.AtkProp.DamagePerID == 1)
  32. {
  33. //随机概率添加BUFF.
  34. if (param.Attacker.RandomPercent(this.GetTargetFormulaValue(param.GameSkill.SkillLevel, Buff_Rate)))
  35. {
  36. // 流血
  37. UnitBuff ub = param.Attacker.GetRegisBuffVirtual(Buff_ID);
  38. XmdsBuff_Bleed buff = ub as XmdsBuff_Bleed;
  39. int bb = CalDamagePer(DP_1, param.GameSkill.SkillLevel);
  40. bb = XmdsDamageCalculator.GetDamage(bb, param.Attacker, param.Hitter, param.Source); // 参与魔抗计算
  41. buff.ChangeValue = bb / (GetTargetFormulaValue(param.GameSkill.SkillLevel, BuffLifeTime) / 1000);
  42. BuffTemplate bt = param.Attacker.GetRegistBuff(Buff_ID);
  43. bt.LifeTimeMS = GetTargetFormulaValue(param.GameSkill.SkillLevel, BuffLifeTime);
  44. param.Hitter.mUnit.AddBuff(Buff_ID, param.Attacker.mUnit);
  45. }
  46. }
  47. // 加第2个debuff - 麻痹.
  48. else if (param.AtkProp.DamagePerID == 2)
  49. {
  50. //判断是否存在"毒"debuff.
  51. {
  52. CommonAI.Zone.Instance.InstanceUnit.BuffState bs =
  53. param.Hitter.mUnit.GetBuffByID((int)XmdsBuffBase.XmdsBuffList.DU);
  54. if (bs != null)
  55. {
  56. BuffTemplate bt = param.Attacker.GetRegistBuff(Buff_ID2);
  57. bt.LifeTimeMS = GetTargetFormulaValue(param.GameSkill.SkillLevel, BuffLifeTime2);
  58. param.Hitter.mUnit.AddBuff(Buff_ID2, param.Attacker.mUnit);
  59. }
  60. }
  61. }
  62. }
  63. protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
  64. {
  65. // 毒.
  66. XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID);
  67. XmdsBuff_Bleed buff = (XmdsBuff_Bleed)pack.GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility.Bleed);
  68. BuffTemplate bt = pack.mBuffTemplate;
  69. pack.BindTemplateAndDispose();
  70. bt.IsHarmful = true;
  71. unit.RegistSendBuff(bt);
  72. // 麻痹.
  73. pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID2);
  74. XmdsBuff_Frozen buff2 = (XmdsBuff_Frozen)pack.GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility.FROZEN);
  75. bt = pack.mBuffTemplate;
  76. bt.IsHarmful = true;
  77. pack.BindTemplateAndDispose();
  78. unit.RegistSendBuff(bt);
  79. }
  80. protected override void OnInitSkillParam()
  81. {
  82. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  83. InitData(data, out DP_1, XmdsSkillData.XmdsSkillDataKey.DmgRate);
  84. InitData(data, out BuffLifeTime2, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  85. }
  86. }
  87. }