Ranked #306
@ -20,17 +20,28 @@
|
||||
package de.steamwar.bungeecore.comms.handlers;
|
||||
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
import de.steamwar.bungeecore.ArenaMode;
|
||||
import de.steamwar.bungeecore.comms.SpigotHandler;
|
||||
import de.steamwar.bungeecore.comms.packets.FightEndsPacket;
|
||||
import de.steamwar.bungeecore.sql.SchemElo;
|
||||
import de.steamwar.bungeecore.sql.SchemNode;
|
||||
import de.steamwar.bungeecore.sql.SchematicType;
|
||||
import de.steamwar.bungeecore.sql.UserElo;
|
||||
import net.md_5.bungee.api.config.ServerInfo;
|
||||
|
||||
public class FightEndsHandler implements SpigotHandler {
|
||||
|
||||
private int K = 20;
|
||||
Lixfel markierte diese Unterhaltung als gelöst
Veraltet
|
||||
|
||||
@Override
|
||||
public void handle(ByteArrayDataInput in, ServerInfo info) {
|
||||
FightEndsPacket fightEndsPacket = new FightEndsPacket(in);
|
||||
Lixfel markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
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...
YoyoNow
hat
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?
|
||||
|
||||
double playerRatio = Math.min(fightEndsPacket.getBluePlayers().size(), fightEndsPacket.getRedPlayers().size()) / (double )Math.max(fightEndsPacket.getBluePlayers().size(), fightEndsPacket.getRedPlayers().size());
|
||||
if (!ArenaMode.getBySchemType(SchematicType.fromDB(fightEndsPacket.getGameMode())).isRanked()) {
|
||||
return;
|
||||
}
|
||||
|
||||
double playerRatio = 1 - (Math.min(fightEndsPacket.getBluePlayers().size(), fightEndsPacket.getRedPlayers().size()) / (double )Math.max(fightEndsPacket.getBluePlayers().size(), fightEndsPacket.getRedPlayers().size()));
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Lixfel
hat
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
YoyoNow
hat
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
Lixfel
hat
ratio = bluePlayerSize > redPlayerSize ? redPlayerSize / bluePlayerSize : bluePlayerSize / redPlayerSize if ratio < 0.6 return; ratio = bluePlayerSize > redPlayerSize ? redPlayerSize / bluePlayerSize : bluePlayerSize / redPlayerSize
if ratio < 0.6 return;
|
||||
if (playerRatio >= 0.4) {
|
||||
return;
|
||||
}
|
||||
@ -44,5 +55,31 @@ public class FightEndsHandler implements SpigotHandler {
|
||||
blueResult = 0;
|
||||
}
|
||||
|
||||
int blueSchemOwner = SchemNode.getSchematicOwner(fightEndsPacket.getBlueSchem());
|
||||
int redSchemOwner = SchemNode.getSchematicOwner(fightEndsPacket.getRedSchem());
|
||||
|
||||
if ((blueSchemOwner == 0 && redSchemOwner != 0) || (blueSchemOwner != 0 && redSchemOwner == 0)) {
|
||||
return;
|
||||
}
|
||||
|
||||
int blueSchemElo = SchemElo.getElo(fightEndsPacket.getBlueSchem());
|
||||
int redSchemElo = SchemElo.getElo(fightEndsPacket.getRedSchem());
|
||||
|
||||
double blueWinExpectation = 1 / (1 + Math.pow(10, (redSchemElo - blueSchemElo) / 600f));
|
||||
double redWinExpectation = 1 / (1 + Math.pow(10, (blueSchemElo - redSchemElo) / 600f));
|
||||
|
||||
SchemElo.setElo(fightEndsPacket.getBlueSchem(), (int) Math.round(blueSchemElo + K * (blueResult - blueWinExpectation)));
|
||||
SchemElo.setElo(fightEndsPacket.getRedSchem(), (int) Math.round(redSchemElo + K * (1 - blueResult - redWinExpectation)));
|
||||
|
||||
if (blueSchemOwner != 0 && redSchemOwner != 0) {
|
||||
for (int bluePlayer : fightEndsPacket.getBluePlayers()) {
|
||||
int playerElo = UserElo.getElo(bluePlayer, fightEndsPacket.getGameMode());
|
||||
UserElo.setElo(bluePlayer, fightEndsPacket.getGameMode(), (int) Math.round(playerElo + K * (blueResult - blueWinExpectation)));
|
||||
}
|
||||
for (int redPlayer : fightEndsPacket.getRedPlayers()) {
|
||||
YoyoNow markierte diese Unterhaltung als gelöst
Veraltet
Lixfel
hat
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.
|
||||
int playerElo = UserElo.getElo(redPlayer, fightEndsPacket.getGameMode());
|
||||
UserElo.setElo(redPlayer, fightEndsPacket.getGameMode(), (int) Math.round(playerElo + K * (1 - blueResult - redWinExpectation)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren
Bitte überall mal deine Imports aufräumen! (Warum hast du das nicht autoaktiviert?)
Keine ahnung