FalkineIsaku 81 Опубликовано 30 декабря, 2022 (изменено) Спойлер Заходим в xr_effects.script и листаем в самый низ, Вставляем это в самый конец: function give_game_news(actor, npc, p) local actor = db.actor local news_caption = game.translate_string(p[1]) local news_text = game.translate_string(p[2]) actor:give_game_news(news_caption, news_text, p[3], 0, p[4]) end Главное чтобы перед ним ни в коем случае не было пробелов! Готово. Спойлер Заходим в любую нужную вам логику рестриктора и пишем: on_info = {условие} %=give_game_news(1:2:3:4)% Теперь обозначения: 1 - имя отправителя из text\rus 2 - текст сообщения из text\rus 3 - Иконка отправителя которую можно взять из ui\ui_actor_portrets или ui_actor_newsmanager_icons 4 - Время показывания сообщения в миллисекундах (10000 - 10 сек) Изменено 28 сентября пользователем FalkineIsaku 4 1 3 𝐒𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫𝐬𝐞𝐥𝐟, 𝐬𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫…𝐬𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫𝐬𝐞𝐥𝐟 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SoDizzari 51 Опубликовано 13 июля, 2023 В 30.12.2022 в 16:32, FalkineIsaku сказал: Сам скрипт и как его адаптировать (Показать контент) Заходим в xr_effects.script и листаем в самый низ, Вставляем это в самый конец: function give_game_news(actor, npc, p) local actor = db.actor local news_caption = game.translate_string(p[1]) local news_text = game.translate_string(p[2]) actor:give_game_news(news_caption, news_text, p[3], 0, p[4]) end Главное чтобы перед ним ни в коем случае не было пробелов! Готово. Активация скрипта (Показать контент) Заходим в любую нужную вам логику рестриктора и пишем: on_info = {условие} %=give_game_news(1:2:3:4)% Теперь обозначения: 1 - имя отправителя из text\rus 2 - текст сообщения из text\rus 3 - Иконка отправителя которую можно взять из ui\ui_actor_portrets или ui_actor_newsmanager_icons 4 - Время показывания сообщения в миллисекундах (10000 - 10 сек) Данный скрипт был сделан мной (FalkineIsaku) с целью облегчить жизнь мододелам. Немного недопонял можешь скинуть пример? Защитим мир от заразы - Зоны Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
FalkineIsaku 81 Опубликовано 13 июля, 2023 SoDizzari on_info = {-actor_alive} %=give_game_news(st_news:st_actor_dead:ui_inGame2_V_zone_nedavno_proshel_vibros:10000)% st_news - имя отправителя st_actor_dead - текст сообщения ui_inGame2_V_zone_nedavno_proshel_vibros - иконка сообщения из ui_actor_newsmanager_icons 𝐒𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫𝐬𝐞𝐥𝐟, 𝐬𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫…𝐬𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫𝐬𝐞𝐥𝐟 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SoDizzari 51 Опубликовано 14 июля, 2023 function give_game_news(actor, npc, p) local actor = db.actor local news_caption = game.translate_string([st_agr_pismo_baza_dolg_pda_caption]) local news_text = game.translate_string([agr_pismo_baza_dolg_pda_text]) actor:give_game_news(news_caption, news_text, [ui_inGame2_Ryabov], 0, [10000]) end Должно быть так или так? function give_game_news(actor, npc, p) local actor = db.actor local news_caption = game.translate_string(p[1]) local news_text = game.translate_string(p[2]) actor:give_game_news(news_caption, news_text, p[3], 0, p[4]) end Защитим мир от заразы - Зоны Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 316 Опубликовано 14 июля, 2023 (изменено) Поглядел я на механизм отправки сообщений и захотелось мне упростить его... Решил переделать механизм отправки сообщений путём добавление конфига, в котором можно прописать секции сообщений с параметрами. Результат такой: сделал скрипт для чтения конфига и поиска сообщения по его ИД (имя секции), ну и сам конфиг сделал. Вообще, можно было б это прямо в xr_effects.script засунуть, но решил, что лучше разделить. Спойлер -- # DESC: скрипт отсылки сообщений по id из конфигов -- # EDIT: 14/07/2023 -- # AUTH: mnelenpridumivat a.k.a. Prostomod local message_name_default = "st_tip" -- имя отправителя local message_icon_default = "ui_iconsTotal_grouping" -- иконка сообщения local message_showtime_default = 5000 -- время показа сообщения в мс local message_timeout_default = 0 -- задержка отправки в мс local message_sound_default = "pda_tips" -- звук сообщения local message_text_default = nil -- текст по умолчанию function send_message_from_id(message_id) local config = ini_file("misc\\messages.ltx") if not config then abort("Unable to find messages config file: misc\\messages.ltx") end local sender = utils.cfg_get_string(config, message_id, "sender", nil, false, "", message_name_default) local icon = utils.cfg_get_string(config, message_id, "icon", nil, false, "", message_icon_default) local showtime = utils.cfg_get_string(config, message_id, "showtime", nil, false, "", message_showtime_default) local timeout = utils.cfg_get_string(config, message_id, "timeout", nil, false, "", message_timeout_default) local sound = utils.cfg_get_string(config, message_id, "sound", nil, false, "", message_sound_default) local text = utils.cfg_get_string(config, message_id, "text", nil, false, "", message_text_default) if not text then abort("Message section [%s] has no text!", message_id) end text = game.translate_string(text) sender = game.translate_string(sender) xr_sound.set_sound_play(db.actor:id(), sound) db.actor:give_game_news(sender, text, icon, tonumber(timeout), tonumber(showtime), 0) end Спойлер [test_message] ;sender = стринг_ид_имени ;icon = ид_иконки ;showtime = 5000 ;timeout = 0 ;sound = имя_звука text = this_is_test_message ;стринг-id текста сообщения - ОБЯЗАТЕЛЬНО Теперь не нужно будет прыгать по разным файлам логики для редактирования сообщения или вспоминать сигнатуру функции отправки сообщения - просто открываем один конфиг и правим в одном месте всё, что надо. Ещё фича - конфиг читается каждый раз, как вызывается функция отправки сообщения, поэтому необязательно перезаходить в игру при настройке сообщений (например, времени отображения или иконки). Разве что сами тексты по string_id нельзя редактировать, но тут, я так понял, это связано с тем, что они читаются 1 раз при запуске игры. UPD: сама функция не для xr_effects.script, а для вызовов из lua. Чтобы использовать её в логике, необходимо её зарегистрировать отдельно в xr_effects.script. Спойлер function send_message(actor, npc, p) if p == nil then abort("Wrong parameters in 'send_message' function!!!") -- это опционально end -- предполагается, что функция находится в файле messages.script messages.send_message_from_id(p[1]) -- самая важная строчка в функции, остальное по желанию end Изменено 12 октября пользователем Prostomod Исправил ошибки 3 2 2 Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Skala 293 Опубликовано 12 октября Prostomod А как правильно вызвать это сообщение? Я вот так вызывал и у меня вылетает без лога: on_complete = %=send_message_from_id(chehov_new_info)% Спойлер [chehov_new_info] sender = st_val_chehov icon = ui_npc_u_freedom_2_face_2 showtime = 4000 timeout = 0 sound = chehov_new_info text = chehov_new_info_text Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 316 Опубликовано 12 октября (изменено) Skala А куда ты прописал функцию? Сама она не для xr_effects.script, я предполагал, что она будет в каком-то другом файле, а в xr_effects.script будет другая функция, которая уже и вызовет send_message_from_id. Наверно, стоило это упомянуть тогда. Пример, как у меня это оформлено: Спойлер -- другие скрипты function send_message(actor, npc, p) if p == nil then abort("Wrong parameters in 'send_message' function!!!") end messages.send_message_from_id(p[1]) end -- другие скрипты Спойлер сама функция из поста Изменено 12 октября пользователем Prostomod Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Domovoi 29 Опубликовано 12 октября Skala, рекомендую использовать вам тот способ что предлагает FalkineIsaku, тот который вы использовали так-то не упрощён, а лишь только добавлен дополнительный промежуточный пункт. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 316 Опубликовано 12 октября (изменено) Domovoi Суть моего способа в упрощении не самой функции, а её использования. Так, у меня все сообщения удобно расположены в одном конфиге (ну или в отдельной иерархии конфигов, фича с #include "filename.ltx" на месте), а не по всей логике и скриптам в моде, благодаря чему удобно, если что, менять их. Ну и, к тому же, точно не будет проблем с вводом аргументов в функцию, потому что фактически 4 разных заменяются одним. А вообще, каждый сам решит, какой им проще использовать. Изменено 12 октября пользователем Prostomod Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Skala 293 Опубликовано 12 октября Domovoi У него нельзя звук вызвать, а мне он нужен. Дополнено 0 минут спустя Prostomod Всё в xr_effects прописал Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 316 Опубликовано 12 октября Skala Если у тебя всё ещё не работает, можешь тогда прислать, что ты вписал в xr_effects? Просто у меня в моде этот код исправно работает. Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Skala 293 Опубликовано 12 октября Prostomod Только сел за это. Файл messages.script нужно где-то регистрировать? Я просто не вижу в функции нигде ссылки на него Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 316 Опубликовано 12 октября Skala Не нужно. Просто создаёшь, вставляешь туда функцию send_message_from_id, а потом копируешь и вставляешь функцию для xr_effects. А потом не забудь поправить в логике вызов =send_message_from_id на =send_message (если все имена сохраняешь как у меня) Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Skala 293 Опубликовано 12 октября Prostomod Всё равно вылетает. Спойлер on_complete = %=send_message(chehov_new_info)% Спойлер function send_message(actor, npc, p) if p == nil then abort("Wrong parameters in 'send_message' function!!!") end messages.send_message_from_id(p[1]) end Спойлер -- # DESC: скрипт отсылки сообщений по id из конфигов -- # EDIT: 14/07/2023 -- # AUTH: mnelenpridumivat a.k.a. Prostomod local message_name_default = "st_tip" -- имя отправителя local message_icon_default = "ui_iconsTotal_grouping" -- иконка сообщения local message_showtime_default = 5000 -- время показа сообщения в мс local message_timeout_default = 0 -- задержка отправки в мс local message_sound_default = "pda_tips" -- звук сообщения local message_text_default = nil -- текст по умолчанию function send_message_from_id(message_id) local config = ini_file("misc\\messages.ltx") if not config then abort("Unable to find messages config file: misc\\messages.ltx") end local sender = utils.cfg_get_string(config, message_id, "sender", nil, false, "", message_name_default) local icon = utils.cfg_get_string(config, message_id, "icon", nil, false, "", message_icon_default) local showtime = utils.cfg_get_string(config, message_id, "showtime", nil, false, "", message_showtime_default) local timeout = utils.cfg_get_string(config, message_id, "timeout", nil, false, "", message_timeout_default) local sound = utils.cfg_get_string(config, message_id, "sound", nil, false, "", message_sound_default) local text = utils.cfg_get_string(config, message_id, "text", nil, false, "", message_text_default) if not text then abort("Message section [%s] has no text!", message_id) end text = game.translate_string(text) sender = game.translate_string(sender) --news_manager.send_tip(db.actor, text, timeout, sender, delay) xr_sound.set_sound_play(db.actor:id(), sound) --printf("Try to send message: sender [%s], text [%s], icon [%s], timeout, showtime") db.actor:give_game_news(sender, text, icon, timeout, showtime, 0) end Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 316 Опубликовано 12 октября (изменено) Skala Да, моя вина, в скрипте, который в том посте ошибка. (видимо, никто больше моим методом не пользовался, раз ошибка всплыла лишь спустя год) Пост я исправил, скопируй оттуда по новой функцию send_message_from_id (просто скопируй весь фрагмент, потом всё у себя в messages.script выдели и поверх всего вставь обновлённый код). Изменено 12 октября пользователем Prostomod Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Skala 293 Опубликовано 13 октября Prostomod Да, теперь всё нормально Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KILDIN 30 Опубликовано 6 декабря FalkineIsaku зачем создавать переменную actor когда она является первым параметром функции? actor тоже самое что и db.actor Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты