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

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


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

мне всю локацию рестриктором накрывать?

Не обязательно. Можно поставить небольшой рестриктор где угодно с логикой вроде

[logic]

active = sr_idle

[sr_idle]

on_info = {+infoportion} sr_timer

[sr_timer]

...

Рестрикторы все равно всегда в онлайне, при получении инфопоршня включится таймер. Само собой, будет работать только в пределах одной локации.

Изменено пользователем naxac
  • Спасибо 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

@naxac, @BoBaH_671, спасибо. Кстати, нашёл на каких-то полумёртвых сайтах и скриптовый таймер, не знаю, работает или нет.

 

 

"Таймер"
"Вариант без вывода на худ"
Код
local iTimer
function Start_Timer_5_minutes() --/ (пере)запуск таймера (из диалога)
iTimer = time_global() + 5*1000 --/ взводим таймер на 5cek
end

function Timer_N_minutes() --/ вызывается из ':update' сталкер-биндера
if iTimer and iTimer < time_global() then --/ проверка текущего значения
iTimer = nil --/ выключаем таймер
скрипт.функция() --/ выполняем действие
end
end
"Вариант с выводом на худ"
Код
local iTimer
local last
function start_timer_minutes_test(seconds)
if last~= nil then
iTimer = time_global()+last --/ взводим таймер на остаток времени last
else
iTimer = time_global() + 7*1000 --/ взводим таймер например 7 сек.
end
end

function timer_n_minutes_test() --/ вызывается из ':update' сталкер-биндера
if iTimer then
last=iTimer-time_global() -- присваиваем переменной остаток времени до конца работы таймера
if iTimer < time_global() then
iTimer = nil --/ выключаем таймер
last=nil
СКРИПТ.ФУНКЦИЯ--/ выполняем действие
end
end
end

-- выводим значение таймера в обратном отсчете на худ
function hud_static() --/ вызывается из ':update' сталкер-биндера
local hud = get_hud()
local st
if iTimer then
st = hud:GetCustomStatic("hud_timer")
if st==nil then
hud:AddCustomStatic("hud_timer", true)
st = hud:GetCustomStatic("hud_timer")
end
if last~=nil then
local hours = math.floor(last/3600000)
local minutes = math.floor(last/60000 - hours*60)
local seconds = math.floor(last/1000 - hours*3600 - minutes*60)
local text = string.format("%02d:%02d:%02d",hours,minutes,seconds) -- выводим время в формате 00:00:00
--local text=string.format("%.f",last/1000)
st:wnd():SetTextST(text)
end
else
if hud:GetCustomStatic("hud_timer")~=nil then
hud:RemoveCustomStatic("hud_timer")
end
end
end
---------------------------------------------

 

 

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

@dPlayer, от тебя здесь только утаивают тот факт, что время (и вообще все состояние) таймера не сохраняется. Иными словами при перезагрузке в рестрикторе, или выходе за пределы этого рестриктора у тебя этот таймер перезапустится (так как в обоих случаях предполагается что ты в него зайдешь вновь) и начнет отсчет сначала. Проведи эксперимент на той же ЧАЭС, когда таймер начнется подожди минуты две, и сохранись/загрузись, поймешь о чем я.

 

По таймерам, возьми готовый модуль таймеров, точно знаю, что у @Malandrinus'a есть в коробке худовый таймер. sr_timer сам по себе чудесен, в том смысле, что его кастомизация не позволяет настроить сохранение, где-то оно действительно не нужно (х-16, и то я бы там сделал речардж пси-каски, но если мы уже в рестрикторе бегаем, то конечно сохранять нужно), а где-то без него никак (выброс на ЧАЭС).

  • Спасибо 1
  • Согласен 1
Ссылка на комментарий

@dPlayer, >>Таймеры<<

 

Менеджер универсальных таймеров (SHoC:6/7(118),CS:8(124),SCoP:12(128))
m_timers.script
==============================================================================================
Модуль (скрипт) реализует в игре удобный интерфейс для работы с таймерами различного назначения (реального и игрового времени).
Для работы требуются скрипты "Расширения Lua"(lua_extension) и "Общие полезные функции" (lua_helper).
Для хранения в сэйвах игры табличных данных запущенных таймеров может использоваться модуль "Универсальное хранилище" (se_stor),
в противном случае данные сохраняются в pstor актора (что может вызвать переполнение при интенсивном использовании таймеров).

--/---------------------------------------------------------------------
Подключение:
1. Скопировать в папку скриптов игры скрипт: m_timers.script;
2. Добавить в биндер актора (см. bind_stalker.script) вызовы событий "сохранение игры", "загрузки сохранения" и запуска обновлений модуля;
3. Добавить в _g.script инициализацию дополнительного функционала (lua_extension и lua_helper).
4. (настоятельно рекомендуется) Подключить модуль "Универсальное хранилище" (se_stor).

Примечание:
В комплекте файл '_g_ADD.script является строками, которые требуется добавить в исходный _g.script.
Файл bind_stalker.script от оригинальной версии игры SHoC v.1.0006 дан в качестве рабочего примера.
В файл bind_stalker.script добавляются строки (в три разных метода биндера) отмеченные знаком --/#+# и имеющие подстроки 'm_timers.'

Использование:
1. Запрос существования (запущенного) таймера (по имени):
timer_exists("my_timer_name") --/ boolean
2. Получение объекта таймера (по имени):
get_timer("my_timer_name") --/ object from class 'RealTimer|GameTimer'
3. Получение текущего значения таймера:
get_timer("my_timer_name"):get_time_rest()
4. Удаление запущенного таймера:
get_timer("my_timer_name"):remove()
5. Таймер на игровом экране (HUD-Timer) допускается в единственном экземпляре:
get_hud_timer() --/ object 'HUD-Timer' from class 'RealTimer'
6. quick-таймеры не имеют имен и недоступны извне.
7. Имена таймерам выдаются автоматически и эксклюзивны.
При необходимости имя может быть задано при запуске таймера (см.ниже).


8. Запуск таймера производится одной из соответствующих функций start_XXX_timer:
start_real_timer - таймер реального времени;
start_game_timer - таймер игрового времени;
start_quick_timer - таймет реального или игрового времени без возможности сохранения;
start_hud_timer - таймер реального времени с HUD-дом на игровом экране;
start_multi_timer - цикличный таймер.

- 1-й аргумент - время в секундах;
- 2-й аргумент - функция, которая будет вызвана таймером по окончании времени;
- 3-й аргумент - параметры передаваемые таймеру;
- 4-й аргумент - (опционально):
-- для 'real' и 'game' таймеров - имя таймера;
-- для 'hud' - тип hud'а (с текстурой или только текст);
-- для 'multi' - тип времени (реальное или игровое).
Имя таймера (кроме 'hud') может быть задано так (заменяется "выданное имя"):
start_real_timer(0.5, "my_file.my_func"):set_name("my_timer_name") --/ 0.5 real-seconds + (re)set name

Функция может быть задана прямым указанием или строкою или таблицей.
При отсутствии указанной функции и наличии 3-го аргумента (параметров) будет вызван внутренний обработчик.
Внутренний обработчик позволяет при соответствующих именах параметров выполнять:
а) выдача инфопоршня или нескольких:
start_game_timer(3*60, nil, {info_id = "my_infoportion"}) --/ 3 game-minutes
б) Вывод сообщения на экран (через news_manager):
start_real_timer(5*60, nil, {tip = {"Text tip_RT"}})
в) Вывод строки в лог:
start_quick_timer(8, nil, {log = "test QT8"})
г) Вывод звука:
start_quick_timer(8, nil, {snd = "device\\pda\\pda_sos"})
и др.

Примеры использования:
start_real_timer(6, "my_file.my_func") --/ 6 real-seconds
start_real_timer(5*60, nil, {tip = {"st_tip", "Text test_RT"}}, "RT_test") --/ 5 real-minutes + set name
start_real_timer(0.5, "my_file.my_func"):set_name("my_timer_name") --/ 0.5 real-seconds + (re)set name
start_game_timer(3*60, nil, {info_id = "my_infoportion"}) --/ 3 game-minutes
start_hud_timer (10*60, nil, {log = "test_HT"}) --/ 10 real-minutes
start_hud_timer (45, nil, {log = "caption_HT"}, "blowout") --/ 45 real-seconds + text caption
start_hud_timer (45, nil, {log = "only_text_HT"}, false) --/ 45 real-seconds + only text-time
start_quick_timer(4, my_file.my_func) --/ 4 real-seconds + call function
start_quick_timer(8, nil, {info_id = "my_infoportion"}, log = "tip QT8"}) --/ 8 real-minutes + log
start_multi_timer(2*60, nil, {log = "tip_MR"}) --/ 120 real-seconds + log + cyclical
start_multi_timer(3*60, nil, {tip = {nil, "tip_MG"}, log = "tip_MG"},true) --/ 120 game-minutes + tip + log + cyclical
--/ для объекта таймера доступны:
timer:id() --/ чтение(получение) идентификатора запущенного таймера (не путать с игровыми идентификаторами объектов!)
timer:name() --/ чтение(получение) имени запущенного таймера
timer:set_name(timer_name) --/ установка/изменение имени таймера
timer:restart(time_sec, action, properties, timer_name) --/ перезапуск работающего таймера (аргументы аналогичгы запуску)
timer:get_time_rest() --/ получение оставшегося времени работающего таймера (real mseconds or game seconds)
timer:get_time_end() --/ получение времени (число mseconds), когда таймер сработает
timer:get_time_end(true) --/ получение времени (строка), когда таймер сработает
timer:get_property(property) --/ чтение значения параметра заданного таймеру
timer:set_property(property,value) --/ установка/замена параметра заданного таймеру
timer:remove() --/ удаление таймера

--/---------------------------------------------------------------------
Artos (22.09.2013)

  • Спасибо 1
  • Согласен 1
  • Полезно 1
Ссылка на комментарий

Привет, есть вопрос касательно Умного Мародера 1.5...

В игре при обыскивании трупа появляется костюм, но в идеальном состоянии.


Как правильно сделать кондишн, чтобы состояние было рандомным при выпадении?

 

Добавлено Kirgudu,

Перенёс из "уроков по модостроению"

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

@Kirgudu, нашел почти ту же функию в funcs.scr, но она почему то не работает

local a

if select_string=="otf" then
a = level.object_by_id(tonumber(params_string))
a:set_condition((math.random(25)+40)/100)
end

 

Как ее включить?

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

@Badmodst74, вопрос из разряда "У меня автомобиль не заводится. Как завести?" с количеством потенциальных ответов, приближающимся к бесконечности; всегда такие нравились. Но телепаты традиционно в отпуске.

Судя по знакомому коду, эта функция из мода типа AMK или OGSM и предназначена для срабатывания по истечении таймера определённого типа ("otf"). Таймер запускал? Id конкретного предмета ему передал? Никому, кроме тебя, сие не известно.

А проще всего будет поискать в модулях своей сборки места использования метода set_condition(...) (легко делается разными средствами, например TC) и там, где оно явно связано с установкой состояния брони, заменить расчёт аргумента на простой math.random(), как предложено в примере выше. Сложности в этом нет никакой, вполне можно справиться самостоятельно.

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

В ТЧ ведь можно на клавишу tab повешать любое действие, хоть скрипт, не выходя в главное меню? Как это сделать, где-то тут ведь обсуждалось, не могу найти(

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

@Kober(BRUC), спасибо, хотя как раз клавишу tab автор пропустил)

@Kober(BRUC), да в принципе, это то. что мне нужно, но вариант от Руси для моих ковыряшек подходит больше)

moderator_global_small.png HellRatz, спасибо.

Изменено пользователем dPlayer
Ссылка на комментарий
@dPlayer,т.е. это не то что вам нужно? Если так, то пользователь с аватаркой Ёжика в Тумане выкладывал что-то про клавишу Tab. Было это где-то в 2012 году. Это усе что могу подсказать.
  • Спасибо 1
Ссылка на комментарий

Что-то не могу сообразить, как отпустить мужика из логики в свободное плавание? И если у него в кастом_дате будет написан какой-либо смарт, он туда попрётся?

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

Всем привет. Нужна помощь. Хотел перенести из АА2 не просто текстуры деревьев, а именно расположение их. Какой файл в папке levels отвечает за это? А то в обычном Сталкере пустовато как то на локации :D  

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

Хотел сделать текстуры загрузки intro на полный экран, а там формат seq и просто dds формат игра не воспринимает выкидывает с ошибкой. Правка движка стоит. Что можно сделать? Я как понял что в оригинале используется  dds формат, а в некоторых модах seq. Где можно поправить использование формата?

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

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

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

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

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

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

Войти

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

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

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