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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
GeonezisДата: Вс, 03.06.2012, 09:52 | Сообщение # 151
Разработчик «Смерти вопреки»
Свобода
Сообщений: 2360
Награды: 30
Репутация: [ 71 ]

Quote (sergej5500)
Есть ли способ повесить на него "звезду". Заранее благодарен за советы.

Если это новый квестовый персонаж заспавненный через sgm_spawner.scripts, то можно повесить на него индивидуальную метку, которые добавляются исключительно модом SGM.

файл sgm_modules.script (\gamedata\scripts\) добавим в него строку подобную этой
Code

{"val_night_zam_leader_kolmogor","st_main_npc_name",sgm_flags.spot_job_person,"its_quest",
"val_zam_quest_1_otkazal","val_freedom_spez_agent_ lucas_talking_dolg"},


где указывается название секции нпс на которого устанавливается метка, его имя, тип метки, квестовая пренадлежность, инфопоршни необходимые для удаления метки.


Смерти Вопреки
Spectrum Project
AP_Prodaction


Сообщение отредактировал GEONEZIS - Вс, 03.06.2012, 09:53
 
denis2000Дата: Вс, 03.06.2012, 11:45 | Сообщение # 152
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, XOBAH, Параметр commander = true может быть задан только в секции логики типа patrol, в любой другой этот параметр игнорируется.
Стандартный метод задать НПС метку (любую!) состоит в добавлении в секцию logic параметра level_spot, равного одному из значений (стандартные: trader, mechanic, guider, quest_npc, medic), можно также в файле stalker_generic.script определить в дополнении к указанным любые свои, по образцу.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
denis542Дата: Вс, 03.06.2012, 12:07 | Сообщение # 153
Удаленные



ребят, у меня такая проблема:
1)совсем нету электронных денег(играл в очко, купил диск, с трупов деньги снимает, а на счету 0)
2) отряд альфа вобще игнорирует и не "агрится"! т.е. можно спокойно подойти к ним и порезать ножом
кто-нибудь знает, как эти баги пофиксить?? заранее спасибо
(комп: Core i3-2310M 2.1GHz; 3Gb DDR3; NVIDIA GT-540M 1Gb; win7 64b) Sigerous Mod v 2.2

Задавай вопросы в теме поддержки мода. Пробуй переустановить SGM. denis2000
 
LazurДата: Пн, 04.06.2012, 18:40 | Сообщение # 154
Новичок
Пользователи
Сообщений: 82
Награды: 3
Репутация: [ 96 ]

[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 : ....e.r. - Зов Припяти\gamedata\scripts\xr_logic.script:941: bad argument #1 to 'gfind' (string expected, got nil)

stack trace:[/cut]
Думаю, вылет из за логики. Брал логику Сидоровича из ТЧ.

Ты прав. denis2000

Поставил такую логику:
[cut noguest=Логика][logic]
active = remark@trader

[remark@trader]
invulnerable = true
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true[/cut]
Та же песня...

С такой не должно вылетать. denis2000


На пыльных тропинках аномальных полей
Заспавнятся наши следы...


Сообщение отредактировал Lazur - Ср, 06.06.2012, 08:13
 
lychagin0Дата: Вс, 10.06.2012, 21:21 | Сообщение # 155
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
Награды: 9
Репутация: [ 278 ]

Добрый день,как через логику заставить НПС произносить фразу,сделал вот так молчит,всё остальное выполняет,вот кусок:[cut noguest=логика]
[remark@kill]
anim = guard_na
snd = zmey_robber_will_kill
on_timer = 500| %=killactor%
danger = danger_condition[/cut]
Фразу взял из COP.
Спасибо.

Где секция звуковой схемы!? denis2000

Добавлено (10.06.2012, 17:55)
---------------------------------------------
denis2000, не понял вопроса, для нпс тоже надо делать звуковую схему как для рестриктора?snd = zmey_robber_will_kill в таком виде работать не будет?
Спасибо.

Не понял ответа... Что это: zmey_robber_will_kill? denis2000

Добавлено (10.06.2012, 18:32)
---------------------------------------------
denis2000,имя звуковой схемы,вот кусок из xr_sounds_id.script:
[cut noguest=sound]
-- Змей
sound_zmey_base = global_sounds + 3000
zmey_guard_base = sound_zmey_base + 0
zmey_robber_base = sound_zmey_base + 100
zmey_robber_stop = --[[zmey_robber_base +]] 0 -- Стоять!
zmey_robber_do_not_move = --[[zmey_robber_base +]] 1 -- Не двигаться!
zmey_robber_drop_weap = --[[zmey_robber_base +]] 2 -- Бросай ствол, коли жить охота
zmey_robber_drop_weap_2 = --[[zmey_robber_base +]] 3 -- Брось оружие, кому говорю!
zmey_robber_will_kill = --[[zmey_robber_base +]] 4 -- Еще двинешься, убью
zmey_robber_do_what_i_say = --[[zmey_robber_base +]] 5 -- Молодец, будешь жить
zmey_robber_will_shoot = --[[zmey_robber_base +]] 6 -- Пристрелю!
zmey_camper_base = sound_zmey_base + 150
zmey_sleeper_base = sound_zmey_base + 200
zmey_talker_base = sound_zmey_base + 250
zmey_bodyguard_base = sound_zmey_base + 300
zmey_guide_base = sound_zmey_base + 350
zmey_robber_guard_base = sound_zmey_base + 400
zmey_scared_base = sound_zmey_base + 450
zmey_zoneguard_base = sound_zmey_base + 500[/cut]

Огорчу вас - этот файл со времен старых билдов не используется... denis2000

Добавлено (10.06.2012, 21:21)
---------------------------------------------
denis2000 ,а Вы не подскажите действующую фразу похожего содержания?
Спасибо.




Сообщение отредактировал lychagin0 - Вс, 10.06.2012, 11:31
 
LazurДата: Сб, 23.06.2012, 13:10 | Сообщение # 156
Новичок
Пользователи
Сообщений: 82
Награды: 3
Репутация: [ 96 ]

Для Непися задал логику:
[cut=Логика][logic@esc_novice_shuxer]
suitable = {=check_npc_name(esc_novice_shuxer)} true
active = walker@1
prior = 200
on_hit = hit

[walker@1]
path_walk = esc_novice_shuxer_walk
path_look = esc_novice_shuxer_look
def_state_moving1 = sprint
def_state_moving2 = assault
meet = meet

[meet]
close_snd_hello = rolan_hello_snd
close_snd_bye = rolan_hello_snd_bye
abuse = false
allow_break = false
meet_on_talking = false
trade_enable = true
close_distance = 7
close_anim = guard_na
close_victim = actor
use = {=actor_has_weapon} false, true
snd_on_use = {=actor_has_weapon} meet_hide_weapon, nil
[/cut], Но он логику не принимает, в ней дело?

Не в ней только если НПС зовут не esc_novice_shuxer. denis2000

----------------------------------
Всё пытаюсь привить логику NPC:
Даю логику:
[cut=Логика][logic@esc_novice_shuxer]
;suitable = {=check_npc_name(esc_novice_shuxer)} true
active = camper@1
prior = 200
on_hit = hit
meet = meet

[camper@1]
path_walk = esc_novice_shuxer_walk
path_look = esc_novice_shuxer_look
radius = 15
no_retreat = true
def_state_moving = assault
def_state_campering = hide_na
shoot = always

[meet]
close_snd_hello = rolan_hello_snd
close_snd_bye = rolan_hello_snd_bye
abuse = false
allow_break = false
meet_on_talking = false
trade_enable = true
close_distance = 7
close_anim = guard_na
close_victim = actor
use = {=actor_has_weapon} false, true
snd_on_use = {=actor_has_weapon} meet_hide_weapon, nil [/cut]
Бродит по деревушке новичков, однако для него сделал 1 лукпоинт и 1 вэйпоинт. К тому же отправляет меня к какой то матери Главному.
Ставлю такую логику:
[cut=Логика][logic]
active = remark@trader

[remark@trader]
invulnerable = false
on_combat = combat
meet = meet_trader

[combat]
combat_type = monolith

[meet_trader]

close_snd_hello = rolan_hello_snd
close_snd_bye = rolan_hello_snd_bye
abuse = false
allow_break = false
meet_on_talking = false
trade_enable = true
close_distance = 5
close_anim = guard_na
close_victim = actor
use = {=actor_has_weapon} false, true
snd_on_use = {=actor_has_weapon} meet_hide_weapon, nil [/cut]
Стоит на одном месте, разговаривает. Из за чего такая фигня?
P.S.
[cut=Вэйпоинт и лукпоинт]
[esc_novice_shuxer_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -146.882598,-13.244841,-116.337051
p0:game_vertex_id = 1477
p0:level_vertex_id = 103317

[esc_novice_shuxer_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -160.739776,-20.169752,-143.290664
p0:game_vertex_id = 1452
p0:level_vertex_id = 88694[/cut]

Первая логика не принята, вторая принята. denis2000

А из за чего он её может не принять?

Назвать все причины не представляется возможным. denis2000


На пыльных тропинках аномальных полей
Заспавнятся наши следы...


Сообщение отредактировал Lazur - Пн, 02.07.2012, 06:51
 
lychagin0Дата: Ср, 04.07.2012, 16:21 | Сообщение # 157
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
Награды: 9
Репутация: [ 278 ]

Добрый день, создал smart_terrain, в нём три smart_cover, каждый для конкретного НПС, задал логику для каждого через
[cut noguest=Смотреть][smart_terrain];killers_smart
squad_id = 21
max_population = 3

[exclusive]
mar_killer_commander = marsh\mar_killer_commander.ltx
mar_killer_1 = marsh\mar_killer_1.ltx
mar_killer_2 = marsh\mar_killer_2.ltx[/cut]
Все НПС спавняться нормально, но mar_killer_commander занимает место mar_killer_2, из за чего это может быть?
В алайфе смарт-коверы обозначены правильно, в логике вроде тоже, вот на всякий случай файлы:
[cut noguest=Логика mar_killer_commander][logic@mar_killer_commander]
active = animpoint@stay

[animpoint@stay]
cover_name = mar_killer_commander
avail_animations = animpoint_stay_wall_weapon
use_camp = false
on_info = {+poshel_ti} nil %=actor_enemy%
on_info2 = {=npc_in_zone(sr_poimali_1)} %=play_sound(jup_a12_stalker_assaulter_1_argue)%
on_info3 = {+na_rasstrel} remark@bye %=play_sound(jup_a12_stalker_assaulter_1_argue) =disable_ui%
out_restr = sr_poimali_1
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false

[remark@bye]
anim = punch
on_signal = anim_end| %=play_sound(jup_b207_freedom_leader_about_depot)%
on_signal2 = sound_end| walker@za_povorot %=enable_ui%
use_camp = false
invulnerable = true
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true

[walker@za_povorot]
path_walk = way_za_povorot_walk
path_look = way_za_povorot_look
on_info = {=path_end} nil %=remove_squad(killer_commander_squad)%
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true[/cut]

[cut noguest=Секция из алайфа][16245]
; cse_abstract properties
section_name = smart_cover
name = mar_killer_commander
position = 107.26485443115,1.0888948440552,339.20727539063
direction = 0,0,0
version = 128
script_version = 12

; cse_alife_object properties
game_vertex_id = 1681
distance = 0
level_vertex_id = 181375
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_stay_wall
cse_smart_cover__unk2_f32 = 0
enter_min_enemy_distance = 15
exit_min_enemy_distance = 10

; se_smart_cover properties
last_description = animpoint_stay_wall
loopholes = animpoint_stay_wall,1[/cut]
Заранее спасибо.

Для этого и придуман параметр suitable. Смотрите в примерах как пользоваться. denis2000




Сообщение отредактировал lychagin0 - Ср, 04.07.2012, 16:27
 
sergej5500Дата: Ср, 04.07.2012, 23:16 | Сообщение # 158
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый Вечер!
В SGM 2.2 на Кордоне запустил в симуляцию сквады рассветовцев и военных. Рассветовцы ходят по Кордону, а военные сидят на смартах, где заспавнились, без движения. Есть ли общий параметр, опредяляющий доступность смартов, для той или иной группировки, или по каждому смарту нужно писать разрешение. В логике смартов нашел записи вида:
suitable = {=check_npc_name(sim_default_bandit_enemy)} true, {=check_npc_name(sim_default_stalker)} true. Эти строки определяют доступность смарта или нет? Как сделать, что бы вояки ходили по Кордону? Заранее благодарен за советы.
 
denis2000Дата: Чт, 05.07.2012, 00:31 | Сообщение # 159
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500,
Для сквадов и смартов есть только глобальная возможность разрешить симуляцию sim_avail = true в файле simulation_objects_props.ltx.
У смартов нет логики! Есть файл конфигурации параметр suitable в котором не предусмотрен!
Совет: проверяй разрешение симуляции у сквада военных и их смарта, попробуй внести смарты в файл smart_terrain_masks.ltx
И конечно сквад не должен иметь story_id, чтобы считаться симуляционным!


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

Всем привет) Я добавил в Зп локацию кордон из Чн. Как зделать чтобы неписи травили байки/играли на гирате/кушали у костров ?
 
sergej5500Дата: Вт, 31.07.2012, 09:28 | Сообщение # 161
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Amikus
Посмотрите эту тему
 
AmikusДата: Вт, 31.07.2012, 10:38 | Сообщение # 162
Гражданский
Пользователи
Сообщений: 3
Награды: 0
Репутация: [ 0 ]

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

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

Переписывать логику NPC, могу предположить что во втором случае у Вас используется схема remark, которая не подразумевает за собой боевых действий. XOBAH
 
sergej5500Дата: Вс, 05.08.2012, 20:05 | Сообщение # 163
Полевой Исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 164
Почетный Вольный
Вольные сталкеры
Сообщений: 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 | Сообщение # 165
Гражданский
Пользователи
Сообщений: 17
Награды: 0
Репутация: [ 0 ]

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


Сообщение отредактировал dryaginaa - Пн, 06.08.2012, 22:39
 
Поиск: