示例#1
0
        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);
        }
示例#2
0
        /// <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);
        }