neXt! CoMMunITy

Bine Ati Venit !

Va Rugam Sa :

- Va Inregistrati .
- Sa Respectati Regulamentul .
- Sa Aveti O Activitate Buna .
- Sa Aveti Un Comportament Civilizat .
- Si In Special Sa Stiti Ce Este Acela Un Forum .

Mai Sunt Si Alte Lucruri , Dar Lasam Asta Pe Mai Tarziu .

Cu Respect ,

neXt! CoMMuNITy

    [Tutorial] Inceput

    Distribuiţi
    DieSeL
    DieSeL
    Global Moderator
    Global Moderator

    Numarul mesajelor : 477
    Data de inscriere : 12/08/2009

    [Tutorial] Inceput

    Mesaj Scris de DieSeL la data de Sam Aug 29, 2009 2:08 am

    **************************************************
    **************************************************

    AUTOR : ANNAKIN

    IMPORTANT DE STIUT :
    -
    In Pawn / amxx se foloseste in cele mai multe cazuri "{" (acolade);
    intre acolade se pun mai multe functii dorite. Daca aveti doar o
    functie acoladele nu mai sunt necesare. Pentru citirea mai usoara, dupa
    o acolada se va pune un spatiu folosind tasta TAB.

    - Un plugin este format din public-uri si stock-uri:
    public - poate fi folosit doar in pluginul respectiv[/*]
    stock - poate fi folosit si in alte pluginuri; se pune de obicei intr-un fisier in amxmodx/scripting/include[/*]
    Pentru inceput invatam public-uri
    - La sfaristul unei linii, declarari se pune de obicei caracterul ;
    - Se pot adauga si comentarii care nu afecteaza compilarea pluginului

    Pt. comentariu de linie : // comentariu[/*]
    2. Pt. comentarii mai lungi sau taiere de linie : /*comentariu*/[/*]

    **************************************************
    **************************************************


    1.Totul incepe prin includerea fisierelor care contin functii, necesare pentru a crea pluginul.
    Forma generala:

    Code:
    #include <fisier>


    Fisierele sunt citite din amxmodx/scripting/include
    In cazul nostru vom facem un plugin pentru amxmodx.Deci vom scrie asa:

    Code:
    #include <amxmodx>


    Mai
    jos vom face un plugin care executa o comanda asupra unui jucator.Acest
    fisier contine functii utile, care ne vor ajuta in plugin:

    Code:
    #include <amxmisc>


    Mai sunt si alte includuri pentru pluginuri mai complexe.Deocamdata lasam asa.

    2. Apoi urmeaza faza de inregistrare a pluginului.Aceasta se face in felul urmator:

    - public-ul este plugin_init :

    Code:
    public plugin_init()
    {
    }


    - inregistrarea se face in felul urmator:

    Code:
    register_plugin("nume plugin","versiune","autor");


    Si am obtinut:

    Code:
    public plugin_init()
    {
    register_plugin("nume plugin","versiune","autor");
    }


    3.
    Urmatoarea faza este construirea comenzilor(de exemplu vreti sa faceti
    o comanda amx_retry prin care sa reconectati un jucator dorit)
    Vom scrie asa in register plugin_init() mai jos de
    Forma generala:

    Code:
    register_concmd("comanda","public",acces,"comentariu (optional)");


    * comanda -> comanda voastra : amx_retry
    * public -> puneti ce vreti,este un public(pote fi scris orice,care va fi folosit mai jos)
    * accessul
    -> un admin trebuie sa aiba accesul specificat pentru a putea folosi
    comanda . Acesta ese sub forma: ADMIN_SLAY,ADMIN_KICK,ADMIN_BAN,etc..
    * comenatariu -> este clar (va aparea in consola cand dati amx_help)

    In cazul nostru va arata asa :

    Code:
    register_concmd("amx_retry","retry_cmd",ADMIN_KICK,"- reconnect a player")


    4. Urmatorul pas este publicul(cel care lati pus la register_concmd)
    In cazul nostru va fi asa:

    Code:
    public retry_cmd(id,level,cid)


    * id - este "index"-ul...puteti pune ce vreti,dar de preferat este sa lasati asa,sa nu va incurcati,deoarece va fi folosit mai jos
    * level,cid - corespund comenzii create...ne vor ajuta sa verificam daca jucatorul are acces la comanda.

    5. In continuare,in public,vom folosi o functia care "se va asigura" ca nu oricine poate folosi comanda creeata.
    Forma generala:

    Code:
    cmd_access(id,level,cid,num)


    * num
    - numarul argumentelor din consola, primul fiind comanda. Deci, in
    cazul nostru vom avea num-ul 2, deoarece comanda este amx_retry jucator.
    Deci, vom avea asa:

    if(!cmd_access(id,level,cid,2))

    * if - 'daca'...este o functie care verifica cea ce ati scris, si 'vede' daca este asa.
    * ! - opusul comenzii, deci daca nu are acces
    Acum ca am verificat daca jucatorul are sau nu acces la comanda, blocam operatia:

    Code:
    return PLUGIN_HANDLED


    - "block further operation" - blocheaza operatia
    - return - valoare de 'intoarcere'
    Si am obtinut:

    Code:
    if(!cmd_access(id,level,cid,2))
    return PLUGIN_HANDLED;


    Alta valoare de intoarcere:

    Code:
    return PLUGIN_CONTINUE


    - "continue with normal operation" - continua cu operatia normala
    6. Urmeaza citirea argumentelor din consola :

    Code:
    new arg[32]*


    new - este inceputul unei variabile prin care creati ce vreti
    *
    32 - se numeste "len" sau "length".Este un numar ce trebuie pun unelor
    variabile intre [] pentru stabilirea "lungimi" sirului de elemente. In
    cazul numelui este 31, in variabila se pune cu 1 in plus, deoarece se
    incepe de la 0.

    Argumentul se citeste prin comanda :

    read_argv(num,arg,len)

    * num - al catelea argument din consola
    * arg - variabila care va fi folosita mai departe
    * len - lungimea sirului de caractere

    Si avem:

    Code:
    read_argv(1,arg,31)


    - va citi primu argument scris dupa comanda.
    Sunt 3 tipuri de citire a argumentelor
    *read_argv - citeste un singur argument
    *read_args - citeste toate argumentele dintr-o linie
    *read_argc - citeste numarul de argumente dintr-o linie

    7. In continuare se creeaza o variabila la alegere care va fi egalata cu o functie.Sa zicem "player" :

    new player = cmd_target(id,arg,flag)

    *cmd_target - functie necesara pentru a executa o comanda asupra unui jucator
    *arg - argumentul din consola
    *flag - este un numar :

    Code:
    1 - evita imunitatea
    2 - poti executa asupra ta
    4 - trebuie sa fie in viata
    8 - nu poate fi bot


    Daca
    tu vrei 2 "optiuni" flagurile se aduna...sa zicem sa evite imunitatea
    si sa nu poate fi bot in acelasi timp,deci vom avea asa :

    new player = cmd_target(id,arg,9)

    8. Apoi verificam daca jucatorul specificat in consola exista :

    if(!player)
    return PLUGIN_HANDLED9


    Si la final, comanda :

    client_cmd(index,"comanda")

    *index - asupra carui jucator se executa comanda
    *comanda - comanda ce va fi trimisa in consola jucatorului si executata in acelasi timp.
    Deci vom avea asa :

    client_cmd(player,"reconnect")

    10. Daca vreti sa trimiteti un mesaj jucatorilor.
    Forma generala:

    client_print(index,type,"mesaj");

    * index - cui i se trimite mesajul, 0 - toti jucatorii
    * type - unde este trimis:

    Code:
    print_chat -> mesajul este afisat in chat
    print_console -> mesajul este afisat in consola
    print_center -> mesajul este afisat in centru ecranului
    print_notify -> mesajul este afisat in consola putin diferit


    Si avem:

    Code:
    client_print(0,print_chat,"Un jucator a fost reconectat!");

    Daca vreti sa trimiteti si numele adminului respectiv al jucatorului, trebuie mai intai sa aflam numele acestora.
    Forma generala:
    Code:
    new variabila[len];
    get_user_name(index,variabila,len-1);


    Deci, avem asa....vom crea 2 variabila, una pentru admin si alta pentru jucator:

    Code:
    new adminname[32],playername[32];
    get_user_name(id,adminname,31); // pentru admin
    get_user_name(player,playername,31); // pentru jucator


    Apoi, trebuie sa stiti ca:

    %s - string,sir de caractere
    %d, %i - 'decimal integer' -- pentru numere
    %c - caracter, pentru un singur caracter, litera,etc...


    Deci noi vom folosi %s:

    client_print(0,print_chat,"Admin %s: l-a reconectat pe %s",adminname,playername);

    - tot ce este la sfarsit, dupa , sunt informatii ce vor fi introduse in mesaj, inlocuid %s,%d,etc...

    Si apoi valuare de intoarcere de final,in cazul nostru :

    Code:
    return PLUGIN_HANDLED;


    Daca ati urmarit pasi de mai sus ar trebui sa aveti ceva de genu :

    Code:
    /*This plugin was made by An[n]akin <3 H.s !
    * With this plugin you will able to reconnect a specified player !
    * Command : amx_retry player
    * Have Fun !
    */
    #include <amxmodx>
    #include <amxmisc>

    public plugin_init()
    {
    register_plugin("Reconnect Player","1.0","anakin_cstrike");
    register_concmd("amx_retry","retry_cmd",ADMIN_KICK,"- <jucator>");
    }
    public retry_cmd(id,level,cid)
    {
    if(!cmd_access(id,level,cid,2))
    return PLUGIN_HANDLED;
    new arg[32];
    read_argv(1,arg,31);

    new player = cmd_target(id,arg,9);
    if(!player) return PLUGIN_HANDLED;
    new adminname[32],playername[32];
    get_user_name(id,adminname,31);
    get_user_name(player,playername,31);

    client_cmd(player,"reconnect"); // aceasta este comanda
    client_print(0,print_chat,"Admin %s: l-a reconectat pe %s",adminname,playername);
    return PLUGIN_HANDLED;
    }

      Acum este: Joi Ian 24, 2019 5:52 am