@up Nie ma znaczenia czy będzie else czy nie. Jeśli level_regeneracji = 2 to ani 1 ani 3 i tak nie będzie działać.
Jak już wstawiasz else, to musisz usunąć ; przy klamrze zamykającej pierwszego ifa.
if (hero.attribute[ATR_HITPOINTS] > 0)
Myślę, że powodem może być znak większości. Zdarzyło mi się kilka razy, że po wstawieniu jednego znaku nie chciał działać IF, mimo że przy odpalaniu gry nie wyskakiwał żaden błąd. Najlepiej wstawiać po 2 znaki (>=, <=, [...]).
Spróbuj tak:
if (hero.attribute[ATR_HITPOINTS] != 0)
Proponuję jeszcze przed dodaniem punktów życia i many sprawdzić, czy mamy pełny pasek zdrowia i many. Inaczej będzie się miało więcej punktów życia/many niż maks. punktów życia/many.
Po za tym innego błędu nie widzę.