Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Пример рабочего смарттеррейна в ЧН
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
Trollz0r
Посоны, я решительно не могу создать работающий смарттеррейн в ЧН. Игра валится со знаменитой жалобой на _G.script:973, и я даже не могу понять, что делаю не так.
Если закомментировать строку, на которую вылезает ругань, то игра запустится, но никаких неписей в ней не появится. Если после этого добавить на карту уникального НПС, то он уйдёт бродить по локации, не подчиняясь смарту.

Внимание, вопрос: каков минимальный набор ИИ-сущностей для запуска респавна в игре?

У меня есть голая карта с одним Сидоровичем на ней, но он не считается, т.к. на классе монстра и сталкирским схемам не подчиняется.
ИИ-сетка и графпойнты есть.
ИИ-сетка скомпилирована командой xrAI.exe -f map, спавн скомпилирован командой xrAI.exe -s escape -no_separator_check

Что я делаю:
1) добавляю смарттеррейн, настройки не трогаю
2) в кастомдату пишу следующее:
Код
[smart_terrain]
targets = esc_st_test
sim_type = territory
sim_value = 2
squad_capacity = 3
squad_id = 3
sim_avail = true
def_restr = esc_st_village_sr_defense
att_restr = esc_st_village_sr_attack
respawn_sector = stalker
surge_hide_avaliable = true

[exclusive]
wolf = escape\esc_wolf.ltx

3) накрываю смарттеррейн двумя рестрикторами (со стандартными настройками) — esc_st_village_sr_defense и esc_st_village_sr_attack
4) делаю аналогичный рестриктор esc_st_test рядом, ему в targets указываю esc_st_village
5) экспортирую спавн, собираю спавн, запускаю игру, получаю описанное сверху

Что не так, чего не хватает?
Shoкer
973 строка это из скриптовой функции abort(), то-есть скрипты сознательно крашат игру т.к ты неправильно что то настроил.
После такого вылета ты должен открыть лог (целиком) и чуть выше FATAL ERROR будет собственно сам текст ошибки (Начинаться с "ERROR:" )

Единственное что - в ТЧ в релизной версии движка текст ошибки в лог не выводился (т.к сама функция не была экспортирована корректно), но вроде как в ЧН с этим порядок. Если никакого текста с ошибкой нету, то попробуй в _g.script поменять местами строки 973 (assert) и 974 (error_log).
Trollz0r
В том и дело, что ошибка не пишется в лог.
лог
* Detected CPU: AuthenticAMD , F15/M2/S0, 3991.00 mhz, 45-clk 'rdtsc'
* CPU Features: RDTSC, MMX, SSE, SSE2

Initializing File System...
using fs-ltx fsgame.ltx
FS: 27061 files cached 0 archives, 3828Kb memory used.
Init FileSystem 0.829917 sec
'xrCore' build 3795, Jun 25 2009

Initializing Engine...
Starting INPUT device...
Loading DLL: xrRender_R2.dll
Loading DLL: xrRender_R3.dll
refCount:m_pAdapter 1
command line -start server(escape/single/alife) -ltx user_r3_high.ltx -hq -smap4096 -ss_tga -silent_error_mode
Executing config-script "user_r3_high.ltx"...
[x:\_appdata_\user_r3_high.ltx] successfully loaded.
Loading DLL: xrRender_R2.dll
Loading DLL: xrGame.dll
* [win32]: free[4077540 K], reserved[44440 K], committed[72260 K]
* [ D3D ]: textures[0 K]
* [x-ray]: crt heap[6947 K], process heap[676 K], game lua[0 K], render[0 K]
* [x-ray]: economy: strings[1498 K], smem[0 K]
SOUND: OpenAL: enumerate devices...
SOUND: OpenAL: EnumerationExtension Present
devices Generic Hardware
SOUND: OpenAL: system default SndDevice name is Generic Hardware
SOUND: OpenAL: default SndDevice name set to Generic Software
SOUND: OpenAL: All available devices:
1. Generic Software, Spec Version 1.1 (default) eax[0] efx[no] xram[no]
2. Generic Software, Spec Version 1.1 (default) eax[0] efx[no] xram[no]
Executing config-script "user_r3_high.ltx"...
Executing config-script "x:\gamedata\configs\rspec_extreme.ltx"...
[x:\gamedata\configs\rspec_extreme.ltx] successfully loaded.
[x:\_appdata_\user_r3_high.ltx] successfully loaded.
SOUND: Selected device is Generic Software
* sound: EAX 2.0 extension: absent
* sound: EAX 2.0 deferred: absent
* sound : cache: 65537 kb, 4856 lines, 13820 bpl
Starting RENDER device...
* GPU [vendor:10DE]-[device:1189]: NVIDIA GeForce GTX 670
* GPU driver: 10.18.13.6175
* CREATE: DeviceREF: 1
* Vertex Processor: PURE HARDWARE
* Texture memory: 4014 M
* DDI-level: 9.0
* GPU shading: vs(fffe0300/3.0/30), ps(ffff0300/3.0/30)
* GPU vertex cache: unrecognized, 16
* NVidia MGPU: Logical(1), Physical(1)
* Starting rendering as 2-GPU.
* DVB created: 1536K
* DIB created: 512K
! Renderer doesn't support blender 'effects\shadow_world'
* NULLRT supported
* ...and used
* HWDST/PCF supported and used
* NV-DBT supported and used
- r__tf_aniso 16
- r2_tf_mipbias 0.
Starting engine...
Loading DLL: xrGameSpy.dll
* DVB created: 1536K
* DIB created: 512K
- r__tf_aniso 16
- r2_tf_mipbias 0.
* GPU shading: vs(fffe0300/3.0/30), ps(ffff0300/3.0/30)
* GPU vertex cache: unrecognized, 16
* NVidia MGPU: Logical(1), Physical(1)
* Starting rendering as 2-GPU.
*** RESET [1133 ms]
bin\xrengine.exe -start server(escape/single/alife) -ltx user_r3_high.ltx -hq -smap4096 -ss_tga -silent_error_mode
* phase time: 0 ms
* phase cmem: 91492 K
Кэширование объектов...
Loading objects...
Loading models...
* [prefetch] time: 182 ms
* [prefetch] memory: 0Kb
* phase time: 221 ms
* phase cmem: 91492 K
Сервер: Старт...
* phase time: 85 ms
* phase cmem: 91975 K
Сервер: Загрузка симуляции жизни...
* Cannot find saved game x:\savedgames\escape.sav
* phase time: 1 ms
* phase cmem: 91975 K
Создание новой игры...
* Creating new game...
* Loading spawn registry...
* 149 spawn points are successfully loaded

FATAL ERROR

[error]exp​ression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp
[error]Line : 180
[error]Description : <no exp​ression>
[error]Arguments : LUA error: x:\gamedata\scripts\_g.script:973: bad argument #2 to 'format' (string expected, got nil)


stack trace:

_g.script:
CODE
-- крешнуть игру (после вывода сообщения об ошибке в лог)
function abort(fmt, ...)
local reason = string.format(fmt, ...)
assert("ERROR: " .. reason)
log("ERROR: " .. reason)
log(string.format("%s",nil)) -- 973 строка
end

Строки менял местами, толку ноль. Всегда ругается на log(string.format("%s",nil))
abramcumner
Цитата(RedPython @ 05.01.2017, 13:16) *
Строки менял местами, толку ноль. Всегда ругается на log(string.format("%s",nil))

Команды log, assert отрублены в релизе. Попробуй добавить перед 973 строкой:
Код
local s = string.gsub(reason, "%s", "_")
get_console():execute("load "..s)
ZeeK
Цитата(RedPython @ 05.01.2017, 10:58) *
Если закомментировать строку, на которую вылезает ругань, то игра запустится, но никаких неписей в ней не появится. Если после этого добавить на карту уникального НПС, то он уйдёт бродить по локации, не подчиняясь смарту.

В ЧН НПС-я подчинены faction_название_группировки, отдельно они не спамятся, а спамятся на смартах, которые находятся в разделе [start_position], где описаны начальные отряды и точки спавна, попробуй внеси свой смарт в этот список и запустить игру по новому.

Добавлю, что уникальные НПС должны иметь свою логику, если ее не будет, то НПС-я захватит A-life и пустит во все тяжкие в пределах локации.
Trollz0r
Цитата(abramcumner @ 05.01.2017, 13:06) *
Цитата(RedPython @ 05.01.2017, 13:16) *
Строки менял местами, толку ноль. Всегда ругается на log(string.format("%s",nil))

Команды log, assert отрублены в релизе. Попробуй добавить перед 973 строкой:
Код
local s = string.gsub(reason, "%s", "_")
get_console():execute("load "..s)

Спасибо, сработало smile.gif

CODE
Сервер: Старт...
* phase time: 63 ms
* phase cmem: 91959 K
Сервер: Загрузка симуляции жизни...
* Cannot find saved game x:\savedgames\escape.sav
* phase time: 1 ms
* phase cmem: 91959 K
Создание новой игры...
* Creating new game...
* Loading spawn registry...
* 153 spawn points are successfully loaded
! Cannot find saved game there_is_no_kamp_path_in_smart[esc_st_village]

FATAL ERROR

[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp
[error]Line : 180
[error]Description : <no expression>
[error]Arguments : LUA error: x:\gamedata\scripts\_g.script:975: bad argument #2 to 'format' (string expected, got nil)


stack trace:

Надо было писать kamp, а не camp. В команде сталкир ЧН явно был немец.



ZeeK, да, я в курсе. Проблема лишь в отладке.
Trollz0r
А на что может указывать такой вылет?
CODE
Сервер: Старт...
* phase time: 76 ms
* phase cmem: 91975 K
Сервер: Загрузка симуляции жизни...
* Cannot find saved game x:\savedgames\escape.sav
* phase time: 1 ms
* phase cmem: 91975 K
Создание новой игры...
* Creating new game...
* Loading spawn registry...
* 149 spawn points are successfully loaded

FATAL ERROR

[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp
[error]Line : 180
[error]Description : <no expression>
[error]Arguments : LUA error: x:\gamedata\scripts\smart_terrain.script:76: bad argument #1 to 'pairs' (table expected, got nil)


stack trace:
Появляется после добавления sim_faction с кастомдатой
Код
[faction]
name = stalker
base_smart = esc_st_village
settings = misc\faction_stalker.ltx
faction_stalker:
CODE
[settings]
;Количество дополнительных отрядов, в зависимости от числа захваченных территориальных точек
glory_0 = 0


[spawn_by_resource]
;Какие профили спаунить в зависимости от уровня ресурсов группировки
0 = sim_default_stalker_0, 80, sim_default_stalker_1, 20
1 = sim_default_stalker_0, 50, sim_default_stalker_1, 30, sim_default_stalker_2, 20
2 = sim_default_stalker_1, 50, sim_default_stalker_2, 30, sim_default_stalker_3, 20
3 = sim_default_stalker_2, 50, sim_default_stalker_3, 30, sim_default_stalker_4, 20


[spawn_by_level]
escape = sim_default_stalker_0, 40, sim_default_stalker_1, 30, sim_default_stalker_2, 15, sim_default_stalker_3, 10, sim_default_stalker_4, 5


[expansion_0]
;Цели группировки на текущем левеле развития
base_squad_number = 0
precondition_power = 0


[secondary_targets]


[start_position]
esc_st_village_stalker_2_squad_01 = esc_st_village
squad_descr.ltx:
Код
[esc_st_village_stalker_2_squad_01]
faction = stalker
npc = sim_default_stalker_1, sim_default_stalker_1, sim_default_stalker_1, sim_default_stalker_1, sim_default_stalker_1
target_smart = esc_st_village
abramcumner
Цитата(RedPython @ 05.01.2017, 17:35) *
[error]Arguments : LUA error: x:\gamedata\scripts\smart_terrain.script:76: bad argument #1 to 'pairs' (table expected, got nil)

А что там в smart_terrain.script:76? smile.gif Залей файл куда-нибудь.
ZeeK
Цитата(RedPython @ 05.01.2017, 18:35) *
squad_descr.ltx

Не знаю насчет squad_descr.ltx, но в игре каждая локация имеет свой отдельный "squad_descr_название_локации" с именными отрядами, а в базовом файле только отряды для симуляции записаны аля [sim_stalker_squad_2]:online_offline_group и #include "squad_descr_название_локации.ltx". Мб стоит зарегистрировать [esc_st_village_stalker_2_squad_01] в отдельном squad_descr_название_локации?
Trollz0r
abramcumner, скрипт: http://pastebin.com/M3G781sr
все скрипты (это ЧН 1.5.10, правлен только _g.script по твоему рецепту): http://rgho.st/private/6YSKLZgVc/669d75770...679e44f170f96fa

ZeeK, вообще-то у меня так и сделано, инклюженый файл я не стал здесь указывать для упрощения восприятия. По идее движку всё равно, откуда читать конфиг: сразу из system.ltx, из инклюда в system.ltx, из инклюда в инклюд в system.ltx...
abramcumner
smart_terrain.script:76
Код
    for k,v in pairs(jobs) do

вместо списка работ передали nil. Скорее всего рекурсивный вызов из:
Код
83.            -- Это работа-кластер или работа-описание.
84.            if v.job_id == nil then
85.                -- Вызываем рекурсивно себя для списка работ кластера
86.                selected_job_id, current_job_prior, selected_job_link = job_iterator(v.jobs, npc_data, selected_job_prior, smart)

Ты что-нибудь знаешь про работы-кластеры или работы-описания? smile.gif
Yara
По поводу функции abort (только для ЧН / ЗП), то можно ещё так (в логе, перед fatal error, будет: ! [LUA][ERROR] ...):
Код
function abort(fmt, ...)
    local reason = string.format(fmt, ...)
    error_log(reason)
end


А по смарту, ты добавлял пути(работы) для него? По типу (доступные перечислены в gulag_general.script, к комменту выше):
...
esc_my_smart_walker_1_look
esc_my_smart_walker_1_walk
...
и т.д.

ZeeK
Удалось создать смарт_террейн рабочий в итоге?
Trollz0r
Пока не пробовал. Как (если) попробую — отпишу smile.gif

Цитата(Yara @ 06.01.2017, 13:42) *
esc_my_smart_walker_1_look
esc_my_smart_walker_1_walk
Если имя обязательно должно соответствовать шаблону way_имясмарта_walker_номер_look, то нет, не добавлял.
ZeeK
Цитата(RedPython @ 09.01.2017, 13:22) *
Если имя обязательно должно соответствовать шаблону way_имясмарта_walker_номер_look, то нет, не добавлял.

Если в смарте нет уникальной работы, например для квестов, то создавать way_ и look_ не требуется, игра (ЧН\ЗП) сама подхватит НПСей в стандартные работы: сидеть у костра, анекдоты, гитара и т.д.
Stalker_Monolit
Разве в targets можно указывать рестрикотры? Как я помню то там указываются соседние смарты не рестрикоры я в недоумении как я понял esc_st_test это рестриктор или нет?
Trollz0r
st — smart_terrain
sr — space_restrictor
esc_st_test — это смарттеррейн
Stalker_Monolit
Цитата(RedPython @ 10.01.2017, 16:40) *
esc_st_test — это смарттеррейн

Тогда пардон unsure.gif
Trollz0r
Благодаря abramcumner'у симуляцию удалось запустить. По крайней мере, симуляцию кампа: сталкеры сидят вокруг точки _kamp_1 и делают вид, что рассказывают анекдоты у костра.
Вылет был потому, что скрипты требуют ещё и путь _kamp_1_task

О необходимости пути _task в доках не указано, но он учитывается в скриптах и есть в пысовских локациях.
Возможно, _task как-то используется скриптами проводников.


ЗЫ
Параметру targets можно не присваивать значение:
Код
targets =

Параметр sim_type может быть типа base (об этом единожды упоминается в мане по базам группировок):
Код
sim_type = base
ZeeK
Цитата(RedPython @ 05.02.2017, 16:55) *
Параметру targets можно не присваивать значение:

Если не будет Таргетов, то сталкеры никуда не уйдут с смарт-террейна и никогда на него не придут новые, потому что сквады в ЧН идут по таргетам. В оригинале вообще неприятная ситуация, когда вся жизнь на локациях замирает в связи с тем, что отряду нада пройти на точку на другом смарте, а на пути смарт, занятый нейтральной группировкой. В ОГСМ это исправили вроде бы. Во Fraction Commander выкидывается предупреждение, что отряд никуда не пойдет ибо смарты впереди переполнены.
Trollz0r
Никак не получается заставить работать эксклюзивных нпц.

В опциях смарта пишу:
Код
[exclusive]
stalkir = escape\stalkir.ltx

В stalkir.ltx пишу:
Код
[logic@stalkir]
active          = walker
on_death        = death
и так далее


А сталкир тупо не появляется. В чём может быть дело?
FL!NT
RedPython,
А ты вообще какой то сквад на смарт спавнишь или ждешь, что он из воздуха возьмется?
Trollz0r
Ну да, из воздуха. Эксклюзивный же нпц.
А если ставлю тушку, как в ТЧ, и прописываю ей в кастомдату ссылку на логику, то она стоит и тупит, не отыгрывая заданную схему (раненый).
Diesel
RedPython, я не в теме ЧН, но я там есть.
Там же в ЧН есть пример "Кондуктора", как единственного эксклюзива на болотах
FL!NT
Цитата(RedPython @ 29.08.2017, 23:09) *
Ну да, из воздуха. Эксклюзивный же нпц.

Долго будешь ждать))
Код
[logic@stalkir]
active          = walker@main
suitable = {=npc_community(stalker)}
prior = 130

[walker@main]
on_death        = death
и так далее

что то вроде этого, спавнишь сквад, одного из них делаешь раненым

Ну и тушка должна в принципе работать, большой разницы не будет.
Trollz0r
В принципе у меня так и сделано:
Код
[smart_terrain]
targets                 = esc_village_st, esc_granary_st, esc_atp_st
sim_type                = default
squad_capacity          = 1
squad_id                = 9
sim_avail               = true
def_restr               = esc_tutorial_wounded_st_def_sr
att_restr               = esc_tutorial_wounded_st_att_sr

work1        = esc\tutorial_wounded.ltx


tutorial_wounded.ltx:
Код
[logic@work1]
active          = walker@wait_help
suitable        = {=check_npc_name(esc_tutorial_wounded)}
job_online      = true
prior           = 130
on_death        = death

[walker@wait_help]
combat_ignore_cond                  = true
combat_ignore_keep_when_attacked    = true
path_walk                           = walk
path_look                           = look
wounded                             = wounded
def_state_standing                  = wait

[wounded]
hp_state         = 20|wounded_heavy_2@nil
hp_state_see    = 20|wounded_heavy_2@nil
autoheal = false
enable_talk = false

В этом варианте чувак появляется, но тупо стоит, а не лежит не земле. Такое чувство, что схема раненого не отрабатывает. Никто не помнит, в 10 патче раненый в Лиманске лежал или стоял?


А тушку вообще не получается взять под контроль, она в любом случае уходит гулять по локации (и в половине случаев отправляется прямиком к сидоровичу, намертво вешая игру).
FL!NT
RedPython,
Прежде чем это все смотреть, вернемся к вопросу
Цитата(FL!NT @ 29.08.2017, 21:51) *
А ты вообще какой то сквад на смарт спавнишь

?smile.gif

А тушку похоже не ту в СДК выбираешь или настройки))
Trollz0r
Чтобы ответить на этот вопрос, тебе придётся разъяснить мне, что понимается под выражением "заспавнить сквад на смарт". Я прописал группу в блабла_faction.ltx и squad.ltx, указав ей свой смарт. В итоге в смарте появились пятеро придурков, один из которых (на снимке ближе к объективу) должен отыгрывать схему раненого, но, как видишь, он сцуко просто стоит.
FL!NT
Этого я и добивался, есть у тебя на смарте кто ни будь или нет))

Попробуй в [logic] добавить
wounded = wounded


вообще надо проверить докатывается ли он у тебя до секции wait_help или вообще ни кто не встал под логику, в скваде есть нпс с именем esc_tutorial_wounded?


вот оно))

def_state_standing = wait

стоит смотрит на точку)))

На секцию wounded он перейдет только, когда получит реальный достаточный хит, на сколько помню.) Все сценки с раненым лишь имитация.
Trollz0r
Цитата(FL!NT @ 29.08.2017, 21:12) *
Попробуй в [logic] добавить
wounded = wounded
Это ничего не даёт, непись так же стоит и тупит.
Цитата(FL!NT @ 29.08.2017, 21:12) *
вообще надо проверить докатывается ли он у тебя до секции wait_help
Да, потому что непись стоит на пути walk.
Цитата(FL!NT @ 29.08.2017, 21:12) *
в скваде есть нпс с именем esc_tutorial_wounded?
Есть, но это уже неважно smile.gif сейчас бы любого нпц заставить отрабатывать логику раненого.
Сократил до такого:
CODE
[logic@work1]
active = walker
job_online = true
prior = 130

[walker]
path_walk = walk
path_look = look
wounded = wounded

[wounded]
hp_state = 20|wounded_heavy_2@nil
hp_state_see = 20|wounded_heavy_2@nil
autoheal = false
enable_talk = false
И ничего не изменилось. Схема раненого не отрабатывает (или не включается из валкера), даже если я пытаюсь подстрелить нпц.
Молния в вакууме
RedPython, а здоровье у непися какое? По этой логике должно быть 0.2 или меньше, чтоб он упал.
ПЫС раненых сталкеров ставили в LE, а не спавнили через смарты. Если надо через смарт, можно попробовать отдельную секцию сделать с health = 20 в spawn_sections, потом прописать в отряд. Но я не проверял.

Вообще, логика в сталкере это нечто странное. Без поллитры не разобраться. drunk.gif
FL!NT
RedPython,
Да все я понял.)
wounded =wounded
не делает нпс раненым и не заставляет его биться в конвульсиях)), а всего лишь перекрывает дефолтную схему раненого и к ней он перейдет только в случае действительно ранения
вся твоя схема должна прописываться ручками на ремарках- анимки, стоны, диалоги и пр.
Trollz0r
Цитата(saas @ 30.08.2017, 11:14) *
а здоровье у непися какое? По этой логике должно быть 0.2 или меньше, чтоб он упал.
ставил и 0.01, ничего не изменилось.

Флинт, ну ведь в любом случае схема раненого должны была сработать.

Отвлечёмся на время от эксклюзивных работ и посмотрим, как сделан раненый бандит у пыс. Профиль обычного симуляционного перса, уникальный SID, здоровье 0.2, в кастомдате ссылка на LTX следующего вида:
Код
[logic]
active = walker@wait_help
on_death = death
on_hit = hit
relation = neutral
meet = no_meet

[hit]
on_info = %+lim_bandit_away%

[death]
on_info = %+lim_bandit_wonded_1_out +lim_bandit_away%

[walker@go_point]
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
path_walk = lim_bandit_wonded_1_walk
path_look = lim_bandit_wonded_1_look
def_state_moving1 = run
def_state_moving2 = run
def_state_moving3 = run
def_state_standing = wait
on_signal = action | remark@wait_help

[walker@wait_help]
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
path_walk = lim_bandit_wonded_1_walk
path_look = lim_bandit_wonded_1_look
wounded = wounded
;meet = no_meet
def_state_moving1 = walk
def_state_moving2 = walk
def_state_moving3 = walk
def_state_standing = wait
on_info = {+lim_bandit_health_restore} walker@wait2 %=restore_health%
on_info2 = {=hit_by_actor} %+lim_bandit_away%
on_info3 = {!health_le(0.3)} walker@wait2 %+lim_bandit_health_restore%

[walker@wait2]
combat_ignore_cond = true
path_walk = lim_bandit_sanks_1_walk
path_look = lim_bandit_sanks_1_look
;meet = no_meet
def_state_moving1 = walk
def_state_moving2 = walk
def_state_moving3 = walk
def_state_standing = wait
on_info = {+lim_bandit_wounded_go} patrol@go
on_info2 = {=hit_by_actor} %+lim_bandit_away%

;*** уходят из Лиманска
[patrol@go]
;meet = no_meet
combat_ignore_cond = true
path_walk = lim_bandit_go_walk
move_type = walk
def_state_moving = walk
on_signal = action | %=destroy_object%
on_info = {=hit_by_actor} %+lim_bandit_away%


[wounded]
hp_state         = 20|wounded_heavy_2@nil
hp_state_see    = 20|wounded_heavy_2@nil
autoheal = false
enable_talk = false
В чистом ЧН этот бандит лежал на земле. У меня же он почему-то стоит death.gif

Что-то сломалось, но вот что?
Молния в вакууме
Цитата(RedPython @ 30.08.2017, 13:55) *
Что-то сломалось, но вот что?

Хороший вопрос. В скриптах что-то менялось?
ZeeK
Посмотри path_walk = lim_bandit_sanks_1_walk в all.spawn, возможно там на точке присвоена принудительная анимация с флажком a = wounded
FL!NT
RedPython,
wounded срабатывает не на количество здоровья, а на получение хита, т.е. от выстрела. Твоя схема может сработать в случае стремящимся к бесконечности и то не факт, все будет зависеть от того, какое событие обрабатывается в первую очередь wounded или combat. Если combat срабатывает вперед, то вообще ни когда. НПС просто срывается в универсальный комбат и на твой wounded кладет большой и толстый)) т.к. уходит с секции и вообще с твоего скрипта до завершения боевки. А там может прийти и другой НПС на эту работу и так по кругу.

Что касается второго случая, то тут анимка скорее всего действительно закинута на вайпоинт.
Молния в вакууме
Не, это всё фигня. Если спаунить как бандита в Лиманске, никаких флагов на пути ставить не надо. И даже если он пойдёт с кем-то воевать, когда он всех убьет он ляжет лежать обратно.

Кинцо
Trollz0r
В скриптах что-то менялось, но ничего кардинального и уж тем более связанного с логикой.
Буду откатывать все правки подряд, мб найду косяк. Нет мыслей, что смотреть в первую очередь?

У лиманских бандитов есть флаги sig=action, но это тоже не относится к делу.

---------------------
Если стрельнуть в заспавненного "как бы раненого", то игра вообще валится
CODE
HIT_CALLBACK: esc_tutorial_wounded amount=34.791263580322 bone=6
* loading script sr_territory.script
! [LUA] SCRIPT RUNTIME ERROR
! [LUA] 0 : [C] [C](-1) :
! [LUA] 1 : [Lua] x:\gamedata\scripts\xr_wounded.script(495) : hit_callback
! [LUA] 2 : [Lua] x:\gamedata\scripts\xr_motivator.script(215) :
! [LUA] 3 : [C ] set_relation
! [LUA] 4 : [Lua] x:\gamedata\scripts\xr_logic.script(1474) : initialize_obj
! [LUA] 5 : [Lua] x:\gamedata\scripts\smart_terrain.script(1026) : setup_gulag_and_logic_on_spawn
! [LUA] 6 : [Lua] x:\gamedata\scripts\xr_motivator.script(152) :
! [LUA] x:\gamedata\scripts\xr_wounded.script:495: attempt to index field '?' (a nil value)
! [LUA] 0 : [C] [C](-1) :
! [LUA] 1 : [Lua] x:\gamedata\scripts\xr_wounded.script(495) : hit_callback
! [LUA] 2 : [Lua] x:\gamedata\scripts\xr_motivator.script(215) :
! [LUA] 3 : [C ] set_relation
! [LUA] 4 : [Lua] x:\gamedata\scripts\xr_logic.script(1474) : initialize_obj
! [LUA] 5 : [Lua] x:\gamedata\scripts\smart_terrain.script(1026) : setup_gulag_and_logic_on_spawn
! [LUA] 6 : [Lua] x:\gamedata\scripts\xr_motivator.script(152) :

FATAL ERROR

[error]Expression : fatal error
[error]Function : CScriptEngine::lua_pcall_failed
[error]File : ..\xrServerEntities\script_engine.cpp
[error]Line : 192
[error]Description : <no expression>
[error]Arguments : LUA error: x:\gamedata\scripts\xr_wounded.script:495: attempt to index field '?' (a nil value)


stack trace:

0023:63AD2FA1 xrCore.dll, xrDebug::fatal(97)
0023:6472BA60 lua.JIT.1.1.4.dll, lua_getinfo(5168)
0023:6472B041 lua.JIT.1.1.4.dll, lua_getinfo(2577)
0023:6472AEF8 lua.JIT.1.1.4.dll, lua_getinfo(2248)
0023:6474773B lua.JIT.1.1.4.dll, luaopen_table(3771)
0023:64736BCD lua.JIT.1.1.4.dll, luaopen_jit(20749)
0023:6472B6E1 lua.JIT.1.1.4.dll, lua_getinfo(4273)
0023:6472BA60 lua.JIT.1.1.4.dll, lua_getinfo(5168)
0023:64722112 lua.JIT.1.1.4.dll, lua_call(82)
0023:6472BCB5 lua.JIT.1.1.4.dll, lua_yield(149)
0023:64722172 lua.JIT.1.1.4.dll, lua_pcall(82)
0023:670BBF55 luabind.beta7-devel.rc4.dll, luabind::detail::pcall(69)
0023:5D676D21 xrGame.dll, CDialogHolder::shedule_Name(2772849)
0023:5D8CA62A xrGame.dll, CDialogHolder::OnFrame(720986)
0023:5D545629 xrGame.dll, CDialogHolder::shedule_Name(1521785)
0023:5D54536C xrGame.dll, CDialogHolder::shedule_Name(1521084)
Trollz0r
Посоны, кто догадается, что не давало сталкиру прилечь под чутким контролем схемы?
Нажмите для просмотра прикрепленного файла
Конфиг аналогичный вышеприведённым — схема wounded, скрипты не поломаны и даже user.ltx не при чём! Причина настолько тупая, насколько и странная. Попробуйте догадаться, это что-то уровня 2007 года и санёк а-лайф мода bash.gif
Yara
Ну не томи, выкладывай )
Раз не скрипты, то конфиги. Когда возникают такие баги, сравниваю свою геймдату с оригиналом с помощью программ (Beyond Compare или Araxis Merge), пару раз находил опечатки, лишние точки и т.п. - при исправлении оных, всё приходило в норму.
Trollz0r
В alife.ltx выставил switch_distance равным 10000, чтобы уровень сразу с начала игры был в онлайне. Оказалось, что это приводит к непредвиденным последствиям scratch_one-s_head.gif
ForserX
RedPython, к каким? А то заинтриговал.
Trollz0r
К описывавшимся всю предыдущую страничку. А уж почему такое происходит — это ты нам должен рассказывать, тыжпрограммист всё-таки smile.gif
ForserX
RedPython, если не забуду, гляну под деббагером
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.