←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

[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 team1countteam2count 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.
Go to the full post
Locked

  • +
  • -
Rivit's Photo 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

Quote

Best Answer Gość_21977_* 08.03.2014

  • Cachuj get_playersnum
  • Identyfikatory graczy zaczynają się od 1, nie od 0.
  • Zmienne team1countteam2count 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.
Quote

  • +
  • -
Rivit's Photo 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?
Quote

Aemiksowy's Photo Aemiksowy 08.03.2014

AD 1. Tak.

Quote

  • +
  • -
Klakier's Photo Klakier 08.03.2014

Napisz co ma robić ten program. Przydzielać wylosowanych do danej drużyny czy co? 

Quote

  • +
  • -
Rivit's Photo Rivit 08.03.2014

@up

Ma losować graczy (nie przydzielać). I pokazywać wynik w motd (do tego jest zdeklarowana komenda)

Quote

  • +
  • -
xenos's Photo 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

Quote

  • +
  • -
Rivit's Photo Rivit 10.03.2014

@up

 


Identyfikatory graczy zaczynają się od 1, nie od 0.

 

Jak napisać poprawnie ten algorytm?

Quote
Locked