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

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


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

UnLoaded,

Если нужен, чтобы один из вариантов ответа (завершающий диалог) был всегда, то можно делать так:

...
<start_dialog>npc_start_dlg</start_dialog>
<actor_dialog>actor_dlg_01</actor_dialog>
<actor_dialog>actor_dlg_02</actor_dialog>
#include "gameplay\character_dialogs.xml" (базовые диалоги: привет - пока, дать аптечку)
Ссылка на комментарий

Короче по диалогам я не понимаю о чем вы. У Шурупа, диалог которого я привел как пример, по тому, что я понял, ровно в десятку попадает под запрос вопрошающего, там три фразы работающие по своим условиям. Если фраза нужна в любом случае, то никаких условий ей добавлять не требуется, в противном случае граф неверно сориентирован и нужно пересматривать построение, но это уже за рамками возможного для отвечающего, так как граф диалога не был продемонстрирован..

 

@UnLoaded, если требуется, то могу в ближайшее время снять видео, как я завожу твой диалог и он работает по тем условиям, которые, как я понял, ты хочешь увидеть. Для примера попробуй смоделировать вариант, когда у тебя ни одна фраза не будет доступна с вариантом графа (в прекондишне), и где хотя-бы одна фраза будет совсем без прекондишнов, может хоть так дойдет.

 

@h0N0r, этот вариант не годится, ему нужна доступная завершающая вершина в конкретном графе, твой вариант этому противоречит, даже если задуматься о финалайзерах из ЗП.

 

 

 

Т.е. движок\или скрипт какой-там назначен не обрабатывают этих окончаний?

Обрабатывают. Я указал куда смотреть.

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

"Т.е. движок\или скрипт какой-там назначен не обрабатывают этих окончаний?"\

 

то есть эти окончания - про то, как подгружать. А дальше растащено по разным местам, и выполняется куча странных загадочных операций типа такого:

 

function play_sound( npc, t_themes, timeout )
	local t, n = {}, 0	-- список тем
	local tt
	for k, v in pairs( t_themes ) do	-- проверяем существование и перекладываем в i-таблицу
		tt = t_list[v]
		if tt then n = n + 1; t[n] = v
		else
			log( "error", "play_sound, ivalid theme %s [%s]", to_str( v ), to_str( npc ) )
			return false
	end	end
	-- log( "info", "play_sound, themes: %s (%s)", n, to_str( npc ) )
	if n == 0 then return false end

	n = t[math.random(n)]	-- из списка тем выбираем одну
	t = { ["theme"] = n }
	get_sound( t_list[n], t, npc )	-- получаем настройки

	n = t.max_snd	-- проверяем корректность, t  - настройки
	if n then
		tt = t_grps[ get_key(npc) ]	-- tt - теперь группа для непися
		tt.idle = math.random( t.min_snd, n ) * 1000
	else	-- если, например, воюют, то таблица пустая, играть ничего не надо
		-- log( "info", "play_sound, busy ( theme: %s )", t.theme, to_str( npc ) )
		return false
	end

	n = t.into_max	-- последовательный список из настроек
	if n and n ~= 0 then
		local into = t.into_id
		tt = db.sound[npc:id()].last_snd	-- что играли до этого момента
		local id = tt[into]
		-- log( "info", "play_sound, check into: %s:%s, last id: %s (%s)", t.theme, into, tostring( id ), to_str( npc ) )
		if id then
			if id < n - 1 then id = id + 1
			else	-- вышли за пределы ( при n == 1 максимальный id == 0 )
				if t.into_cycled then id = 0
				else
					-- log( "info", "play_sound, not cycled, already played (%s)", id )
					return false	-- для xr_kamp !
			end	end
		else id = 0
		end
		tt[into] = id 
		-- process_tutor_on_sound( t.theme )
		npc:play_sound( into, 1, 0, 1, 0, id )
		-- log( "info", "play_sound, into: %s:%s, id: %s (%s)", t.theme, into, id, to_str( npc ) )
		return true
	end
	n = t.rnd_max	-- выбираем 1 случайный звук
	if n and n ~= 0 then
		local rnd = t.rnd_id
		local id = 0
		if tt.last_snd then	-- а здесь мы проверяем id не непися, а группы
			tt = tt.last_snd
			if n >= 2 then	-- больше одного варианта, исключаем повторы
				if id == tt[rnd] then
					id = math_random( n - 1 )	-- 0, если уже что-то было
					if id == tt[rnd] then id = 0 end	-- криво, кстати
				else id = math_random( 0, n - 1 )	-- если новый, то сразу от 0
				end
			-- elseif tt[rnd] then tt[rnd] = false; return	-- нефиг попугайствовать
			-- пока закомментировано из-за того, что одноразовые определены как рэндом,
			-- взрывы вертолетов, например
			end
			tt[rnd] = id	-- сохраняем в группу играемый звук
		else	-- таблица last_snd почему-то не создана
			if n >= 2 then id = math_random( 0, n - 1 ) end
			tt.last_snd = { [rnd] = id }
		end

		-- log( "info", "play_sound, rnd: %s:%s, id: %s (%s), timeout: %s", t.theme, rnd, id, to_str( npc ), timeout or 0 )
		if timeout then npc:play_sound( rnd, timeout + 1, timeout, 1, 0, id )
		else npc:play_sound( rnd, 1, 0, 1, 0, id )
		end
		return true
	end
	return false
end

 

 

Короче, переделывать всю систему от начала и до конца.

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

Эта логика будет работать?

[ph_idle]
on_timer = 4000 | %+lab_x7_actor_left% | 15500 | ph_idle@change_actor_position_to_level_changer %=run_postprocess(fade_out)%

Или после окончания первого таймера обязательно нужно сделать переход к другой секции.

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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

Короче, переделывать всю систему от начала и до конца.

В ЧНЗП вполне удобная система, хоть и требует некоторой доработки. А этого уродца лучше отправить на свалку.

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

@naxac, только сейчас дошло до тестирования. Увы, не работает такой вариант.

 

А этот, похоже, работает: 

on_timer = 4000 | %+lab_x7_actor_left%
on_timer2 = 15500 | ph_idle@change_actor_position_to_level_changer %=run_postprocess(fade_out)%
  • Согласен 1

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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

Помнится в АМК моде были исправления по смене секций погоды после завершения основного ТЧ сюжета. А именно, после завершения основного сюжета проявлялся сбой на некоторых локациях в смене погоды. Если кто помнит, то подскажите, в какие файлы смотреть, чтобы понять суть работы этой правки. Любая информация приветствуется.

ed_rez.gif

c1f11b67ff360413e81b4e4dcf21eb41.jpg

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

@ed_rez, не знаю как там в АМК, но вот буквально позавчера я делал фриплей, отталкивался от Freeplay Mod 1.3 (или как его, в общем от DEXXX), там он сделан безбожно криво (начиная хотя бы с того ошеломляющего факта, что он гасит логику напрочь во фриплее у потенциально нужных схем), и секции погоды в том числе, их нужно прописывать непосредственно в кондлисте погоды уровня, а не через level.set_weather когда там надо, этот метод нужно использовать только непосредственно на второй станции, когда ты еще остаешься на ней, а этих чудиков уже всех переубивал, т.е. перезагрузки уровня не произошло, соответственно нужно либо level.set_weather, либо принудительный ресет погоды, я рекомендую level.set_weather, а далее уже все будет работать корректно, так как на каждой загрузке уровня кондлист будет давать верную секцию погоды.

 

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

 

В случае с динамической погодой опять же тривиальное решение, дописать недостающее туда, куда следует, в этом вся суть фриплея в целом, и не более.

 

Говорю про оригинал, ну или околооригинал, мои решения не сильно его курочат :).

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

Не выводит сообщение [sr_tip]? Поршень esc_bandit_camp_start - выдаёт.

[logic]
active = sr_idle
[sr_idle]
on_actor_inside = {+find_dynamite} sr_tip %+esc_bandit_camp_start%
[sr_tip]
name = esc_bandit_camp_message
Ссылка на комментарий

@dPlayer, так попробуй

[logic]
active = sr_idle
[sr_idle]
on_actor_inside = sr_tip %+esc_bandit_camp_start%
[sr_tip]
name = esc_bandit_camp_message
cond = {+find_dynamite}
on_actor_inside = nil
Изменено пользователем BFG
  • Спасибо 1

"Кругом зомби.....у меня кончаются патроны...."

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

@BFG, спасибо, только {+find_dynamite} должен быть условием и для выдачи +esc_bandit_camp_start и для запуска [sr_tip], а в твоей схеме esc_bandit_camp_start выдается в любом случает, так?

Схема [sr_territory] рабочая? Просто в ТЧ не могу найти, где бы она применялась.

Изменено пользователем dPlayer
Добавлено BFG,

Хммм. Точно. Поршень то у тебя тогда в любом случае будет.

Нужен какой то иной путь.

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

Здравствуйте, у меня просьба. вчера находил статью "как создать новую группировку(тч)", сегодня не могу найти, толи она была здесь, толи в "уроках по модострою" помогите найти, пожалуйста.

Изменено пользователем иорданец

%D0%B8%D0%BE%D1%80%D0%B4%D0%B0%D0%BD%D0% 
Тот, кто думает-думает всегда.
Тот, кто думает, что думает-думает иногда.

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

Привет, ребята. В какие файлы надо залезть, чтобы удалить из игры оружие, например, ИЛ86?


И ещё, пожалуйста, подкиньте, кто может, чистую бессюжетную геймдату ТЧ, пожалуйста.

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

@Hadzirim Hajad

привет! Удалить- это длинный путь действий. А вот заменить очень просто, w_l85.ltx:

[wpn_l85]:wpn_ak74
[wpn_l85_hud]:wpn_ak74_hud

Не забудь про unique_items.ltх.

ed_rez.gif

c1f11b67ff360413e81b4e4dcf21eb41.jpg

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

Я поменял картинку так, как указано здесь:

 


 

А в результате:

 

TuIuDnT0SW4.jpg

 

Почему?

 

Хорошо, ed_rez, задам вопрос по-другому:

Какие файлы отвечают за оружие? Кроме очевидных текстур и моделей.


И вот ещё кое-что. Может с этой программой проблема?

 

izcnnCGz1Go.jpg

 

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

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

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

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

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

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

Войти

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

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

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