Top 5 Spieler Befehl 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
  • Guten Abend Breadfish Community.
    Ich würde für mein Gangwar Script sehr gerne eine Topliste einfügen, mit dem Befehl /top5
    Nun weis ich aber nicht wie genau ich anfangen soll oder was genau ich machen muss.


    Es sollten die Top5 Spieler angezeigt werden, was die Killanzahl angeht.
    z.B schön untereinnander im Dialog:


    Top1: [SPIELERNAME] [KILLS]
    Top2: [SPIELERNAME] [KILLS]
    Top3: [SPIELERNAME] [KILLS]
    Top4: [SPIELERNAME] [KILLS]
    Top5: [SPIELERNAME] [KILLS]


    Das Script läuft über Dini und die Accounts werden hier gespeichert:

    scriptfiles/LuxAdmin/Accounts



    Die Accountdateien enden mit .sav


    Was genau muss ich da nun machen um so etwas hinzubekommen?


    Danke im Voraus an alle die mir helfen.


    Gruß
    Tobi

    Einmal editiert, zuletzt von Tobi_Wayne ()

  • Schau mal hier rein: http://forum.sa-mp.com/showthread.php?t=352260
    Wenn du es auch für offline-Benutzer machen willst, dann musst du durch alle Dateien in deinen scriptfiles loopen, mit dem FileManager Plugin: http://forum.sa-mp.com/showthread.php?t=92246
    Wobei ich dir das nicht raten würde, denn sagen wir mal du hast 1000 registrierte Benutzer, dann braucht das eine halbe Ewigkeit, da dini nicht unbedingt das schnellste System ist.


    Die einfachste Variante ist MySQL zu benutzen, selber Thread hier: Rangliste erstellen

  • Das von diesem Link http://forum.sa-mp.com/showthread.php?t=352260 funktioniert ingame super.
    Musste auch nichts verändern.
    Nur es gibt folgendes Problem: Man kann es nicht mehr ausblenden (Textdraws)
    Wie kann man für diesen Code einen Gegenbefehl erstellen mit dem man wieder die Textdraws weg bekommt?


    #include <a_samp>


    new
    Text: text_Top5[2]
    ;


    enum rankingEnum
    {
    player_Score,
    player_ID
    }


    public OnFilterScriptInit()
    {
    text_Top5[0] = TextDrawCreate(79.000000, 135.000000, "Top 5");
    TextDrawAlignment(text_Top5[0], 2);
    TextDrawBackgroundColor(text_Top5[0], 255);
    TextDrawFont(text_Top5[0], 1);
    TextDrawLetterSize(text_Top5[0], 0.280000, 1.499999);
    TextDrawColor(text_Top5[0], -1);
    TextDrawSetOutline(text_Top5[0], 0);
    TextDrawSetProportional(text_Top5[0], 1);
    TextDrawSetShadow(text_Top5[0], 0);

    text_Top5[1] = TextDrawCreate(16.000000, 135.000000, " ");
    TextDrawBackgroundColor(text_Top5[1], 255);
    TextDrawFont(text_Top5[1], 1);
    TextDrawLetterSize(text_Top5[1], 0.200000, 0.999999);
    TextDrawColor(text_Top5[1], -1);
    TextDrawSetOutline(text_Top5[1], 0);
    TextDrawSetProportional(text_Top5[1], 1);
    TextDrawSetShadow(text_Top5[1], 0);
    TextDrawUseBox(text_Top5[1], 1);
    TextDrawBoxColor(text_Top5[1], 150);
    TextDrawTextSize(text_Top5[1], 143.000000, 20.000000);
    return 1;
    }


    public OnFilterScriptExit()
    {
    TextDrawDestroy(text_Top5[0]);
    TextDrawDestroy(text_Top5[1]);
    return 1;
    }


    stock GetPlayerHighestScores(array[][rankingEnum], left, right)
    {
    new
    tempLeft = left,
    tempRight = right,
    pivot = array[(left + right) / 2][player_Score],
    tempVar
    ;
    while(tempLeft <= tempRight)
    {
    while(array[tempLeft][player_Score] > pivot) tempLeft++;
    while(array[tempRight][player_Score] < pivot) tempRight--;

    if(tempLeft <= tempRight)
    {
    tempVar = array[tempLeft][player_Score], array[tempLeft][player_Score] = array[tempRight][player_Score], array[tempRight][player_Score] = tempVar;
    tempVar = array[tempLeft][player_ID], array[tempLeft][player_ID] = array[tempRight][player_ID], array[tempRight][player_ID] = tempVar;
    tempLeft++, tempRight--;
    }
    }
    if(left < tempRight) GetPlayerHighestScores(array, left, tempRight);
    if(tempLeft < right) GetPlayerHighestScores(array, tempLeft, right);
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/top5", true))
    {
    new
    playerScores[MAX_PLAYERS][rankingEnum],
    index
    ;
    for(new i; i != MAX_PLAYERS; ++i)
    {
    if(IsPlayerConnected(i) && !IsPlayerNPC(i))
    {
    playerScores[index][player_Score] = GetPlayerScore(i);
    playerScores[index++][player_ID] = i;
    }
    }
    GetPlayerHighestScores(playerScores, 0, index);

    new
    score_Text[256] = "~n~",
    player_Name[20]
    ;
    for(new i; i < 5; ++i)
    {
    if(i < index)
    {
    GetPlayerName(playerScores[i][player_ID], player_Name, sizeof(player_Name));
    format(score_Text, sizeof(score_Text), "%s~n~~b~%d. ~w~%s - ~r~%d", score_Text, i + 1, player_Name, playerScores[i][player_Score]);
    }
    else
    format(score_Text, sizeof(score_Text), "%s~n~~b~%d. ~r~N/A", score_Text, i + 1);
    }
    TextDrawSetString(text_Top5[1], score_Text);
    TextDrawShowForPlayer(playerid, text_Top5[0]);
    TextDrawShowForPlayer(playerid, text_Top5[1]);
    return 1;
    }
    return 0;
    }