| Отсылаем сообщения главному герою методом разработчиков | 
| 
				
			 | 
|  
|  |   
|  
 
 
 Среда, 16.01.2013, 01:09 | Сообщение # 1 Scouser  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 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 |  |  |  |  | 
|  
|  |   
|  
 
 
 Среда, 16.01.2013, 02:44 | Сообщение # 2 BozKurt  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 1753 |   
 | Награды: | 3 |   
 | Регистрация: | 25.05.2012 |  | На этот раз лучше, но всё же есть неточности... Во-первых, функция которая непосредственно отправляет сообщение - одна, для любой версии игры и для любого мода - это функция give_game_news класса game_object, но применительна она, естественно, только для актора. Собственно ты её указал среди прочих, только вот эти прочие, просто обёртка вокруг этой, для упрощения использования, т.е. в остальных используется именно функция give_game_news.
 Далее по описанию...
 
 
 Точнее сказать не устанавливаем, а передаём, причём объект, а не "образ". Вообще этот параметр, почти, бесполезен, его вообще можно убрать из функции send_tip, если в предпоследней её строчке передать не этот параметр, а непосредственно самого актора, вот так:Цитата (LaRento) db.actor - как я понял, устанавливаем клиентский образ актёра.Так, вызов функции упроститься и будет выглядеть так:Код 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 |  |  |  |  | 
|  
|  |   
|  
 
 
 Среда, 16.01.2013, 18:23 | Сообщение # 3 Scouser  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 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 |  |  |  |  | 
|  
|  |   
|  
 
 
 Среда, 16.01.2013, 18:33 | Сообщение # 4 BozKurt  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 1753 |   
 | Награды: | 3 |   
 | Регистрация: | 25.05.2012 |  | "new_sms" - имя скрипта;Цитата (LaRento) Код function new_sms (actor, npc) news_manager.send_tip(db.actor, "new_sms_text", 10000, "ecolog", 18000, 902)
 end
"new_sms_text" - id текста.
 Прямо таки одно и тоже?
 И что значит твоя последняя реплика?
 |  |  Среда, 16.01.2013, 18:33   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 25.05.2012 |  |  |  |  | 
|  
|  |   
|  
 
 
 Среда, 16.01.2013, 20:47 | Сообщение # 5 Scouser  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 1614 |   
 | Награды: | 16 |   
 | Регистрация: | 21.10.2012 |  | ColR_iT, ColR_iT, нет, у меня в своём сообщении было одинаково. Ты написал, что есть только одна функция отправки сообщения - give_game_news. Тогда же что же по твоему send_tip , хотя я наверное просто не понимаю чего-тою
 |  |  Среда, 16.01.2013, 20:47   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 21.10.2012 |  |  |  |  | 
|  
|  |   
|  
 
 
 Среда, 16.01.2013, 22:10 | Сообщение # 6 BozKurt |  Среда, 16.01.2013, 22:10   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 25.05.2012 |  |  |  |  | 
|  
|  |   
|  
 
 
 Среда, 16.01.2013, 22:13 | Сообщение # 7 Scouser |  Среда, 16.01.2013, 22:13   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 21.10.2012 |  |  |  |  |