Szerző Téma: Re:[Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]  (Megtekintve 264 alkalommal)

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
Re:[Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
« Dátum: 2012. január 10. - 16:33:03 »
0 Show voters
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]

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
Re:[Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]
« Válasz #1 Dátum: 2012. január 21. - 19:50:48 »
0 Show voters
Ú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.
 
  • Keresés



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]
« Utoljára szerkesztve: 2012. január 22. - 02:40:41 írta kurta999 »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal