Naprawa błędu Czarowanego Ostrze - utrata HP zamiast kradzieży życia podczas dobijania potworów
Cześć, 🖐️
Właśnie rozpoczynam odbudowę starych tematów. Jak mnie pamięć nie myli wtedy chyba też rozpocząłem od tej poprawki.
Opis problemu
Gracz mający aktywną umiejętność czarowane ostrze dobijając potwory może tracić punkty życia zamiast je odzyskiwać. Przy kolejnym trafieniu potwora z hp poniżej zera kradzież życia przyjmuje ujemną wartość i odejmuje życie graczowi zamiast je regenerować. Problem dotyczy dokładnie bonusu, który jest w umiejętności czarowanego ostrza czyli kradzież życia ten problem dotyczy również bonusu kradzieży energii choć nie kojarzę żeby był wykorzystywany.
Przykład
Gracz ma 12% kradzieży życia przy ostrzu na P i zadaje potworowi 500 obrażeń, a potwór przed trafieniem miał 126 HP, więc jego życie spada do -374. Zanim serwer zakończy obsługę śmierci potwora, gracz może trafić go ponownie. I tu jest kulminacyjny punkt bo kradzież życia zostaje wtedy obliczona na podstawie ujemnego HP potwora zamiast zadanych obrażeń. W efekcie gracz utraci 44 punktów życia podstawiając pod odzysk −374 x 12 / 100 = −44 PŻ pomijając części ułamkowe.
Prezentacja problemu
2026-10-18 10-14-39.mp4Rozwiązanie
📂game -> char_battle.cpp
🔍Szukaj
// 칠 때마다 HP회복
if (pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) && number(0, 4) > 0) // 80% 확률
{
int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100;
if (i)
{
CreateFly(FLY_HP_SMALL, pAttacker);
pAttacker->PointChange(POINT_HP, i);
}
}🔄Zamień
// 칠 때마다 HP회복
if (pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) && number(0, 4) > 0) // 80% 확률
{
const int recoveryBase = (iCurHP >= 0) ? std::min(dam, iCurHP) : dam;
const int recoveredHP = recoveryBase * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100;
if (recoveredHP > 0)
{
CreateFly(FLY_HP_SMALL, pAttacker);
pAttacker->PointChange(POINT_HP, recoveredHP);
}
}🔍Szukaj
// 칠 때마다 SP회복
if (pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) && number(0, 4) > 0) // 80% 확률
{
int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100;
if (i)
{
CreateFly(FLY_SP_SMALL, pAttacker);
pAttacker->PointChange(POINT_SP, i);
}
}🔄Zamień
if (pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) && number(0, 4) > 0) // 80%
{
const int recoveryBase = (iCurHP >= 0) ? std::min(dam, iCurHP) : dam;
const int recoveredSP = recoveryBase * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100;
if (recoveredSP > 0)
{
CreateFly(FLY_SP_SMALL, pAttacker);
pAttacker->PointChange(POINT_SP, recoveredSP);
}
}Prezentacja rozwiązania
2026-10-18 10-37-37.mp4Świetny poradnik, właśnie się zastanawiałem jak naprawić błąd Czarowanego Ostrze - otratę HP zamiast kradzieży życia podczas dobijania potworów.
Właśnie tak przeczuwałem że potrzebujesz tego poradnika. 😄