Da es doch tatsächlich noch eine Menge Skripter gibt,
die "OnPlayerUpdate" nutzen, möchte ich euch mal erklären,
warum die berühmte Aussage
Verbrauchen tut es trotz OnPlayerUpdate Benützung wenig an Leistung, was ich vom Wissen her kenne.
nicht richtig sein kann.
Nehmen ich mal beispielsweise folgende Funktion,
welche das Auto eines Spielers unverwundbar machen soll:
forward checkfunc(playerid);
public checkfunc(playerid)
{
if(IsPlayerInAnyVehicle(playerid)) SetVehicleHealth(GetPlayerVehicleID(playerid),1000.0);
}
So sähe der Aufruf bei OnPlayerUpdate aus:
public OnPlayerUpdate(playerid)
{
checkfunc(playerid);
return 1;
}
Und so bei einem Timer:
public OnPlayerStateChange(playerid,newstate,oldstate)
{
if(newstate == 2)
{
KillTimer(GetPVarInt(playerid,"healtimer"));
SetPVarInt(playerid,"healtimer",SetTimerEx("healfunc",250,0,"i",playerid));
}
else KillTimer(GetPVarInt(playerid,"healtimer"));
return 1;
}
forward healfunc(playerid);
public healfunc(playerid)
{
if(!IsPlayerConnected(playerid) || !IsPlayerInAnyVehicle(playerid)) return 0;
SetPVarInt(playerid,"healtimer",SetTimerEx("healfunc",250,0,"i",playerid));
checkfunc(playerid);
return 1;
}
Das Ergebnis:
OnPlayerUpdate ist zwar der einfachere Weg,führt aber in minimalen und unregelmäßigen Abständen für JEDEN Spieler die Funktion aus.
SetTimerEx dagegen führt nur für Spieler, die Fahrer eines Autos sind, in größeren und regelmäßigen Abständen durch.
Fazit:
OnPlayerUpdate frisst enorm Ressourcen,
obwohl der Code der Funktion minimal ist.
SetTimerEx dagegen ruft nur spezifisch und seltener
den Code auf => weitaus weniger Belastung.
Dies war durchaus einleichtend, nicht wahr ?
Für all die Zweifler, nehmen wir doch mal die ausführliche Erklärung
eines erfahrenem und bekannterem Skripter, der diese Methode mag: Templer !
Hier ist seine Erklärung, mein Kommentar steht in Grün dahinter:
Erklärung zur Benützung von OnPlayerUpdate:
Da manche denken "Oh mein Gott er benützt OnPlayerUpdate" will ich für andere kurz Erläutern warum ich diese Variante ausgesucht habe. OnPlayerUpdate wird ja stehts ausgeführt, wenn Spieler InGame ist (und nicht am Desktop oder GTA Menu) und es dann ca alle 0,5 Sekunden aufgerufen wird (wenn nicht kürzer). (Um EINIGES kürzer) Anstatt das ich die Timerfunktionen SetTimer und SetTimerEx verwende, nütze ich gleich OnPlayerUpdate mit einer Variable die überprüft ob so und soviele Sekunden vergangen sind (was wiederum den Server belastet) und erst dann die Überprüfung für diesen Spieler startet.(man nimmt also eine Funktion, die alle paar MS aufgerufen wird, und prüft da, ob eine Sekunde rum ist, anstatt einen Timer zu erstellen, der direkt jede Sekunde startet ? Sinn ?) Somit erspart man sich an Leistung und keine Geschwindigskeitsverluste wegen der mageren Abfrage(Im Gegenteil). Da ich leider schwer zeigen kann wieviel Leistung dieses Script vom Server verbraucht,(print wäre ein Anfang) da ich nicht wisse wie die Leistung abgemessen wird, müsst ihr es leider selber austesten wenn es unbedingt notwendig ist. Verbrauchen tut es trotz OnPlayerUpdate Benützung wenig an Leistung, was ich vom Wissen her kenne. (Der epischste Grund )
Noch Fragen ?