Модостроение. Спавн и логика
|
|
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 за это полезное сообщение: |
|
|
Amikus | Дата: Вт, 31.07.2012, 10:38 | Сообщение # 166 |
Гражданский
Пользователи
Сообщений: 3
| sergej5500 Спасибо сильно помог) У меня еще 2 вопроса... я спавню нпс вроде все нормально... когда с ним(и) пообщяешся и уходишь он за тобой наблюдает. Как это убрать ? Я просто хочу что они стояли как вкопанные и некуда не поворачивались
И второй вопрос. Когда опасность, нпс убегает и воюет, но назад не приходит а остается на том месте где закончил бой. Как сделать так чтобы он на место возвращался ?
Переписывать логику NPC, могу предположить что во втором случае у Вас используется схема remark, которая не подразумевает за собой боевых действий. XOBAH
|
|
|
Эти 0 пользователя(ей) поблагодарили Amikus за это полезное сообщение: |
|
|
sergej5500 | Дата: Вс, 05.08.2012, 20:05 | Сообщение # 167 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Amikus Нужно править логику НПС По логике и анимациям много интересного здесь и здесь. Чтобы НПС стояли на своем месте, им в логику нужно дописать: точка, где НПС стоит - move_dest_number = 129360 точка, куда НПС смотрит - move_look_vertex = 146447 Числа берутся из параметра game_vertex.Добавлено (05.08.2012, 20:05) --------------------------------------------- sergej5500 Всем Добрый Вечер! На Болотах возле точки перехода на Затон в SGM 2.2 нашел "Винторез", полностью убитый. Сняв координаты, обнаружил, что он заспавнен через all.spawn. Для эксперимента прописал через all.spawn "Абакан". Начал НИ. "Абакан" появился в нужном месте в полностью убитом состоянии. Возник вопрос, как правильно прописать отдельные стволы через all.spawn, что бы они были исправными. Приведу секцию спавна "Абакана". В чем здесь ошибка? Заранее благодарен за советы. [cut=Абакан][40001]
; cse_abstract properties section_name = wpn_abakan name = esc_wpn_abakan_40001 position = -136.94432067871,-27.409227371216,-433.48797607422 direction = -0.39229094982147,0,0.91984117031097 version = 128 script_version = 12
; cse_alife_object properties game_vertex_id = 1936 distance = 0 level_vertex_id = 117230 object_flags = 0xffffff0f custom_data = <<END END
; cse_visual properties visual_name = dynamics\weapons\wpn_abakan\wpn_abakan.ogf
; cse_alife_inventory_item properties condition = 1 upgrades =
; cse_alife_item_weapon properties ammo_current = 90 upd:condition = 0.00392156862745098
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;[/cut]
Сообщение отредактировал sergej5500 - Вт, 31.07.2012, 11:31 |
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Глюк | Дата: Вс, 05.08.2012, 20:25 | Сообщение # 168 |
Почетный Вольный
Вольные сталкеры
Сообщений: 2606
| sergej5500, попробуй так
Code ; cse_alife_item_weapon properties ammo_current = 90 upd:condition = 1
Это проблема с ACDC. Раньше параметр upd:condition задавался числом 255 для полностью исправного оружия. А теперь это соответствует 1. Кстати если 1/255, то 0.00392156862745098, как раз то число которое у тебя и прописано. Т.е. число 255 в данном случаи воспринимается как минимальное состояние, отсюда и в хлам убитое оружие.
Быть собой, верить в себя, не изменять себе...
Сообщение отредактировал Глюк - Вс, 05.08.2012, 20:29 |
|
|
Эти 0 пользователя(ей) поблагодарили Глюк за это полезное сообщение: |
|
|
dryaginaa | Дата: Пн, 06.08.2012, 21:47 | Сообщение # 169 |
Гражданский
Пользователи
Сообщений: 17
| Возник вопрос, в друг друга нпс стреляют чуть ли не через пол карты, а со мной у них тактика боя почему-то другая: они стараются сначала сократить дистанцию до минимальной, и только вблизи открывают по мне огонь, получается что я без сопротивления их уничтожаю со средних дистанций, а в меня с их стороны ни одного выстрела, как можно изменить ситуацию чтобы нпс стреляли в меня как только увидят? Помогите пожалуйста P.S. Опытным путем измерено что начинают нормальный бой со мной они ровно с 30 метров, как увеличить это расстояние хотя бы до 100 метров?
Сообщение отредактировал dryaginaa - Пн, 06.08.2012, 22:39 |
|
|
Эти 0 пользователя(ей) поблагодарили dryaginaa за это полезное сообщение: |
|
|
denis2000 | Дата: Пн, 06.08.2012, 23:42 | Сообщение # 170 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| dryaginaa, В файле xr_combat_ignore.script в функции action_process_enemy:enemy_callback( obj, enemy ) вместо: Code se_obj.position:distance_to_sqr(se_enemy.position) > 900 ставь: Code se_obj.position:distance_to_sqr(se_enemy.position) > 10000 Только если будут проблемы пеняй на себя!
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Ghost_ae | Дата: Вт, 07.08.2012, 00:49 | Сообщение # 171 |
Инженер-электрик «Свободы»
Свобода
Сообщений: 121
| Доброго времени суток . Не скажу что это ошибка, а это и не ошибка скорее всего вобщем проблема в следующем после выполнения квеста ВУЛКАН, Пошел выполнять задания Радиопомехи: обыскать тело бойца разведгруппы только вот проблема что тел нет по идеи я поздно начал выполнять задания и уборщик их забрал . Можно ли как то решить проблему ??? Заранее спасибо
|
|
|
Эти 0 пользователя(ей) поблагодарили Ghost_ae за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 07.08.2012, 17:56 | Сообщение # 172 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Ghost_ae Решить проблему можно. Смотрите здесь Раздел: НПС с квестовой взрывчаткой в Припяти
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Alex535 | Дата: Чт, 16.08.2012, 18:29 | Сообщение # 173 |
Удаленные
| Скажие, по какой схеме происходит спавн НПС в ЗП? Там же не через all.spawn , ведь так?
КМБ Первые уроки!!! denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили Alex535 за это полезное сообщение: |
|
|
Lazur | Дата: Вс, 19.08.2012, 14:02 | Сообщение # 174 |
Новичок
Пользователи
Сообщений: 82
| Подскажите, что делаю неправильно: В sh_stalker.ltx правка: [cut=вот][esc_dog_leader]:stalker_trader $spawn = "respawn\esc_dog_leader" character_profile = esc_dog_leader spec_rank = experienced community = stalker custom_data = scripts\escape\esc_dog_leader.ltx [/cut]
Логика NPC esc_dog_leader: [cut=вот][logic@esc_dog_leader] $suitable = {=target_squad_name(jup_a10_bandit_squad_3) !check_npc_name(jup_a10_bandit_leader)} true prior = 100 active = walker@esc_dog_leader
[walker@esc_dog_leader] path_walk = esc_esc_dog_leader_walk path_look = esc_esc_dog_leader_look on_info = {=surge_started} walker@surge
[walker@surge] path_walk = esc_sim_13_surge_1_walk path_look = esc_sim_13_surge_1_look on_info = {=surge_complete} walker@esc_dog_leader [/cut] Профайл персонажа: [cut=вот] <specific_character id="esc_dog_leader" team_default = "1"> <name>esc_dog_leader_name</name> <icon>ui_inGame2_neutral_2</icon> <map_icon x="1" y="0"></map_icon> <bio>Опытный сталкер. Детальная информация отсутствует.</bio>
<class>esc_dog_leader</class> <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <snd_config>characters_voice\human_03\stalker\</snd_config>
<rank>50</rank> <money min="5000" max="6000" infinitive="0"/> <reputation>0</reputation>
<visual>actors\stalker_neutral\stalker_neutral_2_mask</visual> <supplies> [spawn] \n
wpn_saiga = 1, scope \n ammo_12x70_buck = 4 \n wpn_pb \n ammo_9x18_fmj = 1 \n grenade_f1 = 1 \n medkit = 1 \n bandage = 2 \n
#include "gameplay\character_items_nd.xml" #include "gameplay\character_food.xml" #include "gameplay\character_drugs.xml" </supplies> #include "gameplay\character_criticals_4.xml" #include "gameplay\character_dialogs.xml" </specific_character>
[/cut] В simulation.ltx делаю правку: [cut=вот][start_position_l01_escape] esc_dog_leader_squad = escape_podval [/cut] Логика смарта esc_podval: [cut=вот] [smart_terrain] squad_id = 400 arrive_dist = 65 respawn_params = respawn@esc_lager
[respawn@esc_lager] spawn_stalker@advanced spawn_stalker@novice
[spawn_stalker@advanced] spawn_squads = stalker_sim_squad_advanced, stalker_sim_squad_advanced, stalker_sim_squad_novice spawn_num = 1, 0
[spawn_stalker@novice] spawn_squads = stalker_sim_squad_advanced, stalker_sim_squad_novice, stalker_sim_squad_novice spawn_num = 1, 0
[exclusive] esc_dog_leader = escape\esc_dog_leader.ltx esc_novice_shuxer = escape\esc_novice.ltx[/cut] Но NPC в начале игры не спавнится, локация в скриптах зарегистрированна. В чём ошибка? Заранее спасибо.
На пыльных тропинках аномальных полей Заспавнятся наши следы...
Сообщение отредактировал Lazur - Вс, 19.08.2012, 14:04 |
|
|
Эти 0 пользователя(ей) поблагодарили Lazur за это полезное сообщение: |
|
|
lychagin0 | Дата: Вс, 19.08.2012, 14:31 | Сообщение # 175 |
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| Lazur, а где сам сквад, ты его создал в squad_descr_локация.ltx ? регистрация сквада в simulation_objects_props.ltx есть? А то я вижу всё что связано с чуваком и спавн сквада при новой игре, а самого сквада нет.
|
|
|
Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 19.08.2012, 14:40 | Сообщение # 176 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Lazur, 1. Логика или через эксклюзив смарта или через кастом дату - не одновременно!!! 2. Вы уверены что секция [start_position_l01_escape] будет проанализирована и учтена в скрипте sim_board.script, вот GeJorge например модифицировал указанный скрипт для чтения секций подключенных локаций. 3. way_point и look_point точно на данной локации? 4. И да определения сквада секцией [esc_dog_leader_squad] мы не увидели.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Lazur | Дата: Вс, 19.08.2012, 14:52 | Сообщение # 177 |
Новичок
Пользователи
Сообщений: 82
| lychagin0, Сквад создан, но не регестрирован он. Делается сие добавлением такой строки в файл? [cut=Строка] [esc_dog_leader_squad]:default_squad sim_avail = false[/cut]
denis2000, вэй и лук поинты на той же локации, где проходит спавн. Со скриптом не занаю, попробую проверить это дело на скрипте от Николая.
P.S. вот сквад: [cut][esc_dog_leader_squad]:online_offline_group faction = stalker npc = esc_dog_leader ;target_smart = story_id = esc_dog_leader_squad [/cut]
P.P.S. Поставил скрипт от Николая, NPC заспавнился, сидит, видимо логику не принял, ну, это уже дело другое. Благодарствуйте!
------------------------------------- Бьёмся с логикой... Закоментировал в sh_stalker.ltx кастом дату и раскоментировал эксклюзив на смарте, получил вылет: [cut=Лог] FATAL ERROR
[error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : ...l.k.e.r. - Зов Припяти\gamedata\scripts\utils.script:469: bad argument #1 to 'gsub' (string expected, got nil)
stack trace:[/cut] Почему не хочет "приняться" логика через эксклюзив? (если через кастом дату, то сидит в позе человека на унитазе)
--------------------------------------------- Даю NPC логику: [cut=логика][logic@esc_dog_leader] ;suitable = {=target_squad_name(esc_dog_leader_squad) !check_npc_name(esc_dog_leader)} true prior = 100 active = walker@esc_dog_leader
[walker@esc_dog_leader] path_walk = esc_dog_leader_walk path_look = esc_dog_leader_look on_info = {=surge_started} walker@surge
[walker@surge] path_walk = esc_sim_13_surge_1_walk path_look = esc_sim_13_surge_1_look on_info = {=surge_complete} walker@esc_dog_leader [/cut] Затем в all.spawn делаю вэй и лук поинты: [cut=вот][esc_dog_leader_walk] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = -198.977386,-19.855508,-135.585647 p0:game_vertex_id = 1464 p0:level_vertex_id = 52975
[esc_dog_leader_look] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = -204.156600,-17.517114,-137.213958 p0:game_vertex_id = 1464 p0:level_vertex_id = 48493 [/cut] Непись и поинты находятся на одной локации, логика и поинты сделаны на основе тех, которые используют ГСК, кастом дата в профиле непися прописана, вопрос: "Почему логика не принимается уже двумя NPC, если всё сделано по рабочему шаблону?" Заранее спасибо.
На пыльных тропинках аномальных полей Заспавнятся наши следы...
Сообщение отредактировал Lazur - Пн, 20.08.2012, 17:15 |
|
|
Эти 0 пользователя(ей) поблагодарили Lazur за это полезное сообщение: |
|
|
denis2000 | Дата: Вт, 21.08.2012, 20:11 | Сообщение # 178 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Lazur, 1. Каким способом нужно спавнить НПС, чтобы передать ему логику в кастом-дате? 2. Чего не хватает в имени путей, для передачи логики в ексклюзиве смарта? 3. А функция вызвавшая вылет get_scheme_by_section из скрипта utils.script вызывается из трех разных мест, но вероятнее всего означает, что в указанном файле логики в секции logic@+<имя_работы> параметр active равен nil.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Lazur | Дата: Ср, 22.08.2012, 07:03 | Сообщение # 179 |
Новичок
Пользователи
Сообщений: 82
| denis2000, 1. Через стартовую позицию в simulation.ltx. 2. Хм... Не знаю... 3. Нет, active = walker@esc_dog_leader
P.S. В кастом дате нашёл ошибку пути к логике (scripts/), убрал её, но в консоле теперь пишет, мол не могу найти конфигурационный файл esc_dog_leader.ltx, а ведь путь указан правильно.
На пыльных тропинках аномальных полей Заспавнятся наши следы...
|
|
|
Эти 0 пользователя(ей) поблагодарили Lazur за это полезное сообщение: |
|
|
Ааз | Дата: Ср, 22.08.2012, 18:04 | Сообщение # 180 |
Хозяин Зоны
Зомби
| Попытался заспавнить точку перехода в Мертвый Город с Армейских Складов по аналогии с вышестоящей секцией перехода в Темную Долину. Но получил вылет с логом. [cut noguest=Новая секция спавна.][4777] ; cse_abstract properties section_name = level_changer name = exit_to_deadcity_111 position = -252.471176147461,-4.53857898712158,421.638000488281 direction = -0.234908998012543,0,0.972016990184784
; cse_alife_object properties game_vertex_id = 1852 distance = 0.400000005960464 level_vertex_id = 82454 object_flags = 0xffffff3e custom_data = <<END [pt_move_if_reject] path = mil_way_if_reject_to_cit END story_id = 9111
; cse_shape properties shapes = shape0 shape0:type = box shape0:axis_x = 1,0,0 shape0:axis_y = 0,1,0 shape0:axis_z = 0,0,1 shape0:offset = 0,0,0
; cse_alife_space_restrictor properties restrictor_type = 3
; cse_alife_level_changer properties dest_game_vertex_id = 897 dest_level_vertex_id = 70578 dest_position = 158.52360534668,-2.57674789428711,-46.2611808776855 dest_direction = 0,0.446400105953217,0 dest_level_name = deadcity dest_graph_point = start_actor_01[/cut]
[cut noguest=Лог]Expression : no_assert Function : CALifeStoryRegistry::add File : E:\stalker\patch_1_0004\xr_3da\xrGame\alife_story_registry.cpp Line : 30 Description : Specified story object is already in the Story registry![/cut]
Собственно, где и в чем накосячил? Подозреваю, что story_id неправильный, но вот как его определить - не имею понятия. ЗЫ: координаты снимал сам, название локации правильное. Единственное, что еще может быть не так - level_vertex_id и game_vertex_id, поскольку я не знаю этих значений для новой локации.
Да такой стори-ид уже существует, выбери другой. denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили Ааз за это полезное сообщение: |
|
|
|