Szerző Téma: Többtagú parancsok  (Megtekintve 1205 alkalommal)

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Többtagú parancsok
« Dátum: 2011. december 30. - 22:38:16 »
0 Show voters
Sziasztok,most egy hosszabb dologban kérném segítségeteket.
Valaki elmagyarázná,hogy hogyan épülnek fel/hogy kell írni többtagú parancsot?  (Azért nyitok új témát,mert nem tudtam,hogy keressek rá)
Többtagú alatt azt értem hogy a parancs után meg kell adni bizonyos dolgokat.
Nagyon hálás lennék,ha valaki röviden elmondaná,hogy kell ilyen parancsokat készíteni.
Vegyünk alapul egy egyszerû parancsot:
Megváltoztatni egy játékos HP-ját.
/sethp id/név hp
Remélem érthetõ voltam,és valakinek van ideje segíteni nekem :D

dexi

  • Vendég
Többtagú parancsok
« Válasz #1 Dátum: 2011. december 30. - 22:50:48 »
+1 Show voters
ZCMD+ SSCANF
^ Ezeket ajánlom az elkészítéséhez.
 
CMD:sethp(playerid,params[])
{
/*------*/
new id, health;
/*------*/
if(sscanf(params,\"ii\",id,health))return SendClientMessage(playerid,-1,\"HIBA: /sethp [Játékos ID] [Élet összeg]\");
{
if(IsPlayerAdmin(playerid)) // Ha a játékos admin.
{
SetPlayerHealth(id, health); // Beállítjuk a kívánt játékos életéta kívánt összegre.
SendClientMessage(playerid, -1, \"Beállítottad az illetõ életét.\"); // Aki beírta a parancsot annak elküldjük az üzenetet.
SendClientMessage(id, -1, \"Egy admin beállította az életed.\"); // Elküldünk egy üzenetet a kívánt játékosnak.
}
else SendClientMessage(playerid, -1, \"HIBA: Nem vagy admin.\"); // Ha a játékos nem admin.
}
return 1;
}

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Többtagú parancsok
« Válasz #2 Dátum: 2011. december 30. - 22:55:48 »
0 Show voters
Nem tudod leírni normál OnPlayerCOmmandText-ben?:D
Csak mert ha includeolom zcmd-t elrontja a többit

dexi

  • Vendég
Többtagú parancsok
« Válasz #3 Dátum: 2011. december 30. - 23:01:56 »
+1 Show voters
Ha minden igaz: OnPlayerCommandText helyett:
 

public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
if(!success)
{
SendClientMessage(playerid,-1, \"Nincs ilyen parancs!\");
}
else if(success)
{
////////////parancsaid
}
return 1;
}
« Utoljára szerkesztve: 2011. december 30. - 23:04:19 írta Fl0rian »

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Többtagú parancsok
« Válasz #4 Dátum: 2011. december 30. - 23:16:49 »
0 Show voters
köszi mindent ment a +1
egyébként nem tudod,hogy az alábbi parancsnál,hogy állítsam be,hogy ha a /bejelentés után több szót írok,szóközzel elválasztva,akkor mindet kiírja? mert jelenleg a szóköz utánit nem veszi figyelembe
pl.: /bejelentés cs mindenki
Tulaj Tudvari: cs
[pawn]
if (strcmp(\"/bejelentés\", cmdtext, true, 10) == 0)
{
       if (JatekosInfo[playerid][Admin] >= 1)
    {
       tmp = strtok(cmdtext, idx);
       if(!strlen(tmp))
      {
         SendClientMessage(playerid, SZURKE1, \"Használat: /bejelentés [szöveg]\");
         return 1;
      }
      if(strlen(tmp))
      {
          new adminszint[30];
          if (JatekosInfo[playerid][Admin] == 1) {adminszint = \"Moderátor\";}
          else if (JatekosInfo[playerid][Admin] == 2) {adminszint = \"Admin\";}
          else if (JatekosInfo[playerid][Admin] == 3) {adminszint = \"Fõadmin\";}
          else if (JatekosInfo[playerid][Admin] == 4) {adminszint = \"Tulaj\";}
              new string[256];
         //szoveg = strval(tmp);
         tmp = strtok(cmdtext, idx);
         //new nev[MAX_PLAYER_NAME];
         GetPlayerName(playerid, nev, sizeof(nev));
         format(string, sizeof(string), \"%s %s: %s\", adminszint, nev, tmp);
         SendClientMessageToAll(SIKERES, string);
         printf(\"%s\", string);
         return 1;
      }
   }
    else //if (JatekosInfo[playerid][Admin] < 0)
    {
        //new nev[MAX_PLAYER_NAME];
        GetPlayerName(playerid, nev, sizeof(nev));
        SendClientMessage(playerid, HIBA, \"Nincs jogosultságod a parancs használatához!\");
        printf(\"%s megpróbált bejelentést írni.\", nev);
        return 1;
    }
}[/pawn]
Ja és a CMD-és parancsoknál mit kell írni a return helyett,hogy ne írja ki ,hogy Unknown Command,még ha jó is a parancs?
---
Ja és ha beírom hogy /freeze 0 akkor is csa ka használati útmutatást írja ki,miért van ez?
[pawn]
CMD:freeze(playerid,params[])
{
/*------*/
new id;
/*------*/
if(sscanf(params,\"ii\",id))return SendClientMessage(playerid,HIBA,\"HIBA: /freeze [Játékos ID]\");
{
if(JatekosInfo[playerid][Admin] > 0) // Ha a játékos admin.
   {
   TogglePlayerControllable(id,0); // Beállítjuk a kívánt játékos életéta kívánt összegre.
   SendClientMessage(playerid, SIKERES, \"Lefagyasztottad a játékost.\"); // Aki beírta a parancsot annak elküldjük az üzenetet.
   SendClientMessage(id, VKEK, \"Egy admin lefagyasztott.\"); // Elküldünk egy üzenetet a kívánt játékosnak.
   }
   else SendClientMessage(playerid, HIBA, \"HIBA: Minimum 1-es szintû adminnak kell lenned!\");
    }
return 1;
}[/pawn]
Másik parancsnál,ott meg csak számot fogad el az Indok változó helyére,hogy lehet ezt átállítani?
« Utoljára szerkesztve: 2011. december 31. - 00:18:05 írta tudvari »

Nem elérhető Dead

  • 2045
    • Profil megtekintése
Többtagú parancsok
« Válasz #5 Dátum: 2011. december 31. - 07:52:34 »
0 Show voters
Tedd a nem ZCMDs parancsokat úgy ahogy Forián leírta és a CMDt tedd bárhová a módban. Decelejére kell:
 
#include <zcmd> 

dexi

  • Vendég
Többtagú parancsok
« Válasz #6 Dátum: 2011. december 31. - 10:23:22 »
+1 Show voters
if(sscanf(params,\"ii\",id))return SendClientMessage(playerid,HIBA,\"HIBA: /freeze [Játékos ID]\");

 
Itt a gond mivel te 2 db \"i\"-t raktál oda, de csak egy kell mivel csak az ID-t kérdezed le. Ugyanúgy mûködik mint a stringeknél, ha szöveg akkor s[XY] kell oda ( XY = a karakterlánc hosszával. ). törölj ki onnan egy \"i\"-t és menni fog.

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Többtagú parancsok
« Válasz #7 Dátum: 2011. december 31. - 11:06:33 »
0 Show voters
Köszi Florian :D Dead amúgy azt már Florian leírta nekem korábban :D

dexi

  • Vendég
Többtagú parancsok
« Válasz #8 Dátum: 2011. december 31. - 11:15:15 »
0 Show voters
Nincsmit, ha segítség kell akkor szólj fészen :D ( Johnie Cash )

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Többtagú parancsok
« Válasz #9 Dátum: 2011. december 31. - 11:26:19 »
0 Show voters
bejelöltelek :D
Van egy újabb problémám:
[pawn]
CMD:ban(playerid,params[])
{
/*------*/
new id, indok;
/*------*/
if(sscanf(params,\"is\",id,indok))return SendClientMessage(playerid,HIBA,\"HIBA: /ban [Játékos ID] [indok]\");
{
if(JatekosInfo[playerid][Admin] > 2) // Ha a játékos admin.
   {
   new string[256];
   new fogadonev[MAX_PLAYER_NAME];
   GetPlayerName(id,fogadonev,sizeof(fogadonev));
   GetPlayerName(playerid,nev,sizeof(nev));
   format(string,sizeof(string),\"%s ki lett tiltva %s által. Indok: %s\", fogadonev,nev,indok);
   SendClientMessageToAll(SIKERES, string);
   printf(string);
   JatekosInfo[id][bann] = 1;
   Kick(id);
   }
   else SendClientMessage(playerid, HIBA, \"HIBA: Minimum 3-es szintû adminnak kell lenned!\");
    }
return 1;
}[/pawn]
Használatkor csak annyit ír ki: ki lett tiltva [használó] által. Indok: [indok],vagyis nem jeleníti meg az célszemély nevét, nem is állítja 1-re az értéket,és nem is kickeli :S

dexi

  • Vendég
Többtagú parancsok
« Válasz #10 Dátum: 2011. december 31. - 12:31:41 »
+1 Show voters
CMD:ban(playerid,params[])
{
/*------*/
new id, indok[60];
/*------*/
if(sscanf(params,\"is[60]\",id,indok))return SendClientMessage(playerid,HIBA,\"HIBA: /ban [Játékos ID] [indok]\");
{
if(JatekosInfo[playerid][Admin] > 2) // Ha a játékos admin.
{
new string[256];
new fogadonev[MAX_PLAYER_NAME];
                new nev[MAX_PLAYER_NAME];
GetPlayerName(id,fogadonev,sizeof(fogadonev));
GetPlayerName(playerid,nev,sizeof(nev));
format(string,sizeof(string),\"%s ki lett tiltva %s által. Indok: %s\", fogadonev,nev,indok);
SendClientMessageToAll(SIKERES, string);
printf(string);
JatekosInfo[id][bann] = 1;
Kick(id);
}
else SendClientMessage(playerid, HIBA, \"HIBA: Minimum 3-es szintû adminnak kell lenned!\");
}
return 1;
}

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Többtagú parancsok
« Válasz #11 Dátum: 2011. december 31. - 12:41:42 »
0 Show voters
köszi,akkor most már tudom mik a hibáim :D
Ja és akkor még segítenél az unknown commandok kiküszöbölésére? csak mert a zcmd-s parancsoknál,minden egyes írás után oda rakja azt is,hogy unknown command,mint ha hiányozna egy return vagy stb.
Update: a ban-os parancsnál,csak unknown commandot ír ki. :S
« Utoljára szerkesztve: 2011. december 31. - 12:49:55 írta tudvari »

dexi

  • Vendég
Többtagú parancsok
« Válasz #12 Dátum: 2011. december 31. - 14:08:02 »
0 Show voters
Semmi gond nincs vele pedig. :OO.
Próbáld meg így:
 
public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
if(!success)
{
SendClientMessage(playerid,-1, \"Nincs ilyen parancs!\");
}
else if(success)
{
}
else SendClientMessage(playerid,-1, \"Nincs ilyen parancs!\");
return 1;
}

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Többtagú parancsok
« Válasz #13 Dátum: 2011. december 31. - 14:21:17 »
0 Show voters
Azzal nincs baj,de közben rájöttem mi volt a baj.
[pawn]if(sscanf(params,\"is[60]\",id,indok))return SendClientMessage(playerid,HIBA,\"HIBA: /ban [Játékos ID] [indok]\");[/pawn]
itt már nem kell az s útán a karaklterlánc hossza,ahogy te írtad.Meg átírtam 64-re.(bár az utóbbi lehet nem változtatott rajta.)
És már jó

dexi

  • Vendég
Többtagú parancsok
« Válasz #14 Dátum: 2011. december 31. - 14:23:20 »
0 Show voters
if(sscanf(params,\"is[50]\",id,ok))return SendClientMessage(playerid,RED,\"HIBA: /ban [Játékos ID] [Ok]\");

 
Az én modomban a parancsnál így néz ki és nekem megy:O. Hát nemtudom, ha úgy megy akkor nincsgond : D.
OFF: ( Gyere face-re, ott gyorsabban tudok segíteni. )

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal