Auflistung verschiedener Werte. Kleinste Größte u.s.w.

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 per TextDraw verschiedene User auflisten. Soweit nicht das Problem aber diese User haben verschiedene Prozentwerte und der mit dem höchsten soll oben und mit dem niedrigsten soll unten stehen.


    Beispiel:


    Wir haben folgende User:


    Qualle - 10%
    obergamler - 3%
    Günter - 30%


    Im TextDraw soll es dann so aussehen:


    Günter - 30%~n~
    Qualle - 10%~n~
    obergamler - 3%



    Ich weiss nun nicht wie wir sie so sortieren, dass wir sie in eine String auflisten können :)

    Momentan im Ruhestand

    Einmal editiert, zuletzt von obergamler ()

  • dazu kannst du wenn es nur 3 werte sind eine for-schleife dazu verwenden


    new TopTree[3 char];


    new i;
    for(; i < MAX_PLAYERS; ++i){
    if(!IsPlayerConnected(i))continue;
    if(Prozentwertvariabel[i] > Prozentwertvariabel[TopTree{0}]){
    TopTree{2}= TopTree{1};
    TopTree{1}= TopTree{0};
    TopTree{0}= i;
    }else if(Prozentwertvariabel[i] > Prozentwertvariabel[TopTree{1}]){
    TopTree{2}= TopTree{1};
    TopTree{1}= i;
    }else if(Prozentwertvariabel[i] > Prozentwertvariabel[TopTree{2}]){
    TopTree{2}= i;
    }
    }


    Prozentwertvariabel[i] ist jetzt ihrgend was willkürliches und sollte nur die jeweilige verwendete array ersetzen , welche du verwendest um die prozent werte zwischen zu speichern.

  • new PlatzID[MAX_PLAYERS] = {-1,...}, PlatzProzente[MAX_PLAYERS];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(SpielerProzente[i] > 0)
    {
    new a;
    while(PlatzProzente[a] >= SpielerProzente[i]) a++;
    for(new j=MAX_PLAYERS-2; j>=a; j--)
    {
    PlatzProzente[j+1] = PlatzProzente[j];
    PlatzID[j+1] = PlatzID[j];
    }
    PlatzProzente[a] = SpielerProzente[i];
    PlatzID[a] = i;
    }
    }
    }
    new msg[2048];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(PlatzID[i] != -1)
    {
    format(msg, sizeof(msg), "%s%s - %d%%~n~", msg, SpielerName(PlatzID[i]), PlatzProzente[i]);
    }
    }
    TextDrawSetString(MeinTD, msg);


    Kann es leider grade nicht testen, aber das sollte funktionieren. Wenn nicht, sag es bitte und beschreib was passiert.
    Du musst halt die Variablen mit den deinen ersetzen, aber das sollte klar sein.


    EDIT: Auf deine Frage: Das funktioniert für MAX_PLAYERS Spieler, also für alle im Server.

  • Alles klar. Gib dann bitte eine Rückmeldung.


    Hier noch die Funktion SpielerName, falls du die nicht hast:
    stock SpielerName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    return name;
    }