Это популярное сообщение. The ReapeR 72 Опубликовано 27 Августа 2014 Это популярное сообщение. Поделиться Опубликовано 27 Августа 2014 (изменено) В данной теме планируется предоставление комплекса статей по созданию, редактированию и корректированию упомянутого в названии темы.Знающих, о чем идет речь - милости просим. Теория: Общая структура погоды. Причастные файлы. Внутриигровая структура погоды и освещения. Смена циклов. Классификация существующих погодных схем. Сравнение. Работа с файлами конфигураций: Перечень и классификация причастных файлов. game_maps_single.ltx, environment.ltx. Конфигурационные файлы динамических схем и сторонних модификаций. Амбиент - фоновые события и звуки. env_ambient.ltx. thunderbolt.ltx, flares.ltx. Прочие "несекционные" файлы. Главные файлы конфигурации погоды. user.ltx Скриптование погодных схем: "Тени". level_weathers.script. "Чистое Небо" и "Зов Припяти". AMK и другие сторонние схемы. Причастные из текстур: Папка fx. Скайкубы. Формат. _small. Упоминания в textures.ltx. Пункты, помеченные Numix-красным, составляют мою головную боль, т.е. по забывчивости, либо незнанию не могут быть написаны мною. По ним требуется помощь сообщества.По остальным пунктам приветствуются замечания, корректировка, обсуждение и проч. В данный момент, пока материал еще не готов, приветствуется генеральное обсуждение темы, а также замечания в сторону самого плана. Изменено 1 Января 2015 пользователем Murarius 4 1 New Level Changer 5.08: Раритеты ReapeR build 3: Раритеты Я на YouTube: Vincent Vega Ссылка на комментарий
Потенциал 216 Опубликовано 27 Августа 2014 Поделиться Опубликовано 27 Августа 2014 (изменено) Желательно бы перевести урок Непряхина по скайкубам в текстовый вид. Эти скайкубы из Атмосфира и СВТК гулялют из солянки в солянку. Поделись ссылочкой (первый раз про это слышу, отстал от жизни), все сделаем. Да и первоисточник приложим. Как раз с темой скайкубов беда. The. http://www.youtube.com/watch?v=F3_WBPjd0WE&list=UUwMzSdP-dbdrkY9B9fMyp6A (На том же канале лежит вторая часть) Работа идёт в Максе, фотошопе и СДК. Этапы в Фотошопе и СДК я и сам могу подробно описать, а вот с 3Д максом мне нужна помощь. В пределах возможностей можешь начинать. По Максу подыщем кого-нибудь. The. Изменено 27 Августа 2014 пользователем The ReapeR 1 1 Ссылка на комментарий
Anonim 680 Опубликовано 27 Августа 2014 Поделиться Опубликовано 27 Августа 2014 (изменено) user.ltx - стоит убрать Причина? Возможно, я неверно выразился, я хотел осветить лишь настройки освещения в этом файле. The. Изменено 27 Августа 2014 пользователем The ReapeR 1 Ссылка на комментарий
Потенциал 216 Опубликовано 28 Августа 2014 Поделиться Опубликовано 28 Августа 2014 @Anonim, в user'e прописываются таки параметры как r2_sun_lumscale_amb r2_sun_lumscale_hemi Которые имеют прямое отношение к погодным конфигам. Ссылка на комментарий
Anonim 680 Опубликовано 28 Августа 2014 Поделиться Опубликовано 28 Августа 2014 (изменено) @Потенциал, Всё в user.ltx лутчше оставлять по дефолту, и настраивать лишь погодные конфиги. Второй раз уже прошу объяснения этому. В большинстве погодных модов из мне известных данные параметры так или иначе были изменены. Скажу даже больше: при установке игры r2_sun_lumscale_amb устанавливается в 0.5, а при удалении user.ltx игра пересоздает его уже с величиной параметра 1.0. Что же из них дефолт, и что страшного в этом? Я против манипуляции данными параметрами через скрипты, особенно в качестве костылей для, например, ночных прицелов. Но в чем проблема статической единоразовой коррекции данных значений? The. Изменено 28 Августа 2014 пользователем The ReapeR 1 Ссылка на комментарий
Allender 11 Опубликовано 28 Августа 2014 Поделиться Опубликовано 28 Августа 2014 @Anonim, Не соглашусь с мнением, что нужно настраивать ОДНИ погодные конфиги. Манипуляция вышеупомянутыми параметрами дает намного мягче картинку. Подкрепляю слова линком. Ссылка на комментарий
Anonim 680 Опубликовано 28 Августа 2014 Поделиться Опубликовано 28 Августа 2014 (изменено) @Allender, Такую же картинку я могу получить без использования user.ltx. Но в чем проблема статической единоразовой коррекции данных значений?Вся проблема в том, что: Допустим ты создашь погодный мод, и для корректной работы твоей погодки нужны будут корректировки в файле user.ltx, но рядовому пользователю не очень удобно при установке мода менять user.ltx. А теперь представь что твой мод ему не понравился и он решил его снести, ему придётся удалять этот файл, потом заново настраивать его под себя. Что не есть удобство. Я бы в твоём случае (если уж ты так сильно хочешь менять эти параметры) вынес новые опции в игровое меню, что делается очень легко, когда у тебя уже есть нужные консольные команды. Я к примеру когда использовал графически плюшки от ОГСЕ добавил новые опции, это гораздо удобнее обычному пользователю, если они ему не нравятся он их мог спокойно отключить вместо того чтобы выходить из игры и лезть в user. Мы пишем материал о том, как редактировать погоду, а не об удобстве редактирования чего-либо рядовому игроку. The. Изменено 28 Августа 2014 пользователем The ReapeR 1 Ссылка на комментарий
Desertir 202 Опубликовано 28 Августа 2014 Поделиться Опубликовано 28 Августа 2014 Просто надо описать те параметры из конфига пользователя, которые отвечают за погоду, зачем от них отказываться? 1 ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
Потенциал 216 Опубликовано 28 Августа 2014 Поделиться Опубликовано 28 Августа 2014 @Anonim, так или иначе user.ltx имеет прямое отношение к погодным конфигам. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 28 Августа 2014 Поделиться Опубликовано 28 Августа 2014 (изменено) Мониторы, конечно же, у всех студийные и калиброванные, освещение - строго по ГОСТу, ну и, главное, глаза клонированные. Ролик у меня выглядит препоганейше. Да тут совсем не в этом дело. В том же Atmosfear Cromm Cruac корректировал параметры освещения в user.ltx для получения более сочной картинки, контрастных теней и годной имитации привыкания глаз к свету и темноте, единоразово изменяв их через скрипт. The. Изменено 28 Августа 2014 пользователем The ReapeR Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
RayTwitty 494 Опубликовано 30 Августа 2014 Поделиться Опубликовано 30 Августа 2014 (изменено) r2_sun_lumscale_amb r2_sun_lumscale_hemi Их специально и вынесли для тонкой настройки хеми и амбиент освещения. Просто добавочный коэффициент. И ставить единицу - это не панацея. Вся проблема в том, что: Допустим ты создашь погодный мод, и для корректной работы твоей погодки нужны будут корректировки в файле user.ltxНу так инсталлируй вместе с модом нужный файл конфигурации. Не вижу проблем. Изменено 30 Августа 2014 пользователем Shadows 1 Ссылка на комментарий
Murarius 10 533 Опубликовано 30 Августа 2014 Поделиться Опубликовано 30 Августа 2014 Мы пишем материал о том, как редактировать погоду, а не об удобстве редактирования чего-либо рядовому игроку. Верно, только этот момент обязательно надо будет обозначить. Литературка (избранное): "Координаты избушки" (2023) --- "Колобок времени" (2019) --- "Пиво и жлоб" (2018) --- "Лекарство против морщин" (2013) --- "Когда все пройдет" (2013) Креатив (бесперспективное): Dominanta --- Сон на земле Досвиданьице (слезное): Смена администратора (2024) Ссылка на комментарий
The ReapeR 72 Опубликовано 6 Сентября 2014 Автор Поделиться Опубликовано 6 Сентября 2014 В данный момент повреждена рука, посему нет возможности печатать внушительные опусы. Работа начнется, как поправлюсь, т. е. в ближайшее время. New Level Changer 5.08: Раритеты ReapeR build 3: Раритеты Я на YouTube: Vincent Vega Ссылка на комментарий
Потенциал 216 Опубликовано 6 Сентября 2014 Поделиться Опубликовано 6 Сентября 2014 (изменено) Работа начнется Работа над чем? Э-эм... Над статьями, над чем же еще. The. Над статьямиОно и понятно. Про что будет статья? Помощь нужна? Ты вроде чуть выше указывал, что по скайкубам хотел написать статейку Насчет помощи - будет видно, когда я хотя бы начну. Сейчас говорить сложно, за вычетом того, что в шапке помечено красным - по данным пунктам однозначно нужна будет помощь третьих лиц. The. Изменено 8 Сентября 2014 пользователем The ReapeR Ссылка на комментарий
The ReapeR 72 Опубликовано 8 Ноября 2014 Автор Поделиться Опубликовано 8 Ноября 2014 Посчитал нужным отписаться. Давно поправился от травмы, но из-за учебы не могу выкроить и минутки на статьи. Кто располагает временем/знаниями - вперед, план в шапке. Я подключусь со временем, никуда не денусь. 1 New Level Changer 5.08: Раритеты ReapeR build 3: Раритеты Я на YouTube: Vincent Vega Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 8 Ноября 2014 Поделиться Опубликовано 8 Ноября 2014 (изменено) Кстати, соляночный скриптик переписанный надо кому - упрощенный-ускоренный, + с управлением вероятности погоды не только переписыванием конфигов, но и "одним движением" ? https://dl.dropboxusercontent.com/u/27871782/level_weathers.script К вопросу о рефакторинге. Скриптик когда-то был соляночным. Сейчас, впрочем, он тоже соляночный, но с изменениями. Старый смысла разбирать не вижу, поскольку трэш, угар, и содомия, да еще и с багами типа "вечной ночи" (на самом деле была банальная опечатка, но от того не легче). Что сделано и как оно работает: во-первых, развернуто в плоские функции, ибо ООП там не нужно ни зачем вообще, во-вторых - динамический апдейт. это значит, что снесен весь мусор типа class "WeatherManager"function WeatherManager:__init() init()endfunction WeatherManager:reset() endfunction WeatherManager:save( pk ) endfunction WeatherManager:load( pk ) if db.storage[0].pstor.weather then return end pk:r_stringZ() pk:r_u32()endfunction WeatherManager:update() -- called from bind_stalker.script update()endlocal weather_managerfunction get_weather_manager() if weather_manager then return weather_manager end weather_manager = WeatherManager() return weather_managerend и соответствующая ему содомия в биндере актора. Хотите использовать без переделок - надо ее вернуть. Раз уж здесь требуют расписать построчно, распишу. local string_sub, string_find, string_gmatch = string.sub, string.find, string.gmatchlocal math_floor = math.floorlocal math_random = math.randomlocal table_insert, table_sort = table.insert, table.sortfunction log( ... ) _util.log( "level_weathers", ... ) endfunction abort( ... ) _util.abort( "level_weathers", ... ) endlocal ini = ini_file( "weathers\\environment.ltx" )local lname = level.name()-- check if level name corresponds to one of the levels that should use special indoor level-- as configured in game_maps_single.ltxlocal indoors = {}for i, v in ipairs( { "l03u_agr_underground", "l04u_labx18", "peshera", "av_peshera", "warlab", "marsh", "l08u_brainlab", "l10u_bunker", "l12u_sarcofag", "l12u_control_monolith" } ) do indoors[v] = trueend Библиотечные функции локализуются, дабы меньше томозило. С той же целью ini файл открывается один раз при подцеплении скрипта. Табличка уровней - такая же, как в оригинале - это уровни, где погода статическая. На ее основе считается переменная l_indoor и если она определена, то погода берется из game.ltx, а не вычисляется динамически. local t_prob = { -- вероятности типов погоды ["beta"] = 20, ["dry"] = 10, ["foggy"] = 10, ["rainy"] = 20, ["grey"] = 20, ["stormy"] = 10, ["thunder"] = 10 }local trans_types = {} -- выходы из transitionlocal l_indoor = falseif indoors[lname] then l_indoor = true endlocal trans_t, trans_n, trans_id = {}, 0, 10000 -- таблица переходовlocal next_tm = 0local next_wlocal lv_weather = "default"local lv_suffix табличка t_prob - собственно, позволяет поменять вероятность выбора той или иной погоды глобально, а не перелопачивать каждый раз все конфиги. Ну а дальше просто объявляется куча всяких разных нужных переменных. Eдем дальше, теперь - с конца: function init() lv_suffix = ( ini:section_exist( "level_suffix_table" ) and ini:line_exist( "level_suffix_table", lname ) and ini:r_string( "level_suffix_table", lname ) ) local r, k, v, kk, vv, t if ini:section_exist( "weather_transition_times" ) then for i = 0, ini:line_count( "weather_transition_times" ) - 1 do r, k, v = ini:r_line( "weather_transition_times", i, "", "" ) t = {} trans_n = trans_n + 1; trans_t[trans_n] = { k + 0, v, t } if ini:section_exist( v ) then for ii = 0, ini:line_count( v ) - 1 do r, kk, vv = ini:r_line( v, ii, "", "" ) t[kk] = vv if t_prob[vv] then trans_types[kk] = vv end end else abort( "invalid section: [%s]", v ) end end else abort( "invalid section: [weather_transition_times]" ) end table_sort( trans_t, function( a, b ) return a[1] < b[1] end ) -- из конфигов читается как попало, поэтому сортируем по времени trans_n = trans_n + 1; trans_t[trans_n] = { 1440, trans_t[1][2], trans_t[1][3] } -- синтетическая секция для 24-х часов. -- Надо, чтобы был корректный переход со "стандартным" конфигом. -- _util.list_tbl( trans_t, "transitions" ) - чтение конфигов. Таблица суффиксов (уровней с динамической погодой) из environments.ltx (мы его открыли при подцеплении скрипта), таблица переходов и их вероятностей. Впрочем, вероятности теперь можно в конфигах не писать, по тому как есть табличка в скрипте, универсальная. Так что нам нужно только время, и на что переключаться можно. local ini = ini_file( "game.ltx" ) local pp if ini:section_exist( lname ) then if ini:line_exist( lname, "postprocess" ) then pp = ini:r_string( lname, "postprocess" ) end if ini:line_exist( lname, "weathers" ) then lv_weather = ini:r_string( lname, "weathers" ) end end if pp then level.add_pp_effector( pp, 999, true ) else level.remove_pp_effector( 999 ) end -- log( "info", "init, default: %s, suffix: %s", lv_weather or "nil", lv_suffix or "nil" ) bind_stalker.task_add( "level_weathers.update", 5000, update ) return true end - из game.ltx читаем постпроцессы типа желтизны на янтаре, и запускаем, а также статическую погоду для подземных уровней. И, наконец, вешаем на динамический апдейт код самого апдейта. Не знаю, что там кто будет формировать - по мне так кроме самого скрипта вообще больше ничего не надо. Собственно, самая интересная часть здесь - апдейт. В логике того, что было, способен разобраться, наверное, только Создатель. Плюс там останки кучи каких-то древних модов, которые вообще ни за чем не нужны. Так что, все переделано в одну единственную функцию. function update() local tm = level.get_time_hours() * 60 + level.get_time_minutes() if tm < next_tm then return end -- выбираем таблицу погод на следующий раз if ( trans_id >= trans_n ) or ( trans_t[trans_id][1] >= tm ) then -- нет данных или почему-то забежали вперед for i, v in ipairs( trans_t ) do -- вычисляем "с нуля" if tm < v[1] then trans_id = i break end end else trans_id = trans_id + 1 end -- log( "info", "update, id: %s (%s)", trans_id, trans_n ) local t = trans_t[trans_id] next_tm = t[1] -- _util.list_tbl( t[3], t[2] ) - если время что-то делать не подошло, не делаем ничего. А вот если подошло, то выбираем таблицу погод для СЛЕДУЮЩЕГО раза. Даже если находимся под землей, или прямо сейчас происходит выброс. Зачем это надо - кроме упрощения кода можно прицепить, например, к новостям прогноз погоды. Не "фэйковый", а реальный. Ну и кроме того, плохая идея, когда при каждой загрузке сэйва погода - разная получается. local pstor = db.storage[0].pstor if next_w then -- погоду знаем -- log( "info", "update, to: %s, next id: %s, at: %s", next_w, trans_id, next_tm / 60 ) pstor.weather = next_w else -- сначала выберем текущую next_w = pstor.weather if next_w then -- log( "info", "update, current: %s, next id: %s, at: %s", next_w, trans_id, next_tm / 60 ) else local tt, nn = {}, 0 for k, v in pairs( t[3] ) do nn = nn + 1; tt[nn] = k end next_w = tt[math_random( nn )] -- log( "info", "update, new: %s, next id: %s, at: %s", next_w, trans_id, next_tm / 60 ) pstor.weather = next_w end end - а вот если "предсказанной" погоды нет - только тогда считаем на основе загруженной таблицы. И если не под землей, и не выброс - устанавливаем. А если под землей - ставим нужную, но для поверхности дальше все равно идет рассчет нового "прогноза": local s = t[3][next_w] -- log( "info", "update, select: %s", string_sub( s or "nil", 1, 180 ) ) local tt, nn = {}, 0 if s then -- для следующего раза for k, v in string_gmatch( s, "([%w]+):?([%d]*),?" ) do -- log( "info", "update, allowed: [%s:%s]", k, v ) if t_prob[k] then v = t_prob[k]; tt[k] = v; nn = nn + v else v = trans_types[k] if v then v = t_prob[v]; tt[k] = v; nn = nn + v -- else log( "error", "invalid section: [%s], line: [%s]", t[2], k ) end end end end if t_prob[next_w] and not tt[next_w] then -- текущая тоже участвует в конкурсе s = t_prob[next_w]; tt[next_w] = s; nn = nn + s -- log( "info", "update, add current: [%s]", next_w ) end if nn ~= 0 then s = math_random( nn ) -- log( "info", "update, total: %s, rnd: %s", nn, s ) -- for k, v in pairs( tt ) do log( "info", "update, [%s:%s]", k, v ) end for k, v in pairs( tt ) do if v < s then s = s - v else next_w = k; break end end -- log( "info", "update, next: [%s]", next_w ) -- else log( "error", "invalid section: [%s], entry [%s] absent", t[2], next_w ) end - собственно, это и был прогноз погоды. Все. end В init() после строки table_sort( trans_t, function( a, b ) return a[1] < b[1] end ) -- из конфигов читается как попало, поэтому сортируем по времени Добавил: trans_n = trans_n + 1; trans_t[trans_n] = { 1440, trans_t[1][2], trans_t[1][3] } -- синтетическая секция для 24-х часов. -- Надо, чтобы был корректный переход со "стандартным" конфигом. Спасибо Карлан за то, что обратил внимание, и за тестирование с этим самым "стандартным" конфигом из Dynamic Weather v0.9.4 Изменено 1 Января 2015 пользователем Murarius 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Expropriator 2 118 Опубликовано 18 Мая 2016 Поделиться Опубликовано 18 Мая 2016 (изменено) Вопрос: Работал с доками давно, потому может где то накосячил - из -за чего может происходить резкая смена погоды в ЗП, например в Припяти заселяясь через алсспавн, хотя на Затоне погода работает отлично? Изменено 18 Мая 2016 пользователем Дизель Ссылка на комментарий
vetik 24 Опубликовано 9 Июня 2016 Поделиться Опубликовано 9 Июня 2016 (изменено) Привет всем! Извиняюсь если не туда пишу. У меня проблемы с фонариком на динамическом освещении. Свет фонарика какой-то разорванный. Блики костров неправильно отражаются. Играю в Сталкер ТЧ с модом ОП-2. На ЗП такая же проблема. Виндовс 8.1( на 7-ке и 10 тоже). Компьютер недавно собран. Пока без видеокарты. Процессор с графическим ядром( i7 6700k). @vetik, Попробуй обновить драйверы intel или сделай откат. @TIGER_VLAD, Спасибо!!!! Помог откат на базовый драйвер. С фонарем все нормально, но теперь тормозит . оставлю здесь, на всякий случай. Хоть и не вполне по теме, но искать здесь будут прежде всего. dc Изменено 25 Июня 2016 пользователем Dennis_Chikin Ссылка на комментарий
Cornholio 58 Опубликовано 16 Июня 2016 Поделиться Опубликовано 16 Июня 2016 (изменено) Полезненько... Где еще можно хоть что-то узнать про редактирование погод в сталкере? Полезного здесь пока маловато. С момента создания темы прошло почти два года, однако я (да и остальные, кто в свое время показывал свой интерес к данной теме) по разным причинам так и не приступал. При отсутствии каких-либо непредвиденных обстоятельств в ближайшее время, постараюсь за лето опубликовать хотя бы 2/3 запланированного в шапке. The. Изменено 20 Июня 2016 пользователем The ReapeR Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 25 Июня 2016 Поделиться Опубликовано 25 Июня 2016 (изменено) В свое время здесь выкладывался упрощенный скриптик для динамической погоды, так вот он требует, во-первых, чтобы в конфигах не было ошибок, во-вторых - чтобы корректно отрабатывались вещи типа сна и выброса.Вот вариант с учетом известных проблем с конфигами (в комментариях все подробности)https://dl.dropboxusercontent.com/u/27871782/level_weathers_bad_cofigs.scriptВ идеале, конечно, лучше бы конфиги починить, а сон делать через исправленную set_curent_time() в _g.script: local set_current_time_t, set_current_time_f function set_current_time_wait() if game.get_game_time() < set_current_time_t then return false end level.set_time_factor( set_current_time_f ) set_current_time_f = false return true end function set_current_time( hour, min, sec ) -- починено, работает. game_time_time = game.get_game_time() -- полное игровое время local new_time = game.CTime() -- нужно выставить new_time:setHMS( hour, min, sec ) local hh, mm, ss _, _, _, hh, mm, ss = game_time_time:get() -- текущее время local c_time = game.CTime() c_time:setHMS( hh, mm, ss ) if new_time == c_time then return -- ничего не делаем elseif new_time < c_time then -- следующие сутки new_time:setHMS( hour + 24, min, sec ) end new_time:setHMS( 0, 0, new_time:diffSec( c_time ) ) set_current_time_t = game_time_time + new_time if not set_current_time_f then set_current_time_f = level.get_time_factor() end level.set_time_factor( 10000 ) level.add_call( set_current_time_wait, dummy_action ) end Этот - именно для тех, кто любит чинить кривые, но зато Священные и Неприкосновенные конфиги скриптами. Основной принцип работы, что зачем, и как подключать - смотрите тремя постами выше. Здесь по сути добавлена именно обработка ошибок конфига. Изменено 25 Июня 2016 пользователем Dennis_Chikin 1 2 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти