nawet w dialogach hero to other, a nie self o ile dobrze pamiętam.
w każdym razie hero chyba nie zawsze wskazuje na pc_hero, tylko na postać kontrolowaną przez gracza (czary przemian, kontrola).
I uwaga conajmniej do stylu, potencjalnie może to jest przyczyna twojego błędu. Zamiast 2 powinno być NPC_FLAG_IMMORTAL, czy coś w ten deseń.
W dialogach other to zawsze gracz, self to npc z którym się rozmawia. Ogólnie jestem pewien na 100% tego jak działają te dwie zmienne.
Co do tej uwagi do "stylu", oto wycinek z constans.d:
CONST INT NPC_FLAG_IMMORTAL = 1 << 1;
Może nie jestem geniuszem informatyki, ale wydawało mi się że jest to jedno i to samo co zwyczajne 2.
Meatrikz, twoja metoda próbuje cały czas maskować życie herosa, ale pomijając sposób w jaki to napisałeś, naprawdę nie wydaje się to lepszą metodą od nadania flagi nieśmiertelności.