Hallöle,
habe gerade was auf meiner Platte gefunden, was für den Ein oder Anderen eventuell ganz hilfreich sein kann.
In der heutigen SA:MP Zeit, wird ja viel auf so interaktives reden gelegt wo man manchmal in Squenzen landet, wo es einem so vorkommt als ob der Bot/Actor mit einem redet.
Blöd nur, wenn es einen O-Chat (Globalen Chat) gibt (oder Neulings Chat) oder what ever, was diese Sequenz quasi kaputt macht.
Viele Server denken sich hier, ok dann senden wir dem Spieler einfach keine Nachrichten.
Gut, das geht auch in vielen Fällen gut, nur ist es so, das zum Beispiel gerade wenn der User im Tutorial ist oder so, viele Spieler ihn grüßen oder ähnliches mit ihm schreiben, ohne zu wissen, dass er die Nachrichten nie erhalten wird.
Um diesem Problem entgegen zu wirken hatte ich mal diese Include geschrieben.
Da werden alle Nachrichten gespeichert, die der User nicht erhalten hat und nach der Sequenz wiedergegeben.
So gibt es keinen Informationsverlust und der User hat nichts verpasst und eine schöne Sequenz gehabt
Konfiguration
Nun, hier gibt es nicht viel zu zu sagen. Einfach unter OnPlayerConnect die Funktion initCache(playerid); aufrufen, für den Reset.
Falls sich hier Leute fragen, wieso ich das nicht gehookt habe lautet die Antwort einfach, weil ich keinen anderen Includes dazwischen funken will.
Kann natürlich bei belieben verändert werden.
Nutzung
Hier mal ein "typischer" Auszug aus OnPlayerText:
public OnPlayerText(playerid,text[])
{
new string[145],name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
format(string,sizeof(string),"%s sagt: %s",name,text);
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
if(isCache(i))
{
appendCache(i,grey,string);
}
else
{
SCM(i,grey,string);
}
}
return 0;
}
Alles anzeigen
Also schauen wir uns das ganz kurz an:
Wenn der Spieler im "Cache-Modus" ist, nichts anderes prüft die Funktion isCache, dann werden die Nachrichten dem Cache hinzugefügt und dem Spieler in diesem Moment nicht gesendet. Andernfalls, wird natürlich einfach die Nachricht gesendet.
In den "Cache-Modus" kann der Spieler durch die Funktion startCache(playerid) gesetzt werden.
Am Ende, wenn er aus der Sequenz (z.B. dem Tutorial) raus ist, einfach die Funktion: endCache(playerid) nutzen, dann wird alles gespeicherte gelöscht und dem User werden alle verpassten Nachrichten gesendet
Download
Source-Code: PasteBin
Direkter-Download: MediaFire
[size=12]Schlusswort
Hoffe für den Ein oder Anderen, ist das eine kleine Hilfe
Zusatz-Info für Skripter:
Falls ihr euch fragt, wieso ich 2 Variablen verwende, einfach weil diese schnell erreichbar sein müssen und oft abgefragt werden. Das geht schneller, als mit pVars.
Falls es euch stört, ihr könnt das System natürlich nach Belieben ändern