In deze tutorial ga ik uitleggen hoe je een "/jail [playerid] [tijd] [reden]" maakt. Ik heb deze tutorial geschreven omdat ik andere mensen zie die er soms problemen mee hebben. De command is in dcmd en sscanf. Er zit nu ook een countdown bij! Ik heb de countdown helaas niet kunnen testen, want mijn PC is gecrashed.Ik heb de countdown helaas niet kunnen testen, want ik heb er niet zoveel zin in .
Onderaan mijn tutorial bevind zich een link naar pastebin, daar is de hele code overzichtelijk met comments.
dcmd en sscanf
Hoe gebruik je dcmd en sscanf?
Alseerst hebben we deze code nodig. Ik heb er een include van gemaakt. Stop deze in include map van je server.dcmd.rar
Big Boss heeft een prachtige tutorial gemaakt voor het gebruik van dcmd en sscanf. [Tutorial] dcmd en sscanf
Nu gaan wij de "/jail [playerid] [tijd] [reden]" command maken.
Bovenaan je script moeten we vier variabelen toevoegen.
new jailed[MAX_PLAYERS]; //Hiermee kunnen we checken of de speler is gejailed.
new vrijlaattimer; //Hiermee kunnen we de timer die we gaan maken stoppen.
new CountdownTimer; //Hiermee kunnen we de countdown timer die we gaan maken stoppen.
new Count; //Hier slaan we de tijd in op voor de countdown.
Als de speler de server joined en/of weg gaat, moeten we natuurlijk instellen dat hij niet meer in jail zit.
public OnPlayerConnect(playerid)
{
jailed[playerid] = 0; //De jailed waarde staat nu op nul
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
jailed[playerid] = 0; //De jailed waarde staat nu op nul
return 1;
}
Onder "OnPlayerCommandText(playerid, cmdtext[])" voegen wij dit toe.
dcmd(jail, 4, cmdtext);
De vier staat voor het aantal characters dat het command heeft.
Nu komt de command zelf. Ik raad aan om het helemaal onderaan het script te doen. Ik zal bij elke regel uitleg zetten.
dcmd_jail(playerid, params[]) //Params zijn de dingen die achter het command komen.
{
if(IsPlayerAdmin(playerid)) //Even checken of de speler eigenlijk admin is.
{
new anderespeler, tijd, reden[64]; //Een paar variabelen maken om de spelerid, tijd, en reden op te slaan. Elke letter van "uiz" heeft een betekenis. De uitleg daarvoor staat in de tut van Big Boss.
if(sscanf(params, "uiz", anderespeler, tijd, reden)) //Checken of de speler eigenlijk iets invoerd.
{
SendClientMessage(playerid, COLOR_YELLOW, "GEBRUIK: /jail [spelerid/stuk van de naam] [tijd] [reden]"); //Bericht terugsturen hoe het wel moet.
return 1; //Einde command
}
if(IsPlayerConnected(anderespeler)) //Als de speler wel de benodigde dingen in heeft gevoerd, gaan we checken of de gegeven speler present is.
{
jailed[playerid] = 1; //Defineren dat de speler is gejailed.
new berichtvooriedereen[128], berichtvoorspeler[128]; //Twee variabelen om een bericht te maken.
new naam[MAX_PLAYER_NAME]; //Om de naam van de betreffende speler op te slaan.
GetPlayerName(anderespeler, naam, sizeof(naam)); //De naam van de andere speler verkrijgen.
format(berichtvoorspeler, sizeof(berichtvoorspeler), "Je bent gejailed voor %i seconden. REDEN: %s", tijd, reden); //Een string maken om de speler te informeren.
SendClientMessage(anderespeler, COLOR_RED, berichtvoorspeler); //De string versturen
format(berichtvooriedereen, sizeof(berichtvooriedereen), "%s is gejailed voor %i seconden.", naam, tijd); //Een string maken om de andere mensen van de server te informeren.
SendClientMessageToAll(COLOR_BLUE, berichtvooriedereen); //De string versturen
SetPlayerPos(anderespeler ,223.2217,111.1841,999.0156); //Daarna de speler in de gevangenis zetten.
SetPlayerInterior(anderespeler ,10); //Interior ID instellen.
vrijlaattimer = SetTimerEx("Vrijlaat", tijd*1000, false, "i", anderespeler); //Timer creëren voor de vrijlating. De timer neemt de spelerid mee.
CountdownTimer = SetTimerEx("Countdown", 1000, tijd*1000, "i", anderespeler); //Countdown timer starten
Count = tijd;
return 1; //Einde command
}
else
{
SendClientMessage(playerid, COLOR_RED, "Deze speler is niet aanwezig!"); //Bericht om te zeggen dat de speler niet aanwezig is.
return 1; //Einde command
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "Je bent geen admin!"); //Bericht om te zeggen dat de command gebruiker geen admin is.
return 1; //Einde command
}
}
Nu moeten we de functie maken om de speler vrij te laten.
public Vrijlaat(playerid)
{
KillTimer(vrijlaattimer); //De timer die we hebben gemaakt voor de zekerheid stoppen.
new string[256], naam[MAX_PLAYER_NAME]; //Een string voor een bericht.
GetPlayerName(playerid, naam, sizeof(naam)); //De naam verkrijgen.
SetPlayerPos(playerid, 0.0, 0.0, 0.0); //De positie instellen. Moet je aanpassen naar keuze.
SetPlayerFacingAngle(playerid, 0); //De hoek instellen. Moet je aanpassen naar keuze.
SendClientMessage(playerid, COLOR_GREEN, "Je bent vrijgelaten uit jail!"); //Bericht voor de speler
format(string, sizeof(string), "%s is vrijgelaten!", naam); //Bericht maken voor iedereen
SendClientMessageToAll(COLOR_RED, string); //Bericht voor iedereen versturen
jailed[playerid] = 0; //De jail waarde weer op nul zetten.
return 1;
}
Nu komt de functie voor de countdown.
public Countdown(playerid)
{
if(Count == 0)
{
GameTextForPlayer(playerid, "You have been released out of jail!", 3000, 3);
KillTimer(CountdownTimer); //De countdown stoppen voor de zekerheid.
}
else
{
new string[128]; //De string voor de countdown.
format(string, sizeof(string), "%d", Count); //De Gametext met het cijfer voor de speler.
GameTextForPlayer(playerid, string, 1500, 3); //De gametext laten zien
Count--; //De count min 1
}
}
En dit is je jail command! Er komt nog een optioneel stukje. Dit zorgt ervoor dat je niet kuntpraten.
public OnPlayerText(playerid, text[])
{
if(jailed[playerid] == 1)
{
SendClientMessage(playerid, COLOR_RED, "Je zit in jail. Je mag niet praten!");
return 0;
}
return 1;
}
Ik heb het command ook op pastebin gezet. Klikkie!
Als je een gevorderde scripter bent, kun je natuurlijk ook codes maken zodat als de speler weggaat en weer de server weer joined, dat hij toch weer in jail zit. SUCCES!!!
Credits gaan naar Big Boss voor zijn prachtige tutorial voor dcmd en sscanf.
Tutorial voor een goede jail command
gemaakt door JoshTheBoss
In deze tutorial ga ik uitleggen hoe je een "/jail [playerid] [tijd] [reden]" maakt. Ik heb deze tutorial geschreven omdat ik andere mensen zie die er soms problemen mee hebben. De command is in dcmd en sscanf. Er zit nu ook een countdown bij! Ik heb de countdown helaas niet kunnen testen, want mijn PC is gecrashed.Ik heb de countdown helaas niet kunnen testen, want ik heb er niet zoveel zin in
.
Onderaan mijn tutorial bevind zich een link naar pastebin, daar is de hele code overzichtelijk met comments.
Nu gaan wij de "/jail [playerid] [tijd] [reden]" command maken.
Bovenaan je script moeten we vier variabelen toevoegen.
Even de kleuren definen.
Nu moeten we ook de timers die we gaan make forwarden.
Als de speler de server joined en/of weg gaat, moeten we natuurlijk instellen dat hij niet meer in jail zit.
Onder "OnPlayerCommandText(playerid, cmdtext[])" voegen wij dit toe.
De vier staat voor het aantal characters dat het command heeft.
Nu komt de command zelf. Ik raad aan om het helemaal onderaan het script te doen. Ik zal bij elke regel uitleg zetten.
Nu moeten we de functie maken om de speler vrij te laten.
Nu komt de functie voor de countdown.
En dit is je jail command! Er komt nog een optioneel stukje. Dit zorgt ervoor dat je niet kuntpraten.
Ik heb het command ook op pastebin gezet. Klikkie!
Als je een gevorderde scripter bent, kun je natuurlijk ook codes maken zodat als de speler weggaat en weer de server weer joined, dat hij toch weer in jail zit. SUCCES!!!
Credits gaan naar Big Boss voor zijn prachtige tutorial voor dcmd en sscanf.
Bewerkt: door JoshTheBoss