12.07.2011, 19:39
(
Последний раз редактировалось Danny; 13.07.2012 в 17:25.
)
Geschreven door Danny.
Waarschuwing: Voor deze tutorial is al een zekere kennis van de PAWN taal nodig.
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 |
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 :/
(niet in een callback!) neer CMD:<typhierjecmdnaam>:
Код:
CMD:doeiets(playerid, params[]) { SendClientMessage(playerid, COLOR,"Je hebt iets gedaan!"); return 1; }
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; }
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; }
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
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.