Пример #1
0
        // ------------------------------------
        // Add Player Tab
        // ------------------------------------
        private void addPlayerButton_Click(object sender, EventArgs e)
        {
            Person person = new Person();
            person.Name = addPlayerBox.Text;
            person.Team = addTeamBox.Text;
            person.Characters = addCharacterBox.Text;
            person.Mu = startMu;
            person.Sigma = startSigma;

            addPlayerBox.Clear();
            addTeamBox.Clear();
            addCharacterBox.Clear();

            playerList.Add(person);
            rebuildPlayerSelection();

            addTeamBox.Select();
        }
        // Confirm Import. Process all matches in selected event.
        private void importButton_Click(object sender, EventArgs e)
        {
            foreach (ImportPlayer p in challongePlayerList)
            {
                if (p.SKLink == " << Create New Player >>")
                {
                    if (!playerNames.Contains(p.Name))
                    {
                        Person person = new Person();
                        person.Name = p.Name;
                        importPlayers.Add(person);
                    }
                }
                else if (p.SKLink != p.Name)
                {
                    addAlts.Add(p.SKLink + "\t" + p.Name);
                }
            }

            foreach (Fizzi.Libraries.ChallongeApiWrapper.Match m in portal.GetMatches(curTourney.Id))
            {
                if (m.State == "complete")
                {
                    createMatch(m.Player1Id.ToString(), m.Player2Id.ToString(), m.WinnerId.ToString());
                }
            }

            this.Close();
        }
Пример #3
0
        // ------------------------------------
        // View/Modify Tab
        // ------------------------------------
        private void modifySelector_SelectedIndexChanged(object sender, EventArgs e)
        {
            Person person = new Person();
            foreach (Person p1 in playerList)
            {
                if (p1.Name == modifySelector.Text)
                {
                    person = p1;
                }
            }

            modifyPlayerButton.Enabled = true;
            modifyDeleteButton.Enabled = true;

            modifyTeamBox.Text = person.Team;
            modifyNameBox.Text = person.Name;
            modifyCharacterBox.Text = person.Characters;

            modifyHideCheck.Checked = person.Invisible;

            modifyAltsBox.Clear();
            foreach (String alt in person.Alts)
            {
                modifyAltsBox.Text += alt + ";";
            }
            if(modifyAltsBox.Text.Length > 0)
                modifyAltsBox.Text = modifyAltsBox.Text.Substring(0, modifyAltsBox.Text.Length - 1);

            modifyMuBox.Text = person.Mu.ToString();
            modifySigmaBox.Text = person.Sigma.ToString();
            modifyScoreBox.Text = person.Score.ToString();
            modifyWLDBox.Text = person.Wins + " -- " + person.Losses + " -- " + person.Draws + " (" + person.WinPercent + "%)";

            String details = "INDIVIDUAL MATCH TALLY:\r\n";

            foreach (Person opponent in playerList)
            {
                if (opponent.Name != person.Name)
                {
                    int wins = 0;
                    int losses = 0;
                    int draws = 0;
                    foreach (Match match in matchList)
                    {
                        if (match.Player1 == opponent.Name && match.Player2 == person.Name)
                        {
                            if (match.Winner == 1)
                                losses++;
                            else if (match.Winner == 2)
                                wins++;
                            else if (match.Winner == 0)
                                draws++;
                        }
                        else if (match.Player1 == person.Name && match.Player2 == opponent.Name)
                        {
                            if (match.Winner == 1)
                                wins++;
                            else if (match.Winner == 2)
                                losses++;
                            else if (match.Winner == 0)
                                draws++;
                        }
                    }
                    if(wins + losses + draws > 0)
                        details += opponent.Name + " -- " + wins + "/" + losses + "/" + draws + "\r\n";
                }
            }
            details += "\r\nMATCH HISTORY:\r\n";

            foreach (Match match in matchList)
            {
                if (match.Player2 == person.Name)
                {
                    if (match.Winner == 1)
                        details += "LOSS vs " + match.Player1 + " (" + match.P2Score + " vs " + match.P1Score + ", " + (match.P2Score2 - match.P2Score) + ") -- " + match.Description + " -- " + match.Timestamp.Date.ToShortDateString() + "\r\n";
                    else if (match.Winner == 2)
                        details += "WIN vs " + match.Player1 + " (" + match.P2Score + " vs " + match.P1Score + ", " + (match.P2Score2 - match.P2Score) + ") -- " + match.Description + " -- " + match.Timestamp.Date.ToShortDateString() + "\r\n";
                    else if (match.Winner == 0)
                        details += "DRAW vs " + match.Player1 + " (" + match.P2Score + " vs " + match.P1Score + ", " + (match.P2Score2 - match.P2Score) + ") -- " + match.Description + " -- " + match.Timestamp.Date.ToShortDateString() + "\r\n";
                }
                else if (match.Player1 == person.Name)
                {
                    if (match.Winner == 1)
                        details += "WIN vs " + match.Player2 + " (" + match.P1Score + " vs " + match.P2Score + ", " + (match.P1Score2 - match.P1Score) + ") -- " + match.Description + " -- " + match.Timestamp.Date.ToShortDateString() + "\r\n";
                    else if (match.Winner == 2)
                        details += "LOSS vs " + match.Player2 + " (" + match.P1Score + " vs " + match.P2Score + ", " + (match.P1Score2 - match.P1Score) + ") -- " + match.Description + " -- " + match.Timestamp.Date.ToShortDateString() + "\r\n";
                    else if (match.Winner == 0)
                        details += "DRAW vs " + match.Player2 + " (" + match.P1Score + " vs " + match.P2Score + ", " + (match.P1Score2 - match.P1Score) + ") -- " + match.Description + " -- " + match.Timestamp.Date.ToShortDateString() + "\r\n";
                }
            }

            modifyDetailBox.Text = details;
        }
Пример #4
0
        private void player2Box_SelectedIndexChanged(object sender, EventArgs e)
        {
            p1WinButton.Enabled = false;
            p2WinButton.Enabled = false;
            drawButton.Enabled = false;

            Person person = new Person();
            Boolean p1Valid = false;
            foreach (Person p1 in playerList)
            {
                if (p1.Name == player2Selector.Text)
                {
                    person = p1;
                }
                if (p1.Name == player1Selector.Text)
                {
                    person = p1;
                    p1Valid = true;
                }
            }

            refreshScoreBoxes();

            if (player1Selector.Text != player2Selector.Text && p1Valid)
            {
                p1WinButton.Enabled = true;
                p2WinButton.Enabled = true;
                drawButton.Enabled = true;
            }
        }
Пример #5
0
        private void fileImportGlickoButton_Click(object sender, EventArgs e)
        {
            importFileDialog.Filter = "GLK files (*.glk)|*.glk|CSV files (*.csv)|*.csv|All files (*.*)|*.*";

            if (importFileDialog.ShowDialog() == DialogResult.OK)
            {
                StreamReader sr = new StreamReader(importFileDialog.FileName);

                using (sr)
                {
                    String line;
                    String[] row;

                    while ((line = sr.ReadLine()) != null)
                    {
                        if (line.Equals("--==--"))
                            break;

                        row = line.Split(',');
                        if (row.Length < 8)
                            return;

                        Person p = new Person();
                        p.Team = row[0];
                        p.Name = row[1];

                        Boolean alreadyExists = false;
                        foreach (Person pl in playerList)
                        {
                            if (pl.Name == p.Name)
                            {
                                alreadyExists = true;
                                break;
                            }
                        }

                        if (!alreadyExists)
                        {
                            playerList.Add(p);
                        }
                    }

                    while ((line = sr.ReadLine()) != null)
                    {
                        if (!(line.Equals("//reset,//reset") || line.Equals("//reset,//reset,")))
                        {
                            if (line.Equals("--==--"))
                                break;
                            row = line.Split(',');
                            Match m = new Match();
                            m.Player1 = row[0];
                            m.Player2 = row[1];
                            m.Winner = 1;
                            if (row.Length == 3)
                                m.Description = row[2];
                            m.Order = Toolbox.getNewMatchNumber(matchList, DateTime.Today);

                            matchList.Add(m);
                        }
                    }
                }

                rebuildPlayerSelection();

                matchList = matchList.OrderBy(s => s.Timestamp).ThenBy(s => s.Order).ToList();
                Toolbox.recalcMatches(playerList, matchList, startMu, startSigma, multiplier, decay, decayValue);
                buildHistory();
            }
        }
Пример #6
0
        private void fileLoadButton_Click(object sender, EventArgs e)
        {
            if (requireSave)
            {
                DialogResult checkSave = confirmSave();
                if (checkSave == DialogResult.Yes)
                {
                    fileUpdateButton_Click(sender, e);
                }
                else if (checkSave == DialogResult.Cancel)
                    return;
            }

            playerList.Clear();
            matchList.Clear();

            openWorldDialog.Filter = "Bacon files (*.bcn)|*.bcn|SkillKeeper92 files (*.sk92)|*.sk92|All files (*.*)|*.*";

            if (openWorldDialog.ShowDialog() == DialogResult.OK)
            {
                openedWorld = openWorldDialog.FileName;
                requireSave = false;
                progressBar1.Visible = true;
                progressBar1.Value = 0;
                progressLabel.Visible = true;

                var xEle = XElement.Load(openWorldDialog.FileName);
                Int32 totalItems = xEle.Element("Players").Elements("Player").Count() + xEle.Element("Matches").Elements("Match").Count();
                Int32 progress = 0;

                if (xEle.Element("Settings") != null)
                {
                    multiplier = Int32.Parse(xEle.Element("Settings").Attribute("Multiplier").Value);
                    if(xEle.Element("Settings").Attribute("MinMatches") != null)
                        minMatches = UInt32.Parse(xEle.Element("Settings").Attribute("MinMatches").Value);
                    decay = UInt16.Parse(xEle.Element("Settings").Attribute("Decay").Value);
                    if (xEle.Element("Settings").Attribute("DecayValue") != null)
                        decayValue = UInt32.Parse(xEle.Element("Settings").Attribute("DecayValue").Value);
                    else
                        decayValue = 1;
                    settingsMultiplierBox.Text = multiplier.ToString();
                }

                progressLabel.Text = "Loading players...";
                progressLabel.Refresh();
                foreach (XElement player in xEle.Element("Players").Elements("Player"))
                {
                    Person person = new Person();
                    person.Name = player.Attribute("Name").Value;
                    person.Team = player.Attribute("Team").Value;
                    person.Invisible = Boolean.Parse(player.Attribute("Invisible").Value);
                    person.Characters = player.Attribute("Characters").Value;
                    person.AltsString = player.Attribute("Alts").Value;

                    playerList.Add(person);

                    progress++;
                    progressBar1.Value = (progress * 100) / totalItems;
                    progressBar1.PerformStep();
                    progressBar1.Refresh();
                }

                progressLabel.Text = "Loading matches...";
                progressLabel.Refresh();
                foreach (XElement m in xEle.Element("Matches").Elements("Match"))
                {
                    Match match = new Match();
                    match.Timestamp = DateTime.Parse(m.Attribute("Timestamp").Value);
                    match.Order = UInt32.Parse(m.Attribute("Order").Value);
                    if(m.Attribute("Description") != null)
                        match.Description = m.Attribute("Description").Value;
                    if (m.Attribute("ID") != null)
                        match.ID = m.Attribute("ID").Value;
                    else
                        match.ID = Guid.NewGuid().ToString("N");
                    match.Player1 = m.Attribute("Player1").Value;
                    match.Player2 = m.Attribute("Player2").Value;
                    match.Winner = UInt16.Parse(m.Attribute("Winner").Value);

                    matchList.Add(match);

                    progress++;
                    progressBar1.Value = (progress * 100) / totalItems;
                    progressBar1.PerformStep();
                }

                settingsDecayIntBox.Text = decayValue + "";
                switch (decay)
                {
                    case 1:
                        settingsDecayDaily.Checked = true;
                        break;
                    case 2:
                        settingsDecayWeekly.Checked = true;
                        break;
                    case 3:
                        settingsDecayMonthly.Checked = true;
                        break;
                    case 4:
                        settingsDecayYearly.Checked = true;
                        break;
                    case 0:
                        settingsDecayNever.Checked = true;
                        break;
                }

                progressLabel.Text = "Processing players...";
                progressLabel.Refresh();
                rebuildPlayerSelection();

                progressLabel.Text = "Calculating scores...";
                progressLabel.Refresh();
                Toolbox.recalcMatches(playerList, matchList, startMu, startSigma, multiplier, decay, decayValue, progressBar1);

                progressLabel.Text = "Verifying match history...";
                progressLabel.Refresh();
                progressBar1.Refresh();
                buildHistory();

                progressBar1.Visible = false;
                progressLabel.Visible = false;

                requireSave = false;
            }
        }
Пример #7
0
        private void refreshScoreBoxes()
        {
            Person p1 = new Person();
            Person p2 = new Person();
            foreach (Person person in playerList)
            {
                if (person.Name == player1Selector.Text)
                {
                    p1 = person;
                }
                if (person.Name == player2Selector.Text)
                {
                    p2 = person;
                }
            }

            p1MuDisplay.Text = p1.Mu.ToString();
            p1SigmaDisplay.Text = p1.Sigma.ToString();
            p1ScoreDisplay.Text = p1.Score.ToString();
            p2MuDisplay.Text = p2.Mu.ToString();
            p2SigmaDisplay.Text = p2.Sigma.ToString();
            p2ScoreDisplay.Text = p2.Score.ToString();
            p1WLDBox.Text = p1.Wins + " -- " + p1.Losses + " -- " + p1.Draws + " (" + p1.WinPercent + "%)";
            p2WLDBox.Text = p2.Wins + " -- " + p2.Losses + " -- " + p2.Draws + " (" + p2.WinPercent + "%)";

            Player p1s = new Player(1);
            Player p2s = new Player(2);
            Rating p1r = new Rating(p1.Mu, p1.Sigma);
            Rating p2r = new Rating(p2.Mu, p2.Sigma);
            Team t1 = new Team(p1s, p1r);
            Team t2 = new Team(p2s, p2r);

            matchQualBox.Text = (TrueSkillCalculator.CalculateMatchQuality(GameInfo.DefaultGameInfo, Teams.Concat(t1, t2)) * 100).ToString();
            
        }
Пример #8
0
        private void combinePlayers(String player1, String player2)
        {
            Person oldP = new Person(), newP = new Person();
            foreach (Person p in playerList)
            {
                if (p.Name == player1)
                {
                    oldP = p;
                }
                else if (p.Name == player2)
                {
                    newP = p;
                }
            }

            foreach (String alt in oldP.Alts)
            {
                newP.Alts.Add(alt);
            }
            newP.Alts.Add(oldP.Name);

            foreach (Match m in matchList)
            {
                if (m.Player1 == player1)
                    m.Player1 = player2;
                else if (m.Player2 == player1)
                    m.Player2 = player2;
            }
            modifySelector.Text = player2;

            playerList.Remove(oldP);
            rebuildPlayerSelection();

            matchList = matchList.OrderBy(s => s.Timestamp).ThenBy(s => s.Order).ToList();
            Toolbox.recalcMatches(playerList, matchList, startMu, startSigma, multiplier, decay, decayValue);
            buildHistory();

            requireSave = true;
        }
Пример #9
0
        private void updatePlayerMatch(UInt16 winner)
        {
            Person p1 = new Person();
            Person p2 = new Person();
            foreach (Person person in playerList)
            {
                if (person.Name == player1Selector.Text)
                {
                    p1 = person;
                }
                if (person.Name == player2Selector.Text)
                {
                    p2 = person;
                }
            }

            Player p1s = new Player(1);
            Player p2s = new Player(2);
            Rating p1r = new Rating(p1.Mu, p1.Sigma);
            Rating p2r = new Rating(p2.Mu, p2.Sigma);
            Team t1 = new Team(p1s, p1r);
            Team t2 = new Team(p2s, p2r);

            IDictionary<Player, Rating> newRatings = null;

            if(winner == 0)
                newRatings = TrueSkillCalculator.CalculateNewRatings(GameInfo.DefaultGameInfo, Teams.Concat(t1, t2), 1, 1);
            else if(winner == 1)
                newRatings = TrueSkillCalculator.CalculateNewRatings(GameInfo.DefaultGameInfo, Teams.Concat(t1, t2), 1, 2);
            else if(winner == 2)
                newRatings = TrueSkillCalculator.CalculateNewRatings(GameInfo.DefaultGameInfo, Teams.Concat(t1, t2), 2, 1);

            p1.Mu = newRatings[p1s].Mean;
            p1.Sigma = newRatings[p1s].StandardDeviation;
            p2.Mu = newRatings[p2s].Mean;
            p2.Sigma = newRatings[p2s].StandardDeviation;

            foreach (Person person in playerList)
            {
                if (person.Name == player1Selector.Text)
                {
                    person.Mu = p1.Mu;
                    person.Sigma = p1.Sigma;
                    if (winner == 0)
                        person.Draws++;
                    else if (winner == 1)
                        person.Wins++;
                    else if (winner == 2)
                        person.Losses++;
                }
                if (person.Name == player2Selector.Text)
                {
                    person.Mu = p2.Mu;
                    person.Sigma = p2.Sigma;
                    if (winner == 0)
                        person.Draws++;
                    else if (winner == 1)
                        person.Losses++;
                    else if (winner == 2)
                        person.Wins++;
                }
            }

            requireSave = true;

            refreshScoreBoxes();
        }
Пример #10
0
        // Confirm Import. Process all matches in selected event.
        private void importButton_Click(object sender, EventArgs e)
        {
            foreach (ImportPlayer p in tioList)
            {
                if (p.SKLink == " << Create New Player >>")
                {
                    if (!playerNames.Contains(p.Name))
                    {
                        Person person = new Person();
                        person.Name = p.Name;
                        importPlayers.Add(person);
                    }
                }
                else if (p.SKLink != p.Name)
                {
                    addAlts.Add(p.SKLink + "\t" + p.Name);
                }
            }

            foreach (XElement tioEvent in xEle.Element("EventList").Element("Event").Element("Games").Elements("Game"))
            {
                if (tioEvent.Element("Name").Value == eventSelector.Text)
                {
                    if (tioEvent.Element("Bracket").Element("Pools") != null)
                        foreach (XElement pool in tioEvent.Element("Bracket").Element("Pools").Elements("Pool"))
                            foreach (XElement match in pool.Element("Matches").Elements("Match"))
                                createMatch(match);
                    else foreach (XElement match in tioEvent.Element("Bracket").Element("Matches").Elements("Match"))
                            createMatch(match);
                }
            }
            if (hasFinals1)
                importMatches.Add(finals1);
            if (hasFinals2)
                importMatches.Add(finals2);

            this.Close();
        }