Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: 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 по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
denis2000Дата: Пн, 06.08.2012, 23:42 | Сообщение # 166
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

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

Только если будут проблемы пеняй на себя!


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
Ghost_aeДата: Вт, 07.08.2012, 00:49 | Сообщение # 167
Инженер-электрик «Свободы»
Свобода
Сообщений: 121
Награды: 8
Репутация: [ 0 ]

Доброго времени суток . Не скажу что это ошибка, а это и не ошибка скорее всего вобщем проблема в следующем после выполнения квеста ВУЛКАН, Пошел выполнять задания Радиопомехи: обыскать тело бойца разведгруппы только вот проблема что тел нет по идеи я поздно начал выполнять задания и уборщик их забрал . Можно ли как то решить проблему ??? Заранее спасибо
 
sergej5500Дата: Вт, 07.08.2012, 17:56 | Сообщение # 168
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Ghost_ae
Решить проблему можно. Смотрите здесь
Раздел: НПС с квестовой взрывчаткой в Припяти
 
Alex535Дата: Чт, 16.08.2012, 18:29 | Сообщение # 169
Удаленные



Скажие, по какой схеме происходит спавн НПС в ЗП? Там же не через all.spawn , ведь так?

КМБ Первые уроки!!! denis2000
 
LazurДата: Вс, 19.08.2012, 14:02 | Сообщение # 170
Новичок
Пользователи
Сообщений: 82
Награды: 3
Репутация: [ 96 ]

Подскажите, что делаю неправильно:
В 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
 
lychagin0Дата: Вс, 19.08.2012, 14:31 | Сообщение # 171
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
Награды: 9
Репутация: [ 278 ]

Lazur, а где сам сквад, ты его создал в squad_descr_локация.ltx ? регистрация сквада в simulation_objects_props.ltx
есть? А то я вижу всё что связано с чуваком и спавн сквада при новой игре, а самого сквада нет.


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

Lazur,
1. Логика или через эксклюзив смарта или через кастом дату - не одновременно!!!
2. Вы уверены что секция [start_position_l01_escape] будет проанализирована и учтена в скрипте sim_board.script, вот GeJorge например модифицировал указанный скрипт для чтения секций подключенных локаций.
3. way_point и look_point точно на данной локации?
4. И да определения сквада секцией [esc_dog_leader_squad] мы не увидели.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
denis2000Дата: Вт, 21.08.2012, 20:11 | Сообщение # 173
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Lazur,
1. Каким способом нужно спавнить НПС, чтобы передать ему логику в кастом-дате?
2. Чего не хватает в имени путей, для передачи логики в ексклюзиве смарта?
3. А функция вызвавшая вылет get_scheme_by_section из скрипта utils.script вызывается из трех разных мест, но вероятнее всего означает, что в указанном файле логики в секции logic@+<имя_работы> параметр active равен nil.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
LazurДата: Ср, 22.08.2012, 07:03 | Сообщение # 174
Новичок
Пользователи
Сообщений: 82
Награды: 3
Репутация: [ 96 ]

denis2000,
1. Через стартовую позицию в simulation.ltx.
2. Хм... Не знаю...
3. Нет, active = walker@esc_dog_leader

P.S. В кастом дате нашёл ошибку пути к логике (scripts/), убрал её, но в консоле теперь пишет, мол не могу найти конфигурационный файл esc_dog_leader.ltx, а ведь путь указан правильно.


На пыльных тропинках аномальных полей
Заспавнятся наши следы...
 
АазДата: Ср, 22.08.2012, 18:04 | Сообщение # 175
Хозяин Зоны
Зомби
Награды: 30
Репутация: [ 0 ]

Попытался заспавнить точку перехода в Мертвый Город с Армейских Складов по аналогии с вышестоящей секцией перехода в Темную Долину. Но получил вылет с логом.
[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


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

Quote (Lazur)
1. Через стартовую позицию в simulation.ltx.

Уверен!? Тогда приведи хоть один пример из чистого ЗП.
Quote (Lazur)
2. Хм... Не знаю...

Тогда почему КМБ не читаешь?
Quote (Lazur)
3. Нет, active = walker@esc_dog_leader

Есть файл, есть секция есть определенный параметр, чего может не хватать?

Путь в custom_data относительно папки configs\, а путь в секции exclusive относительно папки configs\scripts\


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
АазДата: Ср, 22.08.2012, 18:43 | Сообщение # 177
Хозяин Зоны
Зомби
Награды: 30
Репутация: [ 0 ]

Где-то читал, что требуется еще каким-то образом отредактировать game.graph, но как именно - все туторы умалчивают. Лишь описывается, как собирать из level.graph нескольких уровней единый game.graph. А как быть, если локация уже была скомпилирована? Автор компиляции скинул её мне, путем изучения некоторых файлов выяснил, что game.graph, шедший в комплекте, взят от сборки трех локаций (Кордона, Старой Свалки из билдов и, собственно, Мертвого Города). Короче я в тупике. Довершил разгром безлоговый вылет около точки перехода.

Два способа: сборка инструментами SDK из отдельных скомпилированных локаций (из level.graph) или специальной программой для сборки графа от команды АМК (КМБ Урок 8). denis2000


 
LazurДата: Чт, 23.08.2012, 08:37 | Сообщение # 178
Новичок
Пользователи
Сообщений: 82
Награды: 3
Репутация: [ 96 ]

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]


На пыльных тропинках аномальных полей
Заспавнятся наши следы...
 
denis2000Дата: Чт, 23.08.2012, 21:37 | Сообщение # 179
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Если в логике всего хватает, то поясните, что вы хотели сказать этой строкой:
Code
suitable = {=target_squad_name(esc_dog_leader_squad) !check_npc_name(esc_dog_leader)} true


Выложи полный путь к файлу и его содержимое:
1. Спавн секция НПС
2. Спавн секция сквада и метод спавна этого сквада.
3. Секция смарта из all.spawn
4. Конфигурация смарта
5. Эксклюзивная логика


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
denis2000Дата: Сб, 25.08.2012, 21:09 | Сообщение # 180
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Quote (Lazur)
Префикс в all.spawn разве не для удобства?

Аргументируй!


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