Ar optimalu?

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
bussinessman
Ar jis surinks 50 žinučių?
Posts: 39
Joined: 2011 Mar 25 09:56

Ar optimalu?

Post by bussinessman »

Sveiki, ar optimalu naudoti šitokį for ciklą?

Code: Select all

     for (new i=0; i<32; i++) {        if(!is_user_bot(i)) {            kintamasis[i] = false;        }    } 
Bandžiau naudoti:

Code: Select all

 new Players[32] new playerCount, iget_players(Players, playerCount) for (i=0; i<playerCount; i++)    kintamasis[i] = false;  
Tačiau vienam žaidėjui visad neužsisetindavo kintamasis...
Ką patartumėt? Ar galima naudoti patį pirmą kodą?

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: Ar optimalu?

Post by aaarnas »

Antrame viskas kaip ir gerai.

Pirmame i reiktų pradėti nuo 1 (nes 0 yra serveris, o ne žaidėjas).
Be to turi būti <= 32, nes žaidėjų yra 32, tau iki 31 daro.

Ir 32 geriau ne hardcod'inti, o gauti kiek žmonių telpa serveryje su get_maxplayers() funkcija. (plugin_init funkcijoj į kintamąjį įrašai ir naudoti jo to kur reikia plugine).
Palikau CS pasaulį ;/ . Nebepasiekiamas.

bussinessman
Ar jis surinks 50 žinučių?
Posts: 39
Joined: 2011 Mar 25 09:56

Re: Ar optimalu?

Post by bussinessman »

Gerai pabandysiu, tai kodas maždaug turi atrodyti šitaip?

Code: Select all

 new maxplayers; plugin init(){  maxplayers = get_maxplayers();  register_logevent("NewRound", 2, "1=Round_Start");} public NewRound(){    for (new i=0; i<=maxplayers; i++) {        if(!is_user_bot(i)) {            kintamasis[i] = false;        }    }} 

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: Ar optimalu?

Post by hleV »

Kuo mažiau modulio funkcijų (native) iškvietimų, tuo geriau, nebent jie atliktų kažką greičiau, nei paprastomis Pawn kintamųjų manipuliacijomis.
Tavo atveju, tiesiog daryk šitaip:

Code: Select all

new MaxPlayers; public plugin_init(){    register_logevent("OnRoundStart", 2, "1=Round_Start");     MaxPlayers = get_maxplayers();} public OnRoundStart()    arrayset(kintamasis, false, MaxPlayers + 1); // Nezinau, ar to +1 reikia
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

bussinessman
Ar jis surinks 50 žinučių?
Posts: 39
Joined: 2011 Mar 25 09:56

Re: Ar optimalu?

Post by bussinessman »

arrayset man netiks, nes be kintamojo dar noriu nustatyti pavyzdžiui greitį, gravitaciją ir pan.

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: Ar optimalu?

Post by hleV »

Šiuo būdu panaudosi tik vieną native iššaukimą:

Code: Select all

new players[32], num;get_players(players, num, "ac"); // I players masyva deda tik gyvus zaidejus ir ne botus for (new i, id; i < num; i++){    id = players[i];     // Darai ka nori su id}
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

bussinessman
Ar jis surinks 50 žinučių?
Posts: 39
Joined: 2011 Mar 25 09:56

Re: Ar optimalu?

Post by bussinessman »

Dėkui, arba šitą panaudosiu arba kaip aaarnas sakė su get_maxplayers, beje, jeigu turiu tarkim 2 funkcijas ir abiejuose naudoju šituos ciklus, tai kaip geriau naudoti aaarno būdą ar kiekvienam get_players imt?

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: Ar optimalu?

Post by hleV »

hleV wrote:Kuo mažiau modulio funkcijų (native) iškvietimų, tuo geriau
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: Ar optimalu?

Post by aaarnas »

hleV jau viską pasakė. Aš omenyje turėjau tik 1 smulkmeną.

Code: Select all

new maxplayers public plugin_init() { maxplayers = get_maxplayers()} func() {     for (new i=1; i<=maxplayers; i++) {        if(is_user_connected(i)) {            kintamasis[i] = false;        }    }}
Ta prasme jei tarkim paleidi pluginą į pasaulį ir juo naudojasi daug žmonių. Pas kiekvieną serveryje telpa skirtingas žmonių skaičius: 18, pas kitą 32 ir t.t...

Tai jei darom šiuo būdu, tai is_user_connected tau bus iškviesta 18 kartų, jei pas jį 18 slotų serveryje. Jei hardcodinsi, tai tau pastoviai 32 kartus iškvies, nesvarbu, kad tie 14 kartų nereikalingi.

Naudojant get_players funkciją, į modulį kreipiesi vieną vienintelį kartą, tad pats paskaičiuok, kur yra geriau. 1 ar 32 ?

Pirmąjį būdą naudoti yra gerai, jei kintamuosiuose laikai žaidėjų duomenis. Pvz: p_alive, p_connected. Tada nesikreipiama į modulius, o tikrinama iš atminties.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

bussinessman
Ar jis surinks 50 žinučių?
Posts: 39
Joined: 2011 Mar 25 09:56

Re: Ar optimalu?

Post by bussinessman »

Gerai parašiau štai dvi man reikalingas funkcijas pagal visus jūsų kriterijus, dabar gerai su optimizacija?

Code: Select all

 public giveItemT(){    new players[32], num;    get_players(players, num, "ac");     for (new i=1; i<num; i++) {        if(get_user_team(i) == 1) {            //kazka duodam        }    }} public resetAll(){    new players[32], num;    get_players(players, num, "ac");     for (new i=1; i<num; i++) {        kintamasis[i] = false;    }} 

Post Reply

Who is online

Users browsing this forum: No registered users and 18 guests