Ejemplo n.º 1
0
        public void StopGame(bool userTriggered = false)
        {
            _gameStarted = false;
            _room.GetGameManager().UnlockGates();
            _room.GetGameManager().StopGame();

            ResetGame();

            if (ExitTeleports.Count > 0)
            {
                foreach (Item ExitTile in ExitTeleports.Values.ToList())
                {
                    if (ExitTile.ExtraData == "1" || String.IsNullOrEmpty(ExitTile.ExtraData))
                    {
                        ExitTile.ExtraData = "0";
                    }

                    ExitTile.UpdateState();
                }
            }

            Team Winners = _room.GetGameManager().GetWinningTeam();

            foreach (RoomUser User in _room.GetRoomUserManager().GetUserList().ToList())
            {
                User.FreezeLives = 0;
                if (User.Team == Winners)
                {
                    User.UnIdle();
                    User.DanceId = 0;
                    _room.SendPacket(new ActionComposer(User.VirtualId, 1));
                }

                if (ExitTeleports.Count > 0)
                {
                    Item tile = _freezeTiles.Values.Where(x => x.GetX == User.X && x.GetY == User.Y).FirstOrDefault();
                    if (tile != null)
                    {
                        Item ExitTle = GetRandomExitTile();

                        if (ExitTle != null)
                        {
                            _room.GetGameMap().UpdateUserMovement(User.Coordinate, ExitTle.Coordinate, User);
                            User.SetPos(ExitTle.GetX, ExitTle.GetY, ExitTle.GetZ);
                            User.UpdateNeeded = true;

                            if (User.IsAsleep)
                            {
                                User.UnIdle();
                            }
                        }
                    }
                }
            }

            if (!userTriggered)
            {
                _room.GetWired().TriggerEvent(WiredBoxType.TriggerGameEnds, null);
            }
        }
Ejemplo n.º 2
0
    /// <summary>
    /// Update each GameObject in the GameObjectGrid
    /// </summary>
    /// <param name="gameTime">The object used for reacting to timechanges</param>
    public override void Update(GameTime gameTime)
    {
        foreach (GameObject obj in gameObjects)
        {
            if (obj is GameObjectGrid)
            {
                GameObjectGrid gameObjectGrid = obj as GameObjectGrid;
                foreach (GameObject gameObject in gameObjectGrid.Objects)
                {
                    if (gameObject != null)
                    {
                        gameObject.Update(gameTime);
                        if (gameObject is ExitTile)
                        {
                            ExitTile exitTile = gameObject as ExitTile;
                            if (exitTile.isOnTile)
                            {
                                isOnExit = true;
                            }
                        }
                    }
                }
            }
            else
            {
                obj.Update(gameTime);
            }
        }

        exitText.Position    = new Vector2((GameEnvironment.Screen.X - 300) / 2, 0);
        noteText.Position    = new Vector2((GameEnvironment.Screen.X - 300) / 2, 30);
        roomCounter.Position = new Vector2(GameEnvironment.Screen.X - 60, 10);
    }
Ejemplo n.º 3
0
        /// <summary>
        /// Method for initializing the maps with a setup of a normal ludo map.
        /// </summary>
        ///
        private void initializeMaps()
        {
            //Instantiate map array.
            Maps = new Map[5];

            //Initialize maps
            sharedMap = (Maps[(int)MapSection.SHARED] = new Map(size: (int)MapSectionSize.SHARED, isLoopMap: true));
            redMap    = (Maps[(int)MapSection.RED] = new Map(size: (int)MapSectionSize.RED, isLoopMap: false));
            blueMap   = (Maps[(int)MapSection.BLUE] = new Map(size: (int)MapSectionSize.BLUE, isLoopMap: false));
            yellowMap = (Maps[(int)MapSection.YELLOW] = new Map(size: (int)MapSectionSize.YELLOW, isLoopMap: false));
            greenMap  = (Maps[(int)MapSection.GREEN] = new Map(size: (int)MapSectionSize.GREEN, isLoopMap: false));

            sharedMap.Name = "SharedMap";
            redMap.Name    = "RedMap";
            blueMap.Name   = "BlueMap";
            yellowMap.Name = "YellowMap";
            greenMap.Name  = "GreenMap";

            // Defines Team specific maps
            Map[] submaps = { redMap, greenMap, yellowMap, blueMap };

            // creates Team Special tiles on the shared map
            for (int i = 0; i < submaps.Length; i++)
            {
                int idx = i * ((int)(MapSectionSize.SHARED) / 4);

                Tile newTile = new ExitTile(sharedMap, idx, submaps[i].FirstTile, (PlayerTeam)(i));
                sharedMap.SetTile(idx, newTile); //Create exit tiles.

                newTile = new SpawnTile(sharedMap, idx + 2, (PlayerTeam)(i));
                sharedMap.SetTile(idx + 2, newTile); //Create spawn tiles.

                newTile             = new EndTile(submaps[i], submaps[i].Tiles.Length - 1, (PlayerTeam)(i));
                submaps[i].LastTile = newTile; //Create end tiles.
            }

            // Set tile actors
            foreach (Map map in Maps)
            {
                foreach (Tile tile in map.Tiles)
                {
                    tile.Actor = new ConsoleTileActor(Game.GetConsoleActorMatrix(), tile);
                }
            }
        }
Ejemplo n.º 4
0
        public void StartGame()
        {
            GameIsStarted = true;
            CountTeamPoints();
            ResetGame();
            if (ExitTeleports.Count > 0)
            {
                foreach (var ExitTile in ExitTeleports.Values.ToList())
                {
                    if (ExitTile.ExtraData == "0" || string.IsNullOrEmpty(ExitTile.ExtraData))
                    {
                        ExitTile.ExtraData = "1";
                    }
                    ExitTile.UpdateState();
                }
            }

            _room.GetGameManager().LockGates();
        }
Ejemplo n.º 5
0
        private void SetupExit()
        {
            int x = _gameSettings.ExitPoint.X ?? 0;
            int y = _gameSettings.ExitPoint.Y ?? 0;

            if (!IsInsideBoard(x, y))
            {
                throw new IndexOutOfBoardException(nameof(GameSettings.ExitPoint), x, y);
            }

            if (!IsEmptySpace(x, y))
            {
                throw new IndexOcupiedException(nameof(GameSettings.ExitPoint), x, y);
            }

            if (_tiles != null)
            {
                _tiles[x, y] = new ExitTile();
            }
        }
Ejemplo n.º 6
0
        public void StartGame()
        {
            this._gameStarted = true;
            timestarted       = QuasarEnvironment.GetUnixTimestamp();
            CountTeamPoints();
            ResetGame();

            if (this.ExitTeleports.Count > 0)
            {
                foreach (Item ExitTile in ExitTeleports.Values.ToList())
                {
                    if (ExitTile.ExtraData == "0" || String.IsNullOrEmpty(ExitTile.ExtraData))
                    {
                        ExitTile.ExtraData = "1";
                    }

                    ExitTile.UpdateState();
                }
            }

            this._room.GetGameManager().LockGates();
        }
 /// <summary>
 /// Load a single Tile from a certain position in the file
 /// </summary>
 /// <param name="chr">The character in the file, defines what tile it will be</param>
 /// <param name="x">The x-coördinate</param>
 /// <param name="y">The y-coördinate</param>
 /// <returns>The Tile to Load</returns>
 private Tile LoadTile(char chr, int x, int y, string name)
 {
     if (chr == 'W')
         return new WallTile("01");
     else if (chr == 'P')
         return new PathTile("01");
     else if (chr == 'N')
     {
         //place the player in the entry tile
         player.Position = new Vector3(x * 200, 200f, y * 200);
         return new EntryTile("01");
     }
     else if (chr == 'X')
     {
         ExitTile exitTile = new ExitTile("01");
         if (name == "Content\\Special Levels\\Final.txt")
             exitTile.exitObject = new Object3D("Misc Level Objects\\Pistol\\Pistol Model");
         return exitTile;
     }
     else if (chr == 'K')
     {
         Decoration notepad = new Decoration("Misc Level Objects\\NotePad\\NotePad Model", "Notepad");
         notepad.Position = new Vector3(x * 200, 102, y * 200);
         notepad.Parent = this;
         gameObjects.Add(notepad);
         return new PathTile("01");
     }
     else if (chr == 'D')
     {
         Decoration door = new Decoration("Misc Level Objects\\Door\\Door Model", "Door");
         door.Position = new Vector3(x * 200, 155, y * 200 + 100);
         door.modelRotation = (float)Math.PI / 180 * 90;
         door.Parent = this;
         gameObjects.Add(door);
         player.Position = new Vector3(x * 200, 200f, y * 200);
         return new PathTile("01");
     }
     else if (chr == 'C')
     {
         Decoration closet = new Decoration("Misc Level Objects\\Closet\\Closet Model", "Closet");
         closet.Position = new Vector3(x * 200, 190, y * 200 - 80);
         closet.Parent = this;
         closet.modelRotation = (float)Math.PI / 180 * 270;
         gameObjects.Add(closet);
         return new PathTile("01");
     }
     else if (chr == 'V')
     {
         Decoration cupboard = new Decoration("Misc Level Objects\\Cupboard\\Cupboard Model", "Cupboard");
         cupboard.Position = new Vector3(x * 200 + 100, 165, y * 200);
         cupboard.Parent = this;
         cupboard.modelRotation = (float)Math.PI / 180 * 180;
         gameObjects.Add(cupboard);
         return new PathTile("01");
     }
     else if (chr == '1')
         return new WallTile("No Exit Left");
     else if (chr == '2')
         return new WallTile("No Exit Middle");
     else if (chr == '3')
         return new WallTile("No Exit Right");
     else
         return null;
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Load a single Tile from a certain position in the file
 /// </summary>
 /// <param name="chr">The character in the file, defines what tile it will be</param>
 /// <param name="x">The x-coördinate</param>
 /// <param name="y">The y-coördinate</param>
 /// <returns>The Tile to Load</returns>
 private Tile LoadTile(char chr, int x, int y, string name)
 {
     if (chr == 'W')
     {
         return(new WallTile("01"));
     }
     else if (chr == 'P')
     {
         return(new PathTile("01"));
     }
     else if (chr == 'N')
     {
         //place the player in the entry tile
         player.Position = new Vector3(x * 200, 200f, y * 200);
         return(new EntryTile("01"));
     }
     else if (chr == 'X')
     {
         ExitTile exitTile = new ExitTile("01");
         if (name == "Content\\Special Levels\\Final.txt")
         {
             exitTile.exitObject = new Object3D("Misc Level Objects\\Pistol\\Pistol Model");
         }
         return(exitTile);
     }
     else if (chr == 'K')
     {
         Decoration notepad = new Decoration("Misc Level Objects\\NotePad\\NotePad Model", "Notepad");
         notepad.Position = new Vector3(x * 200, 102, y * 200);
         notepad.Parent   = this;
         gameObjects.Add(notepad);
         return(new PathTile("01"));
     }
     else if (chr == 'D')
     {
         Decoration door = new Decoration("Misc Level Objects\\Door\\Door Model", "Door");
         door.Position      = new Vector3(x * 200, 155, y * 200 + 100);
         door.modelRotation = (float)Math.PI / 180 * 90;
         door.Parent        = this;
         gameObjects.Add(door);
         player.Position = new Vector3(x * 200, 200f, y * 200);
         return(new PathTile("01"));
     }
     else if (chr == 'C')
     {
         Decoration closet = new Decoration("Misc Level Objects\\Closet\\Closet Model", "Closet");
         closet.Position      = new Vector3(x * 200, 190, y * 200 - 80);
         closet.Parent        = this;
         closet.modelRotation = (float)Math.PI / 180 * 270;
         gameObjects.Add(closet);
         return(new PathTile("01"));
     }
     else if (chr == 'V')
     {
         Decoration cupboard = new Decoration("Misc Level Objects\\Cupboard\\Cupboard Model", "Cupboard");
         cupboard.Position      = new Vector3(x * 200 + 100, 165, y * 200);
         cupboard.Parent        = this;
         cupboard.modelRotation = (float)Math.PI / 180 * 180;
         gameObjects.Add(cupboard);
         return(new PathTile("01"));
     }
     else if (chr == '1')
     {
         return(new WallTile("No Exit Left"));
     }
     else if (chr == '2')
     {
         return(new WallTile("No Exit Middle"));
     }
     else if (chr == '3')
     {
         return(new WallTile("No Exit Right"));
     }
     else
     {
         return(null);
     }
 }
Ejemplo n.º 9
0
    private void Awake()
    {
        instance  = GetComponent <PauseManager>();
        panelOpen = false;
        glossy    = glossaryObj.GetComponent <Glossary>();
        SceneMain scene = glossy.GetScene(BaseSaver.getMap());

        GameObject.Find("MenuTitle").SetActive(true);
        GameObject.Find("MenuTitle").GetComponent <Text>().text = scene.meta.name;
        StartCoroutine(WaitForAction(3f));

        GameObject map = Instantiate(scene.map, new Vector3(0, 0, 0), Quaternion.identity);

        map.SetActive(true);
        swapping = false;
        deleting = false;

        Debug.Log("PauseManager Awake");

        AdventureMeta meta  = BaseSaver.getAdventure();
        BoardMeta     board = BaseSaver.getBoard(BaseSaver.getMap());

        GameObject hero = GameObject.FindWithTag("Player");

        if (BaseSaver.getMap().Equals("ShallowGrove") && BaseSaver.getMapPrev() != "")
        {
            hero.SetActive(false);
            hero = null;
            Destroy(GameObject.FindWithTag("Player"));
        }

        if (hero == null)
        {
            // Pull the hero out of the glossary and instantiate it in the right exit/entrance tile
            GameObject nHero = null;
            string     dest  = BaseSaver.getMapConnection();
            string     prev  = BaseSaver.getMapPrev();
            Debug.Log("Prev: " + prev);
            Debug.Log("Dest: " + dest);
            foreach (GameObject exit in GameObject.FindGameObjectsWithTag("Exit"))
            {
                ExitTile tile = exit.GetComponent <ExitTile>();
                if (tile.toScene.Equals(prev + '.' + dest))
                {
                    nHero = Instantiate(glossy.hero, exit.transform.position, exit.transform.rotation, GameObject.Find("Units").transform);
                    BaseSaver.setMapConnection("");
                    BaseSaver.setMapPrevName("");
                    break;
                }
            }
            if (nHero != null)
            {
                nHero.GetComponent <PlayerMain>().playerMeta = meta;
            }
            else
            {
                Debug.Log("Hero is null!");
                nHero = Instantiate(glossy.hero, board.playerPos.ToVector3(), Quaternion.identity, GameObject.Find("Units").transform);
                nHero.GetComponent <PlayerMain>().playerMeta = meta;
            }
        }
        else
        {
            Debug.Log("Hero is not null!");
            //GameObject.FindWithTag("Player").transform.position = new Vector3(board.playerPos.x, board.playerPos.y, board.playerPos.z);
            GameObject.FindWithTag("Player").GetComponent <PlayerMain>().playerMeta = meta;
        }

        //GameObject.FindWithTag("Player").GetComponent<PlayerMain>().playerMeta = meta;
        //BoardMeta board = BaseSaver.getBoard(BaseSaver.getMap());

        //Debug.Log("Player Pos: " + GameObject.Find("PlayerHero").transform.position.ToString());

        if (board != null)
        {
            Debug.Log("Board not null");

            GameObject[] npcs  = GameObject.FindGameObjectsWithTag("NPC");
            GameObject[] items = GameObject.FindGameObjectsWithTag("Item");

            Debug.Log("board: " + board.mapName);
            Debug.Log("player pos: " + board.playerPos);

            foreach (GameObject npc in npcs)
            {
                Debug.Log("board npc: " + (new PosMeta(npc.transform.position)).ToString());
                Debug.Log("equals battle: " + meta.trainer.pos.Equals(new PosMeta(npc.transform.position)).ToString());
                foreach (NPCMeta NPCMeta in board.NPCs)
                {
                    if (NPCMeta.name.Equals(npc.GetComponent <NPCMain>().meta.name))
                    {
                        npc.GetComponent <NPCMain>().meta = new NPCMeta(NPCMeta);
                    }
                }
                if (meta.trainer != null && meta.trainer.name.Equals(npc.GetComponent <NPCMain>().meta.name))
                {
                    Debug.Log("Found: " + npc.GetComponent <NPCMain>().meta.ToString());
                    npc.GetComponent <NPCMain>().meta = new NPCMeta(meta.trainer);
                    Debug.Log("changed: " + npc.GetComponent <NPCMain>().meta.ToString());
                }
            }
            foreach (GameObject item in items)
            {
                item.GetComponent <TreasureMain>().UpdateInteractable();
            }
            //GameObject.FindWithTag("Player").transform.position = new Vector3(board.playerPos.x, board.playerPos.y, board.playerPos.z);
            BaseSaver.putBoard(GameUtilities.getBoardState(BaseSaver.getMap(), new PosMeta(GameObject.FindWithTag("Player").transform.position)));
        }
        else
        {
            Debug.Log("Board is null");
        }
    }
Ejemplo n.º 10
0
        private bool RunTownMap(EncounterProg encounter, PlayerToken player, TownMap townMap, TownMapTile currentTownMapTile, ExitTile endTile)
        {
            endTile.Position[0] = 1;
            endTile.Position[1] = 1;

            player.Position[0] = 1;
            player.Position[1] = 2;

            townMap.SetEntityPosition(player);
            int[] exitTilePos = new int[2] {
                1, 1
            };
            townMap.SetTilePosition(exitTilePos, ExitTile.Value);

            townMap.BuildMapDisplay();

            List <ICharacter> townEntityPile = new List <ICharacter>();

            townEntityPile.Add(player);

            List <Tile> townSpecialTilePile = new List <Tile>()
            {
                endTile,
                new InnTile()
                {
                    Position = townMap.FindPosition(InnTile.Value)
                }
            };

            AddEntitiesAndTilesToMap(townMap, townSpecialTilePile, townEntityPile);

            var song = new Playable(new MusicPlayer(), Track.Town);

            song.Play();

            bool nextMap = RunMapGameLoop(townMap, townEntityPile, townSpecialTilePile, encounter);

            ClearMap(townMap, townEntityPile);

            song.Stop();
            player.Position[0] = currentTownMapTile.Position[0];
            player.Position[1] = currentTownMapTile.Position[1] + 1;



            return(nextMap);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Runs the logic around the game loop
        /// </summary>
        /// <param name="difficulty">Difficulty of the game</param>
        /// <param name="newPlayer">The current player</param>
        /// <returns>Whether or not the game will continue</returns>
        public void RunMapGame()
        {
            EncounterProg encounter = new EncounterProg();

            encounter.RunCharacterCreation();

            Random randomNumberSeed = new Random();

            bool newMap = true;

            int height = 8, width = 20;

            while (newMap)
            {
                PlayerToken player = new PlayerToken(encounter);

                Console.WriteLine("Loading New Map...");
                Console.WriteLine("This may take up to 60 seconds...");

                Map     map     = new Map(width, height);
                TownMap townMap = new TownMap(width, height);
                Dictionary <int, CaveMap> caveMapStorage = new Dictionary <int, CaveMap>();
                List <Tile> specialTilePile = new List <Tile>();

                int randomSeed = randomNumberSeed.Next(_currentLevel - 1, _currentLevel + 2);
                if (_currentLevel == 1)
                {
                    randomSeed = randomNumberSeed.Next(0, 3);
                }
                else if (_currentLevel == 2)
                {
                    randomSeed = randomNumberSeed.Next(1, 3);
                }
                for (int i = 0; i < randomSeed; i++)
                {
                    double   randomWidthSeed  = randomNumberSeed.Next(2, 4);
                    double   randomHeightSeed = randomNumberSeed.Next(1, 1);
                    CaveMap  caveMap          = new CaveMap((int)(width / (randomWidthSeed)), (int)(height / (randomHeightSeed)));
                    CaveTile caveTile         = new CaveTile();
                    caveTile.AssociationNum = i + 1;
                    specialTilePile.Add(caveTile);
                    caveMapStorage.Add(i + 1, caveMap);
                }
                TownMapTile currentTownMapTile = new TownMapTile();
                ExitTile    endTile            = new ExitTile();
                endTile.Position            = new int[2];
                currentTownMapTile.Position = FindTileOrEntitySpawn.StartingPostion(map, currentTownMapTile);
                specialTilePile.Add(currentTownMapTile);
                specialTilePile.Add(endTile);


                List <ICharacter> entityPile = new List <ICharacter>();
                randomSeed = randomNumberSeed.Next(_currentLevel, _currentLevel * 5);

                bool isTownMap = true;
                bool isCaveMap = true;
                while ((isTownMap || isCaveMap) && newMap)
                {
                    newMap = RunWorldMap(encounter, player, map, specialTilePile, randomSeed, endTile, entityPile);

                    isTownMap = false;
                    isCaveMap = false;
                    foreach (Tile tile in specialTilePile)
                    {
                        if (tile.GetType() == typeof(CaveTile) && IsColliding.IsCurrentlyColliding(tile, player))
                        {
                            newMap    = RunCaveMap(encounter, player, caveMapStorage, endTile, tile);
                            isCaveMap = true;
                        }
                        else if (tile.GetType() == typeof(TownMapTile) && IsColliding.IsCurrentlyColliding(currentTownMapTile, player))
                        {
                            encounter.TownReplenish();
                            newMap    = RunTownMap(encounter, player, townMap, currentTownMapTile, endTile);
                            isTownMap = true;
                        }
                    }
                }

                width  += 10;
                height += 2;
                if (width == 100)
                {
                    newMap = false;
                }

                _currentLevel++;
            }

            Console.WriteLine("Game Over");
        }
Ejemplo n.º 12
0
        private bool RunCaveMap(EncounterProg encounter, PlayerToken player, Dictionary <int, CaveMap> caveMapStorage, ExitTile endTile, Tile tile)
        {
            Random            rand            = new Random();
            int               randomEnemySeed = rand.Next(_currentLevel, (int)(_currentLevel * 1.5));
            List <ICharacter> entityCavePile  = new List <ICharacter>();

            entityCavePile.Add(player);
            endTile.Position[0] = 1;
            endTile.Position[1] = 1;
            player.Position[0]  = 1;
            player.Position[1]  = 2;

            caveMapStorage[tile.AssociationNum].SetEntityPosition(player);
            int[] exitTilePos = new int[2] {
                1, 1
            };
            caveMapStorage[tile.AssociationNum].SetTilePosition(exitTilePos, ExitTile.Value);

            List <Tile> caveSpecialTilePile = new List <Tile>()
            {
                endTile
            };

            caveMapStorage[tile.AssociationNum].BuildMapDisplay();

            if (tile.AssociationNum == 1 && (_currentLevel == _bossSeed))
            {
                placeBoss = true;
                AddEntitiesAndTilesToMap(caveMapStorage[tile.AssociationNum], caveSpecialTilePile, randomEnemySeed, entityCavePile, placeBoss);
            }
            else
            {
                AddEntitiesAndTilesToMap(caveMapStorage[tile.AssociationNum], caveSpecialTilePile, randomEnemySeed, entityCavePile);
            }

            bool nextMap = RunMapGameLoop(caveMapStorage[tile.AssociationNum], entityCavePile, caveSpecialTilePile, encounter);

            ClearMap(caveMapStorage[tile.AssociationNum], entityCavePile);


            player.Position[0] = tile.Position[0];
            player.Position[1] = tile.Position[1] + 1;

            placeBoss = false;
            return(nextMap);
        }
Ejemplo n.º 13
0
        private bool RunWorldMap(EncounterProg encounter, PlayerToken player, Map map, List <Tile> specialTilePile, int randomSeed, ExitTile endTile, List <ICharacter> entityPile)
        {
            entityPile.Add(player);
            endTile.Position[0] = map.MapArrayOfArrays.Length - 2;
            endTile.Position[1] = map.MapArrayOfArrays[0].Length - 2;


            AddEntitiesAndTilesToMap(map, specialTilePile, randomSeed, entityPile);

            map.BuildMapDisplay();

            bool newMap = RunMapGameLoop(map, entityPile, specialTilePile, encounter);

            ClearMap(map, entityPile);

            return(newMap);
        }
Ejemplo n.º 14
0
        public void StopGame(bool userTriggered = false)
        {
            this._gameStarted = false;
            this._room.GetGameManager().UnlockGates();
            this._room.GetGameManager().StopGame();

            ResetGame();

            if (this.ExitTeleports.Count > 0)
            {
                foreach (Item ExitTile in ExitTeleports.Values.ToList())
                {
                    if (ExitTile.ExtraData == "1" || String.IsNullOrEmpty(ExitTile.ExtraData))
                    {
                        ExitTile.ExtraData = "0";
                    }

                    ExitTile.UpdateState();
                }
            }

            TEAM Winners = this._room.GetGameManager().GetWinningTeam();

            foreach (RoomUser User in this._room.GetRoomUserManager().GetUserList().ToList())
            {
                User.FreezeLives = 0;
                if (User.Team == Winners)
                {
                    User.UnIdle();
                    User.DanceId = 0;
                    this._room.SendMessage(new ActionComposer(User.VirtualId, 1));
                }

                if (Winners != TEAM.NONE)
                {
                    // List<RoomUser> winners = _room.GetRoomUserManager().GetRoomUsers();

                    // foreach (RoomUser user in winners.ToList())

                    if (User.Team != TEAM.NONE)
                    {
                        if (QuasarEnvironment.GetUnixTimestamp() - timestarted > 10)
                        {
                            QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_FreezePlayer", 1);
                            QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_FreezeUser", 2);
                        }
                    }

                    if (Winners == TEAM.RED)
                    {
                        if (User.CurrentEffect == 40)
                        {
                            QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_FreezeWinner", 1);
                            QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_GameScoreTotal", 1);
                            _room.SendMessage(new ActionComposer(User.VirtualId, 1));
                        }
                    }

                    else if (Winners == TEAM.GREEN)
                    {
                        if (User.CurrentEffect == 41)
                        {
                            QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_FreezeWinner", 1);
                            QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_GameScoreTotal", 1);
                            _room.SendMessage(new ActionComposer(User.VirtualId, 1));
                        }
                    }

                    else if (Winners == TEAM.BLUE)
                    {
                        if (User.CurrentEffect == 42)
                        {
                            QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_FreezeWinner", 1);
                            QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_GameScoreTotal", 1);
                            _room.SendMessage(new ActionComposer(User.VirtualId, 1));
                        }
                    }

                    else if (Winners == TEAM.YELLOW)
                    {
                        if (User.CurrentEffect == 43)
                        {
                            QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_FreezeWinner", 1);
                            QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_GameScoreTotal", 1);
                            _room.SendMessage(new ActionComposer(User.VirtualId, 1));
                        }
                    }



                    if (ExitTeleports.Count > 0)
                    {
                        Item tile = _freezeTiles.Values.Where(x => x.GetX == User.X && x.GetY == User.Y).FirstOrDefault();
                        if (tile != null)
                        {
                            Item ExitTle = GetRandomExitTile();

                            if (ExitTle != null)
                            {
                                _room.GetGameMap().UpdateUserMovement(User.Coordinate, ExitTle.Coordinate, User);
                                User.SetPos(ExitTle.GetX, ExitTle.GetY, ExitTle.GetZ);
                                User.UpdateNeeded = true;

                                if (User.IsAsleep)
                                {
                                    User.UnIdle();
                                }
                            }
                        }
                    }
                }

                if (!userTriggered)
                {
                    _room.GetWired().TriggerEvent(WiredBoxType.TriggerGameEnds, null);
                }
            }
        }