Перейти к содержанию
Авторизация  
FalkineIsaku

[CoP] Новый, усовершенствованный send_tip

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

 
Спойлер

Заходим в 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
  • Лайк 4
  • Жму руку 1
  • Спасибо 3

𝐒𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫𝐬𝐞𝐥𝐟, 𝐬𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫…𝐬𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫𝐬𝐞𝐥𝐟

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


Ссылка на сообщение
Поделиться на другие сайты
 
В 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) с целью облегчить жизнь мододелам.

 

Немного недопонял можешь скинуть пример?


 

Защитим мир от заразы - Зоны                   Долг.gif

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


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

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
 


𝐒𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫𝐬𝐞𝐥𝐟, 𝐬𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫…𝐬𝐭𝐨𝐩 𝐡𝐢𝐭𝐭𝐢𝐧𝐠 𝐲𝐨𝐮𝐫𝐬𝐞𝐥𝐟

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


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

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


 

Защитим мир от заразы - Зоны                   Долг.gif

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


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

Поглядел я на механизм отправки сообщений и захотелось мне упростить его...

Решил переделать механизм отправки сообщений путём добавление конфига, в котором можно прописать секции сообщений с параметрами.

Результат такой: сделал скрипт для чтения конфига и поиска сообщения по его ИД (имя секции), ну и сам конфиг сделал. Вообще, можно было б это прямо в 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

 

Изменено пользователем Prostomod
Исправил ошибки
  • Мастер! 3
  • Сталкерский лайк 2
  • Хабар 2

Мод в разработке - X-7: Эпицентр

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


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

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

 

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


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

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
 

-- другие скрипты

Спойлер

сама функция из поста

 

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

Мод в разработке - X-7: Эпицентр

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


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

Skala, рекомендую использовать вам тот способ что предлагает FalkineIsaku, тот который вы использовали так-то не упрощён, а лишь только добавлен дополнительный промежуточный пункт.

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


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

Domovoi Суть моего способа в упрощении не самой функции, а её использования. Так, у меня все сообщения удобно расположены в одном конфиге (ну или в отдельной иерархии конфигов, фича с #include "filename.ltx" на месте), а не по всей логике и скриптам в моде, благодаря чему удобно, если что, менять их. Ну и, к тому же, точно не будет проблем с вводом аргументов в функцию, потому что фактически 4 разных заменяются одним.

А вообще, каждый сам решит, какой им проще использовать.

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

Мод в разработке - X-7: Эпицентр

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


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

Domovoi У него нельзя звук вызвать, а мне он нужен.


Дополнено 0 минут спустя

Prostomod Всё в xr_effects прописал

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


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

Skala Если у тебя всё ещё не работает, можешь тогда прислать, что ты вписал в xr_effects? Просто у меня в моде этот код исправно работает.


Мод в разработке - X-7: Эпицентр

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


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

Prostomod Только сел за это. Файл messages.script нужно где-то регистрировать? Я просто не вижу в функции нигде ссылки на него

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


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

Skala Не нужно. Просто создаёшь, вставляешь туда функцию send_message_from_id, а потом копируешь и вставляешь функцию для xr_effects. А потом не забудь поправить в логике вызов =send_message_from_id на =send_message (если все имена сохраняешь как у меня)


Мод в разработке - X-7: Эпицентр

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


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

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

 

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


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

Skala Да, моя вина, в скрипте, который в том посте ошибка. (видимо, никто больше моим методом не пользовался, раз ошибка всплыла лишь спустя год)

Пост я исправил, скопируй оттуда по новой функцию send_message_from_id (просто скопируй весь фрагмент, потом всё у себя в messages.script выдели и поверх всего вставь обновлённый код).

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

Мод в разработке - X-7: Эпицентр

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


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

Prostomod Да, теперь всё нормально

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


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

FalkineIsaku зачем создавать переменную actor когда она является первым параметром функции? actor тоже самое что и db.actor

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


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

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

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

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

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

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

Войти

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

Войти
Авторизация  

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

    Ни одного зарегистрированного пользователя не просматривает данную страницу