GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Leírások/Útmutatók => A témát indította: 1ST_Chr - 2012. Március 28. - 15:23:28

Cím: [Leírás] sscanf és zcmd
Írta: 1ST_Chr - 2012. Március 28. - 15:23:28
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.
Cím: [Leírás] sscanf és zcmd
Írta: ChuckNorris - 2012. Március 28. - 15:55:52
Idézetet írta: 1ST_Chr date=1332941008\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic
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...
Cím: [Leírás] sscanf és zcmd
Írta: lackos888 - 2012. Március 28. - 16:28:01
Én tudtam, hogy nem csak feltételnél lehet használni, de legtöbbször parancsoknál úgy használom  :P
Cím: [Leírás] sscanf és zcmd
Írta: Amf - 2012. Május 09. - 11:02:18
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!
Cím: [Leírás] sscanf és zcmd
Írta: Zsolesszka - 2012. Május 09. - 16:22:28
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 *******
Cím: [Leírás] sscanf és zcmd
Írta: TengeriMalac - 2012. Május 09. - 20:03:50
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.
Cím: [Leírás] sscanf és zcmd
Írta: Zsolesszka - 2012. Május 09. - 20:35:03
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).
Cím: [Leírás] sscanf és zcmd
Írta: TengeriMalac - 2012. Május 09. - 22:17:32
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
Cím: [Leírás] sscanf és zcmd
Írta: kurta999 - 2012. Május 10. - 06:46:17
Idézetet írta: TengeriMalac date=1336594652\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic
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.
Cím: [Leírás] sscanf és zcmd
Írta: TengeriMalac - 2012. Május 10. - 06:50:12
Idézetet írta: kurta999 date=1336625177\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic


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.
Cím: [Leírás] sscanf és zcmd
Írta: Zsolesszka - 2012. Május 10. - 16:25:20
Idézetet írta: TengeriMalac date=1336594652\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
 
Nincs.  ;D
Cím: [Leírás] sscanf és zcmd
Írta: TengeriMalac - 2012. Május 11. - 14:11:56
Idézetet írta: ɐʞzssǝlosz date=1336659920\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic


Ezt vágom.. De a kérdésre még nem kaptam választ. :D
 
Nincs.  ;D
 
[/quote]
Nehéz lenne megírni? :D
Cím: [Leírás] sscanf és zcmd
Írta: Zsolesszka - 2012. Május 11. - 16:14:23
Idézetet írta: TengeriMalac date=1336738316\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic


 

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.
Cím: [Leírás] sscanf és zcmd
Írta: ZyZu. - 2012. Május 11. - 17:42:49
Én a sscanf használatátt nem értettem nagyon jól de mostmár elégé vágóm!
Cím: [Leírás] sscanf és zcmd
Írta: Gabor.. - 2012. Május 11. - 19:52:15
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
Cím: [Leírás] sscanf és zcmd
Írta: ZyZu. - 2012. Május 11. - 20:37:20
Idézetet írta: Gabor.. date=1336758735\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic
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..
Cím: [Leírás] sscanf és zcmd
Írta: kurta999 - 2012. Május 11. - 20:40:37
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]\"
Cím: [Leírás] sscanf és zcmd
Írta: DrAkE - 2012. Május 12. - 17:09:40
Idézetet írta: TengeriMalac date=1336738316\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic


 

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?
Cím: [Leírás] sscanf és zcmd
Írta: Amf - 2012. Május 09. - 11:02:18
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!
Cím: [Leírás] sscanf és zcmd
Írta: Zsolesszka - 2012. Május 09. - 16:22:28
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 *******
Cím: [Leírás] sscanf és zcmd
Írta: TengeriMalac - 2012. Május 09. - 20:03:50
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.
Cím: [Leírás] sscanf és zcmd
Írta: Zsolesszka - 2012. Május 09. - 20:35:03
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).
Cím: [Leírás] sscanf és zcmd
Írta: TengeriMalac - 2012. Május 09. - 22:17:32
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
Cím: [Leírás] sscanf és zcmd
Írta: kurta999 - 2012. Május 10. - 06:46:17
Idézetet írta: TengeriMalac date=1336594652\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic
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.
Cím: [Leírás] sscanf és zcmd
Írta: TengeriMalac - 2012. Május 10. - 06:50:12
Idézetet írta: kurta999 date=1336625177\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic


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.
Cím: [Leírás] sscanf és zcmd
Írta: Zsolesszka - 2012. Május 10. - 16:25:20
Idézetet írta: TengeriMalac date=1336594652\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic
Ezt vágom.. De a kérdésre még nem kaptam választ. :D
 
Nincs.  ;D
Cím: [Leírás] sscanf és zcmd
Írta: TengeriMalac - 2012. Május 11. - 14:11:56
Idézetet írta: ɐʞzssǝlosz date=1336659920\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic


Ezt vágom.. De a kérdésre még nem kaptam választ. :D
 
Nincs.  ;D
 
[/quote]
Nehéz lenne megírni? :D
Cím: [Leírás] sscanf és zcmd
Írta: Zsolesszka - 2012. Május 11. - 16:14:23
Idézetet írta: TengeriMalac date=1336738316\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic


 

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.
Cím: [Leírás] sscanf és zcmd
Írta: ZyZu. - 2012. Május 11. - 17:42:49
Én a sscanf használatátt nem értettem nagyon jól de mostmár elégé vágóm!
Cím: [Leírás] sscanf és zcmd
Írta: Gabor.. - 2012. Május 11. - 19:52:15
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
Cím: [Leírás] sscanf és zcmd
Írta: ZyZu. - 2012. Május 11. - 20:37:20
Idézetet írta: Gabor.. date=1336758735\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic
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..
Cím: [Leírás] sscanf és zcmd
Írta: kurta999 - 2012. Május 11. - 20:40:37
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]\"
Cím: [Leírás] sscanf és zcmd
Írta: DrAkE - 2012. Május 12. - 17:09:40
Idézetet írta: TengeriMalac date=1336738316\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"19216\" data-ipsquote-contentclass=\"forums_Topic


 

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?