Skocz do zawartości
  • 0

Skrypt na przepustki - pomoc w błędzie


Pytanie

Witam, w 2020 dodałem post z prośbą o napisanie owego skryptu, jednakże dzisiaj chciałem do niego wrócić lecz niestety Tuske nie jest wspierane na wyzszej wersji, korzystam z 1.21. Aktualnie jako addona do gui używam skript-gui-1.3. Skrypt najprościej mówiąc ma działać tak, że gdy gracz kliknie na npc o danej nazwie, otwiera mu sie gui z papierem po środku, który nazywa się "Bilet do piekła" a kosztuje on 100$, do ekonomii używam vault. Po kliknieciu na niego zabiera mu z konta 100$ i teleportuje do netheru, a jesli nie ma 100$ to jest informacja o tym, że np "Nie jesteś godzien przejścia przez bramy piekła".
Z góry dziękuje za wszelką pomoc, docenie to jak najmocniej! <3  
 

function bBuyTicket(player: player, type: text, world: text, price: integer):
	if {_player}'s balance < {_price}:
		send "Nie masz 100$." to {_player}
		stop
	close {_player}'s inventory
	remove {_price} from {_player}'s balance
	execute console command "mv tp %{_player}% %{_world}%"
	send "Kupiłeś bilet %{_type}%." to {_player}

on click on entity:
	if name of clicked-entity is not "&x&F&F&0&0&0&0&lC&x&B&F&0&0&0&0&lh&x&8&0&0&0&0&0&la&x&4&0&0&0&0&0&lr&x&0&0&0&0&0&0&lo&x&0&0&0&0&0&0&ln":
		stop
	open virtual chest with 1 row named "&x&F&F&0&0&0&0&lZ&x&E&B&0&0&0&0&la&x&D&8&0&0&0&0&lk&x&C&4&0&0&0&0&lu&x&B&1&0&0&0&0&lp &x&8&9&0&0&0&0&lp&x&7&6&0&0&0&0&lr&x&6&2&0&0&0&0&lz&x&4&E&0&0&0&0&le&x&3&B&0&0&0&0&lp&x&2&7&0&0&0&0&lu&x&1&4&0&0&0&0&ls&x&0&0&0&0&0&0&lt&x&0&0&0&0&0&0&lk&x&0&0&0&0&0&0&le" to player
	format gui slot 4 of player with paper named "Bilet do piekła" with lore "wart 100$" to run function bBuyTicket(player, "nether", "world_nether", 100)

image.png?ex=66957a39&is=669428b9&hm=437image.png?ex=66957a39&is=669428b9&hm=9e4

Odnośnik do komentarza
https://skript.pl/temat/57862-skrypt-na-przepustki-pomoc-w-b%C5%82%C4%99dzie/
Udostępnij na innych stronach

3 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 1
2 godziny temu, Keneqi napisał:

Witam, w 2020 dodałem post z prośbą o napisanie owego skryptu, jednakże dzisiaj chciałem do niego wrócić lecz niestety Tuske nie jest wspierane na wyzszej wersji, korzystam z 1.21. Aktualnie jako addona do gui używam skript-gui-1.3. Skrypt najprościej mówiąc ma działać tak, że gdy gracz kliknie na npc o danej nazwie, otwiera mu sie gui z papierem po środku, który nazywa się "Bilet do piekła" a kosztuje on 100$, do ekonomii używam vault. Po kliknieciu na niego zabiera mu z konta 100$ i teleportuje do netheru, a jesli nie ma 100$ to jest informacja o tym, że np "Nie jesteś godzien przejścia przez bramy piekła".
Z góry dziękuje za wszelką pomoc, docenie to jak najmocniej! <3  

Proszę. Naniosłem w skrypcie kilka poprawek, ale logika działania pozostała ta sama.

import:
	net.citizensnpcs.api.event.NPCClickEvent

options:
	NPCName: <#FF0000>&lA<#00FF00>B<#0000FF>C
	GUIName: <#FF0000>&lD<#00FF00>E<#0000FF>F

local function bBuyTicket(p: player, type: text, world: text, price: number):
	if {_p}'s balance < {_price}:
		send "Nie jesteś godzien przejścia przez bramy piekła." to {_p}
		stop
	close {_p}'s inventory
	remove {_price} from {_p}'s balance
	execute console command "mv tp %{_p}% %{_world}%"
	send "Kupiłeś bilet %{_type}%." to {_p}

on NPCClickEvent:
	set {_npc} to event.getNPC()
	{_npc}.getFullName() is "{@NPCName}"
	set {_p} to event.getClicker()
	set {_gui} to chest inventory with 1 row named "{@GUIName}"
	set slot 4 of {_gui} to paper named "Bilet do piekła" with lore "wart 100$"
	open {_gui} to {_p}
	
on inventory click:
	event-inventory is not player's inventory
	name of event-inventory is "{@GUIName}"
	cancel event
	if index of clicked slot is 4:
		bBuyTicket(player, "nether", "world_nether", 100)

Teraz opiszę pokrótce działanie skryptu i uzasadnię dlaczego napisałem go w ten sposób. Myślę, że opisanie działania zaczynając od kliknięcia na NPC będzie najbardziej sensowne.

Więc tak. Zdarzenie 'on click on entity' będzie działało tylko dla kliknięć prawego przycisku myszy, ponieważ kliknięcie lewym przyciskiem myszy na byt jest rejestrowane przez listener zdarzenia 'on damage'. Skript zresztą o tym ostrzegł na jednym z załączonych obrazów. Aby to ominąć, moglibyśmy nasłuchiwać jednocześnie do zdarzeń 'on damage' i 'on right click on entity', jednakże twórcy pluginu Citizens oferują narzędzia ułatwiające pracę twórców pluginów (a więc i częściowo skryptów), które określamy mianem API. Citizens API pozwala na nasłuchiwanie do zdarzenia NPCClickEvent, które rejestruje każde kliknięcie na NPC, więc problem jest rozwiązany.

Aby jednak wykorzystać API, musimy skorzystać z dodatku skript-reflect, który pozwala na korzystanie z (prawie) wszystkich instrukcji udostępnianych przez pluginy i przez Javę, więc jest to obiektywnie najpotężniejszy dodatek do Skripta, który daje najwięcej możliwości, ponieważ de facto to sam skrypter wytycza granice.

Wróćmy do opisu. Dodałem dwa załączniki do dokumentacji Citizens API, które pokazują dlaczego i jakie metody (dla niewtajemniczonych, metody dla uproszczenia można traktować jak funkcje przypisane do klasy) wykorzystuję.

Samo tworzenie GUI zalecam realizować przy pomocy samego Skripta, bez użycia innych dodatków. Myślę, że powyższy kod pokazuje jak należy to robić. Inne przykłady wykorzystania można znaleźć tutaj i tutaj.

Co do samej funkcji, uczyniłem ją lokalną. Więcej o lokalnych funkcjach może Pan przeczytać zapoznając się z tą odpowiedzią, w której opisałem czym one się różnią od funkcji zwykłych (globalnych) i do czego mogą być stosowane.

Ostatnia zmiana, o której chciałem wspomnieć to wykorzystanie heksadecymalnych kodów kolorów zamiast wielokrotnego używania podstawowych kodów kolorów (choć może to się nie przydać, wszystko zależy od tego czy wspiera je również plugin Citizens). Więcej informacji o hex kolorach można znaleźć w dokumentacji.
Dodatkowo, przeniosłem nazwy NPC i GUI do sekcji 'options', aby można było łatwo je modyfikować w razie potrzeby. Poza tym, ładniej to wygląda gdy nazwy nie są bezpośrednio wklejone do kodu.

Jeżeli jest Pan ciekaw niektórych linijek w kodzie, zachęcam do zapoznania się z dokumentacjami Skripta i dodatku skript-reflect.

Pozdrawiam.

Odnośnik do komentarza
https://skript.pl/temat/57862-skrypt-na-przepustki-pomoc-w-b%C5%82%C4%99dzie/#findComment-343894
Udostępnij na innych stronach

  • 0
19 minut temu, Kormic napisał:

Proszę. Naniosłem w skrypcie kilka poprawek, ale logika działania pozostała ta sama.

import:
	net.citizensnpcs.api.event.NPCClickEvent

options:
	NPCName: <#FF0000>&lA<#00FF00>B<#0000FF>C
	GUIName: <#FF0000>&lD<#00FF00>E<#0000FF>F

local function bBuyTicket(p: player, type: text, world: text, price: number):
	if {_p}'s balance < {_price}:
		send "Nie jesteś godzien przejścia przez bramy piekła." to {_p}
		stop
	close {_p}'s inventory
	remove {_price} from {_p}'s balance
	execute console command "mv tp %{_p}% %{_world}%"
	send "Kupiłeś bilet %{_type}%." to {_p}

on NPCClickEvent:
	set {_npc} to event.getNPC()
	{_npc}.getFullName() is "{@NPCName}"
	set {_p} to event.getClicker()
	set {_gui} to chest inventory with 1 row named "{@GUIName}"
	set slot 4 of {_gui} to paper named "Bilet do piekła" with lore "wart 100$"
	open {_gui} to {_p}
	
on inventory click:
	event-inventory is not player's inventory
	name of event-inventory is "{@GUIName}"
	cancel event
	if index of clicked slot is 4:
		bBuyTicket(player, "nether", "world_nether", 100)

Teraz opiszę pokrótce działanie skryptu i uzasadnię dlaczego napisałem go w ten sposób. Myślę, że opisanie działania zaczynając od kliknięcia na NPC będzie najbardziej sensowne.

Więc tak. Zdarzenie 'on click on entity' będzie działało tylko dla kliknięć prawego przycisku myszy, ponieważ kliknięcie lewym przyciskiem myszy na byt jest rejestrowane przez listener zdarzenia 'on damage'. Skript zresztą o tym ostrzegł na jednym z załączonych obrazów. Aby to ominąć, moglibyśmy nasłuchiwać jednocześnie do zdarzeń 'on damage' i 'on right click on entity', jednakże twórcy pluginu Citizens oferują narzędzia ułatwiające pracę twórców pluginów (a więc i częściowo skryptów), które określamy mianem API. Citizens API pozwala na nasłuchiwanie do zdarzenia NPCClickEvent, które rejestruje każde kliknięcie na NPC, więc problem jest rozwiązany.

Aby jednak wykorzystać API, musimy skorzystać z dodatku skript-reflect, który pozwala na korzystanie z (prawie) wszystkich instrukcji udostępnianych przez pluginy i przez Javę, więc jest to obiektywnie najpotężniejszy dodatek do Skripta, który daje najwięcej możliwości, ponieważ de facto to sam skrypter wytycza granice.

Wróćmy do opisu. Dodałem dwa załączniki do dokumentacji Citizens API, które pokazują dlaczego i jakie metody (dla niewtajemniczonych, metody dla uproszczenia można traktować jak funkcje przypisane do klasy) wykorzystuję.

Samo tworzenie GUI zalecam realizować przy pomocy samego Skripta, bez użycia innych dodatków. Myślę, że powyższy kod pokazuje jak należy to robić. Inne przykłady wykorzystania można znaleźć tutaj i tutaj.

Co do samej funkcji, uczyniłem ją lokalną. Więcej o lokalnych funkcjach może Pan przeczytać zapoznając się z tą odpowiedzią, w której opisałem czym one się różnią od funkcji zwykłych (globalnych) i do czego mogą być stosowane.

Ostatnia zmiana, o której chciałem wspomnieć to wykorzystanie heksadecymalnych kodów kolorów zamiast wielokrotnego używania podstawowych kodów kolorów. Więcej informacji o hex kolorach można znaleźć w dokumentacji.
Dodatkowo, przeniosłem nazwy NPC i GUI do sekcji 'options', aby można było łatwo je modyfikować w razie potrzeby. Poza tym, ładniej to wygląda gdy nazwy nie są bezpośrednio wklejone do kodu.

Jeżeli jest Pan ciekaw niektórych linijek w kodzie, zachęcam do zapoznania się z dokumentacjami Skripta i dodatku skript-reflect.

Pozdrawiam.

Dziękuje za pomoc oraz wyjaśnienie! <3 Oznaczyłem odpowiedź jako najlepszą!

Odnośnik do komentarza
https://skript.pl/temat/57862-skrypt-na-przepustki-pomoc-w-b%C5%82%C4%99dzie/#findComment-343895
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ę...