Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] Problem z losowaniem graczy do teamu


Najlepsza odpowiedź 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.
Przejdź do postu


  • Zamknięty Temat jest zamknięty
7 odpowiedzi w tym temacie

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 06.03.2014 15:46

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


  • +
  • -
  • 0

#2 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 08.03.2014 07:58   Najlepsza odpowiedź

  • 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.

Użytkownik 21977 edytował ten post 08.03.2014 07:58


#3 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 08.03.2014 09:47

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?
  • +
  • -
  • 0

#4 Aemiksowy

    Banned

  • Zbanowany

Reputacja: 34
Życzliwy

  • Postów:222
  • Lokalizacja::)
Offline

Napisano 08.03.2014 15:23

AD 1. Tak.



#5 Klakier

    Volenti non fit iniuria

  • Power User

Reputacja: 391
Wszechpomocny

  • Postów:878
  • GG:
  • Imię:Sebastian
  • Lokalizacja:Mogilno
Offline

Napisano 08.03.2014 16:31

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


  • +
  • -
  • 0

Sell - System Klanów (wojny, top15 etc)

 

Kontakt GG: 7285018


#6 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 08.03.2014 17:34

@up

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


  • +
  • -
  • 0

#7 xenos

    Wszechobecny

  • Użytkownik

Reputacja: 216
Profesjonalista

  • Postów:467
  • GG:
  • Imię:Konrad
  • Lokalizacja:Rzeszów
Offline

Napisano 10.03.2014 09:56

Masz błędny warunek w pętli , gdyż startuje się od i=1 w przypadku graczy.

Potwierdzenie:
http://amxx.pl/topic...venty/?p=122983


  • +
  • -
  • 0
"Jeśli potrafię to pomogę, jeśli nie potrafię to wskaże drogę którą trzeba dążyć by znaleźć odpowiedz" 

Pluginy:
Szukanie Aktywnych Banów w AmxBansie
Drop After Death
Kto postawił mine

#8 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 10.03.2014 20:55

@up

 


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

 

Jak napisać poprawnie ten algorytm?


  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych