Rangliste || Wer hat das meiste Geld?

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
  • Hallo, ich möchte eine Rangliste, die die top 10 zeigt.. d.H. wer das meiste Geld hat!


    In meinem Gamemode gehts darum Das meiste Geld zuhaben. Aber da man alles verliert beim Tot, möchte ich eine sich jede 10Sec. Updatende Rangliste.. Am besten mit Dini.
    Geht das?
    Danke schonmal !:)

  • Und das geht wie? :)

    Ich geb ein Beispiel. Geld wird in einem Account gespeichert.
    Alle Geld Werte werden ausgelesen.
    Dann erstellst du eine var mit einem array von 10.
    du fängst mit dem höchsten rang an in einer Schleife ein kleines Code Beispiel.
    new var[10];
    for(new i;i<10;i++)
    {
    var[i]=geld;
    }
    sobald der neue geld wert höher als der alte ist wird er ersetzt. Wichtig ist dabei dass dieser Geldwert noch keinen Platz in der Top 10 hat sonst wäre er der 1 Platz 10x in der Top 10. Außerdem muss auch der Spielername gewertet werden denn 2 Spieler können die gleiche Anzahl an Geld haben. Mit diesem Prinzip würde es funktionieren.

  • Ich benötige nochmal eure Hilfe .
    Mein Array ist jetzt pInfo[playerid][Geld].


    Und ich möchte das derjenige der am meisten an geld hat in einem TextLabel ganz oben steht und der 2. darunter und und und...


    TextLabels kannst du nicht untereinander anzeigen lassen , was du meinst sind Textdraws.


    Du kannst entweder ein extra array erstellen dem die ganzen Geldwerte geben und es via dieser Include sortieren lassen:


    http://forum.sa-mp.com/showthread.php?t=343172


    oder du kannst diese das ganze so machen ein Beispiel aus meinem Racegm, dazu wird ebenfalls ein extra array benötigt, jedoch müsste man hier das Array local definieren, da alle Spieler
    regelmäßig überprüft werden:



    stock CheckPlayerTopTime(playerid){
    for(new i; i != 5; ++i){
    if(PlayerData[playerid][pRaceTime] <= Top5[i][tTime] || Top5[i][tTime] == 0){
    for(new x = 4, j = i; x != j ; --x){
    Top5[x][tTime] = Top5[x-1][tTime];
    format(Top5[x][tName],MAX_PLAYER_NAME,Top5[x-1][tName]);
    }
    Top5[i][tTime] = PlayerData[playerid][pRaceTime];
    format(Top5[i][tName],MAX_PLAYER_NAME,PlayerName(playerid));
    }
    }
    return 0;
    }




  • Doch ich mein das mit 3DTextLabel einfach mit \n Untereinander :o
    Sorry ich versuch das seit ca. 1 std. zu verstehen aber es klappt nicht.

  • Doch ich mein das mit 3DTextLabel einfach mit \n Untereinander :o


    new tmp_Geld[5], tmp_id[5];
    for(new t_playerid = 0; t_playerid < MAX_PLAYERS; t_playerid++)
    {
    if(!IsPlayerConnected(t_playerid)) continue;
    if(pInfo[playerid][Geld] > tmp_Geld[4])
    {
    for(new i=4; i>0; i--)
    {
    if(tmp_Geld[i-1] >= pInfo[playerid][Geld])
    {
    if(i != 4)
    {
    for(new j=3; j>=i; j--)
    {
    tmp_Geld[j+1] = tmp_Geld[j];
    tmp_id[j+1] = tmp_id[j];
    }
    }
    tmp_Geld[i] = pInfo[playerid][Geld];
    tmp_id[i] = t_playerid;
    break;
    }
    }
    }
    }
    new str[256];
    for(new i=0; i<5; i++) format(str, sizeof(str), "%s%s - $%d\n", str, SpielerName(tmp_id[i]), tmp_Geld[i]);
    Update3DTextLabelText(Label, Farbe, str);