-
Публикаций
468 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Sikorskyi
-
-
Спойлерlocal weather_manager = nil
--18.02.2008 - added dynamic weatherfunction ConsoleExecute(s)
get_console():execute(s)
endfunction WeatherConsolePresetSet(ini_weather)
log("Load CGIM console commands for weather")
local console_section = "weather_console_settings"
if ini_weather:section_exist(console_section) then
local rec_name, value = "", ""
local lines = ini_weather:line_count(console_section)
for current_line = 0, lines - 1 do
result, rec_name, value = ini_weather:r_line(console_section, current_line, "", "")
ConsoleExecute(string.format("%s %s", rec_name, value))
end
end
endclass "WeatherManager"
function WeatherManager:__init()
self.wfx_time = 0
self.weather_fx = nil
self.update_time = 0
self.update_level = ""
self.forced_weather_change_on_time_change = false
self.last_hour = 0
self.state={}
self.graphs={}
self.graphs_ini = ini_file("environment\\dynamic_weather_graphs.ltx")if not self.graphs_ini then
abort("error when open weather_dynamic_graphs.ltx")
end
WeatherConsolePresetSet(self.graphs_ini)
end-- Вызывается после load(). Состояние погоды уже загружено.
function WeatherManager:reset()
printf("WeatherManager:WeatherManager():Reset()")
-- Загрузить кондлист с погодой.
local ini = ini_file("game.ltx")
local weather = utils.cfg_get_string(ini, level.name(), "weathers", db.actor, false, "", "[default]")
local postprocess = utils.cfg_get_string(ini, level.name(), "postprocess", db.actor, false, "")
if postprocess ~= nil then
printf("LEVEL POSTPROCESS: level: [%s], postprocess: [%s]", level.name(), postprocess)
level.add_pp_effector(postprocess, 999, true)
else
printf("LEVEL POSTPROCESS: level: [%s], postprocess: [none]", level.name())
level.remove_pp_effector(999)
end
if weather == "[default]" then
-- сетим дефолтовую погоду
self.weather_list = xr_logic.parse_condlist(db.actor, level.name(), "weather", "[default]")
else
self.weather_list = xr_logic.parse_condlist(db.actor, level.name(), "weather", weather)
end
self:select_weather(true)
self.last_hour=level.get_time_hours()
end
function WeatherManager:forced_weather_change()
self.forced_weather_change_on_time_change = true
end
-- Обновляем погоду раз в час.
function WeatherManager:update()
if(level.is_wfx_playing()) then
self.weather_fx = level.get_weather()
else
self.weather_fx = nil
end
--if not benchmark.weather then
if self.last_hour~=level.get_time_hours() then
self.last_hour=level.get_time_hours()
for lvl,st in pairs(self.state) do
st.current_state=st.next_state
st.next_state=get_next_state(st.graph,st.current_state)
end
-- Устанавливаем погоду на текущем уровне
self:select_weather(false)
end
--end
endfunction WeatherManager:select_weather(now)
local weather = xr_logic.pick_section_from_condlist(db.actor, db.actor, self.weather_list)
local graph=self:get_graph_by_name(weather)
local weather_section_name=""
-- Проверим, совпадает ли текущий граф уровня с полученным по кондлисту...
if graph==nil then
-- Переходим на статику
self.state[weather]=nil
weather_section_name=weather
else
-- Новая погода - динамическая. Проверим, нужно ли менять/устанавливать граф
if self.state[weather]==nil or self.state[weather].graph_name~=weather then
-- Граф изменился. Переходим на него.
self.state[weather]=self:init_by_graph(graph,weather)
-- else
-- now = false
end
-- Получаем название секции по текущему состоянию.
local st=self.state[weather]
--weather_section_name="dw_"..st.current_state.."_"..st.next_state.."_"..level.get_time_hours()
weather_section_name="default_"..st.current_state
end
if now then
self.last_hour=level.get_time_hours()
end
if self.forced_weather_change_on_time_change then
now = true
self.forced_weather_change_on_time_change = false
end
if not(self.weather_fx) then
level.set_weather(weather_section_name,now)
else
level.start_weather_fx_from_time(self.weather_fx, self.wfx_time)
end
printf("WEATHER: '%s' now '%s'", weather_section_name, tostring(now))
-- if xrs_news then
-- xrs_news.news_call(1,1,nil,nil,weather_section_name,nil)
-- end
end-- Возвращает начальное состояние погоды.
function WeatherManager:init_by_graph(graph,graph_name)
local cur_state=get_next_state(graph,"")
local next_state=get_next_state(graph,cur_state)
return {current_state=cur_state,next_state=next_state,graph_name=graph_name,graph=graph}
end-- Возвращает одно из следующих состояний графа, согласно прописанным вероятностям.
function get_next_state(graph,state)
local sum=0
for st,prob in pairs(graph) do
--if state==st then prob=prob*2 end
sum=sum+prob
end
local rnd=math.random()*sum
local next_state
for st,prob in pairs(graph) do
--if state==st then prob=prob*2 end
next_state=st
rnd=rnd-prob
if (rnd<=0) then
break
end
end
return next_state
end-- Устанавливаем состояние менеджера, распарсивая строку состояния
function WeatherManager:set_state_as_string(ss)
self.state={}
for lvlstring in string.gmatch(ss,"[^;]+") do
local i,j,grname,curs,nexs=string.find(lvlstring,"([^=]+)=([^,]+),([^,]+)")
if not grname then
abort("WeatherManager:set_state_as_string: malformed state string. "..ss)
end
--local lvl_name=self:unpack_level(lvl)
local current_state=self:unpack_state(curs)
local next_state=self:unpack_state(nexs)
local graph_name=self:unpack_graph_name(grname)
local graph=self:get_graph_by_name(graph_name)
if graph==nil then
-- Старая сохранёнка? Будем считать что на этом уровне - статическая погода
else
self.state[graph_name]={current_state=current_state,next_state=next_state,graph_name=graph_name,graph=graph}
end
end
end-- Преобразуем текущее состояние менеджера в строку
function WeatherManager:get_state_as_string()
local lvlstrings={}
for lvl_name,st in pairs(self.state) do
--local lvl=self:pack_level(lvl_name)
local curs=self:pack_state(st.current_state)
local nexs=self:pack_state(st.next_state)
local grn=self:pack_graph_name(st.graph_name)
table.insert(lvlstrings,grn.."="..curs..","..nexs)
end
return table.concat(lvlstrings,";")
end
local --выпарсиваем секцию инифайла в табличку
function parse_ini_section_to_array(ini,section)
local tmp=nil
if ini and ini:section_exist(section) then
tmp={}
local result, id, value = nil, nil, nil
for a=0,ini:line_count(section)-1 do
result, id, value = ini:r_line(section,a,"","")
if id~=nil and string.trim(id)~="" and string.trim(id)~=nil then
tmp[string.trim(id)]=string.trim(value)
end
end
end
return tmp
end
-- Получить граф (таблицу переходов состояний погоды) по его названию и названию игрового уровня
function WeatherManager:get_graph_by_name(name)
if not self.graphs[name] then
self.graphs[name] = parse_ini_section_to_array(self.graphs_ini,name)
end
return self.graphs[name]
end
-- Запаковать название вершины графа
function WeatherManager:pack_state(state)
-- Пока паковать не будем.
return state
end-- Распаковать название вершины графа
function WeatherManager:unpack_state(st)
-- Пока паковать не будем
return st
end-- Запаковать название графа переходов погоды
function WeatherManager:pack_graph_name(graph_name)
-- Пока паковать не будем.
return graph_name
end-- Распаковать название графа переходов погоды
function WeatherManager:unpack_graph_name(grn)
-- Пока паковать не будем
return grn
endfunction WeatherManager:load(F)
--set_save_marker(F, "load", false, "WeatherManager")
printf("WEATHER LOAD")
--self.update_level = F:r_stringZ();
local state_string = F:r_stringZ();
printf("str = "..state_string)
if state_string == "" then
printf("str = empty string")
end
self:set_state_as_string(state_string)
self.update_time = F:r_u32();
local str = F:r_stringZ()
if(str~="nil") then
self.weather_fx = str
self.wfx_time = F:r_float()
end
--set_save_marker(F, "load", true, "WeatherManager")
endfunction WeatherManager:save(F)
--set_save_marker(F, "save", false, "WeatherManager")
printf("WEATHER SAVE")
--F:w_stringZ(self.update_level);
printf("str = "..tostring(self:get_state_as_string()))
if self:get_state_as_string() == "" then
printf("str = empty string")
end
F:w_stringZ(self:get_state_as_string())
F:w_u32(self.update_time)
F:w_stringZ(tostring(self.weather_fx))
if(self.weather_fx) then
F:w_float(level.get_wfx_time())
end
--set_save_marker(F, "save", true, "WeatherManager")
endfunction get_weather_manager ()
if weather_manager == nil then
weather_manager = WeatherManager()
end
return weather_manager
end
Как дополнить этот скрипт, что бы в консоль показывалось название текущей погоды?
-
-
А давайте Megadead mod адаптируем? https://www.playground.ru/stalker_shadow_of_chernobyl/file/s_t_a_l_k_e_r_megadeath_mod-867702
Дополнено 0 минут спустя----------------------------------------------------------------------
Я пошутил
- 1
-
11 минут назад, Pastalker56 сказал:Не нравится, не буду. Мне меньше проблем.
И хорошо. Уговаривать не будем.
- 1
-
warezeater поторопился давать тебе совет. У lvg_brest нет этих настроек. Вернее они есть (не все), но разнесены по разным файлам. попробуй настраивать спавн в se_respawn.
- 1
-
-
26 минут назад, warezeater сказал:этом моде
В каком "этом"? Во что именно ты играешь? Здесь же разные версии.
-
32 минуты назад, Sikorskyi сказал:Надо все менять.
Я имел в виду мне надо было все менять.
- 1
-
25 минут назад, Жора Цементов сказал:залил
Со старым level_weathers работает.
Дополнено 6 минуты спустяНадо все менять. А не только скрипт.
-
8 минут назад, Жора Цементов сказал:game_maps_single
Пробовал по разному. И без него тоже.
-
14 минут назад, Жора Цементов сказал:Новая игра тоже?
Новая игра не помогает.
-
2 часа назад, pauk_200 сказал:[04.11.22 17:46:36.827] ! Can't find texture 'sky\preblowout\pre_blowout_1'
[04.11.22 17:46:37.037] ! Can't find texture 'sky\sky_4_cube'
[04.11.22 17:46:37.037] ! Can't find texture 'sky\sky_4_cube#small'
[04.11.22 17:46:37.421] ! Can't find texture 'sky\preblowout\pre_blowout_0'Тоже вылетает с новым скриптом level_weathers и тоже не хватает текстур.
- 1
-
-
В 02.11.2022 в 15:08, Калеченный сказал:Ребят, а у кого-нибудь есть скачанный "фикс для оригинального патча 3.5 от 300zx"?
А то ссылка мёртвая.Держи https://disk.yandex.ru/d/j1L8lYLZ9pgehA
Дополнено 56 минуты спустяЭто четвертая версия фикса от 300zx.
- 2
-
9 часов назад, wasd сказал:Почему бы не добавить улучшенный оружейный пак в этот мод?
Играй в это
Дополнено 9 минуты спустя7 часов назад, DarkFace сказал:Петруха теперь уходит под мост, если Шустрого спасти соло
Хорошая штука
Дополнено 44 минуты спустя- 1
-
3 часа назад, Gendel сказал:Если после спасения выбрать диалог соответствующий, только один раз
Вот я и спрашиваю, есть ли здесь этот диалог?
То, что он есть в оригинале, это не ответ. Потому что у меня подозрение, что его в ОГСМ нет.
Дополнено 14 минуты спустя21 час назад, DarkFace сказал:и как оно? В ЗП не играю, поэтому особо не вкурсе модов на данную часть игры, но выглядит неплохо
Динамическая погода GCIM 2
- 1
- 1
-
Мне нравится. Ночи, правда, слишком светлые..
-
reute70 тебе удавалось в ОГСМ получить у Юрика наводку на тайник?
Дополнено 23 минуты спустяВ 29.10.2022 в 18:21, DarkFace сказал:Кстати, неплохо было бы заменить Сидора на ЧНовского. ТЧшный несколько... "устарел"
Этого использовать. Вместе с новичками и др..
-
В 18.10.2022 в 16:57, Жора Цементов сказал:Доступна адаптация CGIM 2 для OGSR Engine!
Отсутствует погода indoor
-
В АМК.script добавить эту строку:
-- 1. Настало время выброса.
if select_string=="bl1" then
if ogsm_options.t_surge == 0 or ogsm_surge.bad_loc() then
g_start_timer("bl1",0,2,0)
else
if sleep_manager.is_sleep_active() then sleep_manager.stopper() end
start_timer("bl2",1)
news_main_new.vubros_msg() --Новость о выбросе
end
endВ новостях появятся реальные переговоры о выбросе.
- 1
-
1 час назад, DarkFace сказал:+погода
Я адаптировал GCIM 2. На выбросах не вылетает. Тестировать хорошенько надо. Я всего лишь на кордоне time_factor 100 включал, несколько месяцев перематывал. Вроде бы нормально.
- 1
-
Пистолет зачетный 👌
- 1
-
-
1 час назад, reute70 сказал:мышки агрессивные или просто тыкаются в ноги
Агрессивные.
[SoC] Модострой: вопросница
в Уроки, вопросы и советы по созданию модов
Опубликовано
Знаю об этом.
-- enable/disable printing debug messages to console
local debug = true
Не заработало.