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.
/jobs Befehl
- KinGRaPTiiC
- Geschlossen
- Erledigt
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
-
-
na so
/jobs
dann gibste ihn nen Dialog List
und lässt ihn das dann auswählen
wenn du ein paar denk anstupser brauchst schau in meiner Signaatur da sind hilfreiche videos von mir -
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
-
Das wusste ich alles schon nur ich weiß nicht wie ich das bei OnDialogResponse geht das er den Job auch zugewiesen bekommen hat^^
-
Zeig mal dein Dialog also ShowPlayerDialog(). Dann kann ich dir deinen OnDialogResponse machen.
-
@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 -
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 ?
-
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");
} -
Musste halt mehre Dialoge machen denke ich mal, bei alles selbst schreiben weiß ich es nicht genau kenne mich bei ocmd nicht so aus,
-
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".
- Der ocmd-Befehl /jobs weist eigentlich nur eine kleine Positionsabfrage und das Anzeigen eines Dialogs auf.
-
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.
- DIALOGE_JOBS
-
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.
Code
Alles anzeigenjobArray[0] = "Zivilist"; jobArray[1] = "Trucker"; jobArray[2] = "Hochseefischer"; jobArray[3] = "Minenarbeiter"; jobArray[4] = "Busfahrer"; jobArray[5] = "Bauer"; jobArray[6] = "Drogendealer"; jobArray[7] = "Waffendealer"; jobArray[8] = "Detektiv"; jobArray[9] = "Mechaniker"; print("Jobs werden generiert:"); for(new i = 0; i < sizeof(jobArray); i ++) { // Das kannst du eigentlich weglassen, es ist bloß ein Debug-Script um in der Console zu sehen, welche Jobs geladen werden. :-) printf(" - %s", jobArray[i]); } //Hier wird der String der verfügbaren Jobs global festgelegt, folglich kannst du die Jobs immer dynamisch erweitern/reduzieren, in dem du oben in jobArray die Jobs rauslöschst und die Arraygröße in der definition new JobArray anpasst. for(new i = 1; i < sizeof(jobArray); i ++) { format(jobListe, sizeof(jobListe), "%s\n%s", jobListe, jobArray[i]); }
Folgendes bitte in OnPlayerConnect(playerid) einfügen
Der ocmd-Befehl /jobs
Codeocmd: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.
Code
Alles anzeigenif(dialogid == DIALOG_JOBS) { if(response) { switch(listitem) { case 0: ShowPlayerDialog(playerid,DIALOG_JOBS,DIALOG_STYLE_LIST, "Jobs", jobListe, "Auswählen", "Abbrechen"); // Sollte man auf "BITTE WÄHLEN" klicken, wird das Dialog einfach nochmal geöffnet, da es eine Fehlauswahl war. case 1..sizeof(jobArray): GivePlayerJob(playerid, listitem, 0); // Wählt man einen Job von 1-Anzahl verfügbarer Jobs aus, wird der jeweilige Job vergeben. } } return 1; } // Das ist das von dir gewünschte "Bestätigungs-Dialog" wo nochmal gefragt wird, ob man sich sicher ist. if(dialogid == DIALOG_JOBS_BESTAETIGUNG) { if(response) { GivePlayerJob(playerid, jobTempVar[playerid], 1); // Wenn er "job annehmen" anklickt, wird der Job vergeben in dem man den letzten Parameter von GivePlayerJob auf 1 setzt. Weiteres siehe: public GivePlayerJob } else { jobTempVar[playerid] = -1; SendClientMessage(playerid, -1, "Du hast den Vorgang abgebrochen."); // Wählt man ABBRECHEN, wird der Vorgang zurückgesetzt und die Temporäre Variable wieder zurückgesetzt } return 1; }
Das bitte außerhalb jeglicher publics einfügen
Das bitte auch außerhalb jeglicher Publics einfügen.
Code
Alles anzeigenforward GivePlayerJob(playerid, jobid, bestaetigung); public GivePlayerJob(playerid, jobid, bestaetigung) { new bestaetigungsString[150]; if(bestaetigung == 0) { jobTempVar[playerid] = jobid; format(bestaetigungsString, sizeof(bestaetigungsString), "Bist du dir sicher, dass du den Beruf >{FF0000}%s{FFFFF}< annehmen möchtest? Wenn ja, drücke 'Job annehmen'.", GetJobName(jobid)); ShowPlayerDialog(playerid, DIALOG_JOBS_BESTAETIGUNG, DIALOG_STYLE_MSGBOX, "Bist du dir sicher?", bestaetigungsString, "Job annehmen", "Abbrechen"); } else { // Hier muss dann dem User der Job gesetzt werden. // Da ich dein User-System nicht kenne, musst du das selber implementieren. // Die ID des Jobs von dem jeweiligen User ist gespeichert in jobTempVar[playerid]! // Ich setze jobTempVar[playerid], nachdem du es in dem User-Account gespeichert hast, wieder auf -1 ( jobTempVar[playerid] = -1; ) /********* Hier User Speichern **********/ /****************************************/ new string[128]; format(string, sizeof(string), "Gratulation! Du hast erfolgreich den Job >%s< angenommen!", GetJobName(jobTempVar[playerid])); SendClientMessage(playerid, -1, string); jobTempVar[playerid] = -1; // Temporäre Variable wird wieder zurückgesetzt. } }
-
Variablen/Arrays
-
breadfish.de
Hat das Thema geschlossen.