123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- using CommonAI.data;
- using CommonAI.Data;
- using CommonAI.Zone;
- using CommonAI.Zone.Helper;
- using CommonAI.Zone.Instance;
- using CommonAI.Zone.ZoneEditor;
- using CommonLang;
- using System;
- using XmdsCommonServer.Plugin;
- using XmdsCommonServer.Plugin.Scene;
- using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
- using XmdsCommonSkill.Plugin.FunctionEvent;
- namespace XmdsCommonZone.Zones
- {
- [XmdsExtensionZone(91002)]
- public class Zone91002 : XmdsServerScene
- {
- private InstanceUnit.BuffState mFightBuff;
- public static int CheckIntervalMS = 5000;
- public static int StartFightBuffDelayMS = 60000;
- public enum FightBuffStatus
- {
- InVaild,
- CountDown,
- Vaild,
- }
- private FightBuffStatus mFightBuffState = FightBuffStatus.InVaild;
- public Zone91002(TemplateManager templates, InstanceZoneListener listener, SceneData data, GSCreateAreaData gsData, string bindGameSrvId)
- : base(templates, listener, data, gsData, bindGameSrvId)
- {
- OnUnitDead += Zone91002_OnUnitDead;
- OnUnitAdded += Zone91002_OnUnitAdded;
- OnUnitRebirth += Zone91002_OnUnitRebirth;
- OnUnitRemoved += Zone91002_OnUnitRemoved;
- }
- protected override void Disposing()
- {
- base.Disposing();
- OnUnitDead -= Zone91002_OnUnitDead;
- OnUnitAdded -= Zone91002_OnUnitAdded;
- OnUnitRebirth -= Zone91002_OnUnitRebirth;
- OnUnitRemoved -= Zone91002_OnUnitRemoved;
- }
- private void FightBuff_Tick(TimeTaskMS task)
- {
- if(mFightBuff != null && mFightBuff.IsEnd())
- {
- //转移战神buff
- AddFightBuffToRandom((p) =>{ return p != mFightBuff.Owner && !p.IsDead(); });
- }
- else if(mFightBuff == null && AllPlayersCount > 1)
- {
- AddFightBuffToRandom();
- }
- }
- private void StartFightBuff_Tick(TimeTaskMS task)
- {
- mFightBuffState = FightBuffStatus.Vaild;
- AddFightBuffToRandom();
- AddTimePeriodicMS(CheckIntervalMS, FightBuff_Tick);
- }
- private void Zone91002_OnUnitRemoved(InstanceZone zone, InstanceUnit obj)
- {
- }
- /// <summary>
- /// 给玩家上无敌buff,无敌是多么的寂寞
- /// 无敌buff:当玩家刚进入该场景或者死亡复活后,给予一个无敌的buff,
- /// 该buff除了无敌效果以外,在buff存在期间,拥有buff的玩家无法使用任何技能;
- /// </summary>
- /// <param name="player"></param>
- private void AddInvincibleBuffTo(InstancePlayer player)
- {
- BattleFunction.GetInstance().TriggrBattleFunction(XmdsBattleFunctionEvent_10010.EventID, player.Virtual, player.Virtual);
- }
- /// <summary>
- /// -- 战神buff:开战1分钟后,通过战斗事件随机指定一名玩家获得战神buff,该buff会给玩家增加攻击、生命、防御。
- /// 持续时间结束或者携带buff的玩家死亡后,该buff会随机转移给另一位玩家,并且持续时间重置;
- /// </summary>
- /// <param name="player"></param>
- private void AddFightBuffTo(InstancePlayer player)
- {
- BattleFunction.GetInstance().TriggrBattleFunction(XmdsBattleFunctionEvent_10002.EventID, player.Virtual, player.Virtual);
- }
- private void AddFightBuffToRandom(Predicate<InstancePlayer> select = null)
- {
- if(select == null)
- {
- select = new Predicate<InstancePlayer>(p => { return true; });
- }
- var player = selectRandomUnit(select);
- if(player != null)
- {
- AddFightBuffTo(player);
- }
- else
- {
- mFightBuff = null;
- }
- }
- private void Zone91002_OnUnitRebirth(InstanceZone zone, InstanceUnit obj)
- {
- if (obj.IsPlayer)
- {
- AddInvincibleBuffTo(obj as InstancePlayer);
- }
- }
- private void Zone91002_OnUnitAdded(InstanceZone zone, InstanceUnit obj)
- {
- if (obj.IsPlayer)
- {
- if (mFightBuffState == FightBuffStatus.InVaild)
- {
- mFightBuffState = FightBuffStatus.CountDown;
- AddTimeDelayMS(StartFightBuffDelayMS, StartFightBuff_Tick);
- }
- //else if(mFightBuffState == FightBuffStatus.Vaild && mFightBuff == null)
- //{
- // AddFightBuffToRandom();
- //}
- //监听战神buff
- obj.OnGotBuff += Obj_OnGotBuff;
- AddInvincibleBuffTo(obj as InstancePlayer);
- }
- }
- private void Obj_OnGotBuff(InstanceUnit obj, InstanceUnit.BuffState buff)
- {
- //if(buff.ID == XmdsBattleFunctionEvent_10002.Buff_ID)
- //{
- // mFightBuff = buff;
- //}
- }
- private void Zone91002_OnUnitDead(InstanceZone zone, InstanceUnit obj, InstanceUnit attacker)
- {
-
- }
- }
- }
|