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

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

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

    Ознакомиться с ними можно здесь

Готика 2: НВ Out Of My Way

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
  • Первое сообщение
  • #1
редакция от 1 марта 2023 года.
один архув с аудио репликами и субтитрами. второй архив со скриптами. два архива лишние, удалить не смог. у правильного архива в название указано "оно"
***
настройки восприятия можно изменить в файле gothic.ini. параметры по умолчанию
DIST_MoveNpc=300
DIST_PERC_MOVENPC=100
***
  • реплики собраны в посте #3 топика Готика 2: НВ - Out Of My Way
  • Сердце "проекта", цикл ZS_MoveNpcWait в посте #4 Готика 2: НВ - Out Of My Way
  • C_AmIFRIENDLY - у героя есть «друзья». Какие то есть изначально, какие то появляются по сюжету, какие то в рамках фракционных отношений. Друзья не бьют героя и не хомят ему на ровном месте. Друзья говорят «Привет друг». пост про друзей #5 Готика 2: НВ - Out Of My Way
  • C_AmIStronger - если НПС не друг героя и достаточно крепок, то он будет угрожать герою. Проверка на то крут НПС или нет в посте #6 Готика 2: НВ - Out Of My Way
 

Вложения

  • 2023_01_03_G2_OUTOFMYWAY_RU_SPEECH.zip
    1,7 MB · Просмотры: 16
  • оно_2023_01_03_G2_OUTOFMYWAY_scripts.zip
    9,9 KB · Просмотры: 16
  • 2023_03_10_G2_OUTOFMYWAY_scripts.zip
    10,7 KB · Просмотры: 10
  • 2023_03_13_G2_OUTOFMYWAY_scripts.zip
    10,9 KB · Просмотры: 11
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.913
Благодарности
6.789
Баллы
1.625
Надо как-то запустить проверку на существование SVM файла.
Допустим тот же послушник в архолосе, имеет номер голоса 52.
Собственно сам файл будет формироваться как SVM_52_OUTOFMYWAY, но т.к. этого файла нет, как и нет индекса текста для этого файла, то болванчик будет молчать, и как дурак 4 секунды будет пялиться на ГГ...
По этой причине я и задавал вопрос тут, чтобы в
Daedalus:
var string files;
files = Str_Format("SVM_%i_MAKEWAY",slf.voice);
Npc_ClearAIQueue(slf);
AI_Output(slf, oth , files);
Hlp_PrintConsole(files) - выдавался вариант с кавычками.
тогда и индексация не нужна будет... Наверно... :oops:
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
MEG@VOLT , не очень понял что ты хочешь на выходе. если нужно большая автономность то мы можем использовать вообще все реплики свои. сейчас используется одну(!) реплику из готика 2 НВ и четыре из Г1. можно использовать пять из пяти реплик из Г1, которые будут лежать в отдельном архиве.

то есть я к тому что перед тем как городить огород надо чётко понять что мы хотим на выходе в сухом остатке. иначе в строительстве забора мы сами себя и загородим :-D
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.913
Благодарности
6.789
Баллы
1.625
MW 7, так ладно... вторая часть у меня была - мысли в слух...
в основном надо вот это:
Надо как-то запустить проверку на существование SVM файла.
Допустим тот же послушник в архолосе, имеет номер голоса 52.
Собственно сам файл будет формироваться как SVM_52_OUTOFMYWAY, но т.к. этого файла нет, как и нет индекса текста для этого файла, то болванчик будет молчать, и как дурак 4 секунды будет пялиться на ГГ...
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Надо как-то запустить проверку на существование SVM файла.
Пост автоматически объединён:

по уму делать совместимость с Архолосом не получится. он сделан не по умному. тут нужно секретное комбо с ломом в рукаве что бы приводить его в чувство ;-)
Пост автоматически объединён:

Что то я туплю. В B_Say_SVM можно просто проверка сделать на голос и если голос больше 15, то делать 15
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Что то я туплю. В B_Say_SVM можно просто проверка сделать на голос и если голос больше 15, то делать 15
Daedalus:
    var int slfvoice;   slfvoice = slf.voice;
    if slfvoice > 14
    {
        slfvoice = 14;
    };

Daedalus:
 // нужны доп файлы для "индекса" субтитров. см архив с речью

func void B_Say_nigga(var C_NPC slf, var C_Npc oth, var string files)
{
    var int slfvoice;   slfvoice = slf.voice;
    if slfvoice > 14
    {
        slfvoice = 14;
    };
    files = Str_Format("SVM_%i_%s",slfvoice,files);
 
    Hlp_PrintConsole(Str_Format("       B_Say_nigga [%s %i] AIV_StateTime [%i] -- > %s",slf.name, slf.id, slf.aivar[AIV_StateTime],files));
    Npc_ClearAIQueue(slf);
    //AI_OutputSVM_Overlay(slf, oth , files);
    AI_Output(slf, oth , files);
};

func void B_Say_MAKEWAY(var C_NPC slf, var C_Npc oth)
{
    B_Say_nigga(slf,oth,"MAKEWAY");
};

func void B_Say_OUTOFMYWAY(var C_NPC slf, var C_Npc oth)
{
    B_Say_nigga(slf,oth,"OUTOFMYWAY");
};

func void B_Say_YOUDEAFORWHAT(var C_NPC slf, var C_Npc oth)
{
    B_Say_nigga(slf,oth,"YOUDEAFORWHAT");
};

func void B_Say_FRIENDLYGREETINGS(var C_NPC slf, var C_Npc oth)
{
    B_Say_nigga(slf,oth,"FRIENDLYGREETINGS");
};


func void B_Say_SVM_Overlay(var C_NPC slf, var C_Npc oth, var string files)
{
    var int slfvoice;   slfvoice = slf.voice;
    if slfvoice > 14
    {
        slfvoice = 14;
    };
 
    files = Str_Format("SVM_%i_%s",slfvoice, files);
    AI_OutputSVM_Overlay(slf, oth , files);
};

func void B_Say_SVM(var C_NPC slf, var C_Npc oth, var string files)
{
    var int slfvoice;   slfvoice = slf.voice;
    if slfvoice > 14
    {
        slfvoice = 14;
    };
    files = Str_Format("SVM_%i_%s",slfvoice, files);
    Npc_ClearAIQueue(slf);
    AI_OutputSVM(slf, oth , files);
    //AI_Output(slf, oth , files);
};
Пост автоматически объединён:

MEG@VOLT, надо посмотреть анимации рандомные какие для друзей оставить :)
 
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.913
Благодарности
6.789
Баллы
1.625
OFFTOP

Переехали в отдельную тему.


@MEG@VOLT, надо посмотреть анимации рандомные какие для друзей оставить :)
Ок, почесывания точно оставить. Остальные уже завтра гляну...
Можно им еще покуривание им добавить
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Можно им еще покуривание им добавить
это было бы прекрасно, но к сожалению это очень долго... может яблоко подбросить? или он его в готики не бросает а сразу есть? :)

> это очень долго

хотя можно сделать и посмотреть что это сломает :-D
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.913
Благодарности
6.789
Баллы
1.625
это было бы прекрасно, но к сожалению это очень долго... может яблоко подбросить? или он его в готики не бросает а сразу есть? :)
Не, есть анима просто подбрасывание, в той же ZS функции прописано. Я щас не найду, но оно точно есть, помню как вытаскивал эту аниму, для создания другой ZS функции )
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Не, есть анима просто подбрасывание
как вариант её можно использовать
сейчас используется одну(!) реплику из готика 2 НВ и четыре из Г1. можно использовать пять из пяти реплик из Г1, которые будут лежать в отдельном архиве.
для совместимости с модами предлагаю добавить реплики "умный мальчик". Реплики из Г1 и Г2 в этом посте Готика 2: НВ - Out Of My Way
Реплики из Г1 и Г2
в принципе можно взять часть оттуда и часть оттуда. так как в Г1 реплики боллее бодрые но некоторые странные по смыслы :)

MEG@VOLT, и еще раз уточни какие ты установил значения для DIST_MoveNpc и DIST_PERC_MOVENPC


****



еще бы составить список друзей что бы делать проверку прям по инстанциям, так как судя по всему типы отношений прописаны не у всех. можно в виде таблицы
ДРУЗЬЯ

неписьинстанцияусловия дружбыпримечание
бифDJG_713_Biffхз какое
сатурасKDW_14000_Addon_Saturas_ADW стать членом КВ
любой?npc.aivar[AIV_PARTYMEMBER] == TRUEнпс находится в пати с героем


главное выделить тех кто идёт по сюжету. что бы в ответственный момент герой не получил лолей
 
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.913
Благодарности
6.789
Баллы
1.625
как вариант её можно использовать
Daedalus:
//подкидывает яблоко и затем съедает
if(Npc_HasItems(self,ItFo_Apple) == 0)
{
    CreateInvItem(self,ItFo_Apple);
};
AI_UseItemToState(self,ItFo_Apple,0);
AI_PlayAni(self,"T_FOOD_RANDOM_2");
AI_UseItemToState(self,ItFo_Apple,-1)
//пожимает плечами
AI_PlayAni(self,"T_DONTKNOW");
//"Хехей" дружественно(типа молодец/круто)
AI_PlayAni(self,"T_GREETCOOL");
//чешет яйца
AI_PlayAni(self,"R_SCRATCHEGG");
//чешет затылок
AI_PlayAni(self,"R_SCRATCHHEAD");
у правильного архива в название указано "оно"
Готово
@MEG@VOLT, и еще раз уточни какие ты установил значения для DIST_MoveNpc и DIST_PERC_MOVENPC

DIST_MoveNpc=300
DIST_PERC_MOVENPC=100
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
можно развить идею дружеских сценариев и для фракций, взяв условие из b_say_guildgreetings
Daedalus:
// ********************
// B_Say_GuildGreetings
// ********************
func void B_Say_GuildGreetings (var C_NPC slf, var C_NPC oth)
{
    if (slf.guild == GIL_MIL)
    && ( (oth.guild == GIL_MIL) || (oth.guild == GIL_PAL) )
    {
        B_Say_Overlay (slf, oth, "$MILGREETINGS");
        return;
    };
 
    if (slf.guild == GIL_PAL)
    && ( (oth.guild == GIL_PAL) || (oth.guild == GIL_MIL) || (oth.guild == GIL_KDF) )
    {
        B_Say_Overlay (slf, oth, "$PALGREETINGS");
        return;
    };
 
    if (slf.guild == GIL_KDF)
    && ( (oth.guild == GIL_PAL) || (oth.guild == GIL_NOV) || (oth.guild == GIL_KDF) )
    {
        B_Say_Overlay (slf, oth, "$PALGREETINGS");
        return;
    };
 
    if (Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(Bartok))
    && (Bartok_OrkGesagt == TRUE)
    {
        B_Bartok_ShitAnOrc(); //FIXME COSMETIC - sollte besser SVM_Overlay sein
        return;
    };
 
    if (Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(Koch))
    {
        B_Koch_Hackebeil(); //FIXME COSMETIC - sollte besser SVM_Overlay sein
        return;
    };
 
    var int zufall; zufall = Hlp_Random (100);
 
    if (zufall <= 10)
    && Wld_IsRaining()
    {
        B_Say_Overlay (slf, oth, "$WEATHER"); //So ein Mistwetter!
        return;
 
    };
};
герой ментгерой палгерой послушникгерой маг
НПС GIL_MILMILGreetings //За короля!
MILGreetings //За короля!
НПС магЗа Инноса!За Инноса!За Инноса!
НПС палPALGreetings //За Инноса!PALGreetings //За Инноса!PALGreetings //За Инноса!
 
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.913
Благодарности
6.789
Баллы
1.625
можно развить идею дружеских сценариев и для фракций, взяв условие из b_say_guildgreetings
Как вариант - да.
Они же при встрече ГГ, НПС мимо проходя говорит - "За короля/Инноса!"
Сюда тоже это можно приплести - годная идея.

еще бы составить список друзей что бы делать проверку прям по инстанциям, так как судя по всему типы отношений прописаны не у всех. можно в виде таблицы
Ну это если только для оригинала делать. С модами такое может не сработать. Ну либо выпустить две версии:
Одна, которая сейчас - для всех, включая моды.
Вторая - "Устанавливаете на свой страх и риск, может сработать в моде, а может нет" ))

неписьинстанцияусловия дружбыпримечание
ВолкSLD_811_Wolfif(Player_GotCrawlerArmor == TRUE || DIA_Wolf_BENGAR_oneTime == TRUE)Агрится if(Wolf_IsOnBoard == LOG_FAILED)
бифDJG_713_Biffхз какоеА наверно в общее - если партнер
сатурасKDW_14000_Addon_Saturas_ADWстать членом КВ
ЛиSLD_800_LeeДруг впринципеАгрится:
if(Npc_KnowsInfo(other,DIA_Lee_StillNeedYou) &&
Lee_IsOnBoard != LOG_OBSOLETE)
БенетSLD_809_Bennetif(MIS_RescueBennet == LOG_SUCCESS)
любой?npc.aivar[AIV_PARTYMEMBER] == TRUEнпс находится в пати с героем

Про остальных пока думаю.

ЗЫ. Первое сообщение закрепил.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Ну это если только для оригинала делать. С модами такое может не сработать.
так у модов есть авторы. мы ничего вроде не прячем и не шифруем:) могут брать нашу работу за основу и творчески перерабатывать под свои нужды.

Сюда тоже это можно приплести - годная идея.
тогда делаем дружбу для фракций согласно таблице выше?
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.913
Благодарности
6.789
Баллы
1.625
так у модов есть авторы. мы ничего вроде не прячем и не шифруем:) могут брать нашу работу за основу и творчески перерабатывать под свои нужды.
Уболтал))
тогда делаем дружбу для фракций согласно таблице выше?
Да, добавив к ним SLD/DJG
С репликой FriendlyGreetings
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.913
Благодарности
6.789
Баллы
1.625
добавляй в табличку. так как я их высоких "отношений" понять не могу :-D

герой ментгерой палгерой послушникгерой маггерой наем
НПС GIL_MILMILGreetings //За короля!MILGreetings //За короля!
НПС магЗа Инноса!За Инноса!За Инноса!
НПС палPALGreetings //За Инноса!PALGreetings //За Инноса!PALGreetings //За Инноса!
НПС наемFriendlyGreetings //Привет.
наемНу кроме Сильвио и Булки )
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
это правило перекрое старое правило ;-)
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.913
Благодарности
6.789
Баллы
1.625
это правило перекрое старое правило ;-)
а... блин...
Давай тогда DJG убираем(в таблице убрал). Тогда наемы не будут агриться.
Или не нужно, и пусть остается как было с ними? :oops:
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.913
Благодарности
6.789
Баллы
1.625
Давай, наверно, еще вот так сделаем, в случае, если файла SVM не существует:
Daedalus:
    var int randomslfvoice;  
    randomslfvoice= slf.voice;
    if (randomslfvoice > 14)
    {  
        if      (randomslfvoice == 1)    { randomslfvoice = 1; }
        else if (randomslfvoice == 2)    { randomslfvoice = 2; }
        else if (randomslfvoice == 3)    { randomslfvoice = 3 }
        else if (randomslfvoice == 4)    { randomslfvoice = 4; }
        else if (randomslfvoice == 5)    { randomslfvoice = 5; }
        else if (randomslfvoice == 6)    { randomslfvoice = 6; }
        else if (randomslfvoice == 7)    { randomslfvoice = 7; }
        else if (randomslfvoice == 2)    { randomslfvoice = 8; }
        else if (randomslfvoice == 2)    { randomslfvoice = 9; }
        else if (randomslfvoice == 2)    { randomslfvoice = 10; }
        else if (randomslfvoice == 2)    { randomslfvoice = 11; }
        else if (randomslfvoice == 2)    { randomslfvoice = 12; }
        else if (randomslfvoice == 2)    { randomslfvoice = 13; }
        else { randomslfvoice = 14; };
    };
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
у тебя такая проверка работать не будет
Пост автоматически объединён:

ты так хотел?

Daedalus:
    var int slfvoice;   slfvoice = slf.voice;
    if slfvoice > 14
    {
        slfvoice = Hlp_Random(14) + 1 ; // от 1 до 14 включительно
    };
Пост автоматически объединён:

фракционные реплики
 

Вложения

  • 2023_03_03_G2_OUTOFMYWAY_scripts.zip
    10,3 KB · Просмотры: 2
Сверху Снизу