Jump to content

[Tutorial]Hoe maak je commands


nick5556

Recommended Posts

Hey,

ik maak deze tutorial voor de beginners en omdat ik het leuk vind om mensen te helpen. Ik ga jullie uitleggen hoe je wat simpelere commands maakt, maar ik zal ook wat commands voor gevorderde uitleggen. Als je nog nooit gescipt hebt zou ik --hier-- kijken.

Het eerste command wat ik zal behandelen klinkt in het begin nutteloos, we gaan namelijk als iemand '/my-first- command' typt een tekstje laten verschijnen. Je denkt wat ik al dacht dat je denkt: Wat kan je hier nou mee :duh: , zo'n command is eigenlijk het meest gebruikte soort command(denk aan '/help' en '/commands').

Eerst zoeken we het OnPlayerCommandText-callback op. Je weet hoe dat moet. Daar maak je altijd je commands! Dus daar gaan we beginnen een command aan te maken ;) .

We beginnen met:

if(strcmp("/my-first-command", cmdtext, true) == 0)
{
return 1;
}

Hiermee geven we aan dat '/my-first-command' bestaat, nu gebeurt er nog helemaal niks, eerst zetten we onder de includes:

#define COLOR_RED 0xFF0000AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_GREEN 0x00FF00AA

Een paar kleuren, in de tut die ik aan het begin van deze tut heb gegeven staat wat dit inhoud. Maar met dit doet het command nog steeds niets, dit moet veranderen vind ik. Dit gaan we doen met 'SendClientMessage(playerid, kleur, "het bericht");'. We gaan iemand dit bericht verzenden: 'Je eerste command werkt!'.

if(strcmp("/my-first-command", cmdtext, true) == 0)
{
SendClientMessage(playerid, COLOR_GREEN, "Je eerste command werkt!"); // Eerst staat er playerid, dat moet	 er gewoon staan
// dan staat er 'COLOR_GREEN' de kleur groen, die we net gefineerd hebben, de tekst word in het groen weergegeven.
// dan staat er "Je eerste command werkt" dat is de tekst die verzonden moet worden.
return 1;
}

Ik denk dat iedereen dit wel snapt, heb je nogsteeds vragen, PM me dan!

Nu gaan we al een iets moeilijker command maken, we gaan namelijk het statement 'else' gebruiken, we gaan if midden in een command zetten, we gaan een command maken voor alleen rcon admins..

We beginnen net als net met een stukje om een command aan te geven.

if(strcmp("/my-admin-first-command", cmdtext, true) == 0)
{
return 1;
}

Er zal nu weer weinig gebeuren, nu gaan we aangeven dat iemand admin moet zijn, dit doen we zo:

if(strcmp("/my admin-first-command", cmdtext, true) == 0)
{
if(IsPlayerAdmin(playerid) == 1) // vraagt of de speler admin is.
{
}
return 1;
}

We gaan nu jezelf 100% health geven, dit doen we met: SetPlayerHealth(playerid, 100); dus dan krijg je dit:

if(strcmp("/my-admin-first-command", cmdtext, true) == 0)
{
if(IsPlayerAdmin(playerid) == 1) // vraagt of de speler admin is.
{
	SetPlayerHealth(playerid, 100); // geeft player 100 health
}
return 1;
}

Dit moet denk ik ook nog te snappen zijn, we geven iemand 100 health. We gaan jezelf er ook nog eens 10000 dollar bij geven :sigaar: . Dit gaan we doen met: GivePlayerMoney(playerid, 10000);.

Dan heb je dus dit:

if(strcmp("/my-admin-first-command", cmdtext, true) == 0)
{
if(IsPlayerAdmin(playerid) == 1) // vraagt of de speler admin is.
{
	SetPlayerHealth(playerid, 100); // geeft player 100 health
	GivePlayerMoney(playerid, 10000); // geeft player 10000 dollar
}
return 1;
}

Dit is ook te snappen, maar als je nou ook nog eens wapens en armour wilt? Dan moet je dit doen:

if(strcmp("/my-admin-first-command", cmdtext, true) == 0)
{
if(IsPlayerAdmin(playerid) == 1) // vraagt of de speler admin is.
{
	SetPlayerHealth(playerid, 100); // geeft player 100 health
	GivePlayerMoney(playerid, 10000); // geeft player 10000 dollar
	SetPlayerArmour(playerid, 100); // dit geeft de player 100 armour
	GivePlayerWeapon(playerid, 26, 999); // dit is hem vertaalt: GivePlayerWeapon(playerid, weapon id*, ammo);
}
return 1;
}

*Hiervoor heb je een link nodig, namelijk de weapon ID's --De Link!--

Nu hebben we gedaan wat er gebeurt als iemand is ingelogt met rcon admin, maar wat moet er gebeuren als iemand geen rcon admin is? We geven iemand een text, daarin zetten we: 'Je moet eerst inloggen met rcon admin(/rcon login [je ingestelde pw].'.

if(strcmp("/my-admin-first-command", cmdtext, true) == 0)
{
if(IsPlayerAdmin(playerid) == 1) // vraagt of de speler admin is.
{
	SetPlayerHealth(playerid, 100); // geeft player 100 health
	GivePlayerMoney(playerid, 10000); // geeft player 10000 dollar
	SetPlayerArmour(playerid, 100); // dit geeft de player 100 armour
	GivePlayerWeapon(playerid, 26, 999); // dit is hem vertaalt: GivePlayerWeapons(playerid, weapon id, ammo); 
}
else // wat er gebeurt als 'IsPlayerAdmin(playerid) == 1' niet zo is.
{
	SendClientMessage(playerid, COLOR_RED, "Je moet eerst inloggen met rcon admin(/rcon login [je ingestelde pw]"); // en als je niet weet hoe je moet inloggen met rcon moet je dit doen: /rcon login [je ingestelde pw]
}
return 1;
}

En dat is alweer een command, heb je vragen PM me ;) . Het command wat we nu gaan maken is eigenlijk hetzelfde, we gaan nu een auto fixen, het command noemen we '/fix'.

if(strcmp("/fix", cmdtext, true) == 0)
{
if(IsPlayerInAnyVehicle(playerid) == 1) // dit vraagt of iemand wel in een vehicle zit..
{
}
return 1;
}

Nu gebeurt er helemaal niets als iemand niet in een auto zit. Daarvoor gebruiken we else weer. Kijk zo:

if(strcmp("/fix", cmdtext, true) == 0)
{
if(IsPlayerInAnyVehicle(playerid) == 1) // dit vraagt of iemand wel in een vehicle zit..
{
			new vehicleidis;
			vehicleidis = GetPlayerVehicleID(playerid);
	SetVehicleHealth(vehicleidis,  1000.0); // ondleed ziet hij er zo uit: SetVehicleHealth(vehicleid[word opgevraagt], het aantal heatlh);
}
else
{
	SendClientMessage(playerid, COLOR_RED, "Je zit niet in een voertuig!");
}
return 1;
}

Weer met een simpele SendClientMessage, kom je er niet uit? PM me dan maar ;) je kan natuurlijk ook posten. Nu gaan we beginnen met een command waarbij iemand een stukje extra erbij moet zetten, dit commando word weer voor admins, dit komt er allemaal in:

- Naam is: /car

- Iemand moet het car ID invoeren

- Als dat niet gedaan is komt er een tekstje

- Als iemand een ongeldig ID heeft ingevoert lukt het ook niet.

- Als alles goed werkt dan tja krijgt hij een auto, daar word diegene gelijk in de auto gepropt.

Eerst zeggen we dat er nieuwe variabelen moeten worden gemaakt: zet dit boven je command!

new cmd[256],tmp[256],idx;
cmd = strtok(cmdtext,idx);

Daarbij moet je ook wat onderaan je script zetten namelijk dit:

strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
	index++;
}

new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
	result[index - offset] = string[index];
	index++;
}
result[index - offset] = EOS;
return result;
}

Dat valt niet veel aan te snappen, dit moet er gewoon staan.

Nu gaan we het command maken je zal denken dat dit moet maar dit is fout!:

[code]new cmd[256],tmp[256],idx;
cmd = strtok(cmdtext,idx);
if(strcmp("/car", cmdtext, true) == 0)
{
return 1;
}

Dat is dus fout! Zo moet het wel:

new cmd[256],tmp[256],idx;
cmd = strtok(cmdtext,idx);
if(strcmp("/car", cmd, true) == 0) // let op cmd houd strtok(cmdtext,idx); in dus dat kan er ook staan, we maken er cmd van want je gebruikt het vaker!
{
return 1;
}

Je kan het ook anders doen maar ik raad je dit aan!

Nu gaan we opvragen of er wel wat is ingevult, want dan kan er natuurlijk geen car ingevult worden.

new cmd[256],tmp[256],idx;
cmd = strtok(cmdtext,idx);
if(strcmp("/car", cmd, true) == 0) // let op cmd houd strtok(cmdtext,idx); in dus dat kan er ook staan, we maken er cmd van want je gebruikt het vaker!
{
	tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) // die '!' betekend 'als dat niet zo is'
{
	SendClientMessage(playerid, COLOR_RED, "USAGE: /car [400-609]");
}
return 1;
}

Nu word er nog geen car gespawned als je het goed doet, maar nu nog een paar dingen die fout kunnen gaan:

new cmd[256],tmp[256],idx;
cmd = strtok(cmdtext,idx);
if(strcmp("/car", cmd, true) == 0) // let op cmd houd strtok(cmdtext,idx); in dus dat kan er ook staan, we maken er cmd van want je gebruikt het vaker!
{
	tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) // die '!' betekend 'als dat niet zo is'
{
	SendClientMessage(playerid, COLOR_RED, "USAGE: /car [400-609]");
}
else
{
	if(IsPlayerInAnyVehicle(playerid) == 1) // Als iemand al in een voertuig zit
	{
		SendClientMessage(playerid, COLOR_RED, "You are already in a vehicle");
	}
	else
	{
		new car;
		car = strval(tmp); // car controleerd wat er is ingevult.
		if(car < 400 || car > 609) // || staat voor or, hier word opgevraagt of het wel de bestaande car ID's zijn
		{
			SendClientMessage(playerid, COLOR_RED, "USAGE: /car [400-609]");
		}
	}
}
return 1;
}

Dit zijn volgens mij alle dingen die fout kunnen gaan. Ik denk dat je dit moet snappen, anders pm je maar ;).

Nu gaan we een lastig stukje coderen, het spawnen van de vehicle, dat doen we zo:

new cmd[256],tmp[256],idx;
cmd = strtok(cmdtext,idx);
if(strcmp("/car", cmd, true) == 0) // let op cmd houd strtok(cmdtext,idx); in dus dat kan er ook staan, we maken er cmd van want je gebruikt het vaker!
{
	tmp = strtok(cmdtext, idx);
if(IsPlayerAdmin(playerid) == 0)
{
	SendClientMessage(playerid, COLOR_RED, "You need to be an admin for this"); // oeps deze vergeten.. 
}
else
{
	if(!strlen(tmp)) // die '!' betekend 'als dat niet zo is'
	{
		SendClientMessage(playerid, COLOR_RED, "USAGE: /car [400-609]");
	}
	else
	{
		if(IsPlayerInAnyVehicle(playerid) == 1) // Als iemand al in een voertuig zit
		{
			SendClientMessage(playerid, COLOR_RED, "You are already in a vehicle");
		}
		else
		{
			new car;
			car = strval(tmp); // car controleerd wat er is ingevult.
			if(car < 400 || car > 609) // || staat voor or, hier word opgevraagt of het wel de bestaande car ID's zijn
			{
				SendClientMessage(playerid, COLOR_RED, "USAGE: /car [400-609]");
			}
			else
			{
				new Float:x,Float:y,Float:z,Float:a; // de plaatsen die opgevraagt gaan worden..
				GetPlayerPos(playerid,x,y,z); // het verkrijgen van de dingen
				GetPlayerFacingAngle(playerid,a); // vragen waar de speler heenkijkt
				new newcar; // een nieuwe variabele
				newcar = CreateVehicle(car,x,y,z,a,-1,-1,240000); // wat de var newcar inhoud, dus dit:
// CreateVehicle(vehicleid[ingevult na het command],x plaats, y plaats, z plaats, kijkrichting, kleur, kleur, en nog een getal);
				PutPlayerInVehicle(playerid,newcar,0); // stop de speler in de auto die we hebben aangemaakt
				SendClientMessage(playerid,COLOR_GREEN, "Je commando is succesvol verwerkt, je zit nu in een wagen.."); // en een message weergeven
			}
		}
	}	
}	
return 1;
}

En nu moet ik stoppen, dus ik ga morgen verder met: Een paar dingen die ik niet heb gebruikt, maar die je vast en zeker een keer gaat gebruiken. Ik hoop dat ik het goed heb uitgelegt en het is mijn eerste tut :D :$

W.I.P.

Bewerkt: door nick5556
Link to comment
Delen op andere websites

Goede tutorial, al raad ik je aan even de code netjes uit te lijnen. Dit kan wel binnen de code-tags, er niet buiten. Voeg 4 spaties toe en deze worden geïnterpreteerd als een tab door de forumsoftware. Doe dat even en het is wat overzichtelijker + je krijgt niet de loose indentation-foutmelding. Voor de rest is het een goede tutorial voor beginners :)

Link to comment
Delen op andere websites

Goede tutorial! Alleen heb ik nog een paar foutjes ontdekt:

if(strcmp("/my first command", cmdtext, true) == 0)

...zal niet werken, je niet zo spaties in een command zetten.

Ook

GivePlayerWeapons(playerid, 350, 999);

zal niet werken, aangezien '350' geen geldig wapenID is.

Wat jij gebruikt is het model-ID die je gebruikt voor pickups.

=>Hier<= kan je de id's vinden.

Let op: Je moet dus het getal gebruiken dat onder 'ID#' staat. Niet onder 'Model'

Edit: Oh, en het is GivePlayerWeapon (dus zonder een 's' aan het eind ;) )

Bewerkt: door =>Sandra<=
Link to comment
Delen op andere websites

Nu hebben we gedaan wat er gebeurt als iemand is ingelogt met rcon admin, maar wat moet er gebeuren als iemand geen rcon admin is? We geven iemand een text, daarin zetten we: 'Je moet eerst inloggen met rcon admin(/rcon login [je ingestelde pw].'.

if(strcmp("/my-admin-first-command", cmdtext, true) == 0)
{
if(IsPlayerAdmin(playerid) == 1) // vraagt of de speler admin is.
{
	SetPlayerHealth(playerid, 100); // geeft player 100 health
	GivePlayerMoney(playerid, 10000); // geeft player 10000 dollar
	SetPlayerArmour(playerid, 100); // dit geeft de player 100 armour
	GivePlayerWeapon(playerid, 26, 999); // dit is hem vertaalt: GivePlayerWeapons(playerid, weapon id, ammo); 
}
else // wat er gebeurt als 'IsPlayerAdmin(playerid) == 1' niet zo is.
{
	SendClientMessage(playerid, COLOR_RED, "Je moet eerst inloggen met rcon admin(/rcon login [je ingestelde pw]"); // en als je niet weet hoe je moet inloggen met rcon moet je dit doen: /rcon login [je ingestelde pw]
}
return 1;
}

if(IsPlayerAdmin(playerid) == 1)

Hij check je of de speler admin level 2 heeft.

SendClientMessage(playerid, COLOR_RED, "Je moet eerst inloggen met rcon admin(/rcon login [je ingestelde pw]"); // en als je niet weet hoe je moet inloggen met rcon moet je dit doen: /rcon login [je ingestelde pw]
Hier zeg je dat ze moeten RCON inloggen. Maar je controleert niet of ze RCON Admin zijn.

DUS:

if(IsPlayerAdmin(playerid) == 1)

Moet zijn dan ze RCON inloggen. Ben zo ff kwijt.

Link to comment
Delen op andere websites

Nu hebben we gedaan wat er gebeurt als iemand is ingelogt met rcon admin, maar wat moet er gebeuren als iemand geen rcon admin is? We geven iemand een text, daarin zetten we: 'Je moet eerst inloggen met rcon admin(/rcon login [je ingestelde pw].'.

if(strcmp("/my-admin-first-command", cmdtext, true) == 0)
{
if(IsPlayerAdmin(playerid) == 1) // vraagt of de speler admin is.
{
	SetPlayerHealth(playerid, 100); // geeft player 100 health
	GivePlayerMoney(playerid, 10000); // geeft player 10000 dollar
	SetPlayerArmour(playerid, 100); // dit geeft de player 100 armour
	GivePlayerWeapon(playerid, 26, 999); // dit is hem vertaalt: GivePlayerWeapons(playerid, weapon id, ammo); 
}
else // wat er gebeurt als 'IsPlayerAdmin(playerid) == 1' niet zo is.
{
	SendClientMessage(playerid, COLOR_RED, "Je moet eerst inloggen met rcon admin(/rcon login [je ingestelde pw]"); // en als je niet weet hoe je moet inloggen met rcon moet je dit doen: /rcon login [je ingestelde pw]
}
return 1;
}

if(IsPlayerAdmin(playerid) == 1)

Hij check je of de speler admin level 2 heeft.

SendClientMessage(playerid, COLOR_RED, "Je moet eerst inloggen met rcon admin(/rcon login [je ingestelde pw]"); // en als je niet weet hoe je moet inloggen met rcon moet je dit doen: /rcon login [je ingestelde pw]
Hier zeg je dat ze moeten RCON inloggen. Maar je controleert niet of ze RCON Admin zijn.

DUS:

if(IsPlayerAdmin(playerid) == 1)

Moet zijn dan ze RCON inloggen. Ben zo ff kwijt.

if(IsPlayerAdmin(playerid) == 1) // vraagt of de speler admin is.

Dat vraagt of de speler met rcon admin is ingelogt hoor, probeer maar uit!

Link to comment
Delen op andere websites

SetVehicleHealth(vehicleid[1 voor alle vehicles], het aantal heatlh);

1 voor alle voertuigen??? :{

new car;
car=GetPlayerVehicleID(playerid);
SetVehicleHealth(car, 1000.0);

of korter:

SetVehicleHealth(GetPlayerVehicleID(playerid), 1000.0);

Link to comment
Delen op andere websites

SetVehicleHealth(vehicleid[1 voor alle vehicles], het aantal heatlh);

1 voor alle voertuigen??? :{

new car;
car=GetPlayerVehicleID(playerid);
SetVehicleHealth(car, 1000.0);

of korter:

SetVehicleHealth(GetPlayerVehicleID(playerid), 1000.0);

Bij mij werkt die 1 voor alle voertuigen ^_^

Link to comment
Delen op andere websites

Bij mij werkt die 1 voor alle voertuigen ^_^

Dat is onzin...

weet je zeker dat je die '1' niet een 'i' is??

Want de eerste parameter van SetVehicleHealth is namelijk het ID van het voertuig dat jij wilt healen.

Alleen het eerste voertuig heeft id '1'

Bijvoorbeeld:

AddStaticVehicle(522,1091.5880,1599.2012,12.2154,349.5006,212,212); // <<<<===  ID 1
AddStaticVehicle(541,1088.2096,1598.5947,12.2160,350.3751,212,212); // <<<<===  ID 2
AddStaticVehicle(411,1103.3478,1599.3058,12.2160,10.7857,212,212); // <<<<===  ID 3

Jouw code zal wel werken als je in het eerste voertuig zit, maar niet in de 2e of 3e...

Bewerkt: door =>Sandra<=
Link to comment
Delen op andere websites

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...