Inhalt:
- Jobs erstellen
- Ab fahrbare Checkpoint
Um was geht es in diesem Tutorial ?
Hallo,
ich erkläre euch heute in diesem Tutorial mal kurz,
wie ihr ganz einfach einen Job und für diesen dann einen ab fahrbaren Checkpoint erstellen könnt,
nun dann fangen wir mal an.
Was wird benötigt ?
Die Checkpoint Erklärung
- Nun ich gehe jetzt davon aus das ihr euch oben die angeforderten Includes heruntergeladen habt.
So als aller erstes müssen wir uns eine Variable erstellen die wir später für unsere ab fahrbare Checkpoints benötigen.
Ihr schreibt also ganz oben unter euren includes:
new JobCheckpoint[MAX_PLAYERS]; // Die Variable
So und nun erstellen wir uns, unserem Befehl mit Hilfe des OCMD - Includes:
ocmd:jobstart(playerid)
{
SetPlayerCheckpoint(playerid,1805.1013,-1902.0204,13.1284,10.0);
JobCheckpoint[playerid] = 1;
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
if(JobCheckpoint[playerid] == 1) // Wie ich oben schon Sagte springt er nun hier hin, jetzt müssen wir noch einbauen was passieren soll wenn er durch den Ersten Checkpoint fährt.
{
// Ich sage er sollte, Geld und eine Nachricht bekommen.
DisablePlayerCheckpoint(playerid); // Hier wird der Checkpoint den wir mit "/jobstart" aufgerufen haben, gelöscht.
GivePlayerMoney(playerid, 50); // Hier bekommt er nun 50$ auf die Hand gezahlt.
SendClientMessage(playerid,0xC3FF00FF,"Du bist durch den 1ten Checkpoint gefahren"); // Hier bekommt er nun die nachricht weil er durch den Ersten Checkpoint gefahren ist!
SetPlayerCheckpoint(playerid, 1804.8215,-1925.0430,13.1172, 10.0);
JobCheckpoint[playerid] = 2; // Hier springt er wieder zum 2ten Checkpoint
}
else if(JobCheckpoint[playerid] == 2) // Falls er durch den Zweiten Checkpoint gefahren ist soll was passieren ?
{
DisablePlayerCheckpoint(playerid); // Hier wird der Checkpoint 1 gelöscht.
GivePlayerMoney(playerid, 50); // Hier bekommt er wieder 50$ auf die Hand gezahlt.
SendClientMessage(playerid,0xC3FF00FF,"Du bist durch den 2ten CP gefahren"); // Hier bekommt er nun die nachricht
SetPlayerCheckpoint(playerid, 1804.3311,-1925.8723,13.9501, 10.0); // Hier setzen wir den nächsten Checkpoint
JobCheckpoint[playerid] = 3; // Hier springt er zum 3ten Checkpoint
}
else if(JobCheckpoint[playerid] == 3) // Falls er durch den 3ten Checkpoint gefahren ist soll was passieren ?
{
DisablePlayerCheckpoint(playerid); // Hier wird der Checkpoint 1 gelöscht);
SendClientMessage(playerid,0xC3FF00FF,"Du hast den Job erfolgreich beendet");
}
return 1;
}
So das war nun die Erstellung mit den Checkpoints,
aber es fehlt ja noch etwas, zum Beispiel:
- Nur Spieler die den Job auch haben sollten diesen nur ausführen können.
- Mann sollte /jobstart nur in einen Fahrzeug eingeben können und auch zugleich der Fahrer sein
- Und falls man schon 1x /jobstart eingegeben hat, sollte eine Fehler meldung kommen das er schon im Job aktiv ist
Dies zeige ich euch nun jetzt.
Die Job Erklärung und deren Funktionen
Wir haben hier unseren "/jobstart" befehl den wir nun weiter ausbauen möchten, mit den Funktionen die ich oben genannt habe.
ocmd:jobstart(playerid)
{
if(GetPVarInt(playerid,"Job") == 0)return SendClientMessage(playerid,0xFFD200FF,"* Du hast nicht den Job"); // Hier wird überprüft ob er den Job hat.
if(GetPlayerVehicleSeat(playerid) != 0)return SendClientMessage(playerid,0xFFD200FF,"Du musst der Fahrer sein!"); // Ob er auf den Fahrer sitzt ist.
if(GetPVarInt(playerid,"Jobaktiv") !=1) // Hier wird überprüft ob der Spieler in seinem Job bereits aktiv ist also, schon einmal /jobstart eingegeben hat.
if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 408) // Unser Fahrzeug das benötigt wird um die routen ab zu fahren ( 408 = der Müll wagen )
{
SetPVarInt(playerid,"Jobaktiv",1);
SetPlayerCheckpoint(playerid,1805.1013,-1902.0204,13.1284,10.0);
JobCheckpoint[playerid] = 1;
}
else
{
SendClientMessage(playerid,0xFFD200FF,"* Du bist nicht in dem Job Fahrzeug!"); // Hier wird die nachricht ausgegeben falls er schon /jobstart gemacht hat
}
else
{
SendClientMessage(playerid,0xFFD200FF,"* Du bist bereits im Job aktiv!"); // Falls er nicht in einer der Müllfahrzeuge ist
}
return 1;
}
- Ist ja alles schön und gut aber wo kriegt man nun den Job her ?
wir erstellen uns nun einen neuen Befehl mit den wir den Job erhalten können:
Ganz oben unter euren Includes erstmal:
#define DIALOG_JOBS 1
Achtung!!: Falls ihr die Dialog nummer "1" schon belegt habt dann nehmt einfach eine die noch Frei ist!
ocmd:jobs(playerid)
{
ShowPlayerDialog(playerid,DIALOG_JOBS,DIALOG_STYLE_LIST,"Jobs","Job 1","Auswählen","Abbrechen"); // Hier zeigen wir nun unseren Job - Dialog wo er sich den Job auswählen kann.
return 1;
}
Dann müssen wir für unseren "Job Dialog" nun auch noch Funktionen zu weisen, da er ja wissen muss was nun passieren soll, also:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid==DIALOG_JOBS && response==1)
{
if(listitem == 0) // ihr fangt immer mit listitem 0 an, andere fangen nämlich immer mit 1 an und wundern sich später warum es nicht funktioniert da es ja falsch ist, also immer mit listitem 0 anfangen
{
{
SendClientMessage(playerid,0xFFD200FF,"=> Job Info <=");
SendClientMessage(playerid,0xFFD200FF,"Es wurde auf der Map eine Makierung gesetzt");
SendClientMessage(playerid,0xFFD200FF,"Fahre nun dort hin und steige anschließen in einer der Fahrzeuge ein");
SetPVarInt(playerid,"Job",1);
// Hier eure Speicher Funktion noch rein, damit der Job auch noch nach einen Server Restart vorhanden ist
// Also SpielerSpeichern mit der ihr halt euren User Speichern tut ^^
}
}
}
return 1;
}
//So wir wollen es aber nun auch so machen das nur die User in den Fahrzeugen einsteigen können die auch den Job haben.
//ihr macht also ganz oben unter den Includes
new JobFahrzeug[1]; // 1 = Die anzahl der Fahrzeugen die erstellt werden sollen.
Dann erstellt ihr noch unter OnGameModeInit() das Fahrzeug mit dem ihr später die Checkpoints abfahren tut.
public OnGameModeInit()
{
JobFahrzeug[0] = CreateVehicle(408,1805.2057000,-1885.3551000,14.0338000,89.9334000,1,1,15); // Unser Fahrzeug
return 1;
}
So erstellt hätten wir nun unser Fahrzeug, aber nun müssen wir es so machen das nur die User es nutzen können die den Job auch angenommen haben.
Wir gehen dazu unter public OnPlayerStateChange(playerid, newstate, oldstate)
public OnPlayerStateChange(playerid, newstate, oldstate)
{
new newcar = GetPlayerVehicleID(playerid);
if(GetPVarInt(playerid,"Job")!=1)
{
for(new i=0; i<sizeof(JobFahrzeug); i++)
{
if(newcar == JobFahrzeug[i])
{
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid,0xFFBE00FF,"Du hast nicht den Job angenommen");
}
}
}
return 1;
}
So und nun können nur Spieler in den Fahrzeugen einsteigen die auch den Job haben
für diejenigen die das Dini include nutzen, schreibe ich hier mal die Speicher & Lade variante hin
Für das Speichern des Jobs:
stock SpielerSpeichern(playerid)
{
new Spielerdatei[128];
dini_IntSet(Spielerdatei,"Job",GetPVarInt(playerid,"Job"));
return 1;
}
Für das Laden des Jobs:
stock AccountLaden(playerid)
{
new Spielerdatei[128];
SetPVarInt(playerid,"Job",dini_Int(Spielerdatei,"Job"));
return 1;
}
Bitte seit mit der Kritik nicht arg so streng da dies mein erstes Tutorial hier im breadfisch forum ist ist
Werde es später auch noch natürlich überarbeiten
Stand: 11.08.2013
- Checkpoint Fehler behoben, Der Checkpoint 2 wurde nicht angezeigt.
- Fehler im Befehl /jobstart behoben.
Dürfte nun alles richtig funktionieren
Grüße