dosinabox / g2nr_unofficial_update

Исходники скриптов, релизы, хотфиксы и тестовые версии неофициального обновления для игры "Готика 2: Ночь Ворона".
https://worldofplayers.ru/threads/36817
The Unlicense
13 stars 1 forks source link

Смерть от Слез Инноса #270

Closed dosinabox closed 4 years ago

dosinabox commented 4 years ago

ГГ неправильно умирает от Слез Инноса - пропускается анимация горения и крики. См. UseItPo_PotionOfDeath().

UnresolvedExternal commented 4 years ago

Потому что померший персонаж не умеет кричать и проигрывать анимации.

Kor-Angar commented 4 years ago

а если слезами инноса ему уменьшить жизни к примеру до 10 и поджечь?

UnresolvedExternal commented 4 years ago

Есть такой вариант

        IsPainfulDeath = true;
        Wld_PlayEffect("VOB_MAGICBURN", self, self, 0, 0, 0, FALSE);
        AI_StartState(self, ZS_MagicFreeze, 0, "");
func void ZS_MagicFreeze()
{
    if (IsPainfulDeath == TRUE)
    {
        PainfulDeathState = 0;
        return;
    };
func int ZS_MagicFreeze_Loop()
{
    if (IsPainfulDeath)
    {
        return PainfulDeath_Loop();
    };
func int PainfulDeath_Loop()
{
    var int time;
    time = Npc_GetStateTime(self);

    if (time == 0 && PainfulDeathState == 0)
    {
        B_Say(self, self, "$DEAD");
        Npc_PlayAni(self, "S_FIRE_VICTIM");
        PainfulDeathState = 1;
    } else if (time == 2 && PainfulDeathState == 1)
    {
        Npc_StopAni(self, "S_FIRE_VICTIM");
        B_KillNpc(self);
        PainfulDeathState = 2;
    };

    if (PainfulDeathState >= 2)
    {
                IsPainfulDeath = false;
        return LOOP_END;
    };

    return LOOP_CONTINUE;
};
UnresolvedExternal commented 4 years ago

IsPainfulDeath лучше в аивары затолкать, а то вдруг игрок слёзы выпьет во время чьей-нибудь заморозки.

dosinabox commented 4 years ago

Вот так идеально:

const int AIV_ReadyForPainfulDeath = 89;
self.aivar[AIV_ReadyForPainfulDeath] = TRUE;
AI_StartState(self,ZS_MagicFreeze,0,"");
func void ZS_MagicFreeze()
{
    if(self.aivar[AIV_ReadyForPainfulDeath] == TRUE)
    {
        PainfulDeathState = 0;
        return;
    };
func int ZS_MagicFreeze_Loop()
{
    if(self.aivar[AIV_ReadyForPainfulDeath] == TRUE)
    {
        return PainfulDeath_Loop();
    };
var int PainfulDeathState;

func int PainfulDeath_Loop()
{
    var int time;
    time = Npc_GetStateTime(self);
    if((time == 0) && (PainfulDeathState == 0))
    {
        Wld_PlayEffect("VOB_MAGICBURN",self,self,0,0,0,FALSE);
        B_Say(self,self,"$AARGH_1");
        Npc_PlayAni(self,"S_FIRE_VICTIM");
        PainfulDeathState = 1;
    }
    else if((time == 2) && (PainfulDeathState == 1))
    {
        B_Say(self,self,"$DEAD");
        PainfulDeathState = 2;
    }
    else if((time == 3) && (PainfulDeathState == 2))
    {
        Npc_StopAni(self,"S_FIRE_VICTIM");
        B_KillNpc(self);
        PainfulDeathState = 3;
    };
    if(PainfulDeathState >= 3)
    {
        self.aivar[AIV_ReadyForPainfulDeath] = false;
        return LOOP_END;
    };
    return LOOP_CONTINUE;
};