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

[SoC] Ковыряемся в файлах

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

ph_button это схема для физ.объекта, а sr_idle для спейсрестриктора.

Ссылка на комментарий

Давно не занимался логикой.

Да и не очень понял что и через сколько должно включаться.

Может как-то так ?

[ph_button@ventilation_system_on]
anim_blend = false
anim = button_true
; секунды через 3 запускается двигвтель
on_timer = 3000 | %+lab_x7_ventilation_system_turned_on_play_snd%
; через 15 сек. выдыется инфо и секцию оптравить в nil
on_timer2 = 15000 | nil %+lab_x7_ventilation_system_worked%

А [sr_idle@ventilators_timerэто лишнее

Изменено пользователем Nazgool
Ссылка на комментарий

@Charsi, не стал пихать on_timer в схему ph_button т.к. думал, что она ее не поддерживает.

 

@Nazgool, подправил. Без изменений. Похоже инфопоршни вообще не выдаются.

 

А что по поводу это схемы:

[logic]
active = ph_idle@ventilators_off

[ph_idle@ventilators_off]
on_info = {+lab_x7_ventilation_system_turned_on} ph_button@ventilators_on_anim

[ph_button@ventilators_on_anim]
anim = work
on_info = {+lab_x7_ventilation_system_turned_on_play_snd} ph_sound@ventilators_on_snd

[ph_sound@ventilators_on_snd]
snd = lab_x7_ventilations_run
looped 	= true

Звук будет проигрываться? Или нужно юзать play_snd_from_obj? Но она вроде как завязана на id-шник объекта. А эта логика используется на многих объектах одновременно.

Изменено пользователем Stalker_AleX333

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

Ссылка на комментарий

А без SDK никак нельзя справиться с этой проблемой?

Сам спросил, сам отвечаю. Если есть готовые ogg-файлы, то можно заюзать эту http://rusfolder.com/42223746 программу, чтобы подкорректировать ogg-комментарии, как требуется. И не надо качать кучу мегабайтов SDK. 

За наводку спасибо сталкеру karavan150

Изменено пользователем Kirgudu
Добавлено Kirgudu,

Исправил ссылку

Лучше умереть стоя, чем жить на коленях (Эрнесто Че Гевара).
Выживаю в NLC-7.
Кто не рискует - у того утром не болит голова от шампанского.

Ссылка на комментарий

@Micha_Pulemiot, Что-то ссылка у меня не дает прогу. Как она хоть называется?

 

, Поставь проверки и найдешь  во что оно упирается.

 

.......

 

@Charsi, Спасибо. Я в принципе таким не занимаюсь, но мало ли )

Изменено пользователем Nazgool
  • Спасибо 1
Ссылка на комментарий

, да, стоит использовать что-то вроде play_snd_from_obj.

@Nazgool, по ссылке SAVandT_1.1. В теме "Инструментарий для мододелов" таких программ уже целая пачка. Я пользуюсь этой.

Ссылка на комментарий

@Nazgool, оказывается в данной схеме нельзя использовать числовые приставки после on_timer. Значит придется разбивать на две схемы.

 

@Charsi, а как бы обойтись без указания айдишника? Или их можно перечислить подряд.

Изменено пользователем Stalker_AleX333

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

Ссылка на комментарий

Stalker_AleX333

Может быть. Хотя если верить мануалу

 

Переключение схем выполняется с помощью дополнительных условий схемы logic, которые прописываются в секции текущей активной схемы. Существуют следующие условия переключения:

  • on_actor_dist_le = <number>|<название_схемы> - если дистанция в метрах до игрока меньше либо равно number.
  • on_actor_dist_le_nvis = <number>|<название_схемы> - если дистанция в метрах до игрока меньше либо равно number без проверки на видимость.
  • on_actor_dist_ge = <number>|<название_схемы> - если дистанция в метрах до игрока больше number.
  • on_actor_dist_ge_nvis = <number>|<название_схемы> - если дистанция в метрах до игрока больше number без проверки на видимость.
  • on_signal = <имя_сигнала>|<название_схемы> - срабатывает по приходу сигнала имя_сигнала от текущей активной схемы.
  • on_info = <название_схемы> - срабатывает всегда.
  • on_timer = <number>|<название_схемы> - срабатывает через number миллисекунд после включения схемы.
  • .............

C любыми из вышеперечисленных параметров можно работать следующим образом:
on_info = {…} %…%
on_info2 = {…} %…%
on_info3 = {…} %…%


и так далее до посинения

 

Тогда переключайся в ph_idle. Там on_timer  должен работать. И on_timer2 и т.д. также.

Т.е. не [sr_idle@ventilators_timer] а [ph_idle@ventilators_timer]

Изменено пользователем Nazgool
Ссылка на комментарий
Звук будет проигрываться?

Будет, только вот от какого объекта ? Если ты вызовешь ph_sound со звуком работы вентиляторов из логики кнопки\переключателя - то и "гудеть" указанным звуком будет эта самая кнопка\переключатель. Раскидай логику по соответствующим объектам, кнопке - кнопковое, а вентиляторам - вентиляторное :) . Зачем заморачиваться с  play_snd_from_obj из логики кнопки ?

 

Насчет всей схемы, которую ты хочешь реализовать: таймер(как я понял - такой-же, как при выбросе на ЧАЭС?) вызывай из спейс_рестриктора, нажал на кнопку - проиграл звук щелчка кнопки(если я правильно понял, что это нужно), по окончанию -  выдал и\п, которая переключает логику вентиляторов на секцию с отыгрыванием звука и ею же можно остановить таймер в логике спейс_рестриктора. Как-то так...

 

P.S. и когда выкладываешь какие-то коды логики, неплохо бы указывать к каким объектам ты ее применяешь, а то тяжело понять что откуда...

Изменено пользователем UnLoaded
Ссылка на комментарий

Nazgool

http://rusfolder.com/42223746

Прошу исправить сообщение выше.

Изменено пользователем Micha_Pulemiot

Лучше умереть стоя, чем жить на коленях (Эрнесто Че Гевара).
Выживаю в NLC-7.
Кто не рискует - у того утром не болит голова от шампанского.

Ссылка на комментарий

@UnLoaded, именно так все и планировалось. И главная проблема даже не в том, как выдать тот или иной инфопоршень, а как зацикленно проигрывать звук на вентиляторах, учитывая то, что их много, а логика на всех одна. И, кстати, кнопка никак не "гудела" бы, у нее один айдишник, а у вентиляторов другие.

 

Короче, попробую-ка я замутить все это дело через рестрикторы "подвешанные" к вентиляторам. Разрабы так вроде делали.


upd. C рестрикторами тоже вышел облом. Звук не в какую не хочет проигрываться, хотя схема явно работает. Более того, я спокойно "подвесил" аналогичную на матюгальник - исполняющий роль сирены.

В общем, выложу все, что написал. Тут люди куда умнее меня в этих вопросах заглядывают, может увидят то, что я упустил:

 

Схема "биозагрязнения" (рестриктор):

 

 

[logic]
active = sr_idle@biohazard_start_timer

;Делаем небольшую задержку перед запуском всей схемы
[sr_idle@biohazard_start_timer]
on_timer = 4000 | sr_idle@biohazard_start 

;Проверяем включена ли сис. вентиляции, какой на ГГ надет костюм 
[sr_idle@biohazard_start]
on_actor_inside = {+lab_x7_ventilation_system_worked} nil, %=lab_x7_biohazard_check_actor_outfit% {-lab_x7_actor_have_bioprotection_outfit} sr_timer@no_bioprotection_outfit, %=lab_x7_biohazard_check_actor_outfit% {+lab_x7_actor_have_bioprotection_outfit} sr_timer@with_bioprotection_outfit

;Таймер - запускаемый при отключенной сис. вентиляции и отсутствии у ГГ костюма высокой степени биозащиты 
[sr_timer@no_bioprotection_outfit]
type = dec
start_value = 120000
on_value = 5 | %=play_snd(heart\2)% | 0 | nil %=aes_kill_actor%
on_actor_outside = sr_idle@biohazard_start
;Сис. вентиляции включена - отключаем таймер
on_info = {+lab_x7_ventilation_system_worked} nil
string = lab_x7_biohazard_attention

;Таймер - запускаемый при отключенной сис. вентиляции и наличии у ГГ костюма высокой степени биозащиты 
[sr_timer@with_bioprotection_outfit]
type = dec
start_value = 155000
on_value = 5 | %=play_snd(heart\2)% | 0 | nil %=aes_kill_actor%
on_actor_outside = sr_idle@biohazard_start
;Сис. вентиляции включена - отключаем таймер
on_info = {+lab_x7_ventilation_system_worked} nil
string = lab_x7_biohazard_attention 

 

 

 

Выключатель (система аварийной продувки):

 

 

[logic]
active = ph_button@ventilation_system_off

;Система вентиляции отключена
[ph_button@ventilation_system_off]
anim_blend = false
anim = button_false
tooltip = lab_x7_ventilation_system_switcher
; При юзании, отыгрываем звук кнопки, выдаем инфопоршень о включении системы вентиляции и отыгрывания звука на вентиляторах
on_press = ph_button@ventilation_system_on %=play_snd_from_obj(10015:ambient\switch_1) +lab_x7_ventilation_system_turned_on%

;Система вентиляции включена. Кнопка более не юзабельна
[ph_button@ventilation_system_on]
anim_blend = false
anim = button_true
;Запускаем внутренний таймер на 15 сек., (нужна задержка) по окончании выдаем инфопоршень о том, что сис. вентиляции работает
on_timer = 15000 | nil %+lab_x7_ventilation_system_worked% 

 

 

 

Собственно сами проблемные вентиляторы:

1. Схема смены анимации:

 

 

[logic]
active = ph_idle@ventilators_off

;Вентиляторы отключены. Отыгрывается анимация из all.spawnа. Ожидается запускающий инфопоршень
[ph_idle@ventilators_off]
on_info = {+lab_x7_ventilation_system_turned_on} ph_button@ventilators_on_anim

;Вентиляторы включены. Заменяем анимацию
[ph_button@ventilators_on_anim]
anim = work  

 

2. Схема для рестрикторов подвешанных к каждому вентилятору (по аналогии используеой разрабами в бункере под Радаром):

 

 

Спавн секция (образец):

[2370]

; cse_abstract properties
section_name = space_restrictor
name = labx7_ventilators_sound_space_restrictor
position = -99.5400009155273, -14.9499998092651, 73.620002746582
direction = 0, 0, 0
id = 65535
version = 118
script_version = 7
spawn_id = 8994

; cse_alife_object properties
game_vertex_id = 2870
level_vertex_id = 987
object_flags = 0xffffff3e
custom_data = <<END
[logic]
cfg = scripts\alex_mod\lab_x7_ventilators_sound.ltx
END

; cse_shape properties
shapes = 1
shape_0:type = sphere
shape_0:offset = 0,0,0
shape_0:radius = 1

; cse_alife_space_restrictor properties
restrictor_type = 3 

Логика:

[logic]
active = sr_idle@ventilators_off

;Вентиляторы отключены. Ожидается запускающий инфопоршень
[sr_idle@ventilators_off]
on_info = {+lab_x7_ventilation_system_turned_on} ph_sound@ventilators_on

;Устанавливаем зацикленный звук для вентиляторов
[ph_sound@ventilators_on]
snd = lab_x7_ventilators_run
looped = true

 

 

 

Матюгальник - сирена:

 

 

[logic]
active = ph_sound@biohazard_alarm_on

;Система вентиляции отключена. Сирена активна
[ph_sound@biohazard_alarm_on]
snd = lab_x7_biohazard_alarm
looped = true
on_info = {+lab_x7_ventilation_system_turned_on} ph_sound@biohazard_alarm_off

;Система вентиляции включена. Отключаем сирену
[ph_sound@biohazard_alarm_off]
snd = lab_x7_biohazard_alarm
looped = false
on_signal = sound_end| nil 

 

 

 

Все инфопоршни зареганы, звуки прописаны в sound_sheme.script.

Изменено пользователем Stalker_AleX333

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

Ссылка на комментарий

Т.е. в схеме матюгальника звук snd = lab_x7_biohazard_alarm проигрывается,

а в схеме вентилятора звук snd = lab_x7_ventilators_run нет?

А ты уверен, что со звуком вентиляторов всё нормально?

Подставь звук lab_x7_ventilators_run в схему матюгальника и посмотри - если не будет звучать,

то звук явно кривой. 

Ссылка на комментарий

@Nazgool, подсунул заведомо рабочий звук - из пяти рестрикторов с одинаковой логикой и настройками, он проигрывается только на одном. Свой звук, на всякий случай, снова прогнал через СДК - он вообще не работает. Ничего не понимаю.

Изменено пользователем Stalker_AleX333

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

Ссылка на комментарий

, не нужно мешать всё в кучу. Схемы с префиксом ph_ предназначены для физ.объектов, в префиксом sr_ для спейсрестрикторов.

Ты же сам написал, что объект под схемой ph_sound, отыгрывающий свою звуковую тему, должен быть уникальным.

Тебе при переключении каждого вентилятора на секцию ph_button@ventilators_on_anim нужно скриптом создавать свой звуковой объект и проигрывать его.

Ссылка на комментарий

@Charsi, что-то я не совсем понял, что значит "скриптом создавать свой звуковой объект", это как?

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

Ссылка на комментарий


function play_snd(actor, obj, p)

local snd_obj = xr_sound.get_safe_sound_object("путь к звуку")

snd_obj:play_at_pos(obj, obj:position(), sound_object.s3d)

end

 

Изменено пользователем Charsi
Ссылка на комментарий

@Charsi, так звук же наверное будет проигрываться единственный раз, а мне нужен бесконечный цикл. К тому же, игра вывалиавется, требуя объяснить ей переменную obj.

 

И касательно этой сроки: 

snd_obj:play_at_pos(obj, obj:position(), sound_object.s3d)

Я так понял она должна заполняться с указанием левел и гейм вертексов или без?

Изменено пользователем Stalker_AleX333

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

Ссылка на комментарий

В общем, выложу все, что написал

....

 

;Устанавливаем зацикленный звук для вентиляторов

[ph_sound@ventilators_on]

 измени ph на sr, ведь правильно Charsi подсказывает - схема должна соответствовать типу объекта, для space_restrictor'а - sr.

 

Чтоб не мутить с спейс_рестрикторами можно попробовать так:

в логике вентиляторов добавить

;Вентиляторы отключены. Отыгрывается анимация из all.spawnа. Ожидается запускающий инфопоршень
[ph_idle@ventilators_off]
on_info = {+lab_x7_ventilation_system_turned_on} ph_button@ventilators_on_anim %=play_vent_sound%

;Вентиляторы включены. Заменяем анимацию
[ph_button@ventilators_on_anim]
anim = work

Ф-цию play_vent_sound нужно добавить в gamedata\scripts\xr_effects.script, в ней использовать play_at_pos для озвучки работы вентиляторов.

 

Насчет play_at_pos(obj, obj:position(), sound_object.s3d):

 obj - это объект, от которого будет звук проигрываться, соответственно вентилятор

 obj:position() - от объекта получаем его позицию на уровне

 sound_object.s3d - флаги проигрывания звука. s3d - флаг для проигрывания звука от объекта. Для цикличного проигрывания нужен еще флаг looped(а вот как оба флага указать - спроси, я не в курсе).

И вообще - насчет play_at_pos читай в "Справочнике по ф-циям и классам" - тут.

Изменено пользователем UnLoaded
Ссылка на комментарий

@UnLoaded, на сколько я знаю, не существует схемы sr_sound. Во всяком случае, в общедоступных источниках и ресурсах самой игры подобного не встречал.

А по поводу "звукового скрипта", я уже погуглил, судя по всему, этим способом нельзя воспроизводить звук зациклено.

Изменено пользователем Stalker_AleX333

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

Ссылка на комментарий
для спейс_рестриктора не существует схемы sr_sound. Этот вариант не работает.  А по поводу "звукового скрипта", я уже погуглил, судя по всему, этим способом нельзя воспроизводить звук зациклено.

На вскидку: gamedata\config\scripts\agr\agr_factory_assault_trigger.ltx - логика спейс_рестриктора на фабрике Агропрома, где Крота вояки пресуют:

[logic]
active = {+agr_help_stalkers_start} nil, sr_sound

[sr_sound]
snd = ambient\gunfire_2
position = agr_factory_gunfire
on_actor_inside = %+agr_factory_assault_start% sr_idle@sos
.........

Отлично звучит...

 

Насчет play_at_pos с флагом looped  - врать не буду, сам не проверял, но верю описанию и изысканиям Shadows... (от себя - что-то мне подсказывает, что всё проигрывание звуков во всяко-разных схемах логики как раз и сделано на этих play_at_pos, где-то там в глубине реализации этих схем. И флаг  looped очень даже работает.)

 

Изменено пользователем UnLoaded
Ссылка на комментарий

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

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...