Skocz do zawartości
  • 0

Problem z losowym dobieraniem graczy do zmiennych


Pytanie

Witam, mam problem ze skryptem i nie na razie nie mam pomysłu co mogę zrobić.

Otóż mam 4 zmienne "drużyn", które przechowują graczy ( {1a::*}, {2b::*}, {3c::*}, {4d::*} ). W jednej drużynie mogą być maksymalnie 4 osoby.
Gracz aktualnie sam może zdecydować gdzie będzie komendą, ale chcę, aby dodatkowo np. po wpisaniu /losowanie dobrało do losowych drużyn graczy, którzy są na świecie "XYZ" i nie podjęli wyboru, tak aby nie przekroczyć limitu 4 osób w jednej drużynie.

Jakieś pomysły? Z góry dziękuje.

Odnośnik do komentarza
https://skript.pl/temat/40463-problem-z-losowym-dobieraniem-graczy-do-zmiennych/
Udostępnij na innych stronach

3 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

W momencie gdy gracz wybiera swoją drużynę najlepiej byłoby przypisać mu jakąś zmienną true \ false, powiedzmy {status::%player%}. Wtedy podczas zapętlania graczy będziemy wiedzieć czy dana osoba ma już wybraną drużynę czy nie (bez potrzeby szukania go w zmiennych z drużynami), czyli:

tu gracz wybiera drużynę:
	jakieś warunki:
		#tutaj dodajesz gracza do listy (byłoby lepiej gdyby nazwa była w innym formacie)
		#tj. {drużyny::nazwadrużyny::*} - wtedy łatwiej będzie się do nich odnosić w pętli
		add player to {drużyny::czerwoni::*}
		#i dodatkowo tworzysz mu tą zmienną
		set {status::%player%} to true

#no i losowanie (przypuszczam że nie będziesz tego wykonywał komendą za każdym razem, więc proponuję funkcję)
#zapętlamy wszytkich graczy ze świata, sprawdzamy czy mają zmienną na true (tj. czy są w drużynie)
function losowanie():
	loop all players is world "world":
		if {status::%loop-player%} is true:
			#pobieramy sobie indeksy z listy {drużyny::*} (czyli nazwy drużyn)
			set {_nazwyDrużyn::*} to indexes of {drużyny::*}
			#teraz powyższa lista ma listę tekstów (czerwoni, niebiescy, zieloni, itd.)
			#tworzymy pętlę, ktora powtórzy się tyle razy ile wyników mamy na liście
			loop (size of {_nazwyDrużyn::*}) times:
				#wybieramy losową drużynę z listy i sprawdzamy czy nie jest zapełniona (tj. ma mniej niż czterech graczy)
				set {_los} to random element out of {_nazwyDrużyn::*}
				if (size of {drużyny::%{_los}%::*}) < 4:
					#jeżeli jest mniej niż 4, to dodajemy do niej gracza i ustawiamy jego status na true
					add loop-player to {drużyny::%{_los}%::*}
					set {status::%loop-player%} to true
					#można ewentualnie do gracza wiadomość wysłać
					send "dołączyłeś do drużyny %{_los}%" to loop-player
					#zatrzymujemy pętlę
					stop loop
				else:
					#jeżeli drużyna jest pełna - usuwamy ją z listy (nie będzie brana więcej pod uwagę do losowania)
					delete {_nazwyDrużyn::%loop-index%}

#i to by było na tyle z kodu
#kiedy rozpoczyna się runda (czy cokolwiek innego) - uruchamiasz funkcję - wystarczy wpisać jej nazwę w pustą linijkę - losowanie()

#w momencie gdy runda się kończy - musisz zapętlić wszytskich graczy ze wszystkich drużyn i usunąć ich status
delete {status::%gracz%}

 

mam nadzieję że jakoś to wytłumaczyłem, może się przyda. Dobranoc.

Odnośnik do komentarza
https://skript.pl/temat/40463-problem-z-losowym-dobieraniem-graczy-do-zmiennych/#findComment-252642
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...