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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
AmikusДата: Вт, 31.07.2012, 10:38 | Сообщение # 166
Гражданский
Пользователи
Сообщений: 3
Награды: 0
Репутация: [ 0 ]

sergej5500
Спасибо сильно помог) У меня еще 2 вопроса... я спавню нпс вроде все нормально... когда с ним(и) пообщяешся и уходишь он за тобой наблюдает. Как это убрать ? Я просто хочу что они стояли как вкопанные и некуда не поворачивались

И второй вопрос. Когда опасность, нпс убегает и воюет, но назад не приходит а остается на том месте где закончил бой.
Как сделать так чтобы он на место возвращался ?

Переписывать логику NPC, могу предположить что во втором случае у Вас используется схема remark, которая не подразумевает за собой боевых действий. XOBAH
 
sergej5500Дата: Вс, 05.08.2012, 20:05 | Сообщение # 167
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

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
 
ГлюкДата: Вс, 05.08.2012, 20:25 | Сообщение # 168
Почетный Вольный
Вольные сталкеры
Сообщений: 2606
Награды: 17
Репутация: [ 647 ]

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
 
dryaginaaДата: Пн, 06.08.2012, 21:47 | Сообщение # 169
Гражданский
Пользователи
Сообщений: 17
Награды: 0
Репутация: [ 0 ]

Возник вопрос, в друг друга нпс стреляют чуть ли не через пол карты, а со мной у них тактика боя почему-то другая: они стараются сначала сократить дистанцию до минимальной, и только вблизи открывают по мне огонь, получается что я без сопротивления их уничтожаю со средних дистанций, а в меня с их стороны ни одного выстрела, как можно изменить ситуацию чтобы нпс стреляли в меня как только увидят?
Помогите пожалуйста smile
P.S. Опытным путем измерено что начинают нормальный бой со мной они ровно с 30 метров, как увеличить это расстояние хотя бы до 100 метров?


Сообщение отредактировал dryaginaa - Пн, 06.08.2012, 22:39
 
denis2000Дата: Пн, 06.08.2012, 23:42 | Сообщение # 170
Полевой исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 171
Инженер-электрик «Свободы»
Свобода
Сообщений: 121
Награды: 8
Репутация: [ 0 ]

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

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



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

КМБ Первые уроки!!! denis2000
 
LazurДата: Вс, 19.08.2012, 14:02 | Сообщение # 174
Новичок
Пользователи
Сообщений: 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 | Сообщение # 175
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
Награды: 9
Репутация: [ 278 ]

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


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

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


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

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
 
denis2000Дата: Вт, 21.08.2012, 20:11 | Сообщение # 178
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
LazurДата: Ср, 22.08.2012, 07:03 | Сообщение # 179
Новичок
Пользователи
Сообщений: 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 | Сообщение # 180
Хозяин Зоны
Зомби
Награды: 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


 
Поиск: