Rangliste erstellen

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey,
    ich möchte gerne wissen wie man eine Rangliste erstellt.
    Das ganze soll so Funktionieren:
    Jeder Spieler hat eine gewisse Kills anzahl. Nun möchte ich herausfinden wer
    die meisten kills hat und wer die zweit meisten usw. So das am ende Jeder Spieler einen Platz hat.
    Meine Frage jetzt wie kriege ich das hin?


    Hier habe ich das schon in etwa gesehen, nur leider verstehe ich das nicht ganz. Ich benutze MySQL version R5.


    lg

    "when you got nothing to lose, then baby you got it all" - OPERATOR

  • So wie es bei dem Link steht ist es schonmal falsch, ASC startet bei der kleinsten Ziffer, eine Rangliste startet ja bei der größten Ziffer.


    mysql_query("SELECT name, kills FROM accounts ORDER BY kills DESC LIMIT 10");
    mysql_store_result();
    if(mysql_num_rows())
    {
    new str[256];
    while(mysql_fetch_row(str))
    {
    print(str);
    //hier dann den "str" splitten, so wie du es brauchst."
    }
    }
    mysql_free_result();


    Die klein-geschriebenen Wörter im query musst du mit deinen Spalten ersetzen, so wie die bei dir heißen.

  • Jeffry Wie splitte ich den denn?
    Also wenn ich zum Beispiel den ersten Platz raus finden möchte oder jedem Spieler einen Platz geben möchte.
    Also z.b.


    new String[128], Rang[MAX_PLAYERS];
    format(String, sizeof (String), "Du bist auf Platz %d!", Rang[playerid])


    Wie lege ich dann den Rang fest?
    Ich verstehe das gar nicht, tut mir Leid :/


    Und bedeutet die 10 das die Ordnung für die Top10 gilt?
    lg
    Flash

    "when you got nothing to lose, then baby you got it all" - OPERATOR

    2 Mal editiert, zuletzt von XHSD ()

  • XHSD:
    Zum Beispiel mit sscanf, oder so: MYSQL Lädt falsche werte
    str sieht genau so aus wie string in dem Beispiel von mir. (Reihenfolge ist wohl anders.)


    ----------------------------------------------------------------------------------------------------


    Den Rang kannst du so nur schwer festlegen. Ich zeige dir mal wie es gehen kann, aber das ist nicht sehr performant (für das Limit 10 geht's noch, aber wenn du es für alle machen willst, und mal 1000 Users hast, kannste das vergessen, da würde ich dir vorschlagen, ab Rang 10 in den Stats zu sagen: Schlechter als 10.)

    Code
    new rank;
    mysql_query("SELECT name, kills FROM accounts ORDER BY kills DESC LIMIT 10");
    mysql_store_result();
    if(mysql_num_rows())
    {
    new str[256];
    while(mysql_fetch_row(str))
    {
    rank++;
    print(str);
    //hier dann den "str" splitten, so wie du es brauchst."

    //wenn du es gesplittest hast, und der Name des Users steht im String "name":
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && !strcmp(SpielerName(i), name))
    {
    Rang[i] = rank;
    }
    }
    }
    }
    mysql_free_result();


    Alternative: http://stackoverflow.com/quest…-row-position-in-order-by


    --------------------------------------------------------------------------------


    Ja, das LIMIT bezeichnet die Anzahl der Plätze die du ausließt. In dem Fall 1,2,3,4,5,6,7,8,9,10.

  • Jeffry Dankee =D
    Ich habe vor ein all vs all Tournament zu machen. Ich möchte
    während des Tournament's eine top 10 Liste einblenden. Nach dem Tournament soll dann jeder
    seinen Rang sehen können. Also sollte dein System doch funktionieren, oder?
    lg

    "when you got nothing to lose, then baby you got it all" - OPERATOR

  • Sollte kein Problem sein. Ich stelle mal die Behauptung auf, dass es bis 100 Plätze auslesen noch ohne Lags geht. Hängt natürlich vom Server ab, aber sollte keine Probleme geben. Mit 10 ist es überhaupt kein Problem, das wird klappen.
    Falls noch Fragen sind, oder Probleme am Code, kannst du gerne fragen. :)