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

Code: Select all

new a[32];
ir

Code: Select all

new a[10000];
su

Code: Select all

for (new i; i < sizeof a; i++)    a[i] = 0;
ir

Code: Select all

arrayset(a, 0, sizeof a);
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.