Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Спавн и логика
denis2000Дата: Пн, 10.10.2011, 21:20 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Спавн и логика

Создание объектов на локации и логика поведения этих объектов

Если у вас появились вопросы по созданию динамических объектов в игре (НПС, монстры, аномалии, и т.п.) и настройке их "поведения". Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7

Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML
[cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл:
1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R])
2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx"
3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо)
Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#"
Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]

[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти?
Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда.
Для того чтоб найти LOG необходимо зайти вот сюда:

В Win хр лог находится:

C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs

Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.

В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs

Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка:
...
$app_data_root$ = true | false| $fs_root$| users\
(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx)
...
$logs$ = true| false| $app_data_root$| logs\
(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи)
...
[/cut][cut=Получение более подробной информации о вылете (ХОВАН)]
Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...)
Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так:
Code
function abort(fmt, ...)
                    local reason = string.format(fmt, ...)
                    error_log(reason)
end

Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией

Первый:
Code
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil)

Второй:
Code
Expression    : 0
Function      : ErrorLog
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp
Line          : 49
Description   : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic'

[/cut]


Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы,
статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
alex_xp_77Дата: Сб, 05.04.2014, 14:06 | Сообщение # 856
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
Награды: 6
Репутация: [ 41 ]

Всем Доброго Дня!!Хотел попросить небольшой помощи у более квалифицированных коллег, смотрел на некоторых уроках как нпс сидит на ящике, краю бетонного перекрытия, стуле, и т.д. и т.п. прошу пояснения, напримел для спавна нпс нужна логика, например:
[logic]
active=walker

[walker]
path_walk=pri_stalker_1_walk
path_look=pri_stalker_1_look
Все работает как часы, но как прописать сидячего сталкера, по точкам там надо прописать вот это
Сидячие состояния:
|a=sit
Но как анимировать?? Может кто нибудь обьяснит как заспавнить сидячего НПС?? Заранее большое спасибо!


 
denis2000Дата: Сб, 05.04.2014, 15:47 | Сообщение # 857
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

alex_xp_77, Используте схемы kamp, camper или даже remark, на крайний случай и walker сгодиться, но тогда на точках куда смотрит должен быть флаг a=sit или sit_knee или sit_ass и т.д.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
NIVДата: Сб, 05.04.2014, 21:32 | Сообщение # 858
Полевой исследователь
Ученые сталкеры
Сообщений: 167
Награды: 4
Репутация: [ 180 ]

Здравствуйте, подскажите пожалуйста, как правильно прописать логику мутанту для отыгрывания анимации и звука? Например, псевдособака ест (анимация) и чавкает (звук).
Делал так:
1) в ActorEditor открыл файл псевдособаки .object, подключил анимацию .skls, получил список анимаций, штук 50. В частности stand_eat_0 и _1. 2) Написано, что для псевдособаки sound_eat = monsters\pseudodog\pdog_chew_. Зарегистрировал этот звук под другим названием [dog_domest_eat]. 3) На Инсайде написано, что анимации играются в mob_remark, написал так:
Код
[mob_companion@run]
on_info = {+dog_eats_kolbasa} mob_remark@eat

[mob_remark@eat]
anim = stand_eat
snd = dog_domest_eat (еще пробовал ставить sound_eat)
on_game_timer = 80 | mob_companion@run %-actor_give_kolbasa -dog_eats_kolbasa =remove_kolbasa +dog_domest_ko_mne%


Во-первых, происходит вылет
Код
[error]Description   : ...lishing\stalker3p\gamedata\scripts\mob_remark.script:44: attempt to index global 'mob_sound' (a nil value)
.
В mob_remark написано, что звуки берутся из self.st.snd. Как их получить? Я не понял.

Во-вторых, если звук не указывать, то хотя и вылета нет, но анимация не проигрывается. Псевдособака отображает, по видимому, анимацию stand_idle, которая была в секции mob_companion.

Не нашел в оригинале ЗП примера по использованию секции mob_remark и прошу вашего совета - как всё-таки воспроизвести анимацию и звук?

--------------------------------------------------------------------------------------------------------------------------------------------
Добавлено (05.04.2014, 21:32)
[cut]alex_xp_77, я понял вопрос так - как сделать, чтобы НПС сидел, например на стуле, а не на земле.
Тогда: делаем в all.spawn лагерь и в нём анимпойнт (Урок 18 КБМ). В анимпойнте пишем:
Код
; cse_smart_cover properties
description = animpoint_sit_normal
hold_position_time = 0
enter_min_enemy_distance = 15
exit_min_enemy_distance = 10

; se_smart_cover properties
last_description = animpoint_sit_normal --это по-моему - сидеть на стуле
loopholes = animpoint_sit_normal, 1


Эта работа будет доступна по умолчанию.

Либо смотрим, как было сделано у Зулуса через логику (jup_b202_stalker_zulus.ltx) или на Инсайде - Скрипты/CoP: Описание стандартных анимпоинтов
Код
[animpoint@zulus_basic]
cover_name = jup_b15_sc_zulus
avail_animations = jup_b15_zulus_sit_idle


Найди смарт-кавер jup_b15_sc_zulus в alife_jupiter.ltx

В общем, надо пробовать, тогда получится, даже если и не сразу.[/cut]

В ТЧ нет анимпоинтов, так что ответ мимо кассы. denis2000

[off]Без сомнения, мой левел экстрасенса меньше, чем ваш :). Я думал - у товарища ЗП. [/off]


Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"

Сообщение отредактировал NIV - Вс, 06.04.2014, 09:22
 
denis2000Дата: Вс, 06.04.2014, 12:33 | Сообщение # 859
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

NIV, Глобально причина в том что эта логика не применяется со времен ЧН (да и там была задействована в тестовом режиме на вырезанной локации Генераторы: configs\scripts\generator\gen_snorks_logic.ltx). Придется исправлять ситуацию: переносить скрипты и править существующие.

Цитата NIV ()
о-первых, происходит вылет

Причина в отсутствии скрипта mob_sound.script. Попробуйте скопировать его из ЧН.

В скрипте заявлено три параметра для анимации:
"anim" - строка, видимо набор анимаций тела,
"anim_movement" - бинарный параметр, определяет двигается ли объект в координатах локации в момент анимации,
"anim_head" - набор анимаций головы.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
NIVДата: Ср, 09.04.2014, 06:29 | Сообщение # 860
Полевой исследователь
Ученые сталкеры
Сообщений: 167
Награды: 4
Репутация: [ 180 ]

denis2000, в ЧН есть интересный файл mob_trader.script, там прописаны анимации торговца. Возможно надо аналогично добавить анимации в mob_remark? Пробую, пока безуспешно.

Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
 
denis2000Дата: Чт, 10.04.2014, 11:03 | Сообщение # 861
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

NIV, По крайней мере можете использовать схему mob_walker, и прописать анимации на точках look - это работает, но только количество ментал-стейт ограничено: attack; capture_prepare; danger; eat; free; lie_idle; look_around; panic; rest; sit_idle; sleep; stand_idle; turn.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Пн, 14.04.2014, 23:25 | Сообщение # 862
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер. Каким образом в рестрикторе можно организовать эффект удара по голове и потерю сознания у ГГ?
 
FantomICWДата: Пн, 14.04.2014, 23:56 | Сообщение # 863
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

sergej5500, Сергей, добрый вечер. Вариантов много. Я могу сбросить несколько различных вариаций подобного действа, но было бы лучше определится более точно с эффектом...Рекомендую просмотреть с помощью СГМовского ui_mod_elements.effect_player(), который можно разблокировать и запустить через ui_main_menu.script.


 
sergej5500Дата: Вт, 15.04.2014, 00:42 | Сообщение # 864
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер. Сделал НПС с логикой.

[cut=Логика][logic]
active = move@clofelin

[move@clofelin]
meet = meet
move_stop_on_talk = true

[meet]
abuse = true
use = {=see_actor =dist_to_actor_le(8)} self,false
allow_break = false
meet_on_talking = false
trade_enable = false[/cut]

При приближении к ГГ он должен завести разговор. Это все работает. Но данный НПС с кастом-датой должен спавниться в составе сквадов симуляционных сталкеров. Спавн проходит нормально. Но НПС почему-то не хочет двигаться вместе со сквадом. Отделяется от него.

Есть мысль сделать сталкеров-"клофелинщиков". После начала диалога выдается инфопоршень. ГГ телепортируется на край локации без оружия и снаряги. Это все работает. Чтобы "клофелинщика" было труднее выявить, хочу спавнить их в составе симуляционных сквадов. Для них сделан специальный профиль с кастом-датой для того, чтобы они заводили разговор первыми. Но "клофелинщики" отделяются от сквадов. Можно это как-то исправить? Или есть другие варианты логики, не xr_move?

Это противоречивое задание или в скваде или с логикой (хотя в принципе это и можно изменить переделав скрипты). Используйте например эксклюзивную логику на смартах для назначения работы клофелинщиком одному из членов сквада занявшему данный смарт. Эта логика естественно будет действовать только на смарте. denis2000

FantomICW,
Глеб, добрый вечер. Хотелось бы после определенной инфопорции получить удар прикладом, темный экран. Затем пошатывание и покачивание ГГ.

В Spectrum Project в первом-же диалоге, ГГ получает по морде со всеми последствиями. denis2000
 
ДовакинДата: Сб, 19.04.2014, 10:52 | Сообщение # 865
Командир д.г. быстрого реагирования
Пользователи
Сообщений: 688
Награды: 14
Репутация: [ 552 ]

Здравствуйте. При создании смарта в деревне новичков на Кордоне, НПС не хотят занимать анимпоинты. Как решить эту проблему?

[cut noguest=Алл.Спавн]
[20003]
; cse_abstract properties
section_name = smart_terrain
name = esc_a1_smart
position = -206.718155,-19.708115,-140.413208
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 934
distance = 0.5
level_vertex_id = 25
object_flags = 0xffffff3e
custom_data = <<END
[story_object]
story_id = esc_a1_smart

[smart_terrain]
cfg = scripts\escape\smart\esc_a1_smart.ltx
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 2.50760293006897

; cse_alife_space_restrictor properties
restrictor_type = 3

; se_smart_terrain properties

[20004]
; cse_abstract properties
section_name = camp_zone
name = esc_a1_smart_camp
position = -206.718155,-19.708115,-140.413208
direction = -0.0193850006908178,-0.000144000005093403,-0.00741699989885092

; cse_alife_object properties
game_vertex_id = 934
distance = 0
level_vertex_id = 25
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

[20005]
; cse_abstract properties
section_name = smart_cover
name = esc_a1_smart_animpoint_1
position = -209.265015,-19.897654,-138.400360
direction = 0,0,0
; cse_alife_object properties
game_vertex_id = 934
distance = 0
level_vertex_id = 25
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

[20006]
; cse_abstract properties
section_name = smart_cover
name = esc_a1_smart_animpoint_2
position = -204.966522,-19.997036,-139.685226
direction = 0,0,0
; cse_alife_object properties
game_vertex_id = 934
distance = 0
level_vertex_id = 25
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
[/cut]

[cut noguest=Логика Смарта]
[smart_terrain];esc_a1_smart
squad_id = 1
max_population = 2
respawn_params = respawn@esc_a1

[respawn@esc_a1]
sim_stalker

[sim_stalker]
spawn_squads = stalker_sim_squad_novice
spawn_num = 2

[animpoint@esc_a1_smart_animpoint]
cover_name = esc_a1_smart_animpoint_1, esc_a1_smart_animpoint_2
[/cut]


 
NIVДата: Сб, 19.04.2014, 11:36 | Сообщение # 866
Полевой исследователь
Ученые сталкеры
Сообщений: 167
Награды: 4
Репутация: [ 180 ]

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

В вашем примере я ни в одной секции не вижу параметров version и script_version.
Так, для ЗП:
Код
version = 128
script_version = 12

Для ТЧ:
Код
version = 118
script_version = 6

Для ЧН:
Код
version = 124
script_version = 8


Это может быть важно.

Также для ЗП не обязательно писать в конфиге [animpoint@esc_a1_smart_animpoint], тем более, что на эту строку вы нигде не ссылаетесь.

Ну и конечно, у НПС target_smart должен совпадать с вашим (esc_a1_smart)


Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"

Сообщение отредактировал NIV - Сб, 19.04.2014, 11:38
 
sergej5500Дата: Ср, 23.04.2014, 23:03 | Сообщение # 867
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер. Написал рестриктор.

[cut=Логика][logic]
active = sr_idle@1

[sr_idle@1]
on_info = sr_idle@2

[sr_idle@2]
on_info = sr_idle@3

[sr_idle@3]
on_info = sr_idle@1 %=исполняемая функция%[/cut]

Исполняемая ф-ия должна вызываться регулярно в процессе игры. Вопросы такие. Как часто проверяются секции рестриктора? Сколько раз в секунду будет вызываться ф-ия при трехсекционной логике?

Еще интересует такой момент. Допустим, в рестрикторе есть таймер и ф-ия вызывается один раз в секунду реального времени. Возможны ли сбои из-за эффекта Киборга? В СГМ довольно часто Киборг "зависает" из-за переполнения движкового таймера.
 
denis2000Дата: Чт, 24.04.2014, 11:23 | Сообщение # 868
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата sergej5500 ()
Как часто проверяются секции рестриктора?

Как придется, поскольку биндер работает не по таймеру, а в режиме периодического опроса.
Цитата sergej5500 ()
Сколько раз в секунду будет вызываться ф-ия при трехсекционной логике?

От 5-9 раз в секунду до одного раза в несколько секунд. Причем период сильно зависит как от загруженности скриптового движка, так и от ... расстояния до рестриктора.
Цитата sergej5500 ()
из-за переполнения движкового таймера

Если вы действительно имеете ввиду движковый таймер, то он обязан переполняться поскольку в дискретной системе нет безразмерных переменных, а глюки связаны с неправильным программированием работы с таймерами программистов!


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
alex_xp_77Дата: Сб, 26.04.2014, 17:33 | Сообщение # 869
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
Награды: 6
Репутация: [ 41 ]

Добрый день всем, у меня вопрос, в самом sdk есть, кошка, химера, излом, скажите как отразить их в панели сдк, у меня их нет в панели, что бы заспавнить, обьясните пожалуйста, вот такие файлы есть: http://SSMaker.ru/b442340e/ чего то наверно не хватает для спавна этих мутантов, пытался ковертировать в object, после попытался заспавнить, но костом дата отсутствует, (это где логику в sdk прописывать), вот тут:http://SSMaker.ru/e911ea50/ , сама модель в ogf текстуры есть тут: http://SSMaker.ru/a5e1fe8e/ ,но почему то не вижу ее, помогите пожалуста разобраться!!Заранее благодарен за чью либо помощь в столь нелегком вопросе!!!(прошу прощения администраторов если не по теме)

 
denis2000Дата: Сб, 26.04.2014, 19:10 | Сообщение # 870
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

alex_xp_77, Добавьте спавн-секции этих мутантов в gamedata SDK.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
Поиск: