MAX_PLAYERS Schleife

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
  • Tag Community,


    Will mein Script zur Zeit Ressourcen freundlicher machen und nutze viele For schleifen...
    Zu meiner Frage, kann ich MAX_PLAYERS durch

    stock GetOnlinePlayers()
    {
    new count;
    for(new pID; pID < MAX_PLAYERS; pID++)
    {
    if(IsPlayerConnected(pID))
    {
    count++;
    }
    }
    return count;
    }

    ersetzen? Dort nutze ich auch MAX_PLAYERS, deswegen frag ich lieber nach...


    Gibt eig noch andere Sachen um ein Script Ressourcen freundlicher zu machen?


    mfg

  • Code optimieren und Ressourcen sparen sind 2 verschiedene paar Schuhe.


    z.b. musst du nicht bei jeder nicht jedes mal Abfragen sondern kannst Aktionen auch kürzer gestalten wie z.b. bei Rückgaben und dass festlegen von Variablen oder anderen Sachen.


    statt


    if(variable == 2)variable = 4;
    else variable = 6;



    ginge auch dies


    variable = (variable == 2) ? 4 : 6;



    Bei Schleifen fragt man öfters Sachen ab und lässt dann immer wieder abfragen etc..


    for(new irgendwas;irgendwas<200;irgendwas++)
    {
    if(wert != irgendwas)continue; // einfach gleich zur nächstens Stelle springen
    }



    Oder wenn ein Wert Beispielsweise nur einmal im gesamten Code gesucht wird kann man die Schleife auch unterbrechen mit der Anweisung break.


    Ansonsten hängt alles meist einfach an der Basis, z.b. muss man nicht unbedingt string compare benutzen um herauszufinden ob ein Array keine Zeichen enthält sprich von Anfang an 0 als Länge hat. das reicht auch ein :


    if(array[0] == '\0')


    oder


    if(!array[0])


    dann kommen noch Sachen hinzu wie z.b. wenn man abfragen möchte ob etwas falsch oder wahr ist, die meisten verwenden "Integer" als Datentyp was aber nicht nötig wäre um ein simples ja oder nein abzufragen denn Integer reserviert letztendlich viel mehr Speicher da wäre selbst "char" als Datentyp logischer. Für den Datentyp Boolean wird wirklich nur der kleinste Teil des Speichers benötigt.


    statt :


    new einevariable;


    zu definieren reicht auch


    new bool:einevariable;


    wenn man folgende Abfrage startet


    if(einevariable)



    in C/C++ z.b. würde ich nie einen Standard Integer Wert definieren für einen 2 stelligen Wert sprich ein Wert der nie über die 2 stellen bzw. 3 stellen hinaus geht, da reicht auch "short" als Datentyp völlig aus denn dieser braucht im Endeffekt weniger Speicher, auch byte und char kämen da mehr in Frage. Klar in Pawn gibt es nun nicht alle Datentypen aber doch genug um sie logisch einzusetzen.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Variable erstellen außerhalb der Funktionen, bei OnPlayerConnect Variable erhöhen und bei OnPlayerDisconnect wieder abziehen.


    Und nebenbei, das MAX_PLAYERS bedeutet einfach nur im eine definierte Zahl, beim Kompilieren wird das MAX_PLAYERS somit z.B. durch eine 300 ersetzt mehr nicht.

    Why do programmers always mix up Halloween and Christmas?
    Oct 31 == Dec 25

  • Kannst du so machen.


    Aber nicht so:
    for(new i=0; i<GetOnlinePlayers(); i++)


    sondern so:

    new players = GetOnlinePlayers();
    for(new i=0; i<players; i++)


    Weil das Resourcen spart, weil der sonst x-mal die Funktion aufruft.
    Dank BlackAce weiß ich das nun :P

  • Achja und eventuell hast du einen Denkfehler. Wenn du die Anzahl der Online Spieler dann für eine Abfrage verwendest wobei die Schleife z.B. von 1-15 geht da 15 User Online sind und diese als playerids verwendet werden kommt das nicht hin.

    Zitat

    Spieler mit den IDs 1 - 10 betreten den Server.
    Spieler mit den IDs 3-7 verlassen den Server.
    Die Variable steht auf 5 Spieler Online.
    Die Schleife würde nun 1-5 Abfragen, doch ID 1,2,8,9 und 10 sind Online.


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • variable = (variable == 2) ? 4 : 6;
    Könnte das noch jemand genauer erläutern? Verstehe das nicht so ganz mit dem Fragezeichen und Doppelpunkt


    Ich nenne es eine verkürzte Abfrage aber man verwendet eigentlich Ternärer Operator für den Ausdruck "?" in C++/C/C# und den meisten Syntax ähnlichen Sprachen.



    • ? Ist die Einleitung für eine weitere Abfrage
    • : ist die Entscheidung

    variable = (wert == 2) ? 5:(weitereabfrage == 7) ? 7:8;
    sprich wir fragen ab und geben logisch wieder.
    eine einzelne Abfrage
    variable = (!wert) ? (true):(false); // if(!wert)variable = true; else variable = false;


    natürlich wäre diese Abfrage Sinnlos und ginge auch anders ...
    variable = (!wert); // gibt dann true oder false wieder sprich wahr , falsch
    mehrere Abfragen :
    variable = (wert == 1) ? (5) : (wert == 2) ? (7) : (wert == 3) ? (8):(9);
    sprich



    if(wert == 1)variable = 5;else if(wert == 2)variable = 7;else if(wert == 3)variable = 8;else variable = 9;

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • do.de - Domain-Offensive - Domains für alle und zu super Preisen




  • new bool:val;
    val |= true;
    val |= true<<1;
    val |= true<<2;
    printf("%b",val);


    Also bei PAWN ist das nicht so auch ein bool verwendet 4 bytes wie ein Integer , da ist die Verwendung von char sinnvoller und verwendet nur 1 Byte.
    Was hier am meisten sinn macht ist die verwendung von bitoperatoren und das setzen einzelner werte also daher bitarrays oder bitvariabeln was auch möglich ist.