Hallo liebe Community.
Wie mir aufgefallen ist suchen oft Leute nach verschiedenen bestimmten Paydays für Fraktionen, finden aber nur die normalen Paydays bei dem jeder Spieler das gleiche bekommt.
Ich möchte heute nun zeigen wie man ein Grundaufbau von solch einem Payday aufbaut.
Was ihr haben müsst/können müsst:
Lesen können.
Kleines Scriptingwissen haben.
Verstehen können.
Ein Speicherungssystem für Spieler haben (z.B. mit DINI)
Fangen wir an:
Als erstes müssen wir angeben, wann der Zahltag stattfinden soll. Dafür benutzen wir einen bestimmten Timer. Dieser nennt sich "SetTimerEx". Warum SetTimerEx? Wir brauchen in diesem Falle nicht nur eine Zeit sowie die Wiedergabe die angegeben wird, sondern diesesmal brauchen wir nun auch ein Format sowie ein Parameter. Falls ihr nicht genau wisst was das heisst oder warum wir das verwenden, kann ich euch falls nötig ein Link zu guten Definierungen dafür reinstellen.
Gut, wir brauchen also nun ein Timer. Wo gehört der rein? Unter OnGameModeInit! Warum? Würden wir dies für jede Person neu unter z.B. "OnPlayerConnect" starten lassen, würden wir bei einer Spieleranzahl von 7 ganze 7 Paydaytimer haben, die dann aber auch Einfluss auf andere Spieler haben. Das heißt, sollte dein Freund mal online kommen, bringt er nicht nur Spaß mit, sondern auch noch mehr Geld. Leider blickt dann keiner mehr durch, deswegen erstellen wir einen Payday der für alle Spieler im selbem Moment ausgegeben wird.
Erstmal brauchen wir einen Funktionsnamen für unseren Payday, damit wir später angeben können was passiert wenn der Timer abgelaufen ist.
Diesen verbinden wir mit dem Parameter playerid, den wir später im public brauchen werden.
Nun brauchen wir erstmal ein forward für unsere Funktion. Deswegen gehen wir oben in den Header und schreiben unter den "new XYZ usw":
forward Payday(playerid); // Payday ist nun unser Funktionsname
(Solltet ihr noch keine "new"'s haben, schreibt den forward einfach nach den includes.
Dann erstellen wir den eigentlichen Timer unter OnGameModeInit, wie oben schon begründet.
Dieser sollte so aussehen:
SetTimerEx("Payday",1000*60*20,true,"i",i); // "Payday" steht für den Funktionsnamen, dann geben wir die Zeit an, in diesem falle 1000 Millisekunden (1 Sekunde)*60 = 1 Minute*20, sprich 20 Minuten. "true" gibt an das sich das ganze wiederholen sol. "i" ist steht für Integer, was mit dem darauffolgenden "i" verbunden ist.
Aber halt! Warum benutzen wir nicht anstatt dem zweiten "i" einfach playerid? Weil OnGameModeInit keine Parameter enthält. Da wir aber momentan noch nicht wissen was "i" ist, müssen wir eine Schleife um unseren Timer setzen.
Dieser sollte so aussehen:
for(new i; i != GetMaxPlayers(); i++)
{
Timer
}
Ich hoffe ihr wisst was eine Schleife ist, ansonsten müsst ihr euch dort noch einmal genau erkundigen.
Vielleicht kann ich unten ja noch eine kleine Definition hinzufügen.
Wir haben nun also schon einen Timer für alle, aber was soll passieren wenn die 20 Minuten abgelaufen sind?
Dafür müssen wir eine neue public Funktion irgendwo ausserhalb der anderen machen. Wir nehmen jetzt einfach mal unsere letzte Zeile und schreiben dort folgendes rein:
public Payday(playerid)
{
return 1;
}
Nun müssen wir das ganze ja noch mit unseren Details stopfen.
Wir wollen das wenn der Spieler in jener Fraktion ist, dass er den und den Gehalt bekommen soll.
Dafür machen wir erstmal, falls ihr noch keinen habt, einen neuen stock.
Diesen kann man als Abkürzung für eine Handlung sehen.
Wir nennen ihn jetzt einfach mal "istSpielerInFraktion".
Dann brauchen wir noch den Parameter für den Spieler, sowie die Fraktionsid. Im diesem Falle "playerid" und "fraktionsid".
Nun erstellen wir uns unseren stock:
stock istSpielerInFraktion(playerid,fraktionsid)
{
if(GetPVarInt(playerid,"Fraktion")==fraktionsid) return 1; //Achtung! Hier müsst ihr natürlich euer Loginsystem/Speichersystem benutzen. Ich benutze dafür DINI!
return 0;
}
Hier wird angesagt, dass wenn im Befehl o.Ä. "istSpielerInFraktion" steht, dass die Handlung im stock passieren soll bzw abgefragt werden soll.
Nun starten wir mit dem Details.
Wir sagen mal Fraktionsid 1 ist die Polizei.
Also schreiben wir in unserem public:
if(isPlayerInFraktion(playerid,1))
{
}
Hier wird angesagt: Wenn er Spieler in der Fraktion 1 ist, mache {das}.
Ich bin nun dafür das die Polizei einen Gehalt von 1700$ bekommt.
Dann fügen wir einfach in unsere Funktion ein:
GivePlayerMoney(playerid,1700);
Natürlich soll der Spieler auch noch erfahren warum er 1700$ bekommen hat.
Deswegen senden wir dem Spieler noch eine Nachricht.
So könnte es etwa aussehen:
SendClientMessage(playerid,farbe,"=======PAYDAY=======");
SendClientMessage(playerid,farbe,"Gehalt: 1700$");
SendClientMessage(playerid,farbe,"====================");
Das könnt ihr nun natürlich für jede Fraktion anpassen und mit einem Banksystem mit Zinsen verbessern.
Ist natürlich euch überlassen.
Ich hoffe ihr konntet das meiste verstehen und habt euch die Zeit genommen alles genau durchzulesen.
Des weiteren hoffe ich das ich euch mit dem Tutorial helfen konnte und euch was beibringen konnte.
Bis dahin,
DarkHell aka [XGRL]Lolifreak!