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


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


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

Цитата men_stalker ()
И похоже он не видит логику(нету метки торговца и при торговле ничего нету,


Каким образом прописана ссылка на файл логики?

Цитата men_stalker ()
при попытке что либо продать - вылет)


Какой лог вылета?
 
men_stalkerДата: Пн, 20.06.2016, 13:31 | Сообщение # 1322
Инженер «Свободы»
Свобода
Сообщений: 184
Награды: 5
Репутация: [ 40 ]

sergej5500,
Цитата sergej5500 ()
Каким образом прописана ссылка на файл логики?

в all.spawn
Код
custom_data = <<END
[logic]
cfg = scripts\escape\esc_trader.ltx
END


Всё проверил, пути и названия сответствуют.

[/cut]
Цитата sergej5500 ()
Какой лог вылета?

[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 : ... - Зов Припяти\gamedata\scripts\trade_manager.script:211: attempt to index field '?' (a nil value)


stack trace:
 
denis2000Дата: Пн, 20.06.2016, 18:34 | Сообщение # 1323
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

men_stalker, В секции из all.spawn
Это лишнее:
story_id = 410
Этого не хватает:
character_profile = esc_sidor_trader
cse_alife_trader_abstract__unk1_u8 = 1


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
men_stalkerДата: Вт, 21.06.2016, 08:22 | Сообщение # 1324
Инженер «Свободы»
Свобода
Сообщений: 184
Награды: 5
Репутация: [ 40 ]

denis2000, исправил но не помогло. А ест ли какой нибудь альтернативный способ прописать логику? Теперь я уверен что он её не видит: прописал специально неправильное название: ровно ничего не изменилось. И ест ли вообще необходимые анимации в зп?
 
sergej5500Дата: Вт, 21.06.2016, 09:33 | Сообщение # 1325
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата men_stalker ()
Теперь я уверен что он её не видит: прописал специально неправильное название: ровно ничего не изменилось.


Вы после правки алл.спавн и его сборки начинали новую игру?

Цитата men_stalker ()
А ест ли какой нибудь альтернативный способ прописать логику?


Можно добавить в спавн-секцию Сидоровичу ссылку на файл логики. Строка custom_data = ...

Можно сделать Сидоровича сквадом из одного НПС. Логику зарегистрировать в смарте, как эсклюзив. Разработчики Зова Припяти предпочитают этот способ.
 
denis2000Дата: Вт, 21.06.2016, 10:02 | Сообщение # 1326
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата men_stalker ()
А ест ли какой нибудь альтернативный способ прописать логику?

Что кастом дату делать в all.spawn, что в секции НПС ризницы нет. Логика не работает, проверяйте путь и имя файла логики, может там русские буквы есть.
Цитата men_stalker ()
И ест ли вообще необходимые анимации в зп?

Если бы не было был бы вылет с указанием какой анимации нет.
Цитата sergej5500 ()
Можно сделать Сидоровича сквадом из одного НПС. Логику зарегистрировать в смарте, как эсклюзив.

Это скорее всего сработает непредсказуемо, ведь схема mob_trader не рассчитана на сквад.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
men_stalkerДата: Вт, 21.06.2016, 10:57 | Сообщение # 1327
Инженер «Свободы»
Свобода
Сообщений: 184
Награды: 5
Репутация: [ 40 ]

А не могли бы вы пояснить за что отвечает строка on_actor_dist_ge_nvis2 = 11? А может быть что игра не видит скрипты bind_trader и mob_trader?, в уроке они по моему нигде не регистрировались.
 
denis2000Дата: Вт, 21.06.2016, 11:10 | Сообщение # 1328
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

bind_trader.script регистрируется здесь:
m_sidor.ltx
Код
[m_trader]
...
script_binding    = bind_trader.bind

mob_trader.script как схема поведения регистрируется здесь:
modules.script
Код
--]] -----------------------------------------------------------------------------------------------
--/                                Variables
--]] -----------------------------------------------------------------------------------------------
-- Типы схем:
stype_stalker  = 0
stype_mobile  = 1
stype_item   = 2
stype_heli   = 3
stype_restrictor    = 4
stype_trader     = 5
....

load_scheme("mob_trader",        "mob_trader",    stype_trader)


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
men_stalkerДата: Вт, 21.06.2016, 17:56 | Сообщение # 1329
Инженер «Свободы»
Свобода
Сообщений: 184
Награды: 5
Репутация: [ 40 ]

denis2000, спасибо.
sergej5500,
Цитата sergej5500 ()
Вы после правки алл.спавн и его сборки начинали новую игру?

Конечно!(тем более у меня сохранение в начале игры не включено biggrin )
Логика не видится абсолютно не в all.spawn"не не в m_sidor (пробывал даже проверенную логику сталкера, рестриктора, и пробывал вообще не прописывать). Также пробывал в m_sidor дефолтную логику из m_stalker комбинируя с логикой Сидоровича в спавне. Эфекта нету. Может ли быть что у [m_trader] вообще нету возможности прописывания логики?


Сообщение отредактировал men_stalker - Вт, 21.06.2016, 18:44
 
sergej5500Дата: Вт, 21.06.2016, 20:59 | Сообщение # 1330
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

men_stalker,

Если вас устроит, то предлагаю такой вариант. Берёте адаптированного Сидоровича.

https://yadi.sk/d/3dSlj5PWWjZ5K

Ставите в бункере на точке, где Сидорович должен стоять, спавн-пойнт.

Задаёте Сидору логику такого типа.

[cut=Логика][logic@esc_b2_trader_1]
active = remark@esc_b2_trader_1
suitable = {=check_npc_name(esc_b2_trader)} true
prior = 300
level_spot = trader
post_combat_time = 0,0
can_select_weapon = false
trade = misc\trade\order_traders\esc_b2_trader.ltx

[remark@esc_b2_trader_1]
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
invulnerable = true
anim = ward_noweap
meet = meet@trader_1
target = story | actor
on_info = %=control_npc_position(esc_b2_trader_spawn_point:1)%

[meet@trader_1]
close_snd_hello = esc_b2_sidor_hello
close_snd_bye = esc_b2_sidor_exit
use = {!actor_enemy !actor_has_weapon !has_enemy} true, false
allow_break = false
trade_enable = true[/cut]

В xr_effects добавьте функцию

[cut=Функция]function control_npc_position(actor,npc,p)
if p then
local patrol_point = p[1]
local distance = tonumber(p[2]) or 1
local point_position = patrol(patrol_point):point(0)
if npc:position():distance_to_sqr(point_position) > (distance * distance) then
reset_animation(npc)
npc:set_npc_position(point_position)
end
end
end[/cut]

При удалении от спавн-пойнта непися принудительно телепортирует обратно. Минус в том, что он будет всё время стоять.
 
denis2000Дата: Ср, 22.06.2016, 09:50 | Сообщение # 1331
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата men_stalker ()
Может ли быть что у [m_trader] вообще нету возможности прописывания логики?

Ну да, а в ТЧ в ЧН и в ЗП в некоторых модах Сидорович без логики работает?
Вы где то упустили важные правки. Смотрите урок, смотрите, как все организовано в ЧН смотрите в конце концов, как перенесен Сидор в модах (например Проект Спектрум, там к стати два варианта на сложном скелете сидящий в каморке и на обычном скелете сталкера, ходящий по локации).


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

Добрый день. Возник такой вопрос.

Поставил смарт-террайн в Зове Припяти. Сделал сквад из 6 сталкеров. Прописал им эксклюзивные работы.

[cut=Сквад]
Цитата
[esc_b1_stalker_guard_squad]:online_offline_group
faction = stalker
npc = esc_b1_stalker_guard_0, esc_b1_stalker_guard_1, esc_b1_stalker_guard_2, esc_b1_stalker_guard_0, esc_b1_stalker_guard_1, esc_b1_stalker_guard_2
target_smart = esc_b1
spawn_point = esc_b1_spawn
story_id = esc_b1_stalker_guard_squad

[esc_b1_stalker_guard_0]:stalker
$spawn = "respawn\esc_b1_stalker_guard_0"
character_profile = sim_default_stalker_0
spec_rank = novice
community = stalker

[esc_b1_stalker_guard_1]:stalker
$spawn = "respawn\esc_b1_stalker_guard_1"
character_profile = sim_default_stalker_1
spec_rank = regular
community = stalker

[esc_b1_stalker_guard_2]:stalker
$spawn = "respawn\esc_b1_stalker_guard_2"
character_profile = sim_default_stalker_2
spec_rank = experienced
community = stalker
[/cut]

[cut=Обычная логика][logic@esc_b1_stalker_guard]
suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true

[walker@esc_b1_stalker_guard]
meet = meet

[animpoint@esc_b1_stalker_guard]
meet = meet

[remark@esc_b1_stalker_guard]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%

[meet]
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 !actor_enemy !has_enemy} true, false
snd_on_use = {=actor_has_weapon !actor_enemy} meet_hide_weapon, nil

;

[logic@esc_b1_stalker_guard_1]:logic@esc_b1_stalker_guard
prior = 200
active = walker@esc_b1_stalker_guard_1

[walker@esc_b1_stalker_guard_1]:walker@esc_b1_stalker_guard
path_walk = guard_1_walk
path_look = guard_1_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_1

[remark@esc_b1_stalker_guard_1]:remark@esc_b1_stalker_guard
on_game_timer = 75 | walker@esc_b1_stalker_guard_1 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_2]:logic@esc_b1_stalker_guard
prior = 190
active = walker@esc_b1_stalker_guard_2

[walker@esc_b1_stalker_guard_2]:walker@esc_b1_stalker_guard
path_walk = guard_2_walk
path_look = guard_2_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_2

[remark@esc_b1_stalker_guard_2]:remark@esc_b1_stalker_guard
on_game_timer = 75 | walker@esc_b1_stalker_guard_2 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_3]:logic@esc_b1_stalker_guard
prior = 180
active = walker@esc_b1_stalker_guard_3

[walker@esc_b1_stalker_guard_3]:walker@esc_b1_stalker_guard
path_walk = guard_3_walk
path_look = guard_3_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_3

[remark@esc_b1_stalker_guard_3]:remark@esc_b1_stalker_guard
on_game_timer = 75 | walker@esc_b1_stalker_guard_3 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_4]:logic@esc_b1_stalker_guard
prior = 170
active = walker@esc_b1_stalker_guard_4

[walker@esc_b1_stalker_guard_4]:walker@esc_b1_stalker_guard
path_walk = guard_4_walk
path_look = guard_4_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_4

[remark@esc_b1_stalker_guard_4]:remark@esc_b1_stalker_guard
on_game_timer = 75 | walker@esc_b1_stalker_guard_4 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_5]:logic@esc_b1_stalker_guard
prior = 160
active = animpoint@esc_b1_stalker_guard_5

[animpoint@esc_b1_stalker_guard_5]:animpoint@esc_b1_stalker_guard
cover_name = esc_b1_guard_animpoint_1
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_5

[remark@esc_b1_stalker_guard_5]:remark@esc_b1_stalker_guard
on_game_timer = 75 | animpoint@esc_b1_stalker_guard_5 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_6]:logic@esc_b1_stalker_guard
prior = 150
active = animpoint@esc_b1_stalker_guard_6

[animpoint@esc_b1_stalker_guard_6]:animpoint@esc_b1_stalker_guard
cover_name = esc_b1_guard_animpoint_2
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_6

[remark@esc_b1_stalker_guard_6]:remark@esc_b1_stalker_guard
on_game_timer = 75 | animpoint@esc_b1_stalker_guard_6 %-esc_b1_base_guard%[/cut]

[cut=Логика для выброса][logic@esc_b1_stalker_guard_surge]
suitable = {=check_npc_name(esc_b1_stalker_guard_) =surge_started} true

[walker@esc_b1_stalker_guard_surge]
meet = meet

[remark@esc_b1_stalker_guard_surge]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%

[meet]
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 !actor_enemy !has_enemy} true, false
snd_on_use = {=actor_has_weapon !actor_enemy} meet_hide_weapon, nil

;

[logic@esc_b1_stalker_guard_surge_1]:logic@esc_b1_stalker_guard_surge
prior = 200
active = walker@esc_b1_stalker_guard_surge_1

[walker@esc_b1_stalker_guard_surge_1]:walker@esc_b1_stalker_guard_surge
path_walk = guard_surge_1_walk
path_look = guard_surge_1_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_1

[remark@esc_b1_stalker_guard_surge_1]:remark@esc_b1_stalker_guard_surge
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_1 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_2]:logic@esc_b1_stalker_guard_surge
prior = 190
active = walker@esc_b1_stalker_guard_surge_2

[walker@esc_b1_stalker_guard_surge_2]:walker@esc_b1_stalker_guard_surge
path_walk = guard_surge_2_walk
path_look = guard_surge_2_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_2

[remark@esc_b1_stalker_guard_surge_2]:remark@esc_b1_stalker_guard_surge
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_2 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_3]:logic@esc_b1_stalker_guard_surge
prior = 180
active = walker@esc_b1_stalker_guard_surge_3

[walker@esc_b1_stalker_guard_surge_3]:walker@esc_b1_stalker_guard_surge
path_walk = guard_surge_3_walk
path_look = guard_surge_3_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_3

[remark@esc_b1_stalker_guard_surge_3]:remark@esc_b1_stalker_guard_surge
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_3 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_4]:logic@esc_b1_stalker_guard_surge
prior = 170
active = walker@esc_b1_stalker_guard_surge_4

[walker@esc_b1_stalker_guard_surge_4]:walker@esc_b1_stalker_guard_surge
path_walk = guard_surge_4_walk
path_look = guard_surge_4_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_4

[remark@esc_b1_stalker_guard_surge_4]:remark@esc_b1_stalker_guard_surge
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_4 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_5]:logic@esc_b1_stalker_guard_surge
prior = 160
active = walker@esc_b1_stalker_guard_surge_5

[walker@esc_b1_stalker_guard_surge_5]:walker@esc_b1_stalker_guard_surge
path_walk = guard_surge_5_walk
path_look = guard_surge_5_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_5

[remark@esc_b1_stalker_guard_surge_5]:remark@esc_b1_stalker_guard_surge
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_5 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_6]:logic@esc_b1_stalker_guard_surge
prior = 150
active = walker@esc_b1_stalker_guard_surge_6

[walker@esc_b1_stalker_guard_surge_6]:walker@esc_b1_stalker_guard_surge
path_walk = guard_surge_6_walk
path_look = guard_surge_6_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_6

[remark@esc_b1_stalker_guard_surge_6]:remark@esc_b1_stalker_guard_surge
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_6 %-esc_b1_base_guard%[/cut]

[cut=Работы в алл.спавн][449]

; cse_abstract properties
section_name = smart_cover
name = esc_b1_guard_animpoint_1
position = -133.295883178711, -30.1381225585938, -379.260009765625
direction = 0, 3.14159297943115, 0
id = 65535
version = 128
script_version = 12
spawn_id = 790

; cse_alife_object properties
game_vertex_id = 17
distance = 4.1999998
level_vertex_id = 122061
object_flags = 0xffffffbf

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

; cse_smart_cover properties
description = animpoint_sit_low
hold_position_time = 0.62996501
enter_min_enemy_distance = 15
exit_min_enemy_distance = 10
is_combat_cover = 1
MP_respawn = 1

; se_smart_cover properties
last_description = animpoint_sit_low
loopholes = animpoint_sit_low, 1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[450]

; cse_abstract properties
section_name = smart_cover
name = esc_b1_guard_animpoint_2
position = -133.186416625977, -30.1384048461914, -384.589233398438
direction = 5.40000000910368e-005, 0, -7.00000009601354e-006
id = 65535
version = 128
script_version = 12
spawn_id = 791

; cse_alife_object properties
game_vertex_id = 17
distance = 9.0999994
level_vertex_id = 122056
object_flags = 0xffffffbf

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

; cse_smart_cover properties
description = animpoint_sit_low
hold_position_time = 1.121894
enter_min_enemy_distance = 15
exit_min_enemy_distance = 10
is_combat_cover = 1
MP_respawn = 1

; se_smart_cover properties
last_description = animpoint_sit_low
loopholes = animpoint_sit_low, 1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[esc_b1_guard_1_look]
points = p0,p1,p2
p0:name = wp00|a=binocular|p=10|t=44000
p0:flags = 0x1
p0:position = -132.189956665039,-30.4367370605469,-328.622436523438
p0:game_vertex_id = 108
p0:level_vertex_id = 122925

p1:name = wp00|a=guard|p=10|t=39000
p1:flags = 0x1
p1:position = -132.697830200195,-30.4474086761475,-328.464416503906
p1:game_vertex_id = 108
p1:level_vertex_id = 122132

p2:name = wp00|a=guard_chasovoy|p=10|t=13000
p2:flags = 0x1
p2:position = -132.667037963867,-30.45046043396,-328.723815917969
p2:game_vertex_id = 108
p2:level_vertex_id = 122131

[esc_b1_guard_1_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -132.852493286133,-25.7893009185791,-354.693786621094
p0:game_vertex_id = 95
p0:level_vertex_id = 122101

[esc_b1_guard_2_look]
points = p0,p1,p2
p0:name = wp00|a=guard|p=10|t=42000
p0:flags = 0x1
p0:position = -158.046096801758,-30.259241104126,-330.411834716797
p0:game_vertex_id = 108
p0:level_vertex_id = 92768

p1:name = wp00|a=binocular|p=10|t=41000
p1:flags = 0x1
p1:position = -158.310607910156,-30.2621364593506,-330.633544921875
p1:game_vertex_id = 108
p1:level_vertex_id = 92768

p2:name = wp00|a=guard_chasovoy|p=10|t=13000
p2:flags = 0x1
p2:position = -158.558868408203,-30.2622699737549,-330.658538818359
p2:game_vertex_id = 108
p2:level_vertex_id = 91930

[esc_b1_guard_2_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -158.911880493164,-30.4787406921387,-347.960693359375
p0:game_vertex_id = 92
p0:level_vertex_id = 91909

[esc_b1_guard_3_look]
points = p0,p1,p2
p0:name = wp00|a=guard|p=10|t=10|t=43000
p0:flags = 0x1
p0:position = -158.606658935547,-30.1854248046875,-356.474212646484
p0:game_vertex_id = 107
p0:level_vertex_id = 91897

p1:name = wp00|a=sit_ass|p=10|t=33000
p1:flags = 0x1
p1:position = -158.464492797852,-30.1963806152344,-356.156341552734
p1:game_vertex_id = 107
p1:level_vertex_id = 92735

p2:name = wp00|a=guard_chasovoy|p=10|t=12000
p2:flags = 0x1
p2:position = -158.246566772461,-30.1823024749756,-356.565093994141
p2:game_vertex_id = 107
p2:level_vertex_id = 92735

[esc_b1_guard_3_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -147.889556884766,-30.1396903991699,-356.919769287109
p0:game_vertex_id = 92
p0:level_vertex_id = 105120

[esc_b1_guard_4_look]
points = p0,p1,p2
p0:name = wp00|a=sit_ass|p=10|t=39000
p0:flags = 0x1
p0:position = -135.815322875977,-30.1376800537109,-370.718322753906
p0:game_vertex_id = 17
p0:level_vertex_id = 118901

p1:name = wp00|a=guard|p=10|t=33000
p1:flags = 0x1
p1:position = -135.258758544922,-30.1376476287842,-370.151275634766
p1:game_vertex_id = 17
p1:level_vertex_id = 119694

p2:name = wp00|a=guard_chasovoy|p=10|t=39000
p2:flags = 0x1
p2:position = -134.54963684082,-30.1376113891602,-369.574920654297
p2:game_vertex_id = 17
p2:level_vertex_id = 120498

[esc_b1_guard_4_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -125.466621398926,-30.1500015258789,-370.526397705078
p0:game_vertex_id = 111
p0:level_vertex_id = 130964

[esc_b1_guard_surge_1_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -138.286712646484,-30.4574108123779,-327.342742919922
p0:game_vertex_id = 108
p0:level_vertex_id = 115714

[esc_b1_guard_surge_1_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -138.739166259766,-25.439302444458,-356.944152832031
p0:game_vertex_id = 95
p0:level_vertex_id = 115679

[esc_b1_guard_surge_2_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -144.096069335938,-30.556884765625,-342.284118652344
p0:game_vertex_id = 108
p0:level_vertex_id = 109118

[esc_b1_guard_surge_2_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -143.550567626953,-29.689302444458,-351.596527099609
p0:game_vertex_id = 92
p0:level_vertex_id = 109926

[esc_b1_guard_surge_3_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -155.508148193359,-30.2657032012939,-354.145446777344
p0:game_vertex_id = 92
p0:level_vertex_id = 96125

[esc_b1_guard_surge_3_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -142.984802246094,-29.689302444458,-353.545745849609
p0:game_vertex_id = 92
p0:level_vertex_id = 110784

[esc_b1_guard_surge_4_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -132.395095825195,-30.2897415161133,-344.633636474609
p0:game_vertex_id = 108
p0:level_vertex_id = 122907

[esc_b1_guard_surge_4_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -133.1767578125,-29.689302444458,-354.844268798828
p0:game_vertex_id = 95
p0:level_vertex_id = 122100

[esc_b1_guard_surge_5_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -114.594375610352,-30.2213115692139,-369.159820556641
p0:game_vertex_id = 109
p0:level_vertex_id = 143861

[esc_b1_guard_surge_5_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -121.740524291992,-30.0499992370605,-370.309661865234
p0:game_vertex_id = 111
p0:level_vertex_id = 135244

[esc_b1_guard_surge_6_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -135.4990234375,-30.1378078460693,-373.130920410156
p0:game_vertex_id = 17
p0:level_vertex_id = 118898

[esc_b1_guard_surge_6_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -126.629096984863,-30.0499992370605,-374.66650390625
p0:game_vertex_id = 94
p0:level_vertex_id = 129364[/cut]

Заспавнил сквад. Походил, посмотрел. Активировал выброс. Убедился, что сталкеры выполняют свои работы без замечаний.

Поставил на этом смарте 6 работ для дефолтных сквадов. И 6 работ для выброса.

[cut=Дефолтные работы]

[esc_b1_surge_1_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -167.285629272461,-30.1688995361328,-330.092315673828
p0:game_vertex_id = 108
p0:level_vertex_id = 82554

[esc_b1_surge_1_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -168.706130981445,-25.4347991943359,-352.967712402344
p0:game_vertex_id = 87
p0:level_vertex_id = 80831

[esc_b1_surge_2_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -151.503067016602,-30.202766418457,-356.528747558594
p0:game_vertex_id = 92
p0:level_vertex_id = 101093

[esc_b1_surge_2_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -166.219909667969,-25.4347991943359,-354.846130371094
p0:game_vertex_id = 87
p0:level_vertex_id = 84136

[esc_b1_surge_3_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -171.248733520508,-27.9342384338379,-376.114135742188
p0:game_vertex_id = 110
p0:level_vertex_id = 77565

[esc_b1_surge_3_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -168.793075561523,-25.4347991943359,-357.028503417969
p0:game_vertex_id = 87
p0:level_vertex_id = 80819

[esc_b1_surge_4_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -153.045776367188,-30.2292613983154,-355.841552734375
p0:game_vertex_id = 92
p0:level_vertex_id = 98640

[esc_b1_surge_4_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -166.616104125977,-29.6847991943359,-354.872222900391
p0:game_vertex_id = 103
p0:level_vertex_id = 83335

[esc_b1_surge_5_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -167.324554443359,-30.5494747161865,-342.617248535156
p0:game_vertex_id = 108
p0:level_vertex_id = 82537

[esc_b1_surge_5_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -168.090194702148,-29.6026268005371,-356.961700439453
p0:game_vertex_id = 103
p0:level_vertex_id = 81671

[esc_b1_surge_6_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -186.210678100586,-30.3860969543457,-354.545806884766
p0:game_vertex_id = 104
p0:level_vertex_id = 64025

[esc_b1_surge_6_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -169.829605102539,-29.6847991943359,-354.228271484375
p0:game_vertex_id = 104
p0:level_vertex_id = 79162

[esc_b1_walker_1_look]
points = p0,p1,p2
p0:name = wp00|a=binocular|p=10|t=41000
p0:flags = 0x1
p0:position = -167.522048950195,-30.0842094421387,-328.332794189453
p0:game_vertex_id = 108
p0:level_vertex_id = 82557

p1:name = wp00|a=guard|p=10|t=42000
p1:flags = 0x1
p1:position = -167.812545776367,-30.081148147583,-328.294769287109
p1:game_vertex_id = 108
p1:level_vertex_id = 81708

p2:name = wp00|a=guard_chasovoy|p=10|t=11000
p2:flags = 0x1
p2:position = -168.118942260742,-30.068229675293,-328.051025390625
p2:game_vertex_id = 108
p2:level_vertex_id = 81708

[esc_b1_walker_1_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -167.995758056641,-25.4347991943359,-352.900421142578
p0:game_vertex_id = 87
p0:level_vertex_id = 81681

[esc_b1_walker_2_look]
points = p0,p1,p2
p0:name = wp00|a=binocular|p=10|t=39000
p0:flags = 0x1
p0:position = -153.719314575195,-30.2233276367188,-327.627197265625
p0:game_vertex_id = 108
p0:level_vertex_id = 97845

p1:name = wp00|a=guard|p=10|t=38000
p1:flags = 0x1
p1:position = -153.952651977539,-30.2136001586914,-326.956726074219
p1:game_vertex_id = 18
p1:level_vertex_id = 97846

p2:name = wp00|a=guard_chasovoy|p=10|t=11000
p2:flags = 0x1
p2:position = -154.002166748047,-30.2081184387207,-326.575561523438
p2:game_vertex_id = 18
p2:level_vertex_id = 97846

[esc_b1_walker_2_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -152.101959228516,-30.5187568664551,-348.334869384766
p0:game_vertex_id = 92
p0:level_vertex_id = 100292

[esc_b1_walker_3_look]
points = p0,p1
p0:name = wp00|a=sit_ass|p=10|t=39000
p0:flags = 0x1
p0:position = -174.371597290039,-30.2146110534668,-354.878509521484
p0:game_vertex_id = 104
p0:level_vertex_id = 74863

p1:name = wp00|a=guard_chasovoy|p=10|t=12000
p1:flags = 0x1
p1:position = -174.56217956543,-30.2176513671875,-354.988555908203
p1:game_vertex_id = 104
p1:level_vertex_id = 74863

[esc_b1_walker_3_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -176.187393188477,-28.3585643768311,-370.049865722656
p0:game_vertex_id = 110
p0:level_vertex_id = 72922

[esc_b1_walker_4_look]
points = p0,p1
p0:name = wp00|a=sit_ass|p=10|t=33000
p0:flags = 0x1
p0:position = -179.899429321289,-26.4625854492188,-384.9267578125
p0:game_vertex_id = 110
p0:level_vertex_id = 69711

p1:name = wp00|a=guard_chasovoy|p=10|t=13000
p1:flags = 0x1
p1:position = -179.927383422852,-26.443229675293,-385.128936767578
p1:game_vertex_id = 110
p1:level_vertex_id = 69711

[esc_b1_walker_4_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -176.19075012207,-28.8572406768799,-366.735931396484
p0:game_vertex_id = 110
p0:level_vertex_id = 72925

[445]

; cse_abstract properties
section_name = smart_cover
name = esc_b1_animpoint_1
position = -178.141067504883, -28.4921321868896, -368.347015380859
direction = -0.120428003370762, -1.57079601287842, 0.036651998758316
id = 65535
version = 128
script_version = 12
spawn_id = 794

; cse_alife_object properties
game_vertex_id = 110
distance = 7
level_vertex_id = 71674
object_flags = 0xffffffbf

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

; cse_smart_cover properties
description = animpoint_sit_low
enter_min_enemy_distance = 15
exit_min_enemy_distance = 10
is_combat_cover = 1
MP_respawn = 1

; se_smart_cover properties
last_description = animpoint_sit_low
loopholes = animpoint_sit_low, 1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[446]

; cse_abstract properties
section_name = smart_cover
name = esc_b1_animpoint_2
position = -173.799255371094, -28.7090454101563, -368.374420166016
direction = -0.169296994805336, 1.57079601287842, 0.0558510012924671
id = 65535
version = 128
script_version = 12
spawn_id = 795

; cse_alife_object properties
game_vertex_id = 110
distance = 2.8
level_vertex_id = 75509
object_flags = 0xffffffbf

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

; cse_smart_cover properties
description = animpoint_sit_low
enter_min_enemy_distance = 15
exit_min_enemy_distance = 10
is_combat_cover = 1
MP_respawn = 1

; se_smart_cover properties
last_description = animpoint_sit_low
loopholes = animpoint_sit_low, 1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;[/cut]

Заспавнил сквад для теста.

[cut=Сквад для теста][test_squad_1]:online_offline_group
faction = stalker
npc = sim_default_stalker_0, sim_default_stalker_1, sim_default_stalker_2, sim_default_stalker_0, sim_default_stalker_1, sim_default_stalker_2
target_smart = esc_b1
spawn_point = esc_b1_spawn[/cut]

Ожидал, что тестовый сквад займет дефолтные работы. Но эти сталкеры полезли на эксклюзивные работы. Заняли чужие секции walker. Анимпойнты заняли свои собственные (дефолтные). После активации выброса тестовый сквад занял места, предназначенные дефолтным сталкерам. После окончания выброса валкеры из тестового сквада снова залезли на чужие работы.

[cut=Скрины]



[/cut]

Почему строка suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true не срабатывает?
 
denis2000Дата: Вс, 24.07.2016, 21:56 | Сообщение # 1333
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Не уверен что такая конструкция работает бес проблем: [logic@esc_b1_stalker_guard_surge_1]:logic@esc_b1_stalker_guard_surge

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

Цитата denis2000 ()
Не уверен что такая конструкция работает бес проблем: [logic@esc_b1_stalker_guard_surge_1]:logic@esc_b1_stalker_guard_surge


Я использовал такой способ записи многократно. Никаких проблем не было.

Для пробы переписал логику.

[cut=Обычная логика][meet]
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 !actor_enemy !has_enemy} true, false
snd_on_use = {=actor_has_weapon !actor_enemy} meet_hide_weapon, nil

;

[logic@esc_b1_stalker_guard_1]
suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true
prior = 200
active = walker@esc_b1_stalker_guard_1

[walker@esc_b1_stalker_guard_1]
meet = meet
path_walk = guard_1_walk
path_look = guard_1_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_1

[remark@esc_b1_stalker_guard_1]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_1 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_2]
suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true
prior = 190
active = walker@esc_b1_stalker_guard_2

[walker@esc_b1_stalker_guard_2]
meet = meet
path_walk = guard_2_walk
path_look = guard_2_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_2

[remark@esc_b1_stalker_guard_2]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_2 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_3]
suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true
prior = 180
active = walker@esc_b1_stalker_guard_3

[walker@esc_b1_stalker_guard_3]
meet = meet
path_walk = guard_3_walk
path_look = guard_3_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_3

[remark@esc_b1_stalker_guard_3]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_3 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_4]
suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true
prior = 170
active = walker@esc_b1_stalker_guard_4

[walker@esc_b1_stalker_guard_4]
meet = meet
path_walk = guard_4_walk
path_look = guard_4_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_4

[remark@esc_b1_stalker_guard_4]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_4 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_5]
suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true
prior = 160
active = animpoint@esc_b1_stalker_guard_5

[animpoint@esc_b1_stalker_guard_5]
meet = meet
cover_name = esc_b1_guard_animpoint_1
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_5

[remark@esc_b1_stalker_guard_5]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | animpoint@esc_b1_stalker_guard_5 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_6]
suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true
prior = 150
active = animpoint@esc_b1_stalker_guard_6

[animpoint@esc_b1_stalker_guard_6]
meet = meet
cover_name = esc_b1_guard_animpoint_2
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_6

[remark@esc_b1_stalker_guard_6]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | animpoint@esc_b1_stalker_guard_6 %-esc_b1_base_guard%[/cut]

[cut=Логика для выброса][meet]
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 !actor_enemy !has_enemy} true, false
snd_on_use = {=actor_has_weapon !actor_enemy} meet_hide_weapon, nil

;

[logic@esc_b1_stalker_guard_surge_1]
suitable = {=check_npc_name(esc_b1_stalker_guard_) =surge_started} true
prior = 200
active = walker@esc_b1_stalker_guard_surge_1

[walker@esc_b1_stalker_guard_surge_1]
meet = meet
path_walk = guard_surge_1_walk
path_look = guard_surge_1_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_1

[remark@esc_b1_stalker_guard_surge_1]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_1 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_2]
suitable = {=check_npc_name(esc_b1_stalker_guard_) =surge_started} true
prior = 190
active = walker@esc_b1_stalker_guard_surge_2

[walker@esc_b1_stalker_guard_surge_2]
meet = meet
path_walk = guard_surge_2_walk
path_look = guard_surge_2_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_2

[remark@esc_b1_stalker_guard_surge_2]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_2 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_3]
suitable = {=check_npc_name(esc_b1_stalker_guard_) =surge_started} true
prior = 180
active = walker@esc_b1_stalker_guard_surge_3

[walker@esc_b1_stalker_guard_surge_3]
meet = meet
path_walk = guard_surge_3_walk
path_look = guard_surge_3_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_3

[remark@esc_b1_stalker_guard_surge_3]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_3 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_4]
suitable = {=check_npc_name(esc_b1_stalker_guard_) =surge_started} true
prior = 170
active = walker@esc_b1_stalker_guard_surge_4

[walker@esc_b1_stalker_guard_surge_4]
meet = meet
path_walk = guard_surge_4_walk
path_look = guard_surge_4_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_4

[remark@esc_b1_stalker_guard_surge_4]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_4 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_5]
suitable = {=check_npc_name(esc_b1_stalker_guard_) =surge_started} true
prior = 160
active = walker@esc_b1_stalker_guard_surge_5

[walker@esc_b1_stalker_guard_surge_5]
meet = meet
path_walk = guard_surge_5_walk
path_look = guard_surge_5_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_5

[remark@esc_b1_stalker_guard_surge_5]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_5 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_6]
suitable = {=check_npc_name(esc_b1_stalker_guard_) =surge_started} true
prior = 150
active = walker@esc_b1_stalker_guard_surge_6

[walker@esc_b1_stalker_guard_surge_6]
meet = meet
path_walk = guard_surge_6_walk
path_look = guard_surge_6_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_6

[remark@esc_b1_stalker_guard_surge_6]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_6 %-esc_b1_base_guard%[/cut]

Ситуация никак не изменилась. Неписи sim_default становятся на работы валкеров, если нет выброса. Игнорируют строку suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true.

Во время выброса неписи чужие работы не занимают.
 
denis2000Дата: Вт, 26.07.2016, 20:39 | Сообщение # 1335
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Вот давайте посмотрим как у вас называются пути.
Например раз path_walk = guard_1_walk, то имя пути соответственно: esc_b1_guard_1_walk.
А теперь смотрим скрипт дефолтовых работ на смарте gulag_general.script:
Код
while level.patrol_path_exists(gname.."_guard_"..it.."_walk") do

поскольку gname="esc_b1" имя пути it="1","2",... то имена путей esc_b1_guard_1_walk, esc_b1_guard_2_walk это имнеа путей дефолтных работ.
А значит с данными путями будут существовать ДВЕ РАБОТЫ, одна для дефолтовых НПС и еще одна эксклюзивная! Вот и весь парадокс: симуляционный сквад занимает вполне законные дефолтные работы которые вы им и создали, совершенно игнорируя эксклюзивы на которые им ходить запрещено!
Так что строка suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} честно работает!


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