Skip to content
View in the app

A better way to browse. Learn more.

GTAGames.nl - De Nederlandse Grand Theft Auto Community!

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Tutorial]Jail command

:Y

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 :Y .

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.

Even de kleuren definen.

#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_BLUE 0x0000BBAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xAA3333AA

Nu moeten we ook de timers die we gaan make forwarden.

forward Vrijlaat(playerid); //De timer
forward Countdown(playerid); //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.

Edited by JoshTheBoss

Featured Replies

dcmd _O_

Mooie tut. Je kan natuurlijk altijd nog een extra stukje maken met een gametext of textdraw waar een countdown in staat, maar dat is allemaal optioneel. Evengoed een goede aanvulling op de tut van Big Boss :Y

  • Author
dcmd _O_

Mooie tut. Je kan natuurlijk altijd nog een extra stukje maken met een gametext of textdraw waar een countdown in staat, maar dat is allemaal optioneel. Evengoed een goede aanvulling op de tut van Big Boss :Y

dankje ^_^

Goeie tut,

ookal begrijp ik niks van dcmd en sscanf, ik heb geprobeerd hem om te zetten naar verstaanbaare strtok-taal :puh: En ik heb wat dingen toegevoegd. Dat is allemaal gelukt.

Alleen, ik heb 1 probleem, als ik iets typ bij reason krijg ik dat niet te zien in de chatbox.

vb.:

/jail playerid time reason

/jail 5 2 Dit is een voorbeeld. ==> Freaksken(ID: 5) is jailed for 2 minutes. Reason: !

	
               if(strcmp(cmd, "/jail", true)==0)
{
    if(!IsPlayerAdmin(playerid)) return 0;
    new giveplayerid, time, reason;
    new giveplayer[MAX_PLAYER_NAME];
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
        SendClientMessage(playerid, COLOR_BLUE, "Use: /jail [id] [time] [reason]");
        return 1;
    }
    giveplayerid = strval(tmp);

    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
        SendClientMessage(playerid, COLOR_BLUE, "Use: /jail [id] [time] [reason]");
        return 1;
    }
    time = strval(tmp);

                   tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
        SendClientMessage(playerid, COLOR_BLUE, "Use: /jail [id] [time] [reason]");
        return 1;
    }
    reason = strval(tmp);

    if(!IsPlayerConnected(giveplayerid))
    {
        SendClientMessage(playerid, COLOR_GREEN, "Player is not online!");
        return 1;
    }

                   if(time > 10)
                   {
                   SendClientMessage(playerid, COLOR_GREEN, "You can not jail someone more than 10 minutes!"); 
                   return 1;
                   }

    jailed[giveplayerid] = 1;
    SetPlayerPos(giveplayerid ,3792.5220,3023.9463,2.2903);
   	    ResetPlayerWeapons(giveplayerid);
   	    ResetPlayerMoney(giveplayerid);
    new string[128];
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    format(string, sizeof(string), "You are jailed for %i minutes. Reason: %s!", time, reason);
    SendClientMessage(giveplayerid, COLOR_GRAY, string);
    format(string, sizeof(string), "Jailed for %i minutes!", time);
    GameTextForPlayer(giveplayerid, string, 2500,3);
    SendClientMessage(giveplayerid, COLOR_GRAY, "Weapons and money are resetted!");
    SendClientMessage(giveplayerid, COLOR_GRAY, "Just take a look around!");
    format(string, sizeof(string), "%s(ID:%d) is jailed for %i minutes. Reason: %s!", giveplayer, giveplayerid, time, reason);
    SendClientMessageToAll(COLOR_GRAY, string);
    SetTimerEx("Jailtime", time*60000, false, "i", giveplayerid);
    return 1;
}

Srry voor de slechte identatie, of hoe dat ook noemt.

Edited by Freaksken

  • Author
Goeie tut,

ookal begrijp ik niks van dcmd en sscanf, ik heb geprobeerd hem om te zetten naar verstaanbaare strtok-taal :puh: En ik heb wat dingen toegevoegd. Dat is allemaal gelukt.

Alleen, ik heb 1 probleem, als ik iets typ bij reason krijg ik dat niet te zien in de chatbox.

vb.:

/jail playerid time reason

/jail 5 2 Dit is een voorbeeld. ==> Freaksken(ID: 5) is jailed for 2 minutes. Reason: !

	
               if(strcmp(cmd, "/jail", true)==0)
{
    if(!IsPlayerAdmin(playerid)) return 0;
    new giveplayerid, time, reason;
    new giveplayer[MAX_PLAYER_NAME];
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
        SendClientMessage(playerid, COLOR_BLUE, "Use: /jail [id] [time] [reason]");
        return 1;
    }
    giveplayerid = strval(tmp);

    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
        SendClientMessage(playerid, COLOR_BLUE, "Use: /jail [id] [time] [reason]");
        return 1;
    }
    time = strval(tmp);

                   tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
        SendClientMessage(playerid, COLOR_BLUE, "Use: /jail [id] [time] [reason]");
        return 1;
    }
    reason = strval(tmp);

    if(!IsPlayerConnected(giveplayerid))
    {
        SendClientMessage(playerid, COLOR_GREEN, "Player is not online!");
        return 1;
    }

                   if(time > 10)
                   {
                   SendClientMessage(playerid, COLOR_GREEN, "You can not jail someone more than 10 minutes!"); 
                   return 1;
                   }

    jailed[giveplayerid] = 1;
    SetPlayerPos(giveplayerid ,3792.5220,3023.9463,2.2903);
   	    ResetPlayerWeapons(giveplayerid);
   	    ResetPlayerMoney(giveplayerid);
    new string[128];
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    format(string, sizeof(string), "You are jailed for %i minutes. Reason: %s!", time, reason);
    SendClientMessage(giveplayerid, COLOR_GRAY, string);
    format(string, sizeof(string), "Jailed for %i minutes!", time);
    GameTextForPlayer(giveplayerid, string, 2500,3);
    SendClientMessage(giveplayerid, COLOR_GRAY, "Weapons and money are resetted!");
    SendClientMessage(giveplayerid, COLOR_GRAY, "Just take a look around!");
    format(string, sizeof(string), "%s(ID:%d) is jailed for %i minutes. Reason: %s!", giveplayer, giveplayerid, time, reason);
    SendClientMessageToAll(COLOR_GRAY, string);
    SetTimerEx("Jailtime", time*60000, false, "i", giveplayerid);
    return 1;
}

Srry voor de slechte identatie, of hoe dat ook noemt.

ten eerste, strval is een functie om een string omtezetten in integers(hele getallen). dus strval(tmp) zet de tmp om in cijfers.

EDIT: Ik heb wat gezocht en heb het gevonden.

in plaats van:

if(!strlen(tmp))
	{
		SendClientMessage(playerid, COLOR_BLUE, "Use: /jail [id] [time] [reason]");
		return 1;
	}
	reason = strval(tmp);

Moet het zijn:

if(!strlen(tmp))
	{
		SendClientMessage(playerid, COLOR_BLUE, "Use: /jail [id] [time] [reason]");
		return 1;
	}
	reason = tmp;

Edited by JoshTheBoss

Werkt niet. Als je een string in een string wilt zetten voldoet '=' niet, maar moet je een format gebruiken.

ik heb geprobeerd hem om te zetten naar verstaanbaare strtok-taal

Ik probeer juist de mensen aan te zetten om meer met dcmd te werken. :7 Vanaf heden ga ik dus geen hulp meer verschaffen aan mensen die per se strtok willen gebruiken.

ik heb geprobeerd hem om te zetten naar verstaanbaare strtok-taal

Ik probeer juist de mensen aan te zetten om meer met dcmd te werken. :7 Vanaf heden ga ik dus geen hulp meer verschaffen aan mensen die per se strtok willen gebruiken.

Waarom dcmd? Omdat het sneller, makkelijker en simpeler is :puh:

  • Author

Toegevoegd bij de tutorial: Een countdown!!!

Toegevoegd bij de tutorial: Een countdown!!!

Goed en duidelijk. Meer kan ik niet zeggen :puh:. Ga zo door!

  • Author
Toegevoegd bij de tutorial: Een countdown!!!

Goed en duidelijk. Meer kan ik niet zeggen :puh:. Ga zo door!

Thnx :D

Ik zie een kleine fout. Je hebt je kleuren gedefiniëerd als RGB in de tutorial, en niet als hex. Dit gaat dus waarschijnlijk een tag mismatch o.i.d. geven.

Kleuren in Pawn worden gedefinieerd: 0xRRGGBBAA

  • Author
Ik zie een kleine fout. Je hebt je kleuren gedefiniëerd als RGB in de tutorial, en niet als hex. Dit gaat dus waarschijnlijk een tag mismatch o.i.d. geven.

Kleuren in Pawn worden gedefinieerd: 0xRRGGBBAA

oww, ok, k ga het nu verbeteren, want mijn PC is gefixt!!!!!!

Leuke tut :Y alleen als je /kill doet of word vermoord kan je gewoon weer weglopen uit de jail? maargoed, bij een tut zou ik dus niet aan beginners aanraden om [256] arrays te gebruiken.

Edited by D-V-D-K

  • 11 months later...

Voeg dit ook even toe zodat ze niet uit de jail kunnen ontsnappen d.m.v. dood gaan:

public OnPlayerSpawn(playerid)
{
if(jailed[playerid])
{
	SetPlayerPos(playerid, 223.2217, 111.1841, 999.0156);
	SetPlayerInterior(playerid, 10);
	return 1;
}
return 1;
}

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.