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

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

Желательно бы перевести урок Непряхина по скайкубам в текстовый вид. Эти скайкубы из Атмосфира и СВТК гулялют из солянки в солянку.

 

Поделись ссылочкой (первый раз про это слышу, отстал от жизни), все сделаем. Да и первоисточник приложим. Как раз с темой скайкубов беда. The.

 

 

(На том же канале лежит вторая часть)

 

Работа идёт в Максе, фотошопе и СДК. Этапы в Фотошопе и СДК я и сам могу подробно описать, а вот с 3Д максом мне нужна помощь.

 

В пределах возможностей можешь начинать. По Максу подыщем кого-нибудь. The.

Изменено пользователем The ReapeR
  • Спасибо 1
  • Полезно 1
Ссылка на комментарий
  • user.ltx - стоит убрать
Причина? Возможно, я неверно выразился, я хотел осветить лишь настройки освещения в этом файле. The. Изменено пользователем The ReapeR
  • Нравится 1
Ссылка на комментарий

@Anonim, в user'e прописываются таки параметры как 

r2_sun_lumscale_amb
r2_sun_lumscale_hemi
Которые имеют прямое отношение к погодным конфигам.
Ссылка на комментарий

@Потенциал, Всё в user.ltx лутчше оставлять по дефолту, и настраивать лишь погодные конфиги.

 

Второй раз уже прошу объяснения этому. В большинстве погодных модов из мне известных данные параметры так или иначе были изменены. Скажу даже больше: при установке игры r2_sun_lumscale_amb устанавливается в 0.5, а при удалении user.ltx игра пересоздает его уже с величиной параметра 1.0. Что же из них дефолт, и что страшного в этом?

Я против манипуляции данными параметрами через скрипты, особенно в качестве костылей для, например, ночных прицелов. Но в чем проблема статической единоразовой коррекции данных значений? The.

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

@Anonim

Не соглашусь с мнением, что нужно настраивать ОДНИ погодные конфиги. Манипуляция вышеупомянутыми параметрами дает намного мягче картинку. 


Подкрепляю слова линком.

 

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

@Allender, Такую же картинку я могу получить без использования user.ltx.

 

 

 

Но в чем проблема статической единоразовой коррекции данных значений?

Вся проблема в том, что: Допустим ты создашь погодный мод, и для корректной работы твоей погодки нужны будут корректировки в файле user.ltx, но рядовому пользователю не очень удобно при установке мода менять user.ltx. А теперь представь что твой мод ему не понравился и он решил его снести, ему придётся удалять этот файл, потом заново настраивать его под себя. Что не есть удобство.

 

Я бы в твоём случае (если уж ты так сильно хочешь менять эти параметры) вынес новые опции в игровое меню, что делается очень легко, когда у тебя уже есть нужные консольные команды. Я к примеру когда использовал графически плюшки от ОГСЕ добавил новые опции, это гораздо удобнее обычному пользователю, если они ему не нравятся он их мог спокойно отключить вместо того чтобы выходить из игры и лезть в user.

 

Мы пишем материал о том, как редактировать погоду, а не об удобстве редактирования чего-либо рядовому игроку. The.

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

Просто надо описать те параметры из конфига пользователя, которые отвечают за погоду, зачем от них отказываться?

  • Согласен 1

ТЧ 1.0004. SAP и Trans mod

github

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

Мониторы, конечно же, у всех студийные и калиброванные, освещение - строго по ГОСТу, ну и, главное, глаза клонированные.

 

Ролик у меня выглядит препоганейше.

 

Да тут совсем не в этом дело. В том же Atmosfear Cromm Cruac корректировал параметры освещения в user.ltx для получения более сочной картинки, контрастных теней и годной имитации привыкания глаз к свету и темноте, единоразово изменяв их через скрипт. The.

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

r2_sun_lumscale_amb

r2_sun_lumscale_hemi

Их специально и вынесли для тонкой настройки хеми и амбиент освещения. Просто добавочный коэффициент.

 

И ставить единицу - это не панацея.

 

Вся проблема в том, что: Допустим ты создашь погодный мод, и для корректной работы твоей погодки нужны будут корректировки в файле user.ltx

Ну так инсталлируй вместе с модом нужный файл конфигурации. Не вижу проблем. Изменено пользователем Shadows
  • Согласен 1
Ссылка на комментарий
Мы пишем материал о том, как редактировать погоду, а не об удобстве редактирования чего-либо рядовому игроку.

Верно, только этот момент обязательно надо будет обозначить.

 

 

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

В данный момент повреждена рука, посему нет возможности печатать внушительные опусы. Работа начнется, как поправлюсь, т. е. в ближайшее время.

New Level Changer 5.08: Раритеты

ReapeR build 3: Раритеты

 

Я на YouTube: Vincent Vega

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

Работа начнется

Работа над чем?

 

Э-эм... Над статьями, над чем же еще. The.

 

Над статьями

Оно и понятно. Про что будет статья? Помощь нужна?

 

Ты вроде чуть выше указывал, что по скайкубам хотел написать статейку :) Насчет помощи - будет видно, когда я хотя бы начну. Сейчас говорить сложно, за вычетом того, что в шапке помечено красным - по данным пунктам однозначно нужна будет помощь третьих лиц. The.

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

Посчитал нужным отписаться. Давно поправился от травмы, но из-за учебы не могу выкроить и минутки на статьи. Кто располагает временем/знаниями - вперед, план в шапке. Я подключусь со временем, никуда не денусь.

  • Спасибо 1

New Level Changer 5.08: Раритеты

ReapeR build 3: Раритеты

 

Я на YouTube: Vincent Vega

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

Кстати, соляночный скриптик переписанный надо кому - упрощенный-ускоренный, + с управлением вероятности погоды не только переписыванием конфигов, но и "одним движением" ?


 

 

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

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

Вопрос: Работал с доками давно, потому может где то накосячил - из -за чего может происходить резкая смена погоды в ЗП, например в Припяти заселяясь через алсспавн, хотя на Затоне погода работает отлично?

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

andreyholkin.gif

rod_cccp.gif

 

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

Привет всем! Извиняюсь если не туда пишу. У меня проблемы с фонариком на динамическом освещении. Свет фонарика какой-то разорванный. Блики костров неправильно отражаются. Играю в Сталкер ТЧ с модом ОП-2. На ЗП такая же проблема. Виндовс 8.1( на 7-ке и 10 тоже). Компьютер недавно собран. Пока без видеокарты. Процессор с графическим ядром( i7 6700k).
 
@vetik, Попробуй обновить драйверы intel или сделай откат.
 
@TIGER_VLAD, Спасибо!!!! Помог откат на базовый драйвер. С фонарем все нормально, но теперь тормозит :(.
 
оставлю здесь, на всякий случай. Хоть и не вполне по теме, но искать здесь будут прежде всего. dc

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

Полезненько... Где еще можно хоть что-то узнать про редактирование погод в сталкере?

 

Полезного здесь пока маловато. С момента создания темы прошло почти два года, однако я (да и остальные, кто в свое время показывал свой интерес к данной теме) по разным причинам так и не приступал.

При отсутствии каких-либо непредвиденных обстоятельств в ближайшее время, постараюсь за лето опубликовать хотя бы 2/3 запланированного в шапке. The.

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

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

Вот вариант с учетом известных проблем с конфигами (в комментариях все подробности)
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

 



Этот - именно для тех, кто любит чинить кривые, но зато Священные и Неприкосновенные конфиги скриптами.

 

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

Изменено пользователем Dennis_Chikin
  • Нравится 1
  • Полезно 2
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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