dosinabox / g2nr_unofficial_update

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

B_SetHeroSkin #303

Closed Kor-Angar closed 3 years ago

Kor-Angar commented 3 years ago

Добавь пожалуйста проверку в B_SetHeroSkin на то НПС это герой. https://github.com/dosinabox/g2nr_unofficial_update/blob/aed56ebb175bc52740bf908b2ece4ef16490b17d/PrjGOTHIC/Story/B_Story/B_ArmorChecks.d#L315 а то я только сегодня понял почему у меня все НПС после переодевания брони через марвин клонировались в Героя :-(

Kor-Angar commented 3 years ago

проверка на (Npc_IsPlayer(self) поможет?

dosinabox commented 3 years ago

проверка на (Npc_IsPlayer(self) поможет?

Она всегда будет выполняться, если НПС в данный момент под контролем игрока.

dosinabox commented 3 years ago
if(Hlp_StrCmp(npc.name[0],"Я") == TRUE)
{
    ...
};

или, предпочтительнее:

var C_Npc her;
her = Hlp_GetNpc(PC_Hero);
if(Hlp_GetInstanceID(npc) == Hlp_GetInstanceID(her))
{
    ...
};
dosinabox commented 3 years ago

Это оказалось сложнее, потому что в момент загрузки сохранения эта функция вызывается раньше, чем происходит инициализация персонажа. Проверять некого.

Kor-Angar commented 3 years ago

Глюк происходит при переодевания доспех, т. е. Игра зугружена, включен марвин, далее  НПС которым управляет игрок  снимает доспех и одевает тот же или другой. 19:03, 5 ноября 2020 г., dosinabox notifications@github.com: Это оказалось сложнее, потому что в момент загрузки сохранения эта функция вызывается раньше, чем происходит инициализация персонажа. Проверять некого.

—You are receiving this because you authored the thread.Reply to this email directly, view it on GitHub, or unsubscribe. -- Отправлено из мобильного приложения Яндекс.Почты

dosinabox commented 3 years ago

Я знаю об этом и это исправляется этой проверкой. Но если использовать эту проверку, то с ГГ будет слетать текстура тела при загрузке сохранения, потому что в этот момент проверить его нельзя.

Kor-Angar commented 3 years ago

Ясно19:17, 5 ноября 2020 г., dosinabox notifications@github.com: Я знаю об этом и это исправляется этой проверкой. Но если использовать эту проверку, то с ГГ будет слетать текстура тела при загрузке сохранения, потому что в этот момент проверить его нельзя.

—You are receiving this because you authored the thread.Reply to this email directly, view it on GitHub, or unsubscribe. -- Отправлено из мобильного приложения Яндекс.Почты

Kor-Angar commented 3 years ago

Ну по крайней мере теперь известно, что такое явление имеется. На каком то форуме видел что кто то тоже писал об этом. Мне было важно понять из-за чего это происходит, я узнал. Как это исправит мне для моих тестов тоже понятно.

dosinabox commented 3 years ago

Памятка: Npc_IsPlayer() - запрашивает у движка, управляет ли игрок персонажем. C_NpcIsHero() - определяет, является ли инстанция персонажа равной pc_hero.

dosinabox commented 3 years ago

исправлено пришлось хорошенько поработать над функциями инициализации миров

Kor-Angar commented 3 years ago

можно опять переодевать НПС через марвин без эффекта агента Смита из матрицы?

dosinabox commented 3 years ago

ну да

func void B_SetHeroSkin()
{
    var int BodyTex;
    if(C_NpcIsHero(hero))
    {
        if((MILArmor_Equipped == TRUE) || (NOVArmor_Equipped == TRUE) || (SLDArmor_Equipped == TRUE) || (OpenArmor_Equipped == TRUE) || (NakedBodySkin == TRUE))
        {
            BodyTex = BodyTex_N;
        }
        else if(G1BodySkin == TRUE)
        {
            BodyTex = BodyTex_Player_G1;
        }
        else if(SequelBodySkin == TRUE)
        {
            BodyTex = BodyTex_Player_Sequel;
        }
        else if(TattoosBodySkin == TRUE)
        {
            BodyTex = BodyTex_Tattoo_N;
        }
        else
        {
            BodyTex = BodyTex_Player_G2;
        };
        Mdl_SetVisualBody(hero,"hum_body_Naked0",BodyTex,0,"Hum_Head_Pony",Face_N_Player,0,NO_ARMOR);
    };
};