Jump to content

[Tutoria] Miscorare AMX


LeonardPWN

Recommended Posts

Salutare tuturor, eu sunt Leonard si astazi vreau sa va impartasesc si voua niste metode pentru a miscora dimensiunea .AMX-ului.

Hai sa trecem la treaba...

* Mai intai, sa vedem ce este AMX-ul

(?) AMX-ul este un fisier care dupa compilare acesta stocheaza toate variabilele (goale). 
    Inca nu ai inteles? Hai sa-ti dau si un exemplu.

    Daca adaugi o noua variabila:

    new
        string[MAX_PLAYERS][256]
    ;

    Atunci gamemode-ul tau mananca deja 250KB (Adica acesti KB ii adauga la fisierul AMX). Cum vine asta, pai inmulteste 500 de jucatori cu 256 (caracterele definite la string-ul anterior) si 4 caractere. (Adica din tot string-ul acela de 256 noi folosim doar 4 caractere), eh, aici intervine a 4-a metoda de micsorare a AMX-ului, dar asta o sa discutam putin mai incolo.

    Exista cateva metode de micosare a dimensiunii AMX-ului (astea sunt doar cateva din zecile de metode):

    Metoda 1) Folosirea parametrului MAX_PLAYERS.

    (Q) Stai, cum? Daca folosesc MAX_PLAYERS mi se mareste AMX-ul? Cum?
    (A) Raspunsul este da, se mareste foarte mult, de ce? Pentru ca atunci cand noi folosim parametrul MAX_PLAYERS, acesta parcurge 1000 de jucatori, iar daca noi avem doar 50 de playeri (aici ma refer la 50 de sloturi pline), nu avem nevoie de MAX_PLAYERS care are 1000 de jucatori default.

    (Q) Si cum putem rezolva asta?
    (A) Pai foarte easy, hai sa-ti arat:

    Stergi vechicul "define" si adaugi unul nou cu jucatorii pe care ii are server-ul tau. (aici ma refer la sloturile maxime pe care le ai pe server)

    Exemplu:

    #undef      MAX_PLAYERS                  -> Stergi vechicul "define".
    #define     MAX_PLAYERS        50        -> Adaugi un nou define.

    (Q) Ce este acel 50?
    (A) Acel "50" reprezinta numarul maxim de jucator pe care server-ul tau il suporta. (aici ma refer la sloturi)

    A fost greu? Pai vezi :)

    Metoda 2) PVarurile:

    (Q) Ce? PVarurile maresc dimensiunea AMX-ului?
    (A) Din nefericire, da.

    (Q) Si cum pot repara asta?
    (A) Foarte simplu, folosesti PVar-uri doar cand este nevoie, nu prin tot gamemode-ul.

    Metoda 3) Array-urile:

    (Q) Hai ca p'asta n-o mai cred,  array-urile maresc dimensiunea AMX-ului, sa mori tu?
    (A) Yep, acestea maresc cel mai mult AMX-ul.

    (Q) I-a zi mestere, cum rezolv asta?
    (A) Pai, ce pot sa zic, este destul de usor, hai sa-ti explic:

    Verifica dimensiunea tuturor array-urile pe care le ai in gamemode, de ce? Pentru ca este posibil sa fi folosit niste valori uriase pentru niste amarate de array-uri.

    Metoda 4) String-urile:

    (Q) Du-te dracu', pe asta chiar ca n-o mai cred, cum asa?
    (A) Daca-mi aduc aminte, aici ti-am explicat la inceput ce se intampla, dar acum am sa-ti explic mai detaliat despre string-uri.

    Mai intai, hai sa aflam ce este un "string".

    (?) Un string este o variabila care stocheaza un sir de caractere. In PAWN, dimensiunea maxima a string-ului este 1024.

    (Q) Cum se foloseste un string (Corect & Incorect).

    Corect:  

 YCMD:test( playerid, params[] ) {

        new 
            string[64],                //Variabila care stocheaza un sir de caractere, in cazul nostru aceasta stocheaza doar 128 de caractere.
            nume[MAX_PLAYER_NAME]     //Variabila care stocheaza numele unui player.
        ;

        GetPlayerName( playerid, nume, sizeof nume ); //Functie care afla numele unui player.
        format( string, sizeof string, "Numele meu este %s!", nume ); //Formatam un mesaj folosit string-ul de mai sus. (%s se foloseste cand vrem sa afisam   un string, dar deja intram in altceva)
        SendClientMessage( playerid, -1, string ); //Trimitem mesaj catre player-ul care a folosit comanda.

        return 1;
    }

    Incorect:    

YCMD:test( playerid, params[] ) {

        new 
            string[256],                 //Variabila care stocheaza un sir de caractere, in cazul nostru aceasta stocheaza doar 128 de caractere.
            nume[MAX_PLAYER_NAME]         //Variabila care stocheaza numele unui player.
        ;

        GetPlayerName( playerid, nume, sizeof nume ); //Functie care afla numele unui player.
        format( string, sizeof string, "Numele meu este %s!", nume ); //Formatam un mesaj folosit string-ul de mai sus. (%s se foloseste cand vrem sa afisam un string, dar deja intram in altceva)
        SendClientMessage( playerid, -1, string ); //Trimitem mesaj catre player-ul care a folosit comanda.

        return 1;
    }    

    Multi vor spune ca "comenzile" de mai sus sunt identice, dar putini vor observa dimensiunea string-ului.

    N-ai inteles? Hai sa-ti explic mai bine.

    In prima comanda (Corecta) am folosit un string de 64 de caractere, de ce? Pentru ca avem un string foarte mic de afisat, in cazul nostru string-ul este numele unui player, 
    care nu poate fii mai mare de 64 de caractare si de asta am folosit doar 64 de caractere.

    In a II-a comanda (Incorecta) am folosit un string de 256 de caractere. Acum, multi vor spune "Si ce?", pai, de ce sa folosim un string de 256 de caractere cand noi trebuie sa 
    afisam doar un nume de maxim 64 de caractere? Ha? :) Eh, si aici intervine ce v-am spus eu printre primele randuri

    "Atunci gamemode-ul tau mananca deja 250KB (Adica acesti KB ii adauga la fisierul AMX). Cum vine asta, pai inmulteste 500 de jucatori cu 256 (caracterele definite la string-ul anterior) si 4 caractere. (Adica din tot string-ul acela de 256 noi folosim doar 4 caractere), 
    eh, aici intervine a 4-a metoda de micsorare a AMX-ului, dar asta o sa discutam putin mai incolo."

    Cam atat am avut sa va spun, sper ca majoritatea ati inteles ce am explicat eu mai sus.

    Informatii:

    1. Procesor de comenzi folosit: YCMD (http://forum.sa-mp.com/showthread.php?t=571047)
    2. Acest tutorial a fost scris de la 0 de catre mine. (Rog "copiatorii" sa se abtina de-al copia si al posta pe alte comunitati de scripting, macar daca faceti asta, pastrati creditele)
    3. Ma scuzati daca gasiti greseli gramaticale, am scris repede si na..
    4. Nu stiu daca m-am exprimat bine in unele locuri.

    Copyright © 2018 Leonard. All rights reserved.

  • Thanks 1
  • Upvote 1
Link to comment
Share on other sites

Frumos. Felicitari pentru acest tutorial. Ai un thanks de la mine. <3

                     

  Serverul meu de Discord: Click aici       a7DfKP7.gif                                                                      FGIfknL.gif

k35T5Nb.png                                                                                                                                                                                                                                                                                                I0aS856.gif

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.