Skocz do zawartości
  • 0

Dopisek Sk


Nitrusiniski

Pytanie

on right click on beacon:
    player is in world "swiat"
    if player has stick named "&ctest":
        broadcast "test"
    else:
        send "brak test" to player

Stworzyłem oto cos takiego chciałbym osiągnąc cos takiego aby gdy gracz kliknie na becona patykie o nazwie test to rozpoczyna sie losowanie i w promieniu 8 kratek pojawiają sie losowe przedmioty które ustale 

Edytowane przez xNightPower_
Nieaktywny

Umieszczaj kod w code.

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/
Udostępnij na innych stronach

  • Odpowiedzi 54
  • Dodano
  • Ostatniej odpowiedzi

Top użytkownicy dla tego pytania

Top użytkownicy dla tego pytania

Rekomendowane odpowiedzi

  • 0
7 minut temu, Nitrusiniski napisał:

if player has stick named "&ctest":

To sprawdza jedynie czy gracz ma taki patyk, jeśli chcesz sprawdzić czy go trzyma to sprawdzasz:

if player's tool is stick named "test":

 

co do dalszej części podaj szczegóły, co i jak

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282090
Udostępnij na innych stronach

  • 0
2 minuty temu, Nitrusiniski napisał:

Stworzyłem oto cos takiego chciałbym osiągnąc cos takiego aby gdy gracz kliknie na becona patykie o nazwie test to rozpoczyna sie losowanie i w promieniu 8 kratek pojawiają sie losowe przedmioty które ustale 

Na samym początku sprawdzasz czy narzędzie gracza to patyk z nazwą "test".

Po tym stwórz pętlę 'while' wykonującą się tak długo jak lista {_loc::*} jest mniejsza niż ilość tych twoich przedmiotów. Następnie w tej pętli losujesz koordynaty między (x gracza - 8, y gracza - 8, z gracza - 8), a (x gracza + 8, y gracza + 8, z gracza + 8).

Po wylosowaniu koordynatów sprawdzasz czy dystans między graczem, a nimi jest mniejszy, bądź równy 8. Dalej sprawdzasz czy blok w miejscu wylosowanych koordynatów jest powietrzem.

Jeżeli te warunki zostaną spełnione, dodajesz wylosowaną lokalizację do listy {_loc::*}. Już poza pętlą 'while' zapętlasz tę listę {_loc::*} i bierzesz losowy przedmiot z tej twojej listy, a następnie używasz 'drop [twój item] at loop-value'. Oczywiście nie należy zapomnieć o tym, aby usuwać również te twoje przedmioty z listy, aby nie było duplikatów.

W ten sposób właśnie zrobiłeś losowanie przedmiotów i wyrzucanie je w losowych lokalizacjach w promieniu 8 metrów od gracza. Gratuluję.

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282091
Udostępnij na innych stronach

  • 0
5 minut temu, Kormic napisał:

Na samym początku sprawdzasz czy narzędzie gracza to patyk z nazwą "test".

Po tym stwórz pętlę 'while' wykonującą się tak długo jak lista {_loc::*} jest mniejsza niż ilość tych twoich przedmiotów. Następnie w tej pętli losujesz koordynaty między (x gracza - 8, y gracza - 8, z gracza - 8), a (x gracza + 8, y gracza + 8, z gracza + 8).

Po wylosowaniu koordynatów sprawdzasz czy dystans między graczem, a nimi jest mniejszy, bądź równy 8. Dalej sprawdzasz czy blok w miejscu wylosowanych koordynatów jest powietrzem.

Jeżeli te warunki zostaną spełnione, dodajesz wylosowaną lokalizację do listy {_loc::*}. Już poza pętlą 'while' zapętlasz tę listę {_loc::*} i bierzesz losowy przedmiot z tej twojej listy, a następnie używasz 'drop [twój item] at loop-value'. Oczywiście nie należy zapomnieć o tym, aby usuwać również te twoje przedmioty z listy, aby nie było duplikatów.

W ten sposób właśnie zrobiłeś losowanie przedmiotów i wyrzucanie je w losowych lokalizacjach w promieniu 8 metrów od gracza. Gratuluję.

Troche to skaplikowane możesz dać jakies wskazówki co do zapisu. A i zapomniałem tego napisac ale chciałbym tez dodac zeby trwało to przez 2 minuty i zeby na nowo działało to trzeba nowego patyka

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282093
Udostępnij na innych stronach

  • 0
2 minuty temu, Nitrusiniski napisał:

Troche to skaplikowane możesz dać jakies wskazówki co do zapisu. A i zapomniałem tego napisac ale chciałbym tez dodac zeby trwało to przez 2 minuty i zeby na nowo działało to trzeba nowego patyka

Oczywiście, mogę dać wskazówki, ale musisz powiedzieć czego nie rozumiesz i co mam ci wytłumaczyć.

Trwało to przez 2 minuty? W sensie że losowanie? Jak chcesz to zrobić?

Czyli patyk ma być jednorazowy... No to wystarczy taka linijka.

set player's tool to (item amount of player's tool - 1) of player's tool

Wtedy patyk po użyciu zostanie usunięty.

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282094
Udostępnij na innych stronach

  • 0
37 minut temu, Kormic napisał:

Oczywiście, mogę dać wskazówki, ale musisz powiedzieć czego nie rozumiesz i co mam ci wytłumaczyć.

Trwało to przez 2 minuty? W sensie że losowanie? Jak chcesz to zrobić?

Czyli patyk ma być jednorazowy... No to wystarczy taka linijka.




set player's tool to (item amount of player's tool - 1) of player's tool

Wtedy patyk po użyciu zostanie usunięty.

"Po tym stwórz pętlę 'while' wykonującą się tak długo jak lista {_loc::*} jest mniejsza niż ilość tych twoich przedmiotów. Następnie w tej pętli losujesz koordynaty między (x gracza - 8, y gracza - 8, z gracza - 8), a (x gracza + 8, y gracza + 8, z gracza + 8)."

chodz dokładnie o tą linike pierwszy raz sie spotyka z pętlą while i nie wiem jak wyznaczycz kordynaty miedzy obiektem losowania a graczem

Jesli chodzi o ten czas to chodzi mi o to ze gdy gracz kliknie patykiem na becona uruchamia sie losowanie które trwa przez 2 minuty i potem trzeba nowego patyka aby znow zrobic losowanie

 

Edytowane przez xNightPower_
Nieaktywny

Naprawiam formatowanie na ciemnym stylu.

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282095
Udostępnij na innych stronach

  • 0

Co do pętli while - w skrócie, wykonuje się do czasu gdy warunek jest prawdziwy (więcej informacji masz tutaj: https://wiki.skript.pl/Pętle)

Co do losowania koordynatów to możesz użyć do tego po prostu dodać do poszczególnych koordynatów gracza losową liczbę między -8 a 8, zapis losowej liczby wygląda tak:

random integer between -8 and 8

Potem używasz funkcji location():

https://skriptlang.github.io/Skript/functions.html#location

Aby wydobyć x y z gracza po prostu używasz wyrażeń x-loc of player

 

Tak przykładowo może wyglądać użycie funkcji location(), gdzie oczywiście ty musisz wykonać to co wyżej napisałem

set {_loc} to location(x-loc of player, y-loc of player, z-loc of player, world of player)

 

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282096
Udostępnij na innych stronach

  • 0
8 minut temu, Nitrusiniski napisał:

chodz dokładnie o tą linike pierwszy raz sie spotyka z pętlą while i nie wiem jak wyznaczycz kordynaty miedzy obiektem losowania a graczem

Pętla while: https://dev.bukkit.org/projects/skript/pages/loop-explanation

Losowanie liczby: https://skriptlang.github.io/Skript/expressions.html#ExprRandomNumber

12 minut temu, Nitrusiniski napisał:

Jesli chodzi o ten czas to chodzi mi o to ze gdy gracz kliknie patykiem na becona uruchamia sie losowanie które trwa przez 2 minuty i potem trzeba nowego patyka aby znow zrobic losowanie

Nie rozumiem w jaki sposób te losowanie ma trwać dwie minuty.

Co do patyka, podrzuciłem ci linijkę, którą to załatwisz.

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282098
Udostępnij na innych stronach

  • 0
5 minut temu, Kormic napisał:

Pętla while: https://dev.bukkit.org/projects/skript/pages/loop-explanation

Losowanie liczby: https://skriptlang.github.io/Skript/expressions.html#ExprRandomNumber

Nie rozumiem w jaki sposób te losowanie ma trwać dwie minuty.

Co do patyka, podrzuciłem ci linijkę, którą to załatwisz.

rozpisze to na nowo:

1.Jesli gracz jest na swiecie [dom] i jesli podejdzie do becona mają patyk o nazwie [Patyk] to Uruchamia losowanie/event który bedzie trwał przez 2 minuty

2. Na Losowanie/Event kordynatach x3 y5 z3 pojawiaja się przedmioty wyznaczone przezemnie np. [diament-zloto-kamien] 

3.Po 2 minutach Losowanie/Event konczy sie i aby go ponownie uruchomic należy kliknąć patykiem o nazwie [Patyk] w becona.

4.Jesli jakis gracz w trakcie eventu chciał by klinąc patykiem o nazwie [Patyk] w becona to event który inny gracz uruchomił działa dopóki obecny sie nie skonczy 

Czy teraz zrozumiałe?

 

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282101
Udostępnij na innych stronach

  • 0
6 minut temu, Nitrusiniski napisał:

Czy teraz zrozumiałe?

W takim razie po co było ci te losowanie koordynatów?

Co do sprawdzania świata gracza, użyj warunku 'is in world'.

player is in world "[dom]"

Sprawdzanie czy gracz ma przedmiot, zrobiłeś na samym początku.

Już nieco bardziej rozumiem, ale nadal nie wiem jak ma to działać na zasadzie tych dwóch minut. Masz na myśli, że wszystko losuje się od razu i jest cooldown 2 minuty czy też w ciągu tych dwóch minut ma wyrzucać przedmioty z jakimiś odstępami czasowymi?

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282103
Udostępnij na innych stronach

  • 0
5 minut temu, Nitrusiniski napisał:

gracz jest na swiecie [dom]

player's world = "dom"

 

10 minut temu, Nitrusiniski napisał:

jesli podejdzie

podjedzie? pierwotnie była mowa o kliknięciu

11 minut temu, Nitrusiniski napisał:

mają patyk o nazwie [Patyk]

if player's tool is stick named "patyk":

 

 

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282106
Udostępnij na innych stronach

  • 0
2 godziny temu, Kormic napisał:

W takim razie po co było ci te losowanie koordynatów?

Co do sprawdzania świata gracza, użyj warunku 'is in world'.



player is in world "[dom]"

Sprawdzanie czy gracz ma przedmiot, zrobiłeś na samym początku.

Już nieco bardziej rozumiem, ale nadal nie wiem jak ma to działać na zasadzie tych dwóch minut. Masz na myśli, że wszystko losuje się od razu i jest cooldown 2 minuty czy też w ciągu tych dwóch minut ma wyrzucać przedmioty z jakimiś odstępami czasowymi?

"Już nieco bardziej rozumiem, ale nadal nie wiem jak ma to działać na zasadzie tych dwóch minut. Masz na myśli, że wszystko losuje się od razu i jest cooldown 2 minuty czy też w ciągu tych dwóch minut ma wyrzucać przedmioty z jakimiś odstępami czasowymi?" tak o mi o to zeby w ciągu dwóch minut ma wyrzucac przedmioty np co 20 sekund po jednym przedmiocie

Edytowane przez xNightPower_
Nieaktywny

Naprawiam formatowanie na ciemnym stylu.

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282168
Udostępnij na innych stronach

  • 0
1 minutę temu, Nitrusiniski napisał:

"Już nieco bardziej rozumiem, ale nadal nie wiem jak ma to działać na zasadzie tych dwóch minut. Masz na myśli, że wszystko losuje się od razu i jest cooldown 2 minuty czy też w ciągu tych dwóch minut ma wyrzucać przedmioty z jakimiś odstępami czasowymi?" tak o mi o to zeby w ciągu dwóch minut ma wyrzucac przedmioty np co 20 sekund po jednym przedmiocie

No cóż, wtedy zadziała to tylko dla 7 przedmiotów.

1 - 20 sekund - 2 - 20 sekund - 3 - 20 sekund - 4 - 20 sekund - 5 - 20 sekund - 6 - 20 sekund - 7

Na twoim miejscu zrobiłbym to w ten sposób, że dzielimy 2400 (liczba ticków w 2 minutach) i dzielimy ją przez (ilość przedmiotów - 1). Następnie używamy funkcji floor() do zaokrąglenia w dół wyniku tego dzielenia i pod koniec robimy taką pętlę:

loop {_itemy::*}:
	drop loop-value at {_loc}
	wait "%{_ticks} ticks%" parsed as timepsan

Powinieneś załapać.

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282189
Udostępnij na innych stronach

  • 0
12 minut temu, Kormic napisał:

No cóż, wtedy zadziała to tylko dla 7 przedmiotów.


1 - 20 sekund - 2 - 20 sekund - 3 - 20 sekund - 4 - 20 sekund - 5 - 20 sekund - 6 - 20 sekund - 7

Na twoim miejscu zrobiłbym to w ten sposób, że dzielimy 2400 (liczba ticków w 2 minutach) i dzielimy ją przez (ilość przedmiotów - 1). Następnie używamy funkcji floor() do zaokrąglenia w dół wyniku tego dzielenia i pod koniec robimy taką pętlę:


loop {_itemy::*}:
	drop loop-value at {_loc}
	wait "%{_ticks} ticks%" parsed as timepsan

Powinieneś załapać.

command /setlosowanie [<text>]:
	permission: setlosowanie
	permission message: &cBrak
	trigger:
		if player has permission "setlosowanie":
			set {location.losowanie} to location of player
		if {location.losowanie} is set:
			set {_loc} to "%x-coordinate of player%, %y-coordinate of player%, %z-coordinate of player%"
			if "%x-coordinate of player%, %y-coordinate of player%, %z-coordinate of player%" is {_loc}:
				teleport player to {location.losowanie}
				send "&atak"
				
on right click on beacon:
	player is in world "all"
	if player has stick named "&cLosowanie":
		remove stick named "&cLosowanie" from player
		broadcast "test"
	else:
		send "brak test" to player
		

Zrobiłem coś takiego ale nie wiem co dalej zrobić i nie wiem gdzie wstawić to co ty napisałes 

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282194
Udostępnij na innych stronach

  • 0
1 minutę temu, Nitrusiniski napisał:

Zrobiłem coś takiego ale nie wiem co dalej zrobić i nie wiem gdzie wstawić to co ty napisałes 

A gdzie masz listę z przedmiotami?

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282196
Udostępnij na innych stronach

  • 0
Teraz, Nitrusiniski napisał:

yyy nie wiem jak ją zrobić ale chciałbym zeby np było 

kamien nazwa kamyczek

diament nazwa Diamenciki

No to dodaj je sobie do jakiejś listy, a następnie możesz użyć kod podesłany przez mnie do losowania.

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282199
Udostępnij na innych stronach

  • 0
6 minut temu, Kormic napisał:

No to dodaj je sobie do jakiejś listy, a następnie możesz użyć kod podesłany przez mnie do losowania.

command /setlosowanie [<text>]:
	trigger:
		if player has permission "setlosowanie":
			set {location.losowanie} to location of player
		if {location.losowanie} is set:
			set {_loc} to "%x-coordinate of player%, %y-coordinate of player%, %z-coordinate of player%"
			if "%x-coordinate of player%, %y-coordinate of player%, %z-coordinate of player%" is {_loc}:
				teleport player to {location.losowanie}
				send "&atak"
				
on right click on beacon:
	player is in world "all"
	loop {_itemy::*}:
		drop diamond named "&ctesst" at {location.losowanie}
		drop stone named "&8test" at {location.losowanie}
#Błąd		wait "%{_ticks} ticks%" parsed as timepsan 
		if player has stick named "&cLosowanie":
			remove stick named "&cLosowanie" from player
			broadcast "test"
		else:
			send "brak test" to player

O cos takiego chodziło, zaznaczyłem błąd pod #Błąd

Edytowane przez Nitrusiniski
Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282203
Udostępnij na innych stronach

  • 0
4 minuty temu, Nitrusiniski napisał:

O cos takiego chodziło, zaznaczyłem błąd pod #Błąd

Nigdzie nie zrobiłeś tego dzielenia, o którym wspomniałem wyżej. Również nigdzie nie ustawiłeś listy {_itemy::*}.

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282208
Udostępnij na innych stronach

  • 0
4 minuty temu, Kormic napisał:

Nigdzie nie zrobiłeś tego dzielenia, o którym wspomniałem wyżej. Również nigdzie nie ustawiłeś listy {_itemy::*}.

jak miałem to zrobic skoro nie wiem co gdzie wstawic mam

 

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282210
Udostępnij na innych stronach

  • 0
1 minutę temu, Nitrusiniski napisał:

jak miałem to zrobic skoro nie wiem co gdzie wstawic mam

 

Musisz sobie zrobić jakąś zmienną, która będzie kontrolowała czy jest losowanie, czy też nie. Przed rozpoczęciem losowania sprawdzasz czy zmienna jest ustawiona - jeżeli tak, zatrzymujesz skrypt.

Następnie ustawiasz sobie listę {_itemy::*}, do której wrzucasz wszystkie twoje przedmioty.

Pamiętaj o dzieleniu mającym na celu zrobienie dokładnych przerw czasowych między losowaniem przedmiotów, opisałem je wyżej.

Co do błędu, wstawiłem procent w złym miejscu.

wait "%{_ticks}% ticks" parsed as timespan

Tak jest poprawnie.

Odnośnik do komentarza
https://skript.pl/temat/44902-dopisek-sk/#findComment-282221
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.

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

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