Все посты %s в %S - AMK Team
Перейти к контенту

Скриптование


Svoboда

Рекомендуемые сообщения

В логике есть схема проверки на присутствие конкретного нпс в спейс-рестрикторе:

on_npc_in_zone = npc_story_id | restrictor_name | scheme

А как сделать чтобы условие срабатывало на любого нпс, а не на конкретного?

Поделиться этим сообщением


Ссылка на сообщение

Руслан, логику тут можно и не писать, это в аллспавне (или в сдк) нужно создать путь для движения и обозвать его как работу для смарта, тогда нпс в смарте автоматически будут становится на эту работу, ходить по пути. Допустим смарт террейн у тебя называется 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.

Поделиться этим сообщением


Ссылка на сообщение

Gektor, можно конечно, секция будет выглядеть так:

 

[animpoint@нужное_название]

cover_name = название_смарт_кавера

avail_animations = sleep; - название нужной анимации.

 

А вот можно ли в такой секции прописывать звуки, которые будет издавать нпс и как это сделать хотелось бы и мне узнать.

Поделиться этим сообщением


Ссылка на сообщение

Gektor, а что конкретно не срабатывает? НПС вообще под логику не берется или анимпоинт занимает, но нужную анимацию не играет?

Да и еще, это ты случайно не посиделки-болталки у костра пытаешься делать?

Поделиться этим сообщением


Ссылка на сообщение

Ну, для начала, чтобы в ЗП была анимация 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 мин.:

А если висят в воздухе, значит координаты смарт-кавера неправильные.

Изменено пользователем Clayman

Поделиться этим сообщением


Ссылка на сообщение

Да нет же, все работает. Шаманство со скриптами нужно чтобы добавить в анимпоинты недостающие анимации. А чтобы использовать стандартные из файла 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], но в таком виде все должно работать.

Поделиться этим сообщением


Ссылка на сообщение

А какое имя смарткавера? Как в примере выше? Измени его на другое, т.к. имена смарткаверов типа смарттеррейн_animpoint_1 и.т.д используются как раз для автоматического "заполнения" нпс смарт-каверов в смарт-террейне.

Поделиться этим сообщением


Ссылка на сообщение

Странно.. а ты в СДК ставишь смарт-каверы? Покажи скрин тогда настроек смарт-кавера.

Поделиться этим сообщением


Ссылка на сообщение

Странно, вроде все ок, почему не работает - непонятно. Ну и последний вопрос - смарткавер на аи-сетке стоит?

Попробуй простейшую логику для одного непися сделать, как я написал и посмотри. Но опять же, я повторю - для посиделок у костра никакой логики не нужно! Достаточно обзывать смарт-каверы смарт_animpoint_1 и накрыть их кампом с именем смарт_camp и настройками в кастом дате:

[camp]

cfg = scripts\camp.ltx

 

Поделиться этим сообщением


Ссылка на сообщение

Ну это то, о чем я говорил, нужно менять скрипты для анимпоинтов. Короче, если решишься, делаешь так:

Качаем вот это архив - 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 коньяк :)

 

Да, еще, направление взгляда нпс в этих каверах будет куда флажок в сдк показывает. Удачи!

Поделиться этим сообщением


Ссылка на сообщение
Gektor, надо связывать флаги точек путей walk и look, т.е в режиме редактирования point mode кликаешь на точке и отмечаешь галочку на флаге 0 например и тоже самое на точке look пути. Вобщем опять же учим матчасть на сталкервики "Логика НПС", там все это есть.

Поделиться этим сообщением


Ссылка на сообщение
Но в любом случае отсутствие AI-сетки там, где хочется чтобы ходили - влечет за собою перекомпиляцию уровня.

Достаточно перекомпилировать аи-сетку и спавн, что совсем недолго. Я так эксперементировал с бункером сидорыча на кордоне, когда хотел посадить туда обычного непися а не сидора, изначально там нету аи-сетки - добавил несколько нодов, вэй поинт для спавна, анимпоинт на стул (в ЗП) и вуаля - новый непись прекрасно спавнился и сидел там.

Другое дело, что не во все дома добавишь корректно ноды сетки, так как она-же определенного размера и иногда не попадает (не влазит) в проходы..что может вызвать некорректное движение нпс..

 

В процитированных словах есть упоминание про полную перекомпиляцию?

В исходном вопросе звучало про нежелательность 'редактирования уровня' ...

Под 'перекомпиляцией уровня' мною подразумевалось (см. контекст) именно создание необходимой AI-сетки для уровня и перекомпиляция/редактирование всего, на что это влияет.

--/ Artos

Изменено пользователем Artos

Поделиться этим сообщением


Ссылка на сообщение

Вопрос (для ЗП):

В xr_effects есть функция проверки существования сквада squad_exist(SID сквада).

А можно ли написать функцию проверки существования симуляционных сквадов (которые без sid) на определенной локации? Подскажите, кто разбирается.

 

Добавлено через 118 мин.:

Сорри, очепятался, в xr_conditions....

Поделиться этим сообщением


Ссылка на сообщение
Artos, я вроде все точно сформулировал, ок, давай сформулирую точнее - можно ли проверить, есть ли на локации хоть один из сквадов с определенным именем, а не сид-ом. Допустим у меня респавнится сквад с именем sim_squad_1, у него нету ни target_smart, ни story_id, он симуляционный, т.е. шляется по локации и ищет приключения на свою задницу. Более того, в респавне может быть не один сквад с таким именем в одно и то-же время, т.е. если их 2 или более отреспавнились. Вот и нужна проверка, есть ли на локации хоть один сквад с именем sim_squad_1. Конкретней некуда уже;) Изменено пользователем Clayman

Поделиться этим сообщением


Ссылка на сообщение

Artos, спасибо за помощь, я уже понял, какое я ничтожество :D

Кто-то еще на форуме может по существу помочь...написать за меня эту функцию, так я на это не способен. Можно в личку.

Поделиться этим сообщением


Ссылка на сообщение

Кстати, в сдк при установки шейпа по умолчанию стоит сфера, а не бокс. А рестрикторы разрабы ведь именно в СДК делали, не так-ли? Сорри, что влез в беседу, просто тоже интересно стало, почему на ТЧ-уровнях черз кострища проходят ноды АИ-сетки. Ведь самый простой способ ограничить нпс от попаданий в костер - убрать оттуда аи-сетку, на ЗП и ЧН локациях именно так и сделано. Но это уже оффтоп...

Поделиться этим сообщением


Ссылка на сообщение

Прошу не пинать за нубские вопросы, скриптинг только осваиваю.

Вопрос по 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?

Поделиться этим сообщением


Ссылка на сообщение

к слову сказать, рестрикторы со сферическим шейпом в этом смысле намного предпочтительней боксов

Интересно узнать, почему? Я все время думал наоборот, исходя из логики: объект бокса имеет меньше полигонов (которые нужно проверять) чем сфера.

Поделиться этим сообщением


Ссылка на сообщение

Теперь понятно, а бокс как программно проверяется? Ну просто интересно, раз-уж поднял тему :))

 

Как можно "нарисовать" параллелепипед, если известны координаты его центра, длина, ширина и высота?

Здесь разница в алгоритмах построения не более, очевидно, что сферу "построить" легче.

ColR_iT

Изменено пользователем ColR_iT

Поделиться этим сообщением


Ссылка на сообщение

malandrinus, спасибо, это и было интересно :)

Я тут согласен с ColR_iT, в том плане, что наверное действительно стоит открыть отдельную тему, которая касается именно оптимизации игры. Потому как многие наверное сталкиваются с тем, что при расширении мира и наполнении контентом, не говоря уже о скриптовых и геймплейных фичах, возрастает многократно нагрузка и соответственно лаги. Думаю, полезно будет обсуждать, делиться советами и наработками по оптимизации и улучшению чего бы то ни было: скриптов и кода, спавна, какие то хитрости и свои метода, работа с графикой и прочее.

Потрите пост, если оффтоп.

  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...