Ejemplo n.º 1
0
        /// <summary>
        /// Called when a flag changes team
        /// </summary>
        public void onFlagChange(Arena.FlagState flag)
        {       //Does this team now have all the flags?
            Team victoryTeam = flag.team;

            foreach (Arena.FlagState fs in _arena._flags.Values)
            {
                if (fs.bActive && fs.team != victoryTeam)
                {
                    victoryTeam = null;
                }
            }

            if (victoryTeam != null)
            {   //Yes! Victory for them!
                _arena.setTicker(1, 0, _config.flag.victoryHoldTime, "Victory in ");
                _tickNextVictoryNotice = _tickVictoryStart = Environment.TickCount;
                _victoryTeam           = victoryTeam;
            }
            else
            {   //Aborted?
                if (_victoryTeam != null && !_gameWon)
                {
                    _tickVictoryStart      = 0;
                    _tickNextVictoryNotice = 0;

                    _arena.sendArenaMessage("Victory has been aborted.", _config.flag.victoryAbortedBong);
                    _arena.setTicker(1, 0, 0, "");
                    _victoryTeam = null;
                }
            }
        }
Ejemplo n.º 2
0
        public bool gameStart()
        {               //We've started!
            _tickGameStart    = Environment.TickCount;
            _tickGameStarting = 0;



            //Scramble the teams!
            //ScriptHelpers.scrambleTeams(_arena, 2, true);

            //Spawn our flags!
            _arena.flagSpawn();

            titanFlag = _arena._flags.Values.Where(f => f.flag.GeneralData.Id == 15).First();
            collFlag  = _arena._flags.Values.Where(f => f.flag.GeneralData.Id == 7).First();

            titanFlag.team = _arena.getTeamByName("Titan Militia");
            collFlag.team  = _arena.getTeamByName("Collective Military");



            //Let everyone know
            _arena.sendArenaMessage("Game has started!", _config.flag.resetBong);

            return(true);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Called when a flag changes team
        /// </summary>
        public void onFlagChange(Arena.FlagState flag)
        {               //Does this team now have all the flags?
            Team victoryTeam = flag.team;

            foreach (Arena.FlagState fs in _arena._flags.Values)
            {
                if (fs.bActive && fs.team != victoryTeam)
                {
                    victoryTeam = null;
                }
            }

            //Annouce the flag captured to arena
            try
            {
                _arena.sendArenaMessage(flag.team._name + " have captured " + flag.flag.GeneralData.Name + "!", 21);
            }
            catch (Exception e)
            {
                Log.write(TLog.Exception, "exception in capture flag:: '{0}'", e);
            }
            if (victoryTeam != null)
            {   //Yes! Victory for them!
                _arena.setTicker(1, 1, _config.flag.victoryHoldTime, "Victory in ");
                _tickNextVictoryNotice = _tickVictoryStart = Environment.TickCount;
                _victoryTeam           = victoryTeam;
            }
        }
Ejemplo n.º 4
0
        private void OnFlagChange(Arena.FlagState flag)
        {
            Team victory = flag.team;

            //Does this team now have all the flags?
            foreach (Arena.FlagState fs in arena._flags.Values)
            {
                if (fs.bActive && fs.team != flag.team)
                {   //Not all flags are captured yet
                    victory = null;
                    break;
                }
            }

            if (!gameWon)
            {     //All flags captured?
                if (victory != null)
                { //Yep
                    winningTeamTick   = (Environment.TickCount + (victoryHoldTime * 10));
                    winningTeamNotify = 0;
                    winningTeam       = victory;
                    flagMode          = CTFMode.XSeconds;
                }
                else
                {     //Aborted?
                    if (winningTeam != null)
                    { //Yep
                        winningTeam     = null;
                        winningTeamTick = 0;
                        flagMode        = CTFMode.Aborted;
                    }
                }
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Called when a flag changes team
        /// </summary>
        public void OnFlagChange(Arena.FlagState flag)
        {   //Does this team have all the flags?
            Team VictoryTeam = flag.team;

            foreach (Arena.FlagState fs in arena._flags.Values)
            {
                if (fs.bActive && fs.team != VictoryTeam)
                {
                    VictoryTeam = null;
                    break;
                }
            }

            if (!GameWon)
            {
                if (VictoryTeam != null)
                {
                    WinningTeamTick   = (Environment.TickCount + (VictoryHoldTime * 10));
                    WinningTeam       = VictoryTeam;
                    WinningTeamNotify = 0;
                    FlagMode          = FlagStatus.XSeconds;
                }
                else
                {
                    if (WinningTeam != null)
                    {
                        WinningTeam     = null;
                        WinningTeamTick = 0;
                        FlagMode        = FlagStatus.Aborted;
                    }
                }
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Called when a flag changes team
        /// </summary>
        public void onFlagChange(Arena.FlagState flag)
        {               //Does this team now have all the flags?
            bool allFlags = true;

            if (flag.team == null || _arena._flags == null || _arena._flags.Count == 0)
            {
                return;
            }
            foreach (Arena.FlagState fs in _arena._flags.Values)
            {
                if (fs.flag != null)
                {
                    if (fs.team != flag.team)
                    {
                        allFlags = false;
                    }
                }
            }

            if (allFlags && _arena.DesiredTeams.Contains(flag.team))
            {
                _arena.sendArenaMessage(flag.team._name + " controls all the flags!", 20);
            }
            else
            {
                _arena.sendArenaMessage(flag.team._name + " has captured " + flag.flag.GeneralData.Name + "!", 21);
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Sends a flag update to the specified players
        /// </summary>
        static public void Object_Flags(IEnumerable <Player> p, Arena.FlagState update)
        {               //Prepare the packet
            SC_Flags flags = new SC_Flags();

            flags.singleUpdate = update;

            //Send to each recipient
            foreach (Player player in p)
            {
                player._client.sendReliable(flags);
            }
        }
        public CapturePoint(Arena arena, Arena.FlagState flag, Script_Multi script)
        {
            _flag        = flag;
            _arena       = arena;
            players      = new List <Player>();
            tickLastWave = 0;
            _flags       = _arena._flags.Values.OrderBy(f => f.posX).ToList();
            _baseScript  = script;

            posX = _flag.posX;
            posY = _flag.posY;

            name = Helpers.posToLetterCoord(posX, posY);
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Called when a flag changes team
 /// </summary>
 public void onFlagChange(Arena.FlagState flag)
 {
 }
Ejemplo n.º 10
0
 /// <summary>
 /// Called when a flag changes team
 /// </summary>
 public void onFlagChange(Arena.FlagState flag)
 {       //Does this team now have all the flags?
     //who cares if they do
 }
Ejemplo n.º 11
0
        public bool playerModCommand(Player player, Player recipient, string command, string payload)
        {
            command = (command.ToLower());

            if (command.Equals("setup"))
            {
                if (player.PermissionLevelLocal < Data.PlayerPermission.ArenaMod)
                {
                    return(false);
                }

                if (!bases.ContainsKey(payload.ToUpper()))
                {
                    player.sendMessage(-1, "That base is not recognized, Options are: ");
                    foreach (string key in bases.Keys)
                    {
                        player.sendMessage(0, key);
                    }

                    return(true);
                }

                Base defense = bases[payload.ToUpper()];

                arena.itemSpawn(arena._server._assets.getItemByID(2005), 150, defense.x, defense.y, 100, null);
                arena.itemSpawn(arena._server._assets.getItemByID(2009), 150, defense.x, defense.y, 100, null);
                //arena.itemSpawn(arena._server._assets.getItemByID(23), 2, defense.x, defense.y, 100, null);
                //arena.itemSpawn(arena._server._assets.getItemByID(10), 2, defense.x, defense.y, 100, null);
                //arena.itemSpawn(arena._server._assets.getItemByID(11), 1, defense.x, defense.y, 100, null);
                //arena.itemSpawn(arena._server._assets.getItemByID(9), 1, defense.x, defense.y, 100, null);
                Arena.FlagState flag = arena.getFlag("Bridge3");

                flag.posX = defense.flagX;
                flag.posY = defense.flagY;

                Helpers.Object_Flags(arena.Players, flag);
                arena.sendArenaMessage(String.Format("&Minerals, flag, and auto-kits dropped at {0}", payload.ToUpper()));
                return(true);
            }
            if (command.Equals("healall"))
            {
                if (player.PermissionLevelLocal < Data.PlayerPermission.ArenaMod)
                {
                    return(false);
                }

                foreach (Player p in arena.PlayersIngame)
                {
                    p.inventoryModify(104, 1);
                }

                arena.sendArenaMessage("&All players have been healed");
                return(true);
            }
            if (command.Equals("poweradd"))
            {
                if (player.PermissionLevelLocal < Data.PlayerPermission.SMod)
                {
                    player.sendMessage(-1, "Nice try.");
                    return(false);
                }

                int level = (int)Data.PlayerPermission.ArenaMod;
                //Pm'd?
                if (recipient != null)
                {
                    //Check for a possible level
                    if (!string.IsNullOrWhiteSpace(payload))
                    {
                        try
                        {
                            level = Convert.ToInt16(payload);
                        }
                        catch
                        {
                            player.sendMessage(-1, "Invalid level. Level must be either 1 or 2.");
                            return(false);
                        }

                        if (level < 1 || level > (int)player.PermissionLevelLocal ||
                            level == (int)Data.PlayerPermission.SMod)
                        {
                            player.sendMessage(-1, ":alias:*poweradd level(optional), :alias:*poweradd level (Defaults to 1)");
                            player.sendMessage(0, "Note: there can only be 1 admin level.");
                            return(false);
                        }

                        switch (level)
                        {
                        case 1:
                            recipient._permissionStatic = Data.PlayerPermission.ArenaMod;
                            break;

                        case 2:
                            recipient._permissionStatic = Data.PlayerPermission.Mod;
                            break;
                        }
                        recipient._developer = true;
                        recipient.sendMessage(0, string.Format("You have been powered to level {0}. Use *help to familiarize with the commands and please read all rules.", level));
                        player.sendMessage(0, string.Format("You have promoted {0} to level {1}.", recipient._alias, level));
                    }
                    else
                    {
                        recipient._developer        = true;
                        recipient._permissionStatic = Data.PlayerPermission.ArenaMod;
                        recipient.sendMessage(0, string.Format("You have been powered to level {0}. Use *help to familiarize with the commands and please read all rules.", level));
                        player.sendMessage(0, string.Format("You have promoted {0} to level {1}.", recipient._alias, level));
                    }

                    //Lets send it to the database
                    //Send it to the db
                    CS_ModQuery <Data.Database> query = new CS_ModQuery <Data.Database>();
                    query.queryType = CS_ModQuery <Data.Database> .QueryType.dev;
                    query.sender    = player._alias;
                    query.query     = recipient._alias;
                    query.level     = level;
                    //Send it!
                    player._server._db.send(query);
                    return(true);
                }
                else
                {
                    //We arent
                    //Get name and possible level
                    Int16 number;
                    if (string.IsNullOrEmpty(payload))
                    {
                        player.sendMessage(-1, "*poweradd alias:level(optional) Note: if using a level, put : before it otherwise defaults to arena mod");
                        player.sendMessage(0, "Note: there can only be 1 admin.");
                        return(false);
                    }
                    if (payload.Contains(':'))
                    {
                        string[] param = payload.Split(':');
                        try
                        {
                            number = Convert.ToInt16(param[1]);
                            if (number >= 0)
                            {
                                level = number;
                            }
                        }
                        catch
                        {
                            player.sendMessage(-1, "That is not a valid level. Possible powering levels are 1 or 2.");
                            return(false);
                        }
                        if (level < 1 || level > (int)player.PermissionLevelLocal ||
                            level == (int)Data.PlayerPermission.SMod)
                        {
                            player.sendMessage(-1, string.Format("*poweradd alias:level(optional) OR :alias:*poweradd level(optional) possible levels are 1-{0}", ((int)player.PermissionLevelLocal).ToString()));
                            player.sendMessage(0, "Note: there can be only 1 admin level.");
                            return(false);
                        }
                        payload = param[0];
                    }
                    player.sendMessage(0, string.Format("You have promoted {0} to level {1}.", payload, level));
                    if ((recipient = player._server.getPlayer(payload)) != null)
                    { //They are playing, lets update them
                        switch (level)
                        {
                        case 1:
                            recipient._permissionStatic = Data.PlayerPermission.ArenaMod;
                            break;

                        case 2:
                            recipient._permissionStatic = Data.PlayerPermission.Mod;
                            break;
                        }
                        recipient._developer = true;
                        recipient.sendMessage(0, string.Format("You have been powered to level {0}. Use *help to familiarize with the commands and please read all rules.", level));
                    }

                    //Lets send it off
                    CS_ModQuery <Data.Database> query = new CS_ModQuery <Data.Database>();
                    query.queryType = CS_ModQuery <Data.Database> .QueryType.dev;
                    query.sender    = player._alias;
                    query.query     = payload;
                    query.level     = level;
                    //Send it!
                    player._server._db.send(query);
                    return(true);
                }
            }

            if (command.Equals("powerremove"))
            {
                if (player.PermissionLevelLocal < Data.PlayerPermission.SMod)
                {
                    player.sendMessage(-1, "Nice try.");
                    return(false);
                }

                int level = (int)Data.PlayerPermission.Normal;
                //Pm'd?
                if (recipient != null)
                {
                    //Check for a possible level
                    if (!string.IsNullOrWhiteSpace(payload))
                    {
                        try
                        {
                            level = Convert.ToInt16(payload);
                        }
                        catch
                        {
                            player.sendMessage(-1, "Invalid level. Levels must be between 0 and 2.");
                            return(false);
                        }

                        if (level < 0 || level > (int)player.PermissionLevelLocal ||
                            level == (int)Data.PlayerPermission.SMod)
                        {
                            player.sendMessage(-1, ":alias:*powerremove level(optional), :alias:*powerremove level (Defaults to 0)");
                            return(false);
                        }

                        switch (level)
                        {
                        case 0:
                            recipient._permissionStatic = Data.PlayerPermission.Normal;
                            recipient._developer        = false;
                            break;

                        case 1:
                            recipient._permissionStatic = Data.PlayerPermission.ArenaMod;
                            break;

                        case 2:
                            recipient._permissionStatic = Data.PlayerPermission.Mod;
                            break;
                        }
                        recipient.sendMessage(0, string.Format("You have been demoted to level {0}.", level));
                        player.sendMessage(0, string.Format("You have demoted {0} to level {1}.", recipient._alias, level));
                    }
                    else
                    {
                        recipient._developer        = false;
                        recipient._permissionStatic = Data.PlayerPermission.Normal;
                        recipient.sendMessage(0, string.Format("You have been demoted to level {0}.", level));
                        player.sendMessage(0, string.Format("You have demoted {0} to level {1}.", recipient._alias, level));
                    }

                    //Lets send it to the database
                    //Send it to the db
                    CS_ModQuery <Data.Database> query = new CS_ModQuery <Data.Database>();
                    query.queryType = CS_ModQuery <Data.Database> .QueryType.dev;
                    query.sender    = player._alias;
                    query.query     = recipient._alias;
                    query.level     = level;
                    //Send it!
                    player._server._db.send(query);
                    return(true);
                }
                else
                {
                    //We arent
                    //Get name and possible level
                    Int16 number;
                    if (string.IsNullOrEmpty(payload))
                    {
                        player.sendMessage(-1, "*powerremove alias:level(optional) Note: if using a level, put : before it otherwise defaults to arena mod");
                        return(false);
                    }
                    if (payload.Contains(':'))
                    {
                        string[] param = payload.Split(':');
                        try
                        {
                            number = Convert.ToInt16(param[1]);
                            if (number >= 0)
                            {
                                level = number;
                            }
                        }
                        catch
                        {
                            player.sendMessage(-1, "That is not a valid level. Possible depowering levels are between 0 and 2.");
                            return(false);
                        }
                        if (level < 0 || level > (int)player.PermissionLevelLocal ||
                            level == (int)Data.PlayerPermission.SMod)
                        {
                            player.sendMessage(-1, string.Format("*powerremove alias:level(optional) OR :alias:*powerremove level(optional) possible levels are 0-{0}", ((int)player.PermissionLevelLocal).ToString()));
                            return(false);
                        }
                        payload = param[0];
                    }
                    player.sendMessage(0, string.Format("You have demoted {0} to level {1}.", payload, level));
                    if ((recipient = player._server.getPlayer(payload)) != null)
                    { //They are playing, lets update them
                        switch (level)
                        {
                        case 0:
                            recipient._permissionStatic = Data.PlayerPermission.Normal;
                            recipient._developer        = false;
                            break;

                        case 1:
                            recipient._permissionStatic = Data.PlayerPermission.ArenaMod;
                            break;

                        case 2:
                            recipient._permissionStatic = Data.PlayerPermission.Mod;
                            break;
                        }
                        recipient.sendMessage(0, string.Format("You have been depowered to level {0}.", level));
                    }

                    //Lets send it off
                    CS_ModQuery <Data.Database> query = new CS_ModQuery <Data.Database>();
                    query.queryType = CS_ModQuery <Data.Database> .QueryType.dev;
                    query.sender    = player._alias;
                    query.query     = payload;
                    query.level     = level;
                    //Send it!
                    player._server._db.send(query);
                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 12
0
 /// <summary>
 /// Called when a flag changes team
 /// </summary>
 public void onFlagChange(Arena.FlagState flag)
 {
     //Let the arena know
     //_arena.sendArenaMessage(flag.team._name + " has captured " + flag.flag.GeneralData.Name + "!", 0);
 }
Ejemplo n.º 13
0
        public void gameStart()
        {
            if (_arena.ActiveTeams.Count() == 0)
            {
                return;
            }

            _arena.flagReset();
            _arena.flagSpawn();

            _firstRushWave  = false;
            _secondRushWave = false;
            _thirdRushWave  = false;
            _firstBoss      = false;
            _secondBoss     = false;

            _firstLightExoWave  = false;
            _secondLightExoWave = false;
            _thirdLightExoWave  = false;

            _firstHeavyExoWave  = false;
            _secondHeavyExoWave = false;
            _thirdHeavyExoWave  = false;

            _firstDifficultyWave  = false;
            _secondDifficultyWave = false;
            _thirdDifficultyWave  = false;
            _fourthDifficultyWave = false;
            _fifthDifficultyWave  = false;

            _sixthDifficultyWave       = false;
            _seventhDifficultyWave     = false;
            _eighthDifficultyWave      = false;
            _ninthDifficultyWave       = false;
            _tenthDifficultyWave       = false;
            _eleventhDifficultyWave    = false;
            _twelvthDifficultyWave     = false;
            _thirteenthDifficultyWave  = false;
            _fourteenthDifficultyWave  = false;
            _fifthteenthDifficultyWave = false;

            _lastSupplyDrop = Environment.TickCount;
            _lastHPChange   = Environment.TickCount;
            hpMultiplier    = 0.25;

            _flags                 = _arena._flags.Values.OrderBy(f => f.posX).ToList();
            _allPoints             = new List <CapturePoint>();
            _baseScript._lastSpawn = new Dictionary <string, Helpers.ObjectState>();

            _totalFlags = _flags.Count;


            int flagcount = 1;

            foreach (Arena.FlagState flag in _flags)
            {
                if (flagcount <= 1)
                {
                    flag.team = _team;
                }
                if (flagcount >= 2)
                {
                    flag.team = _botTeam;
                }
                flagcount++;
                CapturePoint point = new CapturePoint(_arena, flag, _baseScript);
                point.Captured += delegate(Arena.FlagState capturedFlag)
                {
                    int playercount = _team.ActivePlayerCount;
                    int max         = Convert.ToInt32(playercount * 2.5);
                    spawnRandomWave(_botTeam, max);
                };

                _allPoints.Add(point);
            }

            foreach (Player p in _arena.Players)
            {
                Helpers.Object_Flags(p, _flags);
            }


            Arena.FlagState team1Flag = _flags.OrderByDescending(f => f.posX).Where(f => f.team == _team).First();
            Arena.FlagState team2Flag = _flags.OrderBy(f => f.posX).Where(f => f.team == _botTeam).First();

            _activePoints = new List <CapturePoint>();
            _activePoints.Add(_allPoints.FirstOrDefault(p => p._flag == team1Flag));
            _activePoints.Add(_allPoints.FirstOrDefault(p => p._flag == team2Flag));
            _activePoints.Add(_allPoints.FirstOrDefault(p => p._flag.team == null));

            UpdateTickers();

            int timer = 1800 * 100;


            //Let everyone know
            _arena.sendArenaMessage("Game has started! Good luck Titans.");
            _arena.setTicker(1, 3, timer, "Time Left: ",
                             delegate()
            {       //Trigger game end
                _arena.gameEnd();
            }
                             );
        }
Ejemplo n.º 14
0
        public void Poll(int now)
        {
            int playing = _arena.PlayerCount;

            if (_arena._bGameRunning && playing < _minPlayers && _arena._bIsPublic)
            {
                _baseScript.bJackpot = false;
                //Stop the game and reset voting
                _arena.gameEnd();
            }
            if (playing < _minPlayers && _arena._bIsPublic)
            {
                _baseScript._tickGameStarting = 0;
                _arena.setTicker(1, 3, 0, "Not Enough Players");
            }

            if (playing < _minPlayers && !_arena._bIsPublic && !_arena._bGameRunning)
            {
                _baseScript._tickGameStarting = 0;
                _arena.setTicker(1, 3, 0, "Private arena, Waiting for arena owner to start the game!");
            }

            //Do we have enough to start a game?
            if (!_arena._bGameRunning && _baseScript._tickGameStarting == 0 && playing >= _minPlayers && _arena._bIsPublic)
            {
                _baseScript._tickGameStarting = now;
                _arena.setTicker(1, 3, _config.deathMatch.startDelay * 100, "Next game: ",
                                 delegate()
                {       //Trigger the game start
                    _arena.gameStart();
                });
            }

            if (now - _lastTickerUpdate >= 1000)
            {
                UpdateTickers();
                _lastTickerUpdate = now;
            }

            if (now - _lastFlagCheck >= 500 && _arena._bGameRunning)
            {
                _lastFlagCheck = now;

                int team1count = _arena._flags.Values.Where(f => f.team == _team).Count();
                int team2count = _arena._flags.Values.Where(f => f.team == _botTeam).Count();

                _flagsCaptured = team1count;

                //Has anyone won?
                if (team1count == 0 || team2count == 0)
                {
                    _baseScript._winner = _team;
                    _arena.gameEnd();
                    return;
                }

                Arena.FlagState team1Flag = _arena._flags.Values.OrderByDescending(f => f.posX).Where(f => f.team == _team).First();
                Arena.FlagState team2Flag = _arena._flags.Values.OrderBy(f => f.posX).Where(f => f.team == _botTeam).First();

                int unowned = _arena._flags.Values.Where(f => f.team != _team && f.team != _botTeam).Count();

                _activePoints.Clear();

                if (unowned > 0)
                {
                    _activePoints.Add(_allPoints.FirstOrDefault(p => p._flag.team != _team && p._flag.team != _botTeam));
                }
                else
                {
                    _activePoints.Add(_allPoints.FirstOrDefault(p => p._flag == team1Flag));
                    _activePoints.Add(_allPoints.FirstOrDefault(p => p._flag == team2Flag));
                }

                foreach (Player p in _arena.Players)
                {
                    Helpers.Object_Flags(p, _flags);
                }
            }

            foreach (CapturePoint point in _activePoints)
            {
                point.poll(now);
            }

            pollBots(now);
        }
Ejemplo n.º 15
0
        public void gameStart()
        {
            if (_arena.ActiveTeams.Count() == 0)
            {
                return;
            }

            _arena.flagReset();
            _arena.flagSpawn();

            _flags     = _arena._flags.Values.OrderBy(f => f.posX).ToList();
            _allPoints = new List <CapturePoint>();

            _totalFlags = _flags.Count;


            _baseScript._lastSpawn = new Dictionary <string, Helpers.ObjectState>();

            foreach (Player player in _team2.ActivePlayers)
            {
                Helpers.ObjectState lastKnown = new Helpers.ObjectState();
                lastKnown.positionX = 20224;
                lastKnown.positionY = 992;
                _baseScript._lastSpawn.Add(player._alias, lastKnown);
            }

            foreach (Player player in _team1.ActivePlayers)
            {
                Helpers.ObjectState lastKnown = new Helpers.ObjectState();
                lastKnown.positionX = 14512;
                lastKnown.positionY = 1824;
                _baseScript._lastSpawn.Add(player._alias, lastKnown);
            }


            int flagcount = 1;

            foreach (Arena.FlagState flag in _flags)
            {
                if (flagcount <= 19)
                {
                    flag.team = cqTeam1;
                }
                if (flagcount >= 21)
                {
                    flag.team = cqTeam2;
                }
                flagcount++;

                _allPoints.Add(new CapturePoint(_arena, flag, _baseScript));
            }

            foreach (Player p in _arena.Players)
            {
                Helpers.Object_Flags(p, _flags);
            }


            Arena.FlagState team1Flag = _flags.OrderByDescending(f => f.posX).Where(f => f.team == cqTeam1).First();
            Arena.FlagState team2Flag = _flags.OrderBy(f => f.posX).Where(f => f.team == cqTeam2).First();

            _activePoints = new List <CapturePoint>();
            _activePoints.Add(_allPoints.FirstOrDefault(p => p._flag == team1Flag));
            _activePoints.Add(_allPoints.FirstOrDefault(p => p._flag == team2Flag));
            _activePoints.Add(_allPoints.FirstOrDefault(p => p._flag.team == null));


            UpdateTickers();

            int timer = 1800 * 100;


            //Let everyone know
            _arena.sendArenaMessage("Game has started! The team with control of the most flags at the end of the game wins.");
            _arena.setTicker(1, 3, timer, "Time Left: ",
                             delegate()
            {
                //Check for a winner before we call gameEnd
                checkForWinner(true);
                //Trigger game end
                _arena.gameEnd();
            }
                             );
        }
Ejemplo n.º 16
0
 private void onCapture(Arena.FlagState flag)
 {
 }
Ejemplo n.º 17
0
        public void poll(int now)
        {
            List <Player> playersInArea = new List <Player>();
            int           attackers     = 0;
            int           defenders     = 0;

            Arena.FlagState flag = _flags.FirstOrDefault(f => f == _flag);

            playersInArea = _arena.getPlayersInRange(posX, posY, _flagCaptureRadius).Where(p => !p.IsDead).ToList();

            Team attacker = _arena.ActiveTeams.FirstOrDefault(t => t != flag.team);

            attackers = playersInArea.Count(p => p._team != flag.team);
            defenders = playersInArea.Count(p => p._team == flag.team);

            if (now - tickLastPointer >= 2000)
            {
                Helpers.ObjectState state  = new Helpers.ObjectState();
                Helpers.ObjectState target = new Helpers.ObjectState();
                state.positionX = posX;
                state.positionY = posY;
                int index = _flags.IndexOf(flag);

                if (flag.team != null)
                {
                    if (flag.team._name == "Titan Militia")
                    {
                        if (index + 1 < _flags.Count)
                        {
                            target.positionX = _flags[index + 1].posX;
                            target.positionY = _flags[index + 1].posY;
                        }
                    }

                    if (flag.team._name == "Collective Military")
                    {
                        if (index - 1 >= 0)
                        {
                            target.positionX = _flags[index - 1].posX;
                            target.positionY = _flags[index - 1].posY;
                        }
                    }

                    byte fireAngle = Helpers.computeLeadFireAngle(state, target, 6500 / 1000);
                    Helpers.Player_RouteExplosion(flag.team.ActivePlayers, 1128, posX, posY, 0, fireAngle, 0);

                    tickLastPointer = now;
                }
            }

            if (attackers == 0 && defenders == 0)
            {
                tickStartCapture = 0;
            }

            if (attackers > defenders)
            {
                if (now - tickLastWave >= 2500)
                {
                    Helpers.Player_RouteExplosion(_arena.Players, 3059, posX, posY, 0, 0, 0);
                    tickLastWave = now;
                }

                if (tickStartCapture != 0 && attackers > 0)
                {
                    int quickCaptureMod = ((attackers - 1) * 1000);
                    tickStartCapture -= quickCaptureMod;
                }

                if (tickStartCapture != 0 && now - tickStartCapture >= 10000)
                {
                    _arena.triggerMessage(0, 500, String.Format("{0} has taken control of the {1} capture point...", attacker._name, name));
                    _flags.FirstOrDefault(f => f == flag).team = attacker;

                    foreach (Player player in playersInArea.Where(p => p._team == flag.team))
                    {
                        _baseScript.StatsCurrent(player).flagCaptures++;
                    }

                    //Call our capture event, if it exists
                    if (Captured != null)
                    {
                        Captured(_flag);
                    }

                    tickStartCapture = 0;
                }
                else if (tickStartCapture == 0)
                {
                    tickStartCapture = now;
                }
            }

            if (defenders > attackers)
            {
                if (now - tickLastWave >= 2500)
                {
                    //Helpers.Player_RouteExplosion(_arena.Players, 3059, posX, posY, 0, 0, 0);
                    tickLastWave = now;

                    tickStartCapture = 0;
                }
            }
            else
            {
                if (attackers == defenders && attackers > 0 && defenders > 0)
                {
                    if (now - tickLastWave >= 1500)
                    {
                        Helpers.Player_RouteExplosion(_arena.Players, 3060, posX, posY, 0, 0, 0);
                        tickLastWave = now;
                    }
                    tickStartCapture = 0;
                }
            }
        }
Ejemplo n.º 18
0
        /// <summary>
        /// Spawns a specific flag
        /// </summary>
        public void flagSpawn(Arena.FlagState fs)
        {   //Set offsets
            int levelX = arena._server._assets.Level.OffsetX * 16;
            int levelY = arena._server._assets.Level.OffsetY * 16;

            //Its passed the initial stuff, lets activate
            bool bActive = true;

            //Give it some valid coordinates
            int attempts = 0;

            do
            {   //Make sure we're not doing this infinitely
                if (attempts++ > 200)
                {
                    Log.write(TLog.Error, "Unable to satisfy flag spawn for '{0}'.", fs.flag);
                    bActive = false;
                    break;
                }

                fs.posX    = (short)(fs.flag.GeneralData.OffsetX - levelX);
                fs.posY    = (short)(fs.flag.GeneralData.OffsetY - levelY);
                fs.oldPosX = fs.posX;
                fs.oldPosY = fs.posY;

                //Taken from Math.cs
                //For random flag spawn if applicable
                int lowerX  = fs.posX - ((short)fs.flag.GeneralData.Width / 2);
                int higherX = fs.posX + ((short)fs.flag.GeneralData.Width / 2);
                int lowerY  = fs.posY - ((short)fs.flag.GeneralData.Height / 2);
                int higherY = fs.posY + ((short)fs.flag.GeneralData.Height / 2);

                //Clamp within the map coordinates
                int mapWidth  = (arena._server._assets.Level.Width - 1) * 16;
                int mapHeight = (arena._server._assets.Level.Height - 1) * 16;

                lowerX  = Math.Min(Math.Max(0, lowerX), mapWidth);
                higherX = Math.Min(Math.Max(0, higherX), mapWidth);
                lowerY  = Math.Min(Math.Max(0, lowerY), mapHeight);
                higherY = Math.Min(Math.Max(0, higherY), mapHeight);

                //Randomly generate some coordinates!
                int tmpPosX = ((short)arena._rand.Next(lowerX, higherX));
                int tmpPosY = ((short)arena._rand.Next(lowerY, higherY));

                //Check for allowable terrain drops
                int terrainID = arena.getTerrainID(tmpPosX, tmpPosY);
                for (int terrain = 0; terrain < 15; terrain++)
                {
                    if (terrainID == terrain && fs.flag.FlagData.FlagDroppableTerrains[terrain] == 1)
                    {
                        fs.posX    = (short)tmpPosX;
                        fs.posY    = (short)tmpPosY;
                        fs.oldPosX = fs.posX;
                        fs.oldPosY = fs.posY;
                        break;
                    }
                }

                //Check the terrain settings
                if (arena.getTerrain(fs.posX, fs.posY).flagTimerSpeed == 0)
                {
                    continue;
                }
            }while (arena.getTile(fs.posX, fs.posY).Blocked);

            fs.team    = null;
            fs.carrier = null;
            fs.bActive = bActive;

            Helpers.Object_Flags(arena.Players, fs);
        }