Перейти к содержанию

Рекомендуемые сообщения

 

[All] Поворот по оси Y

Автор: Паша(Naxac)

Несколько месяцев я наткнулся с одной проблемой, когда делал модификацию у меня нпс почему то были повёрнуты не туда куда нужно, рыскал в просторах интернета как же сделать чтобы нпс и т.д, были повёрнуты куда мне это нужно, спасибо одному человеку который подсказал даже функцию написал, его зовут Паша(Naxac), суть не в это. Давайте же приступим к практики.

Спойлер
Любой текстовый редактор, лучше NotePad++ он подсвечивает синтаксис Lua файл - ui_main_menu.
Спойлер

Для начала создадим файл_ваше название в моём случае bind_direction:

b829dec53db1t.jpg

Открываем ваш_файл и файл под названием ui_main_menu:

7eac5ec58ad6t.jpg

Вставляем эту функцию:


function get_dir()
local dir = device().cam_dir
news_manager.send_tip(db.actor, "load ~~ direction: x = 0, y = "..tostring(-dir:getH())..", z = 0", nil, nil, 30000)
end

7d8dc2d22fa5t.jpg

Так с скриптом bind_direction мы разобрались, теперь переходим к ui_main_menu, находим там функцию:


function main_menu:OnKeyboard(dik, keyboard_action) --virtual function
CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)
local bind = dik_to_bind(dik)
local console = get_console()

if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
if dik == DIK_keys.DIK_ESCAPE then
if level.present() and (db.actor ~= nil) and db.actor:alive() then
console:execute("main_menu off")
end
end

--  if dik == DIK_keys.DIK_S then
--   self:OnButton_load_spawn()

--  else
if dik == DIK_keys.DIK_C then --- у вас будет стоять биндер на клавишу Q место DIK_C можно за биндить любую клавишу ведь вся функция будет происходить в меню игры и выводиться уже в саму игру сообщением в вашу симуляцию.
bind_direction.get_dir() --- это регистрирует от куда будет браться функция вместо моего bind_direction может быть ваш скрипт
end

end

return true
end

Теперь всё мы с скриптовой части уже закончили переходим уже к all.spawn.

Спойлер

Для начала создадим нашего НПС надеюсь вы знаете как создать его чтобы я не расписовал подробно.

Находим секцию своего нпс в моём случае:


[3358]

; cse_abstract properties
section_name = stalker
name = slaven_guard_1
position = 59.916691,0.517594,80.609863
direction = 0,-0.026383053511381,0
version = 118
script_version = 6

; cse_alife_trader_abstract properties
money = 5000
character_profile = predbannik_bar_guard

; cse_alife_object properties
game_vertex_id = 135
distance = 7.69999980926514
level_vertex_id = 1037732
object_flags = 0xffffffff
custom_data = <<END
[logic]
cfg = scripts\predbannik\logic_guard_slaven.ltx
END

; cse_visual properties
visual_name = actors\neytral\stalker_bar_security

; cse_alife_creature_abstract properties
g_team = 0
g_squad = 5
g_group = 20
health = 1
dynamic_out_restrictions =
dynamic_in_restrictions =
upd:health = 1
upd:timestamp = 0
upd:creature_flags = 0
upd:position = 59.916691,0.517594,80.609863
upd:o_model = 0
upd:o_torso = -0.026383053511381,0,0
upd:g_team = 0
upd:g_squad = 5
upd:g_group = 20

; cse_alife_monster_abstract properties
base_out_restrictors = bar_restrictor
upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0
equipment_preferences = 2,2,2,1,0
main_weapon_preferences = 1,2,1,2

; cse_ph_skeleton properties

; cse_alife_human_stalker properties
upd:start_dialog =

; se_stalker properties

Находим две строки direction = 0,-0.026383053511381,0 и upd:o_torso = -0.026383053511381,0,0
Теперь к пояснениям почему у меня заданные числа стоят в разных комбинациях (-0.026383053511381) а вот почему в движке сталкера расчитанная странная система поворотов но не будет углубляться в историю, так ах да поясняю как работает эта система:

  • direction - Это поворот нашего НПС
  • upd:o_torso - Это поворот тела -- хотя я сам не понял в чём разница

Схема работы:
direction = X,Y,Z
upd:o_torso = Y,X,Z -- то есть у нас значение Y просто поставленная в другом месте чтобы работал поворот нужно будет по такой системе работать

Пример:
direction = 0,3,0
upd:o_torso = 3,0,0

То есть наш НЕПИСь или игрок направлен на ЮГ.

Заходим в игру, и выбираем ракурс куда будет поворачиваться ваш НЕПИСь и т.д
Повернулись теперь выходим в меню игры, и нажимаем нашу забиндинную клавишу в моём случае это клавиша "С". Должен проиграть звук сообщения, и возвращаемся уже в саму игру. Вот так будет.

044394befe26t.jpg

После того как сделали всё результат должен получиться такой в моём случае мой НЕПИСь Славен повёрнут по оси Y в таких координатах (-0.026383053511381).

32af91e64d03t.jpg

 

  • Жму руку 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Здравствуйте, возможно некорректно спрашивать вопрос через три года, однако, буду рад если вы мне поможете. Дело в том, что при запуске игры вылетает лог с ошибкой: "stack trace:". Буду сильно признателен, если вы хотя бы проверите свою статью на наличие ошибок (если таковые имеются конечно. Возможно, что сам что-то начередил... хотя делал строго по гайду.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу