Skocz do zawartości
Opublikowano

Cześć, udostępniam poprawioną regenerację potworów, sposób w jaki zrobił to Ymir wymaga kilku zmian.
Co zyskamy po dodaniu tego fixa?
 

  • Zwiększenie wydajności - aktualna nowa metoda regeneracji działa tylko wtedy, gdy jest to potrzebne.
  • Dokładość czasu w regenie - w metodzie Ymira, gdy czas respawnu był ustawiony na 10s potwór potrafił się zrespić raz po 6s, a raz po 14s. Od teraz czas respawnu będzie dokładny co do sekundy.


Nie jestem autorem poprawki.

 

➡️ 1. W common/service.h lub CommonDefines.h dodajemy:

🔐 Ukryta Treść 🔐


➡️ 2. W game/char.cpp w funkcji void CHARACTER::Destroy() po:

🔐 Ukryta Treść 🔐


 Dodajemy:

🔐 Ukryta Treść 🔐


➡️ 3. W game/regen.cpp szukamy linijki:

🔐 Ukryta Treść 🔐


♻️ Zmieniamy na:

🔐 Ukryta Treść 🔐


♻️ W tym samym pliku szukamy funkcji EVENTFUNC(regen_event) i zmieniamy całość! na:

🔐 Ukryta Treść 🔐


➡️ 4. Przechodzimy do game/regen.h i w strukturze typedef struct regen szukamy:

🔐 Ukryta Treść 🔐


 Niżej dodajemy:

🔐 Ukryta Treść 🔐


W tej samej strukturze szukamy:

🔐 Ukryta Treść 🔐

 

 I dodajemy poniżej:

🔐 Ukryta Treść 🔐

 

Featured Replies

Opublikowano

Tak patrzę na to i czegoś nie rozumiem być może ktoś mi to wytłumaczy.

"Zwiększenie wydajności - aktualna nowa metoda regeneracji działa tylko wtedy, gdy jest to potrzebne."

Z tego co wiem jak działa regen to przy starcie czyta ci wszystkie liniki z regen.txt i dla każdej tworzy event

regen->event = event_create(regen_event, info, PASSES_PER_SEC(number(0, 16)) + PASSES_PER_SEC(regen->time));

i na podstawie określonego czasu załóżmy 20s będzie trigerować event i sprawdzać czy moby żyją czy nie jak nie to zrespawnuje brakujące jak żyją to sprawdzi za kolejne PASSES_PER_SEC(regen->time); czyli te np 20s i tak ciągle.

I faktycznie jak serwer wystartuje o 6:00:00 i zabijesz moba 6:00:18 to zespawnuje 6:00:20 bo taki jest schedule eventu a nie 6:00:30 więc dodanie nextRespawn spowoduje to, że będzie liczone od momentu usunięcia ciała moba i będzie działać.

Ale w jaki sposób polepsza wydajnosć callowanie eventu co 1s dla każdego wpisu w regenach? Nie będzie to wręcz przeciwnie powodować dodatkowego overheada?

regen->event = event_create(regen_event, info, PASSES_PER_SEC(1));

Zrobienie tworzenia eventu po destroy każdego moba też pewnie by brało więcej zasobów niż niż to, że jest już alokowany w tle ale wydaje mi się, że nie poprawia to wydajności i nie jest wykonywane tylko wtedy, gdy jest to potrzebne?

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

Gość
Dodaj odpowiedź do tematu...