Перейти к контенту

AkkurDev

Пользователи
  • Число публикаций

    0
  • Регистрация

  • Последнее посещение

  • AMKoin

    40 [Подарить AMKoin]

Баланс оценок

0
  1. AkkurDev

    Скриптование

    Всем привет. Решил для себя изучить модели поведения персонажей. В качестве эксперимента, была выбрана доработка существующего скрипта xr_kamp. Идея: NPC во время дождя должны перемещаться в укрытие, а не сидеть пятой точкой в грязи; при этом, если дождь слабый, они двигаются в укрытие пешком, а если сильный - бегом. Все, как у людей, в общем. Добавил оператор, эвалуатор: пока оператор пустой, корректно отрабатывает переключение со схемы на схему. Стоило добавить в оператор логику смены положения - нпс начали втыкать: просто встают, стоят и смотрят в одну точку; более того - переключение схем не происходит. Предваряя вопросы: укрытие возвращается корректно, не nil, lvid выводится корректно. Хочется знать, что я забыл добавить или наоборот добавил лишнего в операторе перемещения на точку. Спасибо. Код: -- Персонаж бежит в укрытие, если начался дождь class "action_move_to_cover" (action_base) function action_move_to_cover:__init (npc_name,action_name,storage) super (nil,action_name) self.a = storage end function action_move_to_cover:initialize() action_base.initialize(self) -- Эти строки во всех схемах self.object:set_desired_position() self.object:set_desired_direction() -- Очищаю анимации жратвы и бряцанья на гитаре (как минимум, надеюсь, что корректно очищаются) self.object:clear_animations() -- Разрешаю движение self.object:movement_enabled(true) -- Двигаться линейно self.object:set_detail_path(move.line) -- не знаю, что это, во всех схемах есть self.object:set_path_type(game_object.level_path) -- Меняю состояние тела на бегущее (мб, неправильно?) self.object:set_body_state(move.run) -- Тип движения - бег (пока идет отладка, позже планировал добавить и шаг) self.object:set_movement_type(move.run) -- Бежит спокойно, без паники self.object:set_mental_state(anim.free) -- не знаю, что это, на разных форумах по AI рекомендовано, не знаю - нужно ли тут self.object:remove_all_restrictions() -- Запрещаю нпс издавать звуки и вступать в диалог с ГГ xr_sound.set_sound(self.object, nil) stop_play_sound(self.object) self.object:disable_talk() end function action_move_to_cover:execute () action_base.execute (self) local npc = self.object if npc then -- Получил ближайшее укрытие к персонажу local cover = ogsm_respawn.get_nearest_hide(npc) if cover then -- Получил данные об укрытии local area = cover.obj local lvid = area:level_vertex_id() -- Отправляю NPC на указанную точку state_mgr.set_state(npc,"raid") utils.send_to_nearest_accessible_vertex(npc, lvid) end end end function action_move_to_cover:finalize () action_base.finalize (self) end
×
×
  • Создать...