Модостроение. Спавн и логика
|
|
denis2000 | Дата: Пн, 10.10.2011, 21:20 | Сообщение # 1 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Спавн и логика Создание объектов на локации и логика поведения этих объектов Если у вас появились вопросы по созданию динамических объектов в игре (НПС, монстры, аномалии, и т.п.) и настройке их "поведения". Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (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 по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
alex_xp_77 | Дата: Сб, 05.04.2014, 14:06 | Сообщение # 856 |
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
| Всем Доброго Дня!!Хотел попросить небольшой помощи у более квалифицированных коллег, смотрел на некоторых уроках как нпс сидит на ящике, краю бетонного перекрытия, стуле, и т.д. и т.п. прошу пояснения, напримел для спавна нпс нужна логика, например: [logic] active=walker
[walker] path_walk=pri_stalker_1_walk path_look=pri_stalker_1_look Все работает как часы, но как прописать сидячего сталкера, по точкам там надо прописать вот это Сидячие состояния: |a=sit Но как анимировать?? Может кто нибудь обьяснит как заспавнить сидячего НПС?? Заранее большое спасибо!
|
|
|
Эти 0 пользователя(ей) поблагодарили alex_xp_77 за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 05.04.2014, 15:47 | Сообщение # 857 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| alex_xp_77, Используте схемы kamp, camper или даже remark, на крайний случай и walker сгодиться, но тогда на точках куда смотрит должен быть флаг a=sit или sit_knee или sit_ass и т.д.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
NIV | Дата: Сб, 05.04.2014, 21:32 | Сообщение # 858 |
Полевой исследователь
Ученые сталкеры
Сообщений: 167
| Здравствуйте, подскажите пожалуйста, как правильно прописать логику мутанту для отыгрывания анимации и звука? Например, псевдособака ест (анимация) и чавкает (звук). Делал так: 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 |
|
|
Эти 0 пользователя(ей) поблагодарили NIV за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 06.04.2014, 12:33 | Сообщение # 859 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| NIV, Глобально причина в том что эта логика не применяется со времен ЧН (да и там была задействована в тестовом режиме на вырезанной локации Генераторы: configs\scripts\generator\gen_snorks_logic.ltx). Придется исправлять ситуацию: переносить скрипты и править существующие.
Цитата NIV ( ) о-первых, происходит вылет Причина в отсутствии скрипта mob_sound.script. Попробуйте скопировать его из ЧН.
В скрипте заявлено три параметра для анимации: "anim" - строка, видимо набор анимаций тела, "anim_movement" - бинарный параметр, определяет двигается ли объект в координатах локации в момент анимации, "anim_head" - набор анимаций головы.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
NIV | Дата: Ср, 09.04.2014, 06:29 | Сообщение # 860 |
Полевой исследователь
Ученые сталкеры
Сообщений: 167
| denis2000, в ЧН есть интересный файл mob_trader.script, там прописаны анимации торговца. Возможно надо аналогично добавить анимации в mob_remark? Пробую, пока безуспешно.
Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
|
|
|
Эти 0 пользователя(ей) поблагодарили NIV за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 10.04.2014, 11:03 | Сообщение # 861 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| NIV, По крайней мере можете использовать схему mob_walker, и прописать анимации на точках look - это работает, но только количество ментал-стейт ограничено: attack; capture_prepare; danger; eat; free; lie_idle; look_around; panic; rest; sit_idle; sleep; stand_idle; turn.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Пн, 14.04.2014, 23:25 | Сообщение # 862 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый вечер. Каким образом в рестрикторе можно организовать эффект удара по голове и потерю сознания у ГГ?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
FantomICW | Дата: Пн, 14.04.2014, 23:56 | Сообщение # 863 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| sergej5500, Сергей, добрый вечер. Вариантов много. Я могу сбросить несколько различных вариаций подобного действа, но было бы лучше определится более точно с эффектом...Рекомендую просмотреть с помощью СГМовского ui_mod_elements.effect_player(), который можно разблокировать и запустить через ui_main_menu.script.
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 15.04.2014, 00:42 | Сообщение # 864 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый вечер. Сделал НПС с логикой.
[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
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Довакин | Дата: Сб, 19.04.2014, 10:52 | Сообщение # 865 |
Командир д.г. быстрого реагирования
Пользователи
Сообщений: 688
| Здравствуйте. При создании смарта в деревне новичков на Кордоне, НПС не хотят занимать анимпоинты. Как решить эту проблему?
[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]
|
|
|
Эти 0 пользователя(ей) поблагодарили Довакин за это полезное сообщение: |
|
|
NIV | Дата: Сб, 19.04.2014, 11:36 | Сообщение # 866 |
Полевой исследователь
Ученые сталкеры
Сообщений: 167
| Довакин, хотелось бы уточнить - для какой игры Вы пишете? ЗП, ТЧ? С виду всё правильно, но для того, чтобы точно не было ошибок, лучше скопировать существующие секции анимпойнтов и менять названия и координаты.
В вашем примере я ни в одной секции не вижу параметров 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 |
|
|
Эти 0 пользователя(ей) поблагодарили NIV за это полезное сообщение: |
|
|
sergej5500 | Дата: Ср, 23.04.2014, 23:03 | Сообщение # 867 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый вечер. Написал рестриктор.
[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]
Исполняемая ф-ия должна вызываться регулярно в процессе игры. Вопросы такие. Как часто проверяются секции рестриктора? Сколько раз в секунду будет вызываться ф-ия при трехсекционной логике?
Еще интересует такой момент. Допустим, в рестрикторе есть таймер и ф-ия вызывается один раз в секунду реального времени. Возможны ли сбои из-за эффекта Киборга? В СГМ довольно часто Киборг "зависает" из-за переполнения движкового таймера.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 24.04.2014, 11:23 | Сообщение # 868 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата sergej5500 ( ) Как часто проверяются секции рестриктора? Как придется, поскольку биндер работает не по таймеру, а в режиме периодического опроса. Цитата sergej5500 ( ) Сколько раз в секунду будет вызываться ф-ия при трехсекционной логике? От 5-9 раз в секунду до одного раза в несколько секунд. Причем период сильно зависит как от загруженности скриптового движка, так и от ... расстояния до рестриктора. Цитата sergej5500 ( ) из-за переполнения движкового таймера Если вы действительно имеете ввиду движковый таймер, то он обязан переполняться поскольку в дискретной системе нет безразмерных переменных, а глюки связаны с неправильным программированием работы с таймерами программистов!
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
alex_xp_77 | Дата: Сб, 26.04.2014, 17:33 | Сообщение # 869 |
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
| Добрый день всем, у меня вопрос, в самом sdk есть, кошка, химера, излом, скажите как отразить их в панели сдк, у меня их нет в панели, что бы заспавнить, обьясните пожалуйста, вот такие файлы есть: http://SSMaker.ru/b442340e/ чего то наверно не хватает для спавна этих мутантов, пытался ковертировать в object, после попытался заспавнить, но костом дата отсутствует, (это где логику в sdk прописывать), вот тут:http://SSMaker.ru/e911ea50/ , сама модель в ogf текстуры есть тут: http://SSMaker.ru/a5e1fe8e/ ,но почему то не вижу ее, помогите пожалуста разобраться!!Заранее благодарен за чью либо помощь в столь нелегком вопросе!!!(прошу прощения администраторов если не по теме)
|
|
|
Эти 0 пользователя(ей) поблагодарили alex_xp_77 за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 26.04.2014, 19:10 | Сообщение # 870 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| alex_xp_77, Добавьте спавн-секции этих мутантов в gamedata SDK.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
|