|
Модостроение. Спавн и логика
|
|
| 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 за это полезное сообщение: |
|
|
| Geonezis | Дата: Вс, 03.06.2012, 09:52 | Сообщение # 151 |
 Разработчик «Смерти вопреки»
Свобода
Сообщений: 2360
| 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 |
| |
|
| Эти 0 пользователя(ей) поблагодарили Geonezis за это полезное сообщение: |
|
|
| denis2000 | Дата: Вс, 03.06.2012, 11:45 | Сообщение # 152 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, XOBAH, Параметр commander = true может быть задан только в секции логики типа patrol, в любой другой этот параметр игнорируется. Стандартный метод задать НПС метку (любую!) состоит в добавлении в секцию logic параметра level_spot, равного одному из значений (стандартные: trader, mechanic, guider, quest_npc, medic), можно также в файле stalker_generic.script определить в дополнении к указанным любые свои, по образцу.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| 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
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis542 за это полезное сообщение: |
|
|
| Lazur | Дата: Пн, 04.06.2012, 18:40 | Сообщение # 154 |
 Новичок
Пользователи
Сообщений: 82
| [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 |
| |
|
| Эти 0 пользователя(ей) поблагодарили Lazur за это полезное сообщение: |
|
|
| lychagin0 | Дата: Вс, 10.06.2012, 21:21 | Сообщение # 155 |
 Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| Добрый день,как через логику заставить НПС произносить фразу,сделал вот так молчит,всё остальное выполняет,вот кусок:[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 |
| |
|
| Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
| Lazur | Дата: Сб, 23.06.2012, 13:10 | Сообщение # 156 |
 Новичок
Пользователи
Сообщений: 82
| Для Непися задал логику: [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 |
| |
|
| Эти 0 пользователя(ей) поблагодарили Lazur за это полезное сообщение: |
|
|
| lychagin0 | Дата: Ср, 04.07.2012, 16:21 | Сообщение # 157 |
 Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| Добрый день, создал 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 |
| |
|
| Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Ср, 04.07.2012, 23:16 | Сообщение # 158 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый Вечер! В SGM 2.2 на Кордоне запустил в симуляцию сквады рассветовцев и военных. Рассветовцы ходят по Кордону, а военные сидят на смартах, где заспавнились, без движения. Есть ли общий параметр, опредяляющий доступность смартов, для той или иной группировки, или по каждому смарту нужно писать разрешение. В логике смартов нашел записи вида: suitable = {=check_npc_name(sim_default_bandit_enemy)} true, {=check_npc_name(sim_default_stalker)} true. Эти строки определяют доступность смарта или нет? Как сделать, что бы вояки ходили по Кордону? Заранее благодарен за советы.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| denis2000 | Дата: Чт, 05.07.2012, 00:31 | Сообщение # 159 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Для сквадов и смартов есть только глобальная возможность разрешить симуляцию sim_avail = true в файле simulation_objects_props.ltx. У смартов нет логики! Есть файл конфигурации параметр suitable в котором не предусмотрен! Совет: проверяй разрешение симуляции у сквада военных и их смарта, попробуй внести смарты в файл smart_terrain_masks.ltx И конечно сквад не должен иметь story_id, чтобы считаться симуляционным!
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| Amikus | Дата: Вт, 31.07.2012, 08:38 | Сообщение # 160 |
|
Гражданский
Пользователи
Сообщений: 3
| Всем привет) Я добавил в Зп локацию кордон из Чн. Как зделать чтобы неписи травили байки/играли на гирате/кушали у костров ?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Amikus за это полезное сообщение: |
|
|
| sergej5500 | Дата: Вт, 31.07.2012, 09:28 | Сообщение # 161 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Amikus Посмотрите эту тему
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| Amikus | Дата: Вт, 31.07.2012, 10:38 | Сообщение # 162 |
|
Гражданский
Пользователи
Сообщений: 3
| sergej5500 Спасибо сильно помог) У меня еще 2 вопроса... я спавню нпс вроде все нормально... когда с ним(и) пообщяешся и уходишь он за тобой наблюдает. Как это убрать ? Я просто хочу что они стояли как вкопанные и некуда не поворачивались
И второй вопрос. Когда опасность, нпс убегает и воюет, но назад не приходит а остается на том месте где закончил бой. Как сделать так чтобы он на место возвращался ?
Переписывать логику NPC, могу предположить что во втором случае у Вас используется схема remark, которая не подразумевает за собой боевых действий. XOBAH
|
| |
|
| Эти 0 пользователя(ей) поблагодарили Amikus за это полезное сообщение: |
|
|
| sergej5500 | Дата: Вс, 05.08.2012, 20:05 | Сообщение # 163 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| 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 |
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| Глюк | Дата: Вс, 05.08.2012, 20:25 | Сообщение # 164 |
 Почетный Вольный
Вольные сталкеры
Сообщений: 2606
| 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 |
| |
|
| Эти 0 пользователя(ей) поблагодарили Глюк за это полезное сообщение: |
|
|
| dryaginaa | Дата: Пн, 06.08.2012, 21:47 | Сообщение # 165 |
|
Гражданский
Пользователи
Сообщений: 17
| Возник вопрос, в друг друга нпс стреляют чуть ли не через пол карты, а со мной у них тактика боя почему-то другая: они стараются сначала сократить дистанцию до минимальной, и только вблизи открывают по мне огонь, получается что я без сопротивления их уничтожаю со средних дистанций, а в меня с их стороны ни одного выстрела, как можно изменить ситуацию чтобы нпс стреляли в меня как только увидят? Помогите пожалуйста P.S. Опытным путем измерено что начинают нормальный бой со мной они ровно с 30 метров, как увеличить это расстояние хотя бы до 100 метров?
Сообщение отредактировал dryaginaa - Пн, 06.08.2012, 22:39 |
| |
|
| Эти 0 пользователя(ей) поблагодарили dryaginaa за это полезное сообщение: |
|
|
|