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
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
- 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 KillFastTimerACHTUNG: 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...