Отсылаем сообщения главному герою методом разработчиков
|
|
|
Scouser
Среда, 16.01.2013, 01:09 | Сообщение # 1
Статус: |
|
Опытный: |
|
Сообщений: |
1614 |
Награды: |
16 |
Регистрация: |
21.10.2012 |
|
Здравствуйте. Я решил создать маленький урок по выявлению сообщения ГГ. Спасибо модостроителю ColR_iT за некоторые правки. Существует несколько вариантов отослать сообщение ГГ на ПДА: схемой [sr_tip] логики объекта Space Restrictor, методом give_game_news. Однако разработчики пользовались функцией send_tip из скрипта news_manager. Так вот, эта функция спокойной отсылает сообщение на ПДА главного героя. Но стоит учитывать, что она построена на методе give_game_news класса game_object. Для меня это самый удобный способ, имхо.
1. Разберём саму функцию: Код function name (actor, npc) news_manager.send_tip(db.actor, "new_sms_text", 10000, "ecolog", 18000, 902) end
Теперь поэтапно: name - думаю, вы догадались, что это имя функции. (actor,npc) - в качестве аргумента указываем отправителя(актёра) и нпс. news_manager.send_tip - ссылка на функцию. Точкой мы отделяем скрипт и саму функцию. db.actor - устанавливаем получателя, актёра. "new_sms_text" - текст. Можно указать переменную текста, которые хранится в текущем файле, либо прописать текст прямо тут. 10000 - время задержки отправки сообщения после того, как вызвалась функция. ( В миллисекундах). "ecolog" - имя картинки при показа сообщения с лицом персонажа(от которого подразумевая, высылается сообщение). В данном случае, картинка с лицом, а точнее заслоном костюма эколога. Можно указать следующие параметры: default, trader, dolg, freedom, ecolog, arena, stalker, krot, barman, wolf, o_soznanie, monolith, saharov, prizrak, killer. 18000 - время показа сообщения на экране. 902 - story_id отправителя. То есть устанавливается тот объект, от которого приходит сообщения. Если этот НПС мёртв или ранен, то сообщение высылаться не будет. Обязательно это учтите. Многим персонажам прописан stody_id. Они указаны в файле game_story_ids.ltx. В данном случае, это story_id Сахарова.
Вот собственно и закончен разбор функции. Её следует прописать в любой скрипт, если вы вызываете её с помощью <action>. Но в если функция вызывается при входе в рестриктор, то должны обязательно прописать функцию в xr_effects.script и указать в логике рестриктора только имя функции.
2. Добавляем озвучку во время отправки сообщения: Достаточно просто открыть файл news_manager.script и мы увидим вначале и немного вниз множество ссылок на звуковые файлы.
В нашем случае пишем: Код new_sms_text = xr_sound.get_safe_sound_object([[characters_voice\sound]]),
Теперь посмотрим, что тут всё это значит:
new_sms_text - переменная текста нашего сообщения. Указывать ИМЕННО её! xr_sound.get_safe_sound_object - путь до функции, отыгрывающей звук. ([[character_voice\sound]]) - путь до звука. Без комментариев.
Ну вот собственно и всё. Очень простой способ, которым пользовались разработчики. Желаю удачи вам в моддинге, творите с удовольствием!
Сообщение отредактировал LaRento - Суббота, 07.09.2013, 15:52
|
|
Среда, 16.01.2013, 01:09
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
21.10.2012 |
|
|
|
|
|
BozKurt
Среда, 16.01.2013, 02:44 | Сообщение # 2
Статус: |
|
Опытный: |
|
Сообщений: |
1753 |
Награды: |
3 |
Регистрация: |
25.05.2012 |
|
На этот раз лучше, но всё же есть неточности... Во-первых, функция которая непосредственно отправляет сообщение - одна, для любой версии игры и для любого мода - это функция give_game_news класса game_object, но применительна она, естественно, только для актора. Собственно ты её указал среди прочих, только вот эти прочие, просто обёртка вокруг этой, для упрощения использования, т.е. в остальных используется именно функция give_game_news. Далее по описанию...
Цитата (LaRento) db.actor - как я понял, устанавливаем клиентский образ актёра. Точнее сказать не устанавливаем, а передаём, причём объект, а не "образ". Вообще этот параметр, почти, бесполезен, его вообще можно убрать из функции send_tip, если в предпоследней её строчке передать не этот параметр, а непосредственно самого актора, вот так:Код db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(x,y,83,47), timeout*1000, showtime) Так, вызов функции упроститься и будет выглядеть так: Код news_manager.send_tip("new_sms_text", 10000, "ecolog", 18000, 902)
Цитата (LaRento) "new_sms_text" - текст. Нужно прописать его в любой текстовый файл из папки text. Вовсе не обязательно. Можно указать и переменную в текущем файле, которая хранит текст сообщения, либо же написать сам текст прямо в функцию.
Цитата (LaRento) 902 - story_id. То есть устанавливается тот объект, от которого приходит сообщения. Хотя это ни на что не влияет. Вообще-то влияет. Если указать последний параметр, то скрипт проверит жив-здоров ли отправитель и в случае, если он сильно ранен (лежит и просит о помощи), либо вообще пал смертью храбрых, то сообщение отправлено не будет.
Цитата (LaRento) Её следует ОБЯЗАТЕЛЬНО прописать именно в xr_effects.script. Для чего - совершенно не ясно.
Теперь, что касается озвучки... Дабы не цитировать построчно - сразу скажу, что за исключением "имени скрипта из которого вызывается функция", всё остальное неверно! Чтобы при выдаче сообщения играл звук, при этом совершенно не важно - речь это, музыка или просто звуки, нужно в таблицу news в файле news_manager.script, вписать ссылку на объект класса sound_object следующим образом:Код new_sms_text = xr_sound.get_safe_sound_object([[characters_voice\sound]]), Где: new_sms_text - это переменная будет хранить ссылку на объект звука. Она должна ОБЯЗАТЕЛЬНО называться так же как ссылка на id текста в файле локализации. Если в качестве текста, в функцию give_game_news передана либо переменная, либо сам текст, то не о каком звуке не может быть и речи - ТОЛЬКО ССЫЛКА НЕ ТЕКСТ!; xr_sound.get_safe_sound_object - это вызов функции get_safe_sound_object из файла xr_sound.script. Эта функция возвращает уже готовый объект звука. В качестве параметра принимает путь до звукового файла относительно папки gamedata\sounds, расширение файла не указывается.
Вот теперь - всё.
|
|
Среда, 16.01.2013, 02:44
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
25.05.2012 |
|
|
|
|
|
Scouser
Среда, 16.01.2013, 18:23 | Сообщение # 3
Статус: |
|
Опытный: |
|
Сообщений: |
1614 |
Награды: |
16 |
Регистрация: |
21.10.2012 |
|
ColR_iT, Спасибо за правки , Леонид, я глубоко в скрипты не копаюсь, только вчера разобрался более к чему. А по поводу проигрывания звука, у меня ID текста совпадал с именем функции, по этому я и подумал, что нужно указывать её имя.Добавлено (16.01.2013, 18:23) --------------------------------------------- ColR_iT, А вот смотри, если только give_game_news является функцией отправки сообщения на ПДА, а send_tip не будет являться?
|
|
Среда, 16.01.2013, 18:23
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
21.10.2012 |
|
|
|
|
|
BozKurt
Среда, 16.01.2013, 18:33 | Сообщение # 4
Статус: |
|
Опытный: |
|
Сообщений: |
1753 |
Награды: |
3 |
Регистрация: |
25.05.2012 |
|
Цитата (LaRento) Код function new_sms (actor, npc) news_manager.send_tip(db.actor, "new_sms_text", 10000, "ecolog", 18000, 902) end "new_sms" - имя скрипта; "new_sms_text" - id текста. Прямо таки одно и тоже? И что значит твоя последняя реплика?
|
|
Среда, 16.01.2013, 18:33
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
25.05.2012 |
|
|
|
|
|
Scouser
Среда, 16.01.2013, 20:47 | Сообщение # 5
Статус: |
|
Опытный: |
|
Сообщений: |
1614 |
Награды: |
16 |
Регистрация: |
21.10.2012 |
|
ColR_iT, ColR_iT, нет, у меня в своём сообщении было одинаково. Ты написал, что есть только одна функция отправки сообщения - give_game_news. Тогда же что же по твоему send_tip , хотя я наверное просто не понимаю чего-тою
|
|
Среда, 16.01.2013, 20:47
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
21.10.2012 |
|
|
|
|
|
BozKurt
Среда, 16.01.2013, 22:10 | Сообщение # 6
|
Среда, 16.01.2013, 22:10
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
25.05.2012 |
|
|
|
|
|
Scouser
Среда, 16.01.2013, 22:13 | Сообщение # 7
|
Среда, 16.01.2013, 22:13
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
21.10.2012 |
|
|
|
|