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); }
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; }
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; }
// 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(); } }
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"); }
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); } }
private void WaitForPlayersToLeave(RealmTime time) { if (Players.Count == 0) { _arenaState = ArenaState.Ended; LockPortal(); } }
private void ResetState() { Debug.Log("Arena has been reset"); joinedPlayers.Clear(); deadPlayers.Clear(); state = ArenaState.NotStarted; OpenGate(); }
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; }
internal void Unload() { Deck = null; Slot = 0; Losses = 0; Wins = 0; Season = 0; Rewards.Clear(); State = ArenaState.Unknown; }
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); } }
private void ResetState() { gameManager.Events.End(this); Debug.Log("Arena has been reset"); joinedPlayers.Clear(); deadPlayers.Clear(); state = ArenaState.NotStarted; OpenGate(); }
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", }; }
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; } }
// Use this for initialization void Awake() { if (instance == null) { instance = this; } else { Destroy(gameObject); return; } }
void Update() { try { State = StateFunctions[State](); } catch (Exception e) { Debug.LogException(e); State = ArenaState.Done; } }
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 }
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(); }
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); } }
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); } }
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; } }
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!"); }
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(); }
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); } }
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); } }
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(); }
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); } }
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; } }
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); } }
public DebuggerLoadGameHandler([NotNull] IDebuggerManager debuggerManager, [NotNull] ArenaState arenaState) : base("debugger/load", debuggerManager) { this.arenaState = arenaState; }
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(); }
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; }
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; } } }
public void EnterArenaState(int stateID) { arenaState = (ArenaState)stateID; }
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(); } }
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; }