namespace Holo.Virtual.Rooms.Games { using Holo; using Holo.Managers; using Holo.Virtual.Rooms; using Holo.Virtual.Users; using Ion.Storage; using System; using System.Collections; using System.Text; internal class gameLobby { private int[] allowedPowerups; internal Hashtable Games = new Hashtable(); internal bool isBattleBall = true; internal rankManager.gameRank Rank; internal virtualRoom Room; internal gameLobby(virtualRoom Room, bool isBattleBall, string rankTitle) { this.Room = Room; this.Rank = rankManager.getGameRank(isBattleBall, rankTitle); this.isBattleBall = isBattleBall; if (isBattleBall) { string[] Powerups; using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { Powerups = dbClient.getString("SELECT bb_allowedpowerups FROM games_lobbies WHERE id = '" + Room.roomID + "'").Split(new char[] { ',' }); } this.allowedPowerups = new int[Powerups.Length]; for (int i = 0; i < Powerups.Length; i++) { this.allowedPowerups[i] = int.Parse(Powerups[i]); } } } internal bool allowsPowerup(int ID) { try { for (int i = 0; i < this.allowedPowerups.Length; i++) { if (this.allowedPowerups[i] == ID) { return true; } } return false; } catch { return false; } } internal void Clear() { this.Games.Clear(); this.Games = null; this.Room = null; } internal void createGame(gamePlayer Owner, string Name, int mapID, int teamAmount, int[] enabledPowerups) { int gameID = 0; while (this.Games.ContainsKey(gameID)) { gameID++; } Owner.Game = new Game(this, gameID, Name, mapID, teamAmount, enabledPowerups, Owner); Owner.Game.movePlayer(Owner, -1, 0); this.Games.Add(gameID, Owner.Game); } internal string gameList() { try { int[] Amounts = new int[3]; StringBuilder List = new StringBuilder(); foreach (Game Game in ((Hashtable) this.Games.Clone()).Values) { List.Append(string.Concat(new object[] { Encoding.encodeVL64(Game.ID), Game.Name, Convert.ToChar(2), Encoding.encodeVL64(Game.Owner.roomUID), Game.Owner.User._Username, Convert.ToChar(2) })); if (!this.isBattleBall) { List.Append(Encoding.encodeVL64(Game.leftTime)); } List.Append(Encoding.encodeVL64(Game.mapID)); Amounts[(int) Game.State]++; } if ((Amounts[1] > 0) || (Amounts[2] > 0)) { return (Encoding.encodeVL64(Amounts[0]) + Encoding.encodeVL64(Amounts[1]) + Encoding.encodeVL64(Amounts[2]) + List.ToString()); } return (Encoding.encodeVL64(Amounts[0]) + List.ToString()); } catch (Exception e) { Console.WriteLine(e.Message); return ""; } } internal string getCreateGameSettings() { if (this.isBattleBall) { StringBuilder Settings = new StringBuilder(Encoding.encodeVL64(4)); Settings.Append(string.Concat(new object[] { "fieldType", Convert.ToChar(2), "HJIII", Encoding.encodeVL64(5) })); Settings.Append(string.Concat(new object[] { "numTeams", Convert.ToChar(2), "HJJIJI", Encoding.encodeVL64(4) })); Settings.Append("allowedPowerups" + Convert.ToChar(2) + "IJ"); int powerupsAmount = this.allowedPowerups.Length; if (powerupsAmount == 0) { Settings.Append("9"); } else { for (int i = 0; i < powerupsAmount; i++) { if (i == (powerupsAmount - 1)) { Settings.Append(this.allowedPowerups[i]); } else { Settings.Append(this.allowedPowerups[i] + ","); } } } Settings.Append(Convert.ToChar(2) + "H"); Settings.Append(string.Concat(new object[] { "name", Convert.ToChar(2), "IJ", Convert.ToChar(2), "H" })); return Settings.ToString(); } return "#"; } internal bool validGamerank(int Points) { return ((Points >= this.Rank.minPoints) && ((this.Rank.maxPoints == 0) || (Points <= this.Rank.maxPoints))); } internal string playerRanks { get { ICollection Users = this.Room.Users; StringBuilder Ranks = new StringBuilder(Encoding.encodeVL64(Users.Count)); foreach (virtualRoomUser roomUser in Users) { Ranks.Append(string.Concat(new object[] { Encoding.encodeVL64(roomUser.roomUID), roomUser.gamePoints, Convert.ToChar(2), rankManager.getGameRankTitle(this.isBattleBall, roomUser.gamePoints), Convert.ToChar(2) })); } return Ranks.ToString(); } } internal string Type { get { if (this.isBattleBall) { return "bb"; } return "ss"; } } } }