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) { } /// /// 给玩家上无敌buff,无敌是多么的寂寞 /// 无敌buff:当玩家刚进入该场景或者死亡复活后,给予一个无敌的buff, /// 该buff除了无敌效果以外,在buff存在期间,拥有buff的玩家无法使用任何技能; /// /// private void AddInvincibleBuffTo(InstancePlayer player) { BattleFunction.GetInstance().TriggrBattleFunction(XmdsBattleFunctionEvent_10010.EventID, player.Virtual, player.Virtual); } /// /// -- 战神buff:开战1分钟后,通过战斗事件随机指定一名玩家获得战神buff,该buff会给玩家增加攻击、生命、防御。 /// 持续时间结束或者携带buff的玩家死亡后,该buff会随机转移给另一位玩家,并且持续时间重置; /// /// private void AddFightBuffTo(InstancePlayer player) { BattleFunction.GetInstance().TriggrBattleFunction(XmdsBattleFunctionEvent_10002.EventID, player.Virtual, player.Virtual); } private void AddFightBuffToRandom(Predicate select = null) { if(select == null) { select = new Predicate(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) { } } }