Szerző Téma: sscanf alparancsok  (Megtekintve 1370 alkalommal)

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
sscanf alparancsok
« Dátum: 2012. június 11. - 17:59:46 »
0 Show voters
Sziasztok!
Azt szeretném megtudni,hogy zcmd,sscanf használatával,hogy lehet az alábbit megoldani:
/bszef megnéz
/bszef kivesz [mennyiség]
Az érdekelne,hogy 1 parancson belül,hogy lehet azt megoldani,hogy a megnéz után ne kérjen 2. paramétert és a kivesznél kérjen?
Köszönöm a segítséget :D

Nem elérhető Pedró

  • 3341
  • 2014 © Az év Szkriptere
    • Profil megtekintése
sscanf alparancsok
« Válasz #1 Dátum: 2012. június 11. - 18:18:46 »
0 Show voters
CMD:bszef(playerid, params[]) {
new lehetoseg[64], mennyi;
if(sscanf(params, \"sI\", lehetoseg, mennyi)) return SEndClientMessage(playerid, -1, \"Használat: /bszef [megnéz/kivesz] [mennyiség (kivesz esetén)]\");
if(!strcmp(lehetoseg, \"megnéz\")) {
SendClientMessage(playerid, -1, \"megnézed..\");
}
else if(strcmp(lehetoseg, \"kivesz\")) {
new szoveg[128];
format(szoveg, 128, \"Kivettél %i mennyiségû pénzt..\", mennyi);
SendClientMessage(playerid, -1, szoveg);
}
else{
return SendClientMessage(playerid, -1, \"Használat: /bszef [megnéz/kivesz] [mennyiség (kivesz esetén)]\");
}
return 1;
}

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
sscanf alparancsok
« Válasz #2 Dátum: 2012. június 11. - 18:22:13 »
0 Show voters
Szóval ha nagy betûs változó típus a megoldás?

Nem elérhető Pedró

  • 3341
  • 2014 © Az év Szkriptere
    • Profil megtekintése
sscanf alparancsok
« Válasz #3 Dátum: 2012. június 11. - 18:25:07 »
0 Show voters
az csak annyit tud, hogy nem kötelezõ beírni
szal ha beírod hogy /bszef megnéz
akkor nem írja hogy írd be a mennyiséget is
:D:D
itt a lehetõség paraméteren van a hangsúly, meg az strcmp-n amivel lekérdezed hogy mi a lehetõség paraméter értéke..

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
sscanf alparancsok
« Válasz #4 Dátum: 2012. június 11. - 19:22:59 »
0 Show voters
Hát nekem így sem megy.
http://pastebin.com/fmvENYkv
/c4 lerak-nál is kiírja a használatát.
És a /c4 osszerak 10 parancsnál,azt írja,hogy nincs nálam elég robbanótöltet,pedig van.

Nem elérhető Pedró

  • 3341
  • 2014 © Az év Szkriptere
    • Profil megtekintése
sscanf alparancsok
« Válasz #5 Dátum: 2012. június 11. - 19:30:51 »
0 Show voters
sscanfben:
\"s[128]I(0)\"

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
sscanf alparancsok
« Válasz #6 Dátum: 2012. június 11. - 19:33:31 »
0 Show voters
nem jó

Nem elérhető Pedró

  • 3341
  • 2014 © Az év Szkriptere
    • Profil megtekintése
sscanf alparancsok
« Válasz #7 Dátum: 2012. június 11. - 19:38:07 »
0 Show voters
hm fogalmam sincs, printeld ki hogy mennyi a mennyiség ami neki van, meg hogy menyit írt be...
printf(\"amennyi nála van: %i | amennyit beírt: i\", JatekosInfo[playerid][Robbanot], mennyit);

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
sscanf alparancsok
« Válasz #8 Dátum: 2012. június 11. - 21:21:30 »
0 Show voters
if(sscanf(params,\"s[128]d\",mit,mennyit)) return SendClientMessage(playerid,SZURKE,\"Használat: /c4 [mit] [mennyit(osszerak esetén)\");

 
Így mûködõképes,de a /c4 lerak-nál is kell vmilyen számot írnom. :S

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
sscanf alparancsok
« Válasz #9 Dátum: 2012. június 15. - 15:41:56 »
0 Show voters
if(sscanf(params,\"s[128]I\",mit,mennyit)) return SendClientMessage(playerid,SZURKE,\"Használat: /c4 [mit] [mennyit(osszerak esetén)\");

 
jelenleg ilyen,de minden alparancsnál kér 2. változót.

Nem elérhető Casamiro

  • 1046
    • Profil megtekintése
sscanf alparancsok
« Válasz #10 Dátum: 2012. június 15. - 19:09:09 »
0 Show voters
Adj neki alapból -1 értéket.
 
if(sscanf(params,\"s[128]I(-1)\",mit,mennyit)) return SendClientMessage(playerid,SZURKE,\"Használat: /c4 [mit] [mennyit(osszerak esetén)\");

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
sscanf alparancsok
« Válasz #11 Dátum: 2012. június 15. - 19:27:40 »
0 Show voters
Úgy sem jó,már próbáltam.

Dupla hozzászólás automatikusan összefûzve. ( 2012. június 17. - 10:05:03 )

Ha külön csinálok \"CMD:szef megnez\"-et és \"CMD:szef kivesz [mennyit]\",akkor a két parancs nem fog egymásnak bezavarni?
« Utoljára szerkesztve: 2012. június 17. - 10:05:03 írta tudvari »

sscanf alparancsok
« Válasz #12 Dátum: 2012. június 17. - 10:12:24 »
0 Show voters
Idézetet írta: tudvari date=1339781260\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"22728\" data-ipsquote-contentclass=\"forums_Topic
Úgy sem jó,már próbáltam.

Dupla hozzászólás automatikusan összefûzve. ( 2012. június 17. - 10:05:03 )

Ha külön csinálok \"CMD:szef megnez\"-et és \"CMD:szef kivesz [mennyit]\",akkor a két parancs nem fog egymásnak bezavarni?
 
Kétszer létrehozott cmd_szef lesz és emiatt reklamál a pawn fordító.
A megoldást leírták korábban.
 

Adj neki alapból -1 értéket.
 
if(sscanf(params,\"s[128]I(-1)\",mit,mennyit)) return SendClientMessage(playerid,SZURKE,\"Használat: /c4 [mit] [mennyit(osszerak esetén)\");

 

[/quote]
Írd le pontosan mit szeretnél.

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
sscanf alparancsok
« Válasz #13 Dátum: 2012. június 17. - 10:14:08 »
0 Show voters
Ezt akartam,és nem volt jó úgy,ahogy leírták.De PM-ben leírtad az utána következõ (mit == -1) sort,amit most tesztelek,de nagy eséllyel,így már jó lesz.
UPDATE:
http://pastebin.com/W1atZMNd
Így néz ki a parancs.HA beírom,hogy /c4 lerak akkor kiírja a parancs használatát.
Ha beírom,hogy /c4 lerak [szám] akkor meg nem ír ki semmit.(mert írtam be számot,így nem jut el az strcmp(mit,\"lerak\") részhez.
Megadtam,hogy a 2. paraméter opcionális legyen,de mégis kiírja a használatát,ha nem írok be valamit a helyére.
« Utoljára szerkesztve: 2012. június 17. - 10:20:01 írta tudvari »

sscanf alparancsok
« Válasz #14 Dátum: 2012. június 17. - 10:19:07 »
0 Show voters
Most logikus hogy ha nem kell megadni egy parancs második paraméterét akkor sscanf-nél annak alapértéke lesz, jelen esetben mínusz egy (-1). (de ezt meglehet változtatni de ez az érték megfelel a célnak)
 
I(-1)

 
EDIT:
Megnéztem a pastebin-re feltett parancsot, de nem jó a parancs felépítése nem lehet átlátni mi minek van.
Megpróbálom átláthatóbbra tenni de tesztelni nem tudom majd megteszed te, meg javítod a hibákat.
EDIT2:
Szóval nem tudom hogy megfelelõen mûködik vagy sem, csak kicsit átrendeztem átláthatóbbá, próbáld így folytatni, hátha megkönnyíti a dolgod.
 
CMD:c4(playerid, params[])
{
if(Belepve[playerid] != 0)                                          SendClientMessage(playerid, HIBA, \"Be kell jelentkezned!\");
else if(JatekosInfo[playerid][Megkotozve] && JatekosInfo[playerid][Megbilincselve])    SendClientMessage(playerid, HIBA, \"Meg vagy kötözve/bilincselve!\");
else if(CsinalVmit[playerid])                                          SendClientMessage(playerid, HIBA, \"Már csinálsz valamit!\");
else if(JatekosInfo[playerid][borton] && JatekosInfo[playerid][AdminBorton])      SendClientMessage(playerid, HIBA, \"Börtönben?\");
else
{
new
   string[256],
   kocsi = GetPlayerVehicleID(playerid),
   mit[50],
   mennyit;
if(sscanf(params,\"s[50]D(-1)\", mit, mennyit)) return SendClientMessage(playerid, SZURKE, \"Használat: /c4 [mit] [mennyit(osszerak esetén)\");
{
   GetPlayerName(playerid, nev, sizeof(nev));
//--------------
   if(strcmp(mit, \"lerak\", true) == 0)
   {
      if(JatekosInfo[playerid][C4] == 0) SendClientMessage(playerid, HIBA, \"Nincs nálad C4!\");
      else
      {
         if(kocsi)
         {
            C4Kocsiban[playerid] = kocsi;
            format(string,sizeof(string),\"%s felszerel egy C4-et egy jármûbe...\",nev);
            ProxDetector(20.0, playerid, string, LILA, LILA, LILA, LILA, LILA);
            format(string,sizeof(string),\"%s felszerel egy C4-et egy jármûbe.(%d)\",nev,kocsi);
            printf(string);
         } else {
            ApplyAnimation(playerid, \"BOMBER\",\"BOM_Plant_Loop\",4.0,1,0,0,1,0);
            format(string,sizeof(string),\"%s lerak egy C4-et...\",nev);
            ProxDetector(20.0, playerid, string, LILA, LILA, LILA, LILA, LILA);
         }
         tc4[playerid] = SetTimerEx(\"c4szereles\",10000,false,\"i\",playerid);
         CsinalVmit[playerid] = 1;
         TogglePlayerControllable(playerid,false);
      }
      return 1; // /c4 lerak parancs vége
   }
//--------------
   if(strcmp(mit, \"vesz\", true) == 0)
   {
      if(!IsPlayerInRangeOfPoint(playerid, 2.5, 2696.9028, -2316.6418, 3.1963))       SendClientMessage(playerid, HIBA, \"Nem vagy a kikötõnél!\");
      else if(Hajo == 0)                                              SendClientMessage(playerid, HIBA, \"A hajó nem érkezett meg a kikötõbe!\");
      else if(JatekosInfo[playerid][Penz] < 350000)                            SendClientMessage(playerid, HIBA, \"Nincs nálad elég pénz!(350000 Ft)\");
      else if((JatekosInfo[playerid][MaxTeher] - JatekosInfo[playerid][Teher]) < 1000) SendClientMessage(playerid, HIBA, \"Nem fér el nálad! (1 kg)\");
      else
      {
         JatekosInfo[playerid][Penz] -= 350000;
         JatekosInfo[playerid][Teher] += 1000;
         JatekosInfo[playerid][Robbanot] ++;
         SendClientMessage(playerid,SIKERES,\"Vettél egy kg C4-et!\");
         GameTextForPlayer(playerid, \"~r~-350k\", 5000, 1);
         format(string,sizeof(string),\"%s vett egy kg C4-et.\",nev);
         AdminnakUzenet(VNARANCS,string,1);
      }
      return 1;  // /c4 vesz parancs vége
   }
//--------------
   if(strcmp(mit,\"aktival\",true) == 0)
   {
      if(C4Lerakva[playerid] == 0) SendClientMessage(playerid, HIBA, \"Nem raktál le C4-et!\");
      else
      {
         if(C4Kocsiban[playerid] == 0)
         {
            CreateExplosion(C4x[playerid], C4y[playerid], C4z[playerid], 7, 50);
            C4Lerakva[playerid] = 0;
            C4x[playerid] = 0.000000;
            C4y[playerid] = 0.000000;
            C4z[playerid] = 0.000000;
            format(string,sizeof(string),\"%s felrobbantott egy C4-et.\",nev);
            ProxDetector(20.0, playerid, string, LILA, LILA, LILA, LILA, LILA);
            AdminnakUzenet(VNARANCS,string,1);
            SendClientMessage(playerid,SIKERES,\"Sikeresen felrobbantottad a C4-et!\");
            DestroyObject(C4Object[playerid]);
         } else {
            new Float:x, Float:y, Float:z;
            GetVehiclePos(kocsi, x, y, z);
            CreateExplosion(x, y, z, 7, 50);
            C4Kocsiban[playerid] = 0;
            C4Lerakva[playerid] = 0;
            format(string,sizeof(string),\"%s felrobbantott egy C4-et.\",nev);
            ProxDetector(20.0, playerid, string, LILA, LILA, LILA, LILA, LILA);
            format(string,sizeof(string),\"%s felrobbantott egy C4-et.(%d)\",nev,kocsi);
            AdminnakUzenet(VNARANCS,string,1);
            SendClientMessage(playerid,SIKERES,\"Sikeresen felrobbantottad a C4-et!\");
         }
      }
      return 1;   // /c4 vesz parancs vége
   }
//--------------
   if(strcmp(mit, \"osszerak\", true) == 0)
   {
      if(mennyit == -1 || JatekosInfo[playerid][Robbanot] >= mennyit) SendClientMessage(playerid, HIBA, \"Nincs elég robbanótölteted!\");
      else if(JatekosInfo[playerid][Radiovevo] == 0 && JatekosInfo[playerid][Ragasztosz] == 0) SendClientMessage(playerid, HIBA, \"Nincs nálad ragasztószalag/rádióvevõ!\");
      else if(CsinalVmit[playerid] == 1) SendClientMessage(playerid, HIBA, \"Már csinálsz valamit!\");
      else if(JatekosInfo[playerid][C4] > 0) SendClientMessage(playerid, HIBA, \"Már van nálad C4!\");
      else
      {
         new
            ido = mennyit * 5000;
         TogglePlayerControllable(playerid,false);
         tC4Osszerak[playerid] = SetTimerEx(\"c4osszerak\",ido,false,\"ii\",playerid,mennyit);
         CsinalVmit[playerid] = 1;
         SendClientMessage(playerid, NARANCS, \"Elkezdted összerakni a C4-et...\");
         format(string,sizeof(string),\"%s elkezdett valamit összeragasztani...\",GetPlayerNameEx(playerid));
         ProxDetector(20.0, playerid, string, LILA, LILA, LILA, LILA, LILA);
      }
      return 1;   // /c4 osszerak parancs vége
   }
}
}
return 1;
}

 
Ilyen fajta elrendezéssel könnyebb kiismerni mi mire való, és a módosítása is sokkal könnyebb.
« Utoljára szerkesztve: 2012. június 17. - 23:02:55 írta ɐʞzssǝlosz »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal