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
	
	
		// 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.
	
	
		jobArray[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]);
}
	
			Alles anzeigen
	 
	
Folgendes bitte in OnPlayerConnect(playerid) einfügen
	
	
		jobTempVar[playerid] = -1;
	
	 
	
Der ocmd-Befehl /jobs
	
	
		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.
	
	
		if(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;
}
	
			Alles anzeigen
	 
	
Das bitte außerhalb jeglicher publics einfügen
	
	
		stock GetJobName(jobid) {
	return jobArray[jobid];
}
	
	 
	
Das bitte auch außerhalb jeglicher Publics einfügen.
	
	
		forward 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.
	}
}
	
			Alles anzeigen