Priest_500030.cs 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using CommonAI.Zone;
  2. using XmdsCommon.Plugin;
  3. using XmdsCommonServer.Plugin;
  4. using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
  5. using XmdsCommonServer.XLS.Data;
  6. using XmdsCommonSkill.Plugin.Buffs;
  7. using System;
  8. using CommonLang;
  9. namespace XmdsCommonSkill.Plugin.Skills.Priest
  10. {
  11. /// <summary>
  12. /// 灵异狐火:召唤5条狐火,短暂的延迟后,狐火将自动跟踪并攻击敌人,每条狐火造成<x>倍魔攻和额外<y>点魔法伤害。当敌人被狐火连续命中时,魔抗将下降<z>%,这个效果持续a秒。
  13. /// </summary>
  14. public class Priest_500030 : XmdsSkillBase
  15. {
  16. public static int ID = 500030;
  17. public override int SkillID { get { return ID; } }
  18. /// 伤害倍数.
  19. public static XmdsSkillValue DP_1;
  20. public static int Buff_ID = (int)XmdsBuffBase.XmdsBuffList.MO_KANG_DOWN2;
  21. public static XmdsSkillValue BuffValue;
  22. protected override void OnRegistEvent()
  23. {
  24. this.RegistEvent(EventType.UseFormluaType, OnUseFormluaTypeEvent);
  25. this.RegistEvent(EventType.HitRateAdd, OnHitRateAddEvent);
  26. base.OnRegistEvent();
  27. }
  28. private void OnHitRateAddEvent(BattleParams param)
  29. {
  30. //命中率提升10000为必中.
  31. //param.HitAdd = (int)XmdsDamageCalculator.PERER;
  32. }
  33. private void OnUseFormluaTypeEvent(BattleParams param)
  34. {
  35. if (param.Attacker.IsAllies(param.Hitter, false))
  36. {
  37. param.UseDamageType = CommonAI.Data.DamageType.Heal;
  38. }
  39. else
  40. {
  41. param.UseDamageType = CommonAI.Data.DamageType.Damage;
  42. }
  43. }
  44. protected override void OnSkillDamagePerEvent(BattleParams param)
  45. {
  46. int ret = CalDamagePer(DP_1, param.GameSkill.SkillLevel);
  47. param.SkillDamagePer = ret;
  48. }
  49. protected override void OnSkillLogicEvent(BattleParams param)
  50. {
  51. //连续命中,防御降低
  52. if (!param.Attacker.IsAllies(param.Hitter, false))
  53. {
  54. var buff = param.Attacker.GetRegisBuffVirtual(Buff_ID) as XmdsBuff_PropChange;
  55. if (buff != null)
  56. {
  57. buff.CurentChangeType = XmdsVirtual.UnitAttributeType.Defence;
  58. var t = this.GetTargetFormulaValue(param.Attacker.SkillHelper.GetGameSkill(SkillID).SkillLevel, BuffValue);
  59. buff.CurrentValue = -CUtils.CastInt(param.Hitter.mProp.ServerData.Prop.BaseDefence * t * 0.0001f);
  60. //Console.WriteLine(" # OnSkillLogicEvent # " + param.Hitter.MirrorProp.Resist + " , " + buff.CurrentValue); ;
  61. }
  62. var bt = param.Attacker.GetRegistBuff(Buff_ID);
  63. bt.LifeTimeMS = 5000;
  64. param.Hitter.mUnit.AddBuff(Buff_ID, param.Attacker.mUnit);
  65. }
  66. }
  67. protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
  68. {
  69. var pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID);
  70. var buff = pack.GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility.PropChange) as XmdsBuff_PropChange;
  71. var bt = pack.mBuffTemplate;
  72. bt.IsHarmful = true;
  73. pack.BindTemplateAndDispose();
  74. unit.RegistSendBuff(bt);
  75. }
  76. protected override void OnInitSkillParam()
  77. {
  78. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  79. InitData(data, out DP_1, XmdsSkillData.XmdsSkillDataKey.DmgRate);
  80. InitData(data, out BuffValue, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  81. }
  82. }
  83. }