Announcement

Collapse
No announcement yet.

Next League

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #31
    Originally posted by kess View Post
    TSL is a fun league if you manage to get into your head that you will be playing with garbage teams alot of times. Just how it is and improving how it was done in S1 probably isnt easy at all(didnt play s2/3/4).

    WBs and Javs were decent most of time, even if u got the ocasional uneven game. As more games were played, the ratings were more set in stone and it ended up evening the teams as the time went by.
    Regarding basing, it was absolute cancer most of the times and i personally did my bare minimum to qualify for medals/finals. Simply wasnt enjoyable for me, but thats my personal opinion.

    In the end, if you dont take it super serious, its a fun league and a great way to keep the zone active. Id be up for that.
    If the rating systems are tweaked, and bots pick better teams, the current population would provide a better playerbase for a successful TSL than any of the prior seasons, in my opinion.

    Comment


    • #32
      rib u dun need prictice man u haf been vsink this game for 15+ yrs u cud show once/twice a week and b the same

      Comment


      • #33
        I already have solutions to the ratings and drafting systems for TSL, did this ages ago it just never got implemented.

        Ratings
        The formulas in this thread produce dollar-values that can be compared between divisions and between basing ships.
        https://forums.trenchwars.com/forum/...ula-discussion

        Drafting
        This is a sample of code from an automated drafter. It picks basing teams like a real captain would, e.g. if you pick a shark and there aren't many sharks I pick a shark. Can provide the full code if needed for someone to actually implement it.
        Code:
        using DraftLibrary.Classes;
        using System.Collections.Generic;
        using System;
        using System.Linq;
        
        namespace DraftLibrary.Algorithms
        {
            class Snake
            {
                public static List<Team> DraftWithCaptain(List<Player> players, List<Team> teams)
                {
                    //// the snake format is still fine for picking with a captain
                    //// it gives the captains a turn in the correct order, like TWDT
        
                    List<int> draftOrder = GetDraftOrder(players, teams);
        
                    for (int i = 0; i < draftOrder.Count; i++)
                    {
                        int teamIndex = draftOrder[i];
        
                        Team currentTeam = teams[teamIndex];
        
                        ////
                        //// I am ALL CAPS picking against ALL THE OTHERS
                        //// 
                        //// work out who we should pick
                        //// we need 1 terr, 2 sharks, 5 spiders
                        //// we know which team we're up against
                        Team opponentTeam = (teamIndex % 2) == 0 ? teams[teamIndex + 1] : teams[teamIndex - 1];
                        //// we have overall, terr, shark, spid ratings.
        
                        // see who's left to pick
                        List<Player> remaining = GetPlayersRemaining(players, teams);
        
                        //// someone might end up in multiple lists, e.g. turban, dreamwin
        
                        // be less selective as the draft progresses.
                        int round = (i + teams.Count) / teams.Count;
        
                        // some constants which vary depending on the ratings used
                        int HighestUsefulRating = 7; /* e.g. 7* at something is worth prioritising over their Overall rating, 6* isn't. */
                        int EliteRating = 10; /* you want to be picking a 10* first */
                        int RoundRelaxation = 1; /* each round, including round 1, reduce pickyness by 1* */
                        // ^ the point of this is that you don't really want to be picking an 8* over a 9/10* in round 1, but in round 2 you might.
        
                        // shortlist remaining sharks
                        List<Player> sharkShortlist = ShortlistSharks(remaining, Math.Max(HighestUsefulRating, EliteRating - (round * RoundRelaxation)));
        
                        // shortlist remaining terrs
                        List<Player> terrShortlist = ShortlistTerrs(remaining, Math.Max(HighestUsefulRating, EliteRating - (round * RoundRelaxation)));
        
                        // shortlist remaining spiders
                        List<Player> spiderShortlist = ShortlistSpiders(remaining, Math.Max(HighestUsefulRating, EliteRating - (round * RoundRelaxation)));
        
                        // I need to know how many turns until my next pick
                        bool haveAnotherPick = false;
                        int turnsUntilNextPick = 0;
                        for (int j = i + 1; j < draftOrder.Count; j++)
                        {
                            if (teamIndex == draftOrder[j])
                            {
                                haveAnotherPick = true;
                                turnsUntilNextPick = j - i;
                                break;
                            }
                        }
        
                        List<Player> solidPicks = new List<Player>();
        
                        if (
                            /* dont pick more than 2 sharks */
                            currentTeam.Sharks.Count < 2
                            /* this logic only works if we have shortlisted sharks available */
                            && sharkShortlist.Count > 0
                            && (
                                /* don't get out sharked */
                                currentTeam.Sharks.Count <= opponentTeam.Sharks.Count
                                /* if you're concerned someone else is going to snipe your shark pick */
                                || (haveAnotherPick && sharkShortlist.Count < turnsUntilNextPick)
                                )
                            )
                        {
                            Player player = GetHighestRatedShark(sharkShortlist);
        
                            if (!solidPicks.Contains(player))
                            {
                                player.Context = "Shark";
                                solidPicks.Add(player);
                            }
                        }
        
                        if (
                           /* don't pick more than 1 terr */
                           currentTeam.Terr.Count < 1
                           /* this logic only works if we have shortlisted terrs available */
                           && terrShortlist.Count > 0
                           && (
                               /* don't get out terred */
                               currentTeam.Terr.Count <= opponentTeam.Terr.Count
                               /* if you're concerned someone else is going to snipe your terr pick */
                               || (haveAnotherPick && terrShortlist.Count < turnsUntilNextPick)
                               )
                           )
                        {
                            Player player = GetHighestRatedTerr(terrShortlist);
        
                            if (!solidPicks.Contains(player))
                            {
                                player.Context = "Terr";
                                solidPicks.Add(player);
                            }
                        }
        
                        if (
                            /* don't pick more than 5 spiders */
                            currentTeam.Spids.Count < 5
                            /* this logic only works if we have shortlisted spiders available */
                            && spiderShortlist.Count > 0
                            && (
                                    /* don't get out spidered */
                                    currentTeam.Spids.Count <= opponentTeam.Spids.Count
                                    /* if you're concerned someone else is going to snipe your spider pick */
                                    || (haveAnotherPick && spiderShortlist.Count < turnsUntilNextPick)
                                )
                            )
                        {
                            Player player = GetHighestRatedSpider(spiderShortlist);
        
                            if (!solidPicks.Contains(player))
                            {
                                player.Context = "Spid";
                                solidPicks.Add(player);
                            }
                        }
        
                        Player pick = null;
        
                        if (solidPicks.Count == 1)
                        {
                            // We found 1 solid pick, just add it.
                            pick = solidPicks[0];
        
                        }
                        else if (solidPicks.Count > 1)
                        {
                            // There's more than 1 player we'd like to pick
                            // We have to resolve it somehow... prefer the default order, but let higher rating override it.
                            Player player = GetHighestRatedSolidPick(solidPicks);
                            pick = player;
                        }
                        else
                        {
                            // fallback, just pick the highest overall rated player
                            Player player = GetHighestRatedPlayer(remaining);
                            player.Context = string.Empty;
                            pick = player;
                        }
        
                        switch (pick.Context)
                        {
                            case "Terr":
                                currentTeam.AddTerr(pick);
                                break;
                            case "Shark":
                                currentTeam.AddShark(pick);
                                break;
                            case "Spid":
                                currentTeam.AddSpid(pick);
                                break;
                            default:
                                currentTeam.AddPlayer(pick);
                                break;
                        }
                    }
        
                    return teams;
                }
        
                private static Player GetHighestRatedSpider(List<Player> spiders)
                {
                    Player player = null;
        
                    foreach (Player p in spiders)
                    {
                        if (player == null) player = p;
        
                        if (p.Spid > player.Spid) player = p;
                    }
        
                    return player;
                }
        
                private static Player GetHighestRatedTerr(List<Player> terrs)
                {
                    Player player = null;
        
                    foreach (Player p in terrs)
                    {
                        if (player == null) player = p;
        
                        if (p.Terr > player.Terr) player = p;
                    }
        
                    return player;
                }
        
                private static Player GetHighestRatedShark(List<Player> sharks)
                {
                    Player player = null;
        
                    foreach (Player p in sharks)
                    {
                        if (player == null) player = p;
        
                        if (p.Shark > player.Shark) player = p;
                    }
        
                    return player;
                }
        
                private static List<int> GetDraftOrder(List<Player> players, List<Team> teams)
                {
                    List<int> draftOrder = new List<int>();
        
                    int teamIndex = 0;
                    string direction = "r";
        
                    // the number of picks matches the number of players
                    for (int i = 0; i < players.Count; i++)
                    {
                        draftOrder.Add(teamIndex);
        
                        // snake
                        switch (direction)
                        {
                            case "r":
                                {
                                    if (teamIndex + 1 == teams.Count)
                                    {
                                        direction = "l";
                                    }
                                    else
                                    {
                                        teamIndex++;
                                    }
        
                                    break;
                                }
        
                            case "l":
                                {
                                    if (teamIndex == 0)
                                    {
                                        direction = "r";
                                    }
                                    else
                                    {
                                        teamIndex--;
                                    }
        
                                    break;
                                }
                        }
                    }
        
                    return draftOrder;
                }
        
                private static List<Player> ShortlistSpiders(List<Player> remaining, int rating)
                {
                    List<Player> shortlist = new List<Player>();
        
                    foreach (Player player in remaining)
                    {
                        if (player.Spid >= rating)
                        {
                            shortlist.Add(player);
                        }
                    }
        
                    return shortlist.OrderByDescending(p => p.Spid).ToList();
                }
        
                private static List<Player> ShortlistTerrs(List<Player> remaining, int rating)
                {
                    List<Player> shortlist = new List<Player>();
        
                    foreach (Player player in remaining)
                    {
                        if (player.Terr >= rating)
                        {
                            shortlist.Add(player);
                        }
                    }
        
                    return shortlist.OrderByDescending(p => p.Terr).ToList();
                }
        
                private static List<Player> ShortlistSharks(List<Player> remaining, int rating)
                {
                    List<Player> shortlist = new List<Player>();
        
                    foreach (Player player in remaining)
                    {
                        if (player.Shark >= rating)
                        {
                            shortlist.Add(player);
                        }
                    }
        
                    return shortlist.OrderByDescending(p => p.Shark).ToList();
                }
        
                private static List<Player> GetPlayersRemaining(List<Player> players, List<Team> teams)
                {
                    List<Player> remaining = new List<Player>();
        
                    foreach (Player player in players)
                    {
                        bool picked = false;
        
                        foreach (Team team in teams)
                        {
                            if (team.Players.Contains(player)) picked = true;
                        }
        
                        if (!picked) remaining.Add(player);
                    }
        
                    return remaining;
                }
        
                public static List<Team> DraftWithoutCaptain(List<Player> players, List<Team> teams)
                {
                    List<int> draftOrder = GetDraftOrder(players, teams);
        
                    foreach (int teamIndex in draftOrder)
                    {
                        Team currentTeam = teams[teamIndex];
        
                        // see who's left to pick
                        List<Player> remaining = GetPlayersRemaining(players, teams);
        
                        Player player = GetHighestRatedPlayer(remaining);
        
                        currentTeam.AddPlayer(player);
                    }
        
                    return teams;
                }
        
                private static Player GetHighestRatedPlayer(List<Player> remaining)
                {
                    Player player = null;
        
                    foreach (Player p in remaining)
                    {
                        if (player == null) player = p;
        
                        if (p.Overall > player.Overall) player = p;
                    }
        
                    return player;
                }
        
                private static Player GetHighestRatedSolidPick(List<Player> remaining)
                {
                    Player player = null;
        
                    foreach (Player p in remaining)
                    {
                        if (player == null) player = p;
        
                        if (p.RatingInContext() > player.RatingInContext()) player = p;
                    }
        
                    return player;
                }
            }
        }

        Comment


        • #34
          Sample output:

          Comment


          • #35
            Originally posted by Claushouse View Post



            TSL ended up creating multiple insane psychos who still stalk and harass me to this day because I ran TSL and gave out warnings and bans (Skyforger, Jessup, etc.) You had players ragequitting games, refusing to play with certain bad players, demanding bans on Jessup because he would just run and extended every game 10 minutes. He would play like 70 jav and 70 wb games which means that he wasted like 140 GP x 10 minutes x 30 or 40 players stuck in spec waiting for the next game equalled:

            One player singlehandedly wasted 840 man hours of our lives running every game per season.


            I was never banned or asked to be banned by ANYONE except you and YOU WERE THE ONE WARNED FOR ABUSE AS A HOST AND FABRICATING LIES ABOUT ME DURING TSL WHICH I SEE YOU STILL ARE FIXATED ON DOING.The reason you quit was because you were told you were unstable and out of control and were urself banned from running things until you cooled down. You are such a twit ogron.

            I do not stalk you at all and never have but these are messages I sometimes still log in to see left by you... God you are such a twit.




            This all said I'd like to see TSL again since I am a defending champion of it . :kiss:
            TWDT-J CHAMPION POWER 2018
            TWDT-B CHAMPION POWER 2018
            TWDT TRIPLE CROWN MEMBER POWER 2018
            TSL TRIPLE CROWN FINALIST 2018
            TSLD CHAMPION 2018
            TSLB CHAMPION 2018

            Comment


            • #36
              Originally posted by Jessup View Post



              I was never banned or asked to be banned by ANYONE except you and YOU WERE THE ONE WARNED FOR ABUSE AS A HOST AND FABRICATING LIES ABOUT ME DURING TSL WHICH I SEE YOU STILL ARE FIXATED ON DOING.The reason you quit was because you were told you were unstable and out of control and were urself banned from running things until you cooled down. You are such a twit ogron.

              I do not stalk you at all and never have but these are messages I sometimes still log in to see left by you... God you are such a twit.




              This all said I'd like to see TSL again since I am a defending champion of it . :kiss:
              Jessup, other than dissolving Paladen, I don't have a problem with you personally, and I have actually protected you behind the scenes in ways you are unaware of. However, you keep derailing league-related threads. You don't have to respond every time someone mentions your name. You can choose not to respond. Stop showing us all how affected you are by others' opinion and perspective of you. Please stop.

              This is not coming from a hateful place, but in all honesty this forum would be a much better place without your outbursts and constant derailing posts. Even if your anger, frustration, and feelings of being disrespected are warranted, you can choose not to engage.

              As things stand, you aren't contributing anything positive to the forum, and it seems that the forums aren't contributing anything positive to your life. I urge you to seriously consider logging out of forums for a while, for everyone's sake (yours included).

              Comment


              • #37
                Originally posted by Pressure View Post

                Jessup, other than dissolving Paladen, I don't have a problem with you personally, and I have actually protected you behind the scenes in ways you are unaware of. However, you keep derailing league-related threads. You don't have to respond every time someone mentions your name. You can choose not to respond. Stop showing us all how affected you are by others' opinion and perspective of you. Please stop.

                This is not coming from a hateful place, but in all honesty this forum would be a much better place without your outbursts and constant derailing posts. Even if your anger, frustration, and feelings of being disrespected are warranted, you can choose not to engage.

                As things stand, you aren't contributing anything positive to the forum, and it seems that the forums aren't contributing anything positive to your life. I urge you to seriously consider logging out of forums for a while, for everyone's sake (yours included).
                Sorry I don't roll over to abuse and never will. I can defend myself vs you or anyone else that comes at me. With that said. Listen to your own advice and go kick rocks. I "derailed" nothing here.

                Again I would like to do TSL.
                TWDT-J CHAMPION POWER 2018
                TWDT-B CHAMPION POWER 2018
                TWDT TRIPLE CROWN MEMBER POWER 2018
                TSL TRIPLE CROWN FINALIST 2018
                TSLD CHAMPION 2018
                TSLB CHAMPION 2018

                Comment


                • #38
                  This is just my personal opinion but I think TWL and TWDT are the only leagues worth playing. I'd suggest we go back to 3 game weekends though so it would only take 1,5 hours of your sunday instead of 3-4 hours. Maybe even start the 2nd and 3rd games right after the last ones have finished

                  Comment


                  • #39
                    Originally posted by maketso View Post
                    Maybe even start the 2nd and 3rd games right after the last ones have finished
                    defo would help uk/eu +1

                    Comment


                    • #40
                      Originally posted by maketso View Post
                      This is just my personal opinion but I think TWL and TWDT are the only leagues worth playing. I'd suggest we go back to 3 game weekends though so it would only take 1,5 hours of your sunday instead of 3-4 hours. Maybe even start the 2nd and 3rd games right after the last ones have finished
                      that's your opinion, but its old and stinky. show some creativity you old fart.
                      2018 TWDT Champion 2019 TWLD Final 4 2019 TWDTJ Semi finalist 2019 2x TWDTD Finalist 2020 TW Forum Mafia Game champion

                      Comment


                      • #41
                        it's like everyone lacks braincells, and wants to only play twl, or twdt. shits getting old, like you.
                        2018 TWDT Champion 2019 TWLD Final 4 2019 TWDTJ Semi finalist 2019 2x TWDTD Finalist 2020 TW Forum Mafia Game champion

                        Comment


                        • #42
                          Some people have expressed TSL becomes less fun the longer you play it.

                          We could just do a Sunday event of TSL.
                          We play a bunch of games to 5 and have finals the same day or next weekend.

                          Lets use Ogrons original rating system with oversight from a league op.
                          Or Rabs , if the system can be implemented and works better.







                          Comment


                          • #43
                            bump
                            https://twd.trenchwars.org/showgame/90112596

                            Retired after i dropped 24 kills and carry the team

                            wbduel Map Maker Legend

                            Comment


                            • #44
                              Originally posted by Cape View Post
                              Lets do all a league where the teams are random every game all season. TWDueling. TWJav. TWBasing. TWSpider.

                              But the catch is, after a certain amount of games, we will tally up player stats and their win/loss ratio to determine the top 10 in Jav/Wb and top 16 in basing.

                              Finals would be basically an all-star team match-up.

                              Example:

                              Best 10 Javs #1 and #9 on a team #2 and #8 on the other team ect.

                              Do it up. This sounds like it would be a lot of fun - and most of all fair for everyone. You could just run it for 4 or 5 weeks too so it doesn't go on for too long.

                              Comment


                              • #45
                                Do TSL but with a teamelim concept. Can either pick your team or just go full random at the beginning of the match. Would your old teamelim maps and settings work for this? Trench Wars Summer Rumble.

                                Comment

                                Working...
                                X