[Tutorial] ZCMD + sscanf
#1



Geschreven door Danny.


Waarschuwing: Voor deze tutorial is al een zekere kennis van de PAWN taal nodig.
Hallo beste lezers!

In deze tutorial ga ik jullie uitleggen hoe je ZCMD goed gebruikt, en hoe je dat doet in
combinatie met sscanf. ZCMD is hййl simpel, maar helaas zie ik toch nog mensen die strcmp of DCMD
gebruiken. Er lijkt een zekere 'drempel' te bestaan tussen andere command processors en ZCMD. Dat is zonde, want ZCMD is een stuk sneller, en ook helemaal niet moeilijk! Dat geld ook voor sscanf. Besides that was ik verveeld en wou ik eens een tut schrijven

- Wat heb je nodig voordat je begint met lezen.

Voordat je kunt beginnen heb je een paar bestanden nodig om de methodes te laten werken:

ZCMD download link(s):

Quote:
Download
Zet bovenaan het script dat deze functies gaat gebruiken #include <zcmd>.
Dowload deze (https://sampforum.blast.hk/showthread.php?tid=120356) plugin. Laad de plugin in je server door in je server.cfg achter
het lijntje 'plugins' 'sscanf' te zetten. Staat het lijnte 'plugins' nog niet in je server.cfg, geen zorgen! Zet hem er gewoon bij.


1) ZCMD

- Wat is het?

ZCMD is een command processor. Een command processor is een verwerker van commando's.
Er zijn een boel command processors maar, ZCMD is op dit moment de meest gebruikte.
ZCMD is gemaakt door Zeex en staat dan ook voor Zeex-Command.

- Hoe werkt het?

ZCMD is zoals ik eerder al zei erg simpel, het is zelfs simpeler dan strcmp!

Voorbeeld van een klassiek strcmp command is:

Код:
if(!strcmp(cmdtext, "/doeiets", true, 8))
{
	SendClientMessage(playerid, COLOR,"Je hebt iets gedaan!");
	return 1;
}

// Inderdaad een droog command :/
ZCMD is een stuk simpeler. Als je een command wilt aanmaken zet je gewoon op een plaats in het script
(niet in een callback!) neer CMD:<typhierjecmdnaam>:

Код:
CMD:doeiets(playerid, params[])
{
	SendClientMessage(playerid, COLOR,"Je hebt iets gedaan!");
	return 1;
}
Het command ingame is nu gewoon '/doeiets'

Zo, dat is makkelijk, niet dan?
ZCMD heeft verder geen definitie in OnPlayerCommandText nodig.

2) Sscanf

- Wat is het?

Sscanf is de moderne vervanger van strtok, net zoals ZCMD strcmp en DCMD vervangt.
Strtok 'splijt' een string, zodat je met strcmp commands kan maken met meerdere parameters.
Sscanf is gecodeerd door ******.

- Hoe werkt het?

Hier heb ik een voorbeeldje van een simpel strcmp command met strtok:

Код:
 if(strcmp(cmd, "/doeiets", true) == 0)
    {
        new tmp[30],cmdtext[256],idk;
        tmp = strtok(cmdtext, idx);
 
        new giveplayerid= strval(tmp);
 
        if(IsPlayerConnected(giveplayerid))
        {
            SendClientMessage(giveplayerid, 0xFFFF00AA, "Een andere speler heeft iets bij je gedaan!"); 
        } // Dat klinkt bijna seksueel :O
        return 1;
    }
Verder wil ik niet zoveel aandacht aan strtok besteden.
Strtok is sloom, oud, en is veel typwerk in vergelijking met sscanf.
Een ZCMD command met sscanf ziet er zo uit:

Код:
CMD:doeiets(playerid, params[])
{
	new str[128];
	new str2[128];
	if(sscanf(params,"is",giveplayerid,str2)) return SendClientMessage(playerid, COLOR, "/doeiets [giveplayerid]"); // de benodigde info is niet ingevoerd, dus er word een message verstuurd.
        SendClientMessage(giveplayerid,COLOR,"Een andere speler heeft iets bij je gedaan!");
	format(str, sizeof str,"%s",str2);
	SendClientMessage(giveplayerid, str);
	return 1;
}
Je ziet dus dat er word gekeken of de benodigde data allemaal is ingevuld. Zo nee, stuur een bericht.
Sscanf splijt dus de 'grote' string genaamd params in stukken en geeft die stukken in feite door aan giveplayerid en str2. De i en s tussen haakjes geven de datatypes aan van de stukken die gespleten moeten worden, in dit geval integer en string. Een lijstje met alle datatypes kan je hieronder vinden (auteur: ******):

Код:
Specifier(s)			Name				Example values
	i, d			Integer				1, 42, -10
	c			Character			a, o, *
	l			Logical				true, false
	b			Binary				01001, 0b1100
	h, x			Hex				1A, 0x23
	o			Octal				045 12
	n			Number				42, 0b010, 0xAC, 045
	f			Float				0.7, -99.5
	g			IEEE Float			0.7, -99.5, INFINITY, -INFINITY, NAN, NAN_E
	u			User name/id (bots and players)	******, 0
	q			Bot name/id			ShopBot, 27
	r			Player name/id			******, 42
Omdat deze string nu gespleten is kun je hier iets mee doen, net als je hierboven ziet.
Strtok werkt eigelijk hetzelfde, maar sscanf is simpelweg beter.


Dit was het al weer voor deze keer, heb je vragen wees dan niet bang om een reply te plaatsen, ik zal je helpen
Klopt er info niet of heb je commetaar? Dat kan je ook gewoon posten, dan zal ik de inhoud van deze tut herzien.
Reply


Messages In This Thread
ZCMD + sscanf - by Danny - 12.07.2011, 19:39
Re: ZCMD + sscanf - by Jantjuh - 12.07.2011, 22:05
Re: ZCMD + sscanf - by Danny - 13.07.2011, 09:02
Re: ZCMD + sscanf - by dahley5 - 01.09.2011, 23:10
Re: ZCMD + sscanf - by Danny - 02.09.2011, 09:10
Re: ZCMD + sscanf - by Henkie - 26.09.2011, 16:04
Re: ZCMD + sscanf - by robintjeh - 26.09.2011, 16:12
Re: ZCMD + sscanf - by Henkie - 26.09.2011, 16:36
Re: ZCMD + sscanf - by Wesley221 - 26.09.2011, 16:44
Re: ZCMD + sscanf - by Henkie - 26.09.2011, 17:35
Re: ZCMD + sscanf - by mickos - 04.05.2012, 08:45
Re: ZCMD + sscanf - by Vinninho - 11.07.2012, 13:28
Re: ZCMD + sscanf - by Danny - 13.07.2012, 17:26
Re: ZCMD + sscanf - by nickbouwhuis - 11.10.2012, 14:36
Re: ZCMD + sscanf - by TheDeadlyDutchi - 11.10.2012, 15:04
Re: ZCMD + sscanf - by IgorLuiz - 02.07.2015, 01:20

Forum Jump:


Users browsing this thread: 2 Guest(s)