Opublikowano 26 Sierpnia 20232 l 🚀 Witaj w poradniku dotyczącym ulepszeń w mechanice dwóch bonusów w grze: Teraz % obrażeń zostanie dodane do PŻ. % obrażeń zostanie dodane do PE. Podczas korekty napotkaliśmy następujące wyzwania w kodzie: W oryginalnym kodzie prawdopodobieństwo aktywacji bonusu regeneracji PŻ było stałe, wynosząc od 1 do 10, bez uwzględnienia innych atrybutów gry. Brakowało funkcji kontrolującej limit PŻ. Nazewnictwo zmiennych było nieintuicyjne. Wersja minimalna wymagana: C++17 🛠️📜 📢 Informacja: W filmiku prezentującym zauważyłem drobny błąd w funkcji do debugowania. Zamiast wyświetlać poziom HP po odzyskaniu, wyświetliłem SP. 📺🛠️ Wartość funkcji działa poprawnie, to tylko błąd w komunikacie. Prezentacja zmian: Rozwiązanie: 📁 Lokalizacja pliku: 'game -> char_battle.cpp' 🔍 Szukamy: 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 🔍 Następnie: 🔄 Zmieniamy: Zmiany, które wprowadziłem w powyższym kodzie: Stałe sprawdzenie prawdopodobieństwa zostało zastąpione dynamicznym sprawdzeniem opartym na atrybucie POINT_STEAL_HP. Wprowadziłem mechanizm zapobiegający przekroczeniu przez HP atakującego jego maksymalnego limitu. Użyłem funkcji std::clamp do ograniczenia wartości obrażeń używanej w obliczeniach HP. Efekt przywracania HP został zmieniony na FLY_HP_MEDIUM, ponieważ FLY_HP_SMALL jest używane w bonusie od kradzieży życia. Aktualizacja standardu kodowania. Następnie skupmy się na drugim bonusie, czyli % obrażeń odzyskiwanych jako PE. 🔍 W funkcji ::DAMAGE szukamy mechaniki odpowiadającej za odzyskiwanie PE: 🔄 Zmieniamy: Zmiany w mechanice które wprowadziłem w powyższym kodzie: Zastąpiłem stałe sprawdzenie prawdopodobieństwa dynamicznym sprawdzeniem opartym na atrybucie POINT_STEAL_SP. Dodałem kontrolę, aby zapewnić, że SP atakującego nie przekroczy maksymalnego limitu SP. Użyłem funkcji std::clamp do ograniczenia wartości obrażeń używanej w obliczeniach SP. Efekt przywracania SP został zmieniony na FLY_HP_MEDIUM, ponieważ FLY_HP_SMALL jest używane w innym bonusie od kradzieży energii. Naprawiłem problem z przekraczaniem maksymalnego limitu SP. Aktualizacja standardu kodowania.
Opublikowano 26 Sierpnia 20232 l Autor Właśnie zauważyłem, że w filmiku prezentującym popełniłem mały błąd w funkcji do debugowania. Zamiast wyświetlać poziom HP po odzyskaniu, wyświetliłem SP. Funkcja działa poprawnie to tylko błąd w komunikacie użyłem niepoprawnego argumentu do wyświetlenia wartości.
Opublikowano 3 Listopada 20232 l Co trzeba pozmieniać na wersje niższą niż? Cytat Wersja minimalna wymagana: C++17 🛠️📜
Opublikowano 3 Listopada 20232 l Autor @ExoCarossa Tak, funkcja std::clamp jest dostępna od wersji C++17. std::clamp - cppreference.com
Opublikowano 3 Listopada 20232 l W dniu 3.11.2023 o 20:21, Sevence napisał(a): @ExoCarossa Tak, funkcja std::clamp jest dostępna od wersji C++17. std::clamp - cppreference.com a wczesniej co zamiast tego było używane? *cholera przyda sie poradnik do c++* bo fajnie byłoby to mieć ale mam niższy "poziom" kodu Edytowane 3 Listopada 20232 l przez ExoCarossa
Opublikowano 3 Listopada 20232 l Autor @ExoCarossa W dniu 3.11.2023 o 20:57, ExoCarossa napisał(a): a wczesniej co zamiast tego było używane? *cholera przyda sie poradnik do c++* Nie rozumiem? Moje rozwiązanie wykorzystuję tą funkcję, aby uprościć kod. W dniu 3.11.2023 o 20:57, ExoCarossa napisał(a): bo fajnie byłoby to mieć ale mam niższy "poziom" kodu Możesz zastąpić funkcję clamp ograniczając zakres np. w ten sposób: CKod został skopiowanyauto stealSPAttribute = pAttacker->GetPoint(POINT_STEAL_SP); if (stealSPAttribute){ if (number(1, MAX_PROBABILITY) <= stealSPAttribute) { int32_t iCur; if (IsPC()) { iCur = iCurSP; } else { iCur = iCurHP; } int32_t boundedDam = (dam < 0) ? 0 : (dam > iCur) ? iCur : dam; int32_t iSP = boundedDam * stealSPAttribute / 100; if (iSP > 0 && iCur >= iSP && (pAttacker->GetSP() + iSP) < pAttacker->GetMaxSP()) { CreateFly(FLY_SP_MEDIUM, pAttacker); pAttacker->PointChange(POINT_SP, iSP); if (IsPC()) { PointChange(POINT_SP, -iSP); } } }}
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto