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

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

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

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.990
Благодарности
967
Баллы
275
  • Первое сообщение
  • #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
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.717
Баллы
1.625
Грег в первой локации бессмертный. а во второй локации когда становится смертный тупо сидит на лавке. то есть он вообще не должен попадать в такую историю ;-)
Ок, тогда Грега убираем из борзых.
а вообще Онар хозяин это его дом. он нанял наёмников. В принципе он может просто звать на помощь всех подряд и все вокруг в том числе и Ли должны бить героя ;-)
Ну... тогда давай для него сделаем - Аляаааарм ))
MW 7, а если первое условие в файле ZS_MOVENPC.D изменить вот так:
Daedalus:
    if (other.aivar[AIV_INVINCIBLE] == true)                // герой с кем то заговорил
    || (Npc_GetDistToNpc(self, other) > DIST_MoveNpc)       // герой уступил дорогу
    {
        Npc_ClearAIQueue(self);
        //C_StopLookAt        (self); // da in ZS_MoveNpc() der Blockierer nach dem Waffenziehen angeguckt wird!
        B_StopLookAt (self);
        B_RemoveWeapon      (self);
        AI_ContinueRoutine  (self);
        Hlp_PrintConsole(Str_Format("   ZS_MoveNpcWait [%s %i]  -- > return LOOP_END [AIV_StateTime %i]",self.name, self.id, self.aivar[AIV_StateTime]));
        return LOOP_END;
    };
    if (self.aivar[AIV_StateTime]  >= 10)
    {
        return LOOP_CONTINUE;
    };
тогда, судя по всему, глюка с доставанием-убираением оружия не будет... И мимолетного прерывания не будет.
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.990
Благодарности
967
Баллы
275
if (self.aivar[AIV_StateTime] >= 10) { return LOOP_CONTINUE; };
LOOP_CONTINUE стоит в конце цикла. его выносит в отдельные условия не надо.


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

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.717
Баллы
1.625
глюк с оружием связан с дистанцией. от таких правок он не пропадёт, так как выход из цикла происходит при проверки дистанции, либо на 8 секунде с переходом в атаку если было сделано предупреждение. то есть если ли НПС достал оружие и его убрал, значит сработала проверка на дистанцию.
Оптимально:
INI:
[ZB_MOVENPCWAIT]
DIST_MoveNpc=400
DIST_PERC_MOVENPC=250
Еще ZS_MoveNpcWait_Loop немного поправил к такому:
Daedalus:
func int ZS_MoveNpcWait_Loop ()
{
    if (other.aivar[AIV_INVINCIBLE] == true)                // герой с кем то заговорил
    || (Npc_GetDistToNpc(self, other) > DIST_MoveNpc)       // герой уступил дорогу
    //|| (Npc_GetStateTime(self) >= 10)
    {
        Npc_ClearAIQueue(self);
        //C_StopLookAt        (self); // da in ZS_MoveNpc() der Blockierer nach dem Waffenziehen angeguckt wird!
        B_StopLookAt (self);
        B_RemoveWeapon      (self);
        AI_ContinueRoutine  (self);
        Hlp_PrintConsole(Str_Format("   ZS_MoveNpcWait [%s %i]  -- > return LOOP_END [AIV_StateTime %i]",self.name, self.id, self.aivar[AIV_StateTime]));
        return LOOP_END;  
    };
   
    if (self.aivar[AIV_StateTime]  >= 10)
    {
        Npc_SetStateTime(self,0);
    }
    else if (self.aivar[AIV_StateTime]  >= 7)
    //else if (Npc_GetStateTime(self) >= 7)
    {
        if (C_AmIStronger(self, other) == true)  // общая проверка
        && (self.aivar[AIV_TAPOSITION] == true)
        {
            Npc_SetTempAttitude (self,ATT_HOSTILE);
            // B_Say            (self,     other, "$YOUASKEDFORIT"); // реплика есть в ZS_Attack
            Npc_SetTarget    (self,    other);
            //AI_StartState    (self,     ZS_Attack, 1, "");
            B_Attack (self, other, AR_ReactToWeapon , 0);
            return LOOP_END;      
        };
    }
//И дальше все как у тебя
В этом варианте, нет дерганий НПС, они ждут когда ГГ отойдет и будет, и каждые 10 секунд просят убраться. Ну и первое условие полностью отрабатывает.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.717
Баллы
1.625
MW 7, Подскажи еще, я чет немного не понимаю:
PERCEPTION
Daedalus:
DIST_MoveNpc = Hlp_ReadOptionInt (FileName, section, "DIST_MoveNpc",      400);
DIST_MoveNpc = Hlp_ReadOptionInt (FileName, section, "DIST_PERC_MOVENPC", 300);
т.е. DIST_MoveNpc = 300
Дальше в ZS_MOVENPC
Daedalus:
|| (Npc_GetDistToNpc(self, other) > DIST_MoveNpc)
т.е. тут получается: (Npc_GetDistToNpc(self, other) > 300)
?
Еси да, то зачем первый параметр, где DIST_MoveNpc = 400 ? *around the head*
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.990
Благодарности
967
Баллы
275
Подскажи еще, я чет немного не понимаю:
опечатка :-( исправил

Daedalus:
        DIST_MoveNpc        = Hlp_ReadOptionInt (FileName, section, "DIST_MoveNpc",      400);
        DIST_PERC_MOVENPC   = Hlp_ReadOptionInt (FileName, section, "DIST_PERC_MOVENPC", 300);

обновил
Daedalus:
func void ZS_MoveNpcWait ()
{
    Hlp_PrintConsole(Str_Format("   ZS_MoveNpcWait [%s %i]",self.name, self.id));

    Perception_Set_MoveNpcWait();       // G1
//    Perception_Set_Minimal ();          // G2 - нет реакции на вытаскивание оружия
    
    AI_StandUp         (self);
    //    C_LookAtNpc            (self, other);  // G1
    B_LookAtNpc     (self, other);          // G2
    //B_TurnToNpc     (self, other);
    
     // ------ aNSCs warnen ------
    Npc_SendPassivePerc (self, PERC_ASSESSWARN, self, other);   
    
     // ------ aivars resetten -------
    self.aivar[AIV_TAPOSITION] = FALSE; //PlayerHasBeenWarnedTwice   
    self.aivar[AIV_StateTime] = 0;

};

func int ZS_MoveNpcWait_Loop ()
{
    if (self.aivar[AIV_StateTime]  > 10)
    {
        Npc_SetStateTime(self,1);
        self.aivar[AIV_StateTime] = 0;
    };
    
    if (other.aivar[AIV_INVINCIBLE] == true)                // герой с кем то заговорил
    || (Npc_GetDistToNpc(self, other) > DIST_MoveNpc)       // герой уступил дорогу
    //|| (Npc_IsWayBlocked(self) == false)
   // || (self.aivar[AIV_StateTime]  >= 10)
    {
        Npc_ClearAIQueue(self);
        //C_StopLookAt        (self); // da in ZS_MoveNpc() der Blockierer nach dem Waffenziehen angeguckt wird!
        B_StopLookAt (self);
        B_RemoveWeapon      (self);
        AI_ContinueRoutine  (self);
        Hlp_PrintConsole(Str_Format("   ZS_MoveNpcWait [%s %i]  -- > return LOOP_END [AIV_StateTime %i]",self.name, self.id, self.aivar[AIV_StateTime]));
        return LOOP_END;   
    };
    

    
    if (self.aivar[AIV_StateTime]  >= 7)
    //else if (Npc_GetStateTime(self) >= 7)
    {
        if (C_AmIStronger(self, other) == true)  // общая проверка
        && (self.aivar[AIV_TAPOSITION] == true)
        {
            Npc_SetTempAttitude (self,ATT_HOSTILE);
            // B_Say            (self,     other, "$YOUASKEDFORIT"); // реплика есть в ZS_Attack
            Npc_SetTarget    (self,    other);
            //AI_StartState    (self,     ZS_Attack, 1, "");
            B_Attack (self, other, AR_ReactToWeapon , 0);
            return LOOP_END;       
        };
    }
    else if (self.aivar[AIV_StateTime]  >= 3) // 0,1,2,3. итого 4.
    {
        if (C_AmIStronger(self, other) == true)  // общая проверка
        && (self.aivar[AIV_TAPOSITION] == FALSE)
        {
            B_SelectWeapon    (self,    other);
            //B_Say             (self,    other,  "$YOUDEAFORWHAT"); // G1 MDK
            B_Say             (self,    other,  "$ThenIBeatYouOutOfHere");     //Сейчас я вышвырну тебя отсюда!
            self.aivar[AIV_TAPOSITION] = TRUE; //PlayerHasBeenWarnedTwice
            Hlp_PrintConsole(Str_Format("   ZS_MoveNpcWait [%s %i]  -- > B_SelectWeapon [AIV_StateTime %i]",self.name, self.id, self.aivar[AIV_StateTime]));
        };
    }
    else if (self.aivar[AIV_StateTime] == 0)
    {
        if (Npc_GetAttitude ( self, other) == ATT_FRIENDLY)
        || (self.npcType == NPCTYPE_FRIEND)
        {
            B_Say (self, other, "$whereto");  //
        }
        else if (C_AmIStronger(self, other) == true)
        {
            B_Say (self, other, "$WhatDidYouDoInThere");  //Что тебе здесь надо, а?!
        }
        else
        {
            B_Say (self, other, "$GetOutOfHere");   //Убирайся отсюда!
        };
    };
    
    // ------ Alle 2 Sekunden zu other ausrichten ------
    if (Npc_GetStateTime (self) != self.aivar[AIV_StateTime])
    {
        if (!Npc_CanSeeNpc (self, other))
        {   
            B_TurnToNpc (self, other);
        };
        //Hlp_PrintConsole(Str_Format(" ZS_MoveNpcWait [%s %i]  -- > return LOOP_CONTINUE [AIV_StateTime %i]",self.name, self.id, self.aivar[AIV_StateTime]));
        self.aivar[AIV_StateTime] = Npc_GetStateTime (self);
    };

    //AI_Wait                (self,1);
    return LOOP_CONTINUE;
};

func void ZS_MoveNpcWait_End ()
{

};

//  G1 mdk
/*
func void ZS_MoveNpcWait ()
{
    PrintDebugNpc        (PD_ZS_FRAME, "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);           
    
    C_LookAtNpc            (self,    other);
};

func void ZS_MoveNpcWait_Loop ()
{
    PrintDebugNpc( PD_ZS_LOOP, "ZS_MoveNpcWait_Loop" );               

    if (Npc_GetStateTime ( self) > 2 )
    {
        if    Npc_IsWayBlocked(self)                    // Weg immer noch blockiert?
        &&    (Npc_GetDistToNpc(self, other)<200)        // kцnnte ja auch ein anderer NSC sein, also checken, ob SC noch in der Nдhe!
        &&    (other.aivar[AIV_INVINCIBLE] == FALSE)    // SC kцnnte mittlerweile reden
        {
            B_DrawWeapon     (self,    other);
            B_Say             (self,    other,  "$YOUDEAFORWHAT");
            AI_StartState     (self,    ZS_MoveNpcWait1, 0, "");   
            return;
        }
        else
        {
            AI_ContinueRoutine (self);
            return;
        };
    };
    AI_Wait                (self,1);
};

func void ZS_MoveNpcWait_End ()
{
    PrintDebugNpc        (PD_ZS_FRAME, "ZS_MoveNpcWait_End" );               
};

func void ZS_MoveNpcWait1 ()
{
    PrintDebugNpc        (PD_ZS_FRAME, "ZS_MoveNpcWait1" );               
    
    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);           
};

func void ZS_MoveNpcWait1_Loop ()
{
    PrintDebugNpc( PD_ZS_LOOP, "ZS_MoveNpcWait1_Loop" );               
    if (Npc_GetStateTime ( self) > 2 )
    {
        if    Npc_IsWayBlocked(self)                    // Weg immer noch blockiert?
        &&    (Npc_GetDistToNpc(self, other)<200)        // kцnnte ja auch ein anderer NSC sein, also checken, ob SC noch in der Nдhe!
        &&    (other.aivar[AIV_INVINCIBLE] == FALSE)    // SC kцnnte mittlerweile reden
        {
            Npc_SetTempAttitude (self,ATT_HOSTILE);
            B_Say            (self,     other, "$YOUASKEDFORIT");
            Npc_SetTarget    (self,    other);
            AI_StartState    (self,     ZS_Attack, 1, "");
            return;
        }
        else
        {
            C_StopLookAt        (self);        // da in ZS_MoveNpc() der Blockierer nach dem Waffenziehen angeguckt wird!
            AI_ContinueRoutine (self);
            return;
        };
    };
    AI_Wait                (self,1);
};

func void ZS_MoveNpcWait1_End ()
{
    PrintDebugNpc        (PD_ZS_FRAME, "ZS_MoveNpcWait1_End" );               
    B_RemoveWeapon        (self);
};
*/
 

Вложения

  • 2023_01_27_MoveNpcWait.zip
    7,8 KB · Просмотры: 2

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.717
Баллы
1.625
Вот с этим:
Daedalus:
    if (self.aivar[AIV_StateTime]  > 10)
    {
        Npc_SetStateTime(self,1);
        self.aivar[AIV_StateTime] = 0;
    };
Может произойти сбой, и функция выполнится только один раз, и болванчик после этого будет просто стоять молча. Уже пробовал))
По этому я делал именно так Npc_SetStateTime(self,0); ))
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.717
Баллы
1.625
когда пробовал, обнулял AIV_StateTime ?
Часа полтора назад, пока обед был))
Делал вот так
Daedalus:
    if (self.aivar[AIV_StateTime]  >= 10)
    {
        self.aivar[AIV_StateTime] = 0;
    };
И болванчик зависал на постоянном просмотре на ГГ ))
Хотя, если сделать как у тебя:
Daedalus:
    if (self.aivar[AIV_StateTime]  > 10)
    {
        Npc_SetStateTime(self,1);
        self.aivar[AIV_StateTime] = 0;
    };
то получается, переводим непися в состояние прострации на одну секунду, после чего происходит сброс времени состояния. И должно сработать условие, когда AIV_StateTime = 0. Но сработает ли...
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.990
Благодарности
967
Баллы
275
Делал вот так
if (self.aivar[AIV_StateTime] > 10)
{
self.aivar[AIV_StateTime] = 0;
};
такое не поможет, без сброса состояния. так как далее у тебя AIV_StateTime начнёт троить :) то есть 9,10,11, 0,12,0,13,0,14,0,15,0 ...

то получается, переводим непися в состояние прострации на одну секунду
должно быть всё ровно, без простраций.

****

надо на 7 секунду какую анимацию поставить для неагрессивных НПС. что бы он почесался в известном месте или что то пнул или рукой махнул
Код:
    if (self.aivar[AIV_StateTime]  >= 7)
    {
        if (self.aivar[AIV_TAPOSITION] == true)
        //&& (C_AmIStronger(self, other) == true)  // общая проверка
        {
            Npc_SetTempAttitude (self,ATT_HOSTILE);
            // B_Say            (self,     other, "$YOUASKEDFORIT"); // реплика есть в ZS_Attack
            Npc_SetTarget    (self,    other);
            //AI_StartState    (self,     ZS_Attack, 1, "");
            B_Attack (self, other, AR_ReactToWeapon , 0);
            return LOOP_END;     
        }
        else
        {
        // сюда
        };
    }
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.717
Баллы
1.625
надо на 7 секунду какую анимацию поставить для неагрессивных НПС.
Да, но думал, когда уже разберемся с глюками, когда основа будет работать.
что бы он почесался в известном месте или что то пнул или рукой махнул
В пятой точке чесание, не помню чтобы у людей была. У орков помню
пинание - слишком долгая анимация.
Рукой махнул - как в Г1, когда далеко от непися и пытаешься с ним поговорить? или как во многих модах используют, как в этой гифке
1674819227407.png

? Первая анима слишком долгая, вторая взята из EGMMM, т.е. обе не подходят.
А если добавить анимацию чесания затылка?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.990
Благодарности
967
Баллы
275
Код:
//---------------------------------------------------------------------------------------------------------------------
// alte, situationsbezogene Gesten
//-------------------------------

// *** ??? *** Mike: in AI verwenden. Script anlegen mit allen zu vewendenden Anis!

// Ja
            ani            ("t_Yes"                    2    ""                0.1    0.1    M.    "Hum_Yes_M01.asc"            F    1    44)
// Nein
            ani            ("t_No"                        2    ""                0.1    0.1    M.    "Hum_No_M01.asc"            F    1    46)
// Keine Ahnung
            ani            ("t_DontKnow"                2    ""                0.1    0.1    M.    "Hum_DontKnow_M01.asc"        F    1    10)

// VergiЯ es
            ani            ("t_ForgetIt"                2    ""                0.1    0.1    M.    "Hum_ForgetIt_M01.asc"        F    1    27)
// Verschwinde
            ani            ("t_GetLost"                2    ""                0.1    0.1    M.    "Hum_GetLost_M01.asc"        F    1    34)
// Verschwinde (variation)
            ani            ("t_GetLost2"                2    ""                0.1    0.1    M.    "Hum_GetLost2_M01.asc"        F    1    29)


// Hey, komm mal rьber
            ani            ("t_ComeOverHere"            2    ""                0.1    0.1    M.    "Hum_Hey!_o_Beine_Jue02.ASC"    F    1    80    FPS:10)

// GrьЯen
    // Gardisten
            ani            ("t_GreetGrd"                2    ""                0.1    0.1    M.    "Hum_GreetGrd_M01.asc"        F    1    19)
    // Novize, mцnchische Verbeugung
            ani            ("t_GreetNov"                2    ""                0.1    0.1    M.    "Hum_GreetNov_M01.asc"        F    1    33)
    // Linke Hand zum GruЯ
            ani            ("t_GreetLeft"                2    ""                0.1    0.1    M.    "Hum_GreetLeft_M01.asc"        F    1    29)
    // rechte Hand zum GruЯ
            ani            ("t_GreetRight"                2    ""                0.1    0.1    M.    "Hum_GreetRight_M01.asc"    F    1    29)
    // locker lдssig grьЯen
            ani            ("t_GreetCool"                2    ""                0.1    0.1    M.    "Hum_GreetCool_M01.asc"        F    1    29)

// Ich krieg dich
            ani            ("t_iGetYou"                2    ""                0.1    0.1    M.    "Hum_iGetYou_M01.asc"        F    1    59 FPS:10)

// Langeweile Kick
            ani            ("t_BoringKick"                2    ""                0.1    0.1    M.    "Hum_BoringKick_M01.asc"    F    1    66 FPS:10)


// Da war doch was, oder auch nicht
        // Umherschauen / Suchen
            ani            ("t_Search"                    2    ""                0.1    0.1    M.    "Hum_Search_M02.asc"        F    1    74    FPS:10)


//-------------------------------
// RANDOM-ANIS
//-------------------------------

// Stehend
    // Beine ausschьtteln
            ani            ("r_LegShake"                2    ""                0.1    0.2    M.    "Hum_Randoms1_M01.asc"        F    1    75 FPS:10)

    // linke Schulter kratzen
            ani            ("r_ScratchLShoulder"        2    ""                0.1    0.2    M.    "Hum_Randoms2_M01.asc"        F    76    125 FPS:10)

    // am Sack kratzen
            ani            ("r_ScratchEgg"                2    ""                0.1    0.2    M.    "Hum_Randoms2_M01.asc"        F    126    175 FPS:10)

    // Kopf kratzen
            ani            ("r_ScratchHead"            2    ""                0.1    0.2    M.    "Hum_Randoms2_M01.asc"        F    176    225 FPS:10)

    // rechte Schulter kratzen
            ani            ("r_ScratchRShoulder"        2    ""                0.1    0.2    M.    "Hum_Randoms2_M01.asc"        F    226    275 FPS:10)
 

MEG@VOLT

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

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.990
Благодарности
967
Баллы
275
INI:
DIST_PERC_MOVENPC=400
не много? :)
Пост автоматически объединён:

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

Вложения

  • 2023_01_27_MoveNpcWait.zip
    7,8 KB · Просмотры: 4

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.717
Баллы
1.625
Ну со значениями еще можно поиграться, если в ближайшие пару часов ничего не отвечу по этому поводу - то уже только завтра буду тестить)
на время теста можно взять что то яркое и заметное :-D а к финалу уже что то подобрать адекватное
7522.jpg
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.717
Баллы
1.625
Хм...
Как только не извращался с этими двумя параметрами:
DIST_MoveNpc
DIST_PERC_MOVENPC
болванчик смотрит на расстояние DIST_MoveNpc, и как было до этого - без разницы, заходишь ты ему за спину, или просто отодвигаешься. Если расстояние не увеличилось больше DIST_MoveNpc, болванчик стоит и смотрит на тебя ругаясь и временами покуривая *thumbs up*
Если брать человеческий фактор, то в принципе... болванчик следит, чтобы ГГ отошел от непися... а то кто его знает, этого ГГ, что у него в голове, возьмет и опять преградит путь...
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.990
Благодарности
967
Баллы
275
по идеи DIST_MoveNpc должна быть > DIST_PERC_MOVENPC

Если брать человеческий фактор, то в принципе... болванчик следит, чтобы ГГ отошел от непися... а то кто его знает, этого ГГ, что у него в голове, возьмет и опять преградит путь...
герой тормознул НПС, осмотрел его внимательно, сделал шаг назад и как только НПС отвернулся как напрыгнет на него сзаду и как давай всякое делать :)
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.717
Баллы
1.625
герой тормознул НПС, осмотрел его внимательно, сделал шаг назад и как только НПС отвернулся как напрыгнет на него сзаду и как давай всякое делать :)
Да да да....
 
Сверху Снизу