24.10.2017
  • Betrifft Modul
  • tournament2
  • Meldezeitpunkt
  • Dienstag, 30.10.2012 15:51
  • Letzte Änderung
  • Donnerstag, 21.01.2016 23:26
  • Status
  • Behoben
  • Text
  • Wir hatten auf der Lan am WE nen riesen Fail. Bei Single elimination hat das System den 2ten und 3ten Platz vertauscht. Der Baum stimmt, aber die Anzeige in der Rangliste nicht. Wir haben zwar ein paar Anpassungen bei uns im System, aber hier sollte noch alles original LS sein. Ich teste das auch nochmal mit einem frischen System.

Kommentare
     
    PhilmacFLy
    22.04.2013 17:23
    Hast dus jetzt nochmal mit einem frischen System getestet?
    Wohnt ihr in der Oberpfalz?
    Habt mal wieder Bock auf Lan?
    Oder eine Oberpfälzer Community
    Dann joined!
    www.olv-online.org
    quote
    byte
    16.10.2013 00:59
    Ich habs jetzt nochmal mit einem frischen System getestet, leider der gleiche Fehler. Wobei ich das nicht ganz verstehe. Das HAT definitiv funktioniert.. und es wurde auch nix groß geändert. Hab mal auch die letzte große Änderung mal rückgängig gemacht, das gleiche Ergebniss. Ich weiß jetzt auch nicht an was es genau liegt. Was mir aufgefallen ist...

    Nach dem Generieren hab ich 15 Sätze in der t2_games für diese tournamenid. Nach Ende des Turniers knapp 28. Dachte das ist fest nach dem es einmal generiert wurde? Mixt der versehentlich single und double?

    Das Ranking was er bei SE ausgibt basiert wohl auf folgender Abfrage
    Code:
                            // Array für Teams auslesen
                            $teams = $db->qry("SELECT teams.teamid, teams.name, teams.disqualified, MAX(games.round) AS rounds
           FROM %prefix%t2_games AS games
           LEFT JOIN %prefix%t2_teams AS teams ON (teams.leaderid = games.leaderid) AND (teams.tournamentid = games.tournamentid)
           WHERE games.tournamentid = %int% AND games.group_nr = 0 AND NOT ISNULL( teams.name )
           GROUP BY teams.teamid
           ORDER BY teams.disqualified ASC, rounds DESC, games.score DESC
           ", $tournamentid);

    Der Sortiert am Ende nach Score... Sowas kommt dabei raus. PlayerX => x währe die Reale Position.

    Code:
    teamid  name       disqualified     rounds  score
    249     Player1    0                3       0
    250     Player3    0                3       0
    246     Player4    0                2       1
    248     Player2    0                2       0
    247     Player5    0                0       0

    --
    www.synergy-lan.de
    Wir verleihen günstig Strom & Netzwerkequipment an kleinere Lans (bis 150 Teilnehmer)
    99Euro für 7x24Port Clientswitche + Gigabitbackbone (Dualgig-Uplinks) / WE
    Andere Kombinationen auf Anfrage.
    quote
    byte
    31.10.2013 00:20
    Also wir sind der Sache noch weiter auf den Grund gegangen. Der Spielbaum und die Begegnungen passen alle. Nur die Rangliste spinnt dann weil der den Gewinner des "Platz 3" auf einer Stufe mit dem Gewinner setzt. Wenn ich das Spiel um Platz 2 nicht auf ne volle sondern eine halbe Runde runde Setze (im oberen Beispiel währe das R1,5) währe das Ergebniss richtig. Aber dann beendet mir der Turnierbaum vorzeitig das Spiel. Was wir auch nicht verstehen ist warum das System bei 5 Playern die noch in die Runde 3 schieben.

    Da sieht man erstmal wieviel arbeit da in dem Turniermodul steckt und wie komplex die Geschichte ist. Der absolute Wahnsinn.

    --
    www.synergy-lan.de
    Wir verleihen günstig Strom & Netzwerkequipment an kleinere Lans (bis 150 Teilnehmer)
    99Euro für 7x24Port Clientswitche + Gigabitbackbone (Dualgig-Uplinks) / WE
    Andere Kombinationen auf Anfrage.
    quote
    the
    10.11.2013 00:39
    Also so kompliziert kann es dann auch nicht sein, wenn wir auf unserer Lan im Suff (betrunkenen Zustand) das Problem lösen konnten.

    Erweitere mein Gehirn Lernsaft

    Datei class_tournament.php:
    Code:
    case "single":
                    // Array für Teams auslesen
                    $teams = $db->qry("SELECT teams.teamid, teams.name, teams.disqualified, MAX(games.round) AS rounds, FLOOR(games.position/2) AS pos
         FROM (SELECT tournamentid, leaderid, round, position, score, group_nr FROM %prefix%t2_games where round = (SELECT MAX(round) FROM %prefix%t2_games WHERE tournamentid = %int%)-1 ORDER BY round DESC, score DESC) AS games
         LEFT JOIN %prefix%t2_teams AS teams ON (teams.leaderid = games.leaderid) AND (teams.tournamentid = games.tournamentid)
         WHERE games.tournamentid = %int% AND games.group_nr = 0 AND NOT ISNULL( teams.name )
         GROUP BY teams.teamid
         ORDER BY teams.disqualified ASC, rounds DESC, pos ASC, games.score DESC
         LIMIT 4
         ", $tournamentid, $tournamentid);
               
                    // Array schreiben
                    while ($team = $db->fetch_array($teams)) if ($team['teamid'] && !in_array($team['teamid'],$ranking_data->tid)){
                        $array_id++;
                        array_push ($ranking_data->id, $array_id);
                        array_push ($ranking_data->tid, $team['teamid']);
                        array_push ($ranking_data->name, $team['name']);
                        array_push ($ranking_data->pos, $num++);
                        array_push ($ranking_data->disqualified, $team['disqualified']);
                    }
                    $db->free_result($teams);
                break;


    have fun

    PS: Es mag sein, dass manche Fälle in diesem Statement nicht enthalten sind (z.B.: disqualifikation), aber die relevanten Plätze 1-4 werden korrekt ausgewertet. Alle anderen Plätze sind sinnlos überhaupt auszuwerten.

    Bald feiert Haag-networX 10 Jahre Schwachfug
    http://haag-networx.info/ls/index.php
    quote
    byte
    10.11.2013 13:38
    Welche Version hab ihr im Einsatz? Ist das noch die 2.14??
    Code:
    case "single":
                    // Array für Teams auslesen

    Past bei mir überhaupt nicht.. das ist bei hier ein elsif-Abschnitt. Hab ihr das Case einfach selber eingebaut? Könntest du mal das ganze File anhängen? Das währ super.

    Das Problem das ich bei der Aktuellen SVN-Version sehe ist das SE und DE ineinander verschachtelt sind. Auf die Lösung mit den "Top 4 only" bin ich auch schon gekommen. Aber ich kanns nicht so ohne weiteres ändern ohne das DE nicht mehr geht. Und das wird vorwiegend bei uns gespielt... weshalb ich momentan die Finger weglasse. Ausser ich Unterscheide wieder wie früher einfach SE und DE.. aber dann müste man gleich die ganze Klasser aufräumen sonst blickt garkeiner mehr durch.

    --
    www.synergy-lan.de
    Wir verleihen günstig Strom & Netzwerkequipment an kleinere Lans (bis 150 Teilnehmer)
    99Euro für 7x24Port Clientswitche + Gigabitbackbone (Dualgig-Uplinks) / WE
    Andere Kombinationen auf Anfrage.
    quote
    the
    10.11.2013 15:02
    Hier findest du die Datei:

    http://pastelink.me/dl/e53173

    Stand userer LS version sollte Februar 2013 sein. Wir haben aber einige Änderungen im Code, damit alles so funktioniert, wie wir es brauchen (zB: phpbb3 Forum mit single sign on usw.)
    http://www.haag-networx.info/ls/index.php

    Es kann deshalb sein, dass wir manche Dateien nicht auf dem neuesten Stand haben.

    Wichtige Änderungen die Bugs beheben, habe wir aber immer hier bekannt gegeben.

    gl & hf

    Bald feiert Haag-networX 10 Jahre Schwachfug
    http://haag-networx.info/ls/index.php
    quote
    KnoX
    11.11.2013 11:13
    Avatar
    Hi the, bist du dir sicher, dass der Code funktioniert?

    Ich sehe du hast im Order By 'pos ASC' ergänzt. Das macht denke ich keinen Sinn, oder?

    Code:
    ORDER BY teams.disqualified ASC, rounds DESC, pos ASC, games.score DESC


    Das heißt:

    1) Disqualifizierte ganz nach unten sortieren
    2) Wer in die höchste Runde gekommen ist nach oben sortieren
    [3) Wer im gemalten Baum (y-Achse) weiter oben steht, nach oben sortieren]
    4) Wer das Höchste ergebniss in irgendeinem Spiel erzielt hat nach oben sortieren

    3) macht denke ich keinen Sinn.

    Und der Bug liegt wahrscheinlich in 4)

    Denn ich glaube gerade das schaut unter denen die ins Finale gekommen sind, wer in irgendeinem Spiel das höchste Ergebnis hatte. Aber es darf nur auf das letzte Ergebnis geschaut werden.

    Kann das sein? Ist grad nur eine Vermutung beim lesen des SQL, ohne dass ich getestet habe.

    http://www.orgapage.de - Infoseite für LanParty-Orgas
    [Equipmentliste | Strom-/Netzplanung | Intranetsysteme | Game- und Dienste-Servertipps]
    quote
    the
    11.11.2013 13:21
    Wie schon gesagt, wir waren nicht mehr ganz nüchtern wie dieses Statement zusammengestellt wurde. Es hat auf jeden fall die Top 4 bei mehreren Turnieren korrekt ausgespuckt. Es mag zufall gewesen sein und man mag mich gerne eines besseren belehren ^^
    Bald feiert Haag-networX 10 Jahre Schwachfug
    http://haag-networx.info/ls/index.php
    quote
    firefly
    11.11.2013 14:36
    I glaub i sollt mi auch mal zu wort melden.

    Zu punkt 3( Welches spiel weiter oben ist nach oben sortiern) hat den hintergrund dass das finalspiel eine niedrigere nummer hat als das spiel um den 3ten plaz.

    Und hier das Ganze statement etwas entschachtelt:
    Code:
    "SELECT MAX(round) FROM ls_t2_games WHERE tournamentid = $tournamentid;


    Gibt die anzahl Gespielten Runden (höhe des turnierbaums aus).

    Code:
    "SELECT tournamentid, leaderid, round, position, score, group_nr FROM ls_t2_games where round = (SELECT MAX(round) FROM ls_t2_games WHERE tournamentid = $tournamentid)-1 AND tournamentid = $tournamentid ORDER BY round DESC, score DESC";


    Gibt die spieler die im finale und spiel um den 3ten platz dabei sind aus (man hat hier den score der einzelnen spiele und eben die position im turnierbaum in dem man erkennnen kann dass pos 1 und 2 vom finale und pos 3 und 4 aus dem spiel um den 3ten platz sind. Das where tournamentid=$tournamentid is im oben gennanten statment erst auserhalb des joins ist hier nur eingefügt um das select im db editor anschaulicher zu machen.

    Wenn man in diesem statment das FLOOR(position/2) einfügt erhält man schon eine übersicht über die finialisten ohne deren namen oder disqualified state auszuwerten.

    Code:
    SELECT tournamentid, leaderid, round, position, score, group_nr,FLOOR(position/2) AS pos FROM ls_t2_games where round = (SELECT MAX(round) FROM ls_t2_games WHERE tournamentid = $tournamentid)-1 AND tournamentid = $tournamentid ORDER BY round DESC, pos ASC, score DESC;


    Im vollständigen statement (siehe the) wird anschießend ein join auf die teamsdb ausgeführt um namen und auch den fall dass ein team disqualifiziert wurde auszuwerten.


    Und der gesuchte Bug ist darin gelegen dass nur nach den punkten der letzten runde ausgewertet wurde und nicht danach ob der spieler im finale oder im spiel um den 3ten war. (soweit ich mich richtig zurückerinnere)
    wie schon von the gesagt war viel bier und zeitdruck im spiel.

    Edit:
    Was i grad nu vergessen hab zu erklären.
    Da grund warum i rounds -1 und nich rounds nehme in der auswertung liegt darin dass eben der sieger des finales und der sieger des spiels um den tritten platz eine runde weiter kommen und in dem fall die auswertung verfälschen würde. Siehe ( abfrage von byte n paar posts weiter oben)

    Bald feiert Haag-networX 10 Jahre Schwachfug :D

    Haag-networX
    quote
    byte
    11.11.2013 14:56
    Also grundsätzlich lässt sich das Problem umgehen wenn man wie ich oben schon geschrieben habe das "SE Spiel um Platz 3" auf eine positive "x.5" Runde setzen würde. Das ist ja ein klar getrennter eigener Abschnitt im Code. Ich habs versucht und es hat gepasst.Von der Logik her währe meiner Meinung nach das die Methode welche man am ehesten Nachvollziehen könnte. Und auch egal wie man sie wendet immer das richtige Ergebniss produzieren müsste. Das Problem dabei war aber das mir das Turnier nach Eingabe der Finaldaten natürlich beendet wurde... auch wenn Platz 3 nicht gespielt wurde. Aber da kämpft man sich duchr den Dschungel der Globalen Variablen... Und man muss höllisch aufpassen das man sich DE nicht zerballert was (bei uns) weit wichtiger ist. Da bin ich momentan nicht weiter... unsere Lan ist in 3 Wochen und ich hab noch andere Baustellen. Aber ich glaub das ist auch wieder nur ne Kleinigkeit... wenn man die richtigen stellen findet.
    --
    www.synergy-lan.de
    Wir verleihen günstig Strom & Netzwerkequipment an kleinere Lans (bis 150 Teilnehmer)
    99Euro für 7x24Port Clientswitche + Gigabitbackbone (Dualgig-Uplinks) / WE
    Andere Kombinationen auf Anfrage.
    quote
    Dr[Karl]
    14.11.2013 09:27
    Zitat:
    [3) Wer im gemalten Baum (y-Achse) weiter oben steht, nach oben sortieren]<br>
    4) Wer das Höchste ergebniss in irgendeinem Spiel erzielt hat nach oben sortieren<br>
    <br>
    3) macht denke ich keinen Sinn.<br>


    Ich hab auch ewig gebraucht, um das geniale Konstrukt zu durchblicken - vielleicht wär's mit ein paar Bierchen schneller gegangen

    Das macht schon Sinn, weil pos nicht die position aus der DB ist sondern
    Code:
    FLOOR(games.position/2) AS pos


    Damit haben die beiden Finalteilnehmer pos=0 und die zwei aus Spiel um Platz 3 haben pos=1
    Und dann macht die Sortierreihenfolge sehr wohl Sinn und liefert m.E. die richtige Reihenfolge

    Gruß und prost!
    doc
    quote
    byte
    26.11.2013 15:21
    Zitat:
    Hier findest du die Datei:<BR><BR><A href="http://pastelink.me/dl/e53173" rel=nofollow target=_blank>http://pastelink.me/dl/e53173</A><BR><BR>Stand userer LS version sollte Februar 2013 sein. Wir haben aber einige Änderungen im Code, damit alles so funktioniert, wie wir es brauchen (zB: phpbb3 Forum mit single sign on usw.)

    Ich hab leider übersehen das der Link nur 7 Tage gültig ist. Könnet ihr das nochmal verlinken bzw. hier hochladen? Danke & MFG byte

    --
    www.synergy-lan.de
    Wir verleihen günstig Strom & Netzwerkequipment an kleinere Lans (bis 150 Teilnehmer)
    99Euro für 7x24Port Clientswitche + Gigabitbackbone (Dualgig-Uplinks) / WE
    Andere Kombinationen auf Anfrage.
    quote
    the
    27.11.2013 21:42
    Hier ist ein neuer link: https://www.dropbox.com/s/dyxqxjvtg5z1w52/class_tournament.php

    Der bleibt länger bestehen.

    Wir hatten einmal vor unsere LS version (hauptsächlich kleine bug fixes oder eigene Anpassungen) irgendwo online zu stellen, damit jede Codeänderung gleich verfügbar ist. Das spllten wir nachholen.

    Bald feiert Haag-networX 10 Jahre Schwachfug
    http://haag-networx.info/ls/index.php
    quote
    byte
    02.12.2013 23:53
    Top, danke. Wir haben die Änderung eingeflickt und muss sagen das Bier war gut angelegt. Hat funktioniert. Hab mir nur Sorgen gemacht das bei den anderen Modes ggf. durch das ersetzen des elseif durch case andere Modes dann spinnen. Aber bei den 19 Turnieren (SE, DE, ALLINONE,Liga) hats alles richtig gemacht. Sonderfälle (Disqualifikation) oder Gruppe + KO haben wir nicht gehabt. Ich würds dann wenn keine Bedenken bestehen in den offiziellen Zweig einfliesen lassen.
    --
    www.synergy-lan.de
    Wir verleihen günstig Strom & Netzwerkequipment an kleinere Lans (bis 150 Teilnehmer)
    99Euro für 7x24Port Clientswitche + Gigabitbackbone (Dualgig-Uplinks) / WE
    Andere Kombinationen auf Anfrage.
    quote
    MaLuZ
    21.01.2016 23:24
    Da die Dropbox-datei sogar noch erreichbar war, habe ich die Anpassungen mal mit der aktuellen Version gemerged (ist das ein Wort?)
    Neue Variante hier: https://github.com/M4LuZ/lansuite/commit/8af729f849fd19eadb512d1c17020662f57ae9d3

    Auf Grund des positiven Tests von byte sollte das keine Probleme bereiten.
    Im Juli haben wir den Praxistest
    quote
    15 Einträge
    • Hinweis:
      Bitte loggen dich ein, bevor du einen Kommentar verfasst
    • Hinweis:
      Es wurden keine Einträge gefunden