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.
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ť
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ť.
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 . 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á
else if(test == 2)
sa to podobá na druhú formu, lenže druhá tam nemá to if(...) čiže iba
Pripojený hráč
Tiež som tu otom spravil návod.
Len by som dodal, je na vás či budete používať
Ešte by som chcel uľahčiť prácu s cyklamy (a odľahčiť CPU)
Hore medzi new dáme
Toto je dúfam všetko.
S pozdravom
QWER
[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
- 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 . 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){
..
}
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();
}
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);
}}
- 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;
- kód:
if(playerid > Players){
Players = playerid;
}
- kód:
if(Playerid == Players){
Players--;
}
Toto je dúfam všetko.
S pozdravom
QWER