Случайная подборка модов
Время Альянса
2.9
Новое Время. Научный Подход
3.8
Oblivion Lost 3.0
3.0
Prosectors Project
4.0
Белый отряд
3.7
Радиоактивное мясо. Схватка
3.0
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
  • Страница 1 из 1
  • 1
Модератор форума: FanG, Аdmin, FantomICW, Overfirst  
Отсылаем сообщения главному герою методом разработчиков
Российская Федерация  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
Статус:
Опытный:
Сообщений: 1753
Награды: 3
Регистрация: 25.05.2012

LaRento, а ты загляни в файл news_manager.script и полюбуйся на функцию send_tip. smile
  Злобная реклама
Среда, 16.01.2013, 22:10
Статус:
Сообщений: 666
Регистрация: 25.05.2012
Российская Федерация  Scouser
Среда, 16.01.2013, 22:13 | Сообщение # 7
Статус:
Опытный:
Сообщений: 1614
Награды: 16
Регистрация: 21.10.2012

ColR_iT, Можешь даже не говорить) я в общем плане только знаю, что она делает, а детально - тёмный лес biggrin
  Злобная реклама
Среда, 16.01.2013, 22:13
Статус:
Сообщений: 666
Регистрация: 21.10.2012
  • Страница 1 из 1
  • 1
Поиск: