Újabb verzió elérhetõ!
sscanf 2.5 letöltése!Írtam hozzá pár dolgot. Ajánlom a legelsõ részét elolvasni.
- Custom (kustom) specifiers
A legújabb sscanf verzióban bekerült egy új elválasztó, ami a \"k\". E elválasztó segítségével létre lehet hozni saját specifiert.
SSCANF:playerstate(string[])
{
if (\'0\' <= string[0] <= \'9\')
{
new
ret = strval(string);
if (0 <= ret <= 9)
{
return ret;
}
}
else if (!strcmp(string, \"PLAYER_STATE_NONE\")) return 0;
else if (!strcmp(string, \"PLAYER_STATE_ONFOOT\")) return 1;
else if (!strcmp(string, \"PLAYER_STATE_DRIVER\")) return 2;
else if (!strcmp(string, \"PLAYER_STATE_PASSENGER\")) return 3;
else if (!strcmp(string, \"PLAYER_STATE_WASTED\")) return 7;
else if (!strcmp(string, \"PLAYER_STATE_SPAWNED\")) return 8;
else if (!strcmp(string, \"PLAYER_STATE_SPECTATING\")) return 9;
}
Ha ezt a kódot belerakod a módodba, akkor ez hozzáadja a \"playerstate\" nevû specifier-t. Következõ képpen tudod ezt használni:
[pawn]
sscanf(params, \"uk<playerstate>\", playerid, state);
[/pawn]
Ez a rendszer szintén támogatja az alapértelmezett értéket. Itt a az alapértelmezett érték a \"PLAYER_STATE_NONE\" lesz:
[pawn]
sscanf(params, \"uK<playerstate>(PLAYER_STATE_NONE)\", playerid, state);
[/pawn]
Az új \"sscanf2.inc\" függvénykönyvtár tartalma két darab specifier-t. Ez a \"k<weapon>\" és a \"k<vehicle>\". Ennek a segítségével letudsz hívni fegyvert/kocsit ID, vagy név szerint. Ha nem ID-t írsz, akkor lefut a \"weapon\"/\"vehicle\" rész és név szerint kikeresi neked az ID-t és azzal tér vissza.
Az egyéni specifier-ek nem támogatják a tömböket és az enumokat!
Jegyezd meg, hogy az egyedi specifier-nek a bemenet típusa mindig karakterlánc, és mindig egy számmal tár vissza. Ez lehet Float, bool, vagy akármilyen más egy cellás tag típus.
Keresni egy általunk beírt karakterláncra egy megadott karakterláncban a következõ képpen tudunk:
[pawn]sscanf(\"10 11 woo 12\", \"i\'woo\'i\", var0, var1);[/pawn]
A kimenet a következõ lesz:
var0 = 10
var1 = 12
- Fent-e van a játékos a szerveren
Rengeteg helyen észreveszem, hogy a beírt ID-t IsPlayerConnected() el ellenõrzik le.
Ez pedig felesleges, mivel az sscanf-nél ha az \"u\" paramétert használod, akkor az automatikusan leellenõrzni, hogy a játékos csatlakozva-e van. Ha nincs, akkor 0xFFFF-el fog visszatérni = (65535 = INVALID_PLAYER_ID).
Tehát elég lenne ennyit is csinálni:
[pawn]if(sscanf(params, \"ui\", player1, score)) return SendClientMessage(playerid, COLOR_RED, \"HASZNÁLAT: /setscore <Játékos ID/Név> <Pont>\");
if(player1 == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, \"HIBA: Játékos nincs csatlakozva!\");
[/pawn]