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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

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

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

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.641
Баллы
625
Между используемым предметом и экипированным есть большая разница. Экипированный предмет отображается в слоте персонажа, в то время как используемый вставляется в мир. При этом тупо помечается флагом NFOCUS, чтобы его нельзя было вырвать из рук. Возможно такой объект может быть дочерним от своего НПС, но это не точно.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
Смотря для какой цели.
Если где-то проверяется, выполняет ли NPC эту рутину, "достаточно" может быть такого запроса?
1624427927165.png
Daedalus:
    if (Hlp_IsValidNpc(none_100_xardas))
    {
        Printscreen("Hlp_IsValidNpc(none_100_xardas)", 3, 3, FONT_ScreenSmall, 1);
        //если у Ксардаса текущая рутина чтение книжного стенда
        if (Npc_IsInState(none_100_xardas, ZS_Read_Bookstand))
        {
            Printscreen("ZS_Read_Bookstand", 3, 5, FONT_ScreenSmall, 1);
            //если ксардас реально читает книгу
            if (C_BodyStateContains(none_100_xardas, BS_MOBINTERACT_INTERRUPT))
            {
                Printscreen("Ксардас читает книгу", 47, 3, FONT_ScreenSmall, 1);
            };
        };
    };

Если в рутине используются несколько предметов, может лучше сделать как в рутине приема пиши, через айвары и смотреть текущий айвар?
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Коллеги, кто нибудь сталкивался с уроками по созданию анимированных вобов, в частности луков и арбалетов?
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.240
Баллы
525
Уроков не видел. Но когда-то, не имея особых навыков, умудрялся корректировать существующие модели луков и арбалетов. Думаю, это было не то, чтобы очень сложно. :)

Впрочем, оригинальные модели и оригинальные анимации не совсем совпадают друг с другом по кадрам.
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Уроков не видел. Но когда-то, не имея особых навыков, умудрялся корректировать существующие модели луков и арбалетов. Думаю, это было не то, чтобы очень сложно. :)

Впрочем, оригинальные модели и оригинальные анимации не совсем совпадают друг с другом по кадрам.

Корректировать существующие это немного не то. Речь идет о полной замене самих моделей.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.240
Баллы
525
Если коррекция происходит в 3D-редакторе, а не в текстовом виде, то какая разница, новая это модель или отредактированная старая? Процесс-то один и тот же.
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Если коррекция происходит в 3D-редакторе, а не в текстовом виде, то какая разница, новая это модель или отредактированная старая? Процесс-то один и тот же.
Вот об этом процессе хотелось бы услышать поподробней. :)
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.240
Баллы
525
Всех тонкостей я не помню. Посмотрел, когда этим делом занимался, оказалось, что аж 9 лет тому назад. *around the head*

Для начала нужно получить декомпил существующих моделей, чтобы использовать их в качестве образцов. Одна из моделей луков в оригинале кривая. Не помню точно, как она называется в Г2. В Г1 это Большой лук (ItRw_Bow_Long_01). В Г2 моделька перекочевала с изменением названия, но с сохранением исходного косяка. Эту модель в качестве образца использовать не нужно.

В результате декомпиляции получаются три файла. Например:
ITRW_BOW_LONG_01.ASC - модель в исходном состоянии
ITRW_BOW_LONG_01_SHOOT.ASC - файл анимации модели
ITRW_BOW_LONG_01.MMS - скрипт, в котором прописаны состояния анимированной модели
Состояния модели используют стандартные названия. Если анимации стрелка будут оставаться неизменными, то в аналогичном файле для новой модели нужно менять только названия файлов и, возможно, название модели.

Файл анимации модели создаётся с использованием новой модели, но с учётом образца. Нужно воспроизвести кадры анимации натяжения и выстрела. Положение вершин новой модели в отдельных кадрах должно примерно соответствовать образцу. Особенно это касается состояния S_READY. Для луков это 13-й кадр.

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

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Камрады, мб кто в курсе программы, которая бы производила поиск в документах через список в выбранном файле? Собсно задача вычленить из огромного списка только те слова, которые были найдены в файлах. Мб кто встречался с подобным? Совсем не хочется ручками 5к переменных вычленять. :(
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
Можно поконкретнее?
Поиск в файлах через total commander или notepad++ уже не подходит?
Notepad++ ctrl+f
Total alt+shift+F7
 

Вложения

  • 1626622762389.png
    1626622762389.png
    22,1 KB · Просмотры: 11
  • 1626622775091.png
    1626622775091.png
    139,9 KB · Просмотры: 8
  • 1626622807602.png
    1626622807602.png
    128,3 KB · Просмотры: 19

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Можно поконкретнее?
Поиск в файлах через total commander или notepad++ уже не подходит?
Notepad++ ctrl+f
Total alt+shift+F7
Никогда ими не пользовался. Np++ судя по скрину самый оптимальный. Спасибо большое! Щаз проверим.

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

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
Никогда ими не пользовался. Np++ судя по скрину самый оптимальный. Спасибо большое! Щаз проверим.
Ну можно ещё поставить себе visual studio code и этот плагин, и будет работа в скриптах аля в visual studio
vscode-daedalus
code_method_err.png


Конкретнее, хочу почистить файл глобальных переменных, которые уже не используются в проекте, но все еще висят в коде.
Я в польских модах делаю так
Весь story_global в коммент и начинаю убирать комменты с тех переменных, которые просит парсер. По мне вроде быстрее, чем будешь делать поиск по всем переменным.
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Кто нить в курсе - поджигание светильников работает на движке готики 2? не могу понять - толи оно вырезано из движка, то ли я косячу.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
Кто нить в курсе - поджигание светильников работает на движке готики 2? не могу понять - толи оно вырезано из движка, то ли я косячу.
Какое? Поджигание факелом фонарей? Работает, просто анимация была вырезана, придется добавить из Г1 и скомпилить.
Ну и класс у таких объектов должен быть oCMobFire, там вроде всего 3 или 4 вида этих фонарей (2 фонаря и 1-2 костра)
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Какое? Поджигание факелом фонарей? Работает, просто анимация была вырезана, придется добавить из Г1 и скомпилить.
Ну и класс у таких объектов должен быть oCMobFire, там вроде всего 3 или 4 вида этих фонарей (2 фонаря и 1-2 костра)
А ну если только анима вырезана то ладно. А ключ этой анимы не подскажешь какой?
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
А ну если только анима вырезана то ладно. А ключ этой анимы не подскажешь какой?
Вроде это
Код:
// Fireplace
            ani            ("c_FP_Stand_2_S0_1"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    0    8)
            ani            ("c_FP_Stand_2_S0_2"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    20    28)
            ani            ("c_FP_Stand_2_S0_3"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    40    48)
            aniComb        ("t_FIREPLACE_Stand_2_S0"    1    "s_FIREPLACE_S0"    0.0    0.0    M.    "c_FP_STAND_2_S0_"            3)
            {
                *eventTag    (0    "DEF_INSERT_ITEM"    "ZS_RIGHTHAND")
            }

            ani            ("c_FP_S0_1"                1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    9    9)
            ani            ("c_FP_S0_2"                1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    29    29)
            ani            ("c_FP_S0_3"                1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    49    49)
            aniComb        ("s_FIREPLACE_S0"            1    "s_FIREPLACE_S0"    0.0    0.0    M.    "c_FP_S0_"                    3)

            ani            ("c_FP_S0_2_Stand_1"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        R    0    8)
            ani            ("c_FP_S0_2_Stand_2"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        R    20    28)
            ani            ("c_FP_S0_2_Stand_3"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        R    40    48)
            aniComb        ("t_FIREPLACE_S0_2_Stand"    1    ""                    0.0    0.0    M.    "c_FP_STAND_2_S0_"            3)
            {
                *eventTag    (0    "DEF_REMOVE_ITEM")
            }

            ani            ("c_FP_S0_2_S1_1"            1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    10    18)
            ani            ("c_FP_S0_2_S1_2"            1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    30    38)
            ani            ("c_FP_S0_2_S1_3"            1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    50    58)
            aniComb        ("t_FIREPLACE_S0_2_S1"        1    "s_FIREPLACE_S1"    0.0    0.0    M.    "c_FP_S0_2_S1_"                3)

            ani            ("c_FP_S1_1"                1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    19    19)
            ani            ("c_FP_S1_2"                1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    39    39)
            ani            ("c_FP_S1_3"                1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    59    59)
            aniComb        ("s_FIREPLACE_S1"            1    "s_FIREPLACE_S1"    0.0    0.0    M.    "c_FP_S1_"                    3)

            ani            ("c_FP_S1_2_Stand_1"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        R    0    18)
            ani            ("c_FP_S1_2_Stand_2"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        R    20    38)
            ani            ("c_FP_S1_2_Stand_3"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        R    40    58)
            aniComb        ("t_FIREPLACE_S1_2_Stand"    1    ""                    0.0    0.1    M.    "c_FP_S1_2_Stand_"            3)
            {
                *eventTag    (0    "DEF_REMOVE_ITEM")
            }
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Вроде это
Код:
// Fireplace
            ani            ("c_FP_Stand_2_S0_1"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    0    8)
            ani            ("c_FP_Stand_2_S0_2"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    20    28)
            ani            ("c_FP_Stand_2_S0_3"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    40    48)
            aniComb        ("t_FIREPLACE_Stand_2_S0"    1    "s_FIREPLACE_S0"    0.0    0.0    M.    "c_FP_STAND_2_S0_"            3)
            {
                *eventTag    (0    "DEF_INSERT_ITEM"    "ZS_RIGHTHAND")
            }

            ani            ("c_FP_S0_1"                1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    9    9)
            ani            ("c_FP_S0_2"                1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    29    29)
            ani            ("c_FP_S0_3"                1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    49    49)
            aniComb        ("s_FIREPLACE_S0"            1    "s_FIREPLACE_S0"    0.0    0.0    M.    "c_FP_S0_"                    3)

            ani            ("c_FP_S0_2_Stand_1"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        R    0    8)
            ani            ("c_FP_S0_2_Stand_2"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        R    20    28)
            ani            ("c_FP_S0_2_Stand_3"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        R    40    48)
            aniComb        ("t_FIREPLACE_S0_2_Stand"    1    ""                    0.0    0.0    M.    "c_FP_STAND_2_S0_"            3)
            {
                *eventTag    (0    "DEF_REMOVE_ITEM")
            }

            ani            ("c_FP_S0_2_S1_1"            1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    10    18)
            ani            ("c_FP_S0_2_S1_2"            1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    30    38)
            ani            ("c_FP_S0_2_S1_3"            1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    50    58)
            aniComb        ("t_FIREPLACE_S0_2_S1"        1    "s_FIREPLACE_S1"    0.0    0.0    M.    "c_FP_S0_2_S1_"                3)

            ani            ("c_FP_S1_1"                1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    19    19)
            ani            ("c_FP_S1_2"                1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    39    39)
            ani            ("c_FP_S1_3"                1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        F    59    59)
            aniComb        ("s_FIREPLACE_S1"            1    "s_FIREPLACE_S1"    0.0    0.0    M.    "c_FP_S1_"                    3)

            ani            ("c_FP_S1_2_Stand_1"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        R    0    18)
            ani            ("c_FP_S1_2_Stand_2"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        R    20    38)
            ani            ("c_FP_S1_2_Stand_3"        1    ""                    0.0    0.0    ..    "Hum_FirePlace_M01.asc"        R    40    58)
            aniComb        ("t_FIREPLACE_S1_2_Stand"    1    ""                    0.0    0.1    M.    "c_FP_S1_2_Stand_"            3)
            {
                *eventTag    (0    "DEF_REMOVE_ITEM")
            }
вроде заработало, но почему то огонь пропадает когда перестаешь взаимодействовать со светильником. Видать в коде движка что то то было еще, чтобы свет оставался.
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
У меня все норм. Возможно нужно еще добавить все FIRETREE_XXX.ZEN файлы из Г1.
вроде есть... но пришлось менять блок аним, ибо те что в коде Г1 тупо даже не компилировались.
 

Scarecrow

Участник форума
Регистрация
11 Авг 2014
Сообщения
163
Благодарности
85
Баллы
235
Подскажите пожалуйста, что значит ошибка "Mesh has polys without material" в спейсере? Появляется при загрузке 3д модели. Из-за чего такое происходит? И как с этим бороться?
 
Сверху Снизу