Skocz do zawartości
  • 0

Niepowtarzalne losowanie


LordYu
 Udostępnij

Pytanie

Da się zrobić w skrypcie tak, aby wylosowana cyfra trafiała do zbioru variables ale jako text a nie cyfra?
Chcę zrobić losowanie ale takie, które nie powtarza mi wyników, mam 16 cyfr do wylosowania i chcę, żeby 15 z nich było losowych, ale przy obecnym ustawieniu niektóre cyfry wpadają 3-5x na jedno losowanie co utrudnia mi zadanie.

 

Chcę, żeby po wylosowaniu cyfry 5 przy kolejnym losowaniu jej nie było w puli.

Jak zrobię proste add 5 to {nie.losuj} to zmienna nie.losuj będzie miała 5, ale po dodaniu tam na przykład kolejnej wylosowanej literki 7 nie.losuj będzie miało już 12 a chcę żeby było 5 i 7 osobno, jako dwa różne dane.

 

Skrypt ma za zadanie usuwać z areny kolorową wełnę, losowane cyfry odpowiadają danemu kolorowi, skrypt po wylosowaniu cyfry ma usunąć kolor odpowiadający tej cyfrze, ale zdarza się, że skrypt losuje 3x czy nawet 5x ten sam kolor, przez co nie usuwane jest nic.

Kawałek skryptu:

command /welna start:
	trigger:
		if {ilosc} is bigger than or equal to 15:
			broadcast "ilosc wiecej niz 15"
			loop all players in world "minigry":
				if loop-player is in region "koloryaktywni":
					send "Usunięto wszystkie kolory poza jednym, gra dobiegła końca" to loop-player
			set {ilosc} to 0
			set {koniec.gry} to true
			stop
		else:
			broadcast "ilosc mniejsza niz 15"
			set {_kolory} to a random integer between 1 and 16
			broadcast "wylosowano cyfrę"
#Start kolorów	----------------------------------------------------------------------------------------------------------
			broadcast "zaraz usunięty będzie kolor - usunięto %{licznik}% z 15 kolorów"
			wait 10 seconds
			if {_kolory} is 1:
				if {kolor.usuniety::*} contain "bialy":
					broadcast "&bBiały był już usunięty losujemy ponownie"
					execute console command "licznik"
					stop
				else:
					add "bialy" to {kolor.usuniety::*}
					add 1 to {ilosc}
					loop blocks in region "koloryarena":
						if loop-block is white wool:
							set loop-block to air
					stop
#Nowy kolor --------------------------------------------------------------------------------------------------------------
			if  {_kolory} is 2:
				if {kolor.usuniety::*} contain "pomaranczowy":
					send "&bPomarańczowy był już usunięty losujemy ponownie" to {gracze::%player%}
					execute console command "licznik"
					stop
				else:
					add "pomaranczowy" to {kolor.usuniety::*}
					add 1 to {ilosc}
					loop blocks in region "koloryarena":
						if loop-block is orange wool:
							set loop-block to air

komenda jak i broadcast mają mi pomóc w lokalizacji błędów, więc to będzie zmieniane i ustawiane porządnie.

Edytowane przez LordYu
Odnośnik do komentarza
Udostępnij na innych stronach

7 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Dodatkowo, jak dodać wszystkich graczy z danego regionu za pomocą loop do listy, która będzie otrzymywała wiadomości?
Nie chcę za każdym razem loopować każdego gracza w świecie a potem w danym regionie  

 

Ewentualnie może być w drugą stronę, mogę stworzyć zmienną, która posiada wszystkie 16 cyfr.
I losowanie odbywać będzie się na podstawie przypisania do innej zmiennej jednej cyfry z tej zmiennej.

Ale ustawienie set {_los} to {16kolorow::*} - nie działa bo skrypt twierdzi, że zmienna los może mieć tylko jeden obiekt, a dodanie set {los} to one {16kolorow} nie działa.

Byłoby to dobre, bo po każdym losowaniu z puli 16kolorów mógłbym usunąć daną cyfrę, co poskutkuje brakiem jej w puli losowania, tylko nie mogę przypisać jednej z 16 cyfr do innej zmiennej, bo skrypt chce przypisać wszystkie 16 za jednym razem

Edytowane przez LordYu
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
20 godzin temu, LordYu napisał:

Jak zrobię proste add 5 to {nie.losuj} to zmienna nie.losuj będzie miała 5, ale po dodaniu tam na przykład kolejnej wylosowanej literki 7 nie.losuj będzie miało już 12 a chcę żeby było 5 i 7 osobno, jako dwa różne dane.

skorzystaj ze zmiennej grupowej, np {nieLosuj::*}

20 godzin temu, LordYu napisał:

Dodatkowo, jak dodać wszystkich graczy z danego regionu za pomocą loop do listy, która będzie otrzymywała wiadomości?
Nie chcę za każdym razem loopować każdego gracza w świecie a potem w danym regionie  

np.

set {_rec} to all players in region "nazwa"
send "wiadomsoc" to {_rec}

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
11 godzin temu, CoFFeIN04 napisał:

skorzystaj ze zmiennej grupowej, np {nieLosuj::*}

np.

set {_rec} to all players in region "nazwa"
send "wiadomsoc" to {_rec}

 

To nic nie daje, bo jednak gracze muszą czekać na powtórzone losowane.

A teraz wyobraź sobie mam 16 kolorów, zostają 2 ostatnie a skrypt jak na złość losuje same pozostałe 14 

Wolałbym tablicę danych, która zawiera 16 kolorów 
A podczas losowania z tej tablicy byłby usuwany, więc po 3 losowaniach miałbym 13 opcji, po 10 losowaniach miałbym już 6 opcji 
A po właśnie 14 losowaniach miałbym w tablicy danych 2 kolory i jeden byłby losowany z 2 (a nie jak mam teraz 1 z 16)

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
W dniu 17.12.2021 o 08:59, LordYu napisał:

Wolałbym tablicę danych, która zawiera 16 kolorów 

command /losowanie <text>:
	trigger:
		if arg = "nowe":
			set {losowanie::*} to "red", "green", "blue"
		else if arg = "losuj":
			set {_} to random element out of {losowanie::*}
			remove {_} from {losowanie::*}
			send {_}

cos takiego, dostosuj pod siebie

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
5 godzin temu, CoFFeIN04 napisał:
command /losowanie <text>:
	trigger:
		if arg = "nowe":
			set {losowanie::*} to "red", "green", "blue"
		else if arg = "losuj":
			set {_} to random element out of {losowanie::*}
			remove {_} from {losowanie::*}
			send {_}

cos takiego, dostosuj pod siebie

To już mam, sam zamknąłem ten wątek z tym kodem bo rozwiązałem problem już 

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Nieaktywny
Odpowiedz na pytanie...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

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