[ROZWIĄZANE] Problem z losowaniem graczy d...
Best Answer
Gość_21977_*
08.03.2014 07:58
- Cachuj get_playersnum
- Identyfikatory graczy zaczynają się od 1, nie od 0.
- Zmienne team1count i team2count resetujesz przy każdym wywołaniu pętli, co jest dość irracjonalne.
if(random_num(1, 2) == 1)
Gwałt na optymalności.- Linijki 29 – 61 wymagają usunięcia i napisania losowania od nowa, bo na chwilę obecną to losowanie może trwać nawet w nieskończoność. KISS.

Rivit
06.03.2014
Witam. Napisałem sobie plugin do losowania graczy z teamu (na razie na testowy 8 slotowy server).
Tylko jest jeden problem. Chce aby drużyny wybierało 4 na 4 (przy ośmiu graczach) , a wybiera 5 na 3.
W czym jest problem? Bo ja nie mogę go zlokalizować.
#include <amxmodx> new nazwy_graczy1team[33][33], nazwy_graczy2team[33][33]; public plugin_init() { register_plugin("plugin", "1.0", "TibacK"); register_concmd("esl_losuj", "losuj") register_clcmd("say /teams", "pokazwynik") } public losuj() { client_print(0, print_center, "TRWA LOSOWANIE. Wpisz /teams") for(new i = 0; i <= get_playersnum(); i++) { new maxteam1 = get_playersnum() / 2, maxteam2 = get_playersnum() - maxteam1, bool:czypierwszy, team1count = 0, team2count = 0; if(random_num(1, 2) == 1) czypierwszy = true else czypierwszy = false if(czypierwszy && team1count <= maxteam1) { if(team1count + 1 >= maxteam1) continue else { get_user_name(i, nazwy_graczy1team[i], 32) team1count++ } } else if(!czypierwszy && team2count <= maxteam2) { if(team2count + 1 >= maxteam2) continue else { get_user_name(i, nazwy_graczy2team[i], 32) team2count++ } } else if(team1count >= maxteam1) { team2count++ get_user_name(i, nazwy_graczy2team[i], 32) } else if(team2count >= maxteam2) { team1count++ get_user_name(i, nazwy_graczy1team[i], 32) } } return PLUGIN_CONTINUE } public pokazwynik(id) { new motd[1024], len = 0 len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000><font color=#33CCFF><b>Sklad 1 (TT):<font color=#FF0505><br>") for(new i = 1; i <= get_playersnum(); i++) { if(!equal(nazwy_graczy1team[i], "")) len += formatex(motd[len], sizeof motd - 1 - len, "%s<br>", nazwy_graczy1team[i]) } len += formatex(motd[len], sizeof motd - 1 - len, "<br><font color=#33CCFF>Sklad 2 (CT):<font color=#FF0505><br>") for(new i = 1; i <= get_playersnum(); i++) { if(!equal(nazwy_graczy2team[i], "")) len += formatex(motd[len], sizeof motd - 1 - len, "%s<br>", nazwy_graczy2team[i]) } len += formatex(motd[len], sizeof motd - 1 - len, "</b>") show_motd(id, motd, "Sklady") }
Gdzie jest błąd? Dodam jeszcze że wyświetlanie ( public pokazwynik() ) działa poprawnie
Best Answer Gość_21977_* 08.03.2014
- Cachuj get_playersnum
- Identyfikatory graczy zaczynają się od 1, nie od 0.
- Zmienne team1count i team2count resetujesz przy każdym wywołaniu pętli, co jest dość irracjonalne.
if(random_num(1, 2) == 1)
Gwałt na optymalności.- Linijki 29 – 61 wymagają usunięcia i napisania losowania od nowa, bo na chwilę obecną to losowanie może trwać nawet w nieskończoność. KISS.
Edited by 21977, 08.03.2014 07:58.
Rivit
08.03.2014
ad 1
Czyli mam zapisywać do jakiejś zmiennej?
ad 2
Drobna pomyłka. Dzięki.
ad 3
Dam je poza pętlą.
ad 4
Co proponujesz?
ad 5
Dlaczego?
Czyli mam zapisywać do jakiejś zmiennej?
ad 2
Drobna pomyłka. Dzięki.
ad 3
Dam je poza pętlą.
ad 4
Co proponujesz?
ad 5
Dlaczego?
Klakier
08.03.2014
Napisz co ma robić ten program. Przydzielać wylosowanych do danej drużyny czy co?
Rivit
08.03.2014
@up
Ma losować graczy (nie przydzielać). I pokazywać wynik w motd (do tego jest zdeklarowana komenda)
xenos
10.03.2014
Masz błędny warunek w pętli , gdyż startuje się od i=1 w przypadku graczy.
Potwierdzenie:
http://amxx.pl/topic...venty/?p=122983
Rivit
10.03.2014
@up
Identyfikatory graczy zaczynają się od 1, nie od 0.
Jak napisać poprawnie ten algorytm?