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

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

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

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
а кто в визуальных эффектах хорошо шарит? :)
 

Ur-tRall

Участник форума
Регистрация
16 Май 2009
Сообщения
4.100
Благодарности
2.123
Баллы
475
Пан Gor и пан Gratt, дайте ссылку вы ваше творения, никто не хочет делать моды за просто так, всем копеечка на ящичек.. Хочешь поработать в 3d Max-е, принеси справку о достигнутой работе. Требуете моды, платите за моду.
 

Стражник

Участник форума
Регистрация
14 Фев 2009
Сообщения
675
Благодарности
101
Баллы
220
Создал файл НПС который находится по списку с остальными юнитами kdf в папке НПС.

instance KDF_999_Ryxar(Npc_Default)
{
name [0] = "Рухар";
guild = GIL_KDF;
id = 999;
voice = 13;
flags = 0;
npcType = NPCTYPE_AMBIENT;
attribute[ATR_STRENGTH] = 50;
attribute[ATR_DEXTERITY] = 50;
attribute[ATR_MANA_MAX] = 1000;
attribute[ATR_MANA] = 1000;
attribute[ATR_HITPOINTS_MAX] = 1000;
attribute[ATR_HITPOINTS] = 1000;
HitChance [NPC_TALENT_1H] = 100;
HitChance [NPC_TALENT_2H] = 100;
HitChance [NPC_TALENT_BOW] = 100;
HitChance [NPC_TALENT_CROSSBOW] = 100;
B_SetFightSkills(self,15);
fight_tactic = FAI_HUMAN_COWARD;
CreateInvItems(self,ItMw_2h_Sld_Sword2,1);
EquipItem(self,ItMw_1h_Nov_Mace);
B_CreateAmbientInv(self);
B_SetNpcVisual(self,MALE,"Hum_Head_Bald",Face_N_NormalBart10,BodyTex_N, ItAr_KDF_L);
Mdl_SetModelFatness(self,0);
Mdl_ApplyOverlayMds(self,"Humans_Mage.mds");
daily_routine = Rtn_Start_999;
};

func void Rtn_Start_999()
{
TA_Smoke_Joint (7,55,19,55,"NW_FARM1_OUT_01");
TA_Smoke_Joint (19,55,7,15,"NW_FARM1_OUT_01");
};


В файле Startuo.d вклинил файл НПС после Лобарта.

Wld_InsertNpc(BAU_954_Maleth,"NW_FARM1_OUT_01");
Wld_InsertNpc(BAU_950_Lobart,"NW_FARM1_OUT_01");
Wld_InsertNpc(KDF_999_Ryxar(,"NW_FARM1_OUT_01");
Wld_InsertNpc(BAU_951_Hilda,"NW_FARM1_OUT_01");
Wld_InsertNpc(BAU_952_Vino,"NW_FARM1_OUT_01");



При компиляции получил следующую ошибку:

Story\Startup.d(1912): Ошибка: Неопределенная функция: KDF_999_RYXAR

Действовал по уроку но возможно что то пропустил.
 

D36


Модостроитель
Регистрация
3 Дек 2014
Сообщения
2.190
Благодарности
3.373
Баллы
485
Лишний символ: Wld_InsertNpc(KDF_999_Ryxar(,"NW_FARM1_OUT_01");

Свободен ли id 999? Чтобы нпц появился в игре, его идентификатор должен быть уникальным.
 

Стражник

Участник форума
Регистрация
14 Фев 2009
Сообщения
675
Благодарности
101
Баллы
220
Исправил ошибку и убрал лишнюю скобку.

Wld_InsertNpc(KDF_999_Ryxar,"NW_FARM1_OUT_01");

И снова при компиляции получил ошибку. Место ошибки в списке выделено красной стрелкой сбоку

Story\Startup.d(1912): Ошибка: Неопределенная функция: KDF_999_RYXAR

ID 999 вроде не занят.

Делаю проект в Г2 Gold от Акеллы.
 
Последнее редактирование:

Ur-tRall

Участник форума
Регистрация
16 Май 2009
Сообщения
4.100
Благодарности
2.123
Баллы
475
Исправил ошибку и убрал лишнюю скобку.

Wld_InsertNpc(KDF_999_Ryxar,"NW_FARM1_OUT_01");

И снова при компиляции получил ошибку. Место ошибки в списке выделено красной стрелкой сбоку
Тоже сталкивался с такой ошибкой. Скобку в данном случае убирать не нужно, здесь дело немного посерьёзнее.
Mdl_SetModelFatness(self,0);
Вот эта строка мне не нравится. И мне не нравится, что это уже используется в игре. Старайся поменьше создавать неписей с одинаковыми именами.
 

gggg12345678!

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

Wld_InsertNpc(KDF_999_Ryxar,"NW_FARM1_OUT_01");

И снова при компиляции получил ошибку. Место ошибки в списке выделено красной стрелкой сбоку

Story\Startup.d(1912): Ошибка: Неопределенная функция: KDF_999_RYXAR

ID 999 вроде не занят.

Делаю проект в Г2 Gold от Акеллы.
Попробуй, на всякий случай создать идентификатор 5000, ну или другой какой-нибудь. Главное, чтобы не совпадало с остальными
 

Gratt


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

Gor

Участник форума
Регистрация
26 Дек 2009
Сообщения
977
Благодарности
547
Баллы
245
Story\Startup.d(1912): Ошибка: Неопределенная функция: KDF_999_RYXAR
Скорее всего имя файла с инстанцией НПС либо нет в списке файлов в файле gothic.src, либо оно идет позже имени файла startup.d

PS лишнюю левую скобку ты правильно убрал по совету D36, так как синтаксис вызова функции такой
Код:
имя_вызываемой_функции(список_аргументов_через_запятую);
 

Стражник

Участник форума
Регистрация
14 Фев 2009
Сообщения
675
Благодарности
101
Баллы
220
Только заметил что вводя информацию о НПС в папке НПС и в Startup.d следующую особенность.

В проекте в файле Startup.d строка НПС прописана как надо.

Другой момент с вставкой НПС в папку НПС.

В сурсере сверху нажимаю создать - появляется скрипт. Пишу в нем информацию о НПС. Появляется сообщение сохранить изменение. Нажимая да появляемся в папке НПС по адресу C:\Games\Gothic II\_work\Data\Scripts\Content\Story\NPC

При работе в Сурсере файл НПС стоит после BAU_950_Lobart При загрузке не через Сурсер мой instance KDF_5000_Ryxar находится среди магов с приставкой KDF.

Получается что при сохранении файла скрипта НПС он появляется в папке НПС Готики 2, но его нет в создаваемом проекте.

Подскажите поэтапно порядок действий, чтобы НПС появился в папке проекта в Сурсере.
 

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
872
Благодарности
501
Баллы
245
Только заметил что вводя информацию о НПС в папке НПС и в Startup.d следующую особенность.

В проекте в файле Startup.d строка НПС прописана как надо.

Другой момент с вставкой НПС в папку НПС.

В сурсере сверху нажимаю создать - появляется скрипт. Пишу в нем информацию о НПС. Появляется сообщение сохранить изменение. Нажимая да появляемся в папке НПС по адресу C:\Games\Gothic II\_work\Data\Scripts\Content\Story\NPC

При работе в Сурсере файл НПС стоит после BAU_950_Lobart При загрузке не через Сурсер мой instance KDF_5000_Ryxar находится среди магов с приставкой KDF.

Получается что при сохранении файла скрипта НПС он появляется в папке НПС Готики 2, но его нет в создаваемом проекте.

Подскажите поэтапно порядок действий, чтобы НПС появился в папке проекта в Сурсере.
Скорее всего имя файла с инстанцией НПС либо нет в списке файлов в файле gothic.src
Пропиши непися в Gothic.src.
(Выбери в сорсере "отрыть",затем выбери свой проект,затем внизу сорсера в "тип файлов" выбери "все файлы".Среди прочего появится и Gothic.src.Где увидишь всех неписей,там своего и прописывай.После чего снова компилируй.)
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Подскажите поэтапно порядок действий, чтобы НПС появился в папке проекта в Сурсере.
1. Кликешь ПКМ на папке NPC в окне "Проекты".
2. В контекстном меню выбираешь "Новый файл скрипта...".
3. В окне "Новый файл" вписываешь название файла, например, KDF_5000_Ryxar, жмёшь "ОК".
4. В появившемся окне "SRC менеджер" указываешь позицию нового файла скрипта в файле очереди (все файлы скриптов обрабатываются компилятором по очереди). Позицию выбирай рядом со скриптами других неписей.
5. В окне "Проекты" в списке файлов скриптов появился новый файл. Пока он пустой. Открываешь его и создаёшь там инстанцию непися и функции распорядков.

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

Стражник

Участник форума
Регистрация
14 Фев 2009
Сообщения
675
Благодарности
101
Баллы
220
В общем после ряда манипуляций вставка НПС совершилась. :)

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

Правда маг постоянно курит, вооружен дубинкой и имеет реплики одного из фермеров.

Будет больше времени попробую вставить 2-х НПС и квест на основе урока.
 

Вложения

  • Первый НПС.png
    Первый НПС.png
    2,6 MB · Просмотры: 198

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
872
Благодарности
501
Баллы
245

Стражник

Участник форума
Регистрация
14 Фев 2009
Сообщения
675
Благодарности
101
Баллы
220

Стражник

Участник форума
Регистрация
14 Фев 2009
Сообщения
675
Благодарности
101
Баллы
220
Когда у НПС была guild = GIL_BAU; то он имел ряд диалогов фермеров во владениях Онара.

Сейчас у НПС поменял на - instance KDF_998_Fabius написано только выход. Попробую добавить диалог в файле диалогов.

Гильдия как то влияет на появление постоянных диалогов у НПС?

Каким образом расположить НПС в заданной точке в мире игры без привязки типа NW_FARM1_OUT_01") и конкретных НПС типа Лобарта.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
Когда у НПС была guild = GIL_BAU; то он имел ряд диалогов фермеров во владениях Онара.

Сейчас у НПС поменял на - instance KDF_998_Fabius написано только выход. Попробую добавить диалог в файле диалогов.

Гильдия как то влияет на появление постоянных диалогов у НПС?

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

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.574
Благодарности
4.168
Баллы
915
Дело в том, что в скриптах не реализован набор амбиентных фраз для NPC из гильдии GIL_KDF - смотри B_AssignAmbientInfos.d:
Код:
func void B_AssignAmbientInfos(var C_Npc slf)
{
   if(slf.guild == GIL_VLK)
   {
     if(slf.npcType == NPCTYPE_AMBIENT)
     {
       if(slf.voice == 1)
       {
         B_AssignAmbientInfos_VLK_1(slf);
       };
       if(slf.voice == 6)
       {
         B_AssignAmbientInfos_VLK_6(slf);
       };
       if(slf.voice == 8)
       {
         B_AssignAmbientInfos_VLK_8(slf);
       };
       if(slf.voice == 16)
       {
         B_AssignAmbientInfos_VLK_16(slf);
       };
       if(slf.voice == 17)
       {
         B_AssignAmbientInfos_VLK_17(slf);
       };
     };
   };
   if(slf.guild == GIL_MIL)
   {
     if(slf.npcType == NPCTYPE_AMBIENT)
     {
       if(slf.voice == 6)
       {
         B_AssignAmbientInfos_MIL_6(slf);
       };
       if(slf.voice == 7)
       {
         B_AssignAmbientInfos_MIL_7(slf);
       };
     };
     if(slf.npcType == NPCTYPE_OCAMBIENT)
     {
       if(slf.voice == 1)
       {
         B_AssignAmbientInfos_OCVLK_1(slf);
       };
       if(slf.voice == 6)
       {
         B_AssignAmbientInfos_OCVLK_6(slf);
       };
     };
   };
   if(slf.guild == GIL_PAL)
   {
     if(slf.npcType == NPCTYPE_AMBIENT)
     {
       if(slf.voice == 4)
       {
         B_AssignAmbientInfos_PAL_4(slf);
       };
       if(slf.voice == 9)
       {
         B_AssignAmbientInfos_PAL_9(slf);
       };
       if(slf.voice == 12)
       {
         B_AssignAmbientInfos_PAL_12(slf);
       };
     };
     if(slf.npcType == NPCTYPE_OCAMBIENT)
     {
       if(slf.voice == 4)
       {
         B_AssignAmbientInfos_OCPAL_4(slf);
       };
       if(slf.voice == 9)
       {
         B_AssignAmbientInfos_OCPAL_9(slf);
       };
     };
   };
   if(slf.guild == GIL_BAU)
   {
     if(slf.npcType == NPCTYPE_AMBIENT)
     {
       if(slf.voice == 1)
       {
         B_AssignAmbientInfos_BAU_1(slf);
       };
       if(slf.voice == 7)
       {
         B_AssignAmbientInfos_BAU_7(slf);
       };
       if(slf.voice == 13)
       {
         B_AssignAmbientInfos_BAU_13(slf);
       };
       if(slf.voice == 16)
       {
         B_AssignAmbientInfos_BAU_16(slf);
       };
     };
   };
   if(slf.guild == GIL_SLD)
   {
     if(slf.npcType == NPCTYPE_AMBIENT)
     {
       if(slf.voice == 6)
       {
         B_AssignAmbientInfos_SLD_6(slf);
       };
       if(slf.voice == 7)
       {
         B_AssignAmbientInfos_SLD_7(slf);
       };
     };
   };
   if(slf.guild == GIL_NOV)
   {
     if(slf.npcType == NPCTYPE_AMBIENT)
     {
       if(slf.voice == 3)
       {
         B_AssignAmbientInfos_NOV_3(slf);
       };
       if(slf.voice == 8)
       {
         B_AssignAmbientInfos_NOV_8(slf);
       };
     };
   };
   if(slf.guild == GIL_PIR)
   {
     if(slf.npcType == NPCTYPE_AMBIENT)
     {
       if(slf.voice == 6)
       {
         B_AssignAmbientInfos_Addon_PIR_6(slf);
       };
       if(slf.voice == 7)
       {
         B_AssignAmbientInfos_Addon_PIR_7(slf);
       };
     };
   };
   if(slf.guild == GIL_OUT)
   {
     if(slf.npcType == NPCTYPE_AMBIENT)
     {
       if(slf.voice == 1)
       {
         B_AssignAmbientInfos_OUT_1(slf);
       };
       if(slf.voice == 7)
       {
         B_AssignAmbientInfos_OUT_7(slf);
       };
       if(slf.voice == 13)
       {
         B_AssignAmbientInfos_OUT_13(slf);
       };
     };
     if(slf.npcType == NPCTYPE_OCAMBIENT)
     {
       if(slf.voice == 4)
       {
         B_AssignAmbientInfos_OWPAL_4(slf);
       };
     };
   };
   if(slf.guild == GIL_STRF)
   {
     if((slf.npcType == NPCTYPE_AMBIENT) || (slf.npcType == NPCTYPE_OCAMBIENT))
     {
       if(slf.voice == 1)
       {
         B_AssignAmbientInfos_STRF_1(slf);
       };
       if(slf.voice == 13)
       {
         B_AssignAmbientInfos_STRF_13(slf);
       };
     };
     if(slf.npcType == NPCTYPE_BL_AMBIENT)
     {
       B_AssignAmbientInfos_Addon_Sklaven_3(slf);
     };
   };
   if(slf.guild == GIL_BDT)
   {
     if((slf.npcType == NPCTYPE_AMBIENT) || (slf.npcType == NPCTYPE_OCAMBIENT))
     {
       if(slf.voice == 1)
       {
         B_AssignAmbientInfos_BDT_1(slf);
       };
       if(slf.voice == 4)
       {
         b_assignambientinfos_bdt_4(slf);
       };
       if(slf.voice == 6)
       {
         b_assignambientinfos_bdt_6(slf);
       };
       if(slf.voice == 10)
       {
         b_assignambientinfos_bdt_10(slf);
       };
       if(slf.voice == 13)
       {
         B_AssignAmbientInfos_BDT_13(slf);
       };
     };
     if(slf.npcType == NPCTYPE_BL_AMBIENT)
     {
       if(slf.voice == 1)
       {
         B_AssignAmbientInfos_Addon_BL_BDT_1(slf);
       };
       if(slf.voice == 4)
       {
         b_assignambientinfos_bdt_4(slf);
       };
       if(slf.voice == 6)
       {
         b_assignambientinfos_bdt_6(slf);
       };
       if(slf.voice == 10)
       {
         b_assignambientinfos_bdt_10(slf);
       };
       if(slf.voice == 13)
       {
         B_AssignAmbientInfos_Addon_BL_BDT_13(slf);
       };
     };
     if(slf.npcType == NPCTYPE_TAL_AMBIENT)
     {
       if(slf.voice == 1)
       {
         B_AssignAmbientInfos_Addon_TAL_BDT_1(slf);
       };
       if(slf.voice == 4)
       {
         b_assignambientinfos_bdt_4(slf);
       };
       if(slf.voice == 6)
       {
         b_assignambientinfos_bdt_6(slf);
       };
       if(slf.voice == 10)
       {
         b_assignambientinfos_bdt_10(slf);
       };
       if(slf.voice == 13)
       {
         B_AssignAmbientInfos_Addon_TAL_BDT_13(slf);
       };
     };
   };
   if(slf.guild == GIL_DMT)
   {
     if((slf.npcType == NPCTYPE_AMBIENT) || (slf.npcType == NPCTYPE_OCAMBIENT))
     {
       if(slf.voice == 19)
       {
         B_AssignDementorTalk(slf);
       };
     };
   };
};
Поэтому тебе придётся создать свой набор фраз для NPC, имеющего guild = GIL_KDF и voice = 13. В качестве примеров смотри скрипты из каталога B_AssignAmbientInfos.
 
Последнее редактирование:
Сверху Снизу