Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: 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Дата: Пт, 01.06.2012, 14:47 | Сообщение # 151
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Lazur, suitable может принимать только два значения true (подходит) или false (не подходит).
Пример реализации однотипной логики для сквада снорков:
[cut]
Code
[smart_terrain]
squad_id = 47
max_population = 1

[exclusive]
snork_01 = zaton\zat_b12_bridge_snorks.ltx
snork_02 = zaton\zat_b12_bridge_snorks.ltx
snork_03 = zaton\zat_b12_bridge_snorks.ltx
snork_04 = zaton\zat_b12_bridge_snorks.ltx


Code
[logic@snork_01]
active = mob_home@snork
prior = 80
suitable = {=is_monster_snork} true
monster_job = true

[mob_home@snork]
path_home = snorks_home
aggressive = true
home_min_radius = 5
home_max_radius = 25

[logic@snork_02]
active = mob_home@snork
prior = 80
suitable = {=is_monster_snork} true
monster_job = true

[logic@snork_03]
active = mob_home@snork
prior = 80
suitable = {=is_monster_snork} true
monster_job = true

[logic@snork_04]
active = mob_home@snork
prior = 80
suitable = {=is_monster_snork} true
monster_job = true
[/cut]


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Сб, 02.06.2012, 13:46 | Сообщение # 152
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Всем добрый день!
Через sgm_spawner.scripts заспавнил квестового НПС. На мини-карте он отображается точкой. Можно ли сделать так, что бы он отозначался звездой, как командиры сквадов.
P.S. Добился результата, заспанив этого НПС в эксклюзивном скваде без указания target_smart. НПС принял свою логику.
Вопрос, можно ли пометить звездой НПС, не входящего в сквад.

В логику дописать commander = true. XOBAH


Сообщение отредактировал sergej5500 - Сб, 02.06.2012, 16:09
 
LazurДата: Сб, 02.06.2012, 18:57 | Сообщение # 153
Новичок
Пользователи
Сообщений: 82
Награды: 3
Репутация: [ 96 ]

denis2000, И всё равно не могу понять: Вот, делаю смарт, делаю на него логику (спавнить собак), делаю логику на собак, но как игра узнает, к какому псу какая логика?

Игра увидит свободную работу на смарте и начнет ее "заполнять". Если логика эксклюзивна (как в вышеприведенных примерах) она будет пускать всех NPC на эту работу, поэтому в логике производится "отсев" лишних NPC с помощью suitable. XOBAH


На пыльных тропинках аномальных полей
Заспавнятся наши следы...
 
sergej5500Дата: Сб, 02.06.2012, 23:59 | Сообщение # 154
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Всем Добрый Вечер.
Последовал совету Хована:
В логику дописать commander = true.
Результат нулевой. Приведу логику персонажа.
[cut=логика][logic]
active = move@stalker_commander

[move@stalker_commander]
move_dest_number = 129360
move_look_vertex = 146447
move_state_when_center = ward_noweap
move_state_when_move = walk
move_combat_disable = true
move_home_teleport = true
meet = meet
invulnerable = true
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
on_info = {+kosmonavt_artefact_quests_init =dist_to_actor_ge(45)} nil %=release_npc%

[meet]
abuse = false
use = true
allow_break = false
meet_on_talking = false
trade_enable = false[/cut]
НПС стоит там, куда его поставили. Дает квесты, исчезает, когда нужда в нем отпадет. Логика сделана на примере логики Меча. Звездой он отображаться не хочет. Строку commander = true пробовал вставлять во все абзацы логики. Если его спавнить через сквад, то он после выхода из зоны alife и последующего входа в нее обычно уходит со своего места. Есть ли способ повесить на него "звезду". Заранее благодарен за советы.


Сообщение отредактировал sergej5500 - Вс, 03.06.2012, 00:03
 
GeonezisДата: Вс, 03.06.2012, 09:52 | Сообщение # 155
Разработчик «Смерти вопреки»
Свобода
Сообщений: 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 | Сообщение # 156
Полевой исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 157
Удаленные



ребят, у меня такая проблема:
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 | Сообщение # 158
Новичок
Пользователи
Сообщений: 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 | Сообщение # 159
Легенда Зоны
Вольные сталкеры
Сообщений: 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 | Сообщение # 160
Новичок
Пользователи
Сообщений: 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 | Сообщение # 161
Легенда Зоны
Вольные сталкеры
Сообщений: 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 | Сообщение # 162
Полевой Исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 163
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

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


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

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

Amikus
Посмотрите эту тему
 
Поиск: