Nu te inregistra daca esti idiot sau agramat!


AlphaCS.RO[ORIGINAL GAMING]


Thanks Thanks:  0
Likes Likes:  0
Results 1 to 5 of 5

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1

    User Info Menu

    Tutorial scripting

    Autor: KronoS # GG
    Contribuitori: -


    1. Informatii de baza

    Code:
    Pluginurile AmxModX sunt realizate folosind limbajul de programare Pawn (cunoscut ca si Small).Codul este scris intr-un editor de text (precum Notepad, Notepad++, AMXX Studio etc.) si salvat ca fisier cu extensia .sma (fisier sursa de plugin AmxModX).Acesta trebuie compilat pentru a se obtine un fisier cu extensia .amxx (pluginul in sine).
    
    Programarea pluginurilor in limbajul Pawn este relativ usoara deoarece nu exista unele notiuni care se gasesc in limbajele de programare mai avansate.


    2. Compilarea unui plugin

    Code:
    Compilarea reprezinta procesul prin care codul sursa scris intr-un limbaj de programare (in cazul nostru Small sau Pawn) este tradus in cod obiect, ce poate fi apoi executat.
    In cazul surselor de pluginuri amxmodx, compilarea se poate face online sau local (aceasta fiind metoda recomandata).Compilarea online se face accesand link-ul http://www.amxmodx.org/webcompiler.cgi .Aici puteti posta codul in casuta de text special amenajata, precum si numele care doriti sa-l atribuiti fisierului, sau, puteti selecta sursa direct din calculator.Dupa apasarea butonului Compile va incepe compilarea pluginului, urmata de link-ul de descarcare al pluginului (cu extensia .amxx) sau de erori si avertismente in cazul in care sunt gasite greseli la nivelul codului.Compilarea locala se poate face daca aveti instalat modul AmxModX in calculator.Va duceti in folderul addons/amxmodx/scripting
    si puneti acolo fisierul sursa (exemplu: plugin.sma), apoi trageti iconita acestuia peste fisierul compile.exe tinand apasat Click stanga.Astfel, o sa apara o consola ce o sa returneze erorile si avertismentele sau va informeaza ca a decurs cu succes compilarea.Pluginul compilat il gasiti in folderul addons/amxmodx/scripting/compiled
    3. Notatii si vocabular in limbajul Pawn

    Code:
    Vocabularul limbajului Pawn este format din simboluri de baza, clasificate in trei mari categorii:
    literele alfabetului englez
    cifre arabe: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
    simboluri speciale (operatori si delimitatori): . ; , : ? " ( ) [ ] { } < > ! | / _ # % & ^ + - * =
    
    Tot in categoria simbolurilor speciale se incadreaza si cuvintele rezervate, numite si cuvinte-cheie, care au un inteles bine stabilit si nu pot fi folosite de catre scripteri decat in contextul permis de catre sintaxa limbajului Pawn.Din lista cuvintelor-cheie fac parte urmatoarele: case, const, else, enum, float, for, if, return, sizeof, static, switch, while, public, iar lista poate continua.
    
    Scrierea unui plugin cu ajutorul limbajului Pawn este similara scrierii de fraze in limbaj natural.Se folosesc combinatii de cuvinte si separatori.Cuvintele pot fi:
    simboluri speciale
    identificatori obisnuiti sau predefiniti
    constante
    Separatorii se incadreaza in una din urmatoarele categorii:
    spatiu
    comentariu
    sfarsit de linie
    
    Identificatorii reprezinta modalitatea de denumire a constantelor, tipurilor de date, variabilelor si functiilor.Constantele reprezinta date ale caror valori nu se modifica pe parcursul rularii pluginului.Prin contrast, variabilele reprezinta date ale caror valori pot fi modificate.


    4. Structura unui plugin (de refacut!)

    Code:
    Un plugin AmxModX are, in principiu, urmatoarea structura:
    Directive preprocesor/de includere
    Definitii de variabile globale/constante
    Definitii de functii
    
    Directivele preprocesor/de includere reprezinta primele linii dintr-un program.Prin aceste directive compilatorul este anuntat sa foloseasca anumite biblioteci care contin descrierea unor functii folosite in plugin.Sintaxa directivei de includere este: #include < numele_bibliotecii >
    5. Includerea fisierelor/bibliotecilor

    Code:
    Un plugin AmxModX are, in principiu, urmatoarea structura:
    Directive preprocesor/de includere
    Definitii de variabile globale/constante
    Definitii de functii
    
    Directivele preprocesor/de includere reprezinta primele linii dintr-un program.Prin aceste directive compilatorul este anuntat sa foloseasca anumite biblioteci care contin descrierea unor functii folosite in plugin.Sintaxa directivei de includere este:
    #include < numele_bibliotecii >
    Includerea fisierelor/bibliotecilor

    Code:
    Includerea fisierelor/bibliotecilor se realizeaza prin doua cai:
    
    #include < fisierul >
    #include "fisierul"
    
    
    Folosind prima cale, fisierul este cautat in directorul standard (In cazul AMXX directorul standard este include).
    Folosind a doua cale, fisierul este cautat in directorul curent, apoi in cel standard (In cazul AMXX directorul curent este scripting).Aceasta forma 
    Atunci cand facem un plugin AMXX, va trebui sa includem mereu biblioteca amxmodx:
    #include < amxmodx >
    Daca pluginul contine si comenzi pentru admini, atunci va trebui sa includem si biblioteca amxmisc:
    #include < amxmisc >
    6. Comentarii
    Code:
    Daca doriti sa folositi prima forma, iar comentariul se intinde pe mai multe randuri, trebuie sa adaugati // in fata fiecarui rand de comentariu:
    // Comentariul asta
    // se intinde pe mai multe
    // randuri
    
    A doua forma este recomandata deoarece la inceputul comentariului se pune /* iar la sfarsit se pune */
    Avantajul este ca nu mai trebuie sa puneti simbolurile in fata fiecarui rand:
    
    /* Comentariul asta
    se intinde pe mai multe
    randuri */
    
    ATENTIE: Comentariile din sursa nu sunt citite de catre compilator
    7.Optimizarea consumului de memorie al variabilelor

    Code:
    Aceste lucruri sunt valabile si pentru vectori si siruri!
    Pentru ca un plugin sa consume cat mai putina memorie RAM, sunt recomandate:
    folosirea unui numar cat mai mic de variabile globale
    declararea cat mai exacta a numarului de pozitii (in cazul vectorilor si al sirurilor)(Exemplu: stocarea numelui unui jucator intr-o variabila poate ocupa maxim 32 de pozitii, de aceea variabila va fi declarata ca avand 32 de pozitii, si nu un alt numar mai mare decat valoarea recomandata)
    8. Vectori

    Code:
    Un vector este un tip simplu de date agregate.Asta inseamna ca puteti stoca multiple valori intr-o singura variabila.Un vector are aceleasi reguli si tipuri ca si o variabila normala.Diferenta intre cele doua este ca primul contine valori multiple.Un vector se defineste cu paranteze drepte, intre care se afla numarul de valori pe care acesta poate sa-l contina.
    
    new Players[ 32 ];                 // Declararea vectorului "Players" ce are 32 de pozitii
    
    Puteti stoca valori in oricare din cele 32 de pozitii ale vectorului.Pozitiile sunt numerotate de la 0 la n-1 (in cazul de mai sus 32-1, adica 31).Orice pozitie are implicit valoarea 0.
    
    Players[ 1 ] = 7;                  // Se atribuie pozitiei 1 a vectorului "Players" valoarea 7
    Players[ 2 ] = Players[ 1 ];       // Se atribuie pozitiei 2 valoarea care se afla pe pozitia 1 a vectorului
    
    // Linia de cod de mai jos este incorecta.Desi vectorul are 32 de pozitii declarate, ultima pozitie este 31, numerotarea incepand de la 0
    Players[ 32 ] = 15;
    
    // Linia de cod de mai jos este incorecte.Pozitiile sunt numerotate de la 0 in sus.
    Players[ -1 ] = 13;
    
    // Codul de mai jos este incorect deoarece a trebuie sa fie un numar constant.
    new a = 5;
    new Array[ a ]
    
    // Codul de mai jos reprezinta varianta corecta a celui de mai sus
    const a = 5;
    new Array[ a ];
    
    // Vectorii pot fi declarati cu date implicite
    new Array[ 4 ] = { 0, 1, 2, 3 };
    
    // Puteti folosi si constante simbolice
    #define POZITII 4
    new Array[ POZITII ];
    
    // Puteti folosi si celelalte doua tipuri de date: float si boolean
    new Float:numere[ 4 ] = { 0.0, 1.3, 2.5, 5.6 };
    new bool:codat[ 2 ] = { true, false };
    9. Siruri

    Code:
    Cei care au experienta probabil au remarcat ca lipseste un tip de date important, caracterele.Acestea se numesc siruri si in limbajul Pawn sunt, tehnic vorbind, numere.Un sir este un vector de numere care sunt traduse in simboluri ASCII (caractere).
    
    // Declararea sirului "SirComunitate" ce contine cuvantul ALPHACS
    // Acest sir are 10 pozitii, 9 din ele fiind reprezentate de literele ce alcatuiesc
    // cuvantul alphacs iar ultima pozitie este rezervata numarului 0, care spune
    // compilatorului ca acesta este un sir
    
    new SirComunitate[ ] = "ALphaCs";
    10. Operatori si expresii

    Code:
    Limbajul Pawn permite folosirea unui numar mare de operatori.Un operator se reprezinta cu ajutorul unuia sau a doua caractere speciale alaturate, numite operanzi (exemple: = sau != etc.).
    
    Tipuri de operatori:
    unari - folosesc un singur operand
    binari - folosesc doi operanzi
    
    O expresie este o combinatie de operanzi si operatori scrisa astfel incat, respectand regulile limbajului de programare, sa conduca la calcularea unei valori unice.La fel ca si in matematica, ordinea efectuarii operatiilor in cadrul unei expresii este stabilita de prioritatea operatorilor, care poate fi modificata prin utilizarea parantezelor rotunde pe oricat de multe niveluri este necesar.Spre deosebire de matematica, nu este permisa folosirea in expresii a parantezelor drepte sau a acoladelor pentru modificarea ordinii de efectuare a operatiilor.
    
    Atunci cand intr-o expresie apar operatori cu aceeasi prioritate, ordinea de efectuare a operatiilor este impusa de ordinea de asociere a operatorilor.In general, aceasta este de la stanga la dreapta dar exista si doua exceptii, operatorii unari si operatorii de atribuire, in cazul carora ordinea de asociere este de la dreapta la stanga.
    11. Constante simbolice

    Code:
    Definirea constantelor simbolice se face astfel:
    
    #define Numele_Constantei Valoarea_Constantei
    Acest lucru face ca in toata sursa, constanta definita mai sus sa fie inlocuita cu valoarea atribuita (exceptie comentariile).
    Scopul acestora este de a usura editarea surselor.
    Exemplu:
    #define Nume_Comunitate eXtreamCS
    12. Functia plugin_init( )

    Code:
    Functia plugin_init( ) reprezinta functia principala a pluginului, in care se inregistreaza pluginul, comenzile, eventurile folosite etc.Ea este apelata imediat dupa schimbarea hartii.
    Functia este de tip public, fara parametrii si se declara astfel:
    
    public plugin_init( )
    Last edited by Mihai.!?; 06-02-17 at 14:39. Reason: uppppp

Similar Threads

  1. Replies: 0
    Last Post: 17-12-16, 20:00
  2. Replies: 0
    Last Post: 17-12-16, 19:59
  3. Replies: 0
    Last Post: 17-12-16, 19:58
  4. Replies: 0
    Last Post: 23-11-16, 21:08
  5. Replies: 0
    Last Post: 23-10-15, 18:27

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •