Schnellere Spieler orientierte 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
  • Die Funktion selber ist ja nur ein zurückgeben einer Variable. Also ansich kannst du auch die Variable direkt nutzen.
    Es verbraucht also weniger als wenn ich Eine Schleife bei 200 Slots habe jedoch nur 150 belegt sind.

  • Fuck ^^ ich meinte die Standard Funktion MAX_PLAYER bzw. ein vorher deklarierter Wert


    Ja eben nicht, weil bei MAX_PLAYERS die Schleife z.B. 500 oder 50x durchgeführt wird und bei mir wird genau nach der höchsten id gesucht sprich, wenn 5 Spieler online sind, wird die Schleife nur 5x durchgeführt und das ist wesentlich schneller und besser !


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Wenn aber X Spieler online sind, und die Spieler von vorne an beginnen den Server zu verlassen sinkt bei dir die höchste ID wieder, das heißt die hintersten Spieler werden einfach ignoriert.


    Außerdem bringt es nicht so viel, da unbelegte Slots/IDs dennoch durchgegangen werden. Das lässt sich aber auch nicht so leicht vermeiden.

    Moderator der Bereiche: Coding, Vorstellungsrunde und Handelsecke. Über Verwarnungen, falls du zu den Wenigen gehörst, die eine Verwarnung von mir erhalten haben, kannst du jederzeit mit mir reden, sofern der Umgangston stimmt.


    expect us. / unkompetent. Das neue dynamisch. / easy-stripping.net - coming soon! / "9§. the entire website bestands out of english." / Vollprofi in allem, wo gibt und noch mehr; kann auch OOP.
    Kleine Coding-Frage? Schau doch in #dev im IRC vorbei, wir können dir sicher helfen.


    Ich bin für Aufträge im Bereich der Webentwicklung (z.B. User Control Panel) zu haben. Kontaktiere mich diesbezüglich einfach in einer privaten Nachricht mit deinen, möglichst konkreten, Vorstellungen.


    lesen.denken.posten. - [22:54:14] <Goldkiller2> früher gabs immer so coole user da stand in der signatur "lesen.denken.posten."


    Mafia 2 Multiplayer (m2mp.de) - Eine kostenlose Modifikation für Mafia 2, die es, ähnlich wie SAMP, erlaubt über das Internet oder LAN mit bis zu 1000 anderen Spielern zu spielen.

  • Wenn aber 50 Spieler online sind, und die Spieler von vorne an beginnen den Server zu verlassen sinkt bei dir die höchste ID wieder, das heißt die hintersten Spieler werden einfach ignoriert.


    Falsch, du hast die Include anscheinend nicht verstanden ;)


    Außerdem bringt es nicht so viel, da unbelegte Slots/IDs dennoch durchgegangen werden. Das lässt sich aber auch nicht so leicht vermeiden.


    Nicht wenn MAX_PLAYERS > höchste spielerid ist (und das ist zu 99.9% der Fall) ;)
    //Edit: Sprich solange MAX_PLAYERS > höchste spielerid ist, hat meine Funktion einen Vorteil !


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • if(playerid == h_ID && playerid > 0) h_ID--;
    Sagt da aber was anderes. Du setzt die ID beim connecten auf die höchste playerid, beim verlassen ziehst du aber nur eins ab. Sinnvoller wäre es, die höchste ID zu holen (dazu wäre aber eine Schleife nötig). Das löst ganz nebenbei auch das o.g. Problem.

    Moderator der Bereiche: Coding, Vorstellungsrunde und Handelsecke. Über Verwarnungen, falls du zu den Wenigen gehörst, die eine Verwarnung von mir erhalten haben, kannst du jederzeit mit mir reden, sofern der Umgangston stimmt.


    expect us. / unkompetent. Das neue dynamisch. / easy-stripping.net - coming soon! / "9§. the entire website bestands out of english." / Vollprofi in allem, wo gibt und noch mehr; kann auch OOP.
    Kleine Coding-Frage? Schau doch in #dev im IRC vorbei, wir können dir sicher helfen.


    Ich bin für Aufträge im Bereich der Webentwicklung (z.B. User Control Panel) zu haben. Kontaktiere mich diesbezüglich einfach in einer privaten Nachricht mit deinen, möglichst konkreten, Vorstellungen.


    lesen.denken.posten. - [22:54:14] <Goldkiller2> früher gabs immer so coole user da stand in der signatur "lesen.denken.posten."


    Mafia 2 Multiplayer (m2mp.de) - Eine kostenlose Modifikation für Mafia 2, die es, ähnlich wie SAMP, erlaubt über das Internet oder LAN mit bis zu 1000 anderen Spielern zu spielen.

  • Sagt da aber was anderes. Du setzt die ID beim connecten auf die höchste playerid, beim verlassen ziehst du aber nur eins ab. Sinnvoller wäre es, die höchste ID zu holen (dazu wäre aber eine Schleife nötig). Das löst ganz nebenbei auch das o.g. Problem.


    Nicht wirklich ^^


    Es gibt gar kein Problem, das bildest du dir gerade irgendwie ein...


    Sobald die höchste Spielerid disconnected, wird der Wert um 1 reduziert, sehr richtig, das hat zwar zur folge, dass es nicht sonderlich genau ist, aber tortzdem, ist das die höchste Spielerid und somit werden alle Spieler in einer Schleife mit dieser Variable berücksicht ;)


    Wie du sagst, man bräuchte eine weitere Schleife um jetzt auf die genaue Anzahl der Spieler wieder zu stoßen, ich finde allerdings, dass ist irrelevant da ein sehr naher Wert denke ich mal völlig ausreicht ^^


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Hallo,
    anscheinend ist da noch ein Flüchtigkeitsfehler drinnen:
    return CallLocalFunction("_OnPlayerConenct", "i", playerid);
    Du hast _OnPlayerConenct nicht geforwardet sondern _OnPlayerConnect
    forward _OnPlayerConnect(playerid);


    MfG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

    Einmal editiert, zuletzt von Logan ()

  • Zitat

    gibt diese Funktion die höchste spielerid auf dem Server wieder, dies macht die Schleifen erheblich schneller und


    ressourcenschonender ;)


    Was ist "erheblich" schneller ? 1ms auf 100.000.000 Durchläufen ? Die Wortwahl ist mMn total irreführend.
    Das Gleiche gilt für "Ressourcenschonender". Ich bin auch der Meinung,dass du es nur geschrieben hast damit man hier eine Art
    "Wow" Effekt entsteht.Unerfahrene Scripter werden durch so eine Wortwahl fehlgelenkt. Denn bei den Schleifen anzusetzen um sein Script
    zu optimieren ist nicht der richtige Punkt. Auch gibt es Fälle,bei denen deine Methode sogar langsamer ist als die Nutzung von MAX_PLAYERS.


    Es ist auch keine Neuheit und sowas gibt es bereits um Welten besser von anderen Autoren.


    Übrigens:
    for(new i , j = GetID() ; i < j; i++)
    So wäre es theoretisch noch schneller.


    Zitat

    Wie du sagst, man bräuchte eine weitere Schleife um jetzt auf die genaue Anzahl der Spieler wieder zu stoßen, ich finde


    allerdings, dass ist irrelevant da ein sehr naher Wert denke ich mal völlig ausreicht ^^


    Ja genau...sehr naher Wert völlig ausreicht .
    Denn mit extra Funktion eine Schleife bis 498 durchzuführen ist ja auch wirklich besser als eine Schleife die immer bis 499 geht .. .



    Punktewertung lasse ich aus,würde nämlich nicht positiv ausfallen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Sagt da aber was anderes. Du setzt die ID beim connecten auf die höchste playerid, beim verlassen ziehst du aber nur eins ab. Sinnvoller wäre es, die höchste ID zu holen (dazu wäre aber eine Schleife nötig). Das löst ganz nebenbei auch das o.g. Problem.


    Schau dir mal meine version an, dort ist es mit der schleife gelösst, da ich mir die selben gedanken gemacht habe.
    Natürlich ist diese Include nicht so gut wie Foreach.

  • Denn mit extra Funktion eine Schleife bis 498 durchzuführen ist ja auch wirklich besser als eine Schleife die immer bis 499 geht .. .


    Also das ist ja mal ein Scherz -.-



    Gutes Argument...trotzdem funktioniert es, verstehe ich gerade selber nicht ^^


    Punktewertung lasse ich aus,würde nämlich nicht positiv ausfallen.


    Was würdest du denn Bewerten, den Code oder den sinnvollen Nutzen, der ja für dich irrelevant sein kann, da du es ja nicht nutzen wirst :huh:


    mfg. :rolleyes:

    ast2ufdyxkb1.png


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

  • Was würdest du denn Bewerten, den Code oder den sinnvollen Nutzen, der ja für dich irrelevant sein kann, da du es ja nicht nutzen wirst :huh:


    Code 1 Punkt
    (sinnvollen) Nutzen 0 Punkte


    Du hättest 2 Punkte für Nutzen bekommen, wenn du nicht mit static gearbeitet, der Variable einen vernünftigen Namen gegeben und die Funktion GetID rausgelassen hättest.
    Dann wäre es noch sinnvoll und definitv einigermaßen nutzbar.


    Du redest von ressourcen "Schonung", verlangst aber vom Scripter immer wieder eine Funktion in der Schleife aufzurufen, auch wenn die nur einen Wert zurück gibt.
    Ernsthaft was soll der quatsch?
    Die Warscheinlichkeit das ein Spieler in dem momment Connected in der die Schleife gerade läuft, ist gleich 0.


    Du machst wieder genau das, was ich dir letztesmal gesagt habe: Du denkst einfach NICHTS zu Ende.


    Es ist ja schön und gut, wenn du Dinge vereinfachen möchtest und auf ressurcenschonung ziehlst.
    DIe erste Version die du Released hast, war schlimmer als das hier.


    @dead: hat auch vollkommen richtig erkannt, das dieser Code
    if(playerid == h_ID && playerid > 0) h_ID--;
    einfach nicht so funktioniert wie du dir das vorstellst.
    So wie fast alle deine Includes.
    Sei dein Streamer oder deine Limit Include oder dein Inventar "System".


    Beispiel:
    Spieler 1,2,3,6,9 sind auf dem Server
    h_ID steht jetzt auf 9


    ID 9 verlässt den Server.
    Was passiert?
    h_ID steht jetzt auf 8 und das obwohl die nächste höchste ID 6 wäre


    ich find auch diesen Code
    if(playerid > h_ID) h_ID = playerid;
    sehr sinnvoll
    Kein Spieler connected - h_ID ist 0
    Ein Spieler connected - h_ID ist 0
    Noch ein Spieler connected - h_ID ist 1


    Du hast IMMER egal welche Situation, einen "Slot" zuwenig :thumbdown:


    Es tut mir auch nicht wirklich Leid das ich hier kein gutes Haar an der Include hinterlasse,
    ich kann nicht mal etwas positives darüber sagen - was absolut traurig ist.

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

    Margarete Stokowski

  • Sei dein Streamer oder deine Limit Include oder dein Inventar "System".


    Irgendwie stimmt das ja mal so überhaupt nicht :huh:


    Beispiel:
    Spieler 1,2,3,6,9 sind auf dem Server
    h_ID steht jetzt auf 9


    ID 9 verlässt den Server.
    Was passiert?
    h_ID steht jetzt auf 8 und das obwohl die nächste höchste ID 6 wäre


    LoL, das habe ich doch oben schon gesagt, dead meint aber was völlig anderes !


    Kein Spieler connected - h_ID ist 0
    Ein Spieler connected - h_ID ist 0
    Noch ein Spieler connected - h_ID ist 1


    Denk mal über den Code nach, das ist so richtig :rolleyes:


    der Variable einen vernünftigen Namen gegeben


    Na, h_ID, h = highest ID = playerid ? Finde ich sinvoll...


    Die Warscheinlichkeit das ein Spieler in dem momment Connected in der die Schleife gerade läuft, ist gleich 0.


    Welche Schleife :huh:

    ast2ufdyxkb1.png


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

  • Welche Schleife :huh:


    Dann ist der Titel und die erste Zeile in der Include also nur zufällig dahin gekommen?
    Interessant :thumbup:


    Na, h_ID, h = highest ID = playerid ? Finde ich sinvoll...

    Ohne kontext macht das ja auch keinen Sinn - statt static new benutzen - ihr einen vernünftigen Namen geben, so das sie im Script auch verwendbar ist.
    Das hab ich gemeint



    Denk mal über den Code nach, das ist so richtig :rolleyes:

    Das sagt gerade der richtige.
    if(playerid > h_ID) h_ID = playerid;
    Wo ist hier bitte die Logik?


    Spieler mit ID 0 connected h_ID = 0


    for(new i;i<GetID();i++)
    {
    //tue was
    }
    Dieser Code wird absoult nicht ausgeführt.
    Warum weil i 0 ist und GetID 0 zurück gibt -> false da 0 nicht kleiner als 0 ist.


    Sinnvoll wäre es hier h_ID = playerid+1; zu nehmen,
    da sonst einfach ein Slot fehlt



    LoL, das habe ich doch oben schon gesagt, dead meint aber was völlig anderes !

    Dead meinte GENAU das - du hast dich wieder mit "ungefährer Wert" rausgeredet :thumbdown:

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

    Margarete Stokowski

  • Dead meinte GENAU das - du hast dich wieder mit "ungefährer Wert" rausgeredet


    Dann lese den Beitrag mal richtig, der hat was anderes noch gemeint !


    Dann ist der Titel und die erste Zeile in der Include also nur zufällig dahin gekommen?
    Interessant


    Ja natürlich -.-


    Ohne kontext macht das ja auch keinen Sinn - statt static new benutzen - ihr einen vernünftigen Namen geben, so das sie im Script auch verwendbar ist.
    Das hab ich gemeint


    Ja ist sowas


    Wo ist hier bitte die Logik?


    Die Logik ist die, dass h_ID den Wert der höchsten playerid hat, was ja auch zutrifft...


    Sinnvoll wäre es hier h_ID = playerid+1; zu nehmen,
    da sonst einfach ein Slot fehlt


    Ja, müsste man dann wohl so machen...

    ast2ufdyxkb1.png


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

  • Er möchte dir klar machen das wenn playerid = 0 und h_id = 0 ist das die Schleife dann NICHT ausgeführt wird!


    Er hat nach der Logik hinter der Abfrage gefragt und das ist sie -.-


    Das er das damit meint ist mir auch klar, schreibe ich doch im Zitat drunter... :rolleyes:

    ast2ufdyxkb1.png


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

  • Ja ist sowas


    Sicherlich nicht - ein Funktionsaufruf dauert länger als eine Variable auszulesen - das ist Grundwissen mein lieber :thumbup:
    Du hast ja static benutzt - deswegen ist es im Script NICHT nutzbar.


    Deswegen sollst du new verwenden und ihr einen vernünftigen Namen geben - sie MAXID - oder MAX_ID - etwas was man auch wirklich zuordnen kann

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

    Margarete Stokowski

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