Half-Life и Adrenaline Gamer форум

Всё об игре в Халф-Лайф и АГ
Текущее время: 06 дек 2021, 14:07

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: NPC и прыжки
СообщениеДобавлено: 20 ноя 2021, 19:51 
Не в сети
Аватара пользователя
Зарегистрирован:
27 дек 2019, 17:59
Последнее посещение:
05 дек 2021, 22:16
Сообщения: 188
Откуда: Иркутск
Всех приветствую!

При написании функции прыжков для NPC столкнулся с такой проблемой: функция работает, NPC без проблем запрыгивают на ящики, однако с лестницами (которые ступенчатые) у них проблемы: первые несколько ступенек они преодолевают без каких-либо трудностей, однако на последнюю - вообще подняться не могут. Не могу понять, в чем причина. Код, отвечающий за прыжки, прикладываю


1) в Plugin Init было добавлено



Код:

     // ZB_CLASSNAME - класснейм NPC

    register_touch("worldspawn", ZB_CLASSNAME, "npc_jump")

    register_touch("func_brush", ZB_CLASSNAME, "npc_jump")

    register_touch("func_breakable", ZB_CLASSNAME, "npc_jump")

    register_touch("func_wall",ZB_CLASSNAME,"npc_jump")

   




2) Вот код самого "виновника торжества"


Код:

public npc_jump(crap, entity)

{

new victim = FindClosesEnemy(entity)

if(is_user_alive(victim))

    {                 

        if(g_entity_jumpdelay[entity] < get_gametime())                       

        {                                               

            g_entity_jumpdelay[entity] = (get_gametime() + 1.0)

                                                               

            new Float:entity_origin[3], Float:entity_angle[3]

            pev(entity, pev_origin, entity_origin)                 

            entity_origin[2]-=32.0 // Checking origin from the feet (not sure value is correct)   

            pev(entity, pev_v_angle, entity_angle)


                                                                                         

            // Get the origin in front of the player, and see if something is standing between the 2 points   

            new Float:futur_origin[3]                                                                         

                                                   

            origin_infront(entity_angle, entity_origin, 100.0, futur_origin)


            static Float:vecAngles[3]

                 

            new trace_handle = create_tr2()                                                   

            engfunc(EngFunc_TraceLine, entity_origin, futur_origin, IGNORE_MONSTERS, victim, trace_handle)

            get_tr2(trace_handle, TR_vecEndPos, futur_origin)                           

                                                                     

            if(get_distance_f(entity_origin, futur_origin) < 100.0)

            {   in_jump_state[entity]=1

                                                                 

                engfunc(EngFunc_MakeVectors, entity_angle)                       

                new Float:forward_vector[3]

                get_global_vector(GL_v_forward, forward_vector)


                entity_angle[0] = forward_vector[0] * 900.0

                entity_angle[1] = forward_vector[1] * 900.0

                entity_angle[2] = 3000.0               

                             

                set_pev(entity, pev_velocity, entity_angle)

                in_jump_state[entity]=0           

             

            }

        }


    }


}



3) Функция origin_infront


Код:

origin_infront(Float:vAngles[3], Float:vecOrigin[3], Float:flDistance, Float:vecOutput[3]) // By Exolent

{

    static Float:vecAngles[3]

    xs_vec_copy(vAngles, vecAngles)


    engfunc(EngFunc_MakeVectors, vecAngles)

    global_get(glb_v_forward, vecAngles)


    xs_vec_mul_scalar(vecAngles, flDistance, vecAngles)


    xs_vec_add(vecOrigin, vecAngles, vecOutput)

}



Вот видео взаимодействия NPC и ящиков





Вот видео взаимодействия NPC и лестниц


_________________
ВК: vk.com/pristavka2013
GitHub: https://github.com/mrglaster
Почта: [email protected]

Есть объективная реальность, а есть печенье.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: NPC и прыжки
СообщениеДобавлено: 03 дек 2021, 14:37 
Не в сети
Зарегистрирован:
23 авг 2012, 10:06
Последнее посещение:
03 дек 2021, 14:37
Сообщения: 83
Привет, NPC это же не боты - верно?
А может есть какая-то возможность сделать NPC этих (для Half Life), которые могут принимать урон от игрока такой же
(типа 12HP в тело с пистолета, 120 HP при попадании с арбалета и т.п), но настраивать их движение черз меню.
1 - коротки стрейфы в стороны
2 - длинные стрейфы в стороны
2 - BunnyHop т.е распрыжка вперед/круговая
3 - ГауссДжампы
...
9 - полный рандом
Может стэк настраивать им - типа 100/0 или 100/100

Такое возможно?


Вернуться к началу
 Профиль 
  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB