Példaképp lassacskán elkészítünk egy parancsot minden részt elmagyarázva.
A parancs az /murder parancs lesz.
Az strtok kód elérhető
ittEz a kód szükséges hogy később használhassuk az strtokot.
new cmd[128], idx;
cmd = strtok(cmdtext, idx);
Ezt az OnPlayerCommandText() alá tegyük
Kód magyarázata:
A cmd az a cmdtext szétbontott változatának egyik része, az idx pedig a segédváltozó.
A szétbontást az strtok() függvény végzi el.
Kezdjük el a parancs elkészítését:
if(!strcmp(cmd, \"/murder\", true))
{
Ez lecsekkolja hogy a játékos által beírt parancs első része megegyezik-e az általunk megadott karakterlánccal azaz a /murder-rel.
Hozzunk létre egy új karakter láncot ami azt fogja eltárolni ami a /murder után lett beírva.
new params[128];
Tároljuk el benne az infót:
params = strtok(cmdtext, idx);
Ha a játékos nem ír be semmit akkor szólunk neki kegyesen h tévedett. pl. így:
if(!strlen(params)) return SendClientMessage(playerid, 0xFFFFFFFF, \"pfff... használat: /murder [id]\");
Ha kényelmesebbé akarjuk tenni későbbiekben a beírt ID kezelését akkor ezt is adjuk parancsunkhoz:
new givenid = strval(params);
És akkor dolgozzunk vele:
if(IsPlayerConnected(givenid)) SetPlayerHealth(givenid,-50);
else SendClientMessage(playerid,szín,\"A megadott ID nincs a szerveren.\");
Ezek után állítsuk be a visszatérési értéket és az előbb kinyított {-eket zárju be.
Ha mindent így csináltunk akkor a parancsunk készen van:
if(!strcmp(cmd, \"/murder\", true))
{
new params[128];
params = strtok(cmdtext, idx);
if(!strlen(params)) return SendClientMessage(playerid, 0xFFFFFFFF, \"pfff... használat: /murder [id]\");
new givenid = strval(params);
if(IsPlayerConnected(givenid)) SetPlayerHealth(givenid,-50);
else SendClientMessage(playerid,szín,\"A megadott ID nincs a szerveren.\");
return 1;
}
Bocs az indentációért. Ti majd rendesen megcsináljátok:)
Jöhetnek kérdések,kommentek,kritikák,problémák!
Plusz magyarázás:
if(!strlen(params)) return SendClientMessage(playerid, 0xFFFFFFFF, \"pfff... használat: /murder [id]\");
Minden függvénynek saját visszatérési értéke van. Álatlában 1 ha végbe ment és 0 vagy -1 ha nem.
Ha valahova odaírjuk h return 1; akkor az alatta lévő dolgok nem fognak megtörténni.
Lásd:
Admin SkinekEnnél a callbacknél ha a visszatérési érték(e a callbacknek) 0 akkor nem enged spawnolni ha egy akkor pedig igen.
A végén ottvan a return 1; szóval alapból engedi spawnolni a játékosokat de ha a játékos skine xy és nem Admin akkor a callback visszatérési értke 0 azaz nem spanwolhat és a szerver nem jut el a return 1; beolvasásához --> enm engedi spanwolni.
Így a mi parancsunk így nézne ki ha csak adminok használhatják:
if(!strcmp(cmd, \"/murder\", true))
{
new params[128];
params = strtok(cmdtext, idx);
if(!IsPlayerAdmin(playerid)) return 0; // Unkown Command, ha nem admin
if(!strlen(params)) return SendClientMessage(playerid, 0xFFFFFFFF, \"pfff... használat: /murder [id]\");
new givenid = strval(params);
if(IsPlayerConnected(givenid)) SetPlayerHealth(givenid,-50);
else SendClientMessage(playerid,szín,\"A megadott ID nincs a szerveren.\");
return 1;
}
Epsilon