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.
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.
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.
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:
Omówienie rozwiązania:
Zobaczmy więc wspomnianą funkcję:
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.
Możemy te warunki połączyć w 1 zapis w ten sposób:
Teraz zastanówmy się, co możemy zrobić dalej.
Optymalizacja kodu!
Co możemy tu zrobić?
Proponuję utworzenie nowych zmiennych na początku funkcji, które jasno określą, co sprawdzamy. Na przykład:
I zastosujmy je w powyższej instrukcji warunkowej:
Wygląda o wiele lepiej, co tu możemy jeszcze zrobić?
Mamy dwa wywołania:
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:
A teraz użyjemy jej w naszej poprzedniej funkcji:
Tak wygląda zaktualizowany kod:
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.
Implementacja:
📁 Lokalizacja pliku: 'game-> cmd_general.cpp'
🔍 Szukaj
♻️ Zamień:
📁 Lokalizacja pliku: 'game -> char_horse.cpp'
🔍 Szukaj
➕ Dodaj:
📁 Lokalizacja pliku: 'game -> char.h'
🔍 Szukaj
➕ Dodaj:
📁 Lokalizacja pliku: 'share -> locale - poland -> locale_string.txt'
➕ Dodaj: