Page 2 of 2
Re: Ar optimalu?
Posted: 2011 Oct 16 16:20
by hleV
Code: Select all
new MaxPlayers; public plugin_init() MaxPlayers = get_maxplayers(); public giveItemT(){ new players[32], num; get_players(players, num, "aec", "TERRORIST"); for (new i=1; i<num; i++) { //kazka duodam }} public resetAll(){ arrayset(kintamasis, false, MaxPlayers + 1);}
Re: Ar optimalu?
Posted: 2011 Oct 16 16:45
by bussinessman
Ai nesuprantu aš išvis jau dabar, sakėt lygtai nenaudot native, bet dabar vėl panaudojai ir native ir savo kitą būdą, užsipainiojau visiškai.
Re: Ar optimalu?
Posted: 2011 Oct 16 19:34
by aaarnas
Na tai sakėm naudoti get_players, tai ir naudoja.
Tavo atveju, tikrini žaidėjo team. Šitą vėl galima padaryti su get_players (hlev parodė).
Žodžiu, jį gali naudoti visada, kai reikia kažką skenuoti per žaidėjus. Tame savo cikle tikrini kiekvieno žaidėjo komandą, o get_players funkcija iš karto atrenka visus žaidėjus pagal nustatymus.
O arrayset nustato konkrečiam masyvui reikšmes. Čia jei tau reikės kažką daugiau padaryti (pvz keisti kokius parametrus), tai gali naudoti ciklą. Bet šio atveju irgi su get_players, nes paprastu ciklu tau vėl reikės skenuoti visus žaidėjus be reikalo. Get_players duoda tik tuos žaidėjus, kurie reikalingi.
Esmė tame - naudok paprastą ciklą tik tada, kai neišeina padaryti su get_players.
O dar kita esmė - realiai kompiuterio darbui tai neturi visiškai įtakos, nebent tu į tą ciklą bala žino kiek visko prikrautum.
Re: Ar optimalu?
Posted: 2011 Oct 16 19:46
by hleV
Reiktų pratestuot to
arrayset() greitį. Palygint
ir
su
Code: Select all
for (new i; i < sizeof a; i++) a[i] = 0;
ir
Man taip šviečiasi, kad nedideliems masyvams tas
arrayset() gali būt ir nenaudingas, bet šiaip neįsivaizduoju. Papraščiau tiesiog su
arrayset().
Re: Ar optimalu?
Posted: 2011 Oct 16 20:10
by aaarnas
Hlev. O įdomumo dėlei tai kokiu būdu tikrinimas įvykdymo greitis ?
Re: Ar optimalu?
Posted: 2011 Oct 16 22:22
by hleV
Yra kažkoks soft'as AlliedModuose.
EDIT:
http://forums.alliedmods.net/showthread.php?t=67752
EDIT2: Nu pratestavau, tai kaip suprantu
arrayset() - ultimate metodas tokiems dalykams. Su 32 vietų masyvu, paprastas ciklas užtruko mažiau nei 0.000001, o
arrayset() - 0.000001. Bet su didesniu masyvu -
arrayset() trunka nesveikai mažai. Lieku prie varianto naudot
arrayset(), kai tik galima.
Code: Select all
#include <amxmodx> new bool:Small[32];new bool:Big[10000]; public plugin_init(){ TestSmall(); TestBig(); arrayset(Small, true, sizeof Small); arrayset(Big, true, sizeof Big);} TestSmall() for (new i; i < sizeof Small; i++) Small[i] = true; TestBig() for (new i; i < sizeof Big; i++) Big[i] = true;
Code: Select all
type | name | calls | time / min / max------------------------------------------------------------------- n | arrayset | 2 | 0.000001 / 0.000000 / 0.000001 p | plugin_init | 1 | 0.000001 / 0.000001 / 0.000001 f | TestSmall | 1 | 0.000000 / 0.000000 / 0.000000 f | TestBig | 1 | 0.000046 / 0.000046 / 0.0000460 natives, 0 public callbacks, 1 function calls were not executed.