auf ein gewissen punkt was senden

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
  • 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 ? :thumbup:

  • 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.

  • 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 ? :thumbup:


    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.


    #Brotfischbaron


    In schā'a llāh