-
Sziasztok,
Sok helyen láttam már (többek közt hivatalos fórumon is), hogy a kezdõk azt kérdezik, hogy hogyan készíthetnek úgy parancsot, hogy ne írja ki a használati szöveget, de ki lehessen hagyni egyes paramétereket.
Õk azért nem tudják (vagyis szerintem), mert azt hiszik hogy az sscanf-et csak feltételnél lehet használni, mert minden egyes publikált szkriptben ezt látják.
Példa:
CMD:mute(playerid, params[])
{
new player,
time,
reason[128];
if(sscanf(params,\"dds[128]\",player,time,reason))return SendClientMessage(playerid,-1\"Használat: /mute <ID> <Perc> <Indok>\");
// ..... parancs többi része .....
return 1;
}
És akkor mi van, ha a használó simán le akarja némítani a játékost?
Akkor a következõ üzenetet kapja:
Használat: /mute <ID> <Perc> <Indok>
Ez a módszer (itt) hibás!
Az sscanf az csak egy funkció [ami 0-val tér vissza ha rosszul vannak megadva a paraméterek, ezért írja a használati szöveget], lehet önmagában is használni:
CMD:mute(playerid,params[])
{
new player,
time,
reason[128];
sscanf(params,\"dds[128]\",player,time,reason);
if(player < 0 || player > GetMaxPlayers() || !IsPlayerConnected(player))return SendClientMessage(playerid,-1,\"A játékos nincs csatlakozva!\");
else
{
if(time != 0 && isnull(reason))
{
//némítás idõvel
}
else if(!isnull(reason))
{
//némítás idõvel és indokkal
}
else
{
//sima némítás
}
}
return 1;
}
Utószó:
Az sscanf-et nem csak parancsoknál lehet használni, hanem mondjuk fájlból kiolvasott koordináták felbontására is.
-
hanem mondjuk fájlból kiolvasott koordináták felbontására is.
Bármilyen karakterlánc \"felvágására\" hasznos, akár MySQL adatok változókba helyezéséhez is, stb...
-
Én tudtam, hogy nem csak feltételnél lehet használni, de legtöbbször parancsoknál úgy használom :P
-
Szerintem ez a legjobb parancskezelõ!
Sokáig az alap parancs kezelõt használtam (strcmp)
De rájöttem hogy forintot nem ér!
Kb egy hete rátértem a zcmd-re!
Sokat segítetett, köszönöm!
-
A sscanf rendelkezik opcionális format típusokkal amelyek arra a célra szolgálnak hogy parancs beírásakor elhagyható általában a legutolsó paraméterek beírása.
Ezeket nagy betûvel jelöli, ss zárójelben meg kell adni számára alap értéket.
A példádban szereplõ parancsot a következõképpen lehet megoldani:
CMD:mute(playerid, params[])
{
new
player,
time,
reason[128];
if(sscanf(params,\"uD(1)S(no reason)[128]\",player,time,reason)) return SendClientMessage(playerid,-1\"Használat: /mute <ID> <Perc> <Indok>\");
// ..... parancs többi része .....
return 1;
}
Így csak egyetlen egy paramétert kötelezõ megadni méghozzá a játékos nevét vagy azonosítószámát <ID>. /mute bieber
A másik kettõ rész <Perc><Indok> meg tetszõlegesen megadható vagy elhanyagolható, vagyis ha nincs megadva akkor az idõ 1 percnyi lesz D(1), az indok meg a \"no reason\", ha megadásra kerül akkor azok lesznek amik a parancsban szerepelnek. /mute bieber 1000000000 *******
-
Nem a leírással kapcsolatos, de van olyan KÓD formájú SSCANF függvény, ami tartalmazza a plugin eljárásait is?
Ezek alatt értem a <>, S, D, F változókat.
-
Nem nagyon kell hozzá leírás a lényeg az hogy opcionális format jelölések (string integer float stb.).
Aminek te megadsz egy alap értéket zárójelekben pl.: D(-1)
Akkor ha nincs (most parancsban próbálom leírni) beírva paraméter akkor alapból az lesz az értéke amit zárójelekbe megadsz.
new
input[128],
str[32],
dec,
Float:f,
opc_str[32],
opc_dec,
Float:opc_f;
input = \"bla 4 0.45\"; // ha ezek után megadod az értékekeket akkor azok lesznek pl.: \"bla 4 0.45 etc 65 7.34\"
sscanf(input, \"s[32]dfS(alapérték)[32]D(-1)F(3.16)\", str, dec, f, opc_str, opc_dec, opc_f);
printf(\"%s | %d | %f Opcionális paraméterek: %s | %d | %f\", str, dec, f, opc_str, opc_dec, opc_f);
Igazából a lényeg annyi lenne hogy nem return egyel tér vissza (ami \"használat: bla bla\" rész) hanem tovább engedi meghatározott alapértékekkel a kód sorozatot (parancsot).
-
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
-
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
Tudtommal nincs, de nemtudom minek akarod a kódot használni, ha az lassú.
Ittvan rá a plugin, ami kb. 10x gyorsabb.
-
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
Tudtommal nincs, de nemtudom minek akarod a kódot használni, ha az lassú.
Ittvan rá a plugin, ami kb. 10x gyorsabb.
[/quote]
Nem szeretem a pluginokat..
A kóddal teljesen megvagyok elégedve.
-
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
Nincs. ;D
-
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
Nincs. ;D
[/quote]
Nehéz lenne megírni? :D
-
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
Nincs. ;D
[/quote]
Nehéz lenne megírni? :D
[/quote]
Nehéz lenne.
-
Én a sscanf használatátt nem értettem nagyon jól de mostmár elégé vágóm!
-
Jó lett!
És azt vágod, hogy nem ez a sscanf-nek az alapja? :D Ennek akkor tudod hasznát venni, ha tudod használni sscanf-et alapból. Mert ez egy kis kiegészítés. :D
-
Jó lett!
És azt vágod, hogy nem ez a sscanf-nek az alapja? :D Ennek akkor tudod hasznát venni, ha tudod használni sscanf-et alapból. Mert ez egy kis kiegészítés. :D
Tudtam eddig is, csak mindig volt benne error :D De meg tudok írni egy alap parancsot..
-
Amúgy én egyáltalán nem ajánlom a kódot használni, ha szereted a pluginokat, ha nem.
A plugin 10x gyorsabb, ez meg is térül neked, még akkor is, ha csak simán parancsokra használod.
De mondjuk ha egy ilyen sort darabolsz vele, (anno R7 SQL plugin elõtt), akkor megnézném, hogy a kód ezzel mit csinál:
\"p<|>{ds[24]}d{s[20]s[20]s[24]s[24]}ddddddddddddddddddddddddddddfffddfffffdd{d}fffddddd{d}d{dd}ffddd{dd}ddddddddddddds[64]s[64]s[128]s[32]s[128]s[128]s[128]s[64]s[64]s[64]\"
-
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
Nincs. ;D
[/quote]
Nehéz lenne megírni? :D
[/quote]
Nehéz lenne plugint használni?
-
Szerintem ez a legjobb parancskezelõ!
Sokáig az alap parancs kezelõt használtam (strcmp)
De rájöttem hogy forintot nem ér!
Kb egy hete rátértem a zcmd-re!
Sokat segítetett, köszönöm!
-
A sscanf rendelkezik opcionális format típusokkal amelyek arra a célra szolgálnak hogy parancs beírásakor elhagyható általában a legutolsó paraméterek beírása.
Ezeket nagy betûvel jelöli, ss zárójelben meg kell adni számára alap értéket.
A példádban szereplõ parancsot a következõképpen lehet megoldani:
CMD:mute(playerid, params[])
{
new
player,
time,
reason[128];
if(sscanf(params,\"uD(1)S(no reason)[128]\",player,time,reason)) return SendClientMessage(playerid,-1\"Használat: /mute <ID> <Perc> <Indok>\");
// ..... parancs többi része .....
return 1;
}
Így csak egyetlen egy paramétert kötelezõ megadni méghozzá a játékos nevét vagy azonosítószámát <ID>. /mute bieber
A másik kettõ rész <Perc><Indok> meg tetszõlegesen megadható vagy elhanyagolható, vagyis ha nincs megadva akkor az idõ 1 percnyi lesz D(1), az indok meg a \"no reason\", ha megadásra kerül akkor azok lesznek amik a parancsban szerepelnek. /mute bieber 1000000000 *******
-
Nem a leírással kapcsolatos, de van olyan KÓD formájú SSCANF függvény, ami tartalmazza a plugin eljárásait is?
Ezek alatt értem a <>, S, D, F változókat.
-
Nem nagyon kell hozzá leírás a lényeg az hogy opcionális format jelölések (string integer float stb.).
Aminek te megadsz egy alap értéket zárójelekben pl.: D(-1)
Akkor ha nincs (most parancsban próbálom leírni) beírva paraméter akkor alapból az lesz az értéke amit zárójelekbe megadsz.
new
input[128],
str[32],
dec,
Float:f,
opc_str[32],
opc_dec,
Float:opc_f;
input = \"bla 4 0.45\"; // ha ezek után megadod az értékekeket akkor azok lesznek pl.: \"bla 4 0.45 etc 65 7.34\"
sscanf(input, \"s[32]dfS(alapérték)[32]D(-1)F(3.16)\", str, dec, f, opc_str, opc_dec, opc_f);
printf(\"%s | %d | %f Opcionális paraméterek: %s | %d | %f\", str, dec, f, opc_str, opc_dec, opc_f);
Igazából a lényeg annyi lenne hogy nem return egyel tér vissza (ami \"használat: bla bla\" rész) hanem tovább engedi meghatározott alapértékekkel a kód sorozatot (parancsot).
-
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
-
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
Tudtommal nincs, de nemtudom minek akarod a kódot használni, ha az lassú.
Ittvan rá a plugin, ami kb. 10x gyorsabb.
-
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
Tudtommal nincs, de nemtudom minek akarod a kódot használni, ha az lassú.
Ittvan rá a plugin, ami kb. 10x gyorsabb.
[/quote]
Nem szeretem a pluginokat..
A kóddal teljesen megvagyok elégedve.
-
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
Nincs. ;D
-
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
Nincs. ;D
[/quote]
Nehéz lenne megírni? :D
-
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
Nincs. ;D
[/quote]
Nehéz lenne megírni? :D
[/quote]
Nehéz lenne.
-
Én a sscanf használatátt nem értettem nagyon jól de mostmár elégé vágóm!
-
Jó lett!
És azt vágod, hogy nem ez a sscanf-nek az alapja? :D Ennek akkor tudod hasznát venni, ha tudod használni sscanf-et alapból. Mert ez egy kis kiegészítés. :D
-
Jó lett!
És azt vágod, hogy nem ez a sscanf-nek az alapja? :D Ennek akkor tudod hasznát venni, ha tudod használni sscanf-et alapból. Mert ez egy kis kiegészítés. :D
Tudtam eddig is, csak mindig volt benne error :D De meg tudok írni egy alap parancsot..
-
Amúgy én egyáltalán nem ajánlom a kódot használni, ha szereted a pluginokat, ha nem.
A plugin 10x gyorsabb, ez meg is térül neked, még akkor is, ha csak simán parancsokra használod.
De mondjuk ha egy ilyen sort darabolsz vele, (anno R7 SQL plugin elõtt), akkor megnézném, hogy a kód ezzel mit csinál:
\"p<|>{ds[24]}d{s[20]s[20]s[24]s[24]}ddddddddddddddddddddddddddddfffddfffffdd{d}fffddddd{d}d{dd}ffddd{dd}ddddddddddddds[64]s[64]s[128]s[32]s[128]s[128]s[128]s[64]s[64]s[64]\"
-
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
Nincs. ;D
[/quote]
Nehéz lenne megírni? :D
[/quote]
Nehéz lenne plugint használni?