Skocz do zawartości
Opublikowano

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

🔐 Ukryta Treść 🔐

 

🔍 Następnie:

🔐 Ukryta Treść 🔐

 

🔄 Zmieniamy:

🔐 Ukryta Treść 🔐

 

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:

🔐 Ukryta Treść 🔐

 

🔄 Zmieniamy:

🔐 Ukryta Treść 🔐

 

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.

 

 

 

Featured Replies

Opublikowano

Bardzo dobry temat, przyda się ❤️ 

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

  • 1 miesiąc temu...
Opublikowano

Dz

  • 2 tygodnie później...
Opublikowano

Dziękuję ❤️

Opublikowano

Co trzeba pozmieniać na wersje niższą niż?

Cytat

Wersja minimalna wymagana: C++17 🛠️📜

 

Opublikowano
35 minut temu, 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 przez ExoCarossa

Opublikowano
  • Autor

@ExoCarossa 

8 minut temu, 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.  

 

9 minut temu, 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:

 

auto 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);
            }
        }
    }
}

 

Opublikowano

Bardzo dobry temat, przyda się ❤️ 

  • 2 miesiące temu...
Opublikowano

Dzięki

  • 4 tygodnie później...
Opublikowano

thx

  • 2 tygodnie później...
Opublikowano
  • Premium

thx

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