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

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

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

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.002
Благодарности
971
Баллы
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 · Просмотры: 15
  • оно_2023_01_03_G2_OUTOFMYWAY_scripts.zip
    9,9 KB · Просмотры: 15
  • 2023_03_10_G2_OUTOFMYWAY_scripts.zip
    10,7 KB · Просмотры: 9
  • 2023_03_13_G2_OUTOFMYWAY_scripts.zip
    10,9 KB · Просмотры: 10
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Npc_SetTempAttitude - сколько по времени оно длится?
Что-то около двух минут, после чего временное отношение становится равным постоянному. Но по времени нужно проверять. Я когда-то замерял его на движке Г1. Движок Г2 может работать иначе. Также я не проверял, работает ли таймер в состоянии атаки, и может ли временное отношение изменить своё значение по ходу атаки.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
непонятно. разве НПС не должен менять отношение к ГГ в связи с конфликтом?
ммммм...
Отпинал ГГ - доволен)
Получил от ГГ - не доволен, но все равно претензий больше нет.
ГГ сбежал от драки - ну и хрен с ним, забуду...
Если ElderGamer прав, и это реально не очень долго - то оставить можно, просто я проверял это отношение спустя секунд 15-20, и отношение болванчика к ГГ все так же враждебным оставалось. И меня пинали не только сам болванчик, но и если пинать начинали все с самого начала, то и через те 15-20 секунд, так же все на меня агрились. Я проверю еще с большим временем. Если отношение будет меняться, то норм))
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.002
Благодарности
971
Баллы
295
надо еще раз пройтись по репликам и анимациям
ДругНПС будет атаковатьНПС не будет атаковать
AIV_StateTime 0wheretoWhatDidYouDoInThereGetOutOfHere
AIV_StateTime 3YouDareHitMe
AIV_StateTime 7НПС атакуеткакая то анимация
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
надо еще раз пройтись по репликам
А может из Г1 достанем? или нарезать из Г2... :oops: Могу заняться.
Если нет, то в можно оставить тот вариант, который есть сейчас.
По анимация, все же думаю привлечь Hlp_Random и к нему следующие анимации:
t_DontKnow
t_ForgetIt
t_GetLost
t_GetLost2
t_GreetCool
t_BoringKick
r_ScratchEgg
r_ScratchHead
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.002
Благодарности
971
Баллы
295
А может из Г1 достанем? или нарезать из Г2... :oops: Могу заняться.
можно конечно. но мне сначала казалось в готики 2 есть подходящие, но в русской версии Готики 2 на разных голосах одна и та же реплика почему то приобретает разное значение :-( поэтому просидев пол часа я решил этот вопрос отложить на потом :) а сейчас, когда вроде бы мы скелет сделали, можно что то решать с репликами.

По анимация, все же думаю привлечь Hlp_Random и к нему следующие анимации:
как то так наверное
Daedalus:
// случайная анимация
func void ZS_MoveNpcWait_Random_PlayAni(var c_npc slf)
{
    var int random;    random = (Hlp_Random(8) + 1);

    Npc_ClearAIQueue(slf);
    /*
    //AI_PlayAni(slf, Ani_StateTime_7);
    if      (random == 1)    { AI_PlayAni(slf,"T_DONTKNOW"); }
    else if (random == 2)    { AI_PlayAni(slf,"T_FORGETIT"); }
    else if (random == 3)    { AI_PlayAni(slf,"T_GETLOST"); }
    else if (random == 4)    { AI_PlayAni(slf,"T_GETLOST2"); }
    else if (random == 5)    { AI_PlayAni(slf,"T_GREETCOOL"); }
    else if (random == 6)    { AI_PlayAni(slf,"T_GREETCOOL"); }
    else if (random == 7)    { AI_PlayAni(slf,"R_SCRATCHEGG"); }
    else if (random == 8)    { AI_PlayAni(slf,"R_SCRATCHHEAD"); }
    // такого быть не должно
    else
    {
        AI_PlayAniBS(slf,"T_JOINT_RANDOM_1",BS_ITEMINTERACT);
    };
    */
 
    var string RandomAni;      RandomAni = "T_DONTKNOW";
    if      (random == 1)    { RandomAni = "T_DONTKNOW"; }
    else if (random == 2)    { RandomAni = "T_FORGETIT"; }
    else if (random == 3)    { RandomAni = "T_GETLOST"; }
    else if (random == 4)    { RandomAni = "T_GETLOST2"; }
    else if (random == 5)    { RandomAni = "T_GREETCOOL"; }
    else if (random == 6)    { RandomAni = "T_GREETCOOL"; }
    else if (random == 7)    { RandomAni = "R_SCRATCHEGG"; }
    else if (random == 8)    { RandomAni = "R_SCRATCHHEAD"; }
    // такого быть не должно
    else
    {
        AI_PlayAniBS(slf,"T_JOINT_RANDOM_1",BS_ITEMINTERACT);
    };
 
    AI_PlayAni(slf,RandomAni);
    Hlp_PrintConsole(Str_Format("   ZS_MoveNpcWait_Random_PlayAni [%s]  -- > AI_PlayAni '%s' ",slf.name, RandomAni));
};

MEG@VOLT, там в отладчик инфа посылается с именем анимации что бы точно понимать какая анимация лишняя ;-)

з.ы.
KirTheSeeker, обрати внимание что в коде анимации пишутся заглавными буквами.
 

Вложения

  • 2023_01_31_B_MoveNpcWait.vdf
    33,9 KB · Просмотры: 3
  • 2023_02_01_B_MoveNpcWait.vdf
    34,4 KB · Просмотры: 5
Последнее редактирование:

MEG@VOLT

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

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
там в отладчик инфа посылается с именем анимации что бы точно понимать какая анимация лишняя ;-)
Ну как я и предполагал: пустой пинок(T_BORINGKICK) - и длинная и какая-то неуместная...
ZS_MoveNpcWait [Городской стражник 323] -- > B_Say [AIV_StateTime 0]
ZS_MoveNpcWait_Random_PlayAni [Городской стражник] -- > AI_PlayAni 'T_GREETCOOL'
ZS_MoveNpcWait [Городской стражник 323] -- > Ani_StateTime_7 [AIV_StateTime 7]
ZS_MoveNpcWait [Городской стражник 323] -- > B_Say [AIV_StateTime 0]
ZS_MoveNpcWait_Random_PlayAni [Городской стражник] -- > AI_PlayAni 'T_GETLOST2'
ZS_MoveNpcWait [Городской стражник 323] -- > Ani_StateTime_7 [AIV_StateTime 7]
ZS_MoveNpcWait [Городской стражник 323] -- > B_Say [AIV_StateTime 0]
ZS_MoveNpcWait_Random_PlayAni [Городской стражник] -- > AI_PlayAni 'T_BORINGKICK'
ZS_MoveNpcWait [Городской стражник 323] -- > Ani_StateTime_7 [AIV_StateTime 7]
ZS_MoveNpcWait [Городской стражник 323] -- > B_Say [AIV_StateTime 0]
ZS_MoveNpcWait_Random_PlayAni [Городской стражник] -- > AI_PlayAni 'T_GETLOST2'
ZS_MoveNpcWait [Городской стражник 323] -- > Ani_StateTime_7 [AIV_StateTime 7]
ZS_MoveNpcWait [Городской стражник 323] -- > B_Say [AIV_StateTime 0]
ZS_MoveNpcWait_Random_PlayAni [Городской стражник] -- > AI_PlayAni 'T_GETLOST'
ZS_MoveNpcWait [Городской стражник 323] -- > Ani_StateTime_7 [AIV_StateTime 7]
ZS_MoveNpcWait [Городской стражник 323] -- > B_Say [AIV_StateTime 0]
ZS_MoveNpcWait_Random_PlayAni [Городской стражник] -- > AI_PlayAni 'R_SCRATCHEGG'
ZS_MoveNpcWait [Городской стражник 323] -- > Ani_StateTime_7 [AIV_StateTime 7]
ZS_MoveNpcWait [Городской стражник 323] -- > B_Say [AIV_StateTime 0]
ZS_MoveNpcWait_Random_PlayAni [Городской стражник] -- > AI_PlayAni 'T_BORINGKICK'
ZS_MoveNpcWait [Городской стражник 323] -- > Ani_StateTime_7 [AIV_StateTime 7]
ZS_MoveNpcWait [Городской стражник 323] -- > B_Say [AIV_StateTime 0]
ZS_MoveNpcWait_Random_PlayAni [Городской стражник] -- > AI_PlayAni 'T_BORINGKICK'
ZS_MoveNpcWait [Городской стражник 323] -- > Ani_StateTime_7 [AIV_StateTime 7]
ZS_MoveNpcWait [Городской стражник 323] -- > B_Say [AIV_StateTime 0]
ZS_MoveNpcWait_Random_PlayAni [Городской стражник] -- > AI_PlayAni 'T_GETLOST2'
ZS_MoveNpcWait [Городской стражник 323] -- > Ani_StateTime_7 [AIV_StateTime 7]
ZS_MoveNpcWait [Городской стражник 323] -- > B_Say [AIV_StateTime 0]
ZS_MoveNpcWait_Random_PlayAni [Городской стражник] -- > AI_PlayAni 'R_SCRATCHEGG'
ZS_MoveNpcWait [Городской стражник 323] -- > Ani_StateTime_7 [AIV_StateTime 7]
ZS_MoveNpcWait [Городской стражник 323] -- > B_Say [AIV_StateTime 0]
Если бы без руки-в-боки, и просто пинок, то может быть и нормально было, + это еще и очень дерганая анимация...
-------------
Быстрый тест на ATT_HOSTILE - через 3 минуты, стражник все равно напал.
Вечером/завтра буду дополнительно тестить.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.083
Благодарности
1.901
Баллы
320
Временное отношение сохраняется в течение 30 секунд.
Переопределяется константой NPC_ANGRY_TIME, которая равна 120 в оригинальной Ночи Ворона.
Таймер тикает во время функции обработки ИИ, когда персонаж жив. Т.е. надо находится неподалёку от персонажа. В сейв таймер не пишется.

Это для движка Г2А.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
Таймер тикает во время функции обработки ИИ, когда персонаж жив. Т.е. надо находится неподалёку от персонажа. В сейв таймер не пишется.
О... а я то отбегал, что непись выгружался из памяти...
Ладно, еще буду тестить - напишу.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
И так, вечерние тесты:
Вообще все замечательно. Прям все. ну кроме анимации пинка
Палы, менты, маги, послушники, наемники, ОнД, горожане и крестьяне, бандиты и друзья, пираты и даже мясной жук. Все ведут себя как подобает. Так как мы условились.
ATT_HOSTILE - 2 минуты, если находишься в зоне, где непись загружен в память. Через 2 минуты он забывает, что пытался тебе навалять.
Ни какой записи о том, что совершено преступление нет. Ни кто не требует оплаты штрафа, за то, что не уступил дорогу, тому же Мо, или Онару.
В общем все замечательно.
Получается: выкидываем анимацию пинка, и продолжаем дальше наши фантазии.
Вот это можно сразу вставлять в код, и убирать из gothic.ini
INI:
DIST_MoveNpc=300
DIST_PERC_MOVENPC=100
С чего продолжим? с локации, и на то как реагируют другие болванчики? или с трусости?
Да, под конец, перед релизом, надо будет еще учесть существование борзых неписей, это на случай, если человек будет использовать плагин в модах.
В данный момент, если какой-то инстанции непися нет в моде - игра вылетает.
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.002
Благодарности
971
Баллы
295
Вот это можно сразу вставлять в код, и убирать из gothic.ini
Я поменяю эти значения на дефаултные. возможность из ini пока убирать не стоит.

Прям все. ну кроме анимации пинка
какие анимации убирать? T_BORINGKICK?


С чего продолжим?
походы с коллегами. Диего , Миненталь 2 глава. Ларес 1 глава. Бифф , 4 глава. Они будут тупить так или иначе и наверное надо будет внести часть zs_** в исключения при вызове B_MoveNpc. Вчера я что то добавлял, но еще не проверял..
Daedalus:
func void B_MoveNpc ()
{
    //if (Npc_IsInState (self,ZS_MoveNpcFriendlyWait)) { return; };
    if (Npc_IsInState (self,ZS_MoveNpcWait))         { return; };
    if (Npc_IsInState (self,ZS_Follow_Player))         { return; };

надо будет еще учесть существование борзых неписей
угу
 
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
походы с коллегами. Диего , Миненталь 2 глава. Ларес 1 глава. Бифф , 4 глава. Они будут тупить так или иначе и наверное надо будет внести часть zs_** в исключения при вызове B_MoveNpc. Вчера я что то добавлял, но еще не проверял..
Добавил еще вот это:
if (Npc_IsInState (self,ZS_Guide_Player)) { return; };
Ни провожающие, не следователи не тупят... Ведут себя как нужно...
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
if (Npc_IsInState (self,ZS_Guide_Player)) { return; };
Если восприятие не должно работать в каком-то состоянии, его просто нужно запретить при входе в это состояние или не активировать его вовсе. Если набор восприятий активируются в стандартной функции, то запретить ненужное восприятие можно с помощью функции Npc_PercDisable.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
Если восприятие не должно работать в каком-то состоянии, его просто нужно запретить при входе в это состояние
Ну, функция B_MoveNpc () именно это и делает. В ней как раз и расписано кто может, кто не может.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.002
Благодарности
971
Баллы
295
Если восприятие не должно работать в каком-то состоянии, его просто нужно запретить при входе в это состояние или не активировать его вовсе.
сейчас данный "проекта" идёт в виде мода и хуки стоят на InitPerceptions и Perception_Set_Normal. Не хочется лезть в прочие оригинальные функции и там вносить правки с помощью хуков, из соображений совместимости с прочими проектами. Если сие творение дойдёт до релиза, то тогда уже можно подумать о том что бы где то что то переписать. Сейчас же хочется "просто завести и послушать как работает" :)
ElderGamer, посоветуй что тут добавить убавить;-)
Daedalus:
func void Perception_Set_MoveNpcWait ()                //Fьr Humans
{
/*
    //G1MDK для ZS_MoveNpcWait и прочее
    Npc_PercEnable      (self,    PERC_ASSESSDAMAGE,        ZS_ReactToDamage);    
    Npc_PercEnable      (self,     PERC_ASSESSMAGIC,        B_AssessMagic);    
    Npc_PercEnable      (self,    PERC_ASSESSWARN,         B_AssessWarn );    
    Npc_PercEnable      (self,    PERC_ASSESSFIGHTSOUND,    B_AssessFightSound);
    Npc_PercEnable      (self,    PERC_CATCHTHIEF,        ZS_CatchThief );    
    Npc_PercEnable      (self,     PERC_ASSESSTALK,        B_AssessTalk );    
    Npc_PercEnable      (self,     PERC_ASSESSTHREAT,        B_AssessFighter);
    Npc_PercEnable      (self,     PERC_ASSESSENTERROOM,    B_AssessEnterRoom);
  */
 
    // --- aktiv ------------------------------------------------------------------------- //aktive Wahrnehmungen werden IMMER den passiven bevorzugt (priorisiert)
    Npc_PercEnable      (self,     PERC_ASSESSFIGHTSOUND    ,    B_AssessFightSound            ); //geht in ZS_WatchFight oder ZS_Attack
    Npc_PercEnable      (self,     PERC_ASSESSENEMY        ,    B_AssessEnemy                ); //geht in ZS_Attack // добавил

    // --- passiv ------------------------------------------------------------------------ //Passive Wahrnehmungen werden durch die Reihenfolge der Anmeldung priorisiert!
    Npc_PercEnable      (self,     PERC_ASSESSMAGIC        ,    B_AssessMagic                );
    Npc_PercEnable      (self,    PERC_ASSESSDAMAGE        ,    B_AssessDamage                ); //geht in ZS_Attack oder in ZS_ReactToDamage (bei Freunden)
    Npc_PercEnable      (self,     PERC_ASSESSWARN            ,     B_AssessWarn                   ); //geht in ZS_Attack
//       Npc_PercEnable      (self,    PERC_CATCHTHIEF,        ZS_CatchThief );    
     Npc_PercEnable      (self,     PERC_ASSESSTALK            ,    B_AssessTalk                 ); //geht in ZS_Talk
    Npc_PercEnable      (self,     PERC_ASSESSTHREAT        ,    B_AssessThreat                ); //geht in ZS_ReactToWeapon
    Npc_PercEnable      (self,    PERC_ASSESSENTERROOM    ,    B_AssessPortalCollision        ); //geht in ZS_ObservePlayer. ZS_ClearRoom oder ZS_Attack
};
 
Последнее редактирование:

.Unreal

Участник форума
Регистрация
21 Июн 2012
Сообщения
689
Благодарности
91
Баллы
210
Ух ты! Рад, что работа не заброшена, а прям кипит) Что тут можно перекачать или стоит еще подождать?)
Пост автоматически объединён:

Кстати, НПСам были добавлены фразы "Дай пройти" или типо того?) А то в том варианте, который я скачивал нет этих фраз и не совсем понятно чего от меня хотят НПСы)
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.002
Благодарности
971
Баллы
295
В данный момент, если какой-то инстанции непися нет в моде - игра вылетает.
можно делать проверки внутри функций. а можно добавить пустые инстанции
Daedalus:
// что то будет
test(!Mil_311_Andre)    { instance Mil_311_Andre(C_Npc)       { }; };
test(!Mil_304_Torwache) { instance Mil_304_Torwache(C_Npc)    { }; };
test(!Mil_305_Torwache) { instance Mil_305_Torwache(C_Npc)    { }; };
test(!KDF_511_Daron)    { instance KDF_511_Daron(C_Npc)       { }; };
test(!VLK_439_Vatras)   { instance VLK_439_Vatras(C_Npc)      { }; };
test(!SLD_807_Bullco)   { instance SLD_807_Bullco(C_Npc)      { }; };
test(!SLD_806_Sylvio)   { instance SLD_806_Sylvio(C_Npc)      { }; };
test(!VLK_484_Lehmar)   { instance VLK_484_Lehmar(C_Npc)      { }; };
test(!BAU_900_Onar)     { instance BAU_900_Onar(C_Npc)        { }; };
test(!SLD_814_Sentenza) { instance SLD_814_Sentenza(C_Npc)    { }; };
test(!BAU_935_Bronko)   { instance BAU_935_Bronko(C_Npc)      { }; };
test(!VLK_432_Moe)      { instance VLK_432_Moe(C_Npc)         { }; };
test(!VLK_434_Borka)    { instance VLK_434_Borka(C_Npc)       { }; };
test(!VLK_438_Alrik)    { instance VLK_438_Alrik(C_Npc)       { }; };
Что тут можно перекачать или стоит еще подождать?)
релизной версии в этом году не планируется.
Кстати, НПСам были добавлены фразы "Дай пройти" или типо того?
смотри предыдущую страницу
 

MEG@VOLT

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

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.002
Благодарности
971
Баллы
295
А это работать будет? :oops:
так делать "таксично", но работать будет. и на такое нужно пару минут, а оплетать проверками каждую проверку будет дольше по времени и не понятно конечный ли этот список НПС (наверняка будут еще) то есть просто для теста в каком то моде подойдёт.
Думаешь за год не осилим? ))) :rolleyes:
господа интересуется и не хочет их разочаровывать ложными надеждами и неоправданными ожиданиями :) а кому надо тот и сам может почитать / скачать / потестить / отписаться по тестам/отписаться по кодам (нужное подчеркнуть). а самое главное дать самостоятельную оценку процессу.
Я уж думал к релизу идем))
мы уже от него ушли далеко странице на третей :)

*** *** ***
.Unreal, не хочешь потестить в Архолос? :)
 
Сверху Снизу