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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Внимание!
    — Требуется примерно по 3-5 человек на каждую из версий ОС:: - Windows® XP SP3, Windows® Vista SP2, Windows® 7 SP1, Windows® 8, Windows® 8.1, Windows® 10(build 10 1607) и Windows® 10(build 10 1703). Для стационарных ПК и ноутбуков. Заявку на участие можно оставить здесь...

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

Terson

Участник форума
Регистрация
20 Апр 2011
Сообщения
12
Благодарности
0
Баллы
150
  • Первое сообщение
  • #1
1)как файл bobo.wma отправить в мод? и откуда взять этот мод...

2)читал порядок работы с gothic_vdfs(уважаемого маразмуса) не понял про *.* чего надо вставлять?
у меня получается файл windows media player при запаковке измененного gothic.dat и ou.bin.надо ли исчо чего-нибудь добавлять.

3)вообщем разжуйте подробно, и не пишите читай ввв.тутпонятно.гы
 

Lorddemonik

Участник форума
Регистрация
17 Дек 2011
Сообщения
444
Благодарности
169
Баллы
210
Приветствую, обнаружил у себя в наработках проблему. ГГ, имея при себе отмычку и зная навык взлома, не хочет взламывать сундуки. Жалуется все, что отмычки нет. Проверял на оригинальных сундуках игры, ни один не хочет взламывать. Не знаете ли, как можно решить данную проблему?
Ловил такой же баг, когда кто-то переименовал инстанцию отмычки.
ItKE_lockpick
Вот такое название должно быть, любое отличие и гг говорит что нет отмычки

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

gggg12345678!

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

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

Lorddemonik

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

gggg12345678!

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

Lorddemonik

Участник форума
Регистрация
17 Дек 2011
Сообщения
444
Благодарности
169
Баллы
210
Да, конечно.
Вообще с осени не заходил в ГС, так что ничего не помню). А вообще, я, кажется, понял в чем проблема..
Вопрос решился, хз как это проверяет игра.
Проверил, и правда заработало.
Смотри, файл 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
Сообщения
192
Благодарности
87
Баллы
140
Вопрос решился, хз как это проверяет игра.
Проверил, и правда заработало.
Смотри, файл 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
Сообщения
13
Благодарности
1
Баллы
165
Поздравляю всех с прошедшими праздниками!!!
Выявил интересный баг, на который раньше не обращал внимание.
Начинаю новую игру и вижу что все НПС держат оружие как новички, не смотря на то что у них навык владения ближним или дальним по 60,80 а порой и по 100 %.
Сохраняюсь, загружаю сейв и у них все нормализуется... что бы это могло быть?!
 

MEG@VOLT

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

Ulgamecid

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

Orc Hunter

Участник форума
Регистрация
12 Окт 2013
Сообщения
936
Благодарности
1.155
Баллы
265
Есть ли возможность сделать так, чтобы определенный предмет по мере приближения к нему гг начинал светиться?
 

Lorddemonik

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

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

Gratt


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

Orc Hunter

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

Gratt


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

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

D36


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

alex_draven


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

Lorddemonik

Участник форума
Регистрация
17 Дек 2011
Сообщения
444
Благодарности
169
Баллы
210
Поздравляю всех с прошедшими праздниками!!!
Выявил интересный баг, на который раньше не обращал внимание.
Начинаю новую игру и вижу что все НПС держат оружие как новички, не смотря на то что у них навык владения ближним или дальним по 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
Сообщения
18.450
Благодарности
6.915
Баллы
740
В папку anims кидаем меш орка из Готики 2 в формате ASC (исключительно тушу). В папку textures кидаем текстуры в формате TGA, соответствующие данному мешу. Прописываем орка в скриптах, компилируем. Запускаем игру, вставляем через консоль нового орка. Смотрим, что все корректно отображается. Выходим из игры, забираем скомпилированный материал из папок _compiled. Пакуем в xxx.MOD.
По-моему, сама модель орка в двух играх ничем не отличается принципиально ни по составу костей, ни по составу слотов, поэтому такой способ должен работать без проблем.
Еще, фаю надо прописывать для них и что-то с гильдиями думать, или айварами..
 

Ulgamecid

Участник форума
Регистрация
5 Дек 2014
Сообщения
13
Благодарности
1
Баллы
165
Смотри файл по 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
Сообщения
230
Благодарности
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 разных модах, где появлялся сей баг. В итоге все работает. В дальнейшем вроде ничего не сломалось
Ну, да, у меня все правильно... Проверил хоть да вроде и не сталкивался с таким, надо будет запомнить...
 
Сверху Снизу