Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[C++] FIX - Naprawa problemu z nullptr w funkcji przenoszenia przedmiotów do magazynu.


Rekomendowane odpowiedzi

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

To jest ukryta treść, proszę

 

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

 

To jest ukryta treść, proszę


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

 

To jest ukryta treść, proszę

 

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

 

 

  • 1 rok później...
Opublikowano

Temat został opublikowany w nie tym dziale co trzeba, tematy z C++ powinny być publikowane w tym dziale Metin2 - Questy, Dify, C++, Python - MPCforum.pl - MultiPlayer Community

ostrzegam na przyszłość a sam temat zostanie przeniesiony do odpowiedniego działu. 

╔═▣◎▣═══ SILENCE ═══▣◎▣═╗
» Cień ostrza. Cisza przed burzą. «
☯ Wojownik starego świata ☯

⛩️Droga bushido ⛩️

Szept nocy... znikam, zanim mnie zauważysz.

════════════════════════

1.gif

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

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...