W systemie budowania terenu gildii zidentyfikowałem błąd, który może prowadzić do wystąpienia tzw. yang buga.
Problem leży w funkcji 'PointChange', a dokładniej w obsłudze zmiennej 't->dwPrice', będącej liczbą typu DWORD, czyli liczbą całkowitą bez znaku. Kluczowy jest tutaj sposób, w jaki odbywa się operacja odejmowania. Gdy odejmujemy wartość typu DWORD od innej liczby bez znaku, może to prowadzić do generowania nieoczekiwanych wyników. W naszym przypadku, gdy 't->dwPrice', będące liczbą bez znaku, jest odejmowane od ilości yang gracza (przyjętej za liczbę całkowitą), może to skutkować sytuacją, gdzie yang gracza staje się wartością ujemną.
Aby rozwiązać ten problem, kluczowe jest jasne określenie typów danych używanych w operacji. Rozwiązanie polega na rzutowaniu 't->dwPrice' na typ całkowity przed wykonaniem operacji odejmowania. Dzięki temu, oba operandy w działaniu są traktowane jako liczby całkowite, co zapobiega pojawianiu się błędnych wartości i wyklucza ryzyko wystąpienia yang buga.
Ten błąd występuje podczas uruchomionego trybu testowego więc nie jest bardzo szkodliwe, ale warto naprawić.
Cześć,
W systemie budowania terenu gildii zidentyfikowałem błąd, który może prowadzić do wystąpienia tzw. yang buga.
Problem leży w funkcji 'PointChange', a dokładniej w obsłudze zmiennej 't->dwPrice', będącej liczbą typu DWORD, czyli liczbą całkowitą bez znaku. Kluczowy jest tutaj sposób, w jaki odbywa się operacja odejmowania. Gdy odejmujemy wartość typu DWORD od innej liczby bez znaku, może to prowadzić do generowania nieoczekiwanych wyników. W naszym przypadku, gdy 't->dwPrice', będące liczbą bez znaku, jest odejmowane od ilości yang gracza (przyjętej za liczbę całkowitą), może to skutkować sytuacją, gdzie yang gracza staje się wartością ujemną.
Aby rozwiązać ten problem, kluczowe jest jasne określenie typów danych używanych w operacji. Rozwiązanie polega na rzutowaniu 't->dwPrice' na typ całkowity przed wykonaniem operacji odejmowania. Dzięki temu, oba operandy w działaniu są traktowane jako liczby całkowite, co zapobiega pojawianiu się błędnych wartości i wyklucza ryzyko wystąpienia yang buga.
Ten błąd występuje podczas uruchomionego trybu testowego więc nie jest bardzo szkodliwe, ale warto naprawić.
Implementacja:
📂 Lokalizacja pliku: 'game -> cmd_gm.cpp'
🔍 Szukaj
♻️ Zamień