Что такое смарты в сталкере
Для добавления лагеря необходимо поставить объект Spawn Element -> ai -> smart_terrain. В его Properties -> Custom data нужно прописать следующее:
Необходимо ставить точку графа Spawn Element -> ai -> graph point в центре каждого smart_terrain’а и на середине пути от него к лагерями, которые указаны в его targets. Это делается для того, чтобы в оффлайне передвижение отрядов хорошо смотрелось на карте.
Что такое смарты в сталкере
Посоны, я решительно не могу создать работающий смарттеррейн в ЧН. Игра валится со знаменитой жалобой на _G.script:973, и я даже не могу понять, что делаю не так.
Если закомментировать строку, на которую вылезает ругань, то игра запустится, но никаких неписей в ней не появится. Если после этого добавить на карту уникального НПС, то он уйдёт бродить по локации, не подчиняясь смарту.
Внимание, вопрос: каков минимальный набор ИИ-сущностей для запуска респавна в игре?
У меня есть голая карта с одним Сидоровичем на ней, но он не считается, т.к. на классе монстра и сталкирским схемам не подчиняется.
ИИ-сетка и графпойнты есть.
ИИ-сетка скомпилирована командой xrAI.exe -f map, спавн скомпилирован командой xrAI.exe -s escape -no_separator_check
Что я делаю:
1) добавляю смарттеррейн, настройки не трогаю
2) в кастомдату пишу следующее:
3) накрываю смарттеррейн двумя рестрикторами (со стандартными настройками) — esc_st_village_sr_defense и esc_st_village_sr_attack
4) делаю аналогичный рестриктор esc_st_test рядом, ему в targets указываю esc_st_village
5) экспортирую спавн, собираю спавн, запускаю игру, получаю описанное сверху
Что не так, чего не хватает?
Кандидат Игровых Наук
973 строка это из скриптовой функции abort(), то-есть скрипты сознательно крашат игру т.к ты неправильно что то настроил.
После такого вылета ты должен открыть лог (целиком) и чуть выше FATAL ERROR будет собственно сам текст ошибки (Начинаться с "ERROR:" )
Единственное что - в ТЧ в релизной версии движка текст ошибки в лог не выводился (т.к сама функция не была экспортирована корректно), но вроде как в ЧН с этим порядок. Если никакого текста с ошибкой нету, то попробуй в _g.script поменять местами строки 973 (assert) и 974 (error_log).
Что такое смарты в сталкере
В последнее время люди постоянно меня спрашивали как создать скрипт гулага для смартеррейнов. Чтобы постоянно не отвечать на каждое отдельное письмо, я решил написать небольшой тутор. Прежде чем начать, хотелось бы предупредить, что не являюсь экспертом в подобного рода вещах и некоторые моменты мне всё еще не ясны до конца, так что вероятно я не смогу объяснить всё правильно. Также я буду использовать ST как абревиатуру смартеррейна. Этот тутор посвящен НПС в ST, но он также сгодится и для мутантов. Предполагаю что вы знакомы с:
В первую очередить подумайте о своём ST, где бы его заспавнить, сколько нпс/мутантов будут в нем выполнять определенную "работу", когда ST должен активироваться/отключаться, сколько и какие состояния будет у вашего ST и тд. Думаю, наиболее эффективный способ объяснить вам как это работает на примере. Давайте предположим.. мы хотим поставить ST(smart terrain) на Кордоне для 3х бандитов.
position = 131.02030944824,0.065616846084595,-248.9094543457
; cse_alife_space_restrictor properties (параметры рестриктора)
; se_smart_terrain properties (параметры смарттеррейна)
cond описывает условия, которые необходимы для включения гулага(по желанию)
capacity количество мутантов/нпс, которое может вместить смарттеррейн(обязательно)
squad, groups - номер сквада и количество групп(по желанию)
respawn название тайника(синяя коробка) куда будут спавниться предметы, когда мы вызовем респавн в ST.(по желанию)
2. Спавн нпс/мутантов и назначение(биндинг) их к нашему ST: для этого мы должны добавить каждому мутанту/нпс определенную логику:
Если таковых нпс не обнаружится то гулаг выберет себе население из числа заспавнившихся в Зоне нпс с подходящими параметрами. Даже если они на другой локации.
3. Добавляем "работу" (логика) для каждого нпс/мутанта из нашего ST(для каждого состояния). Предположии у ST их два: состояние 0 (описывает какие нпс/мутанты "работают" днем) и состояние 1 (ночью). У нас 3 бандита, определяемся:
- bandit3: walker (состояние 0 и 1 <= он делает тоже и днём, и ночью)
- грузим логику (работу) для каждого нпс/мутанта и для каждого состояния -> function load_job(. )
;-- "соеденительная секция" для логики, определяем ltx фаилом
t.section = "logic@esc_bandits_smart_terrain_bandit1_walker"
;-- Какой squad и group назначится персонажу принявшему эту работу.
;-- описывает рестрикторы (куда нпс могут/не могут пойти)
;-- smart_terrain.script вы никогда не знаете, какая работа
;-- будет использоваться каждым нпсом; если вы хотите быть уверенным
;-- вам нужно заюзать предикатную функцию; в этом слуае
;-- мы хотим чтобы эта работа присвоилась мастеру бандиту
t.predicate = function(obj_info) return obj_info.rank >= 900 end
t = group = groups[1], position_threshold = 100, online = true, in_rest = "", out_rest = "", predicate = function(obj_info) return obj_info.rank >= 900 end> t = idle = 0, prior = 5, state = <0>, squad = squad, group = groups[1],0> t = idle = 0, prior = 5, state = <1>, squad = squad, group = groups[1],1> t = idle = 0, prior = 5, state = <0, 1>, squad = squad, group = groups[1],0,> Еще один момент о состояниях ST, всё зависит от того сколько у вас их в ST. Еще одна важной вещью является добавление логики для каждого состояния. Например в вашем ST такие состояния: К сведению, меня не прет заполнять такое большое количество таблиц, так что обычно я использую эту функцию: function fill_tbl(section, idle, prior, states, squad, group, in_rest, out_rest, online, gulag_name) Используя функцию выше, мы можем загружать логику наподобие этой: local t = table.insert(sj, fill_tbl("bandit1_walker", 0, 100, <0>, squad, groups[1], "", "", true, type))0> t.predicate = function(obj_info) return obj_info.rank >= 900 end t = table.insert(sj, fill_tbl("bandit1_kamp", 0, 100, <1>, squad, groups[1], "", "", true, type))1> t.predicate = function(obj_info) return obj_info.rank >= 900 end table.insert(sj, fill_tbl("bandit2_walker", 0, 5, <0>, squad, groups[1], "", "", true, type))0> table.insert(sj, fill_tbl("bandit2_sleeper", 0, 5, <1>, squad, groups[1], "", "", true, type))1> table.insert(sj, fill_tbl("bandit3_walker", 0, 5, <0, 1>, squad, groups[1], "", "", true, type))0,> - автоматически изменяем работу для каждого нпс/мутанта -> function load_states(. ) if level.get_time_hours() >= 5 and level.get_time_hours() <= 22 then return 0 -- переключает всех мутантов/нпс на дневную работу return 1 -- ереключает всех мутантов/нпс на ночную работу - убедитесь что наш ST будет использоваться только для бандитов -> function checkStalker(. ) Так же существуют универсальные гулаги General_lager для сталкеров. Они считаются упрощенными гулагами. position = 131.02030944824,0.065616846084595,-248.9094543457 ; cse_alife_space_restrictor properties (параметры рестриктора) ; se_smart_terrain properties (параметры смарттеррейна) General_lager автоматически соберет все точки путей на уровне начинающиеся на имя смарта(в нашем случае esc_gen_lager) и разделит их названия таким образом: (имя_смарта)_(аи схема)_(номер если требуется,напрмер если 2 walkerа то 1 и 2 соответственно)_(поднастройка схемы)_(состояние гулага 1 или 0,день или ночь) пример: esc_gen_lager _walker _1 _walk _1 (walk то же что и path_walk,look это path_look соответственно) Пришедший на general_lager сталкер рандомно примет любую свободную работу работой считается комбинация схем с одним номером. например esc_gen_lager_walker_1_walk_1 и esc_gen_lager_walker_1_look_1 это схема дневной работы одного персонажа из гулага. Так что для каждого general_lager нужны заранее расставленые точки путей для него. Создание Смарт террэйна на основе схемы General Lager Итак, вы хотите создать смарт, но не охота копошится в скриптах и конфигах и создавать свои скрипты для смарта? тогда этот способ именно для вас. Генерал лагер это универсальный смарт, с его помощью можно заселить локации или переобустроить ПЫСовские. Начнем с простенького. Открываем сдк, жмем spawn element>ai>smart terrains, шлепаем сие на локацию, затем переходим в shape>sphere(можно и box по желанию) и снова вставляем сие на локацию, увеличиваем до нужных размеров (не сильно больших), переходим обратно в режим spawn element, жмем кнопку attach object и кликаем на созданной нами сфере. Мы создали смарт с зоной влияния. открываем properties правым щелчком мыши или eneter по умолчанию. открываем custom data и пишем в ней [smart_terrain] type = general_lair capacity = 4 где capacity = 4, это число мутантов, которые могут в ходить в смарт (тобешь есле capacity = 4, то в смарте будет 4 места для мутанта) переходим в режим way points, добавляем новый путь (он будет состоять из одной точки) и обзываем его smart_name_home_1, где smart_name это имя вашего смарта, все, смарт готов, осталось только создать самих мутантов, берем любого, нужного вам мутанта, ставим в зону влияния смарта и идем в custom data, в ней пишем [smart_terrain] smart_terrain_name = true где smart_terrain_name - имя вашего смарта. Все, смарт террэйн для мутантов готов, собираем уровень и идем туда, куда поставили свой смарт и любуемся тем, что мутанты не разбредаются кто куда, а чем то занимаются рядом со смартом [Имя уровня] boar = weak, normal, strong bloodsucker = weak, normal, strong flesh = weak, normal, strong dog = weak, normal, strong pseudodog = weak, normal, strong giant = weak, normal, strong zombie = weak, normal, strong burer = weak, normal, strong controller = weak, normal, strong poltergeist = weak, normal, strong snork = weak, normal, strong tushkano = weak, normal, strong [Имя уровня] stalker = novice, experienced, veteran, master monolith = novice, experienced, veteran, master military = novice, experienced, veteran, master killer = novice, experienced, veteran, master ecolog = novice, experienced, veteran, master dolg = novice, experienced, veteran, master freedom = novice, experienced, veteran, master bandit = novice, experienced, veteran, master zombied = novice, experienced, veteran, master boar = weak, normal, strong bloodsucker = weak, normal, strong flesh = weak, normal, strong dog = weak, normal, strong pseudodog = weak, normal, strong giant = weak, normal, strong zombie = weak, normal, strong burer = weak, normal, strong controller = weak, normal, strong poltergeist = weak, normal, strong snork = weak, normal, strong tushkano = weak, normal, strong И так, повторяем действия сделанные выше Открываем сдк, жмем spawn element>ai>smart terrains, шлепаем сие на локацию, затем переходим в shape>sphere(можно и box по желанию) и снова вставляем сие на локацию, увеличиваем до нужных размеров (не сильно больших), переходим обратно в режим spawn element, жмем кнопку attach object и кликаем на созданной нами сфере. открываем properties правым щелчком мыши или eneter по умолчанию. открываем custom data и пишем в ней [smart_terrain] type = general_lager capacity = 5 что такое capacity вы уже знаете. Создаем пути для НПС (Работы для НПС) вот примеры путей * sleep - место для сна НПС состоит из двух точек, НПС ложится на нулевой точке и смотрит в первую. * walker - обычное бродяжничество по точкам НПС, при использовании точек для пути больше двух - smart_name_walker_1_look не применяется (путь у этого вида волкера должен быть не замкнут и состоять из точек пути больше одного) * walker2 - тот же волкер что и выше, только он ходит по замкнутым путям, лук пути почти не используются. * patrol - патруль лагеря, используется во множественном количестве (количество точек пути в одном пути больше единицы, путь должен быть замкнут),не применяются look пути * guard - часовой, используется в двойном количестве (в пути имеется две точки), очень часто используется look пути * sniper - работа для снайпера, задается двумя точками и look путями. Почему то НПС игнорируют данную работу. Так, теперь, когда вы узнали виды работ - создайте по вкусу работы (их количество не должно превышать количество сталкеров в смарте) и не забудьте приписывать в начале имя смарта (например red_bridge_blokpoats_kamp_1) все, собираем уровень и смотрим на наш смарт, есле вы создали несколько лагерей на одном уровне с одинаковой кастом датой и ваши НПС начали разбредатся - сначала проследите, куда они пойдут, может их принял под себя другой смарт (лично у меня такое было) smart_name_kamp_1 имя_гулага_kamp_коментарии типа [esc2_tunnel3_home_1] причем вместо 1 может быть все что угодно Вообще в ЗП можно спавнить НПС двумя способами - через алл.спавн и через смарт_терраин. Сегодня я вам расскажу как спавнить НПС через смарт. Почему через смарт? Потому что: Итак: После этого заходим в игру и. О чудо, наш сталкер появился! Правда так как мы ему не прописали логику то он уходит из смарта в смарт, где есть работа. У каждого универсального лагеря есть 4 состояния: Атака и защита являются более приоритетными состояниями, т.е. если нет атаки или защиты, то действует правило день/ночь. Если нужно добавить эксклюзивные работы, нужно в кастом дате смарт террейна в секции [exclusive] вписать строчки: Путь к файлу настроек пишется относительно папки \gamedata\configs\scripts\ В файле настроек писать стандартную логику как в кастом дате сталкера, со следующими дополнительными параметрами: Эксклюзивные работы не зависят от состояния смарт террейна. Пример кастом даты смарт террейна: Пример файла настройки: Также работает старая система: Работает как для монстров, так и для сталкеров. Сталкеры сидят в центре лагеря возле костра, монстры живут вокруг точки в определённом радиусе. Ставится точка патрульного пути с именем: [имя_смарттеррейна]_kamp_[номер_кемпа] Нумерация кемпов должна начинаться с 1, то есть если нужно поставить 3 кемпа в гулаге с именем test_gulag, мы в LevelEditor ставим way point‘ы: По умолчанию каждый кемп имеет в себе 5 мест, это количество можно менять, задавая флаг в нулевой точке этого пути. Монстрам можно задавать минимальный радиус (по входу противника в который они будут нападать): Сталкеры спят в укромном месте, недалеко от центра лагеря. Ставится точка патрульного пути с именем: Сталкер тыняется по лагерю без особой цели. Ставится патрульный путь с именем: Можно поставить патрульный путь с точками look (опционально), в том случае, если путь walk содержит в себе только одну вершину: Сталкеры патрулируют периметр лагеря. Ставится патрульный путь с именем: Можно поставить патрульный путь с точками look(опционально), в том случае, если путь walk содержит в себе только одну вершину: Каждый патрульный путь по умолчанию содержит в себе 5 работ, т.е. в патруль могут выйти 5 сталкеров. Это количество можно менять, задавая флаг в нулевой точке этого пути: Сталкеры стоят в точках по краям лагеря, охраняют. Ставится патрульный путь с именем: В этой работе обязательно нужно указывать патрульный путь с точками look: Работа только для чувака, у которого оружие с оптикой. Кемперит рядом с лагерем и стреляет по всему что движется. Ставится точка патрульного пути с именем: В этой работе обязательно нужно указывать патрульный путь с точками look: Обстрел с большого расстояния, при приближении противника переход в универсальный комбат. Ставится патрульный путь с именем: Можно поставить патрульный путь с точками look (опционально), в том случае если путь walk содержит в себе только одну вершину: [имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_ranger_[номер_работы]_look Также нужно указать точку, в которой боец перейдёт в состояние ожидания. Для этого нужно в имени одной из точек пути walk указать: В состоянии ожидания боец некоторое время будет отыгрывать анимацию подготовки к бою. Можно указать точку, в которой он это будет делать. Для этого нужно поставить патрульный путь (из одной точки) с именем: Можно поставить патрульный путь с точкой look (опционально): Если точка перехода в состояние ожидания ближе к целевому смарту, чем 30 метров, то боец перейдёт в состояние ожидания за 30 метров до этого смарта. Если путь ожидания не поставлен — боец будет отыгрывать анимацию подготовки к бою в той точке, в которой он перешёл в состояние ожидания. Сталкеры ломятся толпой в атаку в универсальном комбате. Ставится патрульный путь с именем: Можно поставить патрульный путь с точками look(опционально), в том случае если путь walk содержит в себе только одну вершину: Также нужно указать точку, в которой боец перейдёт в состояние ожидания. Для этого нужно в имени одной из точек пути walk указать: В состоянии ожидания боец некоторое время будет отыгрывать анимацию подготовки к бою. Можно указать точку, в которой он это будет делать. Для этого нужно поставить патрульный путь (из одной точки) с именем: Можно поставить патрульный путь с точкой look (опционально): Если точка перехода в состояние ожидания ближе к целевому смарту, чем 30 метров, то боец перейдёт в состояние ожидания за 30 метров до этого смарта. Если путь ожидания не поставлен – боец будет отыгрывать анимацию подготовки к бою в той точке, в которой он перешёл в состояние ожидания. Чуваки подкрадываются на максимально близкое расстояние к вражескому лагерю и синхронно переходят в универсальный комбат. Ставится патрульный путь с именем: Можно поставить патрульный путь с точками look(опционально), в том случае если путь walk содержит в себе только одну вершину: Также нужно указать точку, в которой боец перейдёт в состояние ожидания. Для этого нужно в имени одной из точек пути walk указать: В состоянии ожидания боец некоторое время будет отыгрывать анимацию подготовки к бою. Можно указать точку, в которой он это будет делать. Для этого нужно поставить патрульный путь (из одной точки) с именем: Можно поставить патрульный путь с точкой look (опционально): Если точка перехода в состояние ожидания ближе к целевому смарту, чем 30 метров, то боец перейдёт в состояние ожидания за 30 метров до этого смарта. Если путь ожидания не поставлен – боец будет отыгрывать анимацию подготовки к бою в той точке, в которой он перешёл в состояние ожидания. Идут к лагерю в патруле, если там пусто, или нападают в рейде, если там враги. Ставится патрульный путь с именем: Можно поставить патрульный путь с точками look(опционально), в том случае если путь walk содержит в себе только одну вершину: Каждый патрульный путь по умолчанию содержит в себе 5 работ, т.е. в патруль могут выйти 5 сталкеров. Это количество можно менять, задавая флаг в нулевой точке этого пути: В каждой точке walk можно задавать анимацию, в которой сталкеры будут идти до следующей точки, иначе они будут идти в состоянии по умолчанию (патруль/рейд). Также нужно указать точку, в которой бойцы перейдут в состояние ожидания. Для этого нужно в имени одной из точек пути walk указать: В состоянии ожидания бойцы некоторое время будут готовиться к бою. Для каждого бойца можно указать смарт-кавер, в котором он это будет делать. Для этого нужно поставить смарт-кавер с именем: Если точка перехода в состояние ожидания ближе к целевому смарту, чем 30 метров, то бойцы перейдут в состояние ожидания за 30 метров до этого смарта. Если смарт-кавер ожидания не поставлен – бойцы будут отыгрывать remark подготовки к бою в той точке, в которой они перешли в состояние ожидания. По окончанию ожидания бойцы снова встанут на путь патруля, по которому дойдут до вражеского лагеря. Желательно, чтобы последняя точка патрульного пути находилась в центре вражеского смарта. По поднятию тревоги занимают позицию для обороны, кемперят, переходят в универсальный комбат при сильном приближении противника Ставится точка патрульного пути с именем: В этой работе обязательно нужно указывать патрульный путь с точками look: По умолчанию кемпер на точке пути находится в сидячем состоянии, т.е. если перед ним кавер, то он присядет и будет тупить, чтобы указать ему стоячее состояние ведения боя, нужно в нулевой вершине патрульного пути указать флажок: По поднятию тревоги занимают позицию для обороны, переходят в универсальный комбат, сидят в out-рестрикторе, в лагере. Ставится точка патрульного пути с именем: Можно поставить патрульный путь с точками look(опционально), в том случае, если путь walk содержит в себе только одну вершину: В этой схеме можно указать сталкеру out_restrictor, чтобы он держался в нем во время универсального комбата. Для этого в нулевой точке пути задаем флаг: name00|out_restr=имя_рестриктора Читайте также:Что такое смарты в сталкере
1. Как заспавнить НПС через алл.спавн знают уже все.
2. Спавнить через смарт для меня лично удобней.
3. ПЫСовцы спавнили сталкеров только через смарты.
Для того чтобы заспавнить НПС необходимо сначала заспавнить смарт_терраин. Создадим секцию в алл.спавне для смарта:Работы универсальных лагерей
kamp — только днём
Для сталкеров: name00|count = количество_мест
Для монстров: name00|mcount = количество_мест
name00|max = радиус_в_метрах
И максимальный радиус (до границ которого они будут преследовать противника):
name00|min = радиус_в_метрахsleep — только ночью
[имя_смарттеррейна]_sleep_[номер_работы]walker — днём и ночью
[имя_смарттеррейна]_walker_[номер_работы]_walk
[имя_смарттеррейна]_walker_[номер_работы]_lookpatrol — днём и ночью
[имя_смарттеррейна]_patrol_[номер_работы]_walk
[имя_смарттеррейна]_patrol_[номер_работы]_look
name00|count = количество_человек_в_патрулеguard — днём и ночью
[имя_смарттеррейна]_guard_[номер_работы]_walk
[имя_смарттеррейна]_guard_[номер_работы]_looksniper — днём, ночью и в состоянии обороны
[имя_смарттеррейна]_sniper_[номер_работы]_walk
[имя_смарттеррейна]_sniper_[номер_работы]_lookranger — только в состоянии атаки
[имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_ranger_[номер_работы]_walk
_точки|sig=arrive_to_wait
[имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_ranger_[номер_работы]_wait_walk
[имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_ranger_[номер_работы]_wait_lookassault — только в состоянии атаки
[имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_assault_[номер_работы]_walk
[имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_assault_[номер_работы]_look
имя_точки|sig=arrive_to_wait
[имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_assault_[номер_работы]_wait_walk
[имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_assault_[номер_работы]_wait_looksneak — только в состоянии атаки
[имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_sneak_[номер_работы]_walk
[имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_sneak_[номер_работы]_look
имя_точки|sig=arrive_to_wait
[имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_sneak_[номер_работы]_wait_walk
[имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_sneak_[номер_работы]_wait_lookpatrol (атака) — только в состоянии атаки
[имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_patrol_[номер_работы]_walk
[имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_patrol_[номер_работы]_look
name00|count = количество_человек_в_патруле
имя_точки|sig=arrive_to_wait
[имя_смарттеррейна]_to_[имя_смарттеррейна_на_который будем_нападать]_patrol_[номер_работы]_wait_[номер_бойца]_smartcovercamper — только в состоянии обороны
[имя_смарттеррейна]_camper_[номер_работы]_walk
[имя_смарттеррейна]_camper_[номер_работы]_look
name00|state=standdefender — только в состоянии обороны
[имя_смарттеррейна]_defender_[номер_работы]_walk
[имя_смарттеррейна]_defender_[номер_работы]_look