/jobs Befehl

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
  • Ich möchte gerne ein /jobs Befehl in der Stadthalle ausführen wollen aber ich habe ehrlich gesagt kein Plan wie das noch funktioniert bestimmt 2-4 Monate pause gehabt ich danke im vorraus für eure Hilfen :) z.B wenn er /jobs eingibt werden ihm alle Jobs angezeigt und er kann halt mit einem Doppelklick drauf bestätigen ob er rein will oder nicht wie z.B bei RGN,RPG etc.

  • Du gehst als erster mal InGame und speicherst dir, die Position wo der Befehl ausgeführt werden soll.
    Die Position musst du speichern, da man den Befehl sonst von der ganzen Map ausführen könnte.


    Position Speichern:
    1. InGame an die gewünschte Position stellen.
    2. /save
    3. Danach die savedpositions.txt Datei öffnen, diese findest du unter folgendem Pfad: Dokumente/GTA San Andreas User Files/SAMP/savedpositions.txt
    4. Dort findest du nun die gespeicherte Position. AddPlayerClass(....


    Diese Dinge brauchst du für deinen Befehl:
    [wiki]IsPlayerInRangeOfPoint[/wiki] mit dieser Funktion kannst du abfragen ob der Spieler in der Position ist.
    Hierzu nimmst du einfach deine AddPlayerClass Funktion und kopierst dir die Koordinaten ab dem 2. Parameter bis zum 4. Parameter.
    Also so:
    AddPlayerClass(0, 123.0, 222.0, 456.0, 5.0, 0, 0, 0, 0, 0, 0);


    if(!IsPlayerInRangeOfPoint(playerid,5.0, 123.0, 222.0, 456.0))return SendClientMessage(playerid, -1, "Du bist nicht im Arbeitsamt!");


    Außerdem benötigst du noch:
    [wiki]ShowPlayerDialog[/wiki]
    [wiki]OnDialogResponse[/wiki]


    MfG German_ScripterHD :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD

  • @Montero ich fange jetzt erst mit ShowPlayerDialog an usw ^^


    /edit Brauche ich nur einen Dialog weil ich ja eigentlich noch einen extra bestätigungs ding haben will



    /edit Der Jobs Befehl sieht bei mir mittlerweile so aus:
    ocmd:jobs(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0, 362.4120, 173.6170, 1008.3828); //3315
    ShowPlayerDialog(playerid,DIALOG_JOBS,DIALOG_STYLE_LIST, "Jobs",
    "Trucker\n\
    Hochseefischer\n\
    Minenarbeiter\n\
    Busfahrer\n\
    Bauer\n\
    Drogendealer\n\
    Waffendealer\n\
    Detektiv\n\
    Mechniker\n\
    Kündigen\n",
    "Auswählen", "Abbrechen");
    }





    aber ich bekomme diese Errors:


    C:\Users\User\Desktop\Spiele\SERVER\gamemodes\NGR.pwn(3315) : error 001: expected token: ")", but found ";"
    C:\Users\User\Desktop\Spiele\SERVER\gamemodes\NGR.pwn(3315) : error 036: empty statement

    Einmal editiert, zuletzt von KinGRaPTiiC ()

  • Also ich will mir auch mein Arbeitsamt als Dialog machen, es ist je nach dem wie du es Nutzen willst:


    z.B /jobs(DIALOG Öffnet sich) Wählst job aus und ist direkt angenommen und text kommt deinen Job angenommen)
    oder
    /jobs(Dialog öffnet sich) Wählst Job aus z.B Trucker dann kommt ein weiters Dialog mit Informationen über denn JOB und unten steht dann Anehmen / Zurück
    oder
    Wie gehabt dann nach dem Infomation Dialog gibt es zu Auswahl Weiter / Zurück, wenn man auf Weiter Drückt kommt wieder ein Dialog wo einer gefragt wird Bist du dir Sicher das du diesen Job anehmen möchte, Ja / Hauptmenü


    Je nach dem wie es einer gestellten möchte so viele Dialoge brauch man dann


    //edit hast du ein Godfahter script ? oder sprich was für ein Script nutz du ? oder schreibst eins komplett selbst ?

    Das Originale SOR ( Street´s of Reallife ) seit 03.10.2009

  • @eli


    Ich schreibe es komplett selbst und ich hätte gerne das dass da noch die Information kommt ob er den Job wirklich annehmen möchte oder wieder in das Hauptmenü gelangen will also "Annehmen" "Hauptmenü" wo wieder alle Jobs angezeigt werden


    Habe den Befehl jetzt richtig hinbekommen:


    ocmd:jobs(playerid)
    {
    !IsPlayerInRangeOfPoint(playerid,4.0,362.4120, 173.6170, 1008.3828);
    ShowPlayerDialog(playerid,DIALOG_JOBS,DIALOG_STYLE_LIST, "Jobs",
    "Trucker\n\
    Hochseefischer\n\
    Minenarbeiter\n\
    Busfahrer\n\
    Bauer\n\
    Drogendealer\n\
    Waffendealer\n\
    Detektiv\n\
    Mechniker\n\
    Kündigen\n",
    "Auswählen", "Abbrechen");
    }

  • Hallo @KinGRaPTiiC und @eli, ich habe mal bisschen was zusammen geschrieben. Ich hoffe, das hilft dir/euch.



    Erklärung:

    • Variablen/Arrays
      • Ich habe zunächst einen String-Array angelegt, in dem du ganz einfach alle Jobs einzeln anlegen kannst. Für jeden Job gibt es einen individuellen, durchnummerierten Index - dieser steht in eckigen Klammern (siehe OnGameModeInit wo die jobArray mit Jobnamen gefüllt werden!) Für dieses String-Array habe ich noch eine Debug-Funktion eingefügt (siehe im Script unter OnGameModeInit), welches du eigentlich entfernen kannst - außer du möchtest selber rumprobieren was passiert, wenn du neue jobs einfügst. Zu dem gibt es ebenfalls in OnGameModeInit eine weitere for-Schleife, welche aus dem jobArray einen String erstellt mit allen Jobs aneinander gereiht und mit "\n" getrennt, sodass dieser String einfach in Dialogen genutzt werden kann. (siehe Dritter Punkt unter Variablen/Arrays (1.3))
      • Dann habe ich noch eine temporäre Variable erstellt (jobTempVar), mit der wir den vom User ausgewählten Job zwischenspeichern können um ihn Dialog übergreifen nutzen zu können.
      • Dann gibt es noch einen globalen String "jobListe" in dem ich die einzelnen Einträge in dem Job-Auswahl-Dialog angelegt habe. Dies ermöglicht dir, dass du im Falle eines neueingefügten Jobs, nicht alle Dialoge nochmal erweitern musst, sondern der Job wird automatisch in dem Dialog ergänzt. Es kann nur sein, dass du irgendwann die String-Größe von jobListe erhöhen musst, wenn du zu viele Jobs hast
    • Setzen der Variablen/Arrays
      • All die oben genannten Arrays/Variablen werden unter OnGameModeInit() gesetzt
      • Ausnahme: Die temporäre Variable jobTempVar ist Spielerabhängig, diese wird folglich unter OnPlayerConnect() gesetzt!
    • /jobs
      • Der ocmd-Befehl /jobs weist eigentlich nur eine kleine Positionsabfrage und das Anzeigen eines Dialogs auf.
        • Ist man nicht am Arbeitsamt, erscheint eine Meldung "Du bist nicht am Arbeitsamt!".
        • Bist du am Arbeitsamt, wird ein Dialog angezeigt mit dem Titel "Jobs", den Listeneinträgen aus der Variable jobListe (siehe 1.3.), und den Auswahlmöglichkeiten "Auswählen" und "Abbrechen".
    • Interaktion mit dem Job-Dialog
      Vorab: Es gibt zwei Dialoge, einmal DIALOG_JOBS (1) und einmal DIALOG_JOBS_BESTAETIGUNG (2)
      • DIALOGE_JOBS
        • Dieses Dialog zeigt ja die ganzen, verfügbaren Jobs auf. Wählt man den ersten Eintrag (id: 0) ("---- BITTE WÄHLEN ----"), welcher nur als optischer Hinweis dient, dann wird das Dialog automatisch wieder geöffnet.
        • Wählt man allerdings jeden anderen Eintrag, außer Eintrag 0, dann wird der jeweilige Job per GivePlayerJob(playerid, jobid, bestaetigung); vergeben.
        • Nach dem Auswählen eines Jobs, wird automatisch DIALOG_JOBS_BESTAETIGUNG aufgerufen
      • DIALOG_JOBS_BESTAETIGUNG
        • Wählt man einen Job in DIALOG_JOBS wird automatisch dieser Dialog geöffnet, in dem man seine Auswahl nochmal bestätigen kann.
        • Bestätigt man den Job, wird nochmal GivePlayerJob aufgerufen, hierbei wird allerdings an dritter Parameter-Stelle nun eine 1 eingefügt, statt - wie zuvor - eine 0, denn der User hat ja jetzt nochmal bestätigt, dass er den Job will.
    • GivePlayerJob(playerid, jobid, bestaetigung)
      • Mit dieser Hilfs-Klasse wird dem User (playerid) der jeweilige Job (jobid) vergeben.
      • Zuvor findet allerdings eine Abfrage statt, ob denn bestaetigung == 0 ist, wenn ja, dann muss der User in dem DIALOG_JOBS_BESTAETIGUNG die Jobauswahl nochmal bestätigen, hierfür öffnet sich der genannte Dialog auch automatisch.
      • Sobald man die Jobauswahl nochmals in dem o. g. Dialog bestätigt hat, wird bestaetigung auf 1 gesetzt und GivePlayerJob wird nochmal aufgerufen und der Job wird nun vergeben. Der User erhält zudem einen Hinweis, dass er nun den Job JOBNAME angenommen hat.
    • GetJobName(jobid)
      • Ich habe einen Stock erstellt, der dir hilft den jeweiligen Jobnamen rauszufinden. GetJobName(jobid) returnt dir dann den jeweiligen Namen des Jobs, welcher im jobArray festgelegt wurde.
    • Was muss noch gemacht werden?
      • In dem Script muss unter GivePlayerJob noch der Job in den User-Account gespeichert werden, da ich dein User-Script nicht kenne, konnte ich das nicht machen. Bitte füge die User-Variablen-Speicherung in dem im Script gekennzeichneten Bereich ein. Die Jobid wird per jobTempVar übergeben.



    Folgende Definitionen/Deklarationen bitte oben im Script einfügen

    Code
    // Diese Definitionen bitte oben im Script vornehmen.
    
    
    new jobArray[10][40];
    new jobListe[150] = "-- Bitte wählen --";
    new jobTempVar[MAX_PLAYERS] = -1;





    Folgendes bitte in OnGameModeInit() einfügen.


    Folgendes bitte in OnPlayerConnect(playerid) einfügen

    Code
    jobTempVar[playerid] = -1;


    Der ocmd-Befehl /jobs


    Code
    ocmd:jobs(playerid)
    {
    	if(!IsPlayerInRangeOfPoint(playerid,4.0,362.4120, 173.6170, 1008.3828))return SendClientMessage(playerid, -1, "Du bist nicht am Arbeitsamt!");
    	ShowPlayerDialog(playerid,DIALOG_JOBS,DIALOG_STYLE_LIST, "Jobs", jobListe, "Auswählen", "Abbrechen");
    	return 1;
    }


    Folgendes bitte in OnDialogResponse einfügen.


    Das bitte außerhalb jeglicher publics einfügen

    Code
    stock GetJobName(jobid) {
    	return jobArray[jobid];
    }



    Das bitte auch außerhalb jeglicher Publics einfügen.