Page 1 of 1

draw vote

Posted: 2010 Sep 13 19:34
by addinol
Padariau pluginą, jog žmonės galėtų balsuoti mappradžioje roundtime:
  • 1. 1:00
    2. 1:25
    3. 1:45
    4. 2:00
    5. 2:25
    6. 2:50
Ir kas tada jei pasirinkimas 3 (1:45) surinks 5 balsus ir pasirinkimas 4 (2:00) surinks taipogi 5 balsus ???
Ir kiti galimi atvejai ... kas tada ???

Kaip padaryti jog gautu 2 daugiausia balsų gavusius pasirinkimus ir išsirinktų vieną iš jų.

Re: draw vote

Posted: 2010 Sep 13 20:12
by aaarnas
Random. Daugiau nieko nelieka.

Čia ant greičio sugalvojau. Tikiu, kad galima padaryti daug paprasčiau:

Code: Select all

 balsai[0] = 0balsai[1] = 5balsai[2] = 1balsai[3] = 5balsai[4] = 5    // Gaunam max ir keli su vienodais balsu skaiciais new maksimalus if(balsai[0] > maksimalus) maksimalus = balsai[0]if(balsai[1] > maksimalus) maksimalus = balsai[1]if(balsai[2] > maksimalus) maksimalus = balsai[2]if(balsai[3] > maksimalus) maksimalus = balsai[3]if(balsai[4] > maksimalus) maksimalus = balsai[4] new vienodi[5], skaiciusif(balsai[0] == maksimalus) { vienodi[0] = true; skaicius++; }if(balsai[1] == maksimalus) { vienodi[1] = true; skaicius++; }if(balsai[2] == maksimalus) { vienodi[2] = true; skaicius++; }if(balsai[3] == maksimalus) { vienodi[3] = true; skaicius++; }if(balsai[4] == maksimalus) { vienodi[4] = true; skaicius++; } // Tikrinam ir atrenkam atsitiktini punktaif(skaicius > 1) {    for(new i; i<=4; i++) {                if(vienodi[i] && random_num(0, 2) == 1) {                        client_print(id, print_chat, "Isrinktas punktas nr: %d. Balsu skaicius: %d", vienodi[i]+1, maksimalus)            break;        }    }}else { // Parodom kuris punktas pasirinktas    for(new i; i<=4; i++) {                if(vienodi[i]) {                        client_print(id, print_chat, "Isrinktas punktas nr: %d. Balsu skaicius: %d", vienodi[i]+1, maksimalus)            break;        }    }} 

Re: draw vote

Posted: 2010 Sep 14 16:09
by addinol
Ką tiksliau tas break padaro ?

Code: Select all

 if(vienodi[i] && random_num(0, 2) == 1) {         client_print(id, print_chat, "Isrinktas punktas nr: %d. Balsu skaicius: %d", vienodi[i]+1, maksimalus)         break;         }
Ir kaip patikrinti kokie punktai buvo, nes kiekvienas punktas turi skirtingus nustatymus ;/

Re: draw vote

Posted: 2010 Sep 14 18:28
by aaarnas
break visiškai nutraukia ciklą.
Kaip tai kokie punktai buvo?

Beje sugalvojau žymiai paprasčiau kaip padaryti. Maksimalų skaičiuoti tiesiog balsavimų skaičiavimo funkcijoje. Na čia su skriptu niekaip neparodysiu. Reikia visą pluginą padaryti.

Re: draw vote

Posted: 2010 Sep 14 18:45
by addinol
Sakykim, kokie tie maksimalus didžiausi buvo ir iš jų išrinko kokį vieną. kai su random_num ir else jei nepavyko, tai iš kur žinoti kuris buvo parinktas, ta prasme balsai[0] ar balsai[1] ar balsai[2] ar balsai[3] ar balsai[4] ...

Re: draw vote

Posted: 2010 Sep 14 19:15
by aaarnas
i raidė.

Code: Select all

if(vienodi[i] && random_num(0, 2) == 1) {         client_print(id, print_chat, "Isrinktas punktas nr: %d. Balsu skaicius: %d", vienodi[i]+1, maksimalus)         balsai[i] // Tavo pasirikntasis         break;         } 
Bet sakau, galima žymiai paprasčiau padaryti. Štai kaip reikia. Tiesiog ten kur skaičiuojami balsai (vote handle funcijoje) daryti kažką tokio:

Code: Select all

 new g_isrinktasis_punktas // Globalus kintamasis kur saugoma išrinktasis punktasnew g_maksimalus // Globalus kintamasis kur saugoma maksimalus balsų skaičiusnew balsai[6] // Globalus kintamasis kur saugomi balsų skaičiai vote_handle(menu_punktas) {    switch(menu_punktas) {        case 0: {        balsai[0]++        if(g_maksimalus <= balsai[0]) {                        g_isrinktasis_punktas = 0            g_maksimalus = balsai[0]        }    }    case 1: {        balsai[1]++        if(g_maksimalus <= balsai[1]) {                        g_isrinktasis_punktas = 1            g_maksimalus = balsai[1]        }    }    case 2: {        balsai[2]++        if(g_maksimalus <= balsai[2]) {                        g_isrinktasis_punktas = 2            g_maksimalus = balsai[2]        }    }    ... // Taip toliau}
Beje prieš kiekvieną balsavimą nepamiršk išvalyti visų globalių kintamųjų, nebent tas balsavimas tik kartą žemėlapyje vyks.

Re: draw vote

Posted: 2010 Sep 16 14:28
by addinol
o tai kaip toliau, kaip tikrinti ar yra vienodu ?

Re: draw vote

Posted: 2010 Sep 16 16:40
by aaarnas
Nereikia. Viskas jau bus sutvarkyta.
g_isrinktas_punktas tai sistemos pagal balsus atrinktas daugiausiai balsų surinktas pinktas. Bus parinktas paskutinis paspaustas, jei jis bus didžiausias.
g_maksimalus tai daugiausiai surinkta balsų už vieną balsavimą.

Kad sužinoti kuris punktas išrinktas tai:
balsai[g_isrinktas_punktas]