Schleife | Frage

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
  • du setzt doch bestimmt eine spielervariabel und die frägst du ab, zu dem benötigst du noch zwei variabeln um das zu zählen.
    Beispiel:

    CountPlayerInMode(string[],len = sizeof(string)){
    new i, count[2];
    for(; i != MAX_PLAYERS; ++i){
    switch(PlayerInfo[i][pMode]){
    case 1: ++count[0];
    case 2: ++count[1];
    }
    }
    format(string,len ,"Cops'n Robbers: %d Spieler | Freeroam: %d Spieler",count[0],count[1]);
    return 1;
    }

    Einmal editiert, zuletzt von IPrototypeI () aus folgendem Grund: Klammerfehler dank an Jeffry

  • Ja das ist möglich:


    CountPlayerInMode(string[],len = sizeof(string)){


    Zur Verwendung
    new string[40];
    CountPlayerInMode(string);
    SendClientMessage(playerid,-1,string);


    oder
    new string[40];
    CountPlayerInMode(string,40);
    SendClientMessage(playerid,-1,string);



    Die Länge des strings habe ich einfach mal als optionaler parameter gemacht
    len = sizeof(string) durch das zuweißen eines wertes wird der parameter immer optional.


    Bei strings die man formatieren lässt in der Funktion wird den inhalt enthalten das gilt nicht für variabeln.
    um dort einen wert zurück zu geben muss man ein & Zeichen anhängen.


    Kernpunkt deiner Frage ist die schleife



    new i, count[2];
    for(; i != MAX_PLAYERS; ++i){
    switch(PlayerInfo[i][pMode]){
    case 1: ++count[0];
    case 2: ++count[1];
    }
    }


    Dort möchtest du doch die Anzahl der Leute haben die in dem jeweiligen Mode spielen daher musst du zwei variabel hochzählen lassen was wir hier tun. Da ich mal davon ausgehe das du auch aufgrund des spawns abfrägst in welchem Modus er ist und das dem spieler zuordnest beim auswählen.
    Daher musst du den auch Abfragen das kannst du so machen via switch +case oder mit eine if-abfrage je nachdem was vllt von vorteil ist,
    ist das du danach schaust das du 3 Werte benutzt 0, 1, 2 wobei 0 der Default(Standart-) Wert ist, vielleicht machst du das auch nicht dann solltest du noch abprüfen ob der spieler online ist am besten noch eingeloggt oder nicht.
    Das ganze kann auch so aussehen


    for(; i != MAX_PLAYERS; ++i){
    if(!IsPlayerConected(i))continue;
    !PlayerInfo[i][pMode] && ++count[0] || ++count[1];
    }


    letztendlich wird das ganze in den string gepackt und du kannst es verwenden.

    Einmal editiert, zuletzt von IPrototypeI () aus folgendem Grund: Klammerfehler dank an Jeffry

  • IPrototypeI:
    In deiner Funktion ist ein Klammerfehler. So wäre es richtig:
    CountPlayerInMode(string[],len = sizeof(string)){
    new i, count[2];
    for(; i != MAX_PLAYERS; ++i){
    switch(PlayerInfo[i][pMode]){
    case 1: ++count[0];
    case 2: ++count[1];
    }
    }
    format(string,len ,"Cops'n Robbers: %d Spieler | Freeroam: %d Spieler",count[0],count[1]);
    return 1;
    }