Preskočiť navigáciu

Pre jednoduchú ukážku ako získavať hodnoty s argumentu konzolového príkazu si napíšeme amxx plugin, ktorý bude mat za úlohu kicknúť hráča so serveru.

celkový zdrojový kód:

#include <amxmodx> public plugin_init(){ register_plugin("ConKick","0.1","null") register_concmd("con_kick","kick_player",ADMIN_KICK," kicknutie uzivatela") } public kick_player(id){ if(!(get_user_flags(id)&ADMIN_KICK)){ console_print(id,"[AMXX] Na vykonanie prikazu nemate opravnenie") return PLUGIN_HANDLED } if(read_argc() == 0){ console_print(id,"[AMXX] Musite zadat ID uzivatela") return PLUGIN_HANDLED } new user[32], uid read_argv(1,user,32) uid = find_player("bh",user) if(uid == 0){ console_print(id,"[AMXX] Nespravne uzivatelske ID") return PLUGIN_HANDLED } client_cmd(uid,"echo Bol si kicknuty so serveru!") client_cmd(uid,"disconnect") console_print(id,"Kicknutie hraca!") return PLUGIN_HANDLED }

vysvetlenie jednotlivých častí zdrojového kódu:

#include <amxmodx>

Prvý riadok zahŕňa súbor nazývaný amxmodx.inc, ktorý obsahuje základné príkazy pre prácu s hráčom, a je používaný skoro pri všetkých pluginoch.

public plugin_init(){
    register_plugin("ConKick","0.1","null")
    register_concmd("con_kick","kick_player",ADMIN_KICK," kicknutie uzivatela")
}

Funkcia register_plugin povie hlavné informácie amxx modulu o našom plugine, a to názov, verziu a autora. túto časť zahŕňa drvivá väčšina pluginov od tých malých až po tie najprepracovanejšie čo sa zdrojového kódu týka.

Funkcia register_concmd povie amxx modulu, že sme vytvorili nový príkaz nazvaný “con_kick”, ktorý bude volat funkciu “kick_player” ked klient použije tento príkaz v konzoli. Je tu tiež použitý základná konštanta pre zistenie prístupového práva (ADMIN_KICK) pre vykonanie tohto príkazu na servery.

public kick_player(id){

Tento riadok zdrojového kódu bude použitý pri volaní (použití) príkazu con_kick. Premenná ID reprezentuje číso hráča. Číslo je v rozpätí 1-32, reprezentujúce počet slotov na servery. Číslo hráča zistíme konzolovým príkazom status na servery.

    if(!(get_user_flags(id)&ADMIN_KICK)){
        console_print(id,"[AMXX] Na vykonanie prikazu nemate opravnenie")
        return PLUGIN_HANDLED
    }

Táto časť zdrojového kódu slúži na overenie či daný užívatel (hráč) má prístupové práva k vykonaniu nášho príkazu na servery. Ak užívateľ nemá požadované prístupové oprávnenie plugin mu vypíše konzolovú správu v tvare “[AMXX] Na vykonanie prikazu nemate opravnenie” a plugin vráti návratovú hodnotu PLUGIN_HANDLED, ktorý zastaví daľšie vykonanie príkazu(ov).

    if(read_argc() == 0){
        console_print(id,"[AMXX] Musite zadat ID uzivatela")
        return PLUGIN_HANDLED
    }

V nasledujúcej časti kódu overujeme počet zadaných argumentov príkazu, ktorý sme zadávali do konzole. Ak neuvedieme žiadny argument plugin nám vypíše konzolovú správu [AMXX] Musite zadat ID uzivatela a vráti návratovu hodnotu PLUGIN_HANDLED.

    new user[32], uid
    read_argv(1,user,32)
    uid = find_player("bh",user)

V nasledujucich riadkoch si vytvoríme nové premenné user typu pole o maximálnej veľkosti 32 a premennú uid. Funkcia read_argv nám poslúži na prečítanie prvého argumentu pri zadávaní príkazu, parametre tejto funkcie sú zvyčajne 3:

  1. počet argumentov použitých v danom príkaze
  2. premenná do ktorej sa nám uloží hodnota zadaného argumentu
  3. maximalna dĺžka zadaného reťazca argumente

V ďaľšom kroku sa nám uloží do premennej uid id užívateľa, ktorého funkcia find_player hľadá podla mena vo šetkých pripojených užívatelov okrem bot(ov) a tych, ktorych meno obsahuje časť mena (funkcia vracia celé číslo pri zhode celé číslo reprezentujúce id užívatela na servery, ak výsledok hľadania je false vráti nulu).

   if(uid == 0){
        console_print(id,"[AMXX] Nespravne uzivatelske ID")
        return PLUGIN_HANDLED
    }

Overíme si či sme podľa zadaného mena v argumente nášho príkazu zadali správny názov (nick) užívatela, ak premenná uid obsahuje nulu znamená to, že daný užívateľ na servery nieje pripojený, alebo došlo k zadaniu nesprávneho nicku užívateľa.

    client_cmd(uid,"echo Bol si kicknuty so serveru!")
    client_cmd(uid,"disconnect")

Funkcia client_cmd slúži na vykonanie príkazu na strane pripojeného užívatela (hráča). V našom prípade ju využijeme na vykonanie dvoch príkazov a to:

  1. na strane klienta vypíšeme konzolovú správu “Bol si kicknuty so server!”
  2. a pre vykonanie príkazu disconnect, ktorý spôsobý na strane klienta odpojenie so serveru
    console_print(id,"Kicknutie hraca!")
    return PLUGIN_HANDLED
}

Funkcia console_print vypíše konzolovú správu len tomu užívatelovi, ktorý zadal náš príkaz (použil konzolový príkaz, ktory sme napísali v našom plugine).

Na koniec vrátime návratovú hodnotu PLUGIN_HANDLED, ktorá nám ukončí celý beh pluginu.

Reklamy

Pridaj komentár

Zadajte svoje údaje, alebo kliknite na ikonu pre prihlásenie:

WordPress.com Logo

Na komentovanie používate váš WordPress.com účet. Odhlásiť sa /  Zmeniť )

Google+ photo

Na komentovanie používate váš Google+ účet. Odhlásiť sa /  Zmeniť )

Twitter picture

Na komentovanie používate váš Twitter účet. Odhlásiť sa /  Zmeniť )

Facebook photo

Na komentovanie používate váš Facebook účet. Odhlásiť sa /  Zmeniť )

Connecting to %s

%d bloggers like this: