public bool gameEnd() { //Game finished, perhaps start a new one _arena.flagReset(); _arena._tickers.Clear(); _arena.sendArenaMessage("Game Over"); _gameCount++; if (_gameCount >= 3) { ScriptArena.scrambleTeams(_arena, _arena._server._zoneConfig.arena.desiredFrequencies, true); _gameCount = 0; } _tickGameStart = 0; _tickGameStarting = 0; _victoryTeam = null; _crownTeams = null; //It would be preferable to send false, {emtpy list} here //Needs testing Helpers.Player_Crowns(_arena, false, _arena.Players.ToList()); _playerCrownStatus.Clear(); return(true); }
/// <summary> /// Creates a new, appropriate arena /// </summary> public Arena newArena(string name) { //Are we going to make a new public arena? if (name == "") { //Yes, we need to find the lowest unused public name int idx = 1; while (_arenas.Keys.Contains("Public" + idx)) { idx++; } //Got one! name = "Public" + idx; } //Is this a registered arena name? string invokerType = _config["server/gameType"].Value; IList <ConfigSetting> namedArenas = _config["arena"].GetNamedChildren("namedArena"); foreach (ConfigSetting named in namedArenas) { //Correct arena? if (name.Equals(named.Value, StringComparison.OrdinalIgnoreCase)) { invokerType = named["gameType"].Value; break; } } //Instance our gametype if (!Scripting.Scripts.invokerTypeExists(invokerType)) { Log.write(TLog.Error, "Unable to find gameType '{0}'", invokerType); return(null); } //Populate the class Arena arena = new ScriptArena(this, invokerType); arena._bActive = true; arena._name = name; if (arena._name.StartsWith("Public")) { arena._bIsPublic = true; } else { arena._bIsPublic = false; } arena._logger = Log.createClient("a_" + name); arena.Close += lostArena; arena.init(); using (DdMonitor.Lock(_arenas)) _arenas.Add(name, arena); Log.write(TLog.Normal, "Opened arena: " + name); var tmpIrcName = String.Join("", (from c in name where !Char.IsWhiteSpace(c) && Char.IsLetterOrDigit(c) select c).ToArray()); arena.IrcName = "#" + this.IrcName + "_" + tmpIrcName; ircClient.RfcJoin(arena.IrcName); return(arena); }
/// <summary> /// Creates a new, appropriate arena /// </summary> public Arena newArena(string name, bool namedArena) { //Are we going to make a new public arena? if (name == "") { //Yes, we need to find the lowest unused public name int idx = 1; while (_arenas.Keys.Contains("Public" + idx)) { idx++; } //Got one! name = "Public" + idx; } //Is this a registered arena name? string invokerType = _config["server/gameType"].Value; bool bScriptLoad = true; //Instance our gametype if (!Scripting.Scripts.invokerTypeExists(invokerType)) { Log.write(TLog.Error, "Unable to find gameType '{0}'", invokerType); bScriptLoad = false; } //Populate the class Arena arena; if (bScriptLoad) { arena = new ScriptArena(this, invokerType); } else { arena = new ScriptArena(this, null); } if (!namedArena) { arena._bActive = true; } else { arena._bIsNamed = true; } arena._name = name; if (arena._name.StartsWith("Public") || namedArena) { arena._bIsPublic = true; } else { arena._bIsPublic = false; } arena._logger = Log.createClient("a_" + name); arena.Close += lostArena; arena.init(); using (DdMonitor.Lock(_arenas)) _arenas.Add(name, arena); Log.write(TLog.Normal, "Opened arena: " + name); return(arena); }