Skocz do zawartości

Naprawa problemu z nullptr w funkcji przenoszenia przedmiotów do magazynu

Opublikowano

Witam wszystkich👋

 

Zarys problemu 📖

Każdy, kto zajmuje się tworzeniem serwerów do gry Metin2, zna znaczenie stabilności i bezawaryjności.
W tym kontekście, błąd w funkcji CInputMain::SafeboxCheckin może być prawdziwą pułapką, prowadzącą do crashu serwera i frustracji graczy. 🎮😤
Ta funkcja zajmuje się przenoszeniem przedmiotów pomiędzy ekwipunkiem a magazynem, co jest kluczową operacją dla każdego gracza.
Co gorsza, błąd pojawia się w momencie, gdy próbujemy sprawdzić status questu. Na pewno nikt z nas nie chce, aby serwer padł w tak krytycznym momencie! 🛠️

 

Problem w Skrócie 🤔

Błąd polega na tym, że metoda GetPCForce() może zwrócić wskaźnik nullptr, który później jest używany w metodzie IsRunning().
Jest to klasyczny przypadek błędu segmentacji, który może mieć poważne konsekwencje, takie jak crash serwera.

 

Funkcja z problemem 📍

Funkcja CInputMain::SafeboxCheckin służy do sprawdzenia przenoszonych przedmiotów między magazynem a ekwipunkiem postaci.
Obejmuje ona różne warunki i przypadki, które muszą być spełnione, zanim przedmiot zostanie przeniesiony.
Obejmuje również sprawdzanie różnych questów i ich statusów, co prowadzi do potencjalnego błędu segmentacji, jeżeli nie jest właściwie zarządzane.

 

Sposób naprawy 🛠️

Jeśli chcesz tego uniknąć, dodaj warunek sprawdzający, czy wskaźnik zwrócony przez GetPCForce() jest nullptr - zanim wywołasz na nim metodę IsRunning()

 

Rozwiązanie:

Lokalizacja pliku: game -> input_main.cpp


Znajdź funkcję:

🔐 Ukryta Treść 🔐

 

W tej funkcji na samym początku znajdziesz taki warunek:

🔐 Ukryta Treść 🔐

 

Zastąp powyższy warunek następującym kodem:

🔐 Ukryta Treść 🔐

 

 

Podsumowanie 🌟

Dzięki tej prostej, ale skutecznej naprawie, zabezpieczysz swój serwer Metin2 przed potencjalnymi błędami segmentacji.
To niewielka zmiana, lecz może znacząco wpłynąć na doświadczenie graczy i stabilność serwera. 🎉👍

Featured Replies

Opublikowano

Ten bug od dawna mnie irytował, ale twój kod to zmienił, wielkie dzięki.

 

  • 2 miesiące temu...
Opublikowano

Dziękować

  • 3 tygodnie później...
Opublikowano

konkret 

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