Skocz do zawartości
  • 0

Czy da się zoptymalizować ten skrypt?


Pytanie

Jest to skrypt który jeśli włączone są tzw. ultra-zbiory regeneruje pola co 2 sekundy. Problem w tym że przy loopowaniu tych bloków czuć taką lekką scinkę. Dało by się to jakoś zamienić aby to nie lagowało? A tak wogóle nie zwracajcie uwagi na commenty, po prostu skeditor wyrzucał mi tam błędy, których tak naprawdę nie było.

Odnośnik do komentarza
https://skript.pl/temat/57502-czy-da-si%C4%99-zoptymalizowa%C4%87-ten-skrypt/
Udostępnij na innych stronach

1 odpowiedź na to pytanie

Rekomendowane odpowiedzi

  • 0
51 minut temu, Pixeel133 napisał:

Jest to skrypt który jeśli włączone są tzw. ultra-zbiory regeneruje pola co 2 sekundy. Problem w tym że przy loopowaniu tych bloków czuć taką lekką scinkę. Dało by się to jakoś zamienić aby to nie lagowało? A tak wogóle nie zwracajcie uwagi na commenty, po prostu skeditor wyrzucał mi tam błędy, których tak naprawdę nie było.

Od razu mogę stwierdzić, że ten skrypt jest obciążający dla serwera. Wynika to z dwóch powodów:

1. Zapętla Pan dla każdego rodzaju nasiona ogromny prostopadłościan bloków.
Proszę zwrócić uwagę chociażby na pierwszą pętlę sprawdzającą wszystkie bloki między dwoma lokalizacjami dla nasion pszenicy. Lokalizacje to (-8, 24, -251) i (83, 32, -165). Obliczając różnice dla wszystkich trzech współrzędnych, otrzymujemy łącznie 92*8*87 = 72036 bloków. Jest to ilość co najmniej astronomiczna, a nie jest to przecież jedyna pętla sprawdzająca wszystkie bloki, ponieważ jest ich w sumie siedem.

Rozwiązanie:

Rekomenduję Panu, aby dodawać przy sadzeniu nasion ich lokalizacje do listy zmiennych, którą będzie Pan zapętlał. Dzięki temu ze wcześniej wspomnianych ponad 72000 zejdziemy do zapewne kilku tysięcy.
Nie podaję dokładnej liczby, gdyż zależy ona od tego czy mówimy o jakiejś wielopiętrowej uprawie, czy też pojedynczych polach.

2. Wszystkie operacje podmiany bloków (nasion) Skript stara się wykonać w jednej dyskretnej chwili czasu. Jest to oczywiście niedobre z punktu widzenia wydajności pracy serwera.

Rozwiązanie:

Tutaj zalecam rozłożyć w czasie wyżej wspomniane pętle. Idealnym rozwiązaniem byłoby stworzyć kilka niezależnych od siebie pętli 'while', dla których będziemy mieli pewność, że będą się rozpoczynały w różnych chwilach czasu.
W tym przypadku podejrzewam niestety, że nie jest to możliwe, a więc trzeba będzie to niejako wymusić. Pomysły mam dwa.

  1. Między każdą pętlą może Pan po prostu dodać opóźnienia rzędu paru ticków tak, aby były one równe z dokładnością do jednego ticka. Jest to mało eleganckie rozwiązanie, aczkolwiek powinno ono dać nieco odetchnąć serwerowi.
  2. Może Pan również wykorzystać listener zdarzenia 'on script load', w którym Pan doda wywołanie jakiejś funkcji, której ciałem (kodem w niej zawartym) będzie pętla while. Funkcja może pobierać kilka parametrów (nazwa listy zmiennych z lokalizacjami bloków, typ bloku sprawdzanego w warunku, typ nowego bloku, itd.). Wtedy funkcja będzie wywołana z jakimiś odstępami czasu (wait x ticks) dla każdego typu nasiona, a więc będzie ich w sumie siedem.

EDIT:

@Pixeel133 Podaję dla drugiej propozycji rozwiązanie problemu nr 2 przykładowy kod.

options:
	checkPlantsInterval: 2 # W sekundach

function startCheckingSeedsLoop(plantName: text, oldPlant: block, newPlant: block):
	while script is loaded:
		loop {%{_plantName}%::locations::*}:
			if block at loop-value is {_oldPlant}:
				# ...
		wait {@checkPlantsInterval} seconds

on script load:
	set {_interval} to ceil({@checkPlantsInterval} * 20 / 7) # 2 sekundy = 40 ticków. Podzielone przez 7 (dla każdej pętli), aby dodać równe odstępy czasu
	set {_intervalTimespan} to "%{_interval}% ticks" parsed as timespan
	startCheckingSeedsLoop("placedSeeds::carrots", stage 2 carrot plant, stage 7 carrot plant)
	wait {_intervalTimespan}
	# ...
	startCheckingSeedsLoop("placedSeeds::potatoes", stage 2 potato plant, stage 7 potato plant)
	wait {_intervalTimespan}

Mam wątpliwości co do tego czy Skript dobrze zinterpretuje wyrażenia 'stage 2 carrot plant' i tym podobne występujące w wywołaniach funkcji, ale myślę, że Pan rozumie ideę.

Pozdrawiam.

Edytowane przez Kormic
Odnośnik do komentarza
https://skript.pl/temat/57502-czy-da-si%C4%99-zoptymalizowa%C4%87-ten-skrypt/#findComment-342415
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ę...