Abfragen wieviele Spieler eine Variable haben

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
  • heyho breadfish community,


    Da ich seit kurzem wieder aus lw scripte und ich nun bei einer art LMS festhänge dachte ich mir, ich frage hier einfach mal^^


    Ich will abfragen wieviele Leute eine bestimmte variable haben nur fand ich per sufu und auch per google nix dazu ^^
    Ich denke es wird wohl auch iwas mit ner forschleife sein, aber bin zZ ein wenig eingerostet ^^

  • Das war sehr hilfreich, nicht.


    Es geht mir darum, dass ich alle an nen bestimmt ort porte und falls wer stirbt setzt sich die variable dann halt wieder auf 0 Zurück
    Nur will ich dann, dass das script erkennt wer der letzte überlebende ist , also nen simples LMS hab bißher auch alles dran gemacht nur komme ich nicht drauf, wie ich dann die abfrage für den letzten überlebenden machen soll :(


    Müsste ich es vllt so umständlich machen, dass ich ne servervariable mache und die pro toten auf -1 setze oder wie?
    Geht das nicht einfacher? :(

  • Das sollte auch nicht helfen, sondern war ne Frage zur Feststellung. Sollte man meist am "?" erkennen. Aber gut, dann raten wir halt blind rein, wenn dir das lieber ist.
    for (new i = 0; i < MAX_PLAYERS; i ++) {
    if (!variable) // wert ist 0
    else // wert ist nicht 0
    }


    Bitteschön.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Dann hab ich das wohl falsch verstanden, tut mir leid ^^


    Naja und wo muss diese abfrage dann hin?


    Ich hab das jetzt alles so (also um die "Runde" zu starten)



    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    ResetPlayerWeapons(i);
    SetPlayerPos(i,382.3333,-2058.4187,10.7173);
    SetPlayerFacingAngle(i, 352.0760);
    SetCameraBehindPlayer(i);
    GivePlayerWeapon(i, 34,888);
    MissionID[i] = 1;


    }

  • Du möchtest also zählen, wieviele Spieler eine bestimmte PVar mit einem bestimmten Wert haben, habe ich das richtig verstanden Fragezeichen


    Wenn ja, dann einfach folgendes dahin, wo es gezählt werden soll:

    new counter = 0;
    for(new i=0; i<GetMaxPlayers(); i++){ //Durchläuft alle Slots
    if(GetPVarInt(i, "NameDerVariable") == WERT) counter++;
    }


    counter erhält nun die Anzahl der Spieler, die diese Variable auf diesen Wert haben.


  • Hmm okay, also wäre das so richtig?


    public OnPlayerDeath(playerid, killerid, reason)
    {
    SendDeathMessage(killerid, playerid, reason);


    //MissionIDs
    if(MissionID[playerid] == 1)
    {
    MissionID[playerid] = 0;
    new counter = 0;
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(MissionID[playerid] == 1)
    {
    counter++;
    }
    }
    }
    return 1;
    }



    Und wie frage ich dann ab, welche playerid die letzte ist?
    Müsste ich dann statt counter++; einfach nur z.b. reinschreiben "GivePlayerMoney(playerid(??),10000);
    Zum Thema playerid, da bin ich mir grad eh unsicher ob man das in ner forschleife abfragen kann :S

  • Erklär uns am Besten nochmal schritt für Schritt, was genau du jetzt realisieren möchtest. Aus deinen Codeschnipseln werd ich nicht so ganz schlau.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Ich werd draus auch nicht schlau, das ist ja das problem xd
    Naja also erstmal startet man die mission mit

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    ResetPlayerWeapons(i);
    SetPlayerPos(i,382.3333,-2058.4187,10.7173);
    SetPlayerFacingAngle(i, 352.0760);
    SetCameraBehindPlayer(i);
    GivePlayerWeapon(i, 34,888);
    MissionID[i] = 1;


    }


    Falls dann einer stirbt soll er ja nichtmehr die variable haben bzw. resettet werden
    public OnPlayerDeath(playerid, killerid, reason)
    {
    SendDeathMessage(killerid, playerid, reason);


    //MissionIDs
    if(MissionID[playerid] == 1)
    {
    MissionID[playerid] = 0;
    }
    return 1;
    }



    So nun wird ja jedem nach und nach die variable bei nem tot auf 0 gesetzt, und dem letztem der dann die variable hat (last man standing) der soll son bissl Score und Geld gewinnen ^^


  • // OnPlayerDeath
    if (MissionID[playerid] == 1) MissionID[playerid] = 0
    counter = 0;
    for (new i = 0; i < MAX_PLAYERS; i ++) {
    if (MissionID[playerid]) counter ++;
    }
    if (counter == 1) { // counter == 1, also letzter man
    for (new i = 0; i < MAX_PLAYERS; i ++) {
    if (MissionID[playerid]) {
    GivePlayerMoney(...);
    MissionID[playerid] = 0;
    break;
    }
    }
    }


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Hab jetzt noch folgende warning ^^
    Woran kanns denn liegen?


    warning 219: local variable "i" shadows a variable at a preceding level


    for (new i = 0; i < MAX_PLAYERS; i ++)




    @edit, ich hätte nur das new wegmachen müssen sry und danke, ich teste mal nachher obs geht ^^
    @edit²: Muss nurnoch sehen obs dann auch mit mehreren leuten geht, danke schonmal an alle und speziell an LeijaT :)