[INCLUDE] TimerSys Include by Templer v1.1 [Samp 0.1 oder höher]

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
  • Wiedermal Hallöle Leute ^^,


    Vorwort:

    Schon wieder der Templer mit seiner gleichen Include vorstellung, aber nunja ich kann einfach keine Zeit dafür aufbringen nun schöne Bilder zu posten, außerdem ist es auch eher in die Programmierung gedacht und nicht für Spieler am Server ^^, ich stelle euch vor das:

    TimerSys Include by Templer
    (for Samp 0.1 or higher) //auch wenn es blöd klingt :P

    Dieses Include ersetzt die Bugghaften SetTimer und SetTimerEx. Aus diesem Grund bugghaft, weil diese Funktionen bei falschen Verwendung bzw. bei richtiger Verwendung meisten (betreffend Strings) Ihren Geist aufgeben und nur sinnlos an CPU Lastung bringen oder wie zum Beispiel dem Herrn Kollegen Hagi Probleme bereiten. Vorerst wollte ich es dem Hagi im Thread Posten, war aber jedoch noch unglücklich über das System betreffend ein paar Fehler. Dieses System (sollte es halt, hab ich noch nicht getestet) die Server von CPU Auslastung schützen, indem nur ein einziger Timer läuft. Dieser Timer überprüft ledeglich nur, ob Timer mit meinem Include eingestellt wurden ^^. Funktionieren tut das Abrufen per CallLocalFunction bzw. CallRemoteFunction, was anpassbar ist am Script oben. Die Standartkonfiguration ist nicht empfehlenswert, aber zu beachten ist, dass ihr mit dem Überprüfungstimer nicht zu niedrig geht bzw. wirklich nur soviel Einstellt wieviel Ihr braucht (Nähere Information unten...). Die Idee kam mir damals hoch, als ich sowas suchte und bei Einstein seinen ProTimer gehört habe. Leider sind alle Mirrors kaputt gewesen und ich war total gekränkt. (Nichtmal Erfahren wie seine Methode funktioniert hat ;( ) Nun ich belasse es mal beim traurig sein und wünsche euch Viel Spaß damit ^^.


    Verwendung:

    SetFastTimer(startname[], time, repeat = 0, endtimer = 0)

    • startname[] ... Der Name von der public Funktion welche aufgerufen werden soll.
    • time ... Zeit in ms, wie oft er sich wiederholen soll.
    • repeat ... 0 (= Nur einmalige Ausführung); 1 (= Wiederholende Ausführung) OPTIONAL
    • endtimer ... Zeit in ms wann der Timer aufhören soll, bei zum Beispiel sich wiederholenden Timern OPTIONAL

    SetFastTimerEx(startname[], time, repeat = 0, const params[], {Float,_}:...)

    • startname[] ... Der Name von der public Funktion welche aufgerufen werden soll.
    • time ... Zeit in ms, wie oft er sich wiederholen soll.
    • repeat ... 0 (= Nur einmalige Ausführung); 1 (= Wiederholende Ausführung) OPTIONAL
    • params[] ... Die Formatierung von jeder angegebenen Tag/Format.
    • {Float,_}:... Variablen/Tags die angegeben werden. Siehe Beispiel von SetTimerEx und unten.
    • endtimer ... Zeit in ms wann der Timer aufhören soll, bei zum Beispiel sich wiederholenden Timern OPTIONAL

    KillFastTimer(timerid) //*Verändert ab v1.1*

    • timerid ... Die ID vom Timer, welche erstellt wurde.


    Funktionen:

    • Verbesserte Technologie, als die normalen Standart Funktionen SetTimer / SetTimerEx.
    • Automatische Optimierungen der Timer bei Bedarf.
    • Unterstützung mehrerer "kurzen" Timer ohne Belastung des Servers.
    • Einfache Anwendung und Installation. Plug & Play
    • Leichthabende Konfiguration von eigener Vorstellung.
    • Ressourcenschonend wie möglich geschrieben (Nach eigener Erfahrung).
    • Einfache Systematik mit übersichtlichen Definitionen zum selber Verstehen.
    • Lächerliche Ausführung von CallLocalFunction und CallRemoteFunction 8)
    • Keine Plugins oder Funktionen notwendig.

    Beispiele:
    Ich zeige euch nun hier ein paar Beispiele von SetFastTimer, SetFastTimerEx und KillFastTimer, wir nehmen an, dass diese Funktion existiert:


    forward Funktionstest();
    public Funktionstest()
    {
    for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
    {
    SendClientMessage(playerid, 0xFFFFFFAA, "Stirbt der Bauer im Oktober, braucht er im Winter keinen Pullover!");
    }
    return 1;
    }


    Dann rufen wir diese Funktion zum einen einmalig auf ohne Wiederholung nach sagen wir 3 Sekunden:
    SetFastTimer("Funktionstest", 3000, 0);
    ... Wenn er sich wiederholen soll, einfach so:
    SetFastTimer("Funktionstest", 3000, 1);
    ... und wenn die Funktion sich wiederholen soll für 10 Sekunden, dann so:
    SetFastTimer("Funktionstest", 3000, 1, 10000);


    Denn wie oben zu sehen ist, gibt es den optionalen Parameter endtimer.


    Nun sagen wir, die gleiche Funktion jedoch Spieler bezogen:
    forward Funktionstest(playerid);
    public Funktionstest(playerid)
    {
    SendClientMessage(playerid, 0xFFFFFFAA, "Stirbt der Bauer im Oktober, braucht er im Winter keinen Pullover!");
    return 1;
    }
    Dann rufen wir diese Funktion zum einen einmalig auf ohne Wiederholung nach sagen wir 3 Sekunden:
    SetFastTimerEx("Funktionstest", 3000, 0, "d", playerid);
    ... Wenn er sich wiederholen soll, einfach so:
    SetFastTimerEx("Funktionstest", 3000, 1, "d", playerid);
    ... und wenn die Funktion sich wiederholen soll für 10 Sekunden, dann so:
    SetFastTimerEx("Funktionstest", 3000, 1, "d", playerid, 10000);


    Beim letzten kann es unmöglich erscheinen, aber diese Funktion endtimer existiert auch dort ^^.


    Nun kommen wir dazu, einen Timer zu töten und dies geht nun einfach, indem wir die ID vom Timer in eine Variable ablagern und diese wie gewohnt töten.
    new FunTimer;
    FunTimer = SetFastTimer("Funktionstest", 3000, 1, "d", playerid);
    KillFastTimer(FunTimer);
    Diese Variante funktioniert genauso bei SetFastTimerEx auch und natürlich auch, wenn endzeit-Parameter bei beiden definiert wurde. Natürlich bringt sich das Töten von Timern nichts, wenn es sich nicht wiederholt.
    Ansonsten bei weiteren Fragen einfach Posten ^^.


    Installation:

    • Öffne dein GameMode mit PWNo
    • Füge oben im Script unter #include folgendes dazu: #include <timersys>
    • Ersetze vorhande Timer durch SetFastTimer oder
      füge in deinem GameMode oben folgendes hinzu:
      #define SetTimer SetFastTimer
      #define SetTimerEx SetFastTimerEx
      #define KillTimer KillFastTimer
      ACHTUNG: KillTimer benötigt normalerweise die TimerID. Meine Version benötigt nur den Namen um Variablen zu sparen. Siehe Beschreibung oben.Seit Version 1.1 funktioniert die Methode standartmäßig mit der TimerID. Siehe Beispiele oben!
    • Kompiliere dein GameMode mit PWNo
    • Starte deinen Testserver


    Credits:
    /* TimerSys Include by Templer
    (for SAMP 0.3 / or higher)
    Dieses Script darf von jedermann verändert und benutzt werden!
    Mir ist es sogar egal, wenn Ihr was von hier für euren Vorteil rauskopiert!
    Was jedoch nicht Geduldet wird, dass das Copyright entfernt wird vom Script!


    Credits:
    -Double-O-Seven : Für das Zeigen wie Include und GM am besten kommunizieren!
    -Samp-Team : Die es überhaupt ermöglicht haben sowas Programmierbar für GTA zu machen!
    -Hagi: Er mich darauf aufmerksam machte, dass KillFastTimer einige Bugs bereitstellte in der ersten Version*/

    Download:


    TimerSys v1.0 Pastebin-Link
    TimerSys v1.0 Download-Link


    TimerSys v1.1 Pastebin-Link
    TimerSys v1.1 Download-Link
    (Nebenbei gemerkt ist es auch als Dateianhang hier im Forum verfügbar, sollte es zu DownloadProblemen von den Hosts kommen)


    Changelog v1.1:

    • Falsche TimerID Sortierung bei KillFastTimer behoben.
    • Kleine Code Optimierungen die das Script sinnlos um ein paar ms gebremst haben.
    • KillFastTimer erfordert nichtmehr Timernamen sondern die TimerID vom Timer.
    • SetFastTimer / SetFastTimerEx geben nun die Timer ID zurück.
    • Hagi zu Credits hinzugefügt, da er diese oben genannten Bugs gemeldet hat.


    Für weitere Fragen oder Anregungen könnt Ihr natürlich unten posten ... ;)


    Mfg Templer


    //Edit:
    -Neue Version hinzugefügt und Co...

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

    Einmal editiert, zuletzt von Templer ()

  • Eine schöne Include, Herr Templer ;)


    //Schade nur, dass es nicht mit dem String geht

  • Joa, wollte ich auch erwähnen! In meiner nächsten Version wird das mim String klappen. Denn beim jetzigen SetTimerEx funktioniert der String garnicht ^^.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Es steht auch in meinem Text drinnen, dass ich damals dies haben wollte, aber danke. Sowas hab ich von ihm lang gesucht ^^. Jedoch anzumerken, dass mein Include mehr Funktionalität bietet, als das von Einstein.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • So ich versteh das mit dem KillTimer nicht so ganz.


    Ich hab nen Timer der für jeden Spieler bezogen ist.
    Die Timerid wird in PVarInt gespeichert direkt beim erstellen


    SetPVarInt(playerid,RBWEG_KEY,SetTimer(...));


    Wie soll ich das jetzt mit den Funktionsnamen machen ? Ich kann die ja schlecht in SetPVarString reinschreiben, da ja bei SetTimer nicht der funktionsname returnt wird.


    Kannste mir damit mal helfen?

  • @ Hagi Danke für die Bugmeldung, ich habe nun einige Bugfixes betreffend FastKillTimer behoben. Ich editier oben mal das Thema...


    //Edit wegen neuer Version:
    Hier nun ein kleines Beispiel für dich Hagi, wie es funktioniert:


    forward PlayerTimer(playerid);


    public OnPlayerConnect(playerid)
    {
    SetPVarInt(playerid,"PlayerTimerID",SetFastTimerEx("PlayerTimer", 1000, 1, "d", playerid)); //Erstellt für Spieler Timer und lagert ID in PVar 'PlayerTimerID' ab.
    }
    public OnPlayerDisconnect(playerid)
    {
    KillFastTimer(GetPVarInt(playerid, "PlayerTimerID")); //Killt den SpielerTimer mit der ID von 'PlayerTimerID'
    DeletePVar(playerid, "PlayerTimerID"); //Löscht den PVar 'PlayerTimerID'
    }


    public PlayerTimer(playerid) //Spielerseitiger Timer
    {
    //Blah Blah Blah
    return true;
    }


    @ RFT Naja, mir wäre es lieber wenn du mir keine Beurteilung gibst, wenn du es nichtmal getestet hast ^^ Da ich jederzeit auf Vorschläge warte.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

    Einmal editiert, zuletzt von Templer ()

  • Ich bekomms zwar jetzt compiled, aber wenn ich InGame zum Beispiel mein Carrespawn starte starte, dann zählt er mal die Zeit gar nicht runter, bzw zählt bis 0 und bricht dann einfach ab.


    Oder manche Events zählen auch nicht mehr runter.


    public carrespawn()
    {
    if(carrespawncounter == 0)
    {
    TextDrawHideForAll(carrespawntext);


    for(new i=0;i<MAX_VEHICLES;i++)
    {
    if(IsVehicleOccupied(i) == 0)
    {
    SetVehicleToRespawn(i);
    }
    }
    }
    else
    {
    carrespawncounter --;


    new string[128];
    format(string,sizeof(string),"Carrespawn:~n~%d Sekunden",carrespawncounter);


    TextDrawHideForAll(carrespawntext);
    TextDrawShowForAll(carrespawntext);
    TextDrawSetString(carrespawntext,string);


    SetTimer("carrespawn",1000,0);
    }
    }



    Weisste vllt woran das liegt ?


    edit: Das hier steht diverse mal in den Logs

    Zitat


    [13:03:28] [FastTimer]: Der zu löschende Timer mit der ID 20 wurde nicht gefunden!

  • public carrespawn()
    {
    if(carrespawncounter == 0)
    {
    TextDrawHideForAll(carrespawntext);
    for(new i=0;i<MAX_VEHICLES;i++)
    {
    if(IsVehicleOccupied(i) == 0)
    {
    SetVehicleToRespawn(i);
    }
    }
    }
    else
    {
    carrespawncounter --;
    new string[128];
    format(string,sizeof(string),"Carrespawn:~n~%d Sekunden",carrespawncounter);
    TextDrawHideForAll(carrespawntext);
    TextDrawShowForAll(carrespawntext);
    TextDrawSetString(carrespawntext,string);
    }
    SetTimer("carrespawn",1000,0);
    }


    Hast du auch oben GM folgendes definiert?
    #define SetTimer SetFastTimer
    #define SetTimerEx SetFastTimerEx
    #define KillTimer KillFastTimer


    //Edit: Ich sehe grad deine Meldung und wie du dein Timer definiert hast! Zitat vom Topic Oben:

    Zitat

    Natürlich bringt sich das Töten von Timern nichts, wenn es sich nicht wiederholt.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Je genau ich hab die Defines so oben drin.


    das hier


    #define SetTimer SetFastTimer #define SetTimerEx SetFastTimerEx #define KillTimer KillFastTimer


    Und warum muss ich den Timer außerhalb der ersten If haben ? Der Public soll ja nur aufgerufen werden, wenn die Variable noch nicht auf 0 ist.

  • Du meintest doch:

    Zitat

    Ich bekomms zwar jetzt compiled, aber wenn ich InGame zum Beispiel mein Carrespawn starte starte, dann zählt er mal die Zeit gar nicht runter, bzw zählt bis 0 und bricht dann einfach ab.

    Also ich versteh dich irgendwie nicht xD

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Ja die Funktion "carrespawn" wird einmal per Command aufgerufen und an der stelle wird die Variable carrespawncounter = integer gesetzt.


    Dann wird die Funktion aufgerufen. Wenn dort carrespawncounter != 0 ist, wird carrespawncounter -1 gerechnet. Der Timer wird dann erneut einmal gestartet und das ganze wiederholt sich. Sollte carrespawncounter jetzt == 0 sein, werden alle Cars respawnt und das Textdraw verschwindet. Der Timer wird nicht erneut aufgerufen.


    Das Problem war jetzt, dass wenn carrespawncounter == 0 war, keine Autos respawnt wurden und der Textdraw nicht verschwandt. Ich denke es lag daran, dass der Timer im Falle carrespawncounter != 0 nicht wieder aufgerufen wurde, und da liegt das Problem weil ich nicht weiß warum.

  • Zeig mir mal kurz, wie du das public Aufrufst und ich zeig dir eine andere Variante, die besser ist.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • dcmd_carrespawn(playerid,params[])
    {
    new sekunden;


    if(sscanf(params, "d",sekunden))
    {
    return SendClientMessage(playerid,weiß,"Benutzung: /carrespawn [sekunden]");
    }


    if(GetPVarInt(playerid,ADMIN_KEY) >= 4)
    {
    if(sekunden >= 1 && sekunden <= 60)
    {
    carrespawncounter = sekunden;


    new string[32];
    format(string,sizeof(string),"Carrespawn:~n~%d Sekunden",carrespawncounter);

    TextDrawShowForAll(carrespawntext);
    TextDrawSetString(carrespawntext,string);

    SetTimer("carrespawn",1000,0);

    new admin[MAX_PLAYER_NAME];
    new string2[64];
    GetPlayerName(playerid,admin,sizeof(admin));
    format(string2,sizeof(string2),"Admin %s lässt alle unbenuzten Fahrzeuge respawnen",admin);


    SendClientMessageToAll(grün,string2);


    //admincmdlog(string2);
    }
    else
    {
    SendClientMessage(playerid,rot,"Fehler: Mögliche Sekunden 1-60");
    }
    }
    else
    {
    SendClientMessage(playerid,rot,"Du besitzt nicht die nötige Einstufung zur Ausführung dieses Befehls");
    }
    return 1;
    }


    public carrespawn()
    {
    if(carrespawncounter == 0)
    {
    TextDrawHideForAll(carrespawntext);

    for(new i=0;i<MAX_VEHICLES;i++)
    {
    if(IsVehicleOccupied(i) == 0)
    {
    SetVehicleToRespawn(i);
    }
    }
    }
    else
    {
    carrespawncounter --;


    new string[128];
    format(string,sizeof(string),"Carrespawn:~n~%d Sekunden",carrespawncounter);


    TextDrawHideForAll(carrespawntext);
    TextDrawShowForAll(carrespawntext);
    TextDrawSetString(carrespawntext,string);


    SetTimer("carrespawn",1000,0);
    }
    }

  • new gCarRespawnTimerID = -1;


    dcmd_carrespawn(playerid,params[])
    {
    if(gCarRespawnTimerID != -1) return SendClientMessage(playerid, weiß, "CarRespawn wird gerade durchgeführt...");
    new sekunden;
    if(sscanf(params, "d",sekunden))
    {
    return SendClientMessage(playerid,weiß,"Benutzung: /carrespawn [sekunden]");
    }
    if(GetPVarInt(playerid,ADMIN_KEY) >= 4)
    {
    if(sekunden >= 1 && sekunden <= 60)
    {
    carrespawncounter = sekunden;
    new string[32];
    format(string,sizeof(string),"Carrespawn:~n~%d Sekunden",carrespawncounter);
    TextDrawShowForAll(carrespawntext);
    TextDrawSetString(carrespawntext,string);
    gCarRespawnTimerID = SetTimer("carrespawn",1000,0);
    new admin[MAX_PLAYER_NAME];
    new string2[64];
    GetPlayerName(playerid,admin,sizeof(admin));
    format(string2,sizeof(string2),"Admin %s lässt alle unbenuzten Fahrzeuge respawnen",admin);
    SendClientMessageToAll(grün,string2);
    //admincmdlog(string2);
    }
    else
    {
    SendClientMessage(playerid,rot,"Fehler: Mögliche Sekunden 1-60");
    }
    }
    else
    {
    SendClientMessage(playerid,rot,"Du besitzt nicht die nötige Einstufung zur Ausführung dieses Befehls");
    }
    return 1;
    }


    public carrespawn()
    {
    if(carrespawncounter == 0)
    {
    TextDrawHideForAll(carrespawntext);
    KillFastTimer(gCarRespawnTimerID);
    gCarRespawnTimerID = -1;
    for(new i=0;i<MAX_VEHICLES;i++)
    {
    if(IsVehicleOccupied(i) == 0)
    {
    SetVehicleToRespawn(i);
    }
    }
    }
    else
    {
    carrespawncounter --;
    new string[128];
    format(string,sizeof(string),"Carrespawn:~n~%d Sekunden",carrespawncounter);
    TextDrawHideForAll(carrespawntext);
    TextDrawShowForAll(carrespawntext);
    TextDrawSetString(carrespawntext,string);
    }
    }

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • In der Funktion carrespawn wird jetzt aber nicht erneut aufgerufen wenn carrespawncounter noch != 0 ist. Also hängt er doch direkt bei der ersten Sekunde.


    edit: Was meint du Templer, kann man da snicht auch so machen im command ?


    SetTimer("carrespawn",1000,1,1000*sekunden);

    Einmal editiert, zuletzt von Hagi ()

  • Ah sry, bei meinem Code müsstest du im Befehl diese Zeile ändern


    gCarRespawnTimerID = SetTimer("carrespawn",1000,1);


    Hab mich vertippt ^^. Also deine neue Methode würde auch so gehen, natürlich. Jedoch kann es passieren, dass wenn der Code zu langsam es berechnet, er früher schon abbricht, verstehst?

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • So Carrespawn funktioniert jetzt wies soll und lässt auch nichts mehr crashen.


    Jetzt buggen aber meine anderen Events, aber das wird am gleichen Problem liegen. Ich werde das eben ändern und dann durchgeben obs funktioniert.


    Aber auf jeden Fall sagen meine Testspieler, dass es weniger Laggt. Gute arbeit Templer