Matrix 56 Опубликовано 30 января, 2022 Тема спавна двери, даже точнее будет, её логика, довольно интересная. Можно сделать так, что-бы наша дверь, открывалась, в случае если игрок получает какой либо инфопоршень, а так-же, с помощью какого либо предмета. И так, начнём. Для спавна самой двери, нам нужен распакованный файл all.spawn, его можно распаковать с помощью ACDC. Открываем alife_*название локации*, открываем с названием локации, на которой мы хотим заспавнить нашу дверь. Вписываем либо в конец, либо в начало эти строки: [99999] ; cse_abstract properties section_name = physic_object name = home_door position = -170.69994506836, -20.019019012451, -139.07005517550 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 55 distance = 0 level_vertex_id = 79321 object_flags = 0xfffffffa custom_data = <<END [logic] cfg = scripts\esc_home_door.ltx [collide] ignore_static END ; cse_visual properties visual_name = physics\door\door_pripyat_01 ; cse_ph_skeleton properties skeleton_name = ; cse_alife_object_physic properties physic_type = 0x3 mass = 10 fixed_bones = link А теперь разберём подробнее. [99999] - Номер нашего объекта, обязательно так, что-бы он не повторялся. name = home_door - Название нашего объекта. position - Позиция объекта. direction - то, куда будет развёрнут объект cfg - Логика двери, разберём её чуть позже. visual - Визуал нашего объекта, в нашем случае, это дверь комнаты с декодором в Припяти Сами координаты мы можем указать другие, чтобы узнать координаты места, куда мы хотим поставить дверь, вписываем данный скрипт в файл ui_main_menu.script по пути gamedata\scripts\. function main_menu:OnButton_credits_clicked() local text local vid local gvid local a = vector() local text a = db.actor:position() vid = db.actor:level_vertex_id() gvid = db.actor:game_vertex_id() text = "Poziciya:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid news_manager.send_tip(db.actor, text, nil, nil, 30000) end Теперь если мы уже зайдя на место, координаты которого мы хотим узнать, заходим в меню и нажимаем на Титры. Зайдя обратно в игру нам прийдёт сообщение с координатами. Скриним кнопкой F12. Скриншот будет в месте где у вас лежит папка с сохранениями. Вписываем X,Y,Z координаты, а также level_vertex_id и game_vertex_id. После чего, можем собирать наш спавн, но ещё не торопимся заходить в игру. Сделаем простую логику. Создаём файл esc_home_door.ltx по пути gamedata\config\scripts\. Вписываем в него эти строки если мы хотим чтобы дверь открывалась ключом: [logic] active = ph_door@locked1 [ph_door@locked1] locked = true closed = true snd_open_start = trader_door_open_start snd_close_start = trader_door_close_start snd_close_stop = trader_door_close_stop show_tips = true on_use = {=actor_has_item(house_key)} ph_door@open [ph_door@open] locked = true closed = false snd_open_start = trader_door_open_start snd_close_start = trader_door_close_start snd_close_stop = trader_door_close_stop show_tips = false И эти строки если мы хотим чтобы дверь открывалась при получении инфопоршня: [logic] active = ph_door@locked1 [ph_door@locked1] locked = true closed = true snd_open_start = trader_door_open_start snd_close_start = trader_door_close_start snd_close_stop = trader_door_close_stop show_tips = true on_info = {+esc_kill_bandits_quest_done} ph_door@open [ph_door@open] locked = true closed = false snd_open_start = trader_door_open_start snd_close_start = trader_door_close_start snd_close_stop = trader_door_close_stop show_tips = false В случае если мы хотим сделать открытие двери после получения инфопоршня, ничего дополнительного делать не нужно, только перенести скомпилированный all.spawn по пути gamedata\spawns\ Теперь после выполнения задания по зачистке АТП, наша дверь откроется. В случае с предметом, нужно добавить сам предмет, и его выдачу. Открываем файл items.ltx по пути gamedata\config\misc\ В конец вписываем: [house_key]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "devices\quest_items\house_key" ;$prefetch = 32 class = II_ATTCH cform = skeleton visual = equipments\item_antirad.ogf radius = 1 quest_item = true description = "Ключ от двери в деревне новичков" inv_name = "Ключ" inv_name_short = "Ключ" inv_grid_width = 2 inv_grid_height = 1 inv_grid_x = 18 inv_grid_y = 8 inv_weight = 0 cost = 0 Модель ставьте свою, я поставил модель антирада, а иконку ножа. Меняйте предмет на свой вкус и цвет. Теперь добавим ключ в стартовое снаряжение которое даёт Волк в начале игры. Для этого открываем файл escape_dialog.script по пути gamedata\scripts\ Ищем в файле функцию: function give_weapon_to_actor (trader, actor) dialogs.relocate_item_section(trader, "wpn_pm", "in") dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in") dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in") dialogs.relocate_item_section(trader, "wpn_knife", "in") end Вставляем строку до строки end, иначе будет вылет. Сама строка которую мы добавляем: dialogs.relocate_item_section(trader, "house_key", "in") Сохраняем и проверяем. Теперь если вы всё сделали правильно, у вас появиться дверь в деревне новичков Спойлер 2 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты