Wie kann ich abfragen, welcher Spieler die höchste Variable hat?

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 habe eine Frage und wüsste gerne, wie ich eine Variable mit allen anderen Spielern vergleichen kann und abfragen welche am höchsten ist?
    Zum Beispiel bei einen DM Server, wieviel kills man gemacht hat in einer Runde. zb. die Variable Kills[killerid]++; wird erhöht bei jeden kill.
    Wie kann ich am Ende abfragen, wer die meisten Kills hat? Und es denn auch senden kannn mit %s hat die meisten kills gemacht.
    Ich stelle mir das so vor, mit irgendeiner Forschleife. Oder so ein Abstimmungssystem, hat den selben Effekt, welche Variable hat die meisten stimmen.
    Ich bin mit meinen Lateien am Ende. Ich hoffe ihr könnt mir da was sagen zu. Liebe Grüße

    Ich suche (Beta) Server-Tester für meinen Server.
    Bei Intresse bitte bei mir per PN melden.

  • new idx;
    for(new i;i<MAX_PLAYERS;i++;)
    {
    if(Kills[i] > idx)idx = i;
    }
    idx hat nun den Wert von der höchsten Killrate von allen Spieler.
    Ich hab das mit Handy geschrieben.. ;)

    Einmal editiert, zuletzt von AirM4X ()

  • Idx ist nun die ID des Führenden, hat aber nicht den Wert.


    Auch nicht, so wie er es geschrieben hat, funktioniert der Algorithmus nicht ^^


    Es muss so heißen:


    new idx;
    for(new i;i<MAX_PLAYERS;i++;)
    {
    if(Kills[i] > idx)idx = Kills[i];
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Hallo Icy., danke schon einmal für deine Antwort.
    Sie hat den Anfang schon einmal gemacht. Und dann soll ich nurnoch unter der For-Schleife
    format(string,sizeof(string),"Der Spieler %s hat die meisten Kills gemacht. %i Kills",SpielerName(idx),Kills[idx]);
    SendClientMessageToAll(Irgendeinetollefarbe, string);
    Sollte es irgendwie dann so aussehen. Gut das ist der erste teil, und wie mache ich das ganze nun für Variabeln?
    Liebe Grüße


    Hallo N0SKILL, danke für deine Antwort.
    Wenigstens haben wir jetzt schon einmal die ID des Führenden, nun weiß ich aber nicht ob meine Vermutung stimmt, das
    man einfach unter der Schleife idx abfragt und wieviele kills idx hat.
    Liebe Grüße


    Vielleicht gibt es auch noch ein paar andere Antworten.

    Ich suche (Beta) Server-Tester für meinen Server.
    Bei Intresse bitte bei mir per PN melden.

  • Vielleicht gibt es auch noch ein paar andere Antworten.


    Wenn du die ID willst schreibe es so:


    new id;
    for(new i,tmp=-1; i<MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i)) continue;
    if(Kills[i] > tmp) tmp=Kills[i],id=i;
    }


    format(string,sizeof(string),"Der Spieler %s hat die meisten Kills gemacht. %i Kills",SpielerName(id),Kills[id]);
    SendClientMessageToAll(Irgendeinetollefarbe, string);


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Zum Beispiel so:
    new tmpKills[MAX_PLAYERS], tmpID[MAX_PLAYERS], tmp;
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    tmpKills[i] = Kills[i];
    tmpID[i] = i;
    }
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    for(new j = i+1; j < MAX_PLAYERS; j++)
    {
    if(tmpKills[i] < tmpKills[j])
    {
    tmp = tmpKills[i];
    tmpKills[i] = tmpKills[j];
    tmpKills[j] = tmp;
    tmp = tmpID[i];
    tmpID[i] = tmpID[j];
    tmpID[j] = tmp;
    }
    }
    }


    2. Platz:
    format(str, sizeof(str), "2. Spieler: %s Kills: %d", SpielerName(tmpID[1]), tmpKills[1]);