Jump to content

návod Jak odlehčit mód a optimalizovat streamery [***]


ATomas

Recommended Posts

Jak odlehčit mód a optimalizovat streamery


Obtížnost: award_star_gold_2.pngaward_star_gold_2.pngaward_star_gold_2.pngaward_star_silver_2.pngaward_star_silver_2.png

cau takze jak sem slibil ukazu vam par triku jak odlehcit mod jak RAM tak CPU
vim ze ty co s pawnem zacinaji tak zatez neresi staraji se o to aby to fungovalo jak chteji i kdyz v jejich pripade je to jedno jejich mody sou maly takze se ta zatez ani neprojevi

Obsah
[*:r9bjqh7a] Odlehčujeme RAM
[*:r9bjqh7a] Odlehčujeme CPU
Odlehčujeme RAM
takze nejdrive jak odlehcit RAM
asi jak uz znate stary zmany trik se MAX_PLAYERS_EX samozdreejmne si pojmenujete jak chcete
v includu s_samp je MAX_PLAYERS 500 pro 500 slotovy server tak pochybuju ze budete mit 500 lidi na serveru zbytecne zrani RAM v promenych

#define MAX_PLAYERS_EX 100//pozor sem si zapocitejte jak pocet slotu nebo hratelnost + pocet botu na serveru
a nini pouziti
new promena[MAX_PLAYERS];
new promena[MAX_PLAYERS_EX];
coz je vlastne
new promena[500];
new promena[100];
i kdyz si rikaze usetrili jsme jenom 400 ale kdyz to pouzijete u vsech promenych tak se toho usetri hodne
ale pozor na toto
new romena[100][50];
tady se pocet promenych nasobi takze vlastne mate 5000 coz je hodne takovymto promenych se skuse vyhybat nebo nelpeje omezit na co nejmenci cisla

to bylo jak odlehcit RAM teď vam ukazu jak odlehcit CPU

Odlehčujeme CPU
takze na CPU ma nejvetsi zatez cyklus for a timery spise SetTimerEx normalni SetTimer ani moc nezatezuje odesila pouze public zadne paramtery ale SetTimerEx ano

takze kdyz mate treba
SetTimer("Vezeni",1000,1);

public Vezeni()
{
for(new i;i {
if(IsPlayerConnected(i))
{
if(!IsPayerNPC(i))//kdyz neni hrac NPC je dobre toto pouzivat vsude kde vyte ze neni npc spise nejlepe na cely public nez u jednotlivych akci
{
if(Cas[i] > 0) Cas[i] -- ;
}
}
}
return 1;
}
je lepsi pouzit
SetTimerEx("Vezeni",1000,1,"i",playerid);

public Vezeni(playerid)
{
Cas[playerid] -- ;
return 1;
}
a zase kdyz mate jeden public a tam hodne akci je dobre ho zase rozlozit do dvou publicu a dvou timeru ale poroz na timery aby se vam nepotkavaly
SetTimer("neco",5000,1);
SetTimer("neco2",5000,1);
chyba!
takto je to spravne
SetTimer("neco",5000,1);
SetTimer("neco2",5010,1);
takto se vam mozna potkaji ale az za hodne dlouho coz nebude mit takovou zatez protoze se akce rozlozi a nebudou se muset vykonavat najednou

dale jedno z nejhorsich veci co muzete udelat je mit cyklus for ve for treba takto
for(new i;i
toto je jedno z nejhorsich veci co muzete udelat casto se toto pouziva u streameru dva cykly for v sobe ukazu vam jak se tomu ve streamerech vyvarovat
takze treba icon streamer
mate treba ikonky: AddMapIcon
a mate jich treba 100 po cele mape
takze si muzete rozdelit mapu na 4 dily takto:
stock JihoVychod(playerid)
{
new Float:xls, Float:yls, Float:zls;
GetPlayerPos(playerid, xls, yls, zls);
if(xls > 0)
{
if(yls < 0) return 1;
}//tady si vsimnete nez abych pouzil if(xls < 0 && yls < 0) e lepsi takto rozepsat slozene podminky take pridelavaji zatez..
return 0;
}

stock SeveroZapad(playerid)
{
new Float:xls, Float:yls, Float:zls;
GetPlayerPos(playerid, xls, yls, zls);
if(xls < 0)
{
if(yls > 0) return 1;
}
return 0;
}

stock JihoZapad(playerid)
{
new Float:xls, Float:yls, Float:zls;
GetPlayerPos(playerid, xls, yls, zls);
if(xls < 0)
{
if(yls < 0) return 1;
}
return 0;
}

stock ServeroVychod(playerid)
{
new Float:xls, Float:yls, Float:zls;
GetPlayerPos(playerid, xls, yls, zls);
if(xls > 0)
{
if(yls > 0) return 1;
}
return 0;
}

dale si rozselite ikonky do 4 stocku ci publicu podle souradnic
IkonkySeveroZapad x zaporne y kladne
IkonkyJihoZapad x zaporne y zaporne
IkonkySeveroVychod x kaldne y kladne
IkonkyJihVychod x kladne y zaporne

SetPlayerMapicon...

a potom pouzijete v timeru
public MultiTimer()
{
for(new i=0;i
ale pozor maximalne muze mit pouze 32 ikonek v oblasti na jake sme si rozdelily pokud tam budete mit vice musite si zase rozdelit pokud se vam upraveni icon streameru nedari napiste mi PM
nejak podobne jde udelat i object streamer pomoci
stock IsPlayerInArea(playerid, Float:minx1, Float:maxx1, Float:miny1, Float:maxy1)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
if (x > minx1 && x < maxx1 && y > miny1 && y < maxy1) return 1;
return 0;
}
potom si vyhranicite oblast je je ten zhluk objetku (nejaky ostrov nebo co mate)
+ este radius do okoli aby se to nezobrazilo na posleni chvili
a zase ho timetu jestli je v oblati zobrazit objekty a nastavime promenou aby sme vedely ze uz tam je a nastavime promenou kolik objektu ma hrac zobrazeno aby sme vedeli kolik jich mu mame schvoat az zonu opusti

dale treba u CZproperty
for(new i=0;i
takto nejak v OnPlayerPickUpPickup tady zjistujeme pokud je v nemovistosti ale my vime ze muze byt pouze v jedne nemuze byt ve dvouch zaroven tak az zjistime ze stoji v nejake z nich pouzijeme return 1; jako zmaneni ze hledanou nemovitost sme nasli a neni potreba dale hledat
takto:
for(new i=0;i
dale priklad treba:
public OnPlayerEnterVehicle(playerid,vehicleid,ispassenger)
{
if(ispassenger == 0)
{
if(GetVehicleModel(vehicleid) == 553 ||//nedava
GetVehicleModel(vehicleid) == 519 ||//shamal
GetVehicleModel(vehicleid) == 520 ||//hydra
GetVehicleModel(vehicleid) == 592 ||//andromada
GetVehicleModel(vehicleid) == 487 ||//maverick
GetVehicleModel(vehicleid) == 447 ||//seasperow
GetVehicleModel(vehicleid) == 497 ||//policemavetrick
GetVehicleModel(vehicleid) == 425)//hunter
{
//akce
}
}
return 1;
}
sice na ukor RAM ale zase to nebude zrat tolik je lepsi pouzit
public OnPlayerEnterVehicle(playerid,vehicleid,ispassenger)
{
if(ispassenger == 0)
{
new a = GetVehicleModel(vehicleid);
if(a == 553 ||//nedava
a == 519 ||//shamal
a == 520 ||//hydra
a == 592 ||//andromada
a == 487 ||//maverick
a == 447 ||//seasperow
a == 497 ||//policemavetrick
a == 425)//hunter
//zde uz jezjistujeme do nekonecna v jakej je aute my proste vime v jakej je a akroat porovnavame
{
//akce
}
}
return 1;
}
sou to ve smes malicosty ale kdyz se podle toho zaridite muzete usetrit cpu a ram o hodne
mozna sem na neco zapomel kdyz tam casem pridam..;p++)
;i++)
;p++)
;i++)
;i++)
;i++)>;i++)
;i++)>
 

Návod upraven tak, aby odpovídal šabloně pro "Nové návody"

 

 

Návod označen jako platný

Ten to návod byl označen jako platný.Návod může být kdykoli označen jako nevhodný či neplatný

Link to comment
Share on other sites

  • 1 year later...
new romena[100][50];

tady se pocet promenych nasobi takze vlastne mate 5000 coz je hodne takovymto promenych se skuse vyhybat nebo nelpeje omezit na co nejmenci cisla

abych pravdu rekl je to 5151 moznosti .. 5000 je nepresnej vypocet :) .. nepocital jsi moznosti romena[0-100][0-50] ale romena[1-100][1-50] ( 51*101 )

Link to comment
Share on other sites

  • 2 weeks later...

i když je to docela staré téma, tak to sem pisnu

 

Našel jsem chybu

 

if(Cas[i] > 0) Cas[playerid] -- ;

 

nemá to být takto?

if(Cas[i] > 0) Cas[i] -- ;

Link to comment
Share on other sites

  • 4 months later...

Dneska som to skúšal. Mód má teraz o 800 kB menej!!! Predtým mal 1,6 MB a boli lagy na servery. Dal som MAX_PLAYERS na 100 a MAX_SLOT na 20 lebo viac ludí by tam aj tak nebolo. Pred touto optimalizáciou bol priemerný ping serveru 55-70, teraz je 1-25 to je neuveriteľné!!! Máš u mňa +

 

:v:8-)

Link to comment
Share on other sites

new romena[100][50];

tady se pocet promenych nasobi takze vlastne mate 5000 coz je hodne takovymto promenych se skuse vyhybat nebo nelpeje omezit na co nejmenci cisla

abych pravdu rekl je to 5151 moznosti .. 5000 je nepresnej vypocet :) .. nepocital jsi moznosti romena[0-100][0-50] ale romena[1-100][1-50] ( 51*101 )

akorat ze kdyz mas promenou s kapacitou 50 tak mas 0,1,2,3 ... 49 a promena 50 uz neexistuje

Link to comment
Share on other sites

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...