hlmod.hu
https://hlmod.hu/

[TUT] Args
https://hlmod.hu/viewtopic.php?f=53&t=31329
Oldal: 1 / 1

Szerző:  Maxi [ 2022.06.15. 20:20 ]
Hozzászólás témája:  [TUT] Args

Sziasztok!

Biztosan láttátok már, hogy egy parancs által meghívott függvénynél létrehozunk egy args megnevezésű második változót(kaptam még annó PÜ-t is), most erről fogunk beszélni ugyanis elég fontosnak tartom néhány pluginnál. Egy parancs esetében megadhatunk további paramétereket, ez(ek) lenné(nek) az args változó feladata.
public Action smth(int client, int args) {}

Próbálok egy konkrét példát hozni, kezdjünk bele.

Most egy olyan plugint hozunk létre, aminek sok értelme nincs, de tökéletes arra, hogy átadjam mire is való. A következő paranccsal:
sm_parancs "Maxi" "420"

Ezt az üzenetet kapjuk vissza:
Név: Maxi || Szám + 1: 421

Parancs létrehozása

Kód:
public void OnPluginStart() {
    //Regisztráljuk a parancsot
    RegConsoleCmd("sm_parancs", fCommandParancs, "Használata: sm_parancs <név> <szám>");
}

/*
* A parancs kifejtése:
* Fontos, hogy ezek a változó nevek nem adottak, bárminek elnevezhetjük őket
* Általában viszont ezek szoktak lenni.
*/
public Action fCommandParancs(int client, int args) {
    //TODO
}


Ellenőrzés

Kód:
public Action fCommandParancs(int client, int args) {
    //Feltétel: Ha nem két paraméter van akkor >>
    if (args != 2) {
        //Válaszolunk, hogy hogyan is használja
        ReplyToCommand(client, "Használat: sm_parancs <név> <szám>");
        
        
//return
        return Plugin_Handled;
    }
}


Tárolás

Kód:
public Action fCommandParancs(int client, int args) {
    if (args != 2) {
        ReplyToCommand(client, "Használat: sm_parancs <név> <szám>");
        return Plugin_Handled;
    }
    
    
//Létrehozunk két tömböt
    //MAX_NAME_LENGTH -> Név maximális megengedett hossza (internal)
    //szamArg tetszőleges nagyságú nincs kifejezett oka annak, hogy
    //32-t használtam.
    char nevArg[MAX_NAME_LENGTH], szamArg[32];
    
    
/*
    * Belekérjük a tömbökbe a megfelelő paramétert
    * GetCmdArg(int[] paraméter száma, változó, ...)
    */
    GetCmdArg(1, nevArg, sizeof(nevArg));
    GetCmdArg(2, szamArg, sizeof(szamArg));
    
    
//Fontos: Jelenleg a szamArg még String tipusú tehát, nem tudunk vele számolni!!


Befejezés

Kód:
public Action fCommandParancs(int client, int args) {
    if (args != 2) {
        ReplyToCommand(client, "Használat: sm_parancs <név> <szám>");
        return Plugin_Handled;
    }
    char nevArg[MAX_NAME_LENGTH], szamArg[32];
    
    GetCmdArg
(1, nevArg, sizeof(nevArg));
    GetCmdArg(2, szamArg, sizeof(szamArg));
    
    
//Alakítsuk át integerré.
    //Ehhez hozzunk létre egy új változót
    int szam = StringToInt(szamArg) + 1; // Ezzel így már lehet matekozni
    
    
//Egyszerűen irassuk ki.
    ReplyToCommand(client, "Név: %s || Szám + 1: %i", nevArg, szam);
    //return
    return Plugin_Handled;
}




Teljes kód:
► Spoiler mutatása


Compiler:
► Spoiler mutatása


Remélem érthető volt, bármi kérdés van, válaszolok!

Üdv, Maxi.

Oldal: 1 / 1 Minden időpont UTC+02:00 időzóna szerinti
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/