Пример #1
0
        public void PlayerAcceptedReady(Player player)
        {
            player.state = Player.PlayerState.WaitingOthersReady;

            bool allReady = true;

            foreach (var p in players)
            {
                if (p.state == Player.PlayerState.AnsweringReady)
                {
                    allReady = false;
                }
            }

            if (allReady)
            {
                remainingLoadingTime = MAX_LOADING_DURATION;
                state = ArenaState.WaitingPlayersLoading;
                OM_LoadingStateStarted.SendMessage(this);
                foreach (var p in players)
                {
                    p.state = Player.PlayerState.Loading;
                }
            }
        }
        public GameHttpServer([NotNull] string prefix, [NotNull] ArenaState arenaState, [NotNull] SessionManager sessionManager, [NotNull] IDebuggerManager debuggerManager, [NotNull] ITournamentRunner tournamentRunner, [NotNull] string staticContentPath)
        {
            this.arenaState     = arenaState;
            this.sessionManager = sessionManager;
            var baseUri = new Uri(prefix.Replace("*", "localhost").Replace("+", "localhost"));

            DefaultUrl = new Uri(baseUri, string.Format("?godModeSecret={0}", arenaState.GodModeSecret)).AbsoluteUri;
            basePath   = baseUri.AbsolutePath;
            listener   = new HttpListener();
            listener.Prefixes.Add(prefix);
            handlers = new IHttpHandler[]
            {
                new RootHandler(),
                new IndexHandler(arenaState),
                new NavPanelHandler(arenaState),
                new DebuggerStartHandler(debuggerManager),
                new DebuggerStateHandler(debuggerManager),
                new DebuggerStepHandler(debuggerManager),
                new DebuggerStepToEndHandler(debuggerManager),
                new DebuggerRestartHandler(debuggerManager),
                new DebuggerResetHandler(debuggerManager),
                new DebuggerRemoveBreakpointHandler(debuggerManager),
                new DebuggerAddBreakpointHandler(debuggerManager),
                new DebuggerClearBreakpointsHandler(debuggerManager),
                new DebuggerLoadGameHandler(debuggerManager, arenaState),
                new StaticHandler(staticContentPath),
                new ArenaRankingHandler(arenaState),
                new ArenaSubmitHandler(arenaState, tournamentRunner),
                new ArenaPlayerHandler(arenaState),
                new ArenaRemovePlayerHandler(arenaState),
                new ArenaSubmitFormHandler(arenaState),
                new ArenaSetSubmitIsAllowedHandler(arenaState)
            };
            stopEvent = new ManualResetEvent(false);
        }
Пример #3
0
        private void Rest(RealmTime time, bool recover = false)
        {
            if (recover)
            {
                foreach (var plr in Players.Values)
                {
                    plr.ApplyConditionEffect(ConditionEffectIndex.Healing, 5000);
                    if (plr.HasConditionEffect(ConditionEffects.Hexed))
                    {
                        plr.ApplyConditionEffect(new ConditionEffect()
                        {
                            Effect     = ConditionEffectIndex.Speedy,
                            DurationMS = 0
                        });
                    }
                    plr.ApplyConditionEffect(Player.NegativeEffs);
                }

                BroadcastPacket(new ImminentArenaWave()
                {
                    CurrentRuntime = (int)_time,
                    Wave           = _wave
                }, null);
                return;
            }

            if (_time - _restTime < 5000)
            {
                return;
            }

            _arenaState = ArenaState.Spawn;
        }
Пример #4
0
        protected void StartBattle()
        {
            ChangePvpStatus();
            Team1Alive.Clear();
            Team2Alive.Clear();

            foreach (TPPlayer p in Team1)
            {
                p.TPlayer.HealEffect(400);
                p.Teleport(Setting.TeamStart1.X, Setting.TeamStart1.Y);
                p.SetTeam(1);
                //p.TPlayer.StatusPvP(122, p.Index);
                Team1Alive.Add(p);
            }

            foreach (TPPlayer p in Team2)
            {
                p.TPlayer.HealEffect(400);
                p.Teleport(Setting.TeamStart2.X, Setting.TeamStart2.Y);
                p.SetTeam(2);
                //p.TPlayer.StatusPvP(122, p.Index);
                Team2Alive.Add(p);
            }

            State = ArenaState.Battle;
        }
Пример #5
0
    // Update is called once per frame
    void Update()
    {
        if (state == ArenaState.WaitingForStart)
        {
            if (arenaStartTimer > 0)
            {
                arenaStartTimer -= Time.deltaTime;
            }

            RemoveKickedPlayers();

            if (joinedPlayers.Count < 2)
            {
                state = ArenaState.NotStarted;
                return;
            }

            notifications.ShowStartingSoon((int)arenaStartTimer);

            if (arenaStartTimer <= 0f)
            {
                if (JoinedPlayers.All(InsideArena))
                {
                    BeginArenaFight();
                }
            }
        }

        if (state == ArenaState.Started && AvailablePlayers.Count == 0)
        {
            End();
        }
    }
Пример #6
0
        private static void RunServer([NotNull] IEnumerable <string> args)
        {
            var staticContentPath    = GetStaticContentDir();
            var settings             = GetSettingsFile(args);
            var httpListenerPrefix   = settings.HttpListenerPrefix;
            var warriorProgramParser = new WarriorParser();
            var playersRepo          = new PlayersRepo(new DirectoryInfo("../players"), warriorProgramParser);
            var gamesRepo            = new CachingGamesRepo(new GamesRepo(new DirectoryInfo("../games")));
            var sessionManager       = new SessionManager("../sessions");
            var gameServer           = new GameServer();
            var debuggerManager      = new DebuggerManager(gameServer);
            var battleRunner         = new BattleRunner();
            var countdownProvider    = new CountdownProvider(settings.ContestStartTimestamp, TimeSpan.FromHours(settings.ContestDurationInHours));
            var arenaState           = new ArenaState(playersRepo, gamesRepo, countdownProvider, settings.GodModeSecret, settings.GodAccessOnly, settings.SubmitIsAllowed, settings.EnableDeepNavigation);
            var tournamentRunner     = new TournamentRunner(arenaState, battleRunner, settings.BattlesPerPair);
            var httpServer           = new GameHttpServer(httpListenerPrefix, arenaState, sessionManager, debuggerManager, tournamentRunner, staticContentPath);

            Runtime.SetStopHandler(() =>
            {
                log.InfoFormat("Stopping...");
                httpServer.Stop();
                tournamentRunner.Stop();
            });
            tournamentRunner.Start();
            httpServer.Run();
            log.InfoFormat("Listening on: {0}", httpListenerPrefix);
            if (!settings.ProductionMode)
            {
                Process.Start(httpServer.DefaultUrl);
            }
            httpServer.WaitForTermination();
            tournamentRunner.WaitForTermination();
            log.InfoFormat("Stopped");
        }
Пример #7
0
        public void PlayerDoneLoading(Player player)
        {
            if (player != null)
            {
                player.state = Player.PlayerState.WaitingOthersLoading;
            }

            bool allLoaded = true;

            foreach (var p in players)
            {
                if (p.state == Player.PlayerState.Loading)
                {
                    allLoaded = false;
                }
            }

            if (allLoaded && state == ArenaState.WaitingPlayersLoading)
            {
                state = ArenaState.StartCountdown;
                remainingCountdownTime = START_COUNTDOWN_DURATION;
                foreach (var p in players)
                {
                    p.state = Player.PlayerState.InGame;
                }

                OM_StartCountdown.SendMessage(this, START_COUNTDOWN_DURATION);
            }
        }
Пример #8
0
 private void WaitForPlayersToLeave(RealmTime time)
 {
     if (Players.Count == 0)
     {
         _arenaState = ArenaState.Ended;
         LockPortal();
     }
 }
Пример #9
0
 private void ResetState()
 {
     Debug.Log("Arena has been reset");
     joinedPlayers.Clear();
     deadPlayers.Clear();
     state = ArenaState.NotStarted;
     OpenGate();
 }
Пример #10
0
 public DeathArena(ProtoWorld proto, Client client = null)
     : base(proto)
 {
     Instance = this;
     WorldLoot.Add(new ItemLoot("Oryx's Arena Key", 0));
     _arenaState = ArenaState.NotStarted;
     _wave       = 1;
 }
Пример #11
0
 internal void Unload()
 {
     Deck   = null;
     Slot   = 0;
     Losses = 0;
     Wins   = 0;
     Season = 0;
     Rewards.Clear();
     State = ArenaState.Unknown;
 }
Пример #12
0
 private void CheckIsGameOver()
 {
     if (players.Count(p => p.IsAlive) <= 1) // herkes ölü
     {
         state = ArenaState.RoundOver;
         remainingRoundOverTime = (currentRound != totalRounds - 1 ? ROUND_OVER_DURATION : 2);
         roundStats.FinalizeStats(this);
         OM_RoundOver.SendMessage(this);
     }
 }
Пример #13
0
    private void ResetState()
    {
        gameManager.Events.End(this);

        Debug.Log("Arena has been reset");
        joinedPlayers.Clear();
        deadPlayers.Clear();
        state = ArenaState.NotStarted;
        OpenGate();
    }
Пример #14
0
 public TournamentRunner([NotNull] ArenaState arenaState, [NotNull] IBattleRunner battleRunner, int battlesPerPair)
 {
     this.arenaState     = arenaState;
     this.battleRunner   = battleRunner;
     this.battlesPerPair = battlesPerPair;
     thread = new Thread(TournamentCycle)
     {
         IsBackground = true,
         Name         = "tournament",
     };
 }
Пример #15
0
        public override void Tick(RealmTime time)
        {
            base.Tick(time);

            if (IsLimbo)
            {
                return;
            }
            if (Deleted)
            {
                LockPortal();
                return;
            }

            _time += time.ElapsedMsDelta;

            switch (CurrentState)
            {
            case ArenaState.NotStarted:
                CurrentState = ArenaState.CountDown;
                break;

            case ArenaState.CountDown:
                Countdown(time);
                break;

            case ArenaState.Start:
                Start(time);
                break;

            case ArenaState.Rest:
                Rest(time);
                break;

            case ArenaState.Spawn:
                Spawn(time);
                break;

            case ArenaState.Fight:
                Fight(time);
                break;

            case ArenaState.Awaiting:
                WaitForPlayersToLeave(time);
                break;

            case ArenaState.Ended:
                break;

            default:
                CurrentState = ArenaState.Start;
                break;
            }
        }
Пример #16
0
 // Use this for initialization
 void Awake()
 {
     if (instance == null)
     {
         instance = this;
     }
     else
     {
         Destroy(gameObject);
         return;
     }
 }
Пример #17
0
 void Update()
 {
     try
     {
         State = StateFunctions[State]();
     }
     catch (Exception e)
     {
         Debug.LogException(e);
         State = ArenaState.Done;
     }
 }
Пример #18
0
	public void PreloadArena(List<PhotonPlayer> admissionPlayers, int enemyID, int newOwnerID, int newViewID )
	
	{
		arenaState = ArenaState.waitingForPlayersToLoad;
		Debug.Log("preloading Arena data");
		admittedPlayers = admissionPlayers;
		rpgEnemy = Storage.LoadById<RPGEnemy>(enemyID, new RPGEnemy());
		ownerViewID = newViewID;
		ownerID = newOwnerID;
		SpawnEnemyWave(0);

		//instantiate enemy
	}
Пример #19
0
    public void BeginCountdown()
    {
        if (JoinedPlayers.Count < 2)
        {
            state = ArenaState.WaitingForPlayers;
            notifications.ShowActivateArena(2 - JoinedPlayers.Count);
            //Debug.Log("Arena is not ready yet, we need one more player to start the countdown!");
            return;
        }

        //Debug.Log("Arena countdown begins!");
        state           = ArenaState.WaitingForStart;
        arenaStartTimer = arenaStartTime;
        OpenGate();
    }
Пример #20
0
        private void Fight(RealmTime time)
        {
            if (!Enemies.Any(e => e.Value.ObjectDesc.Enemy))
            {
                _wave++;
                _restTime   = _time;
                _arenaState = ArenaState.Rest;

                if (_bossLevel + 1 < _changeBossLevel.Length &&
                    _changeBossLevel[_bossLevel + 1] <= _wave)
                {
                    _bossLevel++;
                }

                Rest(time, true);
            }
        }
Пример #21
0
        private void Fight(RealmTime time)
        {
            if (!Enemies.Any(e => e.Value.ObjectDesc.Enemy && !e.Value.Spawned && !e.Value.Name.Contains("Torii")))
            {
                _wave++;
                _restTime    = _time;
                CurrentState = ArenaState.Rest;

                if (_bossLevel + 1 < _changeBossLevel.Length &&
                    _changeBossLevel[_bossLevel + 1] <= _wave)
                {
                    _bossLevel++;
                }

                Rest(time, true);
            }
        }
Пример #22
0
        private void Countdown(RealmTime time)
        {
            if (_countDown == CountDownState.Notify15)
            {
                _countDown = CountDownState.StartGame;
                foreach (var plr in Players.Values)
                {
                    plr.SendInfo("Game starting in 15 seconds.");
                }
            }

            if (_countDown == CountDownState.StartGame && _time > 15000)
            {
                _countDown  = CountDownState.Done;
                _arenaState = ArenaState.Start;
                _time       = 0;
            }
        }
Пример #23
0
    private IEnumerator _StartArenaFight()
    {
        notifications.ShowStartArena();
        if (gameCamera)
        {
            gameCamera.EnableArenaCamera();
        }
        yield return(new WaitForSeconds(4));

        foreach (var player in joinedPlayers)
        {
            player.Arena.OnFightStart();
        }

        state = ArenaState.Started;
        CloseGate();
        Debug.Log("Arena fight begins!");
    }
Пример #24
0
    public void BeginCountdown()
    {
        if (state != ArenaState.NotStarted)
        {
            return;
        }

        if (this.JoinedPlayers.Count < 2)
        {
            notifications.ShowActivateArena(2 - this.JoinedPlayers.Count);
            Debug.Log("Arena is not ready yet, we need one more player to start the countdown!");
            return;
        }

        Debug.Log("Arena countdown begins!");
        state           = ArenaState.WaitingForStart;
        arenaStartTimer = arenaStartTime;
        OpenGate();
    }
Пример #25
0
        public bool EnterArena()
        {
            switch (currentState)
            {
            case ArenaState.SelLevel1:
                currentState = ArenaState.Level1;
                return(true);

            case ArenaState.SelLevel2:
                currentState = ArenaState.Level2;
                return(true);

            case ArenaState.SelLevel3:
                currentState = ArenaState.Level3;
                return(true);

            default:
                return(false);
            }
        }
Пример #26
0
        private void Fight(RealmTime time)
        {
            if (Players.Count(p => !p.Value.Client.Account.Admin) <= 1)
            {
                var plr = Players.Values.SingleOrDefault(p => !p.Client.Account.Admin);
                if (plr != null)
                {
                    Manager.Chat.Announce(
                        "Death eludes " + plr.Name +
                        ". Congratulations. (Wave: " + _wave +
                        ", Starting Players: " + _startingPlayers + ")");
                }

                foreach (var p in Manager.Worlds.Values.SelectMany(w => w.Players.Values).Where(p => p.Owner is Nexus))
                {
                    p.Client.SendPacket(new GlobalNotification
                    {
                        Type = GlobalNotification.DELETE_ARENA,
                        Text = "Oryx Arena"
                    });
                }

                _arenaState = ArenaState.Awaiting;
                return;
            }

            if (!Enemies.Any(e => e.Value.ObjectDesc.Enemy && !e.Value.Spawned))
            {
                _wave++;
                _restTime   = _time;
                _arenaState = ArenaState.Rest;

                if (_bossLevel + 1 < _changeBossLevel.Length &&
                    _changeBossLevel[_bossLevel + 1] <= _wave)
                {
                    _bossLevel++;
                }

                Rest(time, true);
            }
        }
Пример #27
0
        protected void PrepareBattle()
        {
            Utils.Broadcast("Arena: A battle is preparing!");

            foreach (TPPlayer p in Team1)
            {
                p.Teleport(Setting.TeamPrepare1.X, Setting.TeamPrepare1.Y);
                p.TPlayer.HealEffect(400);
            }

            foreach (TPPlayer p in Team2)
            {
                p.Teleport(Setting.TeamPrepare2.X, Setting.TeamPrepare2.Y);
                p.TPlayer.HealEffect(400);
            }

            State = ArenaState.Preparation;
            MessageParticipant(String.Format("Battle starting in {0} seconds", Setting.PreparationTime / 1000));
            timer.Reset();
            timer.Start();
        }
Пример #28
0
        public override bool IsMet(GameQuery_Command commandQuery)
        {
            // TODO: This is gonna show up in a lot of conditions, and looks pretty janky.
            Entity target = commandQuery.ArenaState.Player;

            // TODO: Smooth out this int? business!
            // It's an int? because some conditions (asking for WEAPON_RANGE on something which has no range, like a
            // MechSkeleton, but which does get turns) are nonsensical.
            int?optionDistance = this.ResolveOptionDistance(commandQuery, target);

            if (optionDistance == null)
            {
                return(true);
            }

            int currDist = ArenaState.DistanceBetweenEntities(target, commandQuery.CommandEntity);

            switch (this.Operator)
            {
            case ComparisonOperator.EQUAL:
                return(currDist == optionDistance);

            case ComparisonOperator.LESS_THAN:
                return(currDist < optionDistance);

            case ComparisonOperator.LESS_THAN_EQUAL:
                return(currDist <= optionDistance);

            case ComparisonOperator.GREATER_THAN:
                return(currDist > optionDistance);

            case ComparisonOperator.GREATER_THAN_EQUAL:
                return(currDist >= optionDistance);

            default:
                throw new InvalidOperationException("Condition_Distance can't handle " + this.Operator);
            }
        }
Пример #29
0
        public override void Tick(RealmTime time)
        {
            base.Tick(time);

            if (IsLimbo || Deleted || TotalConnects < 1)
            {
                return;
            }

            _time += time.ElaspedMsDelta;

            switch (_arenaState)
            {
            case ArenaState.CountDown:
                Countdown(time);
                break;

            case ArenaState.Start:
                Start(time);
                break;

            case ArenaState.Rest:
                Rest(time);
                break;

            case ArenaState.Spawn:
                Spawn(time);
                break;

            case ArenaState.Fight:
                Fight(time);
                break;

            default:
                _arenaState = ArenaState.Start;
                break;
            }
        }
Пример #30
0
        private void WaitForPlayersToLeave(RealmTime time)
        {
            if (Players.Count == 0)
            {
                CurrentState = ArenaState.Ended;
                LockPortal();
            }

            if (!Enemies.Any(e => e.Value.ObjectDesc.Enemy && !e.Value.Spawned))
            {
                _wave++;
                _restTime    = _time;
                CurrentState = ArenaState.Rest;

                if (_bossLevel + 1 < _changeBossLevel.Length &&
                    _changeBossLevel[_bossLevel + 1] <= _wave)
                {
                    _bossLevel++;
                }

                Rest(time, true);
            }
        }
Пример #31
0
 public DebuggerLoadGameHandler([NotNull] IDebuggerManager debuggerManager, [NotNull] ArenaState arenaState)
     : base("debugger/load", debuggerManager)
 {
     this.arenaState = arenaState;
 }
Пример #32
0
        protected void PrepareBattle()
        {
            Utils.Broadcast("Arena: A battle is preparing!");

            foreach (TPPlayer p in Team1)
            {
                p.Teleport(Setting.TeamPrepare1.X, Setting.TeamPrepare1.Y);
                p.TPlayer.HealEffect(400);
            }

            foreach (TPPlayer p in Team2)
            {
                p.Teleport(Setting.TeamPrepare2.X, Setting.TeamPrepare2.Y);
                p.TPlayer.HealEffect(400);
            }

            State = ArenaState.Preparation;
            MessageParticipant(String.Format("Battle starting in {0} seconds", Setting.PreparationTime / 1000));
            timer.Reset();
            timer.Start();
        }
Пример #33
0
        protected void StartBattle()
        {
            ChangePvpStatus();
            Team1Alive.Clear();
            Team2Alive.Clear();

            foreach (TPPlayer p in Team1)
            {
                p.TPlayer.HealEffect(400);
                p.Teleport(Setting.TeamStart1.X, Setting.TeamStart1.Y);
                p.SetTeam(1);
                //p.TPlayer.StatusPvP(122, p.Index);
                Team1Alive.Add(p);

            }

            foreach (TPPlayer p in Team2)
            {
                p.TPlayer.HealEffect(400);
                p.Teleport(Setting.TeamStart2.X, Setting.TeamStart2.Y);
                p.SetTeam(2);
                //p.TPlayer.StatusPvP(122, p.Index);
                Team2Alive.Add(p);
            }

            State = ArenaState.Battle;
        }
Пример #34
0
        public void GameHooks_Update()
        {
            if (State == ArenaState.Preparation)
            {
                if (timer.ElapsedMilliseconds < Setting.PreparationTime)
                {
                    long sec = timer.ElapsedMilliseconds / 1000;

                    if (sec % 5 == 0)
                    {
                        if (!SecMessageSended.Contains(sec))
                        {
                            MessageParticipant(String.Format("Battle starting in {0} seconds", (Setting.PreparationTime / 1000) - sec));
                            SecMessageSended.Add(sec);
                        }
                    }
                }
                else
                {
                    SecMessageSended.Clear();
                    //State = ArenaState.Battle;
                    timer.Stop();
                    timer.Reset();
                    BuffPlayers();
                    Utils.Broadcast("Arena: Battle is starting !");
                    StartBattle();

                    //teleport to the starting position
                }
            }
            else if (State == ArenaState.Battle)
            {
                foreach (TPPlayer p in Team1)
                {
                    if (p.TPlayer.dead || p.TPlayer.statLife == 0)
                    {
                        Team1Alive.Remove(p);
                        Utils.Broadcast(String.Format("Arena: {0} is dead !",p.Name));
                    }
                }

                foreach (TPPlayer p in Team2)
                {
                    if (p.TPlayer.dead || p.TPlayer.statLife == 0)
                    {
                        Team2Alive.Remove(p);
                        Utils.Broadcast(String.Format("Arena: {0} is dead !", p.Name));
                    }
                }

                if (Team1Alive.Count == 0)
                {
                    //Team 1 defeated
                    Utils.Broadcast("Arena: Team 1 was defeated !");
                    Team2Point++;
                }
                else if(Team2Alive.Count == 0)
                {
                    //Team 2 defeated
                    Utils.Broadcast("Arena: Team 2 was defeated !");
                    Team1Point++;
                }

                if (Team1Point < Setting.PointsToWin && Team2Point < Setting.PointsToWin &&
                    (Team1Alive.Count == 0 || Team2Alive.Count == 0)
                    )
                {
                    //another battle
                    PrepareBattle();
                }
                else if (Team1Point == Setting.PointsToWin)
                {
                    //team1 win
                    Utils.Broadcast(String.Format("Arena: Team 1 has win ! {0} to {1}", Team1Point, Team2Point));
                    ClearingBattle();
                    State = ArenaState.Idle;
                }
                else if (Team2Point == Setting.PointsToWin)
                {
                    //team2 win
                    Utils.Broadcast(String.Format("Arena: Team 2 has win ! {0} to {1}", Team2Point, Team1Point));
                    ClearingBattle();
                    State = ArenaState.Idle;
                }
            }
        }
Пример #35
0
	public void EnterArenaState(int stateID)
	{
		arenaState = (ArenaState)stateID;
	}
Пример #36
0
	public IEnumerator StartBattleSequence()
	{
		Debug.Log("ready");
		yield return new WaitForSeconds(1);
		GUIManager.Instance.rewardsGUI.StartCountdown();
		yield return new WaitForSeconds(4.5f);

		arenaState = ArenaState.battle;
		for (int i = 0; i < enemyFSMs.Count; i++) {
			enemyFSMs[i].StartBattle();
		}
	}
Пример #37
0
	public void NetworkCleanUp()
	{
		Debug.Log("clean up arena");
		for (int i = 0; i < enemyFSMs.Count; i++) 
		{
			Destroy(enemyFSMs[i].gameObject);
		}
		rpgEnemy = null;
		ownerID = 0;
		ownerViewID = 0;
		playerCharacterStatuses.Clear();
		photonPlayers.Clear();
		admittedPlayers.Clear();
		enemyFSMs.Clear();
		arenaState = ArenaState.inactive;
	}