Перейти к содержанию
Босс

[Anomaly] Сделать цветной текст

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

 

Как сделать цветной текст для всплывающего уведомления о новом квесте? В ПДА, в диалогах и при нажатии Tab текст цветной, а вот этот небольшой косяк раздражает.
Anomaly-DX11-AVX-Screenshot-2025-04-03-0

  • Смех 1

 Правки для модов - нажми на гифку 
Мой канал на Ютубе и в Телеграмме: Эскапизм ТМ

shapa-1-1.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Босс известно ли, какой скрипт за это отвечает, вот конкретно за это уведомление? Это же не из оригинала ЗП уведомление, так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Mawrak Новое задание: (general_new_task) упоминается в двух скриптах в ванили.

Спойлер



local action_descr_by_type = {
	new = "general_new_task",
	complete = "general_complete_task",
	fail = "general_fail_task",
	reversed = "general_reverse_task",
	updated = "general_update_task"
}
function send_task(actor, type, tsk)
	if db.actor == nil then
		return false
	end
	local time_on_screen = (type == "updated") and 5000 or 10000
	xr_sound.set_sound_play(AC_ID, "pda_task")
	local news_caption = game.translate_string(action_descr_by_type[type])
	local news_text = game.translate_string(tsk:get_title() or "")
	local icon = tsk:get_icon_name()
	if(icon==nil) then
		icon = "ui_iconsTotal_storyline"
	end

	if db.actor:is_talking() then
		db.actor:give_talk_message2(news_caption, news_text..".", icon, "iconed_answer_item")
	else
		db.actor:give_game_news(news_caption, news_text..".", icon, 0, time_on_screen)
	end

end


 

Спойлер



class "CGeneralTask"
function CGeneralTask:__init(id)
	self.loaded = false
	
	local task_ini 		= task_manager.task_ini
	self.id				= id
	self.stage			= 0

	self.title			= task_ini:r_string_ex(id,"title") or "TITLE_DOESNT_EXIST"
	self.title_functor	= task_ini:r_string_ex(id,"title_functor") or "condlist"
	self.current_title 	= nil

	self.descr			= task_ini:r_string_ex(id,"descr") or "DESCR_DOESNT_EXIST"
	self.descr_functor	= task_ini:r_string_ex(id,"descr_functor") or "condlist"
	self.current_descr 	= nil

	self.target			= task_ini:r_string_ex(id,"target")
	self.target_functor	= task_ini:r_string_ex(id,"target_functor") or "target_condlist"
	self.status_functor = task_ini:r_string_ex(id,"status_functor")
	self.current_target = nil

	self.icon			= task_ini:r_string_ex(id,"icon") or "ui_pda2_mtask_overlay"
	self.prior			= task_ini:r_float_ex(id,"prior") or 0
	self.storyline		= task_ini:r_bool_ex(id,"storyline",false)

	self.repeat_timeout	= task_ini:r_float_ex(id,"repeat_timeout")
	self.timeout = nil
	
	--' Terms of execution and failure of the quest
	local i = 0
	self.condlist = {}
	while task_ini:line_exist(id, "condlist_"..i) do
		local clst = task_ini:r_string_to_condlist(id,"condlist_"..i)
		if (clst) then
			table.insert(self.condlist,clst)
		end
		i = i + 1
	end

	--' Condelists on the status quests
	self.on_init = task_ini:r_string_to_condlist(id,"on_init")
	self.on_complete = task_ini:r_string_to_condlist(id,"on_complete")
	self.on_fail = task_ini:r_string_to_condlist(id,"on_fail")
	self.on_reversed = task_ini:r_string_to_condlist(id,"on_reversed")
	self.on_cancel = task_ini:r_string_to_condlist(id,"on_cancel")
	
	--' Quest Rewards
	-- IMPORTANT ONLY USE THESE WHEN YOU COMPLETE TASK WHILE IN DIALOG!!!
	self.reward_money = task_ini:r_string_to_condlist(id,"reward_money")
	self.reward_item = task_ini:r_string_to_condlist(id,"reward_money")

	--' Статус квеста, может быть: "normal", "selected", "completed", "fail", "reversed"
	self.status = "normal"

	self.current_title = db.actor and task_functor[self.title_functor](self.id, "title", self.title,self)
	self.current_descr = db.actor and task_functor[self.descr_functor](self.id, "descr", self.descr,self)

	local time = 0
	if self.wait_time ~= nil then
		time = self.wait_time  -- Here the time is specified in game seconds
	end
	if(self.storyline) then
		if time == 0 then
			self.spot = "storyline_task_location"
		else
			self.spot = "storyline_task_location_complex_timer"
		end
		local ttl = self.current_title and game.translate_string(self.current_title)
		if ttl then
			local msg = game.translate_string("general_new_task") .. " " .. ttl
			actor_menu.set_fade_msg( msg, 5, nil, "interface\\horror_notify_02" ) -- Fading text
		end
	else
		if time == 0 then
			self.spot = "secondary_task_location"
		else
			self.spot = "secondary_task_location_complex_timer"
		end
	end
	
	if (self.target_functor == nil or task_functor[self.target_functor] == nil) then 
		printf("task_id=%s | target_functor not set properly, it's either missing or misnamed, check tm_*.ltx and task_functor.script",id)
	end 
	
	self.current_target = db.actor and self.target_functor and task_functor[self.target_functor](self.id, "target", self.target,self)
	self.dont_send_update_news = task_ini:r_bool_ex(id,"dont_send_update_news",false)
end


 


 Правки для модов - нажми на гифку 
Мой канал на Ютубе и в Телеграмме: Эскапизм ТМ

shapa-1-1.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Босс на вскидку - первое отвечает на отображение текста в чате слева внизу (что, как я понял, уже выглядит как надо), а второе - вообще за работу квестовой системы.

Вот эти строчки могут иметь отношение к данному сообщению:

local ttl = self.current_title and game.translate_string(self.current_title)
        if ttl then
            local msg = game.translate_string("general_new_task") .. " " .. ttl
            actor_menu.set_fade_msg( msg, 5, nil, "interface\\horror_notify_02" ) -- Fading text
        end

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

local msg = game.translate_string("general_new_task") .. ttl

если не поможет, то мне нужен файл actor_menu.script

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Mawrak попробовал, не помогло, держи скрипты: https://disk.yandex.ru/d/ON57D7HY0zWOmQ


 Правки для модов - нажми на гифку 
Мой канал на Ютубе и в Телеграмме: Эскапизм ТМ

shapa-1-1.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Босс а оно хотя бы что-то визуально поменяло? Там должен был пробел исчезнуть после двоеточия. Просто хочу проверить, что это вообще нужная строчка.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Mawrak вроде исчез да.


 Правки для модов - нажми на гифку 
Мой канал на Ютубе и в Телеграмме: Эскапизм ТМ

shapa-1-1.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Босс отлично, тогда я попробую описать, что происходит. Вызывается функция set_fade_msg из actor_menu.script, которая создает специальный CreateTimeEvent (движковая вещь из Аномали - позволяет выполнять функцию по таймеру, как я полагаю) по функции из check_hud_fading_msg из того же скрипта. 

Собственно, check_hud_fading_msg отвечает за текст на экране. Но только параметры ей задаются еще в set_fade_msg.

Первое, что я бы поробовал, это заменил в функции set_fade_msg

function set_fade_msg(msg, tm, cl, snd)
--------------------------------------------
-- Tronex 2019/4/27
-- Displays fading message on middle-bottom of screen for tm amount of milliseconds
-- Rely on stacking process, messages will display by their time order
-- param 1 - Message as string
-- param 2 - Seconds as number
-- param 3 - [RGB] Red color as number (0 - 255)
-- param 4 - [RGB] Green color as number (0 - 255)
-- param 5 - [RGB] Blue color as number (0 - 255)
--------------------------------------------

    table.insert(msg_st,
        {
            msg = tostring(msg),
            sec = tm or 5,
            R = cl and cl.R or 240,
            G = cl and cl.G or 217,
            B = cl and cl.B or 182,
            snd = snd or false,
        }
    )
    
    if (not msg_event) then
        msg_event = true
        msg_on = true
        CreateTimeEvent(0,"check_hud_fading_msg",0,check_hud_fading_msg)
    end
end

строчку msg = tostring(msg) на просто msg = msg

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

Если эта замена не помогла, то откатываем это изменение назад, и дальше я вижу два варианта:

Первый вариант

В функции из task_objects.script меняем тот кусок на:

		if ttl then
			local msg = game.translate_string("general_new_task") .. " " .. ttl
  			local msg_fix = string.gsub(msg, "%%c%[[%d,]+%]", "")
			actor_menu.set_fade_msg( msg_fix, 5, nil, "interface\\horror_notify_02" ) -- Fading text
		end

Тут я добавил переменную msg_fix, которая через string.gsub удалит теги цвета из стринга. Потом мы уже исправленный msg_fix передаем в set_fade_msg. Ожидаемый результат: в игре больше не будет отображаться тег цвета при выводе сообщения, но при этом сообщение все равно останется стандартного цвета (потому что цвет, как оказалось, задается в самом set_fade_msg). Но по крайней мере визуальной васни больше не будет.

(если этот скрипт не сработает, отпиши, а то я мог немного навасянить с кодом, сложно протестировать на адекват не имея самой игры)

Второй вариант

Переписать set_fade_msg и check_hud_fading_msg, чтобы они принимали два разных стринга и красили их разным (нужным нам) цветом (при этом удалять тег все равно придется но это уже не сложно). Скорее всего нужно будет вообще продублировать функции, чтобы не ломались иные функции, которые могут тоже использовать эти.

Этот вариант гораздо более сложный, так как функция check_hud_fading_msg очень сложная и не имеет комментариев. Я бы очень не хотел этим заниматься. Но в теории это возможно.

Изменено пользователем Mawrak
  • Хабар 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
1 час назад, Mawrak сказал:

строчку msg = tostring(msg) на просто msg = msg

Это не помогло, пробую следующее.

1 час назад, Mawrak сказал:

В функции из task_objects.script меняем тот кусок на:

Вот теперь есть изменения! Циферки пропали, но вот текст, увы, не покрасился.
Anomaly-DX11-AVX-Screenshot-2025-04-03-1

Спустя много дней поисков я нашел манкипатч!
Вот, если кому пригодится: 
Цветной текст

 

Изменено пользователем Босс

 Правки для модов - нажми на гифку 
Мой канал на Ютубе и в Телеграмме: Эскапизм ТМ

shapa-1-1.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
2 часа назад, Босс сказал:

actor_menu.set_fade_msg( msg, 5, nil, "interface\\horror_notify_02" ) -- Fading text

Вот тут вместо nil попробуй цвет табличкой передать {0,250,250} (или какое там по счету за альфу отвечает, не помню, тут rgb передавать надо без альфы)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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


 Правки для модов - нажми на гифку 
Мой канал на Ютубе и в Телеграмме: Эскапизм ТМ

shapa-1-1.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   1 пользователь онлайн