Skocz do zawartości
  • 0

restore inventory of player from - nie działa


Pytanie

Pluginy: Skript, SkQuery, Essentials
Wersja silnika: Spigot 1.11.2-R0.1
Wersja minecrafta: 1.11.2
Wersje dodatkow do skripta: Skript  2.2-dev25, SkQuery 3.5.6a-Lime
Bledy/opis bledu: Nie nie wykonuje polecenia restore inventory of player from {inv.%player%}
Screeny: http://screenshot.sh/mFuum36wmUmP8
Kod skryptu:

command /zapisz:
	trigger:
		if player has permission "zapiszoddaj.admin":
			set {inv.%player%} to serialized inventory of player
command /oddaj:
	trigger:
		if player has permission "zapiszoddaj.admin":
			restore inventory of player from {inv.%player%}

To jest tylko przykład.

Przy /sk reload nie wywala błędu, przy wpisywaniu "/zapisz" tak samo, ale przy "/oddaj" wywala http://screenshot.sh/mFuum36wmUmP8

Chcę by przy spełnieniu warunku zapisało eq gracza i przy innym go zwróciło. Cały kod, w który chcę to wpleść jest dość rozbudowany i działa więc chyba nie ma sensu zaśmiecać tematu zbędnymi linijkami. 

Może czegoś nie dograłem, albo nie wiem bo składnia jest chyba dobra...

Odnośnik do komentarza
https://skript.pl/temat/17365-restore-inventory-of-player-from-nie-dzia%C5%82a/
Udostępnij na innych stronach

7 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Natrafiono na naganny błąd podczas wykonywania tej komendy. Dokładniej został wyrzucony wyjątek (exception), który nie został przewidziany w kodzie. Logi serwera jaki i konsola zawierają dokładne informacje na ten temat. Wyślij je tutaj na forum w <code>, a wszystkiemu zaradzimy Towarzyszu! :)

Odnośnik do komentarza
https://skript.pl/temat/17365-restore-inventory-of-player-from-nie-dzia%C5%82a/#findComment-118849
Udostępnij na innych stronach

  • 0
Spoiler

[16:52:52 INFO]: Kruku wywołał komendę: /oddaj
[16:52:52 INFO]: Kruku [2dbdef97-ba45-30a2-963b-d6903cd46e4c]: /oddaj
[16:52:52 ERROR]: #!#!
[16:52:52 ERROR]: #!#! [Skript] Severe Error:
[16:52:52 ERROR]: #!#!
[16:52:52 ERROR]: #!#! If you're developing an add-on for Skript this likely means that you have done something wrong.
[16:52:52 ERROR]: #!#! If you're a server admin however please go to https://github.com/bensku/Skript/issues/
[16:52:52 ERROR]: #!#! and check whether this error has already been reported.
[16:52:52 ERROR]: #!#! If not please create a new ticket with a meaningful title, copy & paste this whole error into it (or use paste service),
[16:52:52 ERROR]: #!#! and describe what you did before it happened and/or what you think caused the error.
[16:52:52 ERROR]: #!#! If you think that it's a trigger that's causing the error please post the trigger as well.
[16:52:52 ERROR]: #!#! By following this guide fixing the error should be easy and done fast.
[16:52:52 ERROR]: #!#!
[16:52:52 ERROR]: #!#! Stack trace:
[16:52:52 ERROR]: #!#! java.lang.IllegalArgumentException: Chests must have a size that is a multiple of 9!
[16:52:52 ERROR]: #!#!at org.apache.commons.lang.Validate.isTrue(Validate.java:136)
[16:52:52 ERROR]: #!#!at org.bukkit.craftbukkit.v1_11_R1.CraftServer.createInventory(CraftServer.java:1524)
[16:52:52 ERROR]: #!#!at com.w00tmast3r.skquery.util.serialization.InventorySerialUtils.fromBase64(InventorySerialUtils.java:34)
[16:52:52 ERROR]: #!#!at com.w00tmast3r.skquery.elements.effects.EffDeserializeReturn.execute(EffDeserializeReturn.java:28)
[16:52:52 ERROR]: #!#!at ch.njol.skript.lang.Effect.run(Effect.java:54)
[16:52:52 ERROR]: #!#!at ch.njol.skript.lang.TriggerItem.walk(TriggerItem.java:65)
[16:52:52 ERROR]: #!#!at ch.njol.skript.lang.TriggerItem.walk(TriggerItem.java:93)
[16:52:52 ERROR]: #!#!at ch.njol.skript.lang.Trigger.execute(Trigger.java:53)
[16:52:52 ERROR]: #!#!at ch.njol.skript.command.ScriptCommand.execute2(ScriptCommand.java:222)
[16:52:52 ERROR]: #!#!at ch.njol.skript.command.ScriptCommand.execute(ScriptCommand.java:184)
[16:52:52 ERROR]: #!#!at ch.njol.skript.command.Commands.handleCommand(Commands.java:270)
[16:52:52 ERROR]: #!#!at ch.njol.skript.command.Commands$1.onPlayerCommand(Commands.java:165)
[16:52:52 ERROR]: #!#!at sun.reflect.GeneratedMethodAccessor266.invoke(Unknown Source)
[16:52:52 ERROR]: #!#!at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[16:52:52 ERROR]: #!#!at java.lang.reflect.Method.invoke(Method.java:498)
[16:52:52 ERROR]: #!#!at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302)
[16:52:52 ERROR]: #!#!at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
[16:52:52 ERROR]: #!#!at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502)
[16:52:52 ERROR]: #!#!at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487)
[16:52:52 ERROR]: #!#!at net.minecraft.server.v1_11_R1.PlayerConnection.handleCommand(PlayerConnection.java:1336)
[16:52:52 ERROR]: #!#!at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:1179)
[16:52:52 ERROR]: #!#!at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:45)
[16:52:52 ERROR]: #!#!at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:1)
[16:52:52 ERROR]: #!#!at net.minecraft.server.v1_11_R1.PlayerConnectionUtils$1.run(SourceFile:13)
[16:52:52 ERROR]: #!#!at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[16:52:52 ERROR]: #!#!at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[16:52:52 ERROR]: #!#!at net.minecraft.server.v1_11_R1.SystemUtils.a(SourceFile:46)
[16:52:52 ERROR]: #!#!at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:747)
[16:52:52 ERROR]: #!#!at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:399)
[16:52:52 ERROR]: #!#!at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:678)
[16:52:52 ERROR]: #!#!at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:576)
[16:52:52 ERROR]: #!#!at java.lang.Thread.run(Thread.java:745)
[16:52:52 ERROR]: #!#!
[16:52:52 ERROR]: #!#! Version Information:
[16:52:52 ERROR]: #!#!Skript: 2.2-dev25
[16:52:52 ERROR]: #!#!Bukkit: 1.11.2-R0.1-SNAPSHOT
[16:52:52 ERROR]: #!#!Minecraft: 1.11.2
[16:52:52 ERROR]: #!#!Java: 1.8.0_91 (Java HotSpot(TM) 64-Bit Server VM 25.91-b14)
[16:52:52 ERROR]: #!#!OS: Linux amd64 3.16.0-4-amd64
[16:52:52 ERROR]: #!#!
[16:52:52 ERROR]: #!#! Running CraftBukkit: false
[16:52:52 ERROR]: #!#!
[16:52:52 ERROR]: #!#! Current node: null
[16:52:52 ERROR]: #!#! Current item: deserialize return
[16:52:52 ERROR]: #!#!
[16:52:52 ERROR]: #!#! Thread: Server thread
[16:52:52 ERROR]: #!#!
[16:52:52 ERROR]: #!#! End of Error.
[16:52:52 ERROR]: #!#!

 

Pytanie poza konkursem, Logi pokazują Bukkit, a hosting Spigot (hosting Enderchest). To to samo?

Odnośnik do komentarza
https://skript.pl/temat/17365-restore-inventory-of-player-from-nie-dzia%C5%82a/#findComment-118850
Udostępnij na innych stronach

  • 0
4 godziny temu, Kruku napisał:

Logi pokazują Bukkit

O___o Logi pokazują zdarzenia z serwera.

 

4 godziny temu, Kruku napisał:

a hosting Spigot (hosting Enderchest)

O___o Spigot to nie hosting - Spigot to fork, czyli "inna kontynuacja" Bukkita.

 

Mamy tutaj typowy błąd pluginu. Autor nie przewidział, że w jakiś sposób będzie można stworzyć ekwipunek, którego ilość slotów nie będzie dzielona przez 9. Dlaczego 9? - bo tyle slotów zajmuje jeden rząd ekwipunku. Nie jest to więc błąd Twój, ani Twojego serwera Towarzyszu, a błąd programisty, któremu umknęła się uwaga na taką sytuację.

 

Jeżeli chcemy jeden rząd ekwipunku to dajemy 9, ponieważ zawiera ono 9 slotów.

+-----------------------------------+
| Inventory                         |
+---+---+---+---+---+---+---+---+---+
| x | x | x | x | x | x | x | x | x |
+---+---+---+---+---+---+---+---+---+

 

Jeżeli chcemy dwa rzędy to mnożymy 9 przez 2 i mamy 18.

+-----------------------------------+
| Inventory                         |
+---+---+---+---+---+---+---+---+---+
| x | x | x | x | x | x | x | x | x |
+---+---+---+---+---+---+---+---+---+
| x | x | x | x | x | x | x | x | x |
+---+---+---+---+---+---+---+---+---+

I tak dalej...

Odnośnik do komentarza
https://skript.pl/temat/17365-restore-inventory-of-player-from-nie-dzia%C5%82a/#findComment-118897
Udostępnij na innych stronach

  • 0

Logi pokazują Bukkit - > w skopiowanym fragmencie logów, w linijce gdzie wypisane są wersje, jest napisane Bukkit.

(...)hosting Spigot - > w panelu administratora, stworzonym przez hosting Enderchest jest napisane Spigot.

Trochę się nie zrozumieliśmy, ale odpowiedź na pozakonkursowe pytanie mam więc dzięki ;)

 

Ci do twojej wypowiedzi na główny temat:

Czyli mam formatować każdy slot w eq do innej zmiennej i potem ponownie sloty przeformatować na wcześniej zapisane zmienne? o.o

Nie powiem, że jest to zadanie nie do wykonania, ale nie ma jakiegoś innego sposobu (nie obrażę się jeśli komuś z pasją chciało się coś takiego napisać :D).

Nie do końca rozumiem to co napisałeś w "<>". To jest taki przykład czy jakiś nowy nieznany mi sposób pisania *.sk?

Odnośnik do komentarza
https://skript.pl/temat/17365-restore-inventory-of-player-from-nie-dzia%C5%82a/#findComment-118936
Udostępnij na innych stronach

  • 0

Przedstawiłem tylko wizualnie ekwipunek i jaką liczbę slotów powinno posiadać. Podany błąd jest wynikiem błędu w tym pluginie. Najlepiej będzie zgłosić to autorowi pluginu, aby mógł to naprawić.

Nie wiem co masz zrobić. Z poziomu pluginu byłoby to banalnie proste. Wystarczy pobrać zawartość ekwipunku jako tablica i zapisać do pliku. W drugim kierunku należałoby pobrać dane z pliku, stworzyć z nich tablicę oraz ustawić ją jako zawartość ekwipunku.

PS: To nie są żadne logi Bukkit. Jest to jedynie informacja, że ten serwer implementuje taką wersję Bukkit API.

Odnośnik do komentarza
https://skript.pl/temat/17365-restore-inventory-of-player-from-nie-dzia%C5%82a/#findComment-118961
Udostępnij na innych stronach

  • 0

Połączyłem całość z pluginem InvRecover i jak na razie działa stabilnie.

 

command /zapisz:

trigger:

set {zapisz::%player%}  true

on death:

If {zapisz::%player%} is set:

clear drops

on respawn:

if {zapisz::%player%} is set:

execute console command "/ir %player%"

clear {zapisz::%player%}

(to jest uproszczona wersja tego co chciałem docelowo zrobić)

 

To całe "restore (...)" skripts próbuje użyć jako komendy bo po wisaniu tego wyrażenia właśnie jako komendy powstaje dokładnie ten sam błąd.

 

Na razie osiągnąłem swój cel więc myślę, że temat można uznać za zamknięty. Dzieki za pomoc :)

Odnośnik do komentarza
https://skript.pl/temat/17365-restore-inventory-of-player-from-nie-dzia%C5%82a/#findComment-119038
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ę...