Что такое инфопоршень в сталкере
position – vertex _ id ноды, к которой он будет привязан.
Если вам нужно, чтобы в каком то экшине он был в данной позиции, то нужно сделать:
action:add_precondition (world_property(properties["position"], true))
где properties["position"]= xr_evaluators_id.position
2. Смена положений тела
object – объект, которому нужно изменить положение тела
new – id нового положения тела
Чтобы во время смены положений избежать действий ваших экшнов, нужно сделать следующее
action:add_precondition (world_property(properties["state_end"], true))
где properties["state_end"] = xr_evaluators_id.state_change
-- ОПИСАНИЕ ИДЕНТИФИКАТОРОВ ПОЗИЦИЙ:
Xr_state.sit _ wait
3. Рандомное проигрывание звуков
Xr_sound.set_sound(npc, sound, now)
-- Пример конструктора, описывающего звуки
-- begin = nil ,-- служебное поле
-- maxidle = 10, -- максимальное время между звуками
-- sumidle = 10, -- надбавочное время, добавляется к рандомно выбранному от 1 до максимального.
-- rnd = 100, -- вероятность, с которой будет проигран звук, если пришло время
-- lastsound = nil , -- служебное поле
-- sounds = < < pack = sounds [" idle "], id = 0>, -- пачка звуков, из которых будет выбираться
-- Проигрыш саундов ( By Stohe )
-- npc - object который будет играть звук
-- sound - конструктр звуков, см выше
-- now - если звук отыграть надо прямо сейчас
4. Проверка, находится ли объект в онлайне
передавать ID объекта
5. Проверка, является ли данный итем оружием
передавать cls _ id объекта
6. Настройка реакций
Реакции можно настраивать через кастом дату и в рантайме.
В рантайме можно добавлять и удалять правила
где obj – объект, которому вы добавляете правило
В кастом дате правила нужно писать без кавычек, а в функциях – в кавычках.
Список поддерживаемых правил:
“ no _ item ” - игнорирует все вещи
“ no _ check ” - никогда не ходить проверять источник, только смотрит на него
“ignore” – игнорирует все раздражители
“ silence ” – не издавать звук (не говорить реплики)
7. Время суток в мс
8. Время суток в часах
9. Парсит строку вида " ааа , ббб , ввв . " втаблицу < " ааа ", " ббб ", " ввв ", . >
function parse_names( s )
10. Взвешеннаяслучайнаявыборкаизтаблицывида
Возвращает один из obj. Веса >= 0
function random_choice_weighted( a )
11 . Звуковая система
Живет в xr _ sound . script . Для инициализации нужно вызвать из мотиватора функцию load _ sounds с параметром game _ object :
function play_sound (obj, delay, theme, sub_theme, phrase_set, sub_phrase)
где obj – NPC , delay – задержка перед воспроизведением (время в миллисекундах), theme – тема (строка), sub _ theme – подтема (если несколько),
phrase _ set – набор фраз в подтеме, sub _ phrase – номер фразы в наборе.
Первые 3 параметра обязательны, остальные нет. Для необязательных параметров
Будут выбраны рандомные значения.
function create_sound_constructor (theme, sub_theme) – возвращает sound constructor. Параметры обязательны и соответствуют тому, что изложено выше.
Пример конструктора, описывающего звуки
idle = 0, -- служебное поле
begin = nil, -- служебное поле
maxidle = 10, -- максимальное время между звуками
sumidle = 10, -- надбавочное время, добавляется к рандомно выбранному от 1 до максимального.
-- rnd = 100, -- вероятность, с которой будет проигран звук, если пришло время
-- lastsound = nil, -- служебное поле
-- sounds = < -- пачка звуков, из которых будет выбираться
-- -- -- -- -- -- -- -- >>
--
Добавление своих тем.
Тема – ассоциативный массив (таблица) в которой хранятся таблицы подтем. Подтема – таблица, в которой хранится идентификатор загруженных звуков и их количество. Пример :
sounds_base,
obj:add_sound ("script_replics\\radio\\message\\radio_turn_on_", 30,
snd_type.talk, 2, 1, sounds_base + 0),
obj:add_sound ("script_replics\\radio\\commander\\radio_start_", 30,
snd_type.talk, 2, 1, sounds_base + 1),
obj:add_sound ("script_replics\\radio\\message\\radio_voice_", 30,
snd_type.talk, 2, 1, sounds_base + 2),
obj:add_sound ("script_replics\\radio\\commander\\radio_reply_", 30,
snd_type.talk, 2, 1, sounds_base + 3),
obj:add_sound ("script_replics\\radio\\message\\radio_voice_", 30,
snd_type.talk, 2, 1, sounds_base + 4),
obj:add_sound ("script_replics\\radio\\commander\\radio_finish_", 30,
snd_type.talk, 2, 1, sounds_base + 5),
obj:add_sound ("script_replics\\radio\\message\\radio_turn_off_", 30,
snd_type.talk, 2, 1, sounds_base + 6)
>
>
Здесь объявлена тема commander _ radio с одной подтемой. Для добавления еще одной подтемы нужно добавить еще одну таблицу к теме и прописать по аналогии с существующей (соответственно с нужными параметрами).
Необходимо, чтобы поле sound _ base четко соответствовало своему значению, иначе может произойти вылет движка.
11. Прекращение проигрывания звука
12. Определения типа обьекта
obj - объект из памяти
возвращает тип обьекта:
13. Выбор точки пути с заданным битом
point_with_bit( patrol_path, bit, old_point )
patrol_path - патрульный путь
bit - заданный бит
old_point - индекс точки, которую не надо выбирать( параметр не обязательный)
Если точек несколько, то произвольно выберет одну из них
Если не находит ни одной точки, то возвращает nil . Сразу видно, что путь построен не так, как задумывал разработчик.
Рекурсивная распечатка таблицы
Print _ table ( table )
Система проигрывания анимаций
Nil – прекратить проигрывание
“ poisk ” – поиск чего либо
“ hide ” – ожидание в засаде ( mental . state Должен быть danger )
Примеры использования смотрите в коде или спрашивате в справочной.
Xr _ state . anim _ safe _ to _ break ( npc ) – указывает можно ли прервать анимации, чтобы не было сильно заметных рывков.
Контекстно-зависимая озвучка
Эта схема нужна для случаев, когда нужно проиграть случайный звук из набора, соответствующего текущим условиям (погода, здоровье, класс объекта, класс объекта, в чей адрес должна прозвучать реплика и т.п.).
Состоит из двух этапов:
- Формирование таблицы-конструктора озвучки. Это обычно можно делать в initialize . Пример:
maxidle = 10, -- максимальное время (сек) между звуками (умолчание = 10)
sumidle = 10, -- надбавочное время, добавляется к рандомно выбранному от 1 до максимального. (умолчание = 10)
rnd = 75, -- вероятность, с которой будет проигран звук, если пришло время (умолчание = 100)
themes = < " weather ", " state " >-- список тем для разговора
- Проигрываниеэтогонабораспомощью xr_sound.sound_update. Это нужно делать в execute , разумеется.
function sound_update(npc, sound, now)
sound – таблица - конструктор
now – если true , то проиграть звук немедленно без задержки. Если число, то с этой задержкой.
перечень возможных тем:
-- состояния тела, а также всяческие «покашливания»
-- просьба о помощи
"threat_back" – свали отседа
"threat_stop" - стоять, не сместа
Использование xr _ sound для проигрывания сюжетных/одноразовых звуков.
Нужно создать свои темы, а потом просто вызывать sound _ update . Пример создания темы:
В функции load _ sound () внизу в соответствии с уровнем дописать тему:
-- бандиты на заводе
theme["escape_factory_bandits_novice"] = load_theme("esc_f_band_novice")
То, что выделено жирным – ключ в таблице наборов звуков. Набор звуков для темы нужно прописать вверху файла в табличке snd _ files . Например:
-- бандиты на заводе
esc_f_band_novice = "l_escape\\factory_bandits\\bandit_about_novice_",
Эти темы можно использовать вместе с темами контекстно-зависимой озвучки. А можно и для одноразового проигрывания какой-то реплики.
Создадим таблички (. причём лучше один раз при загрузке скрипта. ):
Первую табличку можно использовать в execute для того, чтобы бандит время от времени говорил о погоде, новичке, зоне и т.д.:
xr_sound.sound_update( self.object, rnd_phrases )
Вторую табличку можно использовать для проигровки звука по теме в определённый момент (например, когда бандиты увидели новичка):
xr_sound.sound_update( npc, snd_novice_again, true )
Причём взведён флажок now , что означает моментальную проигровку звука без задержек. Если в now передать число, то оно будет считаться задержкой (в мс), по истечению которой проиграется звук.
Объединённый Пак 2
Можно смело сказать, что вторая версия Объединенного Пака выводит Зону и выживание в ней на совершенно иной, невиданный доселе уровень. Зона стала гораздо сложнее. Вернее сказать, не сложнее, а реальнее. Заметно. Вы это ощутите сразу. Она стала реальнее потому, что были приложены огромные усилия, чтобы сделать нахождение в Зоне максимально приближенным к реальности, насколько позволяют рамки игры. А реальность всегда сложнее любого вымысла. И всегда намного интереснее.
Что нужно знать в первую очередь - всем выучить наизусть!
В данной сборке движок работает на пределе своих возможностей. Поэтому, возможны различные глюки, как-то: безголовые вылеты и зависы при загрузке игры, кривое отображение локации после загрузки (особенно для локаций из ЗП), а тажке зависание из-за нехватки ресурсов биндеров различных объектов. Это зависание проявляется в невыполнении или в неполном выполнении скриптов, что приводит к поломке сюжета и необходимости переигрывать текущий эпизод. Характерный пример этого - неоткрывающаяся дверь в бункере у Сидора на Кордоне.
Поэтому обязательно выполните следующее:
Начнем
В начале зайдем в файл bind_stalker (В папке scripts) и найдем там строчки:
function actor_binder:update(delta) bind_zone_tele.actor_update(delta) object_binder.update(self, delta) -- DEBUG slowdown --slowdown.update() local time = time_global() game_stats.update (delta, self.object) -- апдейт погоды self.weather_manager:update() -- апдейт схемы детектора self.actor_detector:update() -- апдейт звуковой схемы актера xr_sound.update_actor() Под ними пишем: Код: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; if not has_alife_info("spawn") then self.object:give_info_portion("spawn") end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Точки с запятыми помогут вам быстро найти эти строки, если в вашем моде будут несколько файлов с инфопоршнями. Редактируемая часть. Так, теперь зайдем в файл : config/gameplay. Там создадим файл, ну к примеру назовем его "spawn.xml" - обязательно оканчиваем название форматом XML. Открываем его и пишем: Код:
Это сохраняем и закрываем, теперь надо зарегистрировать наш файл инфопоршней. Открываем файл system.ltx (config) и найем строки:
;список xml файлов, содержащих info_portions Записываем имя нашего XML, например: files = spawn , info_portions, info_portions_light, info_portions_test, info_lchanger_ico, info_level_tips, info_known_objects, info_l01escape, info_l02garbage, info_l03agroprom, info_l04agroprom_u, info_l05dark_valley, info_l06dark_valley_u, info_l07rostok, info_l08yantar, info_l08deadcity, info_l08rostok_bar, info_l09marshes, info_l09rostok_dolg, info_l10military, info_l11pripyat, info_l11yantar, info_l12yantar_u, info_l13deadcity, info_l14swamp, info_l10radar, info_l16radar_antena, info_l17monolith_control, info_l19stanciya, info_l12u_sarcofag, info_l21generators, info_l22warlab, info_stories Инфопоршень создан.
Как испытать творение?
Например заспавним старую добрую Медузку.
Создаем скрипт в папке scripts и назовем его my_spawn
alife():create(" af_medusa ",vector():set( -221 , -20 , -143 ), 32212 , 47 )
Добавление новых диалогов, обучение N3
Сначала открываем файл dialogs_escape и в конце до
пишем:
Теперь открываем файл stable_dialogs_escape и до
пишем
Сидр а что у тебя есть в продаже
Много чего: выбирай.
Теперь открываем файл character_desc_escape и после escape_trader_start_dialog
пишем:
test_dialog
Все таким образом мы зарегистрировали у сидора этот диалог.
Теперь можете проверять.
Всего 4 строки отвечают за диалог и переход к следующему
- название ветки
test_dialog_0 - перевод на русский находится. ну вы сами поняли
1 - переход к следующей ветке
- завершение ветки
2) Добавление диалогов после которого он исчезнет, диалог с выбором ответа и после которого вам дадут гаусс-пушку и 10000.
И так начнем. Заходим в файл character_desc_escape и в конце до пишем:
2
и
3 это возможные ответы Меченого.
Все. 1 этап завершен. Переходим к следующему.
Теперь в файле stable_dialogs_escape пишем
Все дал последний раз больше ты у меня и копеки не выпросишь.
Теперь пишем в файле info_l01escape.xml инфопоршень
Теперь после того как диалог завершится он больше не появится
Теперь сделаем диалоги правдой то есть чтобы после фразы сидр дал нам деньги или гауску (как регистрировать диалоги у НПС я уже писал)
И так в папке gamedatascripts создаем любой файл формата script например файл zz
function dat_dengi(first_speaker, second_speaker)
dialogs.relocate_money(second_speaker, 10000, "in")
end
Это функция отдачи денег ГГ. На месте 10000 любое число.
На месте dat_dengi любое название.
--------------------------------------------------------------------------------
function dat_item(first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "wpn_gauss", "in")
end
Это функция отдачи предмета ГГ. На месте wpn_gauss любой предмет.
На месте dat_item любое название.
Читайте также: