[SoC] Ковыряемся в файлах - Страница 519 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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


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

 НПС стрелял по другому НПС, или по предмету с заданным стори_айди?

Предмет можно представить как БТР?В старом сюжете кстати НПС палит по БТР.

И еще, если делать через логику врага, то включается боевка которая немного портит кат-сцену.

П.С я как то на стадии изучения логики забавлялся, изменил цель у БТР на блокпосте на Кордоне с actor на enemy.  Потом заставил нпс стрелять по нему(в качестве цели можно использовать не только ГГ и стори айди, но и работу в гулаге или просто имя).После попадания, БТР благополучно расстрелял непися.

Изменено пользователем gruber
  • Нравится 1

@gruber, про предмет не дочитал, извиняюсь :).  В общем, можно и твоим способом. 

Помогите пожалуйста. Почему-то вылетает игра когда я подбегаю к Блокпосту в Армейских Складах, где Наёмники живут так сказать. Вот лог:


Expression : fatal error

Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ...l.k.e.r. - Тень Зоны\gamedata\scripts\xr_kamp.script:672: attempt to index field '?' (a nil value)

Воу воу ребят полегче :o
Я в скриптах не шарю почти, я просто спросил есть ли такая функция и как она выглядит...
По образу и подобию напиши свою функцию...

По образу и подобию напиши свою функцию...

 А так пойдет?

function set_actor_enemy_for (sid)
    local npc = level_object_by_sid (sid)
    local npc2 = level_object_by_sid (sid)
    if npc == nil or npc:alive () == false then
       return 
    end
    if npc2 == nil or npc2:alive () == false then
       return
    end
    npc:set_relation (game_object.enemy, npc2)
end

 

 


И во что ты играешь конкретно?

 

 


Arguments : LUA error: ...l.k.e.r. - Тень Зоны\


Этот мод я не нашел в инете разве что на ЗП делают, в ВК есть группа, но опять же она давно не обновлялась, залей файл со своей папки:
S.t.a.l.k.e.r. - Тень Зоны\gamedata\scripts\xr_kamp.script

На какой нибудь файлообменник...

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

Приветствую.
Надо сделать так, чтобы при входе в рестриктор, игрока контузило. Как вызвать постэффект и "звон в ушах" я знаю, а вот как заглушить все остальные звуки - не знаю. В этой теме уже задавали подобный вопрос, но там заглушался только один конкретный звук.

Пытаюсь что-либо понять в sr_psy_antenna.script, но моих познаний в скриптинге не хватает.

Так вот, как заглушить все звуки (аля пси-антенна или контузия от взрыва)?

@Wo1fRam, в  sr_psy_antenna.script есть функция PsyAntenna:update_sound()

Которая как раз и заглушает все звуки.

А по вашей ситуации - используйте в рестрикторе схему sr_psy_antenna:

[sr_psy_antenna]
eff_intensity = 50
hit_intensity = 35
phantom_prob = 100
postprocess = psy_antenna.ppe
mute_sound_threshold = 15

Подставляете свой постпроцесс, ставите на ноль интенсивность излучения/спавн фантомов и самое интересное - параметр mute_sound_threshold, который и занижает все звуки. Поставите ноль - будет ГГ глухой.

volazar, То-то и оно, что такая схема мне не совсем подходит. Я пытаюсь сделать некоторое подобие аномалии "Глухарь" из книг, поэтому надо чтобы ГГ был глухим не в пределах рестриктора, а ещё некоторое время.

@Wo1fRam,  Так а что мешает переходить на другую схему при выходе из рестриктора? Повесить таймер на нужное время и вырубать.

Входим в рестриктор, активируется глухота, выходим, запускается вторая схема (например глушащая только звук, без эффектов). И секунд через 5 отключается.

volazar, Так если из рестриктора выйти, то сразу всё нормально будет. А мне надо, чтобы ГГ забежал в рестриктор, получил контузию и бегал потом глухой ещё минут 40. Тут разве подойдёт схема sr_psy_antenna?

@Wo1fRam, На входе в рестриктор проверяем что актор внутри рестриктора (on_actor_inside), затем переходим на схему.

На выходе проверяем что актор вышел из зоны (on_actor_outside), переходим на новую схему и запускаем таймер (on_timer), по истечении которого схему отрубаем. Помогут 2 поршня.

Яркий пример - двери бункера на Янтаре. Входим в рестриктор - дается поршень, дверь открывается. Выходим из рестриктора - поршень забирается, дверь закрывается.

Единственный минус - таймер сбросится при сейв/лоаде.

Возможно кто нибудь из знающих предложит другой вариант...

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

Всем привет. У меня несколько вопросов.

1.) Каким образом можно скриптово (например, через диалог) сменить визуал непися?

 

2.) Я слышал, в каком-то из модов осуществлена возможность стрельбы орудиями БТР... В каком это моде и как это сделано? Я предполагаю, нужно покопать скрипты логики ph_car и посмотреть, каким образом сделана простая стрельба БТР. А затем это дело как-то прибиндить :)

 

3.) Хотел сначала в моделирование написать... Дело такое - (да, знаю, бред, но это пока =), хотел пулемет сунуть на крышу не только БТР, пока тестировал на камазе... В будущем, сделаю, например, "Малыша", а там нужен пулемет... Так я попробовал. Три кости добавил, названия верные, иерархия тоже. В СДК настроил верно. В игре безлоговый вылет. О подобном читал на сталкерине:

 

Называть хелперы можно в процессе создания или после установки всех хелперов. Называть можно как Вам самим будет удобно и понятно, НО хелперы rootfront_axleback_axle не советую. Это именно те хелперы которые нельзя определить в конфига (*.ltx) и может случиться так что игра будет вылетать с нулевым логом.

 

Однако это моей проблемы не решает. Я никаких костей не трогал абсолютно, только создал три новых, соблюдая иерархию. Сначала прописал, как в инклуде БТРа:

[mounted_weapon_definition]
fire_bone       = mashine_gun_fire_point ; fire bone name
rotate_x_bone   = mashine_gun            ; rotate X-axis(pitch) bone name
rotate_y_bone   = mashine_gun_tower      ; rotate Y-axis(head)  bone name
min_gun_speed   = 0.5
max_gun_speed   = 2.5
wpn_section     = stationary_mgun

Безлоговый вылет... Убрал это - тоже самое. Что это и как с этим бороться? Дело, как я понимаю, не в модели, а в текстовой части, потому писал сюда.

 

4.) Можно ли заставить непися сесть в машину и управлять ей? Или хотя бы заставить его сесть в нее, и управлять машиной через логику?

 

Заранее всем спасибо.

-----

 

 

заглушить все остальные звуки

 

В ЛВ_ТоДе в начале игры эффект сильного головокружения , затемнения экрана и тяжелого дыхания ГГ. Кроме дыхания ГГ ничего не слышно. Посмотри, как это сделано там, и вместо эффекта головокружения и тяжелого дыхания вызови свой постэффект и звон в ушах. Как я думаю, эффект будет длиться не все то время, что ГГ находится в нужном тебе рестрикторе, а время самой анимки.

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

stalkerok007, Стрельба БТР была и в оригинале. Глянь тут. Точно так же можно реализовать и движение транспорта. Только насчёт "катания НПС на них" не знаю. Или речь идёт о ЗП?
За наводку спасибо, посмотрю. Но, кажись, там тоже не совсем то будет.

@Wo1fRam, да знаю я =), логику всю почти наизусть. Я имел ввиду, чтобы БТР не сам стрелял, а ГГ (игрок) стрелял, сидя в нем. То есть, чтобы я мог сесть в БТР, ездить и стрелять. Пока игрок стрелять не может, только БТР по логике. Про то, чтобы БТР ездил, и так ясно.

Еще один вопрос:

5.) Есть ли у вертолетов подобие схемы remark для неписей? Или же... В общем, мне надо, чтобы двигаясь по точкам пути он отыгрывал определенную анимку, либо, сидя на ремарке, отыграл определенную анимку и дальше полетел обычной секцией heli_move.

@Viнt@rь,ну раз в самой логике такой схемы нет, то это нужно обходить скриптами?.. Я как-то так думал, задавая вопрос. Прошу прощения, если не прав. 

Только одну проблему со звуком решил, как появилась другая: как остановить зацикленный звук? Вызываю я его вот так (кусок функции):

local snd_idle = sound_object("affects\\tinnitus3a")
snd_idle:play_no_feedback(db.actor,sound_object.s2d+sound_object.looped, 0, vector():set(0, 0, 0), 18.0)

Пытаюсь остановить так:

if snd_idle:playing() then
snd_idle:stop()
end

function gluhar()
   local active_slot = db.actor:active_slot()
    if active_slot==2 or active_slot==3 then
     db.actor:drop_item(db.actor:active_item())
    end
   level.set_snd_volume(0.04)
   level.add_pp_effector("gluhar_start.ppe",777,true)
   level.add_cam_effector("camera_effects\\fusker.anm")
   local snd_start = sound_object("anomaly\\gluhar_start")
   local snd_idle = sound_object("affects\\tinnitus3a")
   snd_start:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 18.0)
   local time = time_global()
   local timer_start = time+(14)*1000
   local timer_idle = time+(120)*1000
     level.add_call(
   function()
    if time_global() > timer_start then return true end
    end,
   function()
   level.remove_pp_effector(777)
   level.add_pp_effector("gluhar_run.ppe",778,true)
   snd_idle:play_no_feedback(db.actor,sound_object.s2d+sound_object.looped, 0, vector():set(0, 0, 0), 18.0)
   end)
               level.add_call(
      function ()
         if time_global() > timer_idle then return true end
         end,
      function ()
   level.set_snd_volume(1)
   level.remove_pp_effector(778)
   if snd_idle:playing() then
   snd_idle:stop()
      end
   end)
end

Поясняю: ГГ заходит в рестриктор, получает контузию (роняет пушку, анимация камеры, постэффект, звук). Потом, через 14 секунд (длина звука) постэффект вырубается и врубается другой, играется зацикленный звук, включается таймер 120 секунд (у ГГ отходняк после контузии - планирую сделать рандомным). Когда заканчивается таймер, постэффект убирается, громкость окружающей среды восстанавливается, но зацикленный звук всё ещё играет.

 

 

 

Функция вызывается из логики рестриктора, поэтому прописана в xr_effects.script

Пробовал использовать для выключения только snd_idle:stop() - не помогает.
Если что не так - не ругайтесь. В скриптах не шибко силён, всё делал по образцу и "методом научного тыка".

@Wo1fRam, Я проигрывал так:

local snd_obj = xr_sound.get_safe_sound_object([[characters_voice\vse_vyshe_vyshe]])
snd_obj:play_no_feedback(db.actor, sound_object.s2d+sound_object.looped, 0, vector(), 1.0)

И остановка так:

local snd_obj = xr_sound.get_safe_sound_object([[characters_voice\vse_vyshe_vyshe]])
snd_obj:stop()

Все прекрасно работает.

 

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

Wo1fRam, метод запуска звука play_no_feedback не даёт обратной связи (что явно следует из его названия, кстати). Ты просто дал команду проиграть звук и далее этот процесс не может быть подвержен твоим запросам (например, попытке проверить статус проигрывания).
Чтобы иметь возможность обращаться к запущенному процессу, следует использовать методы play или play_at_pos, примерно так:

local snd_obj = sound_object("affects\\tinnitus3a")
snd_obj:play(db.actor, 0, sound_object.s2d)
...
if snd_obj:playing() then
  snd_obj:stop()
end

 

 

Изменено пользователем Kirgudu
  • Нравится 1

Kirgudu, ну так я ж и говорю - в скриптах плохо разбираюсь :) 

Я правильно понял, в твоём примере 0 - это громкость? Или как громкость настроить?
Да, забыл добавить - ЗП.

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

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

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

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

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

Войти

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

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

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