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

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

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

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

Orc Hunter


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

kor.angar

Участник форума
Регистрация
28 Ноя 2017
Сообщения
294
Благодарности
93
Баллы
200
Все привет! Вопрос про Ягоды Гоблина, которые падают из паладинов.
Можно ли сделать какой нибудь счётчик который считал бы кол-во выпавших Ягод Гоблина и при этом ограничить максимальное их кол-во. Что бы можно было максимум с паладинов собрать например 6 ягод гоблина. А потом всё :) или может быть есть какое то другое решение этого вопроса? :)
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
462
Благодарности
286
Баллы
230
может быть есть какое то другое решение этого вопроса?
Самое простое решение вопроса - это ограничить выпадение, а не сбор.
Story\NPC_Scripts\B_CreateAmbientInv.d:
(новое помечено комментариями)
Daedalus:
// Счётчик "Ягод гоблина"
var int nDexHerbs;

func void B_CreateAmbientInv_PAL(var int InventorySet)
{
    if(InventorySet == 1)
    {
        CreateInvItems(self,ItFo_Wine,1);
        CreateInvItems(self,ItFo_Bacon,1);
        CreateInvItems(self,ItPl_Speed_Herb_01,1);
        CreateInvItems(self,ItMi_Pitch,1);
        CreateInvItems(self,ItMi_Gold,44);
    }
    else if(InventorySet == 2)
    {
        CreateInvItems(self,ItFo_Booze,1);
        CreateInvItems(self,ItFo_Milk,1);
        CreateInvItems(self,ItMi_Rockcrystal,1);
        CreateInvItems(self,ItPl_Mana_Herb_02,1);
        CreateInvItems(self,ItMi_Gold,42);
    }
    else if(InventorySet == 3)
    {
        CreateInvItems(self,ItFo_Bacon,1);
        CreateInvItems(self,ItPl_Mana_Herb_01,2);
        CreateInvItems(self,ItMi_Sulfur,1);
        // Если за всё время выпало меньше 6 ягод
        if (nDexHerbs < 6)
        {
            // Разрешаем создавать ещё
            CreateInvItems(self,ItPl_Dex_Herb_01,1);
            // Увеличиваем счётчик
            nDexHerbs += 1;
        };
        CreateInvItems(self,ItMi_Gold,23);
    }
    else if(InventorySet == 4)
    {
        CreateInvItems(self,ItMi_Rockcrystal,1);
        CreateInvItems(self,ItMi_SilverRing,1);
        CreateInvItems(self,ItMi_Pitch,1);
        CreateInvItems(self,ItPl_Health_Herb_03,1);
        CreateInvItems(self,ItMi_Gold,46);
    }
    else if(InventorySet == 5)
    {
        CreateInvItems(self,ItFo_Stew,1);
        CreateInvItems(self,ItPl_Health_Herb_02,1);
        CreateInvItems(self,ItMi_Rockcrystal,1);
        CreateInvItems(self,ItMi_Gold,43);
    }
    else if(InventorySet == 6)
    {
        CreateInvItems(self,ItPo_Health_02,1);
        CreateInvItems(self,ItPl_Speed_Herb_01,2);
        CreateInvItems(self,ItMi_Coal,1);
        CreateInvItems(self,ItMi_Gold,37);
    }
    else if(InventorySet == 0)
    {
        CreateInvItems(self,ItFo_Sausage,1);
        CreateInvItems(self,ItMi_Coal,1);
        CreateInvItems(self,ItPl_Health_Herb_02,1);
        CreateInvItems(self,ItMi_Gold,40);
    };
};
 

DreamGothic

Участник форума
Регистрация
10 Апр 2013
Сообщения
266
Благодарности
182
Баллы
210
Может разжевать кто...

Есть вот модель и готовая анимация для лука, как все это чудо скомпилить теперь?
Как обычный доспех не выходит, когда вызываю инстанцию лука, происходит вылет в игре с надписью что не найдено "название.mms".
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.241
Баллы
525
Может разжевать кто...
Декомпилируй какой-нибудь существующий в игре лук и посмотри, какие исходники нужны движку для того, чтобы скомпилировать твою модель. К слову, не всякая анимация подойдёт. Скорость должна составлять 25 кадров в секунду.
 

Aelayar

Участник форума
Регистрация
29 Июл 2018
Сообщения
2
Благодарности
0
Баллы
145
Доброго времени суток. Дабы темы не плодить и не мусорить, оставлю сообщение здесь.
Хочу извлечь из архивов один звук. В частности: реплику Ищущего, где он кричит "Вот он!", прежде чем атаковать ГГ.

Я не знаю, как правильно этот звуковой файл может называться и где его искать (Sounds? Speech?). Мне удалось найти звук, проигрывающийся при беседе с Ищущим, но как найти эту конкретную реплику, даже не знаю.
 

D36


Модостроитель
Регистрация
3 Дек 2014
Сообщения
2.222
Благодарности
3.450
Баллы
485
_WORK/DATA/SOUND/SPEECH/SVM_19_*.WAV (в одном из speech.vdf, не помню точно в каком).
 

Вложения

  • SVM_19.rar
    72,7 KB · Просмотры: 33

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.576
Благодарности
4.171
Баллы
915
А если быть точнее, то SVM_19_DieEnemy.WAV - это описано в скрипте SVM.d:
Код:
instance SVM_19(C_SVM)
{
    DieEnemy = "SVM_19_DieEnemy";    //(шипит) Вот он!
    RunCoward = "SVM_19_RunCoward";    //(шипит) Мы до тебя доберемся!
    Dead = "SVM_19_Dead";    //Аааааа!
    Aargh_1 = "SVM_19_Aargh_1";    //Аааааа!
    Aargh_2 = "SVM_19_Aargh_2";    //Аааааа!
    Aargh_3 = "SVM_19_Aargh_3";    //Аааааа!
};
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
Плохо видимо искал, через какую функцию можно проверить текущий распорядок дня у НПС? Г2
 
Последнее редактирование:

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.576
Благодарности
4.171
Баллы
915
В стандартном наборе функций ZenGin нет такой функции, поэтому приходится проверять это косвенными методами, например, нахождением ГГ или NPC поблизости от определённого WP. Когда-то я предлагал включить в состав AST функцию, которая возвращает текстовую строку названия текущего распорядка без префикса "Rtn_".
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
462
Благодарности
286
Баллы
230
Плохо видимо искал, через какую функцию можно проверить текущий распорядок дня у НПС? Г2
Если я правильно понял, тебе нужна функция Npc_IsInState(). Подробнее см. в туторе Vam. Примеры использования в скриптах тоже есть.

Список состояний:
AI\Human\TA_Human\
AI\Human\ZS_Human\
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.576
Благодарности
4.171
Баллы
915
Это тоже косвенный метод, потому что приходится перебирать все известные состояния. Вдобавок реалистичная имитация жизнедеятельности ИИ может содержать множество переключений между различными состояниями, например, работа в кузнице.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
Если я правильно понял, тебе нужна функция Npc_IsInState(). Подробнее см. в туторе Vam. Примеры использования в скриптах тоже есть.

Список состояний:
AI\Human\TA_Human\
AI\Human\ZS_Human\

Это именно, то что нужно было. Извиняюсь, что не расписал. Требовалось проверить, если НПС сидит у костра, выполняем одно, если не сидит другое.
Для примера, который будет нагляднее
Daedalus:
FUNC void DIA_Hyloch_fingers_Info()
{
   AI_Output (other, self ,"DIA_Hyloch_fingers_15_01"); //Хилох, сосредоточься. Ты должен мне помочь.
    if(!Npc_IsInState(self,ZS_Sit_Campfire))
    {
        Npc_SetRefuseTalk(self,3);
        CreateInvItems (self, ItFoMuttonRaw, 1);
        B_UseItem(self,ItFoMuttonRaw);
    };
   AI_Output (self, other ,"DIA_Hyloch_fingers_03_02"); //Помочь? Я не могу убить вас.
   AI_Output (self, other ,"DIA_Hyloch_fingers_03_03"); //Смерть сама придет за вами.
   AI_Output (other, self ,"DIA_Hyloch_fingers_15_04"); //Хилох! Что такое пять камней?
   AI_Output (other, self ,"DIA_Hyloch_fingers_15_05"); //Это символ? А может тайное общество?
   AI_Output (self, other ,"DIA_Hyloch_fingers_03_06"); //Они все знают. Только ждут подходящего момента.
   AI_Output (self, other ,"DIA_Hyloch_fingers_03_07"); //Остерегайтесь их гнева, если зайдете слишком далеко в поиске истины.
   AI_Output (self, other ,"DIA_Hyloch_fingers_03_08"); //Вы не можете говорить об этом... Вы должны просто ждать...
   AI_Output (other, self ,"DIA_Hyloch_fingers_15_09"); //Ждать? Чего?
   AI_Output (self, other ,"DIA_Hyloch_fingers_03_10"); //Каждый из нас знает чего ждет, правда?
   AI_Output (self, other ,"DIA_Hyloch_fingers_03_11"); //Сырое мясо очень вкусное!
   B_LogEntry(TOPIC_Handy_Fingers,"Если то, что сказал мне Хилох правда, то Циррус играет здесь очень рискованную роль вора. Рискованную, даже для меня. Какова будет ставка?");
   B_GivePlayerXP(150);
};
Если это косвенный метод, то как правильнее поступить?
Тогда спрошу такое.
В моде Монастырь, почему-то на польской версии игры есть баг. Когда НПС сидит у костра и если начать с ним диалог.
Daedalus:
FUNC void DIA_Hyloch_fingers_Info()
{
   AI_Output (other, self ,"DIA_Hyloch_fingers_15_01"); //Хилох, сосредоточься. Ты должен мне помочь.
   Npc_SetRefuseTalk(self,3);
   CreateInvItems (self, ItFoMuttonRaw, 1);
   B_UseItem(self,ItFoMuttonRaw);
   AI_Output (self, other ,"DIA_Hyloch_fingers_03_02"); //Помочь? Я не могу убить вас.
   AI_Output (self, other ,"DIA_Hyloch_fingers_03_03"); //Смерть сама придет за вами.
   AI_Output (other, self ,"DIA_Hyloch_fingers_15_04"); //Хилох! Что такое пять камней?
   AI_Output (other, self ,"DIA_Hyloch_fingers_15_05"); //Это символ? А может тайное общество?
   AI_Output (self, other ,"DIA_Hyloch_fingers_03_06"); //Они все знают. Только ждут подходящего момента.
   AI_Output (self, other ,"DIA_Hyloch_fingers_03_07"); //Остерегайтесь их гнева, если зайдете слишком далеко в поиске истины.
   AI_Output (self, other ,"DIA_Hyloch_fingers_03_08"); //Вы не можете говорить об этом... Вы должны просто ждать...
   AI_Output (other, self ,"DIA_Hyloch_fingers_15_09"); //Ждать? Чего?
   AI_Output (self, other ,"DIA_Hyloch_fingers_03_10"); //Каждый из нас знает чего ждет, правда?
   AI_Output (self, other ,"DIA_Hyloch_fingers_03_11"); //Сырое мясо очень вкусное!
   B_LogEntry(TOPIC_Handy_Fingers,"Если то, что сказал мне Хилох правда, то Циррус играет здесь очень рискованную роль вора. Рискованную, даже для меня. Какова будет ставка?");
   B_GivePlayerXP(150);
};
То происходит вылет игры.
Я сколько проверял, на русской версии игры вылета нет. Да и ошибок в zSpy тоже. Поэтому я и подумал, чтобы убрать кусок кода
Daedalus:
   Npc_SetRefuseTalk(self,3);
   CreateInvItems (self, ItFoMuttonRaw, 1);
   B_UseItem(self,ItFoMuttonRaw);
Потому что НПС не встает поедать свое мясо.
 
Последнее редактирование:

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
462
Благодарности
286
Баллы
230
Потому что НПС не встает поедать свое мясо.
Он не встаёт поедать потому что в шапке функции есть такое условие:
Daedalus:
// Если НПС сидит
if(C_BodyStateContains(slf,BS_SIT))
{
    // Выходим из функции
    return;
};

И возможно ошибка связана с чем-то другим.
 

kor.angar

Участник форума
Регистрация
28 Ноя 2017
Сообщения
294
Благодарности
93
Баллы
200
возможно ли реализовать общий инвентарь для торговли у двух продавцов?

то есть я догадываюсь что все возможно:) хотелось бы какое нибудь элегантное решение
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
что значит общий инвентарь ?!
 

kor.angar

Участник форума
Регистрация
28 Ноя 2017
Сообщения
294
Благодарности
93
Баллы
200
есть Маг Огня Горакс и Маг Огня Исгарот. можно ли сделать что бы у них ассортимент товаров был синхронизирован?
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
Весь инвентарь торговых НПС находится в \story\B_GiveTradeInv
Горакс B_GiveTradeInv_Gorax.d
Исгарот B_GiveTradeInv_Isgaroth.d
Делаешь им обоим одиваноковые предметы, меняя
Daedalus:
CreateInvItems(slf,ItMi_Gold,100);
CreateInvItems(slf,ItSc_Sleep,1);
CreateInvItems(slf,ItMi_Sulfur,2);
CreateInvItems(slf,ItPo_Mana_01,2);
CreateInvItems(slf,ItPo_Health_01,3);
CreateInvItems(slf,ItMi_Pitch,1);
CreateInvItems(slf,ItSc_Light,5);
CreateInvItems(slf,ItSc_Firebolt,5);
CreateInvItems(slf,ItSc_Zap,5);
CreateInvItems(slf,ItSc_LightHeal,5);
CreateInvItems(slf,ItSc_SumGobSkel,2);
CreateInvItems(slf,ItRi_Hp_Mana_01,1);
На те предметы, которые нужны по твоему усмотрению.
Хм. Для общего наверно надо будет сделать общий для всех инвентарь
B_GiveTradeInv_All.d
В нем описать создание предметов по аналогии с другим.
В B_GiveTradeInv.d
Для всех НПС в
Daedalus:
if(slf.aivar[AIV_ChapterInv] <= Kapitel)
Заменить у каждого НПС на созданный ранее инвентарь.
Только я не вижу смысла делать всем общий. Каждый торговец уникален, продает то, что может создать/изготовить/найти/получить
 
Сверху Снизу