• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Не стесняюсь спросить....

Lorddemonik

★★★★★
Редактор раздела
Регистрация
17 Дек 2011
Сообщения
1.113
Благодарности
581
Баллы
350
Приветствую, обнаружил у себя в наработках проблему. ГГ, имея при себе отмычку и зная навык взлома, не хочет взламывать сундуки. Жалуется все, что отмычки нет. Проверял на оригинальных сундуках игры, ни один не хочет взламывать. Не знаете ли, как можно решить данную проблему?

Ловил такой же баг, когда кто-то переименовал инстанцию отмычки.
ItKE_lockpick
Вот такое название должно быть, любое отличие и гг говорит что нет отмычки

З.ы Это для Г2, для первой части не уверен
 

gggg12345678!

Участник форума
Регистрация
6 Янв 2016
Сообщения
415
Благодарности
384
Баллы
220
Ловил такой же баг, когда кто-то переименовал инстанцию отмычки.
ItKE_lockpick
Вот такое название должно быть, любое отличие и гг говорит что нет отмычки

З.ы Это для Г2, для первой части не уверен
Самое забавное, у меня название инстанции такое же:)
 

Lorddemonik

★★★★★
Редактор раздела
Регистрация
17 Дек 2011
Сообщения
1.113
Благодарности
581
Баллы
350
Ловил такой же баг, когда кто-то переименовал инстанцию отмычки.
ItKE_lockpick
Вот такое название должно быть, любое отличие и гг говорит что нет отмычки
Самое забавное, у меня название инстанции такое же:)
Можешь скрипты дать?
 

gggg12345678!

Участник форума
Регистрация
6 Янв 2016
Сообщения
415
Благодарности
384
Баллы
220

Lorddemonik

★★★★★
Редактор раздела
Регистрация
17 Дек 2011
Сообщения
1.113
Благодарности
581
Баллы
350
Да, конечно.
Вообще с осени не заходил в ГС, так что ничего не помню). А вообще, я, кажется, понял в чем проблема..
Вопрос решился, хз как это проверяет игра.
Проверил, и правда заработало.
Смотри, файл Constants.d
Консты талантов
const int NPC_TALENT_UNKNOWN = 0;
const int NPC_TALENT_1H = 1;
const int NPC_TALENT_2H = 2;
const int NPC_TALENT_BOW = 3;
const int NPC_TALENT_CROSSBOW = 4;
const int NPC_TALENT_SHIELD = 5;
const int NPC_TALENT_MAGE = 7;
const int NPC_TALENT_SNEAK = 8;
const int NPC_TALENT_REGENERATE = 9;
const int NPC_TALENT_PICKLOCK = 10;
const int NPC_TALENT_ACROBAT = 11;
const int NPC_TALENT_PICKPOCKET = 12;
const int NPC_TALENT_SMITH = 13;
const int NPC_TALENT_RUNES = 14;
const int NPC_TALENT_ALCHEMY = 15;
const int NPC_TALENT_TAKEANIMALTROPHY = 16;
const int NPC_TALENT_FOREIGNLANGUAGE = 17;
const int NPC_TALENT_WISPDETECTOR = 18;
const int NPC_TALENT_MakeArrows = 19;
const int NPC_TALENT_MakeScrolls = 20;
const int NPC_TALENT_E = 21;
const int NPC_TALENT_MAX = 22;

Поменяй
const int NPC_TALENT_PICKLOCK = 10;
на
const int NPC_TALENT_PICKLOCK = 5;
Игра реагирует на номер, как только оно становиться КАК И БЫЛО обратно = 5 отмычки работают

З.ы Если менял другие таланты, проверь и их
 

gggg12345678!

Участник форума
Регистрация
6 Янв 2016
Сообщения
415
Благодарности
384
Баллы
220
Вопрос решился, хз как это проверяет игра.
Проверил, и правда заработало.
Смотри, файл Constants.d
Консты талантов
const int NPC_TALENT_UNKNOWN = 0;
const int NPC_TALENT_1H = 1;
const int NPC_TALENT_2H = 2;
const int NPC_TALENT_BOW = 3;
const int NPC_TALENT_CROSSBOW = 4;
const int NPC_TALENT_SHIELD = 5;
const int NPC_TALENT_MAGE = 7;
const int NPC_TALENT_SNEAK = 8;
const int NPC_TALENT_REGENERATE = 9;
const int NPC_TALENT_PICKLOCK = 10;
const int NPC_TALENT_ACROBAT = 11;
const int NPC_TALENT_PICKPOCKET = 12;
const int NPC_TALENT_SMITH = 13;
const int NPC_TALENT_RUNES = 14;
const int NPC_TALENT_ALCHEMY = 15;
const int NPC_TALENT_TAKEANIMALTROPHY = 16;
const int NPC_TALENT_FOREIGNLANGUAGE = 17;
const int NPC_TALENT_WISPDETECTOR = 18;
const int NPC_TALENT_MakeArrows = 19;
const int NPC_TALENT_MakeScrolls = 20;
const int NPC_TALENT_E = 21;
const int NPC_TALENT_MAX = 22;

Поменяй
const int NPC_TALENT_PICKLOCK = 10;
на
const int NPC_TALENT_PICKLOCK = 5;
Игра реагирует на номер, как только оно становиться КАК И БЫЛО обратно = 5 отмычки работают

З.ы Если менял другие таланты, проверь и их
Да, все работает. Благодарю))
 

Ulgamecid

Участник форума
Регистрация
5 Дек 2014
Сообщения
19
Благодарности
6
Баллы
170
Поздравляю всех с прошедшими праздниками!!!
Выявил интересный баг, на который раньше не обращал внимание.
Начинаю новую игру и вижу что все НПС держат оружие как новички, не смотря на то что у них навык владения ближним или дальним по 60,80 а порой и по 100 %.
Сохраняюсь, загружаю сейв и у них все нормализуется... что бы это могло быть?!
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
Поздравляю всех с прошедшими праздниками!!!
Выявил интересный баг, на который раньше не обращал внимание.
Начинаю новую игру и вижу что все НПС держат оружие как новички, не смотря на то что у них навык владения ближним или дальним по 60,80 а порой и по 100 %.
Сохраняюсь, загружаю сейв и у них все нормализуется... что бы это могло быть?!
это глюк игры. Я так и не смог его поправить, либо давал неписю полный комплект мастера, либо оставлял как есть.
 

Ulgamecid

Участник форума
Регистрация
5 Дек 2014
Сообщения
19
Благодарности
6
Баллы
170
это глюк игры. Я так и не смог его поправить, либо давал неписю полный комплект мастера, либо оставлял как есть.
Кхм... Я так и думал. В стимовской версии Г2 такого нет кстати, а вот в пиратке такое явление значит считается нормой.. спасибо за ответ.
 

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.667
Баллы
305
Есть ли возможность сделать так, чтобы определенный предмет по мере приближения к нему гг начинал светиться?
 

Lorddemonik

★★★★★
Редактор раздела
Регистрация
17 Дек 2011
Сообщения
1.113
Благодарности
581
Баллы
350
Есть ли возможность сделать так, чтобы определенный предмет по мере приближения к нему гг начинал светиться?
Могу предложить только триггер с зоной, при входе в которую на место/предмет будет проигрываться эффект/вылезать из земли воб

Ну или при наличии глобального триггера (вывод времени на экран например), можно приделать к нему реакцию на дистанцию по отношению персонажа к воду с предметом
 
Последнее редактирование:

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Есть ли возможность сделать так, чтобы определенный предмет по мере приближения к нему гг начинал светиться?
твой вопрос на 90% ответ. зачем тебе расширители, если ты не в состоянии реализовать пару строк кода?
 

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.667
Баллы
305
твой вопрос на 90% ответ. зачем тебе расширители, если ты не в состоянии реализовать пару строк кода?
Я пробовал, но ничего не срабатывает. К сведению я писал без расширителей такие функции, которые до меня ни кто так не смог реализовать. Но ведь у каждого может что-то не получиться.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
К сведению я писал без расширителей такие функции, которые до меня ни кто так не смог реализовать
скажи это тем, кто из принципов не кодит расширители.. они тебя побьют за то что хлеб у них отнимаешь :D

Но ведь у каждого может что-то не получиться.
тз поставь четкое
 

D36


Модостроитель
Регистрация
3 Дек 2014
Сообщения
2.189
Благодарности
3.373
Баллы
485
Интересует правильный способ добавления новых моделей или скинов орков в Г1. Хочется добавить, например, элитного орка, или шаманов с новыми текстурами.
 

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
В папку anims кидаем меш орка из Готики 2 в формате ASC (исключительно тушу). В папку textures кидаем текстуры в формате TGA, соответствующие данному мешу. Прописываем орка в скриптах, компилируем. Запускаем игру, вставляем через консоль нового орка. Смотрим, что все корректно отображается. Выходим из игры, забираем скомпилированный материал из папок _compiled. Пакуем в xxx.MOD.
По-моему, сама модель орка в двух играх ничем не отличается принципиально ни по составу костей, ни по составу слотов, поэтому такой способ должен работать без проблем.
 

Lorddemonik

★★★★★
Редактор раздела
Регистрация
17 Дек 2011
Сообщения
1.113
Благодарности
581
Баллы
350
Поздравляю всех с прошедшими праздниками!!!
Выявил интересный баг, на который раньше не обращал внимание.
Начинаю новую игру и вижу что все НПС держат оружие как новички, не смотря на то что у них навык владения ближним или дальним по 60,80 а порой и по 100 %.
Сохраняюсь, загружаю сейв и у них все нормализуется... что бы это могло быть?!

Смотри файл по B_AddFightSkill лежит Story/B_Story
Когда баг присутствует, файл выглядит вот так:
Код:
func void B_AddFightSkill(var C_Npc slf,var int talent,var int percent)
{
    if(talent == NPC_TALENT_1H)
    {
        slf.HitChance[NPC_TALENT_1H] = slf.HitChance[NPC_TALENT_1H] + percent;
        if(slf.HitChance[NPC_TALENT_1H] >= 0)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,0);
        };
        if(slf.HitChance[NPC_TALENT_1H] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,1);
        };
        if(slf.HitChance[NPC_TALENT_1H] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,2);
        };
    };
    if(talent == NPC_TALENT_2H)
    {
        slf.HitChance[NPC_TALENT_2H] = slf.HitChance[NPC_TALENT_2H] + percent;
        if(slf.HitChance[NPC_TALENT_1H] >= 0)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,0);
        };
        if(slf.HitChance[NPC_TALENT_2H] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,1);
        };
        if(slf.HitChance[NPC_TALENT_2H] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,2);
        };
    };
    if(talent == NPC_TALENT_BOW)
    {
        slf.HitChance[NPC_TALENT_BOW] = slf.HitChance[NPC_TALENT_BOW] + percent;
        if(slf.HitChance[NPC_TALENT_BOW] >= 0)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,0);
        };
        if(slf.HitChance[NPC_TALENT_BOW] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,1);
        };
        if(slf.HitChance[NPC_TALENT_BOW] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,2);
        };
    };
    if(talent == NPC_TALENT_CROSSBOW)
    {
        slf.HitChance[NPC_TALENT_CROSSBOW] = slf.HitChance[NPC_TALENT_CROSSBOW] + percent;
        if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 0)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,0);
        };
        if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,1);
        };
        if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,2);
        };
    };
};
Думаю проблема в том, что не указано присваивать анимацию атаки, а после Сейв/Лоад игра основываясь на процентах присваивает сама. Лечится указанием анимации. Файл в итоге приобретает вот такую форму:
Код:
func void B_AddFightSkill(var C_Npc slf,var int talent,var int percent)
{
    if(talent == NPC_TALENT_1H)
    {
        slf.HitChance[NPC_TALENT_1H] += percent;
        if(slf.HitChance[NPC_TALENT_1H] > 100)
        {
            slf.HitChance[NPC_TALENT_1H] = 100;
        };
        if(slf.HitChance[NPC_TALENT_1H] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,2);
            Mdl_ApplyOverlayMds(slf,"humans_1hST2.mds");
        }
        else if(slf.HitChance[NPC_TALENT_1H] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,1);
            Mdl_ApplyOverlayMds(slf,"humans_1hST1.mds");
        }
        else
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,0);
            Mdl_RemoveOverlayMds(slf,"humans_1hST1.MDS");
            Mdl_RemoveOverlayMds(slf,"humans_1hST2.MDS");
        };
    };
    if(talent == NPC_TALENT_2H)
    {
        slf.HitChance[NPC_TALENT_2H] += percent;
        if(slf.HitChance[NPC_TALENT_2H] > 100)
        {
            slf.HitChance[NPC_TALENT_2H] = 100;
        };
        if(slf.HitChance[NPC_TALENT_2H] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,2);
            Mdl_ApplyOverlayMds(slf,"humans_2hST2.mds");
        }
        else if(slf.HitChance[NPC_TALENT_2H] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,1);
            Mdl_ApplyOverlayMds(slf,"humans_2hST1.mds");
        }
        else
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,0);
            Mdl_RemoveOverlayMds(slf,"humans_2hST1.MDS");
            Mdl_RemoveOverlayMds(slf,"humans_2hST2.MDS");
        };
    };
    if(talent == NPC_TALENT_BOW)
    {
        slf.HitChance[NPC_TALENT_BOW] += percent;
        if(slf.HitChance[NPC_TALENT_BOW] > 100)
        {
            slf.HitChance[NPC_TALENT_BOW] = 100;
        };
        if(slf.HitChance[NPC_TALENT_BOW] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,2);
            Mdl_ApplyOverlayMds(slf,"humans_bowT2.mds");
        }
        else if(slf.HitChance[NPC_TALENT_BOW] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,1);
            Mdl_ApplyOverlayMds(slf,"humans_bowT1.mds");
        }
        else
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,0);
            Mdl_RemoveOverlayMds(slf,"humans_bowT1.MDS");
            Mdl_RemoveOverlayMds(slf,"humans_bowT2.MDS");
        };
    };
    if(talent == NPC_TALENT_CROSSBOW)
    {
        slf.HitChance[NPC_TALENT_CROSSBOW] += percent;
        if(slf.HitChance[NPC_TALENT_CROSSBOW] > 100)
        {
            slf.HitChance[NPC_TALENT_CROSSBOW] = 100;
        };
        if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,2);
            Mdl_ApplyOverlayMds(slf,"humans_cbowT2.mds");
        }
        else if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,1);
            Mdl_ApplyOverlayMds(slf,"humans_cbowT1.mds");
        }
        else
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,0);
            Mdl_RemoveOverlayMds(slf,"humans_cbowT1.MDS");
            Mdl_RemoveOverlayMds(slf,"humans_cbowT2.MDS");
        };
    };
};
Пробовал на 3 разных модах, где появлялся сей баг. В итоге все работает. В дальнейшем вроде ничего не сломалось
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
В папку anims кидаем меш орка из Готики 2 в формате ASC (исключительно тушу). В папку textures кидаем текстуры в формате TGA, соответствующие данному мешу. Прописываем орка в скриптах, компилируем. Запускаем игру, вставляем через консоль нового орка. Смотрим, что все корректно отображается. Выходим из игры, забираем скомпилированный материал из папок _compiled. Пакуем в xxx.MOD.
По-моему, сама модель орка в двух играх ничем не отличается принципиально ни по составу костей, ни по составу слотов, поэтому такой способ должен работать без проблем.
Еще, фаю надо прописывать для них и что-то с гильдиями думать, или айварами..
 

Ulgamecid

Участник форума
Регистрация
5 Дек 2014
Сообщения
19
Благодарности
6
Баллы
170
Смотри файл по B_AddFightSkill лежит Story/B_Story
Когда баг присутствует, файл выглядит вот так:
Код:
func void B_AddFightSkill(var C_Npc slf,var int talent,var int percent)
{
    if(talent == NPC_TALENT_1H)
    {
        slf.HitChance[NPC_TALENT_1H] = slf.HitChance[NPC_TALENT_1H] + percent;
        if(slf.HitChance[NPC_TALENT_1H] >= 0)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,0);
        };
        if(slf.HitChance[NPC_TALENT_1H] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,1);
        };
        if(slf.HitChance[NPC_TALENT_1H] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,2);
        };
    };
    if(talent == NPC_TALENT_2H)
    {
        slf.HitChance[NPC_TALENT_2H] = slf.HitChance[NPC_TALENT_2H] + percent;
        if(slf.HitChance[NPC_TALENT_1H] >= 0)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,0);
        };
        if(slf.HitChance[NPC_TALENT_2H] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,1);
        };
        if(slf.HitChance[NPC_TALENT_2H] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,2);
        };
    };
    if(talent == NPC_TALENT_BOW)
    {
        slf.HitChance[NPC_TALENT_BOW] = slf.HitChance[NPC_TALENT_BOW] + percent;
        if(slf.HitChance[NPC_TALENT_BOW] >= 0)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,0);
        };
        if(slf.HitChance[NPC_TALENT_BOW] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,1);
        };
        if(slf.HitChance[NPC_TALENT_BOW] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,2);
        };
    };
    if(talent == NPC_TALENT_CROSSBOW)
    {
        slf.HitChance[NPC_TALENT_CROSSBOW] = slf.HitChance[NPC_TALENT_CROSSBOW] + percent;
        if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 0)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,0);
        };
        if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,1);
        };
        if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,2);
        };
    };
};
Думаю проблема в том, что не указано присваивать анимацию атаки, а после Сейв/Лоад игра основываясь на процентах присваивает сама. Лечится указанием анимации. Файл в итоге приобретает вот такую форму:
Код:
func void B_AddFightSkill(var C_Npc slf,var int talent,var int percent)
{
    if(talent == NPC_TALENT_1H)
    {
        slf.HitChance[NPC_TALENT_1H] += percent;
        if(slf.HitChance[NPC_TALENT_1H] > 100)
        {
            slf.HitChance[NPC_TALENT_1H] = 100;
        };
        if(slf.HitChance[NPC_TALENT_1H] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,2);
            Mdl_ApplyOverlayMds(slf,"humans_1hST2.mds");
        }
        else if(slf.HitChance[NPC_TALENT_1H] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,1);
            Mdl_ApplyOverlayMds(slf,"humans_1hST1.mds");
        }
        else
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,0);
            Mdl_RemoveOverlayMds(slf,"humans_1hST1.MDS");
            Mdl_RemoveOverlayMds(slf,"humans_1hST2.MDS");
        };
    };
    if(talent == NPC_TALENT_2H)
    {
        slf.HitChance[NPC_TALENT_2H] += percent;
        if(slf.HitChance[NPC_TALENT_2H] > 100)
        {
            slf.HitChance[NPC_TALENT_2H] = 100;
        };
        if(slf.HitChance[NPC_TALENT_2H] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,2);
            Mdl_ApplyOverlayMds(slf,"humans_2hST2.mds");
        }
        else if(slf.HitChance[NPC_TALENT_2H] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,1);
            Mdl_ApplyOverlayMds(slf,"humans_2hST1.mds");
        }
        else
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,0);
            Mdl_RemoveOverlayMds(slf,"humans_2hST1.MDS");
            Mdl_RemoveOverlayMds(slf,"humans_2hST2.MDS");
        };
    };
    if(talent == NPC_TALENT_BOW)
    {
        slf.HitChance[NPC_TALENT_BOW] += percent;
        if(slf.HitChance[NPC_TALENT_BOW] > 100)
        {
            slf.HitChance[NPC_TALENT_BOW] = 100;
        };
        if(slf.HitChance[NPC_TALENT_BOW] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,2);
            Mdl_ApplyOverlayMds(slf,"humans_bowT2.mds");
        }
        else if(slf.HitChance[NPC_TALENT_BOW] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,1);
            Mdl_ApplyOverlayMds(slf,"humans_bowT1.mds");
        }
        else
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,0);
            Mdl_RemoveOverlayMds(slf,"humans_bowT1.MDS");
            Mdl_RemoveOverlayMds(slf,"humans_bowT2.MDS");
        };
    };
    if(talent == NPC_TALENT_CROSSBOW)
    {
        slf.HitChance[NPC_TALENT_CROSSBOW] += percent;
        if(slf.HitChance[NPC_TALENT_CROSSBOW] > 100)
        {
            slf.HitChance[NPC_TALENT_CROSSBOW] = 100;
        };
        if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,2);
            Mdl_ApplyOverlayMds(slf,"humans_cbowT2.mds");
        }
        else if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,1);
            Mdl_ApplyOverlayMds(slf,"humans_cbowT1.mds");
        }
        else
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,0);
            Mdl_RemoveOverlayMds(slf,"humans_cbowT1.MDS");
            Mdl_RemoveOverlayMds(slf,"humans_cbowT2.MDS");
        };
    };
};
Пробовал на 3 разных модах, где появлялся сей баг. В итоге все работает. В дальнейшем вроде ничего не сломалось


СПАСИБО!!!! Реально помогло!! Этот баг покоя не давал!!! Плюсую!!!
 

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
229
Благодарности
109
Баллы
190
Смотри файл по B_AddFightSkill лежит Story/B_Story
Когда баг присутствует, файл выглядит вот так:
Код:
func void B_AddFightSkill(var C_Npc slf,var int talent,var int percent)
{
    if(talent == NPC_TALENT_1H)
    {
        slf.HitChance[NPC_TALENT_1H] = slf.HitChance[NPC_TALENT_1H] + percent;
        if(slf.HitChance[NPC_TALENT_1H] >= 0)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,0);
        };
        if(slf.HitChance[NPC_TALENT_1H] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,1);
        };
        if(slf.HitChance[NPC_TALENT_1H] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,2);
        };
    };
    if(talent == NPC_TALENT_2H)
    {
        slf.HitChance[NPC_TALENT_2H] = slf.HitChance[NPC_TALENT_2H] + percent;
        if(slf.HitChance[NPC_TALENT_1H] >= 0)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,0);
        };
        if(slf.HitChance[NPC_TALENT_2H] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,1);
        };
        if(slf.HitChance[NPC_TALENT_2H] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,2);
        };
    };
    if(talent == NPC_TALENT_BOW)
    {
        slf.HitChance[NPC_TALENT_BOW] = slf.HitChance[NPC_TALENT_BOW] + percent;
        if(slf.HitChance[NPC_TALENT_BOW] >= 0)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,0);
        };
        if(slf.HitChance[NPC_TALENT_BOW] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,1);
        };
        if(slf.HitChance[NPC_TALENT_BOW] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,2);
        };
    };
    if(talent == NPC_TALENT_CROSSBOW)
    {
        slf.HitChance[NPC_TALENT_CROSSBOW] = slf.HitChance[NPC_TALENT_CROSSBOW] + percent;
        if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 0)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,0);
        };
        if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,1);
        };
        if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,2);
        };
    };
};
Думаю проблема в том, что не указано присваивать анимацию атаки, а после Сейв/Лоад игра основываясь на процентах присваивает сама. Лечится указанием анимации. Файл в итоге приобретает вот такую форму:
Код:
func void B_AddFightSkill(var C_Npc slf,var int talent,var int percent)
{
    if(talent == NPC_TALENT_1H)
    {
        slf.HitChance[NPC_TALENT_1H] += percent;
        if(slf.HitChance[NPC_TALENT_1H] > 100)
        {
            slf.HitChance[NPC_TALENT_1H] = 100;
        };
        if(slf.HitChance[NPC_TALENT_1H] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,2);
            Mdl_ApplyOverlayMds(slf,"humans_1hST2.mds");
        }
        else if(slf.HitChance[NPC_TALENT_1H] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,1);
            Mdl_ApplyOverlayMds(slf,"humans_1hST1.mds");
        }
        else
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_1H,0);
            Mdl_RemoveOverlayMds(slf,"humans_1hST1.MDS");
            Mdl_RemoveOverlayMds(slf,"humans_1hST2.MDS");
        };
    };
    if(talent == NPC_TALENT_2H)
    {
        slf.HitChance[NPC_TALENT_2H] += percent;
        if(slf.HitChance[NPC_TALENT_2H] > 100)
        {
            slf.HitChance[NPC_TALENT_2H] = 100;
        };
        if(slf.HitChance[NPC_TALENT_2H] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,2);
            Mdl_ApplyOverlayMds(slf,"humans_2hST2.mds");
        }
        else if(slf.HitChance[NPC_TALENT_2H] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,1);
            Mdl_ApplyOverlayMds(slf,"humans_2hST1.mds");
        }
        else
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_2H,0);
            Mdl_RemoveOverlayMds(slf,"humans_2hST1.MDS");
            Mdl_RemoveOverlayMds(slf,"humans_2hST2.MDS");
        };
    };
    if(talent == NPC_TALENT_BOW)
    {
        slf.HitChance[NPC_TALENT_BOW] += percent;
        if(slf.HitChance[NPC_TALENT_BOW] > 100)
        {
            slf.HitChance[NPC_TALENT_BOW] = 100;
        };
        if(slf.HitChance[NPC_TALENT_BOW] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,2);
            Mdl_ApplyOverlayMds(slf,"humans_bowT2.mds");
        }
        else if(slf.HitChance[NPC_TALENT_BOW] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,1);
            Mdl_ApplyOverlayMds(slf,"humans_bowT1.mds");
        }
        else
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_BOW,0);
            Mdl_RemoveOverlayMds(slf,"humans_bowT1.MDS");
            Mdl_RemoveOverlayMds(slf,"humans_bowT2.MDS");
        };
    };
    if(talent == NPC_TALENT_CROSSBOW)
    {
        slf.HitChance[NPC_TALENT_CROSSBOW] += percent;
        if(slf.HitChance[NPC_TALENT_CROSSBOW] > 100)
        {
            slf.HitChance[NPC_TALENT_CROSSBOW] = 100;
        };
        if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 60)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,2);
            Mdl_ApplyOverlayMds(slf,"humans_cbowT2.mds");
        }
        else if(slf.HitChance[NPC_TALENT_CROSSBOW] >= 30)
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,1);
            Mdl_ApplyOverlayMds(slf,"humans_cbowT1.mds");
        }
        else
        {
            Npc_SetTalentSkill(slf,NPC_TALENT_CROSSBOW,0);
            Mdl_RemoveOverlayMds(slf,"humans_cbowT1.MDS");
            Mdl_RemoveOverlayMds(slf,"humans_cbowT2.MDS");
        };
    };
};
Пробовал на 3 разных модах, где появлялся сей баг. В итоге все работает. В дальнейшем вроде ничего не сломалось
Ну, да, у меня все правильно... Проверил хоть да вроде и не сталкивался с таким, надо будет запомнить...
 
Сверху Снизу