Szerző Téma: Második lecke - Bevezetés a Zcmd-be és az Sscanfba  (Megtekintve 3692 alkalommal)

Nem elérhető Olie

  • 892
  • Roleplay Õrült
    • Profil megtekintése
Második lecke - Bevezetés a Zcmd-be és az Sscanfba
« Dátum: 2012. szeptember 27. - 09:18:43 »
+1 Show voters
Tanóra anyaga: Bevezetés a Zcmd-be és az Sscanf-ba
Szükséges Pluginok/Includeok: Zcmd parancsfeldolgozó és Y_Less sscanf2 pluginja, valamint az sscanf2 include.


Sziasztok!
Zcmd és Sscanf!
Egy kezdõ Scripternek ijesztõen hangozhat ez a két szavacska, pedig ha sikerül megérteni õket, pofonegyszerû tud lenni :)
A Mód elejére felírjuk a szükséges Includeokat:
 

#include  <a_samp>     // A függvénykönyvtárunk, ami mindenhova kötelezõ
#include  <zcmd>     // A \"zcmd\" amely tartalmazza a parancsfeldolgozót
#include <sscanf2>   // És az sscanf2.

 
Következõ lépés -> Parancsok létrehozása Zcmd-ben.
Többféleképpen lehet:
 

CMD:
COMMAND:
command:

 
Szóval, akkor nézzük meg egy parancs elejét.
Én mindenhol a \"CMD\" Rövidítést használom, de ti természetesen használhattok mást is! :)
 

CMD:parancs(playerid, params[])

 
Egyszerûbben néz ki, mint az strcmp, és egyszerûbb is.
Különszedve a részei:
\"CMD\" -> Ezzel fejezzük ki a pawnonak, hogy Zcmd-t használunk.
\"parancs\" -> A Parancs neve. A Játékos ezt fogja beírni \"per\" jellel. (/parancs)
\"playerid\" -> A Játékos, aki beírta a parancsot.
\"params[]\" -> A Parancs paraméterei
Szóval, akkor csináljunk egy parancsot, és kezdjünk vele bele az sscanf rejtelmeibe is :)
 

CMD:kick(playerid, params[])
{
    new aldozat, indok[24], string[125], JatekosNev[24], AdminNev[24]; // Létrehozzuk a változókat
    if(IsPlayerAdmin(playerid)) // Megkérdezzük, hogy Rcon admin-e.
    {
        if(sscanf(params, \"us[24]\", aldozat, indok)) return SendClientMessage(playerid,0x0FFF,\"Használat: /kick id indok\");
        else if(aldozat == INVALID_PLAYER_ID) return SendClientMessage(playerid,0x0FFF,\"Nem Online\");
        else
        {
            GetPlayerName(aldozat, JatekosNev, sizeof(JatekosNev));
            GetPlayerName(playerid, AdminNev, sizeof(AdminNev));
            format(string, sizeof(string), \"%s kirúgta a %s(%d) nevû játékost. Indok: %s\", AdminNev, JatekosNev, aldozat, indok);
            SendClientMessageToAll(0x0FFF, string);
            Kick(aldozat); // Kickeljük az áldozatot
        }
    }
    else return SendClientMessage(playerid, 0x0FFF, \"Nem használhatod\"); // Ha nem Rcon admin, nem engedjük használni
    return 1;
}

 
Bõvebben:
aldozat: A Parancs egyik paramétere
indok: Szintén a parancs egyik paramétere
string: Létrehozunk egy stringet, amit a késõbbiekben használtunk a parancs során
JatekosNev: A bannolt játékos neve
AdminNev: A Bannoló admin neve
Nézzük ezt a sort:
 

if(sscanf(params, \"us[24]\", aldozat, indok)) return SendClientMessage(playerid,0x0FFF,\"Használat: /kick id indok\");

 
Ebben a részben sscanfot használunk, hogy kifejtsük a parancs paramétereit.
Az \"u\" kifejezi, hogy a parancsban szereplõ elsõ paraméter egy Játékos neve, vagy id-je lesz.
A Következõ karakter az \"s\". Kifejezi, hogy egy String következik.
Ezek után változókat láthattok. Késõbb láthattok egy visszatérést. Ha a Paraméterek nem lettek megadva, vagy hibásan lettek megadva, akkor ez lép érvénybe.
Ennyi lett volna. Ugye nem is volt nehéz? :)
« Utoljára szerkesztve: 2012. szeptember 30. - 13:58:10 írta Olie »

Második lecke - Bevezetés a Zcmd-be és az Sscanfba
« Válasz #1 Dátum: 2012. szeptember 29. - 17:06:29 »
0 Show voters
Szerintem ez mozgatható :)

Nem elérhető Olie

  • 892
  • Roleplay Õrült
    • Profil megtekintése
Második lecke - Bevezetés a Zcmd-be és az Sscanfba
« Válasz #2 Dátum: 2012. szeptember 30. - 14:00:16 »
0 Show voters
Kirakva :)

Nem elérhető ChrisJ

  • 1022
  • Nindzsa
    • Profil megtekintése
Második lecke - Bevezetés a Zcmd-be és az Sscanfba
« Válasz #3 Dátum: 2012. szeptember 30. - 18:24:49 »
0 Show voters
Egy hülye kérdés mielõtt elkezdeném, ezt ugyanabba a fájlba írjam mint az elõzõ leckét, vagy egy új .pwn-be?

Második lecke - Bevezetés a Zcmd-be és az Sscanfba
« Válasz #4 Dátum: 2012. szeptember 30. - 21:10:24 »
0 Show voters
Idézetet írta: Yamazaki date=1349022289\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"28009\" data-ipsquote-contentclass=\"forums_Topic
Egy hülye kérdés mielõtt elkezdeném, ezt ugyanabba a fájlba írjam mint az elõzõ leckét, vagy egy új .pwn-be?
 
Ez csupán magyarázat, hogy a késõbbiekben ne kelljen egyenként hivatkozni rá.

Nem elérhető JBauer

  • 1407
    • Profil megtekintése
Második lecke - Bevezetés a Zcmd-be és az Sscanfba
« Válasz #5 Dátum: 2012. október 01. - 16:31:10 »
0 Show voters
Többféleképpen lehet:

    CMD:
    COMMAND:
    command:

 
Szóval, akkor nézzük meg egy parancs elejét.
[/quote]
4. módszer: command(parancs, playerid, params[])
5. módszer: cmd(parancs, playerid, params[])
Bár ezek \"régi\" megoldások de ezeket is lehet használni.

Második lecke - Bevezetés a Zcmd-be és az Sscanfba
« Válasz #6 Dátum: 2012. október 01. - 19:09:23 »
0 Show voters
Idézetet írta: JBauer date=1349101870\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"28009\" data-ipsquote-contentclass=\"forums_Topic

Többféleképpen lehet:

    CMD:
    COMMAND:
    command:

 
Szóval, akkor nézzük meg egy parancs elejét.
4. módszer: command(parancs, playerid, params[])
5. módszer: cmd(parancs, playerid, params[])
Bár ezek \"régi\" megoldások de ezeket is lehet használni.
 
[/quote]
pont ezt akartam leírni.


Szép, bár ezt a sok else if, illetve else elágazást feleslegesnek találom.

Második lecke - Bevezetés a Zcmd-be és az Sscanfba
« Válasz #7 Dátum: 2012. október 02. - 17:48:19 »
0 Show voters
Idézetet írta: TengeriMalac date=1349111363\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"28009\" data-ipsquote-contentclass=\"forums_Topic
Szép, bár ezt a sok else if, illetve else elágazást feleslegesnek találom.
 
Jha, én is.
Most vagy else if vagy return mindenhova, ahova kell. De a kettõ együtt, mi a l*f*s*n*k?
Most vagy így:
 
CMD:kick(playerid, params[])
{
new
aldozat,
indok[24],
string[128],
JatekosNev[24],
AdminNev[24];
if(IsPlayerAdmin(playerid)) // Megkérdezzük, hogy Rcon admin-e.
{
if(sscanf(params, \"us[24]\", aldozat, indok)) SendClientMessage(playerid,0x0FFF,\"Használat: /kick id indok\");
else if(aldozat == INVALID_PLAYER_ID) SendClientMessage(playerid,0x0FFF,\"Nem Online\");
else
{
   GetPlayerName(aldozat, JatekosNev, sizeof(JatekosNev));
   GetPlayerName(playerid, AdminNev, sizeof(AdminNev));
   format(string, sizeof(string), \"%s kirúgta a %s(%d) nevû játékost. Indok: %s\", AdminNev, JatekosNev, aldozat, indok);
   SendClientMessageToAll(0x0FFF, string);
   Kick(aldozat); // Kickeljük az áldozatot
}
}
else SendClientMessage(playerid, 0x0FFF, \"Nem használhatod\"); // Ha nem Rcon admin, nem engedjük használni
return 1;
}

 
vagy így:
 
CMD:kick(playerid, params[])
{
new
aldozat,
indok[24],
string[128],
JatekosNev[24],
AdminNev[24];
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0x0FFF, \"Nem használhatod\"); // Megkérdezzük, hogy Rcon admin-e. // Ha nem Rcon admin, nem engedjük használni
if(sscanf(params, \"us[24]\", aldozat, indok)) return SendClientMessage(playerid,0x0FFF,\"Használat: /kick id indok\");
if(aldozat == INVALID_PLAYER_ID) return SendClientMessage(playerid,0x0FFF,\"Nem Online\");
GetPlayerName(aldozat, JatekosNev, sizeof(JatekosNev));
GetPlayerName(playerid, AdminNev, sizeof(AdminNev));
format(string, sizeof(string), \"%s kirúgta a %s(%d) nevû játékost. Indok: %s\", AdminNev, JatekosNev, aldozat, indok);
SendClientMessageToAll(0x0FFF, string);
Kick(aldozat); // Kickeljük az áldozatot
return 1;
}

 
Tehát vagy (if else if), vagy (if és return), nem (if else if return) kombináció.
Még lehetne mit variálni, de elég ennyi.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal