Szerző Téma: [Leírás] sscanf és zcmd  (Megtekintve 6191 alkalommal)

[Leírás] sscanf és zcmd
« Dátum: 2012. Március 28. - 15:23:28 »
+2
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.
« Utoljára szerkesztve: 2012. Március 28. - 15:33:20 írta 1ST_Chr »

[Leírás] sscanf és zcmd
« Válasz #1 Dátum: 2012. Március 28. - 15:55:52 »
0
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...

[Leírás] sscanf és zcmd
« Válasz #2 Dátum: 2012. Március 28. - 16:28:01 »
0
Én tudtam, hogy nem csak feltételnél lehet használni, de legtöbbször parancsoknál úgy használom  :P

Nem elérhető Amf

  • 1459
    • Profil megtekintése
[Leírás] sscanf és zcmd
« Válasz #3 Dátum: 2012. Május 09. - 11:02:18 »
0
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!

[Leírás] sscanf és zcmd
« Válasz #4 Dátum: 2012. Május 09. - 16:22:28 »
0
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 *******

[Leírás] sscanf és zcmd
« Válasz #5 Dátum: 2012. Május 09. - 20:03:50 »
0
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.

[Leírás] sscanf és zcmd
« Válasz #6 Dátum: 2012. Május 09. - 20:35:03 »
0
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).

[Leírás] sscanf és zcmd
« Válasz #7 Dátum: 2012. Május 09. - 22:17:32 »
0
Ezt vágom.. De a kérdésre még nem kaptam választ. :D

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
[Leírás] sscanf és zcmd
« Válasz #8 Dátum: 2012. Május 10. - 06:46:17 »
0
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.

[Leírás] sscanf és zcmd
« Válasz #9 Dátum: 2012. Május 10. - 06:50:12 »
0
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.

[Leírás] sscanf és zcmd
« Válasz #10 Dátum: 2012. Május 10. - 16:25:20 »
0
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

[Leírás] sscanf és zcmd
« Válasz #11 Dátum: 2012. Május 11. - 14:11:56 »
0
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

[Leírás] sscanf és zcmd
« Válasz #12 Dátum: 2012. Május 11. - 16:14:23 »
0
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.

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
[Leírás] sscanf és zcmd
« Válasz #13 Dátum: 2012. Május 11. - 17:42:49 »
0
Én a sscanf használatátt nem értettem nagyon jól de mostmár elégé vágóm!

Nem elérhető Gabor..

  • 1883
  • Gabor..
    • Profil megtekintése
[Leírás] sscanf és zcmd
« Válasz #14 Dátum: 2012. Május 11. - 19:52:15 »
0
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
« Utoljára szerkesztve: 2012. Május 11. - 19:54:27 írta Gabor.. »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal