From 6a5c8336cf178fb6a30cfacabf09ddc4512ea67a Mon Sep 17 00:00:00 2001 From: "Joseph Prezioso Jr." Date: Wed, 20 Apr 2016 14:52:06 -0400 Subject: [PATCH] Elo and Division fixed Elo and Division should be displaying properly Cleaned the code up a bit Added endElo() to Game.java to handle team Elo code Added event listener to check for GameState.End in TDM to call endElo() --- .../src/mineplex/core/elo/EloManager.java | 199 ++++++++++-------- .../src/mineplex/core/elo/EloPlayer.java | 38 +++- .../src/mineplex/core/elo/EloRepository.java | 92 +++----- .../src/mineplex/core/elo/EloTeam.java | 2 +- .../src/nautilus/game/arcade/game/Game.java | 130 ++++++++---- .../game/games/common/CaptureTheFlag.java | 8 +- .../arcade/game/games/common/Domination.java | 16 +- .../game/games/common/TeamDeathmatch.java | 97 ++------- .../game/games/turfforts/TurfForts.java | 14 +- .../arcade/managers/GameLobbyManager.java | 28 ++- 10 files changed, 330 insertions(+), 294 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloManager.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloManager.java index 06e2647f7..a8342c68a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloManager.java @@ -41,7 +41,7 @@ public class EloManager extends MiniDbClientPlugin public void addToPlayerElos(EloPlayer player, String gameType) { NautHashMap playerInfo = new NautHashMap(); - playerInfo.put(player.getUniqueId(), player.Rating); + playerInfo.put(player.getUniqueId(), player.rating); _playerElos.put(gameType, playerInfo); } @@ -66,8 +66,9 @@ public class EloManager extends MiniDbClientPlugin //If this works, we will never hit the return at the bottom try { - elo = _repository.getRepoElo(uuid.toString(), /*gameType*/"Testing"); - //Bukkit.broadcastMessage("Fetching Elo..."); + //gameType replaced with "Testing" for test purposes + elo = _repository.getRepoElo(uuid.toString(), "Testing" /*gameType*/); + //Bukkit.broadcastMessage("Fetching Elo..." + getElo(uuid, "Testing")); return elo; } catch (SQLException e) @@ -95,6 +96,14 @@ public class EloManager extends MiniDbClientPlugin System.out.println("Old " + result + " Team Rating:" + teamA.TotalElo); + int teamASize = teamA.getPlayers().size(); + int teamBSize = teamB.getPlayers().size(); + + if(teamASize < 1) + { + teamASize = 1; + } + int newTotal = _ratingSystem.getNewRating(teamA.TotalElo / teamA.getPlayers().size(), teamB.TotalElo / teamB.getPlayers().size(), result) * teamA.getPlayers().size(); System.out.println("New " + result + " Team Rating:" + newTotal); @@ -103,7 +112,7 @@ public class EloManager extends MiniDbClientPlugin { EloPlayer newPlayer = new EloPlayer(); newPlayer.setUniqueId(player.getUniqueId()); - newPlayer.Rating = (int)(player.Rating + ((double)player.Rating / (double)teamA.TotalElo) * (newTotal - teamA.TotalElo)); + newPlayer.rating = (int)(player.rating + ((double)player.rating / (double)teamA.TotalElo) * (newTotal - teamA.TotalElo)); System.out.println("Old:"); player.printInfo(); @@ -119,16 +128,12 @@ public class EloManager extends MiniDbClientPlugin public void saveElo(UUID uuid, String gameType, int elo) { - //Bukkit.broadcastMessage("SAVE_ELO - EloManager (uuid type) called"); - //String playerDiv = getPlayerDivision(uuid, gameType); - saveElo(uuid.toString(), /*gameType*/"Testing", elo); - //saveDivision(uuid.toString(), gameType, playerDiv); + saveElo(uuid.toString(), "Testing" /*gameType*/, elo); } public void saveElo(final String uuid, final String gameType, final int elo) { - //Bukkit.broadcastMessage("SAVE_ELO - EloManager (String type) called"); - + //Bukkit.broadcastMessage("EloManager saveElo called"); Bukkit.getServer().getScheduler().runTaskAsynchronously(getPlugin(), new Runnable() { public void run() @@ -136,15 +141,14 @@ public class EloManager extends MiniDbClientPlugin try { //it hits this, but doesn't hit the message below. - _repository.saveElo(uuid, gameType, elo); - Bukkit.broadcastMessage("Attempting to save " + elo + " as Elo from repository..."); + _repository.saveElo(uuid, "Testing" /*gameType*/, elo); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); - Bukkit.broadcastMessage("EloManager SaveElo (string) - CATCH hit"); } //Doesn't hit any of this, to my knowledge - JP + /* synchronized (_playerEloLock) { //Bukkit.broadcastMessage("EloManager SaveElo (string) - _playerEloLock synchronized..."); @@ -155,42 +159,15 @@ public class EloManager extends MiniDbClientPlugin { //Bukkit.broadcastMessage("EloManager SaveElo (string) - gameType found in _playerElos"); _playerElos.get(uuid).put(gameType, elo); - //Bukkit.broadcastMessage("Attempting to save " + elo + " as Elo from hash map..."); + } } } + */ } }); } - //save divisons the same way that we're saving Elos - public void saveDivision(final String uuid, final String gameType, final String division) - { - Bukkit.getServer().getScheduler().runTaskAsynchronously(getPlugin(), new Runnable() - { - public void run() - { - try { - _repository.saveDivision(uuid, gameType, division); - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - synchronized (_playerEloLock) - { - if (_playerDivisions.containsKey(uuid)) - { - if (_playerDivisions.get(uuid).containsKey(gameType)) - { - _playerDivisions.get(uuid).put(gameType, division); - } - } - } - } - }); - } - //get a player's Division public String getPlayerDivision(UUID uuid, String gameType) { @@ -198,59 +175,109 @@ public class EloManager extends MiniDbClientPlugin int playerElo = 1000; try { - playerElo = _repository.getRepoElo(uuid.toString(), gameType); + //gameType replaced with "Testing" for test purposes + playerElo = _repository.getRepoElo(uuid.toString(), "Testing" /*gameType*/); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } - //this list will be filled with ELO's from other players (but only for the same game type - ArrayList allElos = new ArrayList(); + //gameType replaced with "Testing" for test purposes + String pDivision = CalculateDivision(playerElo, "Testing" /*gameType*/); - for(int i = 0; i < _playerElos.size(); i++) - { - //we're only concerned with this Game Type - if(_playerElos.containsKey(gameType)) - { - //add elo's to the list - - allElos.add(_playerElos.get(uuid.toString()).get(gameType)); - } - } - //sort list of Elos (needed for percentile calculations) - Collections.sort(allElos); - - //Calculate how much going up one spot is worth - double individualValue = (100/allElos.size()); - - /* lastIndexOf gets the last instance of player's Elo - * Consequently, it should be easier for rank to go up than down - * and everyone at the same Elo should be in the same division - */ - double percentile = allElos.lastIndexOf(playerElo) * individualValue; - - return CalculateDivision(playerElo, percentile); + return pDivision; } - public String CalculateDivision(int playerElo, double divPercent) + //calculate percentile into which player falls (above 99 is the top 1%) + public double getEloPercent(int playerElo, String gameType) { - if (playerElo >= 3500 && divPercent > 99) return "Diamond"; - if (playerElo >= 3500) return "Emerald 3"; - if (playerElo < 3500 && playerElo >= 3300) return "Emerald 2"; - if (playerElo < 3300 && playerElo >= 3100) return "Emerald 1"; - if (playerElo < 3100 && playerElo >= 2900) return "Lapis 3"; - if (playerElo < 2900 && playerElo >= 2700) return "Lapis 2"; - if (playerElo < 2700 && playerElo >= 2500) return "Lapis 1"; - if (playerElo < 2500 && playerElo >= 2300) return "Gold 3"; - if (playerElo < 2300 && playerElo >= 2100) return "Gold 2"; - if (playerElo < 2100 && playerElo >= 1900) return "Gold 1"; - if (playerElo < 1900 && playerElo >= 1700) return "Iron 3"; - if (playerElo < 1700 && playerElo >= 1500) return "Iron 2"; - if (playerElo < 1500 && playerElo >= 1300) return "Iron 1"; - if (playerElo < 1300 && playerElo >= 800) return "Coal 3"; - if (playerElo < 800 && playerElo >= 600) return "Coal 2"; - if (playerElo < 600 && playerElo >= 400) return "Coal 1"; + //this list will be filled with ELO's from other players (but only for the same game type + ArrayList allElos = new ArrayList(); + try { + //gameType replaced with "Testing" for test purposes + allElos = _repository.getAllElos( "Testing" /*gameType*/); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + //sort list of Elos (needed for percentile calculations) + Collections.sort(allElos); + + double individualValue = 0; + + //let's not allow the division of things by 0... + if (allElos.size() != 0) + { + //Calculate how much going up one spot is worth + try + { + individualValue = (100/allElos.size()); + } + catch(Error e) + { + e.printStackTrace(); + } + } + + /* lastIndexOf gets the last instance of player's Elo + * Consequently, it should be easier for rank to go up than down + * and everyone at the same Elo should be in the same division + */ + double percentile = allElos.lastIndexOf(playerElo) * individualValue; + + return percentile; + } + + //only bother calculating percentile if players actually have above 3500 elo + public String CalculateDiamondPlayers(int playerElo, String gameType) + { + String newDivision = "Emerald 3"; - return "Result not found"; + if(getEloPercent(playerElo, gameType) > 99) + { + newDivision = "Diamond"; + } + + return newDivision; + } + + //return a string representing a player's division, based on elo + public String CalculateDivision(int playerElo, String gameType) + { + String pDiv = "Player's division"; + + if (playerElo >= 3500) + {pDiv = CalculateDiamondPlayers(playerElo, gameType);} + if (playerElo < 3500 && playerElo >= 3300) + {pDiv = "Emerald 2";} + if (playerElo < 3300 && playerElo >= 3100) + {pDiv = "Emerald 1";} + if (playerElo < 3100 && playerElo >= 2900) + {pDiv = "Lapis 3";} + if (playerElo < 2900 && playerElo >= 2700) + {pDiv = "Lapis 2";} + if (playerElo < 2700 && playerElo >= 2500) + {pDiv = "Lapis 1";} + if (playerElo < 2500 && playerElo >= 2300) + {pDiv = "Gold 3";} + if (playerElo < 2300 && playerElo >= 2100) + {pDiv = "Gold 2";} + if (playerElo < 2100 && playerElo >= 1900) + {pDiv = "Gold 1";} + if (playerElo < 1900 && playerElo >= 1700) + {pDiv = "Iron 3";} + if (playerElo < 1700 && playerElo >= 1500) + {pDiv = "Iron 2";} + if (playerElo < 1500 && playerElo >= 1300) + {pDiv = "Iron 1";} + if (playerElo < 1300 && playerElo >= 1100) + {pDiv = "Coal 3";} + if (playerElo < 1100 && playerElo >= 900) + {pDiv = "Coal 2";} + if (playerElo < 900 && playerElo >= 700) + {pDiv = "Coal 1";} + + return pDiv; } @Override diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloPlayer.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloPlayer.java index 066ea4ec6..987744cef 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloPlayer.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloPlayer.java @@ -3,11 +3,13 @@ package mineplex.core.elo; public class EloPlayer { private String _uniqueId; - public int Rating; + public int rating; + private int _killBonus; + private boolean _fullBonus = false; public void printInfo() { - System.out.println(_uniqueId + "'s elo is " + Rating); + System.out.println(_uniqueId + "'s elo is " + rating); } public String getUniqueId() @@ -20,4 +22,36 @@ public class EloPlayer _uniqueId = uuid; } + //bonus points awarded for kills/objectives, but no more than 10 + public int getKillBonus() + { + return _killBonus; + } + + public void setKillBonus(int bonus) + { + if (_killBonus < 10 && !_fullBonus) + { + _killBonus = bonus; + } + if (_killBonus > 10) + { + _killBonus = 10; + _fullBonus = true; + } + } + + public void incrementKillBonus(int toAdd) + { + if (_killBonus < 10 && !_fullBonus) + { + _killBonus += toAdd; + } + if (_killBonus > 10) + { + _killBonus = 10; + _fullBonus = true; + } + } + } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java index cb54cae6c..50c4d50c9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloRepository.java @@ -12,18 +12,17 @@ import mineplex.serverdata.database.ResultSetCallable; import mineplex.serverdata.database.column.ColumnInt; import mineplex.serverdata.database.column.ColumnVarChar; +import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; public class EloRepository extends MinecraftRepository { - private static String CREATE_ELO_TABLE = "CREATE TABLE IF NOT EXISTS eloRating (id INT NOT NULL AUTO_INCREMENT, uuid VARCHAR(256), Testing INT, division VARCHAR(256), PRIMARY KEY (id), UNIQUE INDEX uuid (uuid));"; + private static String CREATE_ELO_TABLE = "CREATE TABLE IF NOT EXISTS eloRating (id INT NOT NULL AUTO_INCREMENT, uuid VARCHAR(256), Testing INT, PRIMARY KEY (id), UNIQUE INDEX uuid (uuid));"; private static String INSERT_ELO = "INSERT INTO eloRatingTest (uuid, $gameType$) VALUES (?, ?) ON DUPLICATE KEY UPDATE $gameType$=VALUES($gameType$);"; - private static String INSERT_DIVISION = "INSERT INTO eloRatingTest (uuid, gameType, division) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE division=VALUES(division);"; //private static String UPDATE_ELO = "UPDATE eloRating SET $gameType$=? WHERE uuid=?;"; private static String SELECT_ELO_BY_UUID = "SELECT $gameType$ FROM eloRatingTest WHERE uuid = ? LIMIT 1"; - private static String SELECT_DIVISION_BY_UUID = "SELECT division FROM eloRatingTest WHERE uuid = ? LIMIT 1"; - private static String UPDATE_DIVISION = "UPDATE eloRatingTest SET division=? WHERE uuid=?;"; - private static String ELO_NEW = "INSERT INTO eloRatingTest (uuid, gameType, elo), values(?, ?, ?);"; + private static String GET_ALL_ELOS = "SELECT $gameType$ FROM eloRating;"; + public EloRepository(JavaPlugin plugin) { @@ -37,12 +36,34 @@ public class EloRepository extends MinecraftRepository //executeUpdate(CREATE_ELO_TABLE); } + //method to return every Elo from DB + public ArrayList getAllElos(String gameType) throws SQLException + { + ArrayList allElos = new ArrayList(); + + //gameType replaced with "Testing" for test purposes + String query = GET_ALL_ELOS.replace("$gameType$", /*gameType*/ "Testing"); + Connection con = getConnection(); + java.sql.Statement stmt = con.createStatement(); + ResultSet rs = stmt.executeQuery(query); + + //ResultSets start at 1, not 0 + while(rs.next()) + { + allElos.add(rs.getInt(0)); + } + + return allElos; + } + //get an elo from the database public int getRepoElo(String uuid, String gameType) throws SQLException { //elo set to 1000 by default final List elo = new ArrayList(); - String query = SELECT_ELO_BY_UUID.replace("$gameType$", gameType); + + //gameType replaced with "Testing" for test purposes + String query = SELECT_ELO_BY_UUID.replace("$gameType$", /*gameType*/ "Testing"); executeQuery(query, new ResultSetCallable() { @Override @@ -63,63 +84,10 @@ public class EloRepository extends MinecraftRepository public void saveElo(String uuid, String gameType, int elo) throws SQLException { - String query = INSERT_ELO.replace("$gameType$", gameType); + //gameType replaced with "Testing" for test purposes + String query = INSERT_ELO.replace("$gameType$", /*gameType*/ "Testing"); executeUpdate(query, new ColumnVarChar("uuid", 256, uuid), new ColumnInt(gameType, elo)); - /*Connection con = getConnection(); - java.sql.PreparedStatement stmt = con.prepareStatement(SELECT_ELO_BY_UUID); - stmt.setString(1, uuid.toString()); - ResultSet rs = stmt.executeQuery(); - - boolean contains = false; - - Bukkit.broadcastMessage("SAVE_ELO - EloRepository called"); - - Bukkit.broadcastMessage("Pre-loop - Result Set Boolean:" + rs.toString()); - - while (rs.next()) - { - Bukkit.broadcastMessage("Result Set Boolean:" + rs.toString()); - contains = true; - //update elo - java.sql.PreparedStatement updateStatement = con.prepareStatement(UPDATE_ELO); - updateStatement.setInt(1, elo); - updateStatement.setString(2, uuid.toString()); - updateStatement.executeUpdate(); - //executeUpdate(UPDATE_ELO, new ColumnInt("elo", elo)); - Bukkit.broadcastMessage("SAVE_ELO - EloRepository: Updating existing elo to " + elo); - } - if(!contains) - { - //insert elo - java.sql.PreparedStatement updateStatement = con.prepareStatement(INSERT_ELO); - updateStatement.setInt(1, elo); - updateStatement.setString(2, uuid.toString()); - updateStatement.executeUpdate(); - //executeUpdate(INSERT_ELO, new ColumnVarChar("uuid", 100, uuid), new ColumnVarChar("gameType", 100, gameType), new ColumnInt("elo", elo)); - Bukkit.broadcastMessage("SAVE_ELO - EloRepository: Adding " + elo + " to " + gameType +" elo database..."); - } - - Bukkit.broadcastMessage("SAVE_ELO - EloRepository: Adding " + elo + " to " + gameType +" elo database...");*/ - } - - public void saveDivision(String uuid, String gameType, String division) throws SQLException - { - Connection con = getConnection(); - java.sql.Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE); - String selectQuery = "SELECT gameType, division FROM eloRating WHERE uuid = '" + uuid + "';"; - ResultSet rs = stmt.executeQuery(selectQuery); - - boolean contains = false; - - while(rs.next()) - { - String updateQuery = "UPDATE eloRating SET division='" + division + "' WHERE uuid = '" + uuid + "' AND gametype = '" + gameType + "';"; - executeUpdate(updateQuery, new ColumnVarChar("elo", 100, uuid)); - } - if(!contains) - { - executeUpdate(INSERT_DIVISION, new ColumnVarChar("uuid", 100, uuid), new ColumnVarChar("gameType", 100, gameType), new ColumnVarChar("division", 100, division)); - } + //Bukkit.broadcastMessage("EloRepo saveElo called"); } public EloClientData loadClientInformation(ResultSet resultSet) throws SQLException diff --git a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloTeam.java b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloTeam.java index 73f54168a..d0d2f0667 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/elo/EloTeam.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/elo/EloTeam.java @@ -11,7 +11,7 @@ public class EloTeam public void addPlayer(EloPlayer player) { - TotalElo += player.Rating; + TotalElo += player.rating; _players.add(player); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index 977d21357..1dc0752ed 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -58,6 +58,7 @@ import mineplex.core.disguise.disguises.DisguisePlayer; import mineplex.core.elo.EloPlayer; import mineplex.core.elo.EloSettings; import mineplex.core.elo.EloTeam; +import mineplex.core.elo.GameResult; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.packethandler.IPacketHandler; import mineplex.core.packethandler.PacketInfo; @@ -312,10 +313,10 @@ public abstract class Game implements Listener public String Winner = "Nobody"; public GameTeam WinnerTeam = null; - + + //ELO //EloSetting - (0 = disabled, 1 = background, 2 = full) - public EloSettings EloSetting = new EloSettings(0); - + public EloSettings EloSetting = new EloSettings(0); public boolean EloRanking = false; public int EloStart = 1000; @@ -1041,7 +1042,6 @@ public abstract class Game implements Listener @EventHandler public void eloStart(PlayerLoginEvent event) { - Bukkit.broadcastMessage("eloStart called in Game. Player's Elo should be saved."); if (EloRanking) { if (Manager.getEloManager().getElo(event.getPlayer().getUniqueId(), GetName()) == -1) @@ -1214,11 +1214,12 @@ public abstract class Game implements Listener UtilTextMiddle.display(winnerText, subColor + "won the game", 20, 120, 20); - //try to do Elo stuff - handleElo(); - + //DO SOME ELO STUFF + + if (AnnounceSilence) Manager.GetChat().Silence(5000, false); + } public void AnnounceEnd(List places) @@ -1274,11 +1275,11 @@ public abstract class Game implements Listener UtilTextMiddle.display(winnerText, subColor + "won the game", 20, 120, 20); - //call adjustPlayerElo - adjustPlayerElo(places); - if (AnnounceSilence) Manager.GetChat().Silence(5000, false); + + //call adjustPlayerElo + adjustPlayerElo(places); } public void Announce(String message) @@ -1340,7 +1341,7 @@ public abstract class Game implements Listener return 0; } - //adjust the elo's of every player, depending on their ranking in the game mode + //INDIVIDUAL ELO -- adjust the elo's of every player, depending on their ranking in the game mode public void adjustPlayerElo(List places) { int averageElo = 0; @@ -1355,8 +1356,26 @@ public abstract class Game implements Listener assignEloPoints(places, averageElo); } + // calculate the average Elos of all players among 2 teams + public int getAverageElos(EloTeam team1, EloTeam team2) + { + EloTeam teamWinner = new EloTeam(); + EloTeam teamLoser = new EloTeam(); + List allPlayers = teamWinner.getPlayers(); + allPlayers.addAll(teamLoser.getPlayers()); + + int averageElo = 0; + for (EloPlayer player : allPlayers) + { + averageElo += player.rating; + } + //average Elo of all players + averageElo = averageElo/allPlayers.size(); + + return averageElo; + } - //method to loop through every player and assign their new Elo + //INDIVIDUAL ELO -- method to loop through every player and assign their new Elo public void assignEloPoints(List places, int averageElo) { for (Player player : UtilServer.getPlayers()) @@ -1726,6 +1745,7 @@ public abstract class Game implements Listener public void endGame(GameTeam winningTeam) { + AnnounceEnd(winningTeam); for (GameTeam team : GetTeamList()) @@ -1741,25 +1761,22 @@ public abstract class Game implements Listener AddGems(player, 10, "Participation", false, false); } - handleElo(); - + //do Elo stuff -- + endElo(); + // End SetState(GameState.End); } - - public void handleElo() + + //handle Elo at end of game -- method can be overridden in different game modes to meet their individual needs + public void endElo() { - UtilTextMiddle.display("HandleElo Called", "at Game AnnounceEnd (team)"); - //Bukkit.broadcastMessage("handleElo called"); + //Bukkit.broadcastMessage("endElo called"); if (EloRanking) { - Bukkit.broadcastMessage("Game Class EloRanking = True"); - + //make a list of all players to help find average Elo EloTeam teamWinner = new EloTeam(); EloTeam teamLoser = new EloTeam(); - - //EloManager may make most of the code below redundant. leaving inactive, pending testing - //Manager.getEloManager().getNewRatings(teamA, teamB, result) for (GameTeam team : GetTeamList()) { @@ -1767,49 +1784,76 @@ public abstract class Game implements Listener { for (Player player : WinnerTeam.GetPlayers(false)) { - Bukkit.broadcastMessage("Game Class WinnerTeam For Loop Reached"); - EloPlayer eloPlayer = new EloPlayer(); eloPlayer.setUniqueId(player.getUniqueId().toString()); - eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); + //GetName() replaced with "Testing" for test purposes + eloPlayer.rating = Manager.getEloManager().getElo(player.getUniqueId(), "Testing" /*GetName()*/); teamWinner.addPlayer(eloPlayer); - eloPlayer.Rating += 25; + //Bukkit.broadcastMessage(player.getName() + "Old Elo: " + eloPlayer.rating); - Manager.getEloManager().addToPlayerElos(eloPlayer, this.GetName()); - - Bukkit.broadcastMessage(player.getName() + " GetTeamList Elo: " + eloPlayer.Rating); - - Manager.getEloManager().saveElo(player.getUniqueId(), GetName(), eloPlayer.Rating); - Bukkit.broadcastMessage(player.getName() + " Post-Save Elo: " + eloPlayer.Rating); + eloPlayer.rating += 25; + //Bukkit.broadcastMessage(player.getName() + "New Elo: " + Manager.getEloManager().getElo(player.getUniqueId(), "Testing" /*GetName()*/)); } } else { for (Player player : team.GetPlayers(false)) { - Bukkit.broadcastMessage("Game Class LosingTeam For Loop Reached"); - EloPlayer eloPlayer = new EloPlayer(); eloPlayer.setUniqueId(player.getUniqueId().toString()); - eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); + + //GetName() replaced with "Testing" for test purposes + eloPlayer.rating = Manager.getEloManager().getElo(player.getUniqueId(), "Testing" /*GetName()*/); teamLoser.addPlayer(eloPlayer); - eloPlayer.Rating -= 15; - - Bukkit.broadcastMessage(player.getName() + " GetTeamList Elo: " + eloPlayer.Rating); - - Manager.getEloManager().saveElo(player.getUniqueId(), GetName(), eloPlayer.Rating); - Bukkit.broadcastMessage(player.getName() + " Post-Save Elo: " + eloPlayer.Rating); + eloPlayer.rating -= 15; } } } + + //NOT CURRENTLY TRACKING ELO MULTIPLIER -- get averageElo of teams + //int averageElo = getAverageElos(teamWinner, teamLoser); + + for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamWinner, teamLoser, GameResult.Win).getPlayers()) + { + //NOT CURRENTLY TRACKING ELO MULTIPLIER -- calculate Elo Multiplier + //int eloMult = this.calculateEloMultiplier(eloPlayer.rating, averageElo); + //eloPlayer.rating += 20 + (5 * eloMult)); + + eloPlayer.rating += 25; + + //GetName() replaced with "Testing" for test purposes + Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), "Testing" /*GetName()*/, eloPlayer.rating); + //Bukkit.broadcastMessage("TDM call to Elomanager.saveElo()"); + } + + for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamLoser, teamWinner, GameResult.Loss).getPlayers()) + { + //NOT CURRENTLY TRACKING ELO MULTIPLIER -- calculate Elo Multiplier + /* + int eloMult = this.calculateEloMultiplier(eloPlayer.rating, averageElo); + + int eloMod = + (5 * eloMult)); + */ + //Bukkit.broadcastMessage("Generic Game End Check Score " + eloPlayer.getUniqueId() + " Old Elo: " + eloPlayer.rating); + + //eloPlayer.rating -= 15 + eloMod; + + eloPlayer.rating -= 15; + + //GetName() replaced with "Testing" for test purposes + Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), "Testing" /*GetName()*/, eloPlayer.rating); + //Bukkit.broadcastMessage("Generic Game End Check Score " + eloPlayer.getUniqueId() + " New Elo: " + eloPlayer.rating); + } + } } - + + @EventHandler public void handleInteractEntityPacket(GameStateChangeEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/CaptureTheFlag.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/CaptureTheFlag.java index 613df95e9..d1a8d9269 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/CaptureTheFlag.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/CaptureTheFlag.java @@ -565,7 +565,7 @@ public class CaptureTheFlag extends TeamGame { EloPlayer eloPlayer = new EloPlayer(); eloPlayer.setUniqueId(player.getUniqueId().toString()); - eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); + eloPlayer.rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); teamWinner.addPlayer(eloPlayer); } @@ -576,7 +576,7 @@ public class CaptureTheFlag extends TeamGame { EloPlayer eloPlayer = new EloPlayer(); eloPlayer.setUniqueId(player.getUniqueId().toString()); - eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); + eloPlayer.rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); teamLoser.addPlayer(eloPlayer); } @@ -585,12 +585,12 @@ public class CaptureTheFlag extends TeamGame for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamWinner, teamLoser, GameResult.Win).getPlayers()) { - Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), GetName(), eloPlayer.Rating); + Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), GetName(), eloPlayer.rating); } for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamLoser, teamWinner, GameResult.Loss).getPlayers()) { - Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), GetName(), eloPlayer.Rating); + Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), GetName(), eloPlayer.rating); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java index 29aad952f..a1aa84a71 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java @@ -330,10 +330,10 @@ public class Domination extends TeamGame { EloPlayer eloPlayer = new EloPlayer(); eloPlayer.setUniqueId(player.getUniqueId().toString()); - eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); + eloPlayer.rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); //Increment Elo (in case it isn't being incremented already) - eloPlayer.Rating += 20; + eloPlayer.rating += 20; teamWinner.addPlayer(eloPlayer); } @@ -344,10 +344,10 @@ public class Domination extends TeamGame { EloPlayer eloPlayer = new EloPlayer(); eloPlayer.setUniqueId(player.getUniqueId().toString()); - eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); + eloPlayer.rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); //Decrement Elo (in case it isn't being decremented already) - eloPlayer.Rating -= 10; + eloPlayer.rating -= 10; teamLoser.addPlayer(eloPlayer); } @@ -356,15 +356,15 @@ public class Domination extends TeamGame for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamWinner, teamLoser, GameResult.Win).getPlayers()) { - eloPlayer.Rating += 20; - Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), GetName(), eloPlayer.Rating); + eloPlayer.rating += 20; + Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), GetName(), eloPlayer.rating); } for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamLoser, teamWinner, GameResult.Loss).getPlayers()) { - eloPlayer.Rating -= 10; - Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), GetName(), eloPlayer.Rating); + eloPlayer.rating -= 10; + Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), GetName(), eloPlayer.rating); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java index d024cbe2d..ced67f3e9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java @@ -2,6 +2,7 @@ package nautilus.game.arcade.game.games.common; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -82,7 +83,7 @@ public class TeamDeathmatch extends TeamGame this.EloRanking = true; this.EloSetting.setEloSetting(2); - this.Manager.getEloManager().generatePlayerElos(this.GetPlayers(false), this.GetName()); + //this.Manager.getEloManager().generatePlayerElos(this.GetPlayers(false), this.GetName()); this.Manager.GetDamage().UseSimpleWeaponDamage = false; @@ -132,7 +133,7 @@ public class TeamDeathmatch extends TeamGame { if (!(event.GetEvent().getEntity() instanceof Player)) return; - + Player killed = (Player)event.GetEvent().getEntity(); SetPlayerState(killed, PlayerState.OUT); @@ -163,7 +164,7 @@ public class TeamDeathmatch extends TeamGame } } } - + @EventHandler public void Health(GameStateChangeEvent event) { @@ -339,9 +340,6 @@ public class TeamDeathmatch extends TeamGame ScoreboardWrite(); - //Announce - AnnounceEnd(winner); - for (GameTeam team : GetTeamList()) { if (WinnerTeam != null && team.equals(WinnerTeam)) @@ -355,80 +353,27 @@ public class TeamDeathmatch extends TeamGame AddGems(player, 10, "Participation", false, false); } - Bukkit.broadcastMessage("TDM AnnounceEnd Called"); - - if (EloRanking) - { - Bukkit.broadcastMessage("TDM EloRanking = True"); - - EloTeam teamWinner = new EloTeam(); - EloTeam teamLoser = new EloTeam(); - - for (GameTeam team : GetTeamList()) - { - if (WinnerTeam != null && team.equals(WinnerTeam)) - { - for (Player player : WinnerTeam.GetPlayers(false)) - { - Bukkit.broadcastMessage("TDM WinnerTeam For Loop Reached"); - - EloPlayer eloPlayer = new EloPlayer(); - eloPlayer.setUniqueId(player.getUniqueId().toString()); - eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); - - teamWinner.addPlayer(eloPlayer); - - eloPlayer.Rating += 25; - - Manager.getEloManager().addToPlayerElos(eloPlayer, this.GetName()); - - Bukkit.broadcastMessage(player.getName() + " GetTeamList Elo: " + eloPlayer.Rating); - - Manager.getEloManager().saveElo(player.getUniqueId(), GetName(), eloPlayer.Rating); - Bukkit.broadcastMessage(player.getName() + " Post-Save Elo: " + eloPlayer.Rating); - - } - } - else - { - for (Player player : team.GetPlayers(false)) - { - EloPlayer eloPlayer = new EloPlayer(); - eloPlayer.setUniqueId(player.getUniqueId().toString()); - eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); - teamLoser.addPlayer(eloPlayer); - - eloPlayer.Rating -= 15; - - Bukkit.broadcastMessage(player.getName() + " GetTeamList Elo: " + eloPlayer.Rating); - - Manager.getEloManager().saveElo(player.getUniqueId(), GetName(), eloPlayer.Rating); - Bukkit.broadcastMessage(player.getName() + " Post-Save Elo: " + eloPlayer.Rating); - - } - } - } - - for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamWinner, teamLoser, GameResult.Win).getPlayers()) - { - eloPlayer.Rating += 25; - Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), GetName(), eloPlayer.Rating); - Bukkit.broadcastMessage(eloPlayer.getUniqueId() + "Post-Save Elo: " + eloPlayer.Rating); - } - - for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamLoser, teamWinner, GameResult.Loss).getPlayers()) - { - eloPlayer.Rating -= 15; - Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), GetName(), eloPlayer.Rating); - Bukkit.broadcastMessage(eloPlayer.getUniqueId() + "Post-Save Elo: " + eloPlayer.Rating); - } - - } - + //Announce End + AnnounceEnd(winner); + //End SetState(GameState.End); } + //call endElo (Game.Java) if the game ends + @EventHandler + public void EloCalc(GameStateChangeEvent event) + { + //relevant if we decide to move this to Game.java + if(EloRanking) + { + if (event.GetState() == GameState.End) + { + endElo(); + } + } + } + @EventHandler(priority = EventPriority.HIGHEST) public void UsableInteract(PlayerInteractEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/turfforts/TurfForts.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/turfforts/TurfForts.java index 550482f26..6246c632b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/turfforts/TurfForts.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/turfforts/TurfForts.java @@ -869,10 +869,10 @@ public class TurfForts extends TeamGame { EloPlayer eloPlayer = new EloPlayer(); eloPlayer.setUniqueId(player.getUniqueId().toString()); - eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); + eloPlayer.rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); teamWinner.addPlayer(eloPlayer); - Bukkit.broadcastMessage(player.getName() + "'s old Elo: " + eloPlayer.Rating); + Bukkit.broadcastMessage(player.getName() + "'s old Elo: " + eloPlayer.rating); } } else @@ -881,23 +881,23 @@ public class TurfForts extends TeamGame { EloPlayer eloPlayer = new EloPlayer(); eloPlayer.setUniqueId(player.getUniqueId().toString()); - eloPlayer.Rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); + eloPlayer.rating = Manager.getEloManager().getElo(player.getUniqueId(), GetName()); teamLoser.addPlayer(eloPlayer); - Bukkit.broadcastMessage(player.getName() + "'s old Elo: " + eloPlayer.Rating); + Bukkit.broadcastMessage(player.getName() + "'s old Elo: " + eloPlayer.rating); } } } for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamWinner, teamLoser, GameResult.Win).getPlayers()) { - Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), GetName(), eloPlayer.Rating); - Bukkit.broadcastMessage(eloPlayer.getUniqueId() + "'s new Elo: " + eloPlayer.Rating); + Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), GetName(), eloPlayer.rating); + Bukkit.broadcastMessage(eloPlayer.getUniqueId() + "'s new Elo: " + eloPlayer.rating); } for (EloPlayer eloPlayer : Manager.getEloManager().getNewRatings(teamLoser, teamWinner, GameResult.Loss).getPlayers()) { - Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), GetName(), eloPlayer.Rating); + Manager.getEloManager().saveElo(eloPlayer.getUniqueId(), GetName(), eloPlayer.rating); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java index a77e3f72b..6028025a6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLobbyManager.java @@ -106,6 +106,7 @@ public class GameLobbyManager implements Listener private NautHashMap _scoreboardMap = new NautHashMap(); private NautHashMap _gemMap = new NautHashMap(); private NautHashMap _eloMap = new NautHashMap(); + private NautHashMap _divisionMap = new NautHashMap(); private NautHashMap _kitMap = new NautHashMap(); private int _oldPlayerCount = 0; @@ -1135,24 +1136,41 @@ public class GameLobbyManager implements Listener objective.getScore(Manager.GetDonation().Get(entry.getKey().getName()).GetGems() + " ").setScore(line--); _gemMap.put(entry.getKey(), Manager.GetDonation().Get(entry.getKey().getName()).GetGems()); + objective.getScore(" ").setScore(line--); //Server objective.getScore(" ").setScore(line--); objective.getScore(C.cAqua + C.Bold + "Server").setScore(line--); objective.getScore(_serverName).setScore(line--); + objective.getScore(" ").setScore(line--); - //ELO - if (Manager.GetGame() != null && Manager.GetGame().EloRanking) + //ELO -- only when full display is set properly + if (Manager.GetGame() != null && Manager.GetGame().EloRanking && Manager.GetGame().EloSetting.getEloSetting() == 2) { objective.getScore(" ").setScore(line--); objective.getScore(C.cPurple + C.Bold + "Elo").setScore(line--); // Remove old entry.getValue().resetScores(_eloMap.get(entry.getKey()) + " "); - // Set new - objective.getScore(Manager.getEloManager().getElo(entry.getKey().getUniqueId(), Manager.GetGame().GetName()) + " ").setScore(line--); - + // Set new -- GetName() replaced with "Testing" for test purposes + objective.getScore(Manager.getEloManager().getElo(entry.getKey().getUniqueId(), "Testing" /*Manager.GetGame().GetName()*/) + " ").setScore(line--); + objective.getScore(" ").setScore(line--); } + + //ELO DIVISION + if (Manager.GetGame() != null && Manager.GetGame().EloRanking && Manager.GetGame().EloSetting.getEloSetting() >= 1) + { + objective.getScore(" ").setScore(line--); + objective.getScore(C.cDPurpleB + C.Bold + "Division").setScore(line--); + + // Remove old + entry.getValue().resetScores(_divisionMap.get(entry.getKey()) + " "); + // Set new + objective.getScore(Manager.getEloManager().getPlayerDivision(entry.getKey().getUniqueId(), "Testing" /* Manager.GetGame().GetName()*/ ) + " ").setScore(line--); + objective.getScore(" ").setScore(line--); + } + + } _oldPlayerCount = UtilServer.getPlayers().length;