Právě je úte 22. kvě 2012 10:23:55
Hosting WEDOS.cz
SLEVA 25% (slevový kód:PAWNO25)

Nejnovější témata:
[HELP] NHL 09 od MajkX
[Hlasovanie] Pridanie teamov do PICH od MajkX
[Ms 2012] NHL 2009 Remake od MajkX
[ HELP ]NPC od UpiR
[HELP]Hackovanie servera od kazlik

Vyzkoušejte antivirus ESET Smart Security 5

Vyhledat témata bez odpovědí | Zobrazit aktivní témata Zobrazit nové příspěvky | Zobrazit vaše příspěvky


Všechny časy jsou v UTC + 1 hodina [ Letní čas ]





Odeslat nové téma Odpovědět na téma  [ Příspěvků: 12 ] 
Autor Zpráva
PříspěvekNapsal: ned 22. lis 2009 11:14:11 
Frank Tempenny
Frank Tempenny
Registrován: sob 10. led 2009 22:02:03
Příspěvky: 1614

Jak odlehčit mód a optimalizovat streamery


Obtížnost: ObrázekObrázekObrázekObrázekObrázek

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
  • Odlehčujeme RAM
  • 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
Kód:
#define MAX_PLAYERS_EX     100//pozor sem si zapocitejte jak pocet slotu nebo hratelnost + pocet botu na serveru

a nini pouziti
Kód:
new promena[MAX_PLAYERS];
new promena[MAX_PLAYERS_EX];

coz je vlastne
Kód:
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
Kód:
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
Kód:
SetTimer("Vezeni",1000,1);

public Vezeni()
{
   for(new i;i<MAX_PLAYERS_EX;i++)//zde si vsimnete MAX_PLAYERS_EX zase tim usetrite spoustu akci nez kdyby jste pouzivaly MAX_PLAYERS a zase o 400 akci
   {
       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
Kód:
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
Kód:
SetTimer("neco",5000,1);
SetTimer("neco2",5000,1);

chyba!
takto je to spravne
Kód:
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
Kód:
for(new i;i<MAX_PLAYERS_EX;i++)
{
   for(new i;i<MAX_VEHICLES_EX;i++)//tady zase stejnam spusobem jako MAX_PLAYERS prejmenujeme MAX_VEHICLES_EX a zase udame nejpresnejsi pocet vozidel , v extremu to muze byt 500*2000 coz je 1 000 000 akci coz je opravdu hodne hodne moc sice si rikaze ze kdyz neni hrac pripojen ale pawno musi skontrolovat i tu podminku jestli je pripojen
   {
       //akce
   }
}

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:
Kód:
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
Kód:
public MultiTimer()
{
    for(new i=0;i<MAX_PLAYERS_EX;i++)
   {
      if(IsPlayerConnected(i))
      {
          if(SeveroZapad(i)) IkonkySeveroZapad(i);
          else if(JihoZapad(i)) IkonkyJihoZapad(i);
          else if(SeveroVychod(i)) IkonkySeveroVychod(i);
          else if(JihVychod(i)) IkonkyJihVychod(i);
          //zde si zase vsimnete privni je if a dalsi else if coz znamena ze kdyz nebyla splnena podminka pred nebude kontrolovat dalsi toto se pouziva dyz mate hodne podminek a vite ze se muze splnovat jenom jedna
      }
   }
   return 1;
}

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
Kód:
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
Kód:
for(new i=0;i<MAX_PLAYERS;i++)
{
   if(IsPlayerConnected(i))
   {
      for(new p=0;p<PropertyCount;p++)
        {
           if(PlayerToPoint(1.8,i,Property[p][prop_pos_x],Property[p][prop_pos_y],Property[p][prop_pos_z]))
         {
            if(PropertyMenu[i] == false) {TogglePlayerControllable(i, false); ShowMenuForPlayer(PropertyBuyMenu, i); PropertyMenu[i] = true; }
            new string[250];
            format(string, 250,"~r~%s~n~Cena: ~w~%d$~n~~r~Majitel: ~w~%s",Property[p][prop_name],Property[p][prop_cost],Property[p][prop_ownername]);
                GameTextForPlayer(i,string,5000,1);
         }
        }
     }
}

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:
Kód:
for(new i=0;i<MAX_PLAYERS;i++)
{
   if(IsPlayerConnected(i))
   {
      for(new p=0;p<PropertyCount;p++)
        {
           if(PlayerToPoint(1.8,i,Property[p][prop_pos_x],Property[p][prop_pos_y],Property[p][prop_pos_z]))
         {
            if(PropertyMenu[i] == false) {TogglePlayerControllable(i, false); ShowMenuForPlayer(PropertyBuyMenu, i); PropertyMenu[i] = true; }
            new string[250];
            format(string, 250,"~r~%s~n~Cena: ~w~%d$~n~~r~Majitel: ~w~%s",Property[p][prop_name],Property[p][prop_cost],Property[p][prop_ownername]);
                GameTextForPlayer(i,string,5000,1);
            return 1;//zde jsme pridaly
         }
        }
     }
}

dale priklad treba:
Kód:
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
Kód:
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..

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

_________________
Poděkujte :
Daffymu za ukradení a zveřejnění rze6, rze7, rze7.3, rze7.4
Luk_assovi za cracknuti rze7.3 rze7.4 rze8
Crispemu za to že to luk_assovi zaplatil. A zveřejnil cracklou rze8
cz_dominik007 za to že zveřejnil craknutou rze7.3 rze7.4
Získání rze8 zatím neni úplně jasné bylo to z přestupu z cpor.eu na (stary) xel.cz

play.superparba.eu:7777
http://www.superparba.eu


Naposledy upravil ATomas dne ned 22. kvě 2011 19:26:21, celkově upraveno 3

Offline
 Profil  
PříspěvekNapsal: ned 22. lis 2009 11:17:02 
Marc Wayne "B-Dup"
Marc Wayne "B-Dup"
Uživatelský avatar
Registrován: čtv 08. říj 2009 16:36:48
Příspěvky: 847

Výborne,určite využiem nice TuT ;)


Offline
 Profil  
PříspěvekNapsal: ned 22. lis 2009 12:35:26 
Kendall Johnson "Kendl"
Kendall Johnson "Kendl"
Uživatelský avatar
Registrován: úte 24. bře 2009 14:16:39
Příspěvky: 2873
Bydliště: Továrna na marmeželádu / Sklad bagrů

Hned na zacatku mas chybu.. Mas tam MAX_PLAYERID_EX pritom tam ma byt MAX_PLAYERS_EX. Jinak vyborny tut...

_________________
*Brain reset*
With new brain, new personality, new ffredyk..


Offline
 Profil  
PříspěvekNapsal: ned 22. lis 2009 13:46:20 
Frank Tempenny
Frank Tempenny
Registrován: sob 10. led 2009 22:02:03
Příspěvky: 1614

chybicka se vloudila :) dik

_________________
Poděkujte :
Daffymu za ukradení a zveřejnění rze6, rze7, rze7.3, rze7.4
Luk_assovi za cracknuti rze7.3 rze7.4 rze8
Crispemu za to že to luk_assovi zaplatil. A zveřejnil cracklou rze8
cz_dominik007 za to že zveřejnil craknutou rze7.3 rze7.4
Získání rze8 zatím neni úplně jasné bylo to z přestupu z cpor.eu na (stary) xel.cz

play.superparba.eu:7777
http://www.superparba.eu


Offline
 Profil  
PříspěvekNapsal: ned 22. lis 2009 15:41:21 
Carl Johnson "CJ"
Carl Johnson "CJ"
Uživatelský avatar
Registrován: čtv 04. pro 2008 12:15:11
Příspěvky: 4562
Bydliště: @home

Je to super a hodi se to... je to na připíchnutí ;)

ps: ja použivam

#undef MAX_PLAYERS
#define MAX_PLAYERS 100

_________________
Omlouvám se všem, které jsem tu někdy urazil, dal jim ban nebo jim provedl cokoliv jiného, co se jim nelíbilo.

Twitter: @Cinska_polivka
Last.fm: Chinese_soup
XMPP (Jabber): Cinska_polivka@jabbim.com"
IRC: Chinese_soup @ IRCNet, Freenode, CZFree


Online
 Profil  
PříspěvekNapsal: úte 28. pro 2010 2:35:52 

Citace:
Kód:
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 )


  
PříspěvekNapsal: čtv 06. led 2011 16:47:39 
Moderátor
Moderátor
Uživatelský avatar
Registrován: čtv 11. čer 2009 12:47:03
Příspěvky: 2228

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

Našel jsem chybu

Citace:
Kód:
if(Cas[i] > 0) Cas[playerid] -- ;


nemá to být takto?
Kód:
if(Cas[i] > 0) Cas[i] -- ;

_________________
Obrázek


Offline
 Profil  
PříspěvekNapsal: ned 22. kvě 2011 18:19:02 
Marc Wayne "B-Dup"
Marc Wayne "B-Dup"
Uživatelský avatar
Registrován: sob 16. říj 2010 16:16:27
Příspěvky: 647
Bydliště: Nitra, Slovensko

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-)

_________________
Obrázek

Obrázek


Offline
 Profil  
PříspěvekNapsal: ned 22. kvě 2011 19:24:01 
Frank Tempenny
Frank Tempenny
Registrován: sob 10. led 2009 22:02:03
Příspěvky: 1614

Navod píše:
Citace:
Kód:
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

_________________
Poděkujte :
Daffymu za ukradení a zveřejnění rze6, rze7, rze7.3, rze7.4
Luk_assovi za cracknuti rze7.3 rze7.4 rze8
Crispemu za to že to luk_assovi zaplatil. A zveřejnil cracklou rze8
cz_dominik007 za to že zveřejnil craknutou rze7.3 rze7.4
Získání rze8 zatím neni úplně jasné bylo to z přestupu z cpor.eu na (stary) xel.cz

play.superparba.eu:7777
http://www.superparba.eu


Offline
 Profil  
PříspěvekNapsal: ned 22. kvě 2011 21:52:15 
Nováček
Nováček
Registrován: ned 17. říj 2010 9:32:01
Příspěvky: 22

Je logicke ked ma pole 50 prvkov tak ich ma 50 a nie 51... :D

_________________
Obrázek


Offline
 Profil  
PříspěvekNapsal: ned 22. kvě 2011 21:56:08 
Eddie Pulaski
Eddie Pulaski
Uživatelský avatar
Registrován: pát 02. říj 2009 13:59:22
Příspěvky: 1455
Bydliště: ?????????

jejich 50 nula se nepocita omg :D takze jakoby 1-100


Offline
 Profil  
PříspěvekNapsal: čtv 02. čer 2011 12:49:37 
Marc Wayne "B-Dup"
Marc Wayne "B-Dup"
Registrován: úte 01. bře 2011 10:57:34
Příspěvky: 629
Bydliště: Opava

dobrý nápad :thumbup:

_________________
Slavné hlášky
„Smrt jednoho je tragédie. Smrt milionů je statistika“... stalin
„vidim hned první chybu misto GivePlayerWeapon má být GetPlayerWeapon“... cjcarl
„ja pawn viem, len som lenivý spravit si vlastný mod“... jakubes
zapoj mozog..keď to nejde tak skús znovu skopírovať ten kód... jakubes


Offline
 Profil  
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 12 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


 Kdo je online

Uživatelé procházející toto fórum: SpiRinG


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na: