Случайная подборка модов
Dead Autumn
4.1
Add-on for S.T.A.L.K.E.R. Beta
3.9
Большая Зона
3.4
История Кота
3.4
Новый Арсенал 6. Революция
3.5
Белый отряд
3.7
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
  • Страница 1 из 1
  • 1
Модератор форума: FanG, Аdmin, FantomICW, Overfirst  
Имя NPC в игровых сообщениях "Зова Припяти"
Беларусь  sektor_aka
Воскресенье, 11.06.2017, 23:10 | Сообщение # 1
Статус:
Опытный:
Сообщений: 1343
Награды: 6
Регистрация: 07.03.2016

Кто шарит в логике, подскажите, как тут дописать правильно, чтобы в сообщении указывалось имя NPC, а не писалось "Сообщение".
Код
[sr_idle@20]
on_game_timer = 10000 | sr_idle@30 %+sad_artefuck_ready =send_tip(sad_artefact_upgr_ready:sad_atr_trader) -sad_atr_trader_go_kitchen%

send_tip - понятно, что это функция в xr_effects.script

Есть даже такой комментарий:

Код
--[[
send_tip(news_id:sender:sender_id)
  1. news_id
  2. sender*
  3. sender_id*
  * - not necessary
--]]

news_id - это текст сообщения, т.е. string id. В моей логике имя sad_artefact_upgr_ready
sender - это иконка в секции tips_icons news_manager.script. В моей логике имя sad_atr_trader
sender_id - а это заголовок сообщения, story_id NPC.

story_id моего персонажа прописан в файле по пути: gamedata\configs\creatures\spawn_sections_sad.ltx

И выглядит так:

Код
[sad_atr_trader]:stalker
$spawn                     = "respawn\sad_atr_trader"
character_profile     = sad_atr_trader
story_id = sad_atr_trader

Т.е. в логике я указал как:
Код
[sr_idle@20]
on_game_timer = 10000 | sr_idle@30 %+sad_artefuck_ready =send_tip(sad_artefact_upgr_ready:sad_atr_trader:sad_atr_trader) -sad_atr_trader_go_kitchen%

Дело в том, что хоть story_id и указан, заголовок все также остается как "Сообщение".

Я все-таки думаю, что story_id читается, но не отображается. Потому что, если указать другое имя, не являющееся story_id - игра вылетит.
Думаю, дело в функции send_tip в news_manager.script. Там не прописано отображение имени.
Возможно, что-то со времен прошлых игр удалили из скриптов, т.к. я действительно не помню чтобы в ЗП игрок получал сообщения с подписанным именем NPC.
  Злобная реклама
Воскресенье, 11.06.2017, 23:10
Статус:
Сообщений: 666
Регистрация: 07.03.2016
Российская Федерация  Overfirst
Понедельник, 12.06.2017, 10:36 | Сообщение # 2
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

В ЗП даже не предусматривается установка заголовка, по умолчанию там уже стоит st_tip. Поправил оригинальную функцию в news_manager.script и убрал лишнее:
Код
function send_tip(news_caption, news_id, sender, showtime)
    if news_id == nil then return false end

    if showtime == nil then showtime = 5 end

    xr_sound.set_sound_play(db.actor:id(), "pda_tips")

    local texture = "ui_iconsTotal_grouping"
    if sender ~= nil then
  if type(sender) == "string" then
   if tips_icons[sender] then
    texture = tips_icons[sender]
   end
   elseif is_npc_stalker(sender:clsid()) then
   texture = sender:character_icon()
  end
    end
    local news_caption = news_caption or game.translate_string("st_tip")
    local news_text = game.translate_string(news_id)
    db.actor:give_game_news(news_caption, news_text, texture, 0, showtime*1000, 0)

    return true
end
Чтобы вызывать из логики, нужно в соответствии с этой функцией поправить функцию send_tip в xr_effects.script:
Код
--[[
1. Заголовок сообщения
2. Текст сообщения
3. Иконка отправителя из таблицы tips_icons
4. Время показа в секундах
--]]
function send_tip(actor, npc, p)
    news_manager.send_tip(p[1], p[2], p[3], p[4])
end
Пример использования:
Код
%=send_tip(st_test_tip:st_test_news_text:diplomat:20)%

Скриншот:
  Злобная реклама
Понедельник, 12.06.2017, 10:36
Статус:
Сообщений: 666
Регистрация: 11.06.2015
Беларусь  sektor_aka
Понедельник, 12.06.2017, 14:39 | Сообщение # 3
Статус:
Опытный:
Сообщений: 1343
Награды: 6
Регистрация: 07.03.2016

Цитата BoBaH_671 ()
st_test_tip

Это что, string id или story id ?

Думаю первое, раз у тебя написано "Имя отправителя".

Т.е. выходит указать можно только вручную?
Сообщение отредактировал sektor_aka - Понедельник, 12.06.2017, 14:40
  Злобная реклама
Понедельник, 12.06.2017, 14:39
Статус:
Сообщений: 666
Регистрация: 07.03.2016
Российская Федерация  Overfirst
Понедельник, 12.06.2017, 14:52 | Сообщение # 4
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

sektor_aka, ну по функции глазами пробегись. Да, это string id.
Цитата sektor_aka ()
Т.е. выходит указать можно только вручную?

Не понял.
  Злобная реклама
Понедельник, 12.06.2017, 14:52
Статус:
Сообщений: 666
Регистрация: 11.06.2015
Беларусь  sektor_aka
Понедельник, 12.06.2017, 14:57 | Сообщение # 5
Статус:
Опытный:
Сообщений: 1343
Награды: 6
Регистрация: 07.03.2016

Цитата BoBaH_671 ()
Не понял.

Ну мне сказали, что со story id:
Цитата
Если объект от имени которого пишется сообщение в оффлайне или ранен - то оно не придет.
Типа персонаж не может использовать PDA


Также не нужно текст имени указывать вручную.

Должна читаться секция:
Цитата sektor_aka ()
[sad_atr_trader]:stalker
$spawn                     = "respawn\sad_atr_trader"
character_profile     = sad_atr_trader
story_id = sad_atr_trader


А string id из профиля NPC указанного в параметре character_profile
Сообщение отредактировал sektor_aka - Понедельник, 12.06.2017, 14:57
  Злобная реклама
Понедельник, 12.06.2017, 14:57
Статус:
Сообщений: 666
Регистрация: 07.03.2016
Российская Федерация  Overfirst
Понедельник, 12.06.2017, 15:00 | Сообщение # 6
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

Если не нравится, то можешь переписать, я же не заставляю. Не пойму, чем тебя сей вариант не устраивает. Упростил максимально, чтобы удобно было. Разницы никакой, если ты пишешь story_id, по которому читается имя, или же сразу пишешь имя из профиля.
  Злобная реклама
Понедельник, 12.06.2017, 15:00
Статус:
Сообщений: 666
Регистрация: 11.06.2015
Беларусь  sektor_aka
Понедельник, 12.06.2017, 15:03 | Сообщение # 7
Статус:
Опытный:
Сообщений: 1343
Награды: 6
Регистрация: 07.03.2016

Цитата BoBaH_671 ()
можешь переписать


biggrin

Вот только не особо шарю в скриптописании.

Разница все же есть, напиши пожалуйста, чтобы story id читало. Если знаешь конечно...

Знаешь. Мне без твоих story_id хватает забот, сорян.
BoBaH_671
Прикрепления: 7812907.jpg (102.6 Kb)
Сообщение отредактировал sektor_aka - Понедельник, 12.06.2017, 15:04
  Злобная реклама
Понедельник, 12.06.2017, 15:03
Статус:
Сообщений: 666
Регистрация: 07.03.2016
Российская Федерация  Overfirst
Понедельник, 12.06.2017, 15:18 | Сообщение # 8
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

Цитата sektor_aka ()
Должна читаться секция

Если чекать оригинал, читается айдишник, да, но он никак не влияет на заголовок. Если ты его задал, то он тупо проверяет непися, не ранен ли он и не оффлайне ли он, ну и жив ли он. Это влияет только на отправку.
  Злобная реклама
Понедельник, 12.06.2017, 15:18
Статус:
Сообщений: 666
Регистрация: 11.06.2015
Беларусь  sektor_aka
Понедельник, 12.06.2017, 15:25 | Сообщение # 9
Статус:
Опытный:
Сообщений: 1343
Награды: 6
Регистрация: 07.03.2016

Цитата BoBaH_671 ()
никак не влияет на заголовок

Ага. Кажись понял. Ты в скрипте:
Цитата BoBaH_671 ()
function send_tip(news_caption, news_id, sender, showtime)


Заставил работать news_caption

А я спрашиваю про другое, про sender_id. У тебя он не указан.

Получается все верно. Имя отправителя задается вручную в логике его при вызове.

А sender_id эт проверка непися.
Сообщение отредактировал sektor_aka - Понедельник, 12.06.2017, 15:26
  Злобная реклама
Понедельник, 12.06.2017, 15:25
Статус:
Сообщений: 666
Регистрация: 07.03.2016
Российская Федерация  Overfirst
Понедельник, 12.06.2017, 15:28 | Сообщение # 10
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

Туповато получается. Это лишнее, имхо. Если непись эксклюзивный, то и логика у него соответствующая, а там можно выдать поршень, когда тот умирает:
Код
[death]
on_info = {-info} %+info%

А перед отправкой проверить:
Код
on_info = {-info} nil %=send_tip(st_test_tip:st_test_news_text:diplomat:20)%
on_info2 = {+info} nil

Мне сейчас не до скриптов, извиняй, «и так сойдёт». smile
  Злобная реклама
Понедельник, 12.06.2017, 15:28
Статус:
Сообщений: 666
Регистрация: 11.06.2015
Беларусь  sektor_aka
Понедельник, 12.06.2017, 15:33 | Сообщение # 11
Статус:
Опытный:
Сообщений: 1343
Награды: 6
Регистрация: 07.03.2016

BoBaH_671, ну хотя да, ты прав. Там же логикой заданы условия выдачи. NPC наверняка обязан быть жив.

Тем более, говорят что:
Цитата
Это билдомусор по сути. Он работает, но никто его не использует никогда


Ещё же СМС-ки могут приходить от разработчика. Типа «За помощь в борьбе с кровососами в личный ящик на Скадовске добавлены медикаменты», а тут никакие айдишники не нужны, даже если разработчик мёртв. biggrin
BoBaH_671
  Злобная реклама
Понедельник, 12.06.2017, 15:33
Статус:
Сообщений: 666
Регистрация: 07.03.2016
  • Страница 1 из 1
  • 1
Поиск: