Skocz do zawartości
  • 0

an entity cannot be saved i.e contents of the variable


pringles18
 Udostępnij

Pytanie

Siemka mam taki skrypt na antylogout i wyrzuca nawet nie tyle błąd co jakieś ostrzeżenie ale nie mam pojęcia jak je zlikwidować

normalnie bym to zostawił tylko że sam skrypt generuje jakieś errory podczas działania więc dla pewności chcę pierw naprawić poprawność kodu zanim znajdę błąd logiczny

Spoiler




variables:
	{antylogout.time} = 28 seconds

on damage:
	if attacker is player:
		if victim is player:
			set {fight.cooldown::%victim%} to now
			set {fight.cooldown::%attacker%} to now
			set {antylogout.lastplayer.%victim%} to attacker
			set {antylogout.lastplayer.%attacker%} to victim
			waze create bar "&fAntyLogout &cNie mozesz jeszcze wyjsc z gry!" with 100 percents and color "WHITE" and style "SOLID" with id "antylogout.%victim's uuid%" for 30 seconds for victim
			waze create bar "&fAntyLogout &cNie mozesz jeszcze wyjsc z gry!" with 100 percents and color "WHITE" and style "SOLID" with id "antylogout.%attacker's uuid%" for 30 seconds for attacker


on quit:
	if difference between {fight.cooldown::%player%} and now is less than {antylogout.time}:
		guild remove 25 points from player
		guild add 1 deaths for player
		send "&7[&4AntyLogout&7] &fGracz &c%player% &fwylogowal sie podczas walki" to {antylogout.lastplayer.%player%}
		waze create title "&cZabiles gracza %player%" with subtitle "&7+10" for {antylogout.lastplayer.%player%} for 1 second
		guild add 5 points for {antylogout.lastplayer.%player%}
		guild add 1 kills for {antylogout.lastplayer.%player%}
		log "Antylogout: %player% Wylogowal sie w walce z %{antylogout.lastplayer.%player%}%" to "plugins/dzikiepvp/antylogout.log"



command /delbar:
	trigger:
		waze delete bar with id "antylogout.%player's uuid%" for player

 

a wyświetla taki komunikat

Spoiler

3OTzmQ3.png

Jakby ktoś pomógł to dzięki bo w internecie nie mogłem znaleźć

 

9 i 10 linijka to te:

Cytat

set {antylogout.lastplayer.%victim%} to attacker
			set {antylogout.lastplayer.%attacker%} to victim

 

 

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

14 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
Teraz, pringles18 napisał:

Siemka mam taki skrypt na antylogout i wyrzuca nawet nie tyle błąd co jakieś ostrzeżenie ale nie mam pojęcia jak je zlikwidować

normalnie bym to zostawił tylko że sam skrypt generuje jakieś errory podczas działania więc dla pewności chcę pierw naprawić poprawność kodu

1. Użyj eventu 'on damage of player'.

2. Usuń warunek sprawdzający victima.

3. Popraw warunek sprawdzający attackera na 'attacker is a player'.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

gdy używasz zmiennych a w nich jest inna zmienna to używaj zmiennych grupowych, dla przykładu {antylogout::%victim%::lastplayer%} 

Spróbuj zastosować taką zmienną (grupową, Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!).

 

Przed zapisaniem sprawdź czy atakujący i victim są graczami, a właściwie to go popraw

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

  • 0
W dniu 13.01.2021 o 01:41, CoFFeIN04 napisał:

Pokaż jak wygląda to poprawione

moment bo ja nie trybie na tyle skriptu 

 

wygląda to teraz tak zamieniłem oba na {antylogout::%victim%::lastplayer} 

Spoiler

variables:
	{antylogout.time} = 28 seconds

on damage of player:
	if attacker is a player:
		set {fight.cooldown::%victim%} to now
		set {fight.cooldown::%attacker%} to now
		set {antylogout::%victim%::lastplayer} to attacker
		set {antylogout::%attacker%::lastplayer} to victim
		waze create bar "&fAntyLogout &cNie mozesz jeszcze wyjsc z gry!" with 100 percents and color "WHITE" and style "SOLID" with id "antylogout.%victim's uuid%" for 30 seconds for victim
		waze create bar "&fAntyLogout &cNie mozesz jeszcze wyjsc z gry!" with 100 percents and color "WHITE" and style "SOLID" with id "antylogout.%attacker's uuid%" for 30 seconds for attacker


on quit:
	if difference between {fight.cooldown::%player%} and now is less than {antylogout.time}:
		guild remove 25 points from player
		guild add 1 deaths for player
		send "&7[&4AntyLogout&7] &fGracz &c%player% &fwylogowal sie podczas walki" to {antylogout.lastplayer.%player%}
		waze create title "&cZabiles gracza %player%" with subtitle "&7+10" for {antylogout.lastplayer.%player%} for 1 second
		guild add 5 points for {antylogout.lastplayer.%player%}
		guild add 1 kills for {antylogout.lastplayer.%player%}
		log "Antylogout: %player% Wylogowal sie w walce z %{antylogout.lastplayer.%player%}%" to "plugins/dzikiepvp/antylogout.log"



command /delbar:
	trigger:
		waze delete bar with id "antylogout.%player's uuid%" for player

 

 

ale nadal to samo

Edytowane przez xNightPower_
Nieaktywny

Naprawiam formatowanie na ciemnym stylu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
W dniu 13.01.2021 o 01:44, pringles18 napisał:

moment bo ja nie trybie na tyle skriptu 

 

wygląda to teraz tak zamieniłem oba na {antylogout::%victim%::lastplayer} 

Zmiana formatu zmiennych w niczym nie pomoże, nieważne czy to zwykła zmienna, czy tez element z listy zmiennych.

Podaj:

  • wersję serwera
  • silnik serwera
  • wersję Skripta
  • listę dodatków do Skripta wraz z wersjami
  • błędy w konsoli

EDIT:

@pringles18 W sumie jest prosty sposób, aby to obejść. Wystarczy zapisać nazwę attackera i victima. Attacker i victim i tak zwracają nazwę gracza, więc nie będzie zbyt wielkiej różnicy, będziesz musiał jedynie pamiętać o parse'owaniu nazwy gracza na gracza.

Edytowane przez xNightPower_
Nieaktywny

Naprawiam cytat.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

1.16.3

paper spigot

wersja: 2.5.3

skquery i skwaze

No błąd mam taki

Spoiler
[01:56:50 WARN]: [SkWaze] Task #1223 for SkWaze v2.2.9 generated an exception
java.lang.NullPointerException: null
at fr.weefle.waze.nms.BossBarNew.lambda$0(BossBarNew.java:52) ~[?:?]
at org.bukkit.craftbukkit.v1_16_R2.scheduler.CraftTask.run(CraftTask.java:99) ~[patched_1.16.3.jar:git-Paper-209]
at org.bukkit.craftbukkit.v1_16_R2.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:468) ~[patched_1.16.3.jar:git-Paper-209]
at net.minecraft.server.v1_16_R2.MinecraftServer.b(MinecraftServer.java:1296) ~[patched_1.16.3.jar:git-Paper-209]
at net.minecraft.server.v1_16_R2.DedicatedServer.b(DedicatedServer.java:371) ~[patched_1.16.3.jar:git-Paper-209]
at net.minecraft.server.v1_16_R2.MinecraftServer.a(MinecraftServer.java:1211) ~[patched_1.16.3.jar:git-Paper-209]
at net.minecraft.server.v1_16_R2.MinecraftServer.w(MinecraftServer.java:999) ~[patched_1.16.3.jar:git-Paper-209]
at net.minecraft.server.v1_16_R2.MinecraftServer.lambda$a$0(MinecraftServer.java:177) ~[patched_1.16.3.jar:git-Paper-209]
at java.lang.Thread.run(Thread.java:830) [?:?]
[01:56:50 WARN]: [SkWaze] Task #1240 for SkWaze v2.2.9 generated an exception
[01:56:50 WARN]: [SkWaze] Task #1242 for SkWaze v2.2.9 generated an exception

 

Nie wiem czy jest to powiązane z tymi ostrzeżeniami ale chciałbym wyeliminować tą możliwość

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
Teraz, pringles18 napisał:

Nie wiem czy jest to powiązane z tymi ostrzeżeniami ale chciałbym wyeliminować tą możliwość

Cóż, kiedy ten błąd się pokazuje? Przy próbie pokazania boss baru?

Sprawdź czy użycie SkRayFall 1.9.21 pomoże.

EDIT:

Co do zmiennych, czy spróbowałeś z nazwami graczy?

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

  • 0

błąd się pokazuje po 30 sekundach czyli w momencie kiedy czas boss bara dobiega końca

no miałem skrayfall na początku ale nie wpadłem nadal na pomysł jak usunąć bar po 30 sekundach bez używania eventu every x seconds

dlatego wolałbym skwaze no chyba ze nie da rady tego naprawić

próbowałem jeszcze zabezpieczyć w ten sposób

if difference between {fight.cooldown::%victim%} and now is less than {antylogout.time}:
			waze create bar "&fAntyLogout &cNie mozesz jeszcze wyjsc z gry!" with 100 percents and color "WHITE" and style "SOLID" with id "antylogout.%attacker's uuid%" for 28 seconds for victim
		if difference between {fight.cooldown::%attacker%} and now is less than {antylogout.time}:
			waze create bar "&fAntyLogout &cNie mozesz jeszcze wyjsc z gry!" with 100 percents and color "WHITE" and style "SOLID" with id "antylogout.%attacker's uuid%" for 28 seconds for attacker

ale nie ma chyba znaczenia bo to dzieje się nawet po pojedynczym utworzeniu bossbara 

 

A zmienne z nazwami graczy co masz na myśli?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
Teraz, pringles18 napisał:

no miałem skrayfall na początku ale nie wpadłem nadal na pomysł jak usunąć bar po 30 sekundach bez używania eventu every x seconds

Wystarczyłoby użyć pętli 'loop 30 times' w której zmniejszamy wartość bossbara i odczekujemy 1 sekundę, po czym usuwamy ten bossbar.

Na YouTubie masz to pokazane w poradniku od Minehut, w którym pokazali jak tworzyć bossbary w SkRayFall.

Teraz, pringles18 napisał:

A zmienne z nazwami graczy co masz na myśli?

Zapisz po prostu w tych zmiennych 'attacker's name' i 'victim's name'.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
3 minuty temu, Kormic napisał:

Wystarczyłoby użyć pętli 'loop 30 times' w której zmniejszamy wartość bossbara i odczekujemy 1 sekundę, po czym usuwamy ten bossbar.

kurde no z tym warunkiem nowym który mam if difference between {fight.cooldown::%victim%} and now is less than {antylogout.time}:

może mieć to sens bo wcześniej próbowałem zrobić jakiś mini algorytm który by wykrywał czy może przerwać poprzednią pętle

bo wiesz taka pętla w evencie on damage która trwa 30 sekund to nawet w praktyce mogłoby dać 60 nastackowanych pętli w jednym momencie przy tylko jednym pojedynku

 

a co do tych zmiennych to nadal lipa chyba zostawiam tak jak jest bo nawet dziala tylko mam nadzieje ze nic sie nie wysypie przez to w specyficznych warunkach

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
Teraz, pringles18 napisał:

kurde no z tym warunkiem nowym który mam if difference between {fight.cooldown::%victim%} and now is less than {antylogout.time}:

może mieć to sens bo wcześniej próbowałem zrobić jakiś mini algorytm który by wykrywał czy może przerwać poprzednią pętle

bo wiesz taka pętla w evencie on damage która trwa 30 sekund to nawet w praktyce mogłoby dać 60 nastackowanych pętli w jednym momencie przy tylko jednym pojedynku

Słuszna uwaga, dlatego też musisz sobie zrobić zmienną, która będzie kontrolowała czy już jest odliczanie na bossbarze.

Możesz to również rozwiązać poprzez ustawianie w pętli zmiennej lokalnej jako tej zmiennej z czasem. Następnie sprawdzamy w pętli przy każdym jej przejściu (iteracji) czy zmienna lokalna jest mniejsza od zmiennej z czasem. Jeżeli tak, przerywamy pętlę.

Teraz, pringles18 napisał:

a co do tych zmiennych to nadal lipa chyba zostawiam tak jak jest bo nawet dziala tylko mam nadzieje ze nic sie nie wysypie przez to w specyficznych warunkach

Jeżeli użyłbyś zmiennych z nazwami graczy, nie byłoby tych warnów. Wystarczyłoby następnie przy potrzebie przechwycenia tych graczy parse'ować ich nazwy na offline playera.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

nadal to samo po zmianie zmiennych

[00:22:45 WARN]: [Skript] an entity cannot be saved, i.e. the contents of the variable {antylogout.lastplayer.%the name of the attacked entity%} will be lost when the server stops. (antylogout.sk, line 25: set {antylogout.lastplayer.%victim's name%} to attacker')
[00:22:45 WARN]: [Skript] an entity cannot be saved, i.e. the contents of the variable {antylogout.lastplayer.%the name of the attacker%} will be lost when the server stops. (antylogout.sk, line 26: set {antylogout.lastplayer.%attacker's name%} to victim')
Edytowane przez xNightPower_
Nieaktywny

Usuwam zbędne formatowanie.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
W dniu 13.01.2021 o 02:51, pringles18 napisał:

nadal to samo po zmianie zmiennych

[00:22:45 WARN]: [Skript] an entity cannot be saved, i.e. the contents of the variable {antylogout.lastplayer.%the name of the attacked entity%} will be lost when the server stops. (antylogout.sk, line 25: set {antylogout.lastplayer.%victim's name%} to attacker')
[00:22:45 WARN]: [Skript] an entity cannot be saved, i.e. the contents of the variable {antylogout.lastplayer.%the name of the attacker%} will be lost when the server stops. (antylogout.sk, line 26: set {antylogout.lastplayer.%attacker's name%} to victim')

Przecież użyłeś bezpośrednio 'attacker' i 'victim' przy zapisywanej wartości. Ty miałeś zmienić zapisywaną wartość, nie wyrażenie zagnieżdżane w nazwie zmiennej.

Zobacz co napisałem...

W dniu 13.01.2021 o 02:08, Kormic napisał:

Zapisz po prostu w tych zmiennych 'attacker's name' i 'victim's name'.

...a następnie gdy będziesz musiał przechwycić tych graczy...

W dniu 13.01.2021 o 02:21, Kormic napisał:

Wystarczyłoby następnie przy potrzebie przechwycenia tych graczy parse'ować ich nazwy na offline playera.

Cała filozofia.

Edytowane przez xNightPower_
Nieaktywny

Naprawiam cytat.

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