In deze tutorial ga ik je uitleggen hoe je zelf tekstcommando's maakt (commando's die je intypt in de chatbox) . Basiskennis van Pawn is nodig! (Als je kunt C'en, kun je ook Pawnen )
Eerst moet je een aantal #include neerzetten, voeg ze toe als je ze er nog niet staan!
Zoek de functie "OnPlayerCommandText" op, als deze er nog niet is, maak hem dan aan met de volgende code:
public OnPlayerCommandText(playerid, cmdtext[])
{
return 0;
}
Eerst even wat over de functie, er komt geen chattekst bij de anderen in beeld als je "return 1;" teruggeeft (returned). Als je "return 0;" doet, komt er wel chattekst bij de anderen in beeld. ("JGuntherS: SA-MP is vet" ofzo)
Je kunt cmdtext[] vergelijken met een bepaalde string met de functie strcmp (string comparison). Als de 2 strings hetzelfde zijn, dan geeft strcmp 0 terug. Op deze manier kun je dat in een check verwerken:
public OnPlayerCommandText(playerid, cmdtext[])
{
new lalastr[256];
new daderstr[MAX_PLAYER_NAME+1];
if (strcmp(cmdtext, "/lala", true)==0)
{
GetPlayerName(playerid, daderstr, MAX_PLAYER_NAME);
format(lalastr, 256, "%s said '/Lala'", daderstr);
SendClientMessageToAll(0x222222FF, lalastr); // Het eerste argument is een kleur
return 1;
}
return 0;
}
Als je dit gebruikt komt er bij iedereen "NAAM said '/lala'" te staan als je "/lala" in de chatbox intypt., nogal zinloos dus .
Nu gaan we het wat uitbreiden, met een code waarmee je tegen andere spelers "Lala". Ook nogal zinloos, maar je krijgt toch al een idee van hoe het werkt. Eerst kopiëren we de strtok-functie uit Las Venturas Deathmatch en we zetten deze onderaan in het script:
Nu moet je nog een forward maken, voeg dit toe onder de #includes:
forward strtok(const string[], &index);
Strtok geeft het stuk tot aan de eerste spatie terug, perfect dus om het commando "/slala spelerID" te interpreteren! De waarde (pointer)variabele "index" wordt gezet naar de index in de string van het einde van het eerste stuk. Hele vage zin, snap hem zelf ook niet dus geef ik je een voorbeeld:
De string is bijvoorbeeld: "Ik loop". Als je daarop strtok uitvoert, dat zal strtok "Ik" teruggeven, en index zal op 3 komen te staan, drie posities verder in de string dus ("Ik "). Je kunt index ook al instellen als je de functie aanroept, dan zal strtok beginnen te zoeken vanaf die positie. (Hele vage uitleg, zoek anders op het internet naar strtok.)
Nu de echte code, de commentaren geven uitleg. Als je het nog niet snapt, moet je hier posten!
public OnPlayerCommandText(playerid, cmdtext[])
{
new string[256]; // De formatstring, voor de meldingen
new dader[MAX_PLAYER_NAME+1]; // De naam van de "dader"
new slachtoffer[MAX_PLAYER_NAME+1]; // De naam van het "slachtoffer"
new cmd[256]; // Een tijdelijke commandostring
new tmp[256]; // Nog een tijdelijke commandostring
new splayerid; // Het ID van het "slachtoffer"
new idx; // De index voor strtok
cmd = strtok(cmdtext, idx); // Het eerste gebruik van strtok
if(strcmp(cmd, "/slala", true) == 0) { // Is het commando "/slala"?
tmp = strtok(cmdtext, idx); // Even uitzoeken of er nog wat achter /slala staat. Let op idx, die staat nog op het begin van het volgende stuk van de string door de vorige strtok
if(!strlen(tmp)) {
SendClientMessage(playerid, 0xFFFFFFAA, "USAGE: /slala [playerid]"); // Dit wordt uitgevoerd als er niks achter /slala staat
return 1; // Verstuur de tekst niet als chatbericht
}
splayerid = strval(tmp); // Sla het getal achter /slala op in splayerid
if (IsPlayerConnected(splayerid)) { // Is splayerid een verbonden speler?
GetPlayerName(splayerid, slachtoffer, sizeof(slachtoffer)); // Vraag de naam op van het slachtoffer
GetPlayerName(playerid, dader, sizeof(dader)); // Vraag de naam of van de dader
format(string, sizeof(string), "%s wants to say 'Lala' to you!", dader); // Maakt de melding klaar om verstuurd te worden
SendClientMessage(splayerid, 0xFFFFFFAA, string); // Verstuur de melding!
format(string, sizeof(string), "'Lala' has been said to %s", slachtoffer);
SendClientMessage(playerid, 0xFFFFFFAA, string);
} else {
format(string, sizeof(string), "%d is not an active player.", splayerid); // Oh oh, splayerid is geen verbonden speler
SendClientMessage(playerid, 0xFFFFFFAA, string);
}
return 1; // Verstuur de tekst niet als chatbericht
}
return 0; // Het is geen commando, verstuur maar als tekstbericht!
}
Dat was alles. Ik hoop dat je nu weet hoe je zelf tekstcommando's maakt. Als je het niet snapt of er iets anders aan de hand, please feel free to post.
Met dank aan Jarno, hij heeft mijn scriptjes getest . Jarno
SA-MP Minitutorial
Zelf tekstcommando's maken
Hallo daar,
In deze tutorial ga ik je uitleggen hoe je zelf tekstcommando's maakt (commando's die je intypt in de chatbox)
. Basiskennis van Pawn is nodig! (Als je kunt C'en, kun je ook Pawnen
)
Eerst moet je een aantal #include neerzetten, voeg ze toe als je ze er nog niet staan!
Zoek de functie "OnPlayerCommandText" op, als deze er nog niet is, maak hem dan aan met de volgende code:
Eerst even wat over de functie, er komt geen chattekst bij de anderen in beeld als je "return 1;" teruggeeft (returned). Als je "return 0;" doet, komt er wel chattekst bij de anderen in beeld. ("JGuntherS: SA-MP is vet" ofzo)
Je kunt cmdtext[] vergelijken met een bepaalde string met de functie strcmp (string comparison). Als de 2 strings hetzelfde zijn, dan geeft strcmp 0 terug. Op deze manier kun je dat in een check verwerken:
Als je dit gebruikt komt er bij iedereen "NAAM said '/lala'" te staan als je "/lala" in de chatbox intypt., nogal zinloos dus
.
Nu gaan we het wat uitbreiden, met een code waarmee je tegen andere spelers "Lala". Ook nogal zinloos, maar je krijgt toch al een idee van hoe het werkt. Eerst kopiëren we de strtok-functie uit Las Venturas Deathmatch en we zetten deze onderaan in het script:
Nu moet je nog een forward maken, voeg dit toe onder de #includes:
Strtok geeft het stuk tot aan de eerste spatie terug, perfect dus om het commando "/slala spelerID" te interpreteren! De waarde (pointer)variabele "index" wordt gezet naar de index in de string van het einde van het eerste stuk. Hele vage zin, snap hem zelf ook niet dus geef ik je een voorbeeld:
De string is bijvoorbeeld: "Ik loop". Als je daarop strtok uitvoert, dat zal strtok "Ik" teruggeven, en index zal op 3 komen te staan, drie posities verder in de string dus ("Ik "). Je kunt index ook al instellen als je de functie aanroept, dan zal strtok beginnen te zoeken vanaf die positie. (Hele vage uitleg, zoek anders op het internet naar strtok.)
Nu de echte code, de commentaren geven uitleg. Als je het nog niet snapt, moet je hier posten!
Dat was alles. Ik hoop dat je nu weet hoe je zelf tekstcommando's maakt. Als je het niet snapt of er iets anders aan de hand, please feel free to post.
Met dank aan Jarno, hij heeft mijn scriptjes getest
.
Jarno 