Skocz do zawartości
  • 0

/bloki - prosba o przerobienie skryptu


SkrytyZiomus
 Udostępnij

Pytanie

function Block(p: player, 3: item, 1: item, 2: item):
    set {_n} to amount of {_1} in {_p}'s inventory
    if {_n} >= 9:
        set {_n} to rounded down {_n}/9
        remove ("%{_n}*9% %{_1}%" parsed as item) from {_p}
        add ("%{_n}% %{_2}%" parsed as item) to {_p}

command /bloczki [<text>]:
	trigger:
		wait 5 tick
		open chest with 2 rows named "Bloki" to player
		set player's current inventory's slot 15 to enchanted golden apple named "&fTWORZENIE KOXA"
		set player's current inventory's slot 1 to diamond block named "&fTWORZENIE BLOKOW DIAMENTOW"
		set player's current inventory's slot 2 to emerald block named "&fTWORZENIE BLOKOW EMERALD"
		stop
on inventory click:
	if inventory name of current inventory of player is "Bloki":
		cancel event
		if inventory type of clicked inventory is "CHEST":
			set {_2} to ("%player's current inventory's slot slot%" parsed as item)
			if clicked slot is 1:
				set {_1} to ("Diamond" parsed as item)
			if clicked slot is 2:
				set {_1} to ("Emerald" parsed as item)
			if clicked slot is 15:
				set {_3} to ("8 gold block and apple" parsed as item)
			Block(player, {_1}, {_2})
			wait 1 tick
			close player's inventory

moglby ktos przerobic na to ze gdy klikne np slot 15 to craftuje mi koxy? za 8 blokow zlota i jedno jablko, jesli moge zrobic np 10 koxow to zrobi 10 i zabierze tyle blokow zlota i jablek?

Edytowane przez CountingDogs
CountingDogs

Poprawiam formatowanie na ciemnym stylu.

Notatka dodana przez CountingDogs

Odnośnik do komentarza
Udostępnij na innych stronach

15 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
8 godzin temu, SkrytyZiomus napisał:

moglby ktos przerobic na to ze gdy klikne np slot 15 to craftuje mi koxy? za 8 blokow zlota i jedno jablko, jesli moge zrobic np 10 koxow to zrobi 10 i zabierze tyle blokow zlota i jablek?

Proszę, skrypt nietestowany. Poprawiłem również parę błędów w skrypcie i usunąłem niektóre dziwactwa jak chociażby niepotrzebne parse'owanie tekstu na item.

 

Edytowane przez CountingDogs
CountingDogs

Poprawiam formatowanie na ciemnym stylu w cytacie.

Notatka dodana przez CountingDogs

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
5 godzin temu, Kormic napisał:

Proszę, skrypt nietestowany. Poprawiłem również parę błędów w skrypcie i usunąłem niektóre dziwactwa jak chociażby niepotrzebne parse'owanie tekstu na item.

 


 
[18:57:16 ERROR]: '<...>' can only accept a single boolean (yes/no), not more (5.sk, line 11: while ({_n} >= 1) and ({_n1} >= 8):')
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
7 minut temu, SkrytyZiomus napisał:

 
[18:57:16 ERROR]: '<...>' can only accept a single boolean (yes/no), not more (5.sk, line 11: while ({_n} >= 1) and ({_n1} >= 8):')

U mnie to działa, no ale skoro u ciebie nie działa... No widzisz, gdybyś podał wersję, teraz nie musiałbym poprawiać skryptu.

Zamień funkcję exchangeToKox() na to:

function exchangeToKox(p: player):
	set {_n} to amount of apples in {_p}'s inventory
	set {_n1} to amount of gold blocks in {_p}'s inventory
	while {_n} >= 1:
		if {_n1} < 8:
			stop
		remove 1 from {_n}
		remove 8 from {_n1}
		remove 1 apple from {_p}'s inventory
		remove 8 gold blocks from {_p}'s inventory
		if {_p} has enough space for 1 enchanted golden apple:
			give {_p} 1 enchanted golden apple
		else:
			drop 1 enchanted golden apple at {_p}

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
1 minutę temu, Kormic napisał:

U mnie to działa, no ale skoro u ciebie nie działa... No widzisz, gdybyś podał wersję, teraz nie musiałbym poprawiać skryptu.

Zamień funkcję exchangeToKox() na to:


function exchangeToKox(p: player):
	set {_n} to amount of apples in {_p}'s inventory
	set {_n1} to amount of gold blocks in {_p}'s inventory
	while {_n} >= 1:
		if {_n1} < 8:
			stop
		remove 1 from {_n}
		remove 8 from {_n1}
		remove 1 apple from {_p}'s inventory
		remove 8 gold blocks from {_p}'s inventory
		if {_p} has enough space for 1 enchanted golden apple:
			give {_p} 1 enchanted golden apple
		else:
			drop 1 enchanted golden apple at {_p}

 

skript 2.2 fix ver v10.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
6 godzin temu, Kormic napisał:

Proszę, skrypt nietestowany. Poprawiłem również parę błędów w skrypcie i usunąłem niektóre dziwactwa jak chociażby niepotrzebne parse'owanie tekstu na item.

 

Przerobilem to w taki sposob i wszystko dziala ale chce jeszcze mozliwosc zrobienia refila na slocie 16.

function exchangeToBlocks(p: player, 1: item, 2: item):
	set {_n} to amount of {_1} in {_p}'s inventory
	if {_n} >= 9:
		set {_n} to rounded down {_n} / 9
		remove ({_n} * 9) of {_1} from {_p}'s inventory
		add {_n} of {_2} to {_p}
        
function exchangeToKox(p: player):
	set {_n} to amount of apples in {_p}'s inventory
	set {_n1} to amount of gold blocks in {_p}'s inventory
	while {_n} >= 1:
		if {_n1} < 8:
			stop
		remove 1 from {_n}
		remove 8 from {_n1}
		remove 1 apple from {_p}'s inventory
		remove 8 gold blocks from {_p}'s inventory
		if {_p} has enough space for 1 enchanted golden apple:
			give {_p} 1 enchanted golden apple
		else:
			drop 1 enchanted golden apple at {_p}

command /bloczki [<text>]:
	trigger:
		wait 5 tick
		open chest with 2 rows named "Bloki" to player
		set player's current inventory's slot 15 to enchanted golden apple named "&fTWORZENIE KOXA"
		set player's current inventory's slot 16 to golden apple named "&fTWORZENIE REFILA"
		set player's current inventory's slot 1 to diamond block named "&fTWORZENIE BLOKOW DIAMENTOW"
		set player's current inventory's slot 2 to emerald block named "&fTWORZENIE BLOKOW EMERALD"
        
on inventory click:
	inventory name of current inventory of player is "Bloki"
	cancel event
	if clicked slot is 1:
		exchangeToBlocks(player, diamond, diamond block)
	else if clicked slot is 2:
		exchangeToBlocks(player, emerald, emerald block)
	else if clicked slot is 15:
		exchangeToKox(player)
		if player doesn't have 1 apple and 8 gold block:
			send "Nie masz wszystkich przedmiotow."
		stop
	wait 1 tick
	close player's inventory

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
Teraz, SkrytyZiomus napisał:

Przerobilem to w taki sposob i wszystko dziala ale chce jeszcze mozliwosc zrobienia refila na slocie 16.

Pamiętaj, 1 zlecenie = 1 wątek. Chciałeś wymianę koxów, masz wymianę koxów. Działa? Działa. Tak więc myślę, że wątek do zamknięcia.

Jeżeli chcesz wymianę refilli w skrypcie, załóż w tym celu nowy wątek.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
4 minuty temu, Kormic napisał:

Pamiętaj, 1 zlecenie = 1 wątek. Chciałeś wymianę koxów, masz wymianę koxów. Działa? Działa. Tak więc myślę, że wątek do zamknięcia.

Jeżeli chcesz wymianę refilli w skrypcie, załóż w tym celu nowy wątek.

Moglbys mi jeszcze cos z tym zrobic, bo gdy zrobie koxy zamknie gui itd bo juz nie mam np. jablek ale jest dalej wiadomosc ze nie mam czegos cos nie moge tego zrobic ale kombinuje caly czas.

		if clicked slot is 15:
			if player doesn't have 1 apple and 8 gold block:
				send "1"
			exchangeToKox(player)
			close player's inventory
			stop

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
Teraz, SkrytyZiomus napisał:

Moglbys mi jeszcze cos z tym zrobic, bo gdy zrobie koxy zamknie gui itd bo juz nie mam np. jablek ale jest dalej wiadomosc ze nie mam czegos cos nie moge tego zrobic ale kombinuje caly czas.

Nie wiem dlaczego sobie to pozmieniałeś, było wszystko dobrze, a tak to się spaprało. Warunek sprawdzający ilość jabłek i złotych bloków powinien być przed linijką wywołującą funkcję.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
9 minut temu, Kormic napisał:

Nie wiem dlaczego sobie to pozmieniałeś, było wszystko dobrze, a tak to się spaprało. Warunek sprawdzający ilość jabłek i złotych bloków powinien być przed linijką wywołującą funkcję.

Bo gdy mialem jablka i bloki zlota to czasami pisalo ze nie mam ktoregos, i na odwrot mialem X ale nie mialem Y a pisalo ze nie mam X. XD

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
21 minut temu, Kormic napisał:

Nie wiem dlaczego sobie to pozmieniałeś, było wszystko dobrze, a tak to się spaprało. Warunek sprawdzający ilość jabłek i złotych bloków powinien być przed linijką wywołującą funkcję.

Dobra, jest niby tak jak bylo ale dalej tak samo jest ze pisze ze nie mam przedmiotow po zrobieniu blokow i zamknieciu gui.

		if clicked slot is 15:
			if player doesn't have 1 apple and 8 gold block:
				send "1"
			exchangeToKox(player)
			close player's inventory

I drugie pytanie, czemu else if clicked slot... a nie np if clicked slot? czym to sie rozni?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
Teraz, SkrytyZiomus napisał:

Dobra, jest niby tak jak bylo ale dalej tak samo jest ze pisze ze nie mam przedmiotow po zrobieniu blokow i zamknieciu gui.


		if clicked slot is 15:
			if player doesn't have 1 apple and 8 gold block:
				send "1"
			exchangeToKox(player)
			close player's inventory

I drugie pytanie, czemu else if clicked slot... a nie np if clicked slot? czym to sie rozni?

'else if' różni się od zwykłego 'if' tym, że jeżeli pierwszy warunek się nie zgadza, to dopiero przechodzi do tego drugiego. W zwykłym 'if' bez względu na to czy pierwszy warunek jest zgodny, czy też nie, i tak każdy kolejny warunek się wykona. Natomiast tak jak wcześniej napisałem, else if jest warunkiem wykonującym się, jeżeli poprzedni warunek nie przeszedł. Jeżeli 'else if' się nie zgadza, to idzie do następnego i tak aż do końca.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
4 minuty temu, Kormic napisał:

'else if' różni się od zwykłego 'if' tym, że jeżeli pierwszy warunek się nie zgadza, to dopiero przechodzi do tego drugiego. W zwykłym 'if' bez względu na to czy pierwszy warunek jest zgodny, czy też nie, i tak każdy kolejny warunek się wykona. Natomiast tak jak wcześniej napisałem, else if jest warunkiem wykonującym się, jeżeli poprzedni warunek nie przeszedł. Jeżeli 'else if' się nie zgadza, to idzie do następnego i tak aż do końca.

Czyli lepiej zebym uzyl w tym skrypcie else if tak?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
Teraz, SkrytyZiomus napisał:

Czyli lepiej zebym uzyl w tym skrypcie else if tak?

Else if ma dwa znaczenia: 

  • znaczenie wydajnościowe (przy 3 warunkach nic się nie wysypie).
  • ma również drugie znaczenie, opisałem je wyżej.

W twoim przypadku nie ma wpływu ani pierwsze, ani drugie.

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