Модостроение. Спавн и логика
|
|
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 за это полезное сообщение: |
|
|
denis2000 | Дата: Пт, 01.06.2012, 14:47 | Сообщение # 151 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| 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]
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Сб, 02.06.2012, 13:46 | Сообщение # 152 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Всем добрый день! Через sgm_spawner.scripts заспавнил квестового НПС. На мини-карте он отображается точкой. Можно ли сделать так, что бы он отозначался звездой, как командиры сквадов. P.S. Добился результата, заспанив этого НПС в эксклюзивном скваде без указания target_smart. НПС принял свою логику. Вопрос, можно ли пометить звездой НПС, не входящего в сквад.
В логику дописать commander = true. XOBAH
Сообщение отредактировал sergej5500 - Сб, 02.06.2012, 16:09 |
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Lazur | Дата: Сб, 02.06.2012, 18:57 | Сообщение # 153 |
Новичок
Пользователи
Сообщений: 82
| denis2000, И всё равно не могу понять: Вот, делаю смарт, делаю на него логику (спавнить собак), делаю логику на собак, но как игра узнает, к какому псу какая логика?
Игра увидит свободную работу на смарте и начнет ее "заполнять". Если логика эксклюзивна (как в вышеприведенных примерах) она будет пускать всех NPC на эту работу, поэтому в логике производится "отсев" лишних NPC с помощью suitable. XOBAH
На пыльных тропинках аномальных полей Заспавнятся наши следы...
|
|
|
Эти 0 пользователя(ей) поблагодарили Lazur за это полезное сообщение: |
|
|
sergej5500 | Дата: Сб, 02.06.2012, 23:59 | Сообщение # 154 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Всем Добрый Вечер. Последовал совету Хована: В логику дописать 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 |
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Geonezis | Дата: Вс, 03.06.2012, 09:52 | Сообщение # 155 |
Разработчик «Смерти вопреки»
Свобода
Сообщений: 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 | Сообщение # 156 |
Полевой исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 157 |
Удаленные
| ребят, у меня такая проблема: 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 | Сообщение # 158 |
Новичок
Пользователи
Сообщений: 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 | Сообщение # 159 |
Легенда Зоны
Вольные сталкеры
Сообщений: 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 | Сообщение # 160 |
Новичок
Пользователи
Сообщений: 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 | Сообщение # 161 |
Легенда Зоны
Вольные сталкеры
Сообщений: 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 | Сообщение # 162 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 163 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Для сквадов и смартов есть только глобальная возможность разрешить симуляцию sim_avail = true в файле simulation_objects_props.ltx. У смартов нет логики! Есть файл конфигурации параметр suitable в котором не предусмотрен! Совет: проверяй разрешение симуляции у сквада военных и их смарта, попробуй внести смарты в файл smart_terrain_masks.ltx И конечно сквад не должен иметь story_id, чтобы считаться симуляционным!
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Amikus | Дата: Вт, 31.07.2012, 08:38 | Сообщение # 164 |
Гражданский
Пользователи
Сообщений: 3
| Всем привет) Я добавил в Зп локацию кордон из Чн. Как зделать чтобы неписи травили байки/играли на гирате/кушали у костров ?
|
|
|
Эти 0 пользователя(ей) поблагодарили Amikus за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 31.07.2012, 09:28 | Сообщение # 165 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Amikus Посмотрите эту тему
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
|