Пример #1
0
        public override void OnTransition(KanturuBattleOfMayaState NextState)
        {
            _manager.SendAll(new SKanturuStateChange {
                State         = _manager._state,
                btDetailState = (byte)NextState
            });

            if (NextState == KanturuBattleOfMayaState.EndCycle1 ||
                NextState == KanturuBattleOfMayaState.EndCycle2 ||
                NextState == KanturuBattleOfMayaState.EndCycle3)
            {
                var str = ServerMessages.GetMessage(Messages.Kanturu_NextBattle);
                Program.MapAnoucement(Maps.Kantru1, str).Wait();
                Program.MapAnoucement(Maps.Kantru2, str).Wait();
                Program.MapAnoucement(Maps.Kantru3, str).Wait();
            }

            switch (NextState)
            {
            // Battle Stage 1
            case KanturuBattleOfMayaState.StandBy1:
                Trigger(KanturuBattleOfMayaState.Notify1, TimeSpan.FromSeconds(120));
                break;

            case KanturuBattleOfMayaState.Notify1:
                if (!_manager.CanRun())
                {
                    _manager.FailState = true;
                    Trigger(KanturuBattleOfMayaState.End);
                    return;
                }

                Trigger(KanturuBattleOfMayaState.Start1, TimeSpan.FromSeconds(15));
                break;

            case KanturuBattleOfMayaState.Start1:
                _manager.LoadScene(0);
                Trigger(KanturuBattleOfMayaState.End1, TimeSpan.FromSeconds(900));
                _manager.SendAll(new SKanturuBattleTime {
                    BattleTime = (int)TimeLeft.TotalMilliseconds
                });
                break;

            case KanturuBattleOfMayaState.Maya1:
            {
                _LeftHand  = false;
                _RightHand = false;
                _manager.LoadScene(3);
                MonsterIA.InitGroup(20, DieMonster);
                var h1 = MonstersMng.Instance.Monsters.FirstOrDefault(x => x.Info.Monster == 363 || x.Info.Monster == 362);
                _hand1           = new PatternManager(h1, Program.XMLConfiguration.Files.MayaLeftHandPatterns);
                _hand1.UseSkill += _hand_UseSkill;
            }
            break;

            case KanturuBattleOfMayaState.End1:
                _hand1.UseSkill -= _hand_UseSkill;
                _hand1           = null;
                MonsterIA.DelGroup(20);
                if (_manager.MonsterCount() > 1 || !_LeftHand)
                {
                    _manager.FailState = true;
                    Trigger(KanturuBattleOfMayaState.End);
                    return;
                }
                Trigger(KanturuBattleOfMayaState.EndCycle1, TimeSpan.FromSeconds(5));
                break;

            case KanturuBattleOfMayaState.EndCycle1:
            {
                Trigger(KanturuBattleOfMayaState.StandBy2, TimeSpan.FromSeconds(3));
            }
            break;

            // Battle Stage 2
            case KanturuBattleOfMayaState.StandBy2:
                Trigger(KanturuBattleOfMayaState.Start2, TimeSpan.FromSeconds(60));
                break;

            case KanturuBattleOfMayaState.Start2:
                _manager.LoadScene(0);
                Trigger(KanturuBattleOfMayaState.End2, TimeSpan.FromSeconds(900));
                _manager.SendAll(new SKanturuBattleTime {
                    BattleTime = (int)TimeLeft.TotalMilliseconds
                });
                break;

            case KanturuBattleOfMayaState.Maya2:
            {
                _LeftHand  = false;
                _RightHand = false;
                MonsterIA.InitGroup(21, DieMonster);
                _manager.LoadScene(4);
                var h1 = MonstersMng.Instance.Monsters.FirstOrDefault(x => x.Info.Monster == 363 || x.Info.Monster == 362);
                _hand2           = new PatternManager(h1, Program.XMLConfiguration.Files.MayaRightHandPatterns);
                _hand2.UseSkill += _hand_UseSkill;
            }
            break;

            case KanturuBattleOfMayaState.End2:
                _hand2.UseSkill -= _hand_UseSkill;
                _hand2           = null;
                MonsterIA.DelGroup(21);
                if (_manager.MonsterCount() > 1 || !_RightHand)
                {
                    _manager.FailState = true;
                    Trigger(KanturuBattleOfMayaState.End);
                    return;
                }
                Trigger(KanturuBattleOfMayaState.EndCycle2, TimeSpan.FromSeconds(5));
                break;

            case KanturuBattleOfMayaState.EndCycle2:
                Trigger(KanturuBattleOfMayaState.StandBy3, TimeSpan.FromSeconds(3));
                break;

            // Battle Stage 3
            case KanturuBattleOfMayaState.StandBy3:
                Trigger(KanturuBattleOfMayaState.Start3, TimeSpan.FromSeconds(60));
                break;

            case KanturuBattleOfMayaState.Start3:
                _manager.LoadScene(1);
                Trigger(KanturuBattleOfMayaState.End3, TimeSpan.FromSeconds(900));
                _manager.SendAll(new SKanturuBattleTime {
                    BattleTime = (int)TimeLeft.TotalMilliseconds
                });
                break;

            case KanturuBattleOfMayaState.Maya3:
            {
                _LeftHand  = false;
                _RightHand = false;
                MonsterIA.InitGroup(22, DieMonster);
                _manager.LoadScene(5);
                var h1 = MonstersMng.Instance.Monsters.FirstOrDefault(x => x.Info.Monster == 362);
                var h2 = MonstersMng.Instance.Monsters.FirstOrDefault(x => x.Info.Monster == 363);
                _hand1           = new PatternManager(h1, Program.XMLConfiguration.Files.MayaLeftHandPatterns);
                _hand2           = new PatternManager(h2, Program.XMLConfiguration.Files.MayaRightHandPatterns);
                _hand1.UseSkill += _hand_UseSkill;
                _hand2.UseSkill += _hand_UseSkill;
            }
            break;

            case KanturuBattleOfMayaState.End3:
                _hand1.UseSkill -= _hand_UseSkill;
                _hand2.UseSkill -= _hand_UseSkill;
                _hand1           = null;
                _hand2           = null;
                MonsterIA.DelGroup(22);
                if (_manager.MonsterCount() > 1 || !_LeftHand || !_RightHand)
                {
                    _manager.FailState = true;
                    Trigger(KanturuBattleOfMayaState.End);
                    return;
                }
                Trigger(KanturuBattleOfMayaState.EndCycle3, TimeSpan.FromSeconds(5));
                break;

            case KanturuBattleOfMayaState.EndCycle3:
                Trigger(KanturuBattleOfMayaState.End, TimeSpan.FromSeconds(3));
                break;

            case KanturuBattleOfMayaState.End:
                Trigger(KanturuBattleOfMayaState.EndCycle, TimeSpan.FromSeconds(3));
                if (_manager.FailState)
                {
                    _manager.SendAll(new SNotice(NoticeType.Gold, ServerMessages.GetMessage(Messages.Kanturu_Fail)));
                }
                break;

            case KanturuBattleOfMayaState.EndCycle:
                if (!_manager.FailState)
                {
                    _manager._battleOfNightmare.Initialize();
                }
                else
                {
                    _manager.Trigger(EventState.Open);
                }
                Trigger(KanturuBattleOfMayaState.None);
                break;
            }
        }
Пример #2
0
        public override void OnTransition(KanturuBattleOfNightmareState NextState)
        {
            _manager.SendAll(new SKanturuStateChange
            {
                State         = _manager._state,
                btDetailState = (byte)NextState
            });

            switch (NextState)
            {
            case KanturuBattleOfNightmareState.None:
                break;

            case KanturuBattleOfNightmareState.Idle:
                _manager.WarpAllTo(134);
                Trigger(KanturuBattleOfNightmareState.Notify, TimeSpan.FromSeconds(5));
                break;

            case KanturuBattleOfNightmareState.Notify:
                Trigger(KanturuBattleOfNightmareState.Start, TimeSpan.FromSeconds(10));
                _manager.SendAll(new SNotice(NoticeType.Gold, ServerMessages.GetMessage(Messages.Kanturu_NightmareNotify)));
                break;

            case KanturuBattleOfNightmareState.Start:
            {
                _manager.LoadScene(2);
                MonsterIA.InitGroup(23, DieMonster);
                var mob = MonstersMng.Instance.Monsters.FirstOrDefault(x => x.Info.Monster == 361);
                _nightmare           = new PatternManager(mob, Program.XMLConfiguration.Files.NightmarePatterns);
                _nightmare.UseSkill += _nightmare_UseSkill;
                _manager.FailState   = true;
                Trigger(KanturuBattleOfNightmareState.End, TimeSpan.FromSeconds(1200));
                _manager.SendAll(new SKanturuBattleTime {
                        BattleTime = (int)TimeLeft.TotalSeconds
                    });
            }
            break;

            case KanturuBattleOfNightmareState.End:
                _nightmare = null;
                MonsterIA.DelGroup(23);
                _logger.Information("Battle result:{0}", _manager.FailState?"Fail":"Win");
                _manager.SendAll(new SKanturuBattleResult {
                    Result = (byte)(_manager.FailState ? 0 : 1)
                });
                Trigger(KanturuBattleOfNightmareState.EndCycle, TimeSpan.FromSeconds(5));
                break;

            case KanturuBattleOfNightmareState.EndCycle:
                if (_manager.FailState)
                {
                    _manager.Clear();
                }
                else
                {
                    _manager._towerOfRefinement.Initialize();
                    _manager.Trigger(EventState.Closed);
                }
                Trigger(KanturuBattleOfNightmareState.None);
                break;
            }
        }
Пример #3
0
 internal void LoadMonsters(ushort Zone)
 {
     _activeMobs = MonsterIA.InitGroup(_baseGroup + Zone, OnMonsterDead);
     StandBy(Zone, false);
 }