Problem: Bereich definiern in dem ein Spieler einen bestimmten Befehl ausführen kann?

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
  • Hey Leute ! :D


    Hätte da ein paar Schwierigkeiten mit dem im Thema genannten Problem - hab schon im Forum gekuckt aber nix gefunden dass so richtig gepasst hat
    (vllt hab ich au was überlesen).
    Mein Problem besteht darin, dass ich auf meinem Server Befehle wie "/fuehrerschein" oder "/rathaus" habe & die Dialoge dazu nur angezeigt werden sollen wenn der Spieler in der Fahrschule oder im Rathaus ist ... wenn er dort nicht ist soll einfach kommen:


    SendClientMessage(playerid,ROT2,"Du befindest dich nicht in der Fahrschule...");


    Hab das schon so weit hinbekommen, dass die Befehle nur in einem Interior funktionieren:



    if (strcmp(cmdtext,"/fuehrerschein",true)==0)
    {
    if(GetPlayerInterior(playerid)==3)
    {
    ShowPlayerDialog(playerid,DIALOG_FS,DIALOG_STYLE_LIST,"{FF8C00}Fahrschule", "Auto - Führerschein\nLKW - Führerschein\nMotorrad - Führerschein","Auswählen","Abbrechen");
    }
    else
    {
    SendClientMessage(playerid,ROT2,"Du befindest dich nicht in der Fahrschule...");
    }
    return 1;
    }


    Ich will das ganze aber noch genauer hinbekommen, denn mein Rathaus-Interior & der Fahrschul-Interior haben die selbe Interior-ID (3)
    Hat einer ne Idee wie ich das hinbekomme?
    Kann man vllt einen Bereich auf der Map definieren in dem der Befehl funktioniert & wenn man nicht dort ist die obige Nachricht kommt?


    Danke schon mal fürs Lesen ;D


    Mfg

    THE STORM941

    Einmal editiert, zuletzt von TheStorm941 ()

  • Du könntest es so machen das abgefragt wird ob er in einem bestimmten Interior ist und danach ob er in der Nähe von einem bestimmten Punkt wäre.
    z.B:

    if(GetPlayerInterior(playerid,5) && IsPlayerInRangeOfPoint(playerid,150,x,y,z))
    {
    //Was dann passieren soll
    }

  • http://wiki.sa-mp.com/wiki/SetPlayerVirtualWorld
    http://wiki.sa-mp.com/wiki/GetPlayerVirtualWorld


    Ist alles was du dafür brauchst.


    Beim Betreten des Rathauses setzt du ihn in zB. die Welt 17. In der Abfrage kannst du dann abfragen ob er nun in dem Interior ist. (Was ja bei Rathaus und Fahrschule zutrifft) und dazu noch ob er in der Virtual World 17 ist. (Dies trifft dann nur bei dem Rathaus zu.)


    Beim Verlassen dann wieder auf die Standart Virtual World setzen. Also 0.



    Wobei du eig. den Spieler schon in eine Virtual World gesetzt hast, da du ja für die verschiedenen Gebäude das gleiche Interior benutzt. Also musst du nur raussuchen welche Virtual World bei welchem Gebäude benutzt wird. Diese frägst du dann in dem entsprechenden Befehl ab.

  • Naja, 1e Zeile mehr machts nicht wirklich umständlicher. Dafür kann man den Befehl dann im ganzen Interior eingeben. Bei IsPlayerInRangeOfPoint kann man die Befehle nur an 2 bestimmten Stellen in dem Interior eingeben,


    Was einem da letzlich lieber ist muss jeder für sich selbst entscheiden.

  • Danke euch beiden DraloX & 123marvin123 !!
    Und auch danke an Trailerpark für die Mithilfe


    Marvons Methode ist einfacher und schneller zu realisieren, aber auch Dralos Methode hat etwas für sich vor allem weil man eben im kompletten Interior den Befehl nutzen kann - sonst kommt die Nachricht so blöd "Du bist nicht im Rathaus..." obwohl eig nur der Radius des Ausgangspunktes zu klein ist ;D & man vllt noch im Rathaus ist


    Danke


    Mfg

    THE STORM941