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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
АазДата: Чт, 22.03.2012, 16:37 | Сообщение # 121
Хозяин Зоны
Зомби
Награды: 30
Репутация: [ 0 ]

Чистый ЗП 1.6.02
В КМБ был урок по спавну нового НПС через кнопку F6. А через all.spawn как? Может я плохо искал и не нашел нужную информацию?

Не дошли до 5-го урока. XOBAH

В ЧН и ЗП данный метод не применяется! Хотя и работает. Более того одиночные НПС не спвняться - спавняться только сквады. Поэтому единственным методом фактически стал спавн через скрипт. denis2000

Понятно, спасибо за ответ!




Сообщение отредактировал Faktor - Чт, 22.03.2012, 19:01
 
denis2000Дата: Чт, 22.03.2012, 17:52 | Сообщение # 122
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

xardaslich,
1. В ЗП эту аномалию убрали, что бы возродить поковыряй конфиги аномальных зон из ЧН (вроде [zone_mincer])
2. Да верно мыслите - видимо опечатка.


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

Здравствуйте. Пара вопросов возникло: "Если собираюсь спавнить аномалию, то в каком файле прописывать её спавн?" и "Если я в bind_stalker.script спавню авто, то как я узнаю, на какой локации она заспавнится? За это отвечает Level vertex?". Заранее благодарен.

На пыльных тропинках аномальных полей
Заспавнятся наши следы...
 
denis2000Дата: Вс, 25.03.2012, 17:25 | Сообщение # 124
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Lazur,
1. Проще через all.spawn
2. Level vertex и game vertex


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

denis2000, Через All.spawn нашёл только как зону аномальную делать, а я хочу одиночную (кисель, например). Чем их постановка отличается?

anomal_zone - накрывает группу одиночных аномалий, образуя из этого зону, в которой спавнятся артефакты, меняется позиция од. аномалий после выброса. А простая аномалия - и есть простая аномалия, просто ставите ее, и ничем не накрываете. Информация по теме: link раз, link два. XOBAH

Благодарю!
------------
Ещё вопрос: как по английски название аномалии "трамплин" (на какой "позывной" откликается аномалия)?


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


Сообщение отредактировал Lazur - Ср, 28.03.2012, 14:11
 
KoshaДата: Вс, 01.04.2012, 23:46 | Сообщение # 126
Отмычка
Пользователи
Сообщений: 32
Награды: 0
Репутация: [ 0 ]

тупой наверное вопрос, но: можно ли создать смарт-террайн на новой локаций (игра ЧН) не пользуясь СДК? (через ACDC к примеру)

Только два пути и есть через SDK или ACDC. denis2000

Добавлено (01.04.2012, 22:39)
---------------------------------------------
каков путь через acdc?

КМБ! denis2000

Добавлено (01.04.2012, 23:46)
---------------------------------------------
во время компиляций алл.спавна получил:
unknown section 'camp_zone' - там в примере идет для ЗП описание а в ЧН есть аналог этой функций?

В ЧН такой секции нет. denis2000
 
sergej5500Дата: Вт, 03.04.2012, 13:43 | Сообщение # 127
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Всем добрый день.
Изучая курс молодого бойца, сделал на Кордоне сквад долговцев на примере генерации сквада подонков.

[cut=Создал смарт-террайн вида][1241]

; cse_abstract properties
section_name = smart_terrain
name = dolg_1_smart
position = -205.273529052734, -33.2182197570801, -337.049224853516
direction = 0, 0, 0
version = 128
script_version = 12

; cse_alife_object properties
game_vertex_id = 2063
distance = 24
level_vertex_id = 47411
object_flags = 0xffffff3e
custom_data = <<END
[story_object]
story_id = zat_stalker_base_smart
[smart_terrain]
cfg = scripts\dolg\smart_1.ltx
END
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 2

; cse_alife_space_restrictor properties
restrictor_type = 3

; se_smart_terrain properties[/cut]
Запаковал all.spawn.
[cut=В файле scripts\dolg\smart_1 прописал логику][smart_terrain];dolg_1_smart
squad_id = 251
respawn_params = respawn@dolg_1_smart
max_population = 2
[respawn@dolg_1_smart]
spawn_stalker@dolg
[spawn_stalker@dolg]
spawn_squads = dolg_squad_1
spawn_num = 1[/cut]
[cut=В файле squad_descr_extended прописал][dolg_squad_1]:online_offline_group
faction = dolg
npc = dolg_s_1, dolg_s_2, dolg_s_3, dolg_s_4, dolg_s_5, dolg_s_6
story_id = dolg_sguad_1
target_smart = dolg_1_smart[/cut]
Прописал спавн, класс и профили НПС.
Запустил игру. 6 долговцев сидят на Кордоне на своем смарте, никуда не уходят. С командиром можно поторговать.
Вроде все нормально. Подложил им дистанционную взрывчатку. Взрывом убило всех шестерых. В КМБ указано "Условием рождения будет смерть предыдущего сквада. Запустим их на маршрут по Затону" . Бегал на другой конец Кордона, спал сутки, но долговцы не спавнятся. Как сделать, чтобы сквад спавнился по новой после гибели предыдущего. Заранее благодарен за советы.

Симуляция разрешена? Попробуй убрать target_smart. denis2000
target_smart удалил. Спавн долговцев заработал.
У меня была идея расположить сквады долговцев на важных точках Кордона, Болот, Затона и Юпитера.
Они должны были отвлекать внимание мутантов и бандитов от важных НПС, таких, как сталкеры на Шевченко, механики на Кордоне и на Болоте, часовой наемников на Юпитере. Главное требование к долговцам, чтобы они не уходили от точек спавна. Если удалить target_smart из конфига сквада, не пойдут ли они самостоятельно гулять по локации.


Сообщение отредактировал sergej5500 - Вт, 03.04.2012, 16:38
 
denis2000Дата: Вт, 03.04.2012, 17:03 | Сообщение # 128
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Свалят как пить дать. Тогда нужно делать по другому:
[cut]1. В секции сквада ставить target_smart.
2. В секции сквада добавть on_death = %+dolg_squad_1_dead%
3. сделать рестриктор с подобной логикой:
Code
[logic]
active = sr_idle@respawn

;------------------Респавн сквадов-------------------------------------------
[sr_idle@respawn]
on_info  = {+dolg_squad_1_dead !squad_exist(dolg_squad_1)} %=create_squad(dolg_squad_1:dolg_1_smart) -dolg_squad_1_dead%

Логика предельно упрощенная.[/cut]


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

Всем Добрый День.
После получения задания на поиск георадара, на подходе к насосной станции услышал интенсивную стрельбу. На станции нашел массу трупов сталкеров и бандитов.
[cut=Просмотрев файлы, нашел сквады]
Файл squad_descr_marsh.ltx
[mar_b2_bandit_invaders_1_squad]:online_offline_group
faction = bandit_enemy
assault_squad = true
npc = sim_default_bandit_enemy_0, sim_default_bandit_enemy_1, sim_default_bandit_enemy_2
target_smart = mar_smart_terrain_2
spawn_point = mar_smart_terrain_11_spawn_point
story_id = mar_b2_bandit_invaders_1_squad
on_death = %+mar_b2_bandit_invaders_1_squad_death%

[mar_b2_bandit_invaders_2_squad]:online_offline_group
faction = bandit_enemy
assault_squad = true
npc = sim_default_bandit_enemy_1, sim_default_bandit_enemy_2, sim_default_bandit_enemy_3
target_smart = mar_smart_terrain_2
spawn_point = mar_smart_terrain_14_spawn_point
story_id = mar_b2_bandit_invaders_2_squad
on_death = %+mar_b2_bandit_invaders_2_squad_death%

И условие их генерации:
Файл sgm tasks.skripts
--/Квест:Армейская поклажа
if has_alife_info("mar_army_cargo_talk_mechanic") and dont_has_alife_info("mar_army_cargo_georadar_timer") then
give_info("mar_army_cargo_georadar_timer")
start_game_timer("mar_georadar_timer",50)
create_force("mar_b2_bandit_invaders_1_squad","mar_smart_terrain_11")
create_force("mar_b2_bandit_invaders_2_squad","mar_smart_terrain_14")
end
[/cut]
В файлах mar_smart_terrain_11 и mar_smart_terrain_11 упоминания об этих сквадах нет.
На каких смартах генерируются бандитские сквады? Если генерация происходит на 11 и 14 смартах, то бандитов должны были обнаружить и расстрелять еще на подходе к станции. У меня они, видимо, спавнятся на самой станции, так как трупы бандитов лежали прямо в помещениях. Что нужно подправить в логике, чтобы бандиты гарантированно спавнились на 11 и 14 смартах. Заранее благодарен за советы.

P.S. Вопрос снимаю. Переигровка с заменой сквада бандитов на сквад сталкеров показала, что спавн происходит на 11 и 14 смартах.


Сообщение отредактировал sergej5500 - Вс, 08.04.2012, 12:48
 
GeonezisДата: Вс, 08.04.2012, 13:41 | Сообщение # 130
Разработчик «Смерти вопреки»
Свобода
Сообщений: 2360
Награды: 30
Репутация: [ 71 ]

sergej5500, они спавняться все как прописаны (11 и 14). но логика заставит их перемещаться в
Code

target_smart = mar_smart_terrain_2


Смерти Вопреки
Spectrum Project
AP_Prodaction
 
LazurДата: Сб, 14.04.2012, 13:44 | Сообщение # 131
Новичок
Пользователи
Сообщений: 82
Награды: 3
Репутация: [ 96 ]

Здравствуйте. Создал аномальную зону на Свалке (ЗП)при компиляции вижу [cut=Это]ссылка скрина на народе[/cut]
кусьман из all.[cut=spawn][6532]
; cse_abstract properties
section_name = zone_mine_steam_weak
name = xim_garbage9
position = 98.787094,-2.055592,-99.886077
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 1189
distance = 32.0
level_vertex_id = 246951
object_flags = 0xffffff3e

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 3

; cse_alife_space_restrictor properties
restrictor_type = 3 ;Тип рестриктора

; cse_alife_custom_zone properties
max_power = 0

; cse_alife_anomalous_zone properties
offline_interactive_radius = 30
artefact_spawn_count = 5
artefact_position_offset = 0x460

; se_zone_anom properties

[6533]
; cse_abstract properties
section_name = anomal_zone
name = gar_xim_anomal_zone
position = 98.787084,-2.055592,-99.886077
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 1189
distance = 0
level_vertex_id = 246951
object_flags = 0xffffff3e
custom_data = <<END
[anomal_zone]
cfg = scripts\garbage\anomaly\gar_xim_zone.ltx
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 2

; cse_alife_space_restrictor properties
restrictor_type = 3

[6534]
; cse_abstract properties
section_name = space_restrictor
name = gar_xim_anomaly_spot
position = 98.787194,-2.055592,-99.886077
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 1189
distance = 0
level_vertex_id = 246951
object_flags = 0xffffff3e
custom_data = <<END
[story_object]
story_id = gar_xim_anomaly_spot
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 1

; cse_alife_space_restrictor properties
restrictor_type = 3[/cut]

В представленных строках ошибок нет кроме комментария после назначения параметра (;Тип рестриктора), плюс дубликаты секций возможны. denis2000


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


Сообщение отредактировал Lazur - Сб, 14.04.2012, 13:45
 
БабайДата: Ср, 18.04.2012, 21:51 | Сообщение # 132
Ветеран
Пользователи
Сообщений: 483
Награды: 9
Репутация: [ 233 ]

Всем Привет! Какой параметр отвечает за реакцию НПС на выброс?

Никакой. Ручками-ручками. denis2000

В смысле "ручками"?

В смысле в логике НПС настраиваются его действия при выбросе. denis2000
Вот для примера логика Мстителя
[cut noguest]
[logic]
active = move@avenger

[move@avenger]
move_avail_speak = 15|wait|false|true
move_dest_number = 1147189
move_look_vertex = 1147196
move_state_when_center = sit
move_state_when_move = walk
move_combat_disable = true
move_home_teleport = true
meet = meet
invulnerable = true
on_info = {+zat_danger_parcel_otdano} nil %=remove_npc%
on_info2 = {=dist_to_actor_ge(80) +zat_danger_parcel_fail} nil %=release_npc%

[meet]
abuse = false
use = true
allow_break = false
meet_on_talking = false
trade_enable = true
[/cut]
Какие действия тут описаны?


Правильно заданный вопрос - половина правильного ответа!

Сообщение отредактировал Бабай - Ср, 18.04.2012, 22:19
 
denis2000Дата: Ср, 18.04.2012, 23:58 | Сообщение # 133
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Бабай, Вот логика прятаться в укрытии:
Code

[walker@work]
on_info ={=surge_started} walker@surge

[walker@surge]
path_walk = surge_walk
path_look = surge_look
def_state_moving1 = sprint
def_state_moving2 = sprint
def_state_moving3 = sprint
on_info = {!surge_started} walker@work


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
lychagin0Дата: Чт, 26.04.2012, 12:54 | Сообщение # 134
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
Награды: 9
Репутация: [ 278 ]

Добрый день,подскажите что в этой логике за что отвечает,а то боюсь упустить что ни будь.
[cut noguest=Логика рестриктора]
[logic]
active = sr_universal

[sr_universal]
scheme_type = level_change_zone
level_change_cond = {+esc_key_from_gate_founded} true, false
level_change_on_use = %+level_change_to_marsh_from_escape%
level_change_travel_coord = 15.017832756042,19.779502868652,712.16851806641
level_change_throw_coord = 18.188539505005,16.269477844238,676.32806396484,3.187,esc_key_from_gate_needed
level_change_travel_time = 2,30
level_change_spot = level_change_up_location,st_level_change_to_marsh,false
level_change_autosave = st_save_travel_escape_to_marsh
level_change_silent_travel = false
level_change_hidden_mode = {+esc_uncoupling_halt_searched} false, true
level_change_message_impossible = st_level_change_zone_ok_need_key_text[/cut]


 
denis2000Дата: Чт, 26.04.2012, 21:53 | Сообщение # 135
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

[cut][logic] - Базовая секция
active = sr_universal - Ссылка на активную секцию (то есть ту которая работает сразу после появления рестриктора)

[sr_universal] - логика универсального рестриктора из файла sr_universal.script
scheme_type = level_change_zone - тип схемы (универсальный имеет несколько схем в одном скрипте sound_zone, noweap_zone, throw_zone и тд. и тп.)
level_change_cond = {+esc_key_from_gate_founded} true, false - условие при котором рестриктор работает (true) или не работает (false)
level_change_on_use = %+level_change_to_marsh_from_escape% - действия при срабатывании рестриктора (скрипт или выдача/отбор инфопорций)
level_change_travel_coord = 15.017832756042,19.779502868652,712.16851806641 - координаты точки в которой происходит сохранение, прокрутка времени и подготовка к телепортации (затемнение отбор управления у игрока и тп.) и в этих координатах собственно и расположен сам левел ченджер заспавненый через all.spawn
level_change_throw_coord = 18.188539505005,16.269477844238,676.32806396484,3.187,esc_key_from_gate_needed - координаты точки, направление взгляда при телепортации на йтекущую локацию и инфопорции которые выдаются.
level_change_travel_time = 2,30 - время в пути (час, мин)
level_change_spot = level_change_up_location,st_level_change_to_marsh,false - три параметра: имя тега с иконкой перехода, подпись под иконкой, скрывать иконку в случае скрытого перехода (true) или нет (false)
level_change_autosave = st_save_travel_escape_to_marsh - имя тега с названием автосохранения при активации рестриктора
level_change_silent_travel = false - показывать (false) или нет (true) окно разрешения игроком перехода
level_change_hidden_mode = {+esc_uncoupling_halt_searched} false, true - условие при котором иконка рестриктора скрыта (true) или присутствует на карте (false)
level_change_message_impossible = st_level_change_zone_ok_need_key_text - имя тега с названием причины неработоспособности перехода, например нет ключа от ворот.[/cut]


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
Поиск: