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

Спавним дверь с помощью A-Life (SoC)

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

 

Тема спавна двери, даже точнее будет, её логика, довольно интересная. Можно сделать так, что-бы наша дверь, открывалась, в случае если игрок получает какой либо инфопоршень, а так-же, с помощью какого либо предмета.

И так, начнём.

Для спавна самой двери, нам нужен распакованный файл 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")


Сохраняем и проверяем. Теперь если вы всё сделали правильно, у вас появиться дверь в деревне новичков

Спойлер

ss_alex__01-30-22_17-52-54_(l01_escape).thumb.jpg.7defc3a8d4b8fe0ae43a3631845deec5.jpg

 

  • Мастер! 1
  • Хабар 1

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


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

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

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

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

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

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

Войти

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

Войти

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

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