Босс 3 198 Опубликовано 19 часов назад Как сделать цветной текст для всплывающего уведомления о новом квесте? В ПДА, в диалогах и при нажатии Tab текст цветной, а вот этот небольшой косяк раздражает. 1 Правки для модов - нажми на гифку Мой канал на Ютубе и в Телеграмме: Эскапизм ТМ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mawrak 785 Опубликовано 8 часов назад Босс известно ли, какой скрипт за это отвечает, вот конкретно за это уведомление? Это же не из оригинала ЗП уведомление, так? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Босс 3 198 Опубликовано 6 часов назад 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 Правки для модов - нажми на гифку Мой канал на Ютубе и в Телеграмме: Эскапизм ТМ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mawrak 785 Опубликовано 6 часов назад Босс на вскидку - первое отвечает на отображение текста в чате слева внизу (что, как я понял, уже выглядит как надо), а второе - вообще за работу квестовой системы. Вот эти строчки могут иметь отношение к данному сообщению: 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 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Босс 3 198 Опубликовано 5 часов назад Mawrak попробовал, не помогло, держи скрипты: https://disk.yandex.ru/d/ON57D7HY0zWOmQ Правки для модов - нажми на гифку Мой канал на Ютубе и в Телеграмме: Эскапизм ТМ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mawrak 785 Опубликовано 5 часов назад (изменено) Босс а оно хотя бы что-то визуально поменяло? Там должен был пробел исчезнуть после двоеточия. Просто хочу проверить, что это вообще нужная строчка. Изменено 5 часов назад пользователем Mawrak Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Босс 3 198 Опубликовано 5 часов назад Mawrak вроде исчез да. Правки для модов - нажми на гифку Мой канал на Ютубе и в Телеграмме: Эскапизм ТМ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mawrak 785 Опубликовано 5 часов назад (изменено) Босс отлично, тогда я попробую описать, что происходит. Вызывается функция 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 очень сложная и не имеет комментариев. Я бы очень не хотел этим заниматься. Но в теории это возможно. Изменено 4 часа назад пользователем Mawrak 2 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Босс 3 198 Опубликовано 4 часа назад (изменено) 1 час назад, Mawrak сказал: строчку msg = tostring(msg) на просто msg = msg Это не помогло, пробую следующее. 1 час назад, Mawrak сказал: В функции из task_objects.script меняем тот кусок на: Вот теперь есть изменения! Циферки пропали, но вот текст, увы, не покрасился. Спустя много дней поисков я нашел манкипатч! Вот, если кому пригодится: Цветной текст Изменено 3 часа назад пользователем Босс Правки для модов - нажми на гифку Мой канал на Ютубе и в Телеграмме: Эскапизм ТМ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 771 Опубликовано 3 часа назад 2 часа назад, Босс сказал: actor_menu.set_fade_msg( msg, 5, nil, "interface\\horror_notify_02" ) -- Fading text Вот тут вместо nil попробуй цвет табличкой передать {0,250,250} (или какое там по счету за альфу отвечает, не помню, тут rgb передавать надо без альфы) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Босс 3 198 Опубликовано 3 часа назад N42 да, всё верно, только я уже полноценный манкипатч нашел, а так только один цвет можно было бы задатью Правки для модов - нажми на гифку Мой канал на Ютубе и в Телеграмме: Эскапизм ТМ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты