Would you like to react to this message? Create an account in a few clicks or log in to continue.

2 posters

    Optimalizácia

    avatar
    QWER
    Znalec


    Posts : 60
    Join date : 28.04.2011

    Optimalizácia Empty Optimalizácia

    Odoslať pre QWER Št apríl 28, 2011 8:35 am

    Už z názvu sa dá pochopiť že dnešná téma bude o optimalizácii serveru. Už tu jednu optimalizáciu mám, ale je to tá minimálna a zaoberá sa iba odľahčenie RAM-ky. Samotný návod pozostáva z dvoch sekcii a to optimalizácia RAM & optimalizácia CPU. Dúfam že si každý nájde to, čo tu hľadal.

    [size=150]RAM[/size]

    Ovlivnujeme Počet Premien
    Aj vy používate v premenách MAX_PLAYERS ?
    Skončite s tým ! 500 Hráčov na servery nebudete mať v živote, a preto je dobré spraviť
    kód:

    #undef MAX_PLAYERS
    #define MAX_PLAYERS 50 //počet slotov
    alebo
    kód:
    #define MAX_PLAYERS_EX 50//počet slotov

    pretože keď máte
    new a[MAX_PLAYERS];
    Vytvorí 500 premien (každá zaberá 32 bitov, čiže 500*32)
    a
    new a[MAX_PLAYERS_EX];
    Vytvorí 50 premien (čo je dosť veľký rozdiel)

    Používame booly B
    Bool zaberá 1 bit, čo obyčajná premena (ako som spomínal, tí pozornejší vedia) 32 bitov, čo je dosť veľký rozdiel. Narozdiel bool od obyčajnej premeny má iba 2 hodnoty a to true alebo false. Bool sa dá využiť všade, npr. pri AFK, alebo pri jednoduchom admin systéme (iba jeden level). Využití je veľa.

    PVary
    Áno, boli sme z ných na mäkko. Teraz zmäkli oni.
    PVary majú výhodu že oni sa zmažú, keď sa hráč odpojí. Normálna premena pre hráča ostane, ostane dokonca aj jeho hodnota (ak ju v OnPlayerDisconnect nevynulujete). U obyčajnej premeny sa vytvorí aj keď hráč nieje na servery. Bitový pomer by mal biť pravdepodobne rovnaký (32) pretože tiež tie hodnoty musí niekam zapísať.

    [size=150]CPU[/size]

    Timery
    U timeroch je veľká chyba dať dva a viac timerov z rovnakým časom. Pretože keď sa zapne server, žačne sa odpočítavať a všetky tie scripty sa spustia v tú istú sekundu a vtedy môže server lagovať. Preto treba timerom dávať niake ms navyše/menej Wink. Ale o timeroch nechcem nič písať, na to som tu spravil osobitní návod.

    Podmienky
    Neviem prečo ľudia nevyužívajú (alebo nevedia) else !
    sú dve možnosti ako využiť else npr.
    prvá
    kód:

    krátka forma
    new test = random(5);
    if(test == 0) ...
    else if(test == 1) ..
    else if(test == 2)...

    dlhá forma
    if(test == 0){
    ..
    }c{

    }else if(test == 2){
    ..
    }     
    presne v tomto bode
    else if(test == 2)
    sa to podobá na druhú formu, lenže druhá tam nemá to if(...) čiže iba
    kód:

    krátka forma
    new test = random(5);
    if(test == 0) VypnutServer();
    else BanAll();

    dlhá forma
    if(test == 0){
    VypnutServer();
    }else{
    BanAll();
    }
    To je celý zázrak

    Pripojený hráč
    Tiež som tu otom spravil návod.
    Len by som dodal, je na vás či budete používať
    kód:

    DOBRE
    stock a(playerid){
    if(IsPlayerConnected(playerid)) return 0;
    }

    stock b(playerid){
    if(IsPlayerConnected(playerid)) return 0;
    }
    a potom cyklus
    for(new i; i < GetMaxPlayers(); i++){
    a(i);
    b(i);
    }
    ZLE

    stock a(playerid){
    if(IsPlayerConnected(playerid)) return 0;
    }

    stock b(playerid){
    if(IsPlayerConnected(playerid)) return 0;
    }
    a potom cyklus
    for(new i; i < GetMaxPlayers(); i++){
    if(IsPlayerConnected(i){
    a(i);
    b(i);
    }}
    alebo
    kód:

    DOBRE
    stock a(playerid){
    ...
    }

    stock b(playerid){
    ...
    }
    a potom cyklus
    for(new i; i < GetMaxPlayers(); i++){
    if(IsPlayerConnected(i){
    a(i);
    b(i);
    }}

    ZLE

    stock a(playerid){
    if(IsPlayerConnected(playerid)) return 0;
    }

    stock b(playerid){
    if(IsPlayerConnected(playerid)) return 0;
    }
    a potom cyklus
    for(new i; i < GetMaxPlayers(); i++){
    if(IsPlayerConnected(i){
    a(i);
    b(i);
    }}

    Ešte by som chcel uľahčiť prácu s cyklamy (a odľahčiť CPU)
    Hore medzi new dáme
    kód:
    new Players = -1;
    do OnPlayerConnect dáme
    kód:
    if(playerid > Players){
    Players = playerid;
    }
    a OnPlayerDisconnect dáme
    kód:
    if(Playerid == Players){
    Players--;
    }

    Toto je dúfam všetko.
    S pozdravom
    QWER
    ylleron
    ylleron
    Admin


    Posts : 82
    Join date : 26.04.2011

    Optimalizácia Empty Re: Optimalizácia

    Odoslať pre ylleron Št apríl 28, 2011 8:38 am

    Tak toto je uz o niecom inom chlapci Very Happy. Optimalizáciu využijem aj ja Wink
    avatar
    QWER
    Znalec


    Posts : 60
    Join date : 28.04.2011

    Optimalizácia Empty Re: Optimalizácia

    Odoslať pre QWER Št apríl 28, 2011 8:42 am

    a na konci som zabudol, potom iba
    for(new i; i < Players+1;i++){
    SetPlayerHealth(i,100);
    }
    ukážka použitia... to +1 nezabnudnite pridávať, alebo vám spravím stock

    #define ForPlayers(%0) for(new %0; %0<Players+1; %0++)

    a potom
    ForPlayers(i){
    Kick(i);
    }


    Sponsored content


    Optimalizácia Empty Re: Optimalizácia

    Odoslať pre Sponsored content


      Práve je So november 23, 2024 1:56 am