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 311 Опубликовано 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 292 Опубликовано 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 311 Опубликовано 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 311 Опубликовано 12 октября (изменено) Domovoi Суть моего способа в упрощении не самой функции, а её использования. Так, у меня все сообщения удобно расположены в одном конфиге (ну или в отдельной иерархии конфигов, фича с #include "filename.ltx" на месте), а не по всей логике и скриптам в моде, благодаря чему удобно, если что, менять их. Ну и, к тому же, точно не будет проблем с вводом аргументов в функцию, потому что фактически 4 разных заменяются одним. А вообще, каждый сам решит, какой им проще использовать. Изменено 12 октября пользователем Prostomod Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Skala 292 Опубликовано 12 октября Domovoi У него нельзя звук вызвать, а мне он нужен. Дополнено 0 минут спустя Prostomod Всё в xr_effects прописал Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 311 Опубликовано 12 октября Skala Если у тебя всё ещё не работает, можешь тогда прислать, что ты вписал в xr_effects? Просто у меня в моде этот код исправно работает. Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Skala 292 Опубликовано 12 октября Prostomod Только сел за это. Файл messages.script нужно где-то регистрировать? Я просто не вижу в функции нигде ссылки на него Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Prostomod 1 311 Опубликовано 12 октября Skala Не нужно. Просто создаёшь, вставляешь туда функцию send_message_from_id, а потом копируешь и вставляешь функцию для xr_effects. А потом не забудь поправить в логике вызов =send_message_from_id на =send_message (если все имена сохраняешь как у меня) Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Skala 292 Опубликовано 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 311 Опубликовано 12 октября (изменено) Skala Да, моя вина, в скрипте, который в том посте ошибка. (видимо, никто больше моим методом не пользовался, раз ошибка всплыла лишь спустя год) Пост я исправил, скопируй оттуда по новой функцию send_message_from_id (просто скопируй весь фрагмент, потом всё у себя в messages.script выдели и поверх всего вставь обновлённый код). Изменено 12 октября пользователем Prostomod Мод в разработке - X-7: Эпицентр Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Skala 292 Опубликовано 13 октября Prostomod Да, теперь всё нормально Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты