Clayman 104 Опубликовано 24 Марта 2011 В логике есть схема проверки на присутствие конкретного нпс в спейс-рестрикторе: on_npc_in_zone = npc_story_id | restrictor_name | scheme А как сделать чтобы условие срабатывало на любого нпс, а не на конкретного? Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 22 Июня 2011 Руслан, логику тут можно и не писать, это в аллспавне (или в сдк) нужно создать путь для движения и обозвать его как работу для смарта, тогда нпс в смарте автоматически будут становится на эту работу, ходить по пути. Допустим смарт террейн у тебя называется zat_a1, тогда делаешь пути с работами zat_a1_walker_1 walk ( zat_a1_walker_1 look), zat_a1_patrol_1 walk ( zat_a1_patrol_1 look) и так далее, подробней читаем тут - http://stalkerin.gameru.net/wiki/index.php...%80%D0%B5%D0%B9 Только для ЗП некоторые не используются работы, например kamp. Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 1 Июля 2011 Gektor, можно конечно, секция будет выглядеть так: [animpoint@нужное_название] cover_name = название_смарт_кавера avail_animations = sleep; - название нужной анимации. А вот можно ли в такой секции прописывать звуки, которые будет издавать нпс и как это сделать хотелось бы и мне узнать. Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 2 Июля 2011 Gektor, а что конкретно не срабатывает? НПС вообще под логику не берется или анимпоинт занимает, но нужную анимацию не играет? Да и еще, это ты случайно не посиделки-болталки у костра пытаешься делать? Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 2 Июля 2011 (изменено) Ну, для начала, чтобы в ЗП была анимация sit_ass я устанавливал скрипты от комрада nuclia. Для посиделок у костра, логику не нужно писать, достаточно поставить анимпоинты с установленной анимацией и накрыть это дело камп-зоной, тогда нпс будут в смарте автоматом как работы занимать эти анимпоинты и травить истории и лабать тяжелый рок на гитаре Цитирую урок от Nuclia: Смарт-каверы в ЗП. Применяются в основном в двух случаях: 1.- вместо точек путей в логике эксклюзивов. 2.- для кампов - посиделки у костра. Начнем с посиделок.Добавим в олл.спавн в зону нужного нам смарт-террейна несколько смарт-каверов и камп-зону "alife_zaton.ltx" [20001] ; cse_abstract properties section_name = camp_zone name = zat_a1_camp position = 241.788421630859,14.009066619873,467.594360351563 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 6 distance = 0 level_vertex_id = 1382565 object_flags = 0xffffff3e custom_data = <<END [camp] cfg = scripts\camp.ltx END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 5.84479999542236 ; cse_alife_space_restrictor properties restrictor_type = 3 [20002] ; cse_abstract properties section_name = smart_cover name = zat_a1_animpoint_1 position = 241.788421630859,14.009066619873,466.594360351563 direction = 0,3.13,0 ; cse_alife_object properties game_vertex_id = 6 distance = 0 level_vertex_id = 1382565 object_flags = 0xffffffbf ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 2 ; cse_smart_cover properties cse_smart_cover__unk1_sz = animpoint_sit_low cse_smart_cover__unk2_f32 = 0 enter_min_enemy_distance = 15 exit_min_enemy_distance = 10 ; se_smart_cover properties last_description = animpoint_sit_low loopholes = animpoint_sit_low,1 [20003] ; cse_abstract properties section_name = smart_cover name = zat_a1_animpoint_2 position = 240.788421630859,14.009066619873,468.594360351563 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 6 distance = 0 level_vertex_id = 1382565 object_flags = 0xffffffbf ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 2 ; cse_smart_cover properties cse_smart_cover__unk1_sz = animpoint_sit_low cse_smart_cover__unk2_f32 = 0 enter_min_enemy_distance = 15 exit_min_enemy_distance = 10 ; se_smart_cover properties last_description = animpoint_sit_low loopholes = animpoint_sit_low,1 [20004] ; cse_abstract properties section_name = smart_cover name = zat_a1_animpoint_3 position = 242.788421630859,14.009066619873,468.594360351563 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 6 distance = 0 level_vertex_id = 1382565 object_flags = 0xffffffbf ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 2 ; cse_smart_cover properties cse_smart_cover__unk1_sz = animpoint_sit_low cse_smart_cover__unk2_f32 = 0 enter_min_enemy_distance = 15 exit_min_enemy_distance = 10 ; se_smart_cover properties last_description = animpoint_sit_low loopholes = animpoint_sit_low,1 Все - лагерь для посиделок готов, собираем все с предыдущими наработками. Важный момент - шейп камп-зоны должен покрывать смарт-каверы, иначе получатся слишком скучные посиделки - не будут травить анекдоты и прочее. За направление взгляда отвечает дирекшн смарт-кавера. Попробуй сделать пока так, с анимацией sit_low. Добавлено через 1 мин.: А если висят в воздухе, значит координаты смарт-кавера неправильные. Изменено 2 Июля 2011 пользователем Clayman Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 2 Июля 2011 Да нет же, все работает. Шаманство со скриптами нужно чтобы добавить в анимпоинты недостающие анимации. А чтобы использовать стандартные из файла state_lib.script достаточно сделать секцию логики как я выше писал. И неважно что прописано в настройкахх смарт-кавера в сдк (аллспавне). Вот пример простейшей логики, я сделал научника в лагере новичков на кордоне, который днем бродит вокруг аномалии с детектором а ночью идет спать в лагерь новичков. Для дневной работы сделал обычный путь, а для сна что-то лень было ставить вей-поинт, ткнул смарт-кавер в нужном месте (анимация в сдк прописана любая, вроде sit_low). [logic@esc_sci] suitable = {=check_npc_name(esc_sci)} active = walker@esc_sci prior = 100 [walker@esc_sci] path_walk = walker_1_walk path_look = walker_1_look on_info = {!is_day} animpoint@esc_sci [animpoint@esc_sci] cover_name = esc_sci_sleep_smart_cover avail_animations = sleep on_info = {=is_day} walker@esc_sci И все работает. Ну на самом деле это я упрощенный вариант привел, там у меня еще секции на случай выбросов добавлены, куды ему бежать, секции [meet], но в таком виде все должно работать. Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 2 Июля 2011 А какое имя смарткавера? Как в примере выше? Измени его на другое, т.к. имена смарткаверов типа смарттеррейн_animpoint_1 и.т.д используются как раз для автоматического "заполнения" нпс смарт-каверов в смарт-террейне. Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 2 Июля 2011 Странно.. а ты в СДК ставишь смарт-каверы? Покажи скрин тогда настроек смарт-кавера. Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 2 Июля 2011 Странно, вроде все ок, почему не работает - непонятно. Ну и последний вопрос - смарткавер на аи-сетке стоит? Попробуй простейшую логику для одного непися сделать, как я написал и посмотри. Но опять же, я повторю - для посиделок у костра никакой логики не нужно! Достаточно обзывать смарт-каверы смарт_animpoint_1 и накрыть их кампом с именем смарт_camp и настройками в кастом дате: [camp] cfg = scripts\camp.ltx Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 2 Июля 2011 Ну это то, о чем я говорил, нужно менять скрипты для анимпоинтов. Короче, если решишься, делаешь так: Качаем вот это архив - http://depositfiles.com/files/4ijntt4ly, там скрипты. Заменяешь ими в папке gamedata/scripts в игре и обязательно в СДК-шной геймдате, иначе у тебя не появится в списке доступных анимаций для смарткавера sit_ass и sit_knee. Далее перезагружаешь сдк, ставишь смарт-каверы, называешь как положено смарт_animpoint_1 и.т.д. Выбираешь для них сидячие анимации sit_ass и sit_knee. На sit_ass СДК начнет матюкаться красным что дескать отсутствует loopholes, не обращай внимания. Сними галку loopholes, чтобы потом при загрузке уровня каждый раз эти логи красные не видеть, в игре все равно анимация будет работать. Обязательно снять галки с is combat caver и can fire, иначе при компиляции спавна с камп-зоной будут вылеты компилятора. Ну а дальше накрываешь это дело кампом, как грил выше, у кампа выберешь тип рестриктора NOT A restrictor (незнаю почему, но у пысов так), компилишь, спавн, наслаждаешься посиделками у костра, покупаешь мне и nuclia коньяк Да, еще, направление взгляда нпс в этих каверах будет куда флажок в сдк показывает. Удачи! Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 3 Июля 2011 Gektor, надо связывать флаги точек путей walk и look, т.е в режиме редактирования point mode кликаешь на точке и отмечаешь галочку на флаге 0 например и тоже самое на точке look пути. Вобщем опять же учим матчасть на сталкервики "Логика НПС", там все это есть. Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 6 Сентября 2011 (изменено) Но в любом случае отсутствие AI-сетки там, где хочется чтобы ходили - влечет за собою перекомпиляцию уровня. Достаточно перекомпилировать аи-сетку и спавн, что совсем недолго. Я так эксперементировал с бункером сидорыча на кордоне, когда хотел посадить туда обычного непися а не сидора, изначально там нету аи-сетки - добавил несколько нодов, вэй поинт для спавна, анимпоинт на стул (в ЗП) и вуаля - новый непись прекрасно спавнился и сидел там. Другое дело, что не во все дома добавишь корректно ноды сетки, так как она-же определенного размера и иногда не попадает (не влазит) в проходы..что может вызвать некорректное движение нпс.. В процитированных словах есть упоминание про полную перекомпиляцию? В исходном вопросе звучало про нежелательность 'редактирования уровня' ... Под 'перекомпиляцией уровня' мною подразумевалось (см. контекст) именно создание необходимой AI-сетки для уровня и перекомпиляция/редактирование всего, на что это влияет. --/ Artos Изменено 6 Сентября 2011 пользователем Artos Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 18 Марта 2012 Вопрос (для ЗП): В xr_effects есть функция проверки существования сквада squad_exist(SID сквада). А можно ли написать функцию проверки существования симуляционных сквадов (которые без sid) на определенной локации? Подскажите, кто разбирается. Добавлено через 118 мин.: Сорри, очепятался, в xr_conditions.... Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 18 Марта 2012 (изменено) Artos, я вроде все точно сформулировал, ок, давай сформулирую точнее - можно ли проверить, есть ли на локации хоть один из сквадов с определенным именем, а не сид-ом. Допустим у меня респавнится сквад с именем sim_squad_1, у него нету ни target_smart, ни story_id, он симуляционный, т.е. шляется по локации и ищет приключения на свою задницу. Более того, в респавне может быть не один сквад с таким именем в одно и то-же время, т.е. если их 2 или более отреспавнились. Вот и нужна проверка, есть ли на локации хоть один сквад с именем sim_squad_1. Конкретней некуда уже Изменено 18 Марта 2012 пользователем Clayman Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 18 Марта 2012 Artos, спасибо за помощь, я уже понял, какое я ничтожество Кто-то еще на форуме может по существу помочь...написать за меня эту функцию, так я на это не способен. Можно в личку. Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 30 Марта 2012 Кстати, в сдк при установки шейпа по умолчанию стоит сфера, а не бокс. А рестрикторы разрабы ведь именно в СДК делали, не так-ли? Сорри, что влез в беседу, просто тоже интересно стало, почему на ТЧ-уровнях черз кострища проходят ноды АИ-сетки. Ведь самый простой способ ограничить нпс от попаданий в костер - убрать оттуда аи-сетку, на ЗП и ЧН локациях именно так и сделано. Но это уже оффтоп... Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 20 Ноября 2012 Прошу не пинать за нубские вопросы, скриптинг только осваиваю. Вопрос по level.map_add_object_spot() и level.map_add_object_spot_ser(). Собственно исходя из справочной инфы все понятно, но такие нюансы: В ЗП для отображения меток на объектах используется именно level.map_add_object_spot в pda.script (функция fill_primary_objects()), которая берет список объектов из таблицы и как я понял, апдейтится постоянно. Собственно почему нельзя было один раз в начале игры проставить все метки level.map_add_object_spot_ser? Это связано с ресурсами и производительностью? Просто с заполнением новых локаций что будет экономней для ресурсов - проставить те-же 10-20 меток один раз вызвав level.map_add_object_spot_ser() или раздувать таблицу в pda.script? Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 17 Января 2013 к слову сказать, рестрикторы со сферическим шейпом в этом смысле намного предпочтительней боксов Интересно узнать, почему? Я все время думал наоборот, исходя из логики: объект бокса имеет меньше полигонов (которые нужно проверять) чем сфера. Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 17 Января 2013 (изменено) Теперь понятно, а бокс как программно проверяется? Ну просто интересно, раз-уж поднял тему ) Как можно "нарисовать" параллелепипед, если известны координаты его центра, длина, ширина и высота? Здесь разница в алгоритмах построения не более, очевидно, что сферу "построить" легче. ColR_iT Изменено 17 Января 2013 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
Clayman 104 Опубликовано 18 Января 2013 malandrinus, спасибо, это и было интересно Я тут согласен с ColR_iT, в том плане, что наверное действительно стоит открыть отдельную тему, которая касается именно оптимизации игры. Потому как многие наверное сталкиваются с тем, что при расширении мира и наполнении контентом, не говоря уже о скриптовых и геймплейных фичах, возрастает многократно нагрузка и соответственно лаги. Думаю, полезно будет обсуждать, делиться советами и наработками по оптимизации и улучшению чего бы то ни было: скриптов и кода, спавна, какие то хитрости и свои метода, работа с графикой и прочее. Потрите пост, если оффтоп. 1 Поделиться этим сообщением Ссылка на сообщение