SteamWar/BungeeCore
Archiviert
13
2

Ranked #306

Zusammengeführt
Lixfel hat 25 Commits von Ranked nach master 2022-03-13 20:26:16 +01:00 zusammengeführt
Besitzer
  • Datenbank anpassung!
  • Emblem vor dem Namen
  • Anpassung text für Season
  • Rangliste -> Vllt erstmal später?
  • Platzierungsabfrage
  • grund neu berechnung (von komplettem Datensatz)
- [ ] Datenbank anpassung! - [x] Emblem vor dem Namen - [ ] Anpassung text für Season - [ ] Rangliste -> Vllt erstmal später? - [ ] Platzierungsabfrage - [ ] grund neu berechnung (von komplettem Datensatz)
YoyoNow hat 7 Commits 2022-03-10 22:18:04 +01:00 hinzugefügt
Add SchemElo
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
621cb64fb3
Add UserElo
Remove Elo.java
Add UserGroup shortforms
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
54753ce1f8
Update stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
b6e1e80b00
Fix FightEndsPacket
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
28e2ca8d17
Merge branch 'FixRanked' into Ranked
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
07199cdffc
Add elo calculations
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
64cb91a454
Update elo calculations
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
7be744eb45
YoyoNow hat 1 Commit 2022-03-11 10:12:06 +01:00 hinzugefügt
Update UserElo
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
530171c2e3
YoyoNow hat 1 Commit 2022-03-11 10:53:21 +01:00 hinzugefügt
Update UserElo
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
3ee878f26e
Update BungeeCore
YoyoNow hat 1 Commit 2022-03-11 11:12:33 +01:00 hinzugefügt
Add UserElo.getFightsOfSeason
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
e26692fdd2
Add Season.getSeasonStart
YoyoNow hat 1 Commit 2022-03-11 11:21:28 +01:00 hinzugefügt
Add Emblem to Chat
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
e570b3544d
YoyoNow hat 1 Commit 2022-03-11 12:05:06 +01:00 hinzugefügt
Merge branch 'master' into Ranked
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
0707ca7e64
YoyoNow hat 1 Commit 2022-03-11 12:05:26 +01:00 hinzugefügt
Fix UserElo
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
201174497e
Lixfel hat 2022-03-11 12:31:47 +01:00 Änderungen angefragt
@ -33,0 +41,4 @@
return;
}
double playerRatio = 1 - (Math.min(fightEndsPacket.getBluePlayers().size(), fightEndsPacket.getRedPlayers().size()) / (double )Math.max(fightEndsPacket.getBluePlayers().size(), fightEndsPacket.getRedPlayers().size()));
Besitzer

Diese Ratio-Berechnung finde ich komplexer als nötig, sollte sich einfacher formulieren lassen

Diese Ratio-Berechnung finde ich komplexer als nötig, sollte sich einfacher formulieren lassen
Autor
Besitzer

Hast du eine Idee, ich wüsste nicht wie außer das ich das 1- rausnehmen kann

Hast du eine Idee, ich wüsste nicht wie außer das ich das 1- rausnehmen kann
Besitzer

ratio = bluePlayerSize > redPlayerSize ? redPlayerSize / bluePlayerSize : bluePlayerSize / redPlayerSize

if ratio < 0.6 return;

ratio = bluePlayerSize > redPlayerSize ? redPlayerSize / bluePlayerSize : bluePlayerSize / redPlayerSize if ratio < 0.6 return;
YoyoNow markierte diese Unterhaltung als gelöst
@ -33,0 +46,4 @@
return;
}
int blueSchemOwner = SchemNode.getSchematicOwner(fightEndsPacket.getBlueSchem());
Besitzer

Statt schemOwner könntest du dir hier direkt bluePublic etc. speichern (weil das brauchst du dann ja mehrfach unten)

Statt schemOwner könntest du dir hier direkt bluePublic etc. speichern (weil das brauchst du dann ja mehrfach unten)
YoyoNow markierte diese Unterhaltung als gelöst
@ -33,0 +49,4 @@
int blueSchemOwner = SchemNode.getSchematicOwner(fightEndsPacket.getBlueSchem());
int redSchemOwner = SchemNode.getSchematicOwner(fightEndsPacket.getRedSchem());
if ((blueSchemOwner == 0 && redSchemOwner != 0) || (blueSchemOwner != 0 && redSchemOwner == 0)) {
Besitzer

Das müsste ein XOR ^ sein

Das müsste ein XOR ^ sein
YoyoNow markierte diese Unterhaltung als gelöst
@ -33,0 +76,4 @@
int playerElo = UserElo.getElo(bluePlayer, fightEndsPacket.getGameMode()).orElse(1000);
UserElo.setElo(bluePlayer, fightEndsPacket.getGameMode(), (int) Math.round(playerElo + K * (blueResult - blueWinExpectation)));
}
for (int redPlayer : fightEndsPacket.getRedPlayers()) {
Besitzer

Du hast hier sehr viel Codedopplung drin, würde mir eine teamunabhängige Abstrahierung wünschen.

Du hast hier sehr viel Codedopplung drin, würde mir eine teamunabhängige Abstrahierung wünschen.
YoyoNow markierte diese Unterhaltung als gelöst
@ -228,6 +227,35 @@ public class ChatListener extends BasicListener {
BungeeCore.log(sender.getServer().getInfo(), msg);
}
private static String getEmblem(SteamwarUser user) {
Besitzer

Das hier bei jeder einzelnen Chatnachricht durchzuführen ist sehr wahrscheinlich performanceproblematisch. Besser wäre hier ein Cache und ich würde die Emblemberechnung eher ungerne hier im ChatListener drin haben wollen, eher in UserElo.

Das hier bei jeder einzelnen Chatnachricht durchzuführen ist sehr wahrscheinlich performanceproblematisch. Besser wäre hier ein Cache und ich würde die Emblemberechnung eher ungerne hier im ChatListener drin haben wollen, eher in UserElo.
Autor
Besitzer

Ich muss aber alle gecached embleme killen, wenn es einen neuen max gibt und für dich wenn du eine neue elo erhälst richtig?

Ich muss aber alle gecached embleme killen, wenn es einen neuen max gibt und für dich wenn du eine neue elo erhälst richtig?
Besitzer

Es reicht auch, wenn es nach einer Stunde angepasst wird...

Es reicht auch, wenn es nach einer Stunde angepasst wird...
Autor
Besitzer

Würde ich lieber nicht machen, ich würde gerne sie so schnell geupdated wie möglich haben.

Würde ich lieber nicht machen, ich würde gerne sie so schnell geupdated wie möglich haben.
Besitzer

Dann kannst du die Embleme dennoch cachen. Und ob sie so schnell geupdatet werden wie möglich oder nicht, dazwischen liegen bis zu 3 Kämpfe (in etwa).... Es ist also ziemlich egal und dafür ein heidenaufwand, das Echtzeit zu halten.

Dann kannst du die Embleme dennoch cachen. Und ob sie so schnell geupdatet werden wie möglich oder nicht, dazwischen liegen bis zu 3 Kämpfe (in etwa).... Es ist also ziemlich egal und dafür ein heidenaufwand, das Echtzeit zu halten.
Autor
Besitzer

Ich sehe jetzt nicht unbedingt so viel aufwand darin, guck dir gleich einfach mal meine Lösung an und mecker dann gerne nochmal rum, dann schmeiße ich es gerne weiter raus.

Ich sehe jetzt nicht unbedingt so viel aufwand darin, guck dir gleich einfach mal meine Lösung an und mecker dann gerne nochmal rum, dann schmeiße ich es gerne weiter raus.
YoyoNow markierte diese Unterhaltung als gelöst
@ -231,0 +247,4 @@
}
private static String getEmblem(int maxEloOfPlayer, int maxEloOfGameMode) {
if (maxEloOfPlayer > maxEloOfGameMode * 0.99) return "§5❂ ";
Besitzer

Würde ohne Space bevorzugen (Platz), muss man aber mal sehen, wie es aussieht

Würde ohne Space bevorzugen (Platz), muss man aber mal sehen, wie es aussieht
Autor
Besitzer

Ich würde persönlich gerne ein leerzeichen zwischen dem Emblem und dem Rang haben, ich glaube das entzerrt das ganze ein wenig, weil so ist es halt direkt daran, was auch nicht unbedingt perfekt ist.

Ich würde persönlich gerne ein leerzeichen zwischen dem Emblem und dem Rang haben, ich glaube das entzerrt das ganze ein wenig, weil so ist es halt direkt daran, was auch nicht unbedingt perfekt ist.
Lixfel markierte diese Unterhaltung als gelöst
@ -0,0 +24,4 @@
private static final Statement elo = new Statement("SELECT SchemElo FROM Elo WHERE SchemID = ? AND Season = ?");
private static final Statement setElo = new Statement("UPDATE SchemElo SET Elo = ? WHERE Season = ? AND SchemID = ?");
// private static final Statement place = new Statement("SELECT COUNT(*) AS Place FROM SchemElo WHERE Elo > ? AND Season = ?");
Besitzer

Wird vorrausichtlich Ingame nie benötigt (MC Chat ist nicht unbedingt praktisch zum Anzeigen von Bestenlisten)

Wird vorrausichtlich Ingame nie benötigt (MC Chat ist nicht unbedingt praktisch zum Anzeigen von Bestenlisten)
YoyoNow markierte diese Unterhaltung als gelöst
@ -0,0 +19,4 @@
package de.steamwar.bungeecore.sql;
public class SchemNode {
Besitzer

Es gibt schon eine SchematicNode-Klasse

Es gibt schon eine SchematicNode-Klasse
YoyoNow markierte diese Unterhaltung als gelöst
@ -32,1 +32,4 @@
public static String getSeasonStart() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) / 3 * 3 + 1) + "-1";
Besitzer

Das 2022-1-1 Formatting frisst die DB?

Das 2022-1-1 Formatting frisst die DB?
Autor
Besitzer

Scheint so.

Scheint so.
YoyoNow markierte diese Unterhaltung als gelöst
@ -0,0 +31,4 @@
}
private static Integer cachedSeason = null;
private static final Map<Key, Optional<Integer>> userEloCache = new HashMap<>();
Besitzer

Da lieber eine Map<Map<>>, das bläst sich dann weniger auf.

Da lieber eine Map<Map<>>, das bläst sich dann weniger auf.
Autor
Besitzer

Wie meinst du das genau?

Wie meinst du das genau?
Besitzer

HashMaps brauchen zur Kollisionsvermeidung immer Freiraum. Je kleiner die HashMaps bleiben, desto besser.

HashMaps brauchen zur Kollisionsvermeidung immer Freiraum. Je kleiner die HashMaps bleiben, desto besser.
Autor
Besitzer

Würdest du dann GameMode UserId oder UserId GameMode als reihenfolge wählen?

Würdest du dann GameMode UserId oder UserId GameMode als reihenfolge wählen?
Besitzer

Definitiv Map<GameMode, Map<User, >>

Definitiv Map<GameMode, Map<User, >>
YoyoNow markierte diese Unterhaltung als gelöst
@ -0,0 +47,4 @@
private static final Statement maxElo = new Statement("SELECT MAX(Elo) AS MaxElo FROM UserElo WHERE Season = ? AND GameMode = ?");
private static final Statement fightsOfSeason = new Statement("SELECT COUNT(*) AS Fights FROM FightPlayer INNER JOIN Fight F on FightPlayer.FightID = F.FightID WHERE UserID = ? AND GameMode = ? AND UNIX_TIMESTAMP(StartTime) + Duration >= UNIX_TIMESTAMP(?)");
private static void clearCacheIfNeeded(int season) {
Besitzer

Du clearst den Cache eh schon stündlich, das ist häufig genug auch für Seasonänderungen.

Du clearst den Cache eh schon stündlich, das ist häufig genug auch für Seasonänderungen.
YoyoNow markierte diese Unterhaltung als gelöst
@ -0,0 +58,4 @@
}
}
public static Optional<Integer> getElo(int userID, String gameMode) {
Besitzer

Wenn hier eh schon mit Integer gearbeitet wird, kann man das Optional auch weglassen...

Wenn hier eh schon mit Integer gearbeitet wird, kann man das Optional auch weglassen...
Autor
Besitzer

Würde ich ungern, weil so kann man darauf mit .orElse() ziemlich gut einen default direkt auswählen.

Würde ich ungern, weil so kann man darauf mit `.orElse()` ziemlich gut einen default direkt auswählen.
Autor
Besitzer

Und halt Optional.empty() als es gibt keinen wert in der db wählen, macht es für die emblem berechnung angenehmer, als mit einem spezial value zu arbeiten.

Und halt Optional.empty() als es gibt keinen wert in der db wählen, macht es für die emblem berechnung angenehmer, als mit einem spezial value zu arbeiten.
YoyoNow markierte diese Unterhaltung als gelöst
@ -0,0 +62,4 @@
return getElo(Season.getSeason(), userID, gameMode);
}
public static Optional<Integer> getElo(int season, int userID, String gameMode) {
Besitzer

Wie häufig/welche Ingame-Teile werden jemals NICHT die aktuelle Season abfragen?

Wie häufig/welche Ingame-Teile werden jemals NICHT die aktuelle Season abfragen?
Autor
Besitzer

gute Frage, glaube nichts also raus damit.

gute Frage, glaube nichts also raus damit.
YoyoNow markierte diese Unterhaltung als gelöst
@ -0,0 +93,4 @@
return getMaxElo(Season.getSeason(), gameMode);
}
public static int getMaxElo(int season, String gameMode) {
Besitzer

Wann ist season hier != currentSeason?

Wann ist season hier != currentSeason?
YoyoNow markierte diese Unterhaltung als gelöst
@ -0,0 +115,4 @@
setElo(Season.getSeason(), userId, gameMode, elo);
}
public static void setElo(int season, int userId, String gameMode, int elo) {
Besitzer

Selbe Frage

Selbe Frage
YoyoNow markierte diese Unterhaltung als gelöst
@ -0,0 +133,4 @@
return getPlacement(Season.getSeason(), elo, gameMode);
}
public static int getPlacement(int season, int elo, String gameMode) {
Besitzer

.

.
YoyoNow markierte diese Unterhaltung als gelöst
@ -34,0 +28,4 @@
Developer("§3", "§f", "Dev", true, true, true, true),
Moderator("§c", "§f", "Mod", true, true, true, true),
Supporter("§9", "§f", "Sup", false, true, true, true),
Builder("§2", "§f", "Archi", false, true, false, true),
Besitzer

Über das Kürzel werden sich die Architekten aber freuen.

Über das Kürzel werden sich die Architekten aber freuen.
Autor
Besitzer

Hast du eine Bessere Idee?

Hast du eine Bessere Idee?
Besitzer

Frag doch mal die Builder

Frag doch mal die Builder
Autor
Besitzer

Habe ich LordMainex meint Arch würde gehen.

Habe ich LordMainex meint Arch würde gehen.
YoyoNow markierte diese Unterhaltung als gelöst
YoyoNow hat 1 Commit 2022-03-11 13:21:00 +01:00 hinzugefügt
Update some stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
4e5bd18ef9
YoyoNow hat 1 Commit 2022-03-11 13:23:53 +01:00 hinzugefügt
Update some stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
68ba6a26f7
YoyoNow hat 1 Commit 2022-03-11 13:27:21 +01:00 hinzugefügt
Update UserGroup Builder nach Absprache mit denen
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
0b452d30c3
YoyoNow hat 1 Commit 2022-03-11 13:31:42 +01:00 hinzugefügt
Update UserElo.gameModeUserEloCache
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2923d249db
YoyoNow hat ein Review von Lixfel 2022-03-11 14:25:48 +01:00 angefragt
Lixfel hat 2022-03-11 15:01:11 +01:00 überprüft
Lixfel hat einen Kommentar hinterlassen
Besitzer

Schaut jetzt schon mal ganz ok aus

Schaut jetzt schon mal ganz ok aus
@ -27,2 +35,4 @@
public class FightEndsHandler implements SpigotHandler {
private int K = 20;
Besitzer

Man könnte überlegen, ob man den K-Wert nicht vom Seasonstatus abhängig macht... Am Anfang der Season deutlich größer und dann kleiner werdend...

Man könnte überlegen, ob man den K-Wert nicht vom Seasonstatus abhängig macht... Am Anfang der Season deutlich größer und dann kleiner werdend...
Autor
Besitzer

Klingt interessant. Jedoch weiß ich nicht ob wir das wirklich am Anfang machen wollen, ich würde es erstmal so lassen, aber vllt in einer Überarbeitung dann ändern ok?

Klingt interessant. Jedoch weiß ich nicht ob wir das wirklich am Anfang machen wollen, ich würde es erstmal so lassen, aber vllt in einer Überarbeitung dann ändern ok?
Lixfel markierte diese Unterhaltung als gelöst
@ -0,0 +41,4 @@
private static final Statement maxElo = new Statement("SELECT MAX(Elo) AS MaxElo FROM UserElo WHERE Season = ? AND GameMode = ?");
private static final Statement fightsOfSeason = new Statement("SELECT COUNT(*) AS Fights FROM FightPlayer INNER JOIN Fight F on FightPlayer.FightID = F.FightID WHERE UserID = ? AND GameMode = ? AND UNIX_TIMESTAMP(StartTime) + Duration >= UNIX_TIMESTAMP(?)");
public static Optional<Integer> getElo(int userID, String gameMode) {
Besitzer

Mach es doch wie in der SchemElo und gib die Default-Elo zurück, wenn es keine gibt... Falls du eine Funktion brauchst, wo es relevant ist, ob überhaupt eine exisitiert, dann habe das doch als 2 verschiedene Funktionen. Damit würde dann z.B. der FightEndsHandler nichts mehr von der Default-Elo wissen müssen

Mach es doch wie in der SchemElo und gib die Default-Elo zurück, wenn es keine gibt... Falls du eine Funktion brauchst, wo es relevant ist, ob überhaupt eine exisitiert, dann habe das doch als 2 verschiedene Funktionen. Damit würde dann z.B. der FightEndsHandler nichts mehr von der Default-Elo wissen müssen
Autor
Besitzer

Ist das so in Ordnung wie ich das gemacht habe?

Ist das so in Ordnung wie ich das gemacht habe?
Lixfel markierte diese Unterhaltung als gelöst
YoyoNow hat 1 Commit 2022-03-11 16:45:04 +01:00 hinzugefügt
Update FightEndsHandler
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
0d7ebc224c
Update UserElo
Lixfel hat 2022-03-11 16:49:04 +01:00 Änderungen angefragt
@ -26,1 +31,4 @@
import java.util.List;
import static de.steamwar.bungeecore.sql.UserElo.ELO_DEFAULT;
Besitzer

Bitte überall mal deine Imports aufräumen! (Warum hast du das nicht autoaktiviert?)

Bitte überall mal deine Imports aufräumen! (Warum hast du das nicht autoaktiviert?)
Autor
Besitzer

Keine ahnung

Keine ahnung
Lixfel markierte diese Unterhaltung als gelöst
Autor
Besitzer

Wie ist das denn nun mit Emblem ein leerzeichen hinter dem zeichen und so.

Wie ist das denn nun mit Emblem ein leerzeichen hinter dem zeichen und so.
YoyoNow hat ein Review von Lixfel 2022-03-11 16:53:44 +01:00 angefragt
YoyoNow hat 1 Commit 2022-03-11 16:54:07 +01:00 hinzugefügt
Update imports
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
febc7035d5
Lixfel hat die Änderungen 2022-03-11 17:04:24 +01:00 genehmigt
Lixfel hat einen Kommentar hinterlassen
Besitzer

Leerzeichen ist mir Wumpe! Bitte testen.

Leerzeichen ist mir Wumpe! Bitte testen.
Autor
Besitzer

Also soll ich die noch einfügen, weil so sieht es nicht gut aus!

Also soll ich die noch einfügen, weil so sieht es nicht gut aus!
YoyoNow hat 1 Commit 2022-03-11 17:08:11 +01:00 hinzugefügt
Update UserElo.getEmblem
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
4f76442193
YoyoNow hat 1 Commit 2022-03-11 17:32:25 +01:00 hinzugefügt
Fix UserElo
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
5daf7f64a4
YoyoNow hat den Titel von WIP: Ranked (wipisch) zu Ranked 2022-03-11 17:33:36 +01:00 geändert
Autor
Besitzer

Ist soweit getestet, bin aber noch die nächste Zeit da, falls was schiefgeht.

Ist soweit getestet, bin aber noch die nächste Zeit da, falls was schiefgeht.
YoyoNow hat 1 Commit 2022-03-11 20:07:20 +01:00 hinzugefügt
Update UserElo.getEmblem percentages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2bd15d5c4f
YoyoNow hat 1 Commit 2022-03-11 20:14:01 +01:00 hinzugefügt
Update FightEndsHandler
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
e015641086
YoyoNow hat 1 Commit 2022-03-11 20:14:43 +01:00 hinzugefügt
Update FightEndsHandler
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
ef320718ef
Lixfel hat die Änderungen 2022-03-11 23:46:03 +01:00 genehmigt
Lixfel hat einen Kommentar hinterlassen
Besitzer

Datenbankanpassung nötig (Fight, UserElo, SchemElo). Ankündigung empfohlen.

Datenbankanpassung nötig (Fight, UserElo, SchemElo). Ankündigung empfohlen.
Lixfel hat 1 Commit 2022-03-13 09:09:57 +01:00 hinzugefügt
Merge branch 'master' into Ranked
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
24b249acf7
Lixfel hat 1 Commit 2022-03-13 09:13:32 +01:00 hinzugefügt
Fix SchemElo
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2de1eee79c
Signed-off-by: Lixfel <agga-games@gmx.de>
Lixfel hat die Änderungen 2022-03-13 09:14:26 +01:00 genehmigt
Lixfel hat Commit e34dfa9166 in master 2022-03-13 20:26:16 +01:00 gemerged
Lixfel löschte die Branch Ranked 2022-03-13 20:26:16 +01:00
Dieses Repo ist archiviert. Du kannst Pull-Requests nicht kommentieren.
Keine Beschreibung angegeben.