MAX_PLAYERS Schleifen

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
  • So guten Morgen euch allen,


    ja ich bin es mal wieder, die Langeweile hat mich überrumpelt und aus diesem Grund kam diese Include ans Licht.
    Es geht um ein Thema was ich schonmal versucht hatte zu machen aber gefailt habe...jetzt habe ich mir einen neuen Alogrithmus ausgedacht und dieser sollte funktionieren :)
    Also hier nun einige Informationen über die Include:


    Wozu dient die Include?
    Also jeder von euch kennt das Problem MAX_PLAYERS ist eine Konstante die entweder einen Wert von 500 hat oder ihr euch einen anderen Wert definiert habt, aber sie hat nie den Wert der höchsten playerid+1 ;)
    So und nun kommt meine Include ins spiel, sie sorgt dafür, dass MAX_PLAYERS immer diesen Wert hat und sind Schleifen viel Schneller, da sie nicht mehr 500x durchlaufen sondern vielleicht nur noch 10x, jenachdem wie viele Spieler auf dem Server sind :)


    Wie funktioniert das jetzt genau?
    Also, da ich leider nicht direkt das Makro MAX_PLAYERS verändern sollte (da dies oft für Arrays genutzt wird) gibt es nun dieses Makro:
    m_players
    eine Spieler Schleife sähe also z.B. einfach so aus:


    for(new i; i<m_players; i++) {
    //Restcode
    }


    Download:
    Source-Code: Pastebin
    Direkter-Download: Mediafire


    Würde mich über ein kleines Feedback freuen :)


    mfg. :thumbup:


    • Edits

      Downloadlinks

    • Edits

      Downloadlinks²

    • Edits

      Downlaoad³

    • Edits

      Jetzt aber zum letzten mal...

    • Edits

      So, noch eine Verschönerung dank BlackAce

    ast2ufdyxkb1.png


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

    5 Mal editiert, zuletzt von Schwabbel ()

  • Wenn man wirklich mit einer zu intensiven Schleife zu kämpfen hat: Kann auch das unterhalb probiert werden.


    ---------------------------


    • Timer mit intensiven for Schleifen durch alle Spieler entfernen und in OnPlayerUpdate einbauen:


    Voraussetzung für die Integration in OnPlayerUpdate: Die Aufgaben der for Schleife müssen nicht für alle Spieler zum exakt gleichen Zeitpunkt ausgeführt werden.
    Eine for-Schleife die durch alle Spieler läuft und viel Inhalt enthält kann eine große Lag-Quelle sein und wird die CPU-Nutzung des Servers steigern, da viel zu viel auf einmal erledigt werden muss. Beispielsweise ein AntiCheat System das 10 verschiedene Cheatarten abdeckt und das für jeden einzelnen Spieler einzeln überprüft. Was natürlich viel zu viel Arbeit auf einmal erzeugen würde. Die Lösung: -Die Aufgaben bestmöglich verteilen.


    Vorher:
    public OnGameModeInit()
    {
    SetTimer("beispiel", 5000, 1 );
    return 1;
    }
    forward beispiel();
    public beispiel()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    //(1)* Viel inhalt in dieser Schleife ....
    SendClientMessage(i, FARBE, "BEISPIEL nachricht");
    }
    }


    Nachher:
    Kann bei intensiven Spieler/MAX_PLAYERS Schleifen so oft besser umgesetzt werden:
    new lastPublicBeispiel[MAX_PLAYERS];
    #define timerPublicBeispiel 5000
    public OnPlayerUpdate(playerid)
    {
    if((GetTickCount() - lastPublicBeispiel[playerid]) > timerPublicBeispiel)
    {
    lastPublicBeispiel[playerid] = GetTickCount();
    //(1)* Inhalt der Schleife zuvor, alle i's sollten mit playerid ersetzt werden
    SendClientMessage(playerid, FARBE, "BEISPIEL nachricht");
    }
    return 1;
    }
    So wird für jeden Spieler der Inhalt zu einer anderen Zeit ausgeführt und so bestmöglich verteilt(= Es wird nichtmehr zuviel auf einmal verlangt)
    ---------------------------

  • Wenn man wirklich mit einer zu intensiven Schleife zu kämpfen hat: Kann auch das unterhalb probiert werden.


    Das ist auch eine gute Idee, vielleicht hilft das einigen Usern :)


    Nicht du schon wieder.. Such dir mal nen Hobby oder sowas.
    Aber schaut ganz nett aus. Ich kenn mich damit zwar nicht so aus, aber es schon für mich schon um einiges komplizierter aus


    Danke :love:


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • So, ich musste nochmal was umändern, da ich Makros vertauscht hatte :D


    Bitte wenn ihr sie schon gedownloadet habt, erneuern ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Danke schön. Gleichmal gedownloadet ^^. Aber eine Frage also ist das wie MAX_PLAYERS nur schneller oder?


    (( Sorry für diese Frage aber will das ja richtig verstehen :D ))


    Nun im Prinzip ist es wie MAX_PLAYERS nur kleiner ;)


    MAX_PLAYERS hat einen konstanten Wert von 500 (eigentlich) und mein Makro ändert sich jenachdem wie viele Spieler auf dem Server sind ;)


    Deshalb wichtig: Nur für Spieler Schleifen einsetzen, nicht für Arrays (strings)!


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • ist sinnlos, da du Defines nicht zur Laufzeit ändern kannst.

    #define m_players HighestID
    würde reichen.


    Nein, das ist notwendig, da der Callback ja immer wieder aufgerufen wird und somit das Makro wieder undefined werden muss...


    PS:


    Mir ist ein kleiner Logikfehler unterlaufen...


    Jetzt hab ich das alles getestet und so wie es jetzt ist funktioniert es perfekt, davor war ein kleiner Fehler drinnen ^^


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Haxler:
    Das tut er auch überhaupt nicht.
    Das einzige was macht ist, dem compiler zu erzählen was er wann zu ändern hat.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski