Skocz do zawartości
Opublikowano

Cześć

 

W tym poradniku skupimy się na komendzie do_user_horse_ride.

Omówimy, jak ją nieco zmodyfikować oraz dodamy zabezpieczenie antyspamowe, aby zapobiec spowolnieniom gry spowodowanym nadużywaniem tej funkcji.

 

Problem:

Gracze często wchodzą i schodzą z koni, co przy większej ilości osób wykonujących tę operację w nadmiernej ilości, powoduje lag dla innych graczy.
Chcę, aby gra działała jak najpłynniej, stąd konieczność zabezpieczenia tej komendy przed nadużyciem.

 

Prezentacja:

horse_time.gif

 

 

Omówienie rozwiązania:

Zobaczmy więc wspomnianą funkcję:

🔐 Ukryta Treść 🔐

 

Pierwszy rzut oka na funkcję ACMD(do_user_horse_ride) ukazuje warunki, które sprawdzają, czy postać jest w trybie obserwatora, czy jest martwa, czy ma nałożony stan paraliżu.
Jeśli którykolwiek z tych warunków jest spełniony, funkcja jest przerywana.

🔐 Ukryta Treść 🔐

 

Możemy te warunki połączyć w 1 zapis w ten sposób:

🔐 Ukryta Treść 🔐

 

 

Teraz zastanówmy się, co możemy zrobić dalej.

 

 

Optymalizacja kodu!

🔐 Ukryta Treść 🔐

 

Co możemy tu zrobić?

Proponuję utworzenie nowych zmiennych na początku funkcji, które jasno określą, co sprawdzamy. Na przykład:

🔐 Ukryta Treść 🔐

 

I zastosujmy je w powyższej instrukcji warunkowej:

🔐 Ukryta Treść 🔐

 

Wygląda o wiele lepiej, co tu możemy jeszcze zrobić?

Mamy dwa wywołania:

🔐 Ukryta Treść 🔐

 

A gdyby tak stworzyć funkcję, która inteligentnie przełącza stan jazdy na koniu? 

 

 

Tworzenie Nowej Funkcji:

Utworzymy więc funkcję ToggleRiding(), która inteligentnie przełącza stan jazdy na koniu:

🔐 Ukryta Treść 🔐

 

A teraz użyjemy jej w naszej poprzedniej funkcji:

🔐 Ukryta Treść 🔐

 

Tak wygląda zaktualizowany kod:

🔐 Ukryta Treść 🔐

 

 

Dodanie Kontroli Antyspamowej:

Na koniec dodamy kontrolę antyspamową.
Stworzymy mechanizm, który zabezpieczy nas przed nadużywaniem tej funkcji, przechowując czas ostatniego wywołania i sprawdzając czy minęły już 3 sekundy od ostatniego wywołania.

🔐 Ukryta Treść 🔐

 

 

Implementacja:

📁 Lokalizacja pliku: 'game-> cmd_general.cpp'

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

♻️ Zamień:

🔐 Ukryta Treść 🔐

 

 

📁 Lokalizacja pliku: 'game -> char_horse.cpp'

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 Dodaj:

🔐 Ukryta Treść 🔐

 

 

📁 Lokalizacja pliku: 'game -> char.h'

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 Dodaj:

🔐 Ukryta Treść 🔐

 

 

📁 Lokalizacja pliku: 'share -> locale - poland -> locale_string.txt'

 

 Dodaj:

🔐 Ukryta Treść 🔐

 

Featured Replies

Opublikowano

Koniec z bugowaniem konia w celu zbijania bossów 😄

Opublikowano

Dzięki za wstawkę! 

  • Sevence zmienił(a) tytuł na Naprawa błędu powodującego opóźnienia, wywołany częstym wsiadaniem i zsiadaniem z konia
  • 1 miesiąc temu...
Opublikowano

Dziękuję pięknie ❤️

Opublikowano

Dzięki

 

- wsumie to "psuje" starożytną taktyke gdy jeszcze marmury były nieznaną technologią. Konkretnie używając szybkiego wsiadania i zsiadania z konia "bugowalismy" animacje odlatującego bosa przez co cały czas mogliśmy zadawać mu obrażenia 😄

  • 2 miesiące temu...
Opublikowano

Dzięki

  • 3 miesiące temu...
Opublikowano

dzięki

  • 4 miesiące temu...
Opublikowano

hej tutaj też wkradł się malutki błąd w 

 

"HORSE_ANTYSPAM_TIME_%d";
"<System> Musisz odczekać jeszcze %d sekund(y), zanim będziesz mógł wykonać kolejną akcję z koniem.";

 

zmień na:

"HORSE_ANTYSPAM_TIME_%d]";
"<System> Musisz odczekać jeszcze %d sekund(y), zanim będziesz mógł wykonać kolejną akcję z koniem.";

 

 

ewentualnie zmień w kodzie bo wkradł się 

 

]

 

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