Zone91002.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. AddEvents();
  32. }
  33. private void FightBuff_Tick(TimeTaskMS task)
  34. {
  35. if(mFightBuff != null && mFightBuff.IsEnd())
  36. {
  37. //转移战神buff
  38. AddFightBuffToRandom((p) =>{ return p != mFightBuff.Owner && !p.IsDead(); });
  39. }
  40. else if(mFightBuff == null && AllPlayersCount > 1)
  41. {
  42. AddFightBuffToRandom();
  43. }
  44. }
  45. private void StartFightBuff_Tick(TimeTaskMS task)
  46. {
  47. mFightBuffState = FightBuffStatus.Vaild;
  48. AddFightBuffToRandom();
  49. AddTimePeriodicMS(CheckIntervalMS, FightBuff_Tick);
  50. }
  51. private void AddEvents()
  52. {
  53. OnUnitDead += Zone91002_OnUnitDead;
  54. OnUnitAdded += Zone91002_OnUnitAdded;
  55. OnUnitRebirth += Zone91002_OnUnitRebirth;
  56. OnUnitRemoved += Zone91002_OnUnitRemoved;
  57. }
  58. private void Zone91002_OnUnitRemoved(InstanceZone zone, InstanceUnit obj)
  59. {
  60. }
  61. /// <summary>
  62. /// 给玩家上无敌buff,无敌是多么的寂寞
  63. /// 无敌buff:当玩家刚进入该场景或者死亡复活后,给予一个无敌的buff,
  64. /// 该buff除了无敌效果以外,在buff存在期间,拥有buff的玩家无法使用任何技能;
  65. /// </summary>
  66. /// <param name="player"></param>
  67. private void AddInvincibleBuffTo(InstancePlayer player)
  68. {
  69. BattleFunction.GetInstance().TriggrBattleFunction(XmdsBattleFunctionEvent_10010.EventID, player.Virtual, player.Virtual);
  70. }
  71. /// <summary>
  72. /// -- 战神buff:开战1分钟后,通过战斗事件随机指定一名玩家获得战神buff,该buff会给玩家增加攻击、生命、防御。
  73. /// 持续时间结束或者携带buff的玩家死亡后,该buff会随机转移给另一位玩家,并且持续时间重置;
  74. /// </summary>
  75. /// <param name="player"></param>
  76. private void AddFightBuffTo(InstancePlayer player)
  77. {
  78. BattleFunction.GetInstance().TriggrBattleFunction(XmdsBattleFunctionEvent_10002.EventID, player.Virtual, player.Virtual);
  79. }
  80. private void AddFightBuffToRandom(Predicate<InstancePlayer> select = null)
  81. {
  82. if(select == null)
  83. {
  84. select = new Predicate<InstancePlayer>(p => { return true; });
  85. }
  86. var player = selectRandomUnit(select);
  87. if(player != null)
  88. {
  89. AddFightBuffTo(player);
  90. }
  91. else
  92. {
  93. mFightBuff = null;
  94. }
  95. }
  96. private void Zone91002_OnUnitRebirth(InstanceZone zone, InstanceUnit obj)
  97. {
  98. if (obj.IsPlayer)
  99. {
  100. AddInvincibleBuffTo(obj as InstancePlayer);
  101. }
  102. }
  103. private void Zone91002_OnUnitAdded(InstanceZone zone, InstanceUnit obj)
  104. {
  105. if (obj.IsPlayer)
  106. {
  107. if (mFightBuffState == FightBuffStatus.InVaild)
  108. {
  109. mFightBuffState = FightBuffStatus.CountDown;
  110. AddTimeDelayMS(StartFightBuffDelayMS, StartFightBuff_Tick);
  111. }
  112. //else if(mFightBuffState == FightBuffStatus.Vaild && mFightBuff == null)
  113. //{
  114. // AddFightBuffToRandom();
  115. //}
  116. //监听战神buff
  117. obj.OnGotBuff += Obj_OnGotBuff;
  118. AddInvincibleBuffTo(obj as InstancePlayer);
  119. }
  120. }
  121. private void Obj_OnGotBuff(InstanceUnit obj, InstanceUnit.BuffState buff)
  122. {
  123. //if(buff.ID == XmdsBattleFunctionEvent_10002.Buff_ID)
  124. //{
  125. // mFightBuff = buff;
  126. //}
  127. }
  128. private void Zone91002_OnUnitDead(InstanceZone zone, InstanceUnit obj, InstanceUnit attacker)
  129. {
  130. }
  131. }
  132. }