|
Модостроение. Спавн и логика
|
|
| 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 за это полезное сообщение: |
|
|
| denis2000 | Дата: Пн, 06.08.2012, 23:42 | Сообщение # 166 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 167 |
 Инженер-электрик «Свободы»
Свобода
Сообщений: 121
| Доброго времени суток . Не скажу что это ошибка, а это и не ошибка скорее всего вобщем проблема в следующем после выполнения квеста ВУЛКАН, Пошел выполнять задания Радиопомехи: обыскать тело бойца разведгруппы только вот проблема что тел нет по идеи я поздно начал выполнять задания и уборщик их забрал . Можно ли как то решить проблему ??? Заранее спасибо
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Ghost_ae за это полезное сообщение: |
|
|
| sergej5500 | Дата: Вт, 07.08.2012, 17:56 | Сообщение # 168 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Ghost_ae Решить проблему можно. Смотрите здесь Раздел: НПС с квестовой взрывчаткой в Припяти
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| Alex535 | Дата: Чт, 16.08.2012, 18:29 | Сообщение # 169 |
|
Удаленные
| Скажие, по какой схеме происходит спавн НПС в ЗП? Там же не через all.spawn , ведь так?
КМБ Первые уроки!!! denis2000
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Alex535 за это полезное сообщение: |
|
|
| Lazur | Дата: Вс, 19.08.2012, 14:02 | Сообщение # 170 |
 Новичок
Пользователи
Сообщений: 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 | Сообщение # 171 |
 Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| Lazur, а где сам сквад, ты его создал в squad_descr_локация.ltx ? регистрация сквада в simulation_objects_props.ltx есть? А то я вижу всё что связано с чуваком и спавн сквада при новой игре, а самого сквада нет.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
| denis2000 | Дата: Вс, 19.08.2012, 14:40 | Сообщение # 172 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Lazur, 1. Логика или через эксклюзив смарта или через кастом дату - не одновременно!!! 2. Вы уверены что секция [start_position_l01_escape] будет проанализирована и учтена в скрипте sim_board.script, вот GeJorge например модифицировал указанный скрипт для чтения секций подключенных локаций. 3. way_point и look_point точно на данной локации? 4. И да определения сквада секцией [esc_dog_leader_squad] мы не увидели.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| denis2000 | Дата: Вт, 21.08.2012, 20:11 | Сообщение # 173 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Lazur, 1. Каким способом нужно спавнить НПС, чтобы передать ему логику в кастом-дате? 2. Чего не хватает в имени путей, для передачи логики в ексклюзиве смарта? 3. А функция вызвавшая вылет get_scheme_by_section из скрипта utils.script вызывается из трех разных мест, но вероятнее всего означает, что в указанном файле логики в секции logic@+<имя_работы> параметр active равен nil.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| Lazur | Дата: Ср, 22.08.2012, 07:03 | Сообщение # 174 |
 Новичок
Пользователи
Сообщений: 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 | Сообщение # 175 |
 Хозяин Зоны
Зомби
| Попытался заспавнить точку перехода в Мертвый Город с Армейских Складов по аналогии с вышестоящей секцией перехода в Темную Долину. Но получил вылет с логом. [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 пользователя(ей) поблагодарили Ааз за это полезное сообщение: |
|
|
| denis2000 | Дата: Ср, 22.08.2012, 18:26 | Сообщение # 176 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Quote (Lazur) 1. Через стартовую позицию в simulation.ltx. Уверен!? Тогда приведи хоть один пример из чистого ЗП. Quote (Lazur) 2. Хм... Не знаю... Тогда почему КМБ не читаешь? Quote (Lazur) 3. Нет, active = walker@esc_dog_leader Есть файл, есть секция есть определенный параметр, чего может не хватать?
Путь в custom_data относительно папки configs\, а путь в секции exclusive относительно папки configs\scripts\
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| Ааз | Дата: Ср, 22.08.2012, 18:43 | Сообщение # 177 |
 Хозяин Зоны
Зомби
| Где-то читал, что требуется еще каким-то образом отредактировать game.graph, но как именно - все туторы умалчивают. Лишь описывается, как собирать из level.graph нескольких уровней единый game.graph. А как быть, если локация уже была скомпилирована? Автор компиляции скинул её мне, путем изучения некоторых файлов выяснил, что game.graph, шедший в комплекте, взят от сборки трех локаций (Кордона, Старой Свалки из билдов и, собственно, Мертвого Города). Короче я в тупике. Довершил разгром безлоговый вылет около точки перехода.
Два способа: сборка инструментами SDK из отдельных скомпилированных локаций (из level.graph) или специальной программой для сборки графа от команды АМК (КМБ Урок 8). denis2000
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Ааз за это полезное сообщение: |
|
|
| Lazur | Дата: Чт, 23.08.2012, 08:37 | Сообщение # 178 |
 Новичок
Пользователи
Сообщений: 82
| 1. Наврал. Через скрипт. 3. В логике всего хватает, хотя бы потому, что на такой логике работают бандиты на Юпитере (Склад контейнеров). А чего может не хватать не знаю, поэтому задаю Вам этот же вопрос. [cut=Logic][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]
На пыльных тропинках аномальных полей Заспавнятся наши следы...
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Lazur за это полезное сообщение: |
|
|
| denis2000 | Дата: Чт, 23.08.2012, 21:37 | Сообщение # 179 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Если в логике всего хватает, то поясните, что вы хотели сказать этой строкой: Code suitable = {=target_squad_name(esc_dog_leader_squad) !check_npc_name(esc_dog_leader)} true
Выложи полный путь к файлу и его содержимое: 1. Спавн секция НПС 2. Спавн секция сквада и метод спавна этого сквада. 3. Секция смарта из all.spawn 4. Конфигурация смарта 5. Эксклюзивная логика
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| denis2000 | Дата: Сб, 25.08.2012, 21:09 | Сообщение # 180 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Quote (Lazur) Префикс в all.spawn разве не для удобства? Аргументируй!
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
|