Zone91002.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. using CommonAI.data;
  2. using CommonAI.Data;
  3. using CommonAI.Zone;
  4. using CommonAI.Zone.Helper;
  5. using CommonAI.Zone.Instance;
  6. using CommonAI.Zone.ZoneEditor;
  7. using CommonLang;
  8. using System;
  9. using XmdsCommonServer.Plugin;
  10. using XmdsCommonServer.Plugin.Scene;
  11. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  12. using XmdsCommonSkill.Plugin.FunctionEvent;
  13. namespace XmdsCommonZone.Zones
  14. {
  15. [XmdsExtensionZone(91002)]
  16. public class Zone91002 : XmdsServerScene
  17. {
  18. private InstanceUnit.BuffState mFightBuff;
  19. public static int CheckIntervalMS = 5000;
  20. public static int StartFightBuffDelayMS = 60000;
  21. public enum FightBuffStatus
  22. {
  23. InVaild,
  24. CountDown,
  25. Vaild,
  26. }
  27. private FightBuffStatus mFightBuffState = FightBuffStatus.InVaild;
  28. public Zone91002(TemplateManager templates, InstanceZoneListener listener, SceneData data, GSCreateAreaData gsData, string bindGameSrvId)
  29. : base(templates, listener, data, gsData, bindGameSrvId)
  30. {
  31. OnUnitDead += Zone91002_OnUnitDead;
  32. OnUnitAdded += Zone91002_OnUnitAdded;
  33. OnUnitRebirth += Zone91002_OnUnitRebirth;
  34. OnUnitRemoved += Zone91002_OnUnitRemoved;
  35. }
  36. protected override void Disposing()
  37. {
  38. base.Disposing();
  39. OnUnitDead -= Zone91002_OnUnitDead;
  40. OnUnitAdded -= Zone91002_OnUnitAdded;
  41. OnUnitRebirth -= Zone91002_OnUnitRebirth;
  42. OnUnitRemoved -= Zone91002_OnUnitRemoved;
  43. }
  44. private void FightBuff_Tick(TimeTaskMS task)
  45. {
  46. if(mFightBuff != null && mFightBuff.IsEnd())
  47. {
  48. //转移战神buff
  49. AddFightBuffToRandom((p) =>{ return p != mFightBuff.Owner && !p.IsDead(); });
  50. }
  51. else if(mFightBuff == null && AllPlayersCount > 1)
  52. {
  53. AddFightBuffToRandom();
  54. }
  55. }
  56. private void StartFightBuff_Tick(TimeTaskMS task)
  57. {
  58. mFightBuffState = FightBuffStatus.Vaild;
  59. AddFightBuffToRandom();
  60. AddTimePeriodicMS(CheckIntervalMS, FightBuff_Tick);
  61. }
  62. private void Zone91002_OnUnitRemoved(InstanceZone zone, InstanceUnit obj)
  63. {
  64. }
  65. /// <summary>
  66. /// 给玩家上无敌buff,无敌是多么的寂寞
  67. /// 无敌buff:当玩家刚进入该场景或者死亡复活后,给予一个无敌的buff,
  68. /// 该buff除了无敌效果以外,在buff存在期间,拥有buff的玩家无法使用任何技能;
  69. /// </summary>
  70. /// <param name="player"></param>
  71. private void AddInvincibleBuffTo(InstancePlayer player)
  72. {
  73. BattleFunction.GetInstance().TriggrBattleFunction(XmdsBattleFunctionEvent_10010.EventID, player.Virtual, player.Virtual);
  74. }
  75. /// <summary>
  76. /// -- 战神buff:开战1分钟后,通过战斗事件随机指定一名玩家获得战神buff,该buff会给玩家增加攻击、生命、防御。
  77. /// 持续时间结束或者携带buff的玩家死亡后,该buff会随机转移给另一位玩家,并且持续时间重置;
  78. /// </summary>
  79. /// <param name="player"></param>
  80. private void AddFightBuffTo(InstancePlayer player)
  81. {
  82. BattleFunction.GetInstance().TriggrBattleFunction(XmdsBattleFunctionEvent_10002.EventID, player.Virtual, player.Virtual);
  83. }
  84. private void AddFightBuffToRandom(Predicate<InstancePlayer> select = null)
  85. {
  86. if(select == null)
  87. {
  88. select = new Predicate<InstancePlayer>(p => { return true; });
  89. }
  90. var player = selectRandomUnit(select);
  91. if(player != null)
  92. {
  93. AddFightBuffTo(player);
  94. }
  95. else
  96. {
  97. mFightBuff = null;
  98. }
  99. }
  100. private void Zone91002_OnUnitRebirth(InstanceZone zone, InstanceUnit obj)
  101. {
  102. if (obj.IsPlayer)
  103. {
  104. AddInvincibleBuffTo(obj as InstancePlayer);
  105. }
  106. }
  107. private void Zone91002_OnUnitAdded(InstanceZone zone, InstanceUnit obj)
  108. {
  109. if (obj.IsPlayer)
  110. {
  111. if (mFightBuffState == FightBuffStatus.InVaild)
  112. {
  113. mFightBuffState = FightBuffStatus.CountDown;
  114. AddTimeDelayMS(StartFightBuffDelayMS, StartFightBuff_Tick);
  115. }
  116. //else if(mFightBuffState == FightBuffStatus.Vaild && mFightBuff == null)
  117. //{
  118. // AddFightBuffToRandom();
  119. //}
  120. //监听战神buff
  121. obj.OnGotBuff += Obj_OnGotBuff;
  122. AddInvincibleBuffTo(obj as InstancePlayer);
  123. }
  124. }
  125. private void Obj_OnGotBuff(InstanceUnit obj, InstanceUnit.BuffState buff)
  126. {
  127. //if(buff.ID == XmdsBattleFunctionEvent_10002.Buff_ID)
  128. //{
  129. // mFightBuff = buff;
  130. //}
  131. }
  132. private void Zone91002_OnUnitDead(InstanceZone zone, InstanceUnit obj, InstanceUnit attacker)
  133. {
  134. }
  135. }
  136. }