Guten morgen,
Und zwar wie mache ich es wenn ein gewisser Spieler auf ein Punkt ist eher gesagt rüberfährt das ein text kommen z.B.
Herzlich Willkommen in Las Venturas .
Wie muss ich das einfügen ? :s
Mfg
Toni
Guten morgen,
Und zwar wie mache ich es wenn ein gewisser Spieler auf ein Punkt ist eher gesagt rüberfährt das ein text kommen z.B.
Herzlich Willkommen in Las Venturas .
Wie muss ich das einfügen ? :s
Mfg
Toni
Du fragst ganz einfach ab, ob er an diesem Punkt ist oder nicht: http://wiki.sa-mp.com/wiki/IsPlayerInRangeOfPoint
Du fragst ganz einfach ab, ob er an diesem Punkt ist oder nicht: http://wiki.sa-mp.com/wiki/IsPlayerInRangeOfPoint
Ich möchte ja aber nichts eingeben.
Z.b er fährt mit dem Auto über ein gewissen Punkt.
Und dann kommt oben eine NAchricht ..
Ja du überprüfst ob er in der Range von dem Punkt ist und sendest ihm dann eine Nachricht?
Ja du überprüfst ob er in der Range von dem Punkt ist und sendest ihm dann eine Nachricht?
Habe ich gemacht aber funktioniert nicht ? :>
Code:
Wo hast du es eingefügt?
do solltest es als timer unter ongamemodeinit machen
also zuerst timer dann ein public erstellen
mit dem timer damit es nicht nur einmal abgefragt wird z.B SetTimer("LV",66,1);
die eins steht dafür das es immer abgrefgat wird sondern nicht nur einmal und wenn du das unter onplayerspawn packst dann wird das nur beim spawn aufgerufen!!
do solltest es als timer unter ongamemodeinit machen
also zuerst timer dann ein public erstellen
mit dem timer damit es nicht nur einmal abgefragt wird z.B SetTimer("LV",66,1);
die eins steht dafür das es immer abgrefgat wird sondern nicht nur einmal und wenn du das unter onplayerspawn packst dann wird das nur beim spawn aufgerufen!!
Auf Deutsch nochmal ?
hier der pawn code:
forward LV(playerid);
public OnGameModeInit()
{
// Don't use these lines if it's a filterscript
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
SetTimer("LV",66,1);
return 1;
}
public LV(playerid)
{
if(IsPlayerInRangeOfPoint(playerid,NAEHE,X,Y,Z))return SendClientMessage(playerid,ROT,"You are now in LV!");
return 1;
}
//edit es wird jede 66 millisekunden abgefragt ob er nah LV ist!
Mit SetTimer wird das nur funktionieren, wenn du in deiner Funktion dann ne Schleife durchlaufen lässt und für alle Spieler abfragst, ob sie an dem Punkt sind. Alternativ kannst du auch mit SetTimerEx arbeiten, wo du eigene Parameter wie z.b. playerid übergeben kannst. (http://wiki.sa-mp.com/wiki/SetTimerEx). Der Code von lcp9 ist eine Mischung aus beidem und wird nicht funktionieren. Edit: Des Weiteren sind 66 ms viel zu schnell. Falls der Spieler nicht genau an dem Punkt sein muss reicht dir auch 1Sek oder mehr.
Hab ich gemacht falls es dir auffäl indem ich eine 1 im timer gesetzt habe!
Erst nachdenken dann kritisieren
//edit dann macht er eben 1000milisekunden draus
Die 1 bedeutet nur, dass der Timer wiederholt wird. Das ändert nichts an der Tatsache, dass deine Funktion "LV" einen Parameter benötigt. Mit SetTimer("LV",66,1); startest du einen Timer, der aber keinen playerid Parameter and die Funktion weitergibt.
SetTimerEx("LV",66,1,"d",playerid); wäre in diesem Fall die richtige Lösung, um den Timer zu starten. Wobei ich trotzdem der Meinung bin, dass 66 ms zu schnell sind.
Oder wenn der Spieler den Punkt ruhig "sehen" darf kannst du dir die ganze Timer- "Scheisse" sparen und es entweder mit einem Pickup machen oder mit einem Checkpoint.
Mit dem Pickup wäre es ganz einfach, du müsstes als Spawn Typ nur vernünftig anpassen, d.h. wenn das nur kommen soll wenn er in einem Fahrzeug sitzt wäre es Spawn Typ 14.
Ansonsten halt einen Checkpoint setzen.
Wenn du Tatsächlich einfach ein Punkt haben willst, wo weder ein Checkpoint, ein Pickup oder sonst irgentetwas angezeigt wird, wäre das hier eine Lösung:
forward PointCheck();
OnGameModeInit()
{
SetTimer("PointCheck", 500, 1) //Die 500 sind millisekunden, jenachdem wie groß die range ist kann man die verändern und anpassen.
return 1;
}
public PointCheck()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i) /*Weitere Verbindungs Abfragen */) continue;
if(IsPlayerInRangeOfPoint(i,x,y,z,range)) //Was passieren soll
else if(IsPlayerInRangeOfPoint(i, x, y, z, range)) //Ein anderer Punkt wo was passieren kann dafür brauchste keinen 2. Timer
}
return 1;
}
Auf Deutsch nochmal ?
Vielleicht solltest du dir die Grundlagen nochmal durchlesen - unter OnPlayerSpawn kann das ganze ja nicht funktionieren, da dieser Callback nur aufgerufen wird, wenn der Spieler gerade spawned, und nicht ständig.
Du könntest die Abfrage unter OnPlayerUpdate erstellen - dann würde der Spieler allerdings mit Sounds zu gespammt werden.
Wenn du diese Methode verwendest, müsstest du noch einen Timer setzen, welcher eine Variable deaktiviert und die Abfrage wieder möglich macht.
Das ganze mit OnPlayerUpdate zu machen ist aber ziemlich resourcenverbrauchend, deswegen würde ich dir raten, einen Timer zu erstellen, welche bspw. alle 1000 Millisekunden die o. g. Abfrage beinhaltet.
ich habe doch ghesagt unter ONGamemodeinit nicht unter onplayerspawm !?