Skocz do zawartości
Masz już aplikację Sharegon?

Odkryj wszystkie możliwości. Dowiedz się więcej

Sharegon.pl

Zainstaluj aplikację Sharegon i korzystaj z powiadomień push oraz licznika nowych aktywności bezpośrednio z ekranu głównego.

Aby zainstalować tę aplikację na iOS i iPadOS.
  1. Tap the Share icon in Safari
  2. Przewiń menu i stuknij Dodaj do ekranu początkowego.
  3. Stuknij Dodaj w prawym górnym rogu.
Zainstaluj aplikację Sharegon na Androidzie
  1. Otwórz Sklep Google Play na swoim smarfonie.
  2. Wyszukaj „Sharegon” w pasku wyszukiwania.
  3. Stuknij „Zainstaluj”, aby pobrać aplikację.

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

Featured Replies

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ę:

Tylko zalogowani Zaloguj się, aby wyświetlić chronioną treść Ten post zawiera treści dostępne tylko dla członków. Zaloguj się lub utwórz konto, aby odblokować całą zawartość tego posta. Zaloguj się Utwórz konto

 

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

 

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

 

 

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

  • 2 miesiące temu...
  • 2 miesiące temu...
  • 3 tygodnie później...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Konto

Nawigacja

Skonfiguruj powiadomienia push w przeglądarce.

Chrome (Android)
  1. Stuknij ikonę kłódki obok paska adresu.
  2. Wybierz Uprawnienia → Powiadomienia.
  3. Dostosuj swoje preferencje.
Chrome (Desktop)
  1. Kliknij ikonę kłódki na pasku adresu.
  2. Wybierz Ustawienia witryny.
  3. Znajdź Powiadomienia i dostosuj swoje preferencje.