<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://stalkerin.gameru.net/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=212.227.66.227&amp;*</id>
		<title>S.T.A.L.K.E.R. Inside Wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=212.227.66.227&amp;*"/>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/212.227.66.227"/>
		<updated>2026-04-29T15:24:47Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B8._%D0%A7%D0%B0%D1%81%D1%82%D1%8C_2</id>
		<title>Настройка логики. Часть 2</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B8._%D0%A7%D0%B0%D1%81%D1%82%D1%8C_2"/>
				<updated>2014-06-19T08:33:22Z</updated>
		
		<summary type="html">&lt;p&gt;212.227.66.227: /* Секция combat_ignore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Шаблон:Настройка логики}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Секции.=&lt;br /&gt;
==Секция combat==&lt;br /&gt;
Показывает, что происходит, когда NPC срывается в бой.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_combat = combat'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[combat]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info =  {+info -info =func !func ~number}%+info -info =func%''''' -  эффекты, которые вызываются когда NPC уходит в бой. Вызываются при каждом апдейте.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для задания различных типов скриптовых боёв для различных ситуаций используется параметр '''''combat_type'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В следующем примере сталкер сражается:&amp;lt;br&amp;gt;&lt;br /&gt;
:*по-камперски, если враг - актёр и он дальше Х метров;&lt;br /&gt;
:*по-монолитовски, если любой враг дальше Y метров;&lt;br /&gt;
:*иначе - движковый бой.&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = ...&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = {=fighting_actor =fighting_ge_X_meters} camper, &amp;lt;br&amp;gt;{=fighting_ge_Y_meters} monolith&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров npc переходил бы в кемперский комбат.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;lua&amp;gt;function fighting_dist_ge_20(actor, npc)&lt;br /&gt;
    return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) &amp;gt;= 400 &lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
'''''Примечание''''': 400 – это 20&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;. Мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = nil&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = zombied&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом   '''''combat_type'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Помните(!)''''': оверрайд всегда будет перекрывать настройку в секции '''''combat'''''. Т.е., если у вас логика на три секции и в двух из них нужен камперский комбат, а в третьей - монолитовский, то можно задать так:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
...&lt;br /&gt;
[walker2]&lt;br /&gt;
...&lt;br /&gt;
[walker3]&lt;br /&gt;
...&lt;br /&gt;
combat_type = monolith&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = camper&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В файле ''xr_effects.script'' есть функция отключающая секцию '''''combat''''' - '''''disable_combat_handler'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_combat.script''&lt;br /&gt;
&lt;br /&gt;
==Секция death==&lt;br /&gt;
Схема показывает, что происходит при смерти NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_death = death'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[death]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number} %+info -info =func%''''' - эффекты, которые вызываются при смерти NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
on_death = death@mil_freedom_max_combat1&lt;br /&gt;
&lt;br /&gt;
[death@mil_freedom_max_combat1]&lt;br /&gt;
on_info = %=military_max_dead +sar2_death_47%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_death.script''&lt;br /&gt;
&lt;br /&gt;
==Cекция hit==&lt;br /&gt;
Схема показывает, что происходит при нанесении повреждения NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_hit = hit'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[hit]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number} %+info -info =func%''''' - эффекты, которые вызываются в случае, если NPC нанесён хит.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_hit''''' НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как агрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
on_hit = on_hit@agr_factory_hold_fake&lt;br /&gt;
&lt;br /&gt;
[on_hit@agr_factory_hold_fake]&lt;br /&gt;
on_info = {=hit_by_actor} %+agr_krot_skirmish_start%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_hit.script''&lt;br /&gt;
&lt;br /&gt;
==Секция actor_dialogs==&lt;br /&gt;
Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''actor_dialogs = actor_dialogs'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[actor_dialogs]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''id = &amp;lt;название_диалога&amp;gt;''''' - доступные диалоги, перечислять через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''disable = &amp;lt;название_диалога&amp;gt;''''' - запрещенные диалоги, тоже через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
actor_dialogs = actor_dialogs&lt;br /&gt;
&lt;br /&gt;
[actor_dialbr&amp;gt;&lt;br /&gt;
:*'''''story_id''''' – числовое значениеogs]&lt;br /&gt;
id = yantar_general_ucheniy_talk_start,yantar_general_ucheniy_talk_end&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_meet.script''&lt;br /&gt;
&lt;br /&gt;
==Секция use==&lt;br /&gt;
Схема показывает, что произойдет, если игрок попытается взаимодействовать с NPC.&lt;br /&gt;
&lt;br /&gt;
'''''on_use = use'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[use]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number} %+info -info =func%''''' - эффекты, которые вызываются в случае, если игрок попытается взаимодействовать с NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример использования секции:&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
on_use = use@mil_dolg_leader&lt;br /&gt;
 &lt;br /&gt;
[use@mil_dolg_leader]&lt;br /&gt;
on_info = {=gulag_empty(mil_lager)} %+mil_dolg_leader_reward%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_use.script''&lt;br /&gt;
&lt;br /&gt;
==Секция combat_ignore==&lt;br /&gt;
Если для NPC установлена данная секция то он, не переходит в боевой режим.&amp;lt;br&amp;gt;&lt;br /&gt;
Для секции нет дополнительных полей.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''combat_ignore = combat_ignore'''''&lt;br /&gt;
&lt;br /&gt;
'''[combat_ignore]'''&lt;br /&gt;
&amp;lt;!-- SPECIAL FOR AndreySoul: Оверрайд именно МОЖНО задавать, а не НУЖНО! В том и отличие оверрайдов от секций: секции работают на всю логику, оверрайды только в указанной схеме--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В любой другой схеме можно задать оверрайд, который позволит игнорировать бой только по выполнению условия:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[walker] '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''combat_ignore_cond = {+info –info =func !func ~number}''''' – условия для игнорирования боя.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если для оверрайда задать значение '''''always''''', то в данной схеме NPC будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется.&amp;lt;br&amp;gt;&lt;br /&gt;
Таким образом, можно задавать игнорирование боя только будучи под определённой схемой, в отличии от секции, которая запрещает бой в любом случае.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В файле ''xr_condition.script'' есть функции, используемые для работы с кондлистом оверрайда:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''fighting_dist_ge_20''''' - текущий враг на расстоянии больше или равном 20 м;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''fighting_dist_ge''''' – универсальная функция, проверка расстояния для игрока;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''fighting_actor''''' - текущий враг актёр?;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''check_fighting''''' - проверка (по '''''story_id''''') того, что нашим врагом есть хотя бы кто-то один из списка.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример использования секции:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_combat_ignore.script''&lt;br /&gt;
&lt;br /&gt;
==Секция dont_spawn_character_supplies==&lt;br /&gt;
Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться стандартный набор барахла, прописанный в его профиле.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[dont_spawn_character_supplies]'''&lt;br /&gt;
&lt;br /&gt;
==Секция threshold==&lt;br /&gt;
Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''threshold = threshold'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[threshold]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''max_ignore_distance = &amp;lt;number&amp;gt;''''' - (в данный момент дефолт 15 метров). Сталкер будет всегда атаковать монстров, которые находятся внутри данного радиуса.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_monster = &amp;lt;number&amp;gt;''''' - (в данный момент дефолт 0). Параметр от 0 до 1. Если функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': второй параметр следует менять '''ОЧЕНЬ''' осторожно. Помните, в него нужно вписывать значение ''от 0 до 1''!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
threshold = threshold@mil_fbarier&lt;br /&gt;
&lt;br /&gt;
[threshold@mil_fbarier]&lt;br /&gt;
max_ignore_distance = 150&lt;br /&gt;
ignore_monster = 0.1&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\stalker_generic.script''&lt;br /&gt;
&lt;br /&gt;
==Секция Danger==&lt;br /&gt;
Секцию необходимо указывать '''только для какой-то конкретной схемы'''!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''danger = danger_condition'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[danger_condition]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance = &amp;lt;number&amp;gt;''''' - расстояние свыше которого игнорируется &amp;quot;живая&amp;quot; опасность (150 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance_grenade = &amp;lt;number&amp;gt;''''' - расстояние свыше которого игнорируется граната (15 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance_corpse = &amp;lt;number&amp;gt;''''' - расстояние свыше которого игнорируется труп (10 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance_hit = &amp;lt;number&amp;gt;''''' -  расстояние свыше которого игнорируется хит (150 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance_sound = &amp;lt;number&amp;gt;''''' -  расстояние свыше которого игнорируется звук (50 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_grenade = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о гранате (20000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_corpse = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о трупе (10000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_hit = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о хите (60000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_sound = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о звуке (15000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_ricochet = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о рикошете (30000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_expiration_time = &amp;lt;number&amp;gt;''''' - время, через которое денжер перестанет быть акутальным. (5000 миллисекунд по умолчанию)&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': NPC в принципе игнорируют авто с секцией '''''m_car'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается несколько секций данжера '''''danger_condition@1''''', '''''danger_condition@2''''' и так далее.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[camper@dar_military_scout_camper3]&lt;br /&gt;
...&lt;br /&gt;
danger = danger_condition@scout&lt;br /&gt;
&lt;br /&gt;
[danger_condition@scout]&lt;br /&gt;
ignore_distance       = 10&lt;br /&gt;
ignore_distance_grenade = 10&lt;br /&gt;
ignore_distance_corpse  = 0&lt;br /&gt;
ignore_distance_danger_hit     = 20&lt;br /&gt;
ignore_distance_sound   = 0 &lt;br /&gt;
danger_inertion_time_hit = 1&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata_1006\scripts\xr_danger.script''&lt;br /&gt;
&lt;br /&gt;
==Секция game_info==&lt;br /&gt;
&amp;quot;Обучает&amp;quot; NPC рассказывать у костра истории и легенды. Секция прописывается в '''''custom_data''''' NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[game_info]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''stories = &amp;quot;&amp;lt;название_звуковой_темы&amp;gt;&amp;quot;''''' - имена звуковых тем из файла ''sound_theme.script''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Несколько тем перечислять через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
Существуют следующие истории и легенды:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_01''''' - Граница зоны и граната за 1 действие;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_02''''' - Про трамплин и про камешки;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_03''''' - Про то, как группа Вильнова вернулась;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_04''''' - Про то, как Костя Федорин наткнулся на артефакт и пропал на радаре;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_05''''' - Про то, как духманам с контролером сражаться;br&amp;gt;&lt;br /&gt;
:*'''''story_06''''' - Про дверцу, водку и избушку;br&amp;gt;&lt;br /&gt;
:*'''''legend_01''''' - Про эксперимент в Зоне, который производят инопланетяне;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''legend_02''''' - Об особо засекреченных лабораториях в зоне;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''legend_03''''' - Легенда о проводнике;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''legend_04''''' - Легенда о темном Сталкере;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''legend_05''''' - Легенда о том что глубоко в Зоне спать нельзя.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[game_info]&lt;br /&gt;
stories = &amp;quot;story_04, legend_03, legend_04&amp;quot;&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Секция dont_spawn_loot==&lt;br /&gt;
Всякого рода сюжетные персонажи, которые должны быть пустыми после смерти (например раненные или пленные), оказываются не пустыми. Чтобы это исправить необходимо в '''''custom_data''''' персонажа прописать следующую секцию:&amp;lt;br&amp;gt;&lt;br /&gt;
'''[dont_spawn_loot]'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\death_manager.script''&lt;br /&gt;
&lt;br /&gt;
=Оверрайды=&lt;br /&gt;
Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент обычной схемы (все они необязательны).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''combat_ignore_cond = {+info –info =func !func ~number}''''' – условия для игнорирования боя.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''combat_ignore_keep_when_attacked = true/false''''' - NPC продолжает игнорировать бой, даже если в него стреляют – ''только в случае стрельбы игрока''!!!&amp;lt;br&amp;gt;&lt;br /&gt;
'''''combat_type = {+info –info =func !func ~number} &amp;lt;параметр&amp;gt;''''' - тип боя которым будет пользоваться NPC из данной схемы. Возможны следующие значения:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''camper'''''&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''monolith'''''&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''zombied'''''&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''nil'''''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_combat = {+info –info =func !func ~number} %+info -info =func%''''' - определяет поведение NPC при его уходе в бой.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''companion_enabled = true/false''''' - cвободноходящие сталкеры могут наниматься как компаньоны. Оверрайд существует, но не используется из-за недоработанной схемы ''xr_attendant.script''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_combat.script''&lt;br /&gt;
&lt;br /&gt;
==Отметки на минимапе==&lt;br /&gt;
Появилась возможность не показывать сталкеров на минимапе и на карте (прятать жёлтые и красные точки). Для этого в секции логики или в текущей схеме указываем параметр '''''show_spot'''''. Возможно наличие условия.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[walker]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''show_spot = {+info -info =func !func ~number} true/false''''' - показывать или нет на карте. По умолчанию '''''true'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\stalker_generic.script''&lt;br /&gt;
&lt;br /&gt;
=Схемы для монстров=&lt;br /&gt;
&lt;br /&gt;
==Схема mob_walker==&lt;br /&gt;
Работает аналогично схеме обычного '''''walker'''''. Но есть некоторые отличия:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_walker]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_walk = &amp;lt;имя_пути&amp;gt;''''' - путь перемещения.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_look = &amp;lt;имя_пути&amp;gt;''''' - путь обзора.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''no_reset = true/false''''' - не сбрасывать '''''action''''' предыдущей схемы (если нужно сохранить, например, звук). По умолчанию '''''false'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': У кровосососов можно управлять невидимостью, для этого необходимо указать параметр '''''state''''':&lt;br /&gt;
:'''''state = invis/vis''''' - включить/выключить невидимость.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_walker]&lt;br /&gt;
path_walk = x18_snork_walk_1&lt;br /&gt;
path_look = x18_snork_look&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_walker.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_eluder==&lt;br /&gt;
Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_eluder]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path  = &amp;lt;имя_пути&amp;gt;''''' - работает как обычно path_walk. Набор точек патрульного пути.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''time_capture = &amp;lt;number&amp;gt;''''' - время, которое монстр находится под этой схемой. По умолчанию – 10 секунд.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''time_release = &amp;lt;number&amp;gt;''''' - время, которое монстр находится под универсальной схемой. По умолчанию – 10 секунд.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''min_dist = &amp;lt;number&amp;gt;''''' - если расстояние до врага меньше этого, то он переходит под универсальную схему. По умолчанию – 5 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''max_dist = &amp;lt;number&amp;gt;''''' - если расстояние до врага больше этого, то он переходит под '''''eluder'''''. По умолчанию – 10 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': '''работает нестабильно'''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_eluder]&lt;br /&gt;
path = dar_way_checker&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_eluder.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_remark==&lt;br /&gt;
Ремарковая схема, только не для сталкеров, а для монстров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_remark]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''state = &amp;lt;параметр&amp;gt;''''' - специфическое состояние данного конкретного монстра (для кровососов - невидимость).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''dialog_cond = {+info, =func, -info, !func ~number}''''' - условия для открытия окна диалога.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''anim = &amp;lt;название_анимации&amp;gt;''''' - анимации монстра, перечисляются через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''anim.head = &amp;lt;название_анимации&amp;gt;''''' - анимации головы монстра, перечисляются через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''tip = &amp;lt;параметр&amp;gt;''''' - какой значок под светится, при наведении на него курсора.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''snd = &amp;lt;название_звуковой_темы&amp;gt;''''' - какой звук издает.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''time = &amp;lt;number&amp;gt;''''' - время проигрывания анимаций, используется только для отладки.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;br&amp;gt;&amp;lt;ini&amp;gt;[mob_remark@hold]&lt;br /&gt;
anim = stand_idle_0&lt;br /&gt;
time = 50000&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл ''gamedata\scripts\mob_remark.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_jump==&lt;br /&gt;
Схема '''''mob_jump''''' служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_jump]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_jump = &amp;lt;имя_пути&amp;gt;''''' - путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом).&lt;br /&gt;
:Реальная точка учитывает позицию '''''path_jump[0]''''' + смещение, заданное с помощью '''''offset'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ph_jump_factor = &amp;lt;number&amp;gt;''''' - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта.&lt;br /&gt;
:Чем он больше, тем прыжок более острый, быстрый (меньше дуга). По умолчанию 1.8.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''offset = &amp;lt;vector&amp;gt;''''' - смещение по осям '''''x''''', '''''y''''', '''''z''''' соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др.&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': фактически '''''mob_jump''''' - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал '''''jumped'''''. Т.е. '''''on_signal = jumped | имя_схемы_или_nil''''' – является обязательным параметром в схеме, чтобы знать куда переходить дальше.&amp;lt;br&amp;gt;&lt;br /&gt;
При выборе позиции используется первая точка патрульного пути (0-вой индекс).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;br&amp;gt;&amp;lt;ini&amp;gt;[mob_jump]&lt;br /&gt;
path_jump = aes_snork_jump1&lt;br /&gt;
ph_jump_factor = 1.8&lt;br /&gt;
offset = 0,0,0&lt;br /&gt;
on_signal = jumped | mob_walker2&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_jump.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_camp==&lt;br /&gt;
&lt;br /&gt;
Свойства схемы:&lt;br /&gt;
:*Сидит на позиции, смотрит в точку;&lt;br /&gt;
:*Можно задать несколько позиций и время смены позиции;&lt;br /&gt;
:*Перемещается между позициями бегом;&lt;br /&gt;
:*При виде врага переходит под универсальную схему (комбат/паника и т.д);&lt;br /&gt;
:*Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции;&lt;br /&gt;
:*Если враг уходит далеко - монстр возвращается на позицию;&lt;br /&gt;
&lt;br /&gt;
'''[mob_camp]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_home = &amp;lt;имя_пути&amp;gt;''''' - путь, состоящий из точек, в которых будет находиться монстр.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_look = &amp;lt;имя_пути&amp;gt;''''' - путь, состоящий из точек, в которые будет смотреть монстр.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''time_change_point = &amp;lt;number&amp;gt;''''' - время изменения текущей camp-точки. По умолчанию - 10000 миллисекунд.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''home_min_radius  = &amp;lt;number&amp;gt;''''' - минимальный радиус от врага до camp-точки. По умолчанию - 30 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''home_max_radius = &amp;lt;number&amp;gt;''''' - максимальный радиус  от врага до camp-точки. По умолчанию - 40 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''skip_transfer_enemy = true/false''''' – управляет передачей врагов от друзей. Если установлено в '''''true''''' и видит дружественного монстра, то его враги также становятся врагами.(для этого нужно всех монстров в разные '''''group''''' разнести).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше '''''home_min_radius''''' - атакуем врага, пока враг не исчезнет или дистанция не будет больше '''''home_max_radius'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.&amp;lt;br&amp;gt;&lt;br /&gt;
Выбор текущей позиции производится случайным образом.&amp;lt;br&amp;gt;&lt;br /&gt;
Индексы точек пути для '''''path_home''''' и '''''path_look''''' должны совпадать (т.е. монстр сидит во второй точке '''''path_home''''' и смотрит во вторую точку '''''path_look''''').&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Единственным необходимым параметром является '''''path_look'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
Если не установлен '''''path_home''''', в качестве камперской точки учитывается позиция и нода объекта при спауне.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для того чтобы монстр смотрел в разные точки на кампер-позиции, '''''path_look''''' может состоять из нескольких точек.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': обязательные требованием является:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''home_min_radius &amp;lt; home_max_radius''''';&amp;lt;br&amp;gt;&lt;br /&gt;
:*Количество точек путей '''''path_look''''' и '''''path_home должно быть равным.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P.S. '''''mob_camp''''' можно использовать как альтернативу к монстрам под рестрикторами.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_camp]&lt;br /&gt;
path_home = aes2_snork_walk3&lt;br /&gt;
path_look = aes2_snork_look3&lt;br /&gt;
home_min_radius  = 10&lt;br /&gt;
home_max_radius = 15&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_camp.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_home==&lt;br /&gt;
Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на '''''mob_home''''', а старые гулаги постепенно переводить на '''''mob_home'''''. У кого рестрикторы работают хорошо и красиво, их можно не трогать. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_home]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_home = &amp;lt;имя_пути&amp;gt;''''' - точка, вокруг которой будут держаться монстр.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''home_min_radius = &amp;lt;number&amp;gt;''''' - минимальный радиус от врага до '''''path_home''''' точки. По умолчанию - 20 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''home_max_radius = &amp;lt;number&amp;gt;''''' - максимальный радиус от врага до '''''path_home''''' точки. По умолчанию - 40 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''aggressive_home''''' - в назначенную точку '''''path_home''''' монстры бегут а не идут.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание:&amp;lt;br&amp;gt;&lt;br /&gt;
Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри '''''home_min''''' радиуса, иначе прячутся в укрытия. Отсюда следует, что '''''home_min_radius''''' желательно делать таким, чтобы внутри было достаточно каверов. В айдле тоже обычно расходятся по каверам. '''''home_max_radius''''' сделан по принципу большого рестриктера в схеме '''''mob_camp'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': добавлена возможность задания минимального и максимального радиусов для схемы '''''mob_home''''' в флагах первой точки пути ('''''path_home'''''). Для этого введены флаги '''''minr''''' и '''''maxr'''''. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из '''''секции'''''. Если не задано ни там, ни там, то берутся дефолтные значения.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_home@gar_boars_nest]&lt;br /&gt;
path_home = home&lt;br /&gt;
home_min_radius = 25&lt;br /&gt;
home_max_radius = 50&lt;br /&gt;
aggressive_home&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_home.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_fake_death==&lt;br /&gt;
&lt;br /&gt;
Появилась схема '''''mob_fake_death''''' для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_fake_death]'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При входе в схему зомби падает, при выходе из схемы встает.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_fake_death]&lt;br /&gt;
on_actor_dist_le = 5 | nil&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_fake_death.script''&lt;br /&gt;
&lt;br /&gt;
=Секции для монстров=&lt;br /&gt;
&lt;br /&gt;
==Секция mob_combat==&lt;br /&gt;
Секция работает аналогично схеме '''''combat''''' для NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_combat = mob_combat'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_combat]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number}%+info -info =func%''''' - эффекты, которые вызываются когда монстр уходит в бой. Вызываются при каждом апдейте.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic@val_sos_bs]&lt;br /&gt;
...&lt;br /&gt;
on_combat = mob_combat&lt;br /&gt;
&lt;br /&gt;
[mob_combat]&lt;br /&gt;
on_info = nil %=disable_combat_handler%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_combat.script''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Секция mob_death==&lt;br /&gt;
Секция работает аналогично схеме '''''death''''' для NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_death = mob_death'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_death]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number} %+info -info =func%''''' - эффекты, которые вызываются при смерти монстра.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic@gar_boars_nest_rush]&lt;br /&gt;
...&lt;br /&gt;
on_death = mob_death@gar_boars_rush&lt;br /&gt;
&lt;br /&gt;
[mob_death@gar_boars_rush]&lt;br /&gt;
on_info = {=killed_by_actor} %=inc_counter(gar_boars_counter)%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_death.script''&lt;br /&gt;
&lt;br /&gt;
=Оверрайды для монстров=&lt;br /&gt;
'''''actor_friendly = true/false''''' - если '''''true''''', то монстр не атакует актера, до первой атаки на него.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''npc_friendly = true/false''''' - если '''''true''''', то монстр не атакует сталкеров и монстров, до первой атаки на него.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''friendly = true/false''''' - если '''''true''''', то монстр не атакует никого до первой атаки на него.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''braindead = true/false''''' - если '''''true''''', то монстр игнорирует любые атаки.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Общая секция spawner=&lt;br /&gt;
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в ''Level editor'' флажок '''''no_move_in_offline''''' и отключен '''''can_switch_offline'''''. Спавнер прописывается в '''''custom_data''''' объекта перед секцией '''''logic'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[spawner]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''cond = {+info -info =func !func ~number}''''' - условия для спавна.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После того, как объект заспавнился, его берет под управление скрипт '''''Logic'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[spawner]&lt;br /&gt;
cond = {+esc_boar_dogs_restrictor}&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_spawner.script''&lt;br /&gt;
&lt;br /&gt;
==Спавн монстров дневных и ночных==&lt;br /&gt;
'''[spawner]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''cond = {=is_day}''''' – спавнить монстра только днем (если надо ночью, то пишем {!is_day})&amp;lt;br&amp;gt;&lt;br /&gt;
'''''check_distance = true''''' – проверка на наличие персонажа рядом.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''min_distance = 100''''' – если игрок ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле это много).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size = 5&amp;gt;[[Часть 3]]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:A-Life]][[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>212.227.66.227</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B8._%D0%A7%D0%B0%D1%81%D1%82%D1%8C_2</id>
		<title>Настройка логики. Часть 2</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B8._%D0%A7%D0%B0%D1%81%D1%82%D1%8C_2"/>
				<updated>2014-06-19T08:32:55Z</updated>
		
		<summary type="html">&lt;p&gt;212.227.66.227: /* Секция combat_ignore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Шаблон:Настройка логики}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Секции.=&lt;br /&gt;
==Секция combat==&lt;br /&gt;
Показывает, что происходит, когда NPC срывается в бой.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_combat = combat'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[combat]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info =  {+info -info =func !func ~number}%+info -info =func%''''' -  эффекты, которые вызываются когда NPC уходит в бой. Вызываются при каждом апдейте.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для задания различных типов скриптовых боёв для различных ситуаций используется параметр '''''combat_type'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В следующем примере сталкер сражается:&amp;lt;br&amp;gt;&lt;br /&gt;
:*по-камперски, если враг - актёр и он дальше Х метров;&lt;br /&gt;
:*по-монолитовски, если любой враг дальше Y метров;&lt;br /&gt;
:*иначе - движковый бой.&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = ...&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = {=fighting_actor =fighting_ge_X_meters} camper, &amp;lt;br&amp;gt;{=fighting_ge_Y_meters} monolith&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров npc переходил бы в кемперский комбат.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;lua&amp;gt;function fighting_dist_ge_20(actor, npc)&lt;br /&gt;
    return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) &amp;gt;= 400 &lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
'''''Примечание''''': 400 – это 20&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;. Мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = nil&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = zombied&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом   '''''combat_type'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Помните(!)''''': оверрайд всегда будет перекрывать настройку в секции '''''combat'''''. Т.е., если у вас логика на три секции и в двух из них нужен камперский комбат, а в третьей - монолитовский, то можно задать так:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
...&lt;br /&gt;
[walker2]&lt;br /&gt;
...&lt;br /&gt;
[walker3]&lt;br /&gt;
...&lt;br /&gt;
combat_type = monolith&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = camper&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В файле ''xr_effects.script'' есть функция отключающая секцию '''''combat''''' - '''''disable_combat_handler'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_combat.script''&lt;br /&gt;
&lt;br /&gt;
==Секция death==&lt;br /&gt;
Схема показывает, что происходит при смерти NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_death = death'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[death]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number} %+info -info =func%''''' - эффекты, которые вызываются при смерти NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
on_death = death@mil_freedom_max_combat1&lt;br /&gt;
&lt;br /&gt;
[death@mil_freedom_max_combat1]&lt;br /&gt;
on_info = %=military_max_dead +sar2_death_47%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_death.script''&lt;br /&gt;
&lt;br /&gt;
==Cекция hit==&lt;br /&gt;
Схема показывает, что происходит при нанесении повреждения NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_hit = hit'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[hit]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number} %+info -info =func%''''' - эффекты, которые вызываются в случае, если NPC нанесён хит.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_hit''''' НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как агрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
on_hit = on_hit@agr_factory_hold_fake&lt;br /&gt;
&lt;br /&gt;
[on_hit@agr_factory_hold_fake]&lt;br /&gt;
on_info = {=hit_by_actor} %+agr_krot_skirmish_start%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_hit.script''&lt;br /&gt;
&lt;br /&gt;
==Секция actor_dialogs==&lt;br /&gt;
Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''actor_dialogs = actor_dialogs'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[actor_dialogs]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''id = &amp;lt;название_диалога&amp;gt;''''' - доступные диалоги, перечислять через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''disable = &amp;lt;название_диалога&amp;gt;''''' - запрещенные диалоги, тоже через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
actor_dialogs = actor_dialogs&lt;br /&gt;
&lt;br /&gt;
[actor_dialbr&amp;gt;&lt;br /&gt;
:*'''''story_id''''' – числовое значениеogs]&lt;br /&gt;
id = yantar_general_ucheniy_talk_start,yantar_general_ucheniy_talk_end&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_meet.script''&lt;br /&gt;
&lt;br /&gt;
==Секция use==&lt;br /&gt;
Схема показывает, что произойдет, если игрок попытается взаимодействовать с NPC.&lt;br /&gt;
&lt;br /&gt;
'''''on_use = use'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[use]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number} %+info -info =func%''''' - эффекты, которые вызываются в случае, если игрок попытается взаимодействовать с NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример использования секции:&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
on_use = use@mil_dolg_leader&lt;br /&gt;
 &lt;br /&gt;
[use@mil_dolg_leader]&lt;br /&gt;
on_info = {=gulag_empty(mil_lager)} %+mil_dolg_leader_reward%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_use.script''&lt;br /&gt;
&lt;br /&gt;
==Секция combat_ignore==&lt;br /&gt;
Если для NPC установлена данная секция то он, не переходит в боевой режим.&amp;lt;br&amp;gt;&lt;br /&gt;
Для секции нет дополнительных полей.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''combat_ignore = combat_ignore'''''&lt;br /&gt;
&lt;br /&gt;
'''[combat_ignore]'''&lt;br /&gt;
&amp;lt;!-- SPECIAL FOR AndreySoul: Оверрайд именно МОЖНО задавать, а не НУЖНО! В том и отличие оверрайдов от секций: секции работают на всю логику, оверрайды только в указанной схеме--&amp;gt;&lt;br /&gt;
В любой другой схеме можно задать оверрайд, который позволит игнорировать бой только по выполнению условия:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[walker] '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''combat_ignore_cond = {+info –info =func !func ~number}''''' – условия для игнорирования боя.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если для оверрайда задать значение '''''always''''', то в данной схеме NPC будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется.&amp;lt;br&amp;gt;&lt;br /&gt;
Таким образом, можно задавать игнорирование боя только будучи под определённой схемой, в отличии от секции, которая запрещает бой в любом случае.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В файле ''xr_condition.script'' есть функции, используемые для работы с кондлистом оверрайда:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''fighting_dist_ge_20''''' - текущий враг на расстоянии больше или равном 20 м;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''fighting_dist_ge''''' – универсальная функция, проверка расстояния для игрока;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''fighting_actor''''' - текущий враг актёр?;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''check_fighting''''' - проверка (по '''''story_id''''') того, что нашим врагом есть хотя бы кто-то один из списка.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример использования секции:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_combat_ignore.script''&lt;br /&gt;
&lt;br /&gt;
==Секция dont_spawn_character_supplies==&lt;br /&gt;
Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться стандартный набор барахла, прописанный в его профиле.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[dont_spawn_character_supplies]'''&lt;br /&gt;
&lt;br /&gt;
==Секция threshold==&lt;br /&gt;
Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''threshold = threshold'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[threshold]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''max_ignore_distance = &amp;lt;number&amp;gt;''''' - (в данный момент дефолт 15 метров). Сталкер будет всегда атаковать монстров, которые находятся внутри данного радиуса.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_monster = &amp;lt;number&amp;gt;''''' - (в данный момент дефолт 0). Параметр от 0 до 1. Если функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': второй параметр следует менять '''ОЧЕНЬ''' осторожно. Помните, в него нужно вписывать значение ''от 0 до 1''!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
threshold = threshold@mil_fbarier&lt;br /&gt;
&lt;br /&gt;
[threshold@mil_fbarier]&lt;br /&gt;
max_ignore_distance = 150&lt;br /&gt;
ignore_monster = 0.1&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\stalker_generic.script''&lt;br /&gt;
&lt;br /&gt;
==Секция Danger==&lt;br /&gt;
Секцию необходимо указывать '''только для какой-то конкретной схемы'''!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''danger = danger_condition'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[danger_condition]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance = &amp;lt;number&amp;gt;''''' - расстояние свыше которого игнорируется &amp;quot;живая&amp;quot; опасность (150 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance_grenade = &amp;lt;number&amp;gt;''''' - расстояние свыше которого игнорируется граната (15 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance_corpse = &amp;lt;number&amp;gt;''''' - расстояние свыше которого игнорируется труп (10 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance_hit = &amp;lt;number&amp;gt;''''' -  расстояние свыше которого игнорируется хит (150 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance_sound = &amp;lt;number&amp;gt;''''' -  расстояние свыше которого игнорируется звук (50 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_grenade = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о гранате (20000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_corpse = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о трупе (10000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_hit = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о хите (60000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_sound = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о звуке (15000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_ricochet = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о рикошете (30000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_expiration_time = &amp;lt;number&amp;gt;''''' - время, через которое денжер перестанет быть акутальным. (5000 миллисекунд по умолчанию)&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': NPC в принципе игнорируют авто с секцией '''''m_car'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается несколько секций данжера '''''danger_condition@1''''', '''''danger_condition@2''''' и так далее.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[camper@dar_military_scout_camper3]&lt;br /&gt;
...&lt;br /&gt;
danger = danger_condition@scout&lt;br /&gt;
&lt;br /&gt;
[danger_condition@scout]&lt;br /&gt;
ignore_distance       = 10&lt;br /&gt;
ignore_distance_grenade = 10&lt;br /&gt;
ignore_distance_corpse  = 0&lt;br /&gt;
ignore_distance_danger_hit     = 20&lt;br /&gt;
ignore_distance_sound   = 0 &lt;br /&gt;
danger_inertion_time_hit = 1&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata_1006\scripts\xr_danger.script''&lt;br /&gt;
&lt;br /&gt;
==Секция game_info==&lt;br /&gt;
&amp;quot;Обучает&amp;quot; NPC рассказывать у костра истории и легенды. Секция прописывается в '''''custom_data''''' NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[game_info]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''stories = &amp;quot;&amp;lt;название_звуковой_темы&amp;gt;&amp;quot;''''' - имена звуковых тем из файла ''sound_theme.script''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Несколько тем перечислять через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
Существуют следующие истории и легенды:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_01''''' - Граница зоны и граната за 1 действие;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_02''''' - Про трамплин и про камешки;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_03''''' - Про то, как группа Вильнова вернулась;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_04''''' - Про то, как Костя Федорин наткнулся на артефакт и пропал на радаре;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_05''''' - Про то, как духманам с контролером сражаться;br&amp;gt;&lt;br /&gt;
:*'''''story_06''''' - Про дверцу, водку и избушку;br&amp;gt;&lt;br /&gt;
:*'''''legend_01''''' - Про эксперимент в Зоне, который производят инопланетяне;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''legend_02''''' - Об особо засекреченных лабораториях в зоне;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''legend_03''''' - Легенда о проводнике;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''legend_04''''' - Легенда о темном Сталкере;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''legend_05''''' - Легенда о том что глубоко в Зоне спать нельзя.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[game_info]&lt;br /&gt;
stories = &amp;quot;story_04, legend_03, legend_04&amp;quot;&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Секция dont_spawn_loot==&lt;br /&gt;
Всякого рода сюжетные персонажи, которые должны быть пустыми после смерти (например раненные или пленные), оказываются не пустыми. Чтобы это исправить необходимо в '''''custom_data''''' персонажа прописать следующую секцию:&amp;lt;br&amp;gt;&lt;br /&gt;
'''[dont_spawn_loot]'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\death_manager.script''&lt;br /&gt;
&lt;br /&gt;
=Оверрайды=&lt;br /&gt;
Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент обычной схемы (все они необязательны).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''combat_ignore_cond = {+info –info =func !func ~number}''''' – условия для игнорирования боя.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''combat_ignore_keep_when_attacked = true/false''''' - NPC продолжает игнорировать бой, даже если в него стреляют – ''только в случае стрельбы игрока''!!!&amp;lt;br&amp;gt;&lt;br /&gt;
'''''combat_type = {+info –info =func !func ~number} &amp;lt;параметр&amp;gt;''''' - тип боя которым будет пользоваться NPC из данной схемы. Возможны следующие значения:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''camper'''''&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''monolith'''''&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''zombied'''''&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''nil'''''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_combat = {+info –info =func !func ~number} %+info -info =func%''''' - определяет поведение NPC при его уходе в бой.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''companion_enabled = true/false''''' - cвободноходящие сталкеры могут наниматься как компаньоны. Оверрайд существует, но не используется из-за недоработанной схемы ''xr_attendant.script''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_combat.script''&lt;br /&gt;
&lt;br /&gt;
==Отметки на минимапе==&lt;br /&gt;
Появилась возможность не показывать сталкеров на минимапе и на карте (прятать жёлтые и красные точки). Для этого в секции логики или в текущей схеме указываем параметр '''''show_spot'''''. Возможно наличие условия.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[walker]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''show_spot = {+info -info =func !func ~number} true/false''''' - показывать или нет на карте. По умолчанию '''''true'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\stalker_generic.script''&lt;br /&gt;
&lt;br /&gt;
=Схемы для монстров=&lt;br /&gt;
&lt;br /&gt;
==Схема mob_walker==&lt;br /&gt;
Работает аналогично схеме обычного '''''walker'''''. Но есть некоторые отличия:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_walker]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_walk = &amp;lt;имя_пути&amp;gt;''''' - путь перемещения.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_look = &amp;lt;имя_пути&amp;gt;''''' - путь обзора.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''no_reset = true/false''''' - не сбрасывать '''''action''''' предыдущей схемы (если нужно сохранить, например, звук). По умолчанию '''''false'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': У кровосососов можно управлять невидимостью, для этого необходимо указать параметр '''''state''''':&lt;br /&gt;
:'''''state = invis/vis''''' - включить/выключить невидимость.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_walker]&lt;br /&gt;
path_walk = x18_snork_walk_1&lt;br /&gt;
path_look = x18_snork_look&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_walker.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_eluder==&lt;br /&gt;
Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_eluder]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path  = &amp;lt;имя_пути&amp;gt;''''' - работает как обычно path_walk. Набор точек патрульного пути.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''time_capture = &amp;lt;number&amp;gt;''''' - время, которое монстр находится под этой схемой. По умолчанию – 10 секунд.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''time_release = &amp;lt;number&amp;gt;''''' - время, которое монстр находится под универсальной схемой. По умолчанию – 10 секунд.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''min_dist = &amp;lt;number&amp;gt;''''' - если расстояние до врага меньше этого, то он переходит под универсальную схему. По умолчанию – 5 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''max_dist = &amp;lt;number&amp;gt;''''' - если расстояние до врага больше этого, то он переходит под '''''eluder'''''. По умолчанию – 10 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': '''работает нестабильно'''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_eluder]&lt;br /&gt;
path = dar_way_checker&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_eluder.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_remark==&lt;br /&gt;
Ремарковая схема, только не для сталкеров, а для монстров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_remark]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''state = &amp;lt;параметр&amp;gt;''''' - специфическое состояние данного конкретного монстра (для кровососов - невидимость).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''dialog_cond = {+info, =func, -info, !func ~number}''''' - условия для открытия окна диалога.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''anim = &amp;lt;название_анимации&amp;gt;''''' - анимации монстра, перечисляются через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''anim.head = &amp;lt;название_анимации&amp;gt;''''' - анимации головы монстра, перечисляются через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''tip = &amp;lt;параметр&amp;gt;''''' - какой значок под светится, при наведении на него курсора.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''snd = &amp;lt;название_звуковой_темы&amp;gt;''''' - какой звук издает.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''time = &amp;lt;number&amp;gt;''''' - время проигрывания анимаций, используется только для отладки.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;br&amp;gt;&amp;lt;ini&amp;gt;[mob_remark@hold]&lt;br /&gt;
anim = stand_idle_0&lt;br /&gt;
time = 50000&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл ''gamedata\scripts\mob_remark.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_jump==&lt;br /&gt;
Схема '''''mob_jump''''' служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_jump]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_jump = &amp;lt;имя_пути&amp;gt;''''' - путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом).&lt;br /&gt;
:Реальная точка учитывает позицию '''''path_jump[0]''''' + смещение, заданное с помощью '''''offset'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ph_jump_factor = &amp;lt;number&amp;gt;''''' - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта.&lt;br /&gt;
:Чем он больше, тем прыжок более острый, быстрый (меньше дуга). По умолчанию 1.8.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''offset = &amp;lt;vector&amp;gt;''''' - смещение по осям '''''x''''', '''''y''''', '''''z''''' соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др.&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': фактически '''''mob_jump''''' - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал '''''jumped'''''. Т.е. '''''on_signal = jumped | имя_схемы_или_nil''''' – является обязательным параметром в схеме, чтобы знать куда переходить дальше.&amp;lt;br&amp;gt;&lt;br /&gt;
При выборе позиции используется первая точка патрульного пути (0-вой индекс).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;br&amp;gt;&amp;lt;ini&amp;gt;[mob_jump]&lt;br /&gt;
path_jump = aes_snork_jump1&lt;br /&gt;
ph_jump_factor = 1.8&lt;br /&gt;
offset = 0,0,0&lt;br /&gt;
on_signal = jumped | mob_walker2&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_jump.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_camp==&lt;br /&gt;
&lt;br /&gt;
Свойства схемы:&lt;br /&gt;
:*Сидит на позиции, смотрит в точку;&lt;br /&gt;
:*Можно задать несколько позиций и время смены позиции;&lt;br /&gt;
:*Перемещается между позициями бегом;&lt;br /&gt;
:*При виде врага переходит под универсальную схему (комбат/паника и т.д);&lt;br /&gt;
:*Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции;&lt;br /&gt;
:*Если враг уходит далеко - монстр возвращается на позицию;&lt;br /&gt;
&lt;br /&gt;
'''[mob_camp]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_home = &amp;lt;имя_пути&amp;gt;''''' - путь, состоящий из точек, в которых будет находиться монстр.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_look = &amp;lt;имя_пути&amp;gt;''''' - путь, состоящий из точек, в которые будет смотреть монстр.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''time_change_point = &amp;lt;number&amp;gt;''''' - время изменения текущей camp-точки. По умолчанию - 10000 миллисекунд.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''home_min_radius  = &amp;lt;number&amp;gt;''''' - минимальный радиус от врага до camp-точки. По умолчанию - 30 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''home_max_radius = &amp;lt;number&amp;gt;''''' - максимальный радиус  от врага до camp-точки. По умолчанию - 40 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''skip_transfer_enemy = true/false''''' – управляет передачей врагов от друзей. Если установлено в '''''true''''' и видит дружественного монстра, то его враги также становятся врагами.(для этого нужно всех монстров в разные '''''group''''' разнести).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше '''''home_min_radius''''' - атакуем врага, пока враг не исчезнет или дистанция не будет больше '''''home_max_radius'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.&amp;lt;br&amp;gt;&lt;br /&gt;
Выбор текущей позиции производится случайным образом.&amp;lt;br&amp;gt;&lt;br /&gt;
Индексы точек пути для '''''path_home''''' и '''''path_look''''' должны совпадать (т.е. монстр сидит во второй точке '''''path_home''''' и смотрит во вторую точку '''''path_look''''').&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Единственным необходимым параметром является '''''path_look'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
Если не установлен '''''path_home''''', в качестве камперской точки учитывается позиция и нода объекта при спауне.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для того чтобы монстр смотрел в разные точки на кампер-позиции, '''''path_look''''' может состоять из нескольких точек.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': обязательные требованием является:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''home_min_radius &amp;lt; home_max_radius''''';&amp;lt;br&amp;gt;&lt;br /&gt;
:*Количество точек путей '''''path_look''''' и '''''path_home должно быть равным.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P.S. '''''mob_camp''''' можно использовать как альтернативу к монстрам под рестрикторами.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_camp]&lt;br /&gt;
path_home = aes2_snork_walk3&lt;br /&gt;
path_look = aes2_snork_look3&lt;br /&gt;
home_min_radius  = 10&lt;br /&gt;
home_max_radius = 15&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_camp.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_home==&lt;br /&gt;
Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на '''''mob_home''''', а старые гулаги постепенно переводить на '''''mob_home'''''. У кого рестрикторы работают хорошо и красиво, их можно не трогать. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_home]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_home = &amp;lt;имя_пути&amp;gt;''''' - точка, вокруг которой будут держаться монстр.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''home_min_radius = &amp;lt;number&amp;gt;''''' - минимальный радиус от врага до '''''path_home''''' точки. По умолчанию - 20 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''home_max_radius = &amp;lt;number&amp;gt;''''' - максимальный радиус от врага до '''''path_home''''' точки. По умолчанию - 40 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''aggressive_home''''' - в назначенную точку '''''path_home''''' монстры бегут а не идут.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание:&amp;lt;br&amp;gt;&lt;br /&gt;
Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри '''''home_min''''' радиуса, иначе прячутся в укрытия. Отсюда следует, что '''''home_min_radius''''' желательно делать таким, чтобы внутри было достаточно каверов. В айдле тоже обычно расходятся по каверам. '''''home_max_radius''''' сделан по принципу большого рестриктера в схеме '''''mob_camp'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': добавлена возможность задания минимального и максимального радиусов для схемы '''''mob_home''''' в флагах первой точки пути ('''''path_home'''''). Для этого введены флаги '''''minr''''' и '''''maxr'''''. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из '''''секции'''''. Если не задано ни там, ни там, то берутся дефолтные значения.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_home@gar_boars_nest]&lt;br /&gt;
path_home = home&lt;br /&gt;
home_min_radius = 25&lt;br /&gt;
home_max_radius = 50&lt;br /&gt;
aggressive_home&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_home.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_fake_death==&lt;br /&gt;
&lt;br /&gt;
Появилась схема '''''mob_fake_death''''' для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_fake_death]'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При входе в схему зомби падает, при выходе из схемы встает.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_fake_death]&lt;br /&gt;
on_actor_dist_le = 5 | nil&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_fake_death.script''&lt;br /&gt;
&lt;br /&gt;
=Секции для монстров=&lt;br /&gt;
&lt;br /&gt;
==Секция mob_combat==&lt;br /&gt;
Секция работает аналогично схеме '''''combat''''' для NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_combat = mob_combat'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_combat]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number}%+info -info =func%''''' - эффекты, которые вызываются когда монстр уходит в бой. Вызываются при каждом апдейте.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic@val_sos_bs]&lt;br /&gt;
...&lt;br /&gt;
on_combat = mob_combat&lt;br /&gt;
&lt;br /&gt;
[mob_combat]&lt;br /&gt;
on_info = nil %=disable_combat_handler%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_combat.script''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Секция mob_death==&lt;br /&gt;
Секция работает аналогично схеме '''''death''''' для NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_death = mob_death'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_death]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number} %+info -info =func%''''' - эффекты, которые вызываются при смерти монстра.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic@gar_boars_nest_rush]&lt;br /&gt;
...&lt;br /&gt;
on_death = mob_death@gar_boars_rush&lt;br /&gt;
&lt;br /&gt;
[mob_death@gar_boars_rush]&lt;br /&gt;
on_info = {=killed_by_actor} %=inc_counter(gar_boars_counter)%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_death.script''&lt;br /&gt;
&lt;br /&gt;
=Оверрайды для монстров=&lt;br /&gt;
'''''actor_friendly = true/false''''' - если '''''true''''', то монстр не атакует актера, до первой атаки на него.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''npc_friendly = true/false''''' - если '''''true''''', то монстр не атакует сталкеров и монстров, до первой атаки на него.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''friendly = true/false''''' - если '''''true''''', то монстр не атакует никого до первой атаки на него.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''braindead = true/false''''' - если '''''true''''', то монстр игнорирует любые атаки.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Общая секция spawner=&lt;br /&gt;
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в ''Level editor'' флажок '''''no_move_in_offline''''' и отключен '''''can_switch_offline'''''. Спавнер прописывается в '''''custom_data''''' объекта перед секцией '''''logic'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[spawner]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''cond = {+info -info =func !func ~number}''''' - условия для спавна.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После того, как объект заспавнился, его берет под управление скрипт '''''Logic'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[spawner]&lt;br /&gt;
cond = {+esc_boar_dogs_restrictor}&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_spawner.script''&lt;br /&gt;
&lt;br /&gt;
==Спавн монстров дневных и ночных==&lt;br /&gt;
'''[spawner]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''cond = {=is_day}''''' – спавнить монстра только днем (если надо ночью, то пишем {!is_day})&amp;lt;br&amp;gt;&lt;br /&gt;
'''''check_distance = true''''' – проверка на наличие персонажа рядом.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''min_distance = 100''''' – если игрок ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле это много).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size = 5&amp;gt;[[Часть 3]]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:A-Life]][[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>212.227.66.227</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B8._%D0%A7%D0%B0%D1%81%D1%82%D1%8C_2</id>
		<title>Настройка логики. Часть 2</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B8._%D0%A7%D0%B0%D1%81%D1%82%D1%8C_2"/>
				<updated>2014-06-19T08:29:12Z</updated>
		
		<summary type="html">&lt;p&gt;212.227.66.227: Отмена правки 13513, сделанной участником 81.162.64.91 (обс.)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Шаблон:Настройка логики}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Секции.=&lt;br /&gt;
==Секция combat==&lt;br /&gt;
Показывает, что происходит, когда NPC срывается в бой.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_combat = combat'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[combat]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info =  {+info -info =func !func ~number}%+info -info =func%''''' -  эффекты, которые вызываются когда NPC уходит в бой. Вызываются при каждом апдейте.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для задания различных типов скриптовых боёв для различных ситуаций используется параметр '''''combat_type'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В следующем примере сталкер сражается:&amp;lt;br&amp;gt;&lt;br /&gt;
:*по-камперски, если враг - актёр и он дальше Х метров;&lt;br /&gt;
:*по-монолитовски, если любой враг дальше Y метров;&lt;br /&gt;
:*иначе - движковый бой.&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = walker&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker]&lt;br /&gt;
path_walk = ...&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = {=fighting_actor =fighting_ge_X_meters} camper, &amp;lt;br&amp;gt;{=fighting_ge_Y_meters} monolith&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример такой функции: нам надо чтобы на расстоянии свыше 20 метров npc переходил бы в кемперский комбат.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;lua&amp;gt;function fighting_dist_ge_20(actor, npc)&lt;br /&gt;
    return db.storage[npc:id()].enemy:position():distance_to ( npc:position() ) &amp;gt;= 400 &lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
'''''Примечание''''': 400 – это 20&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;. Мы пишем квадрат нужного нам расстояния, для экономии системных ресурсов.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один пример. Сталкер ходит под симуляцией, но у него бой не движковый, а всегда зомбированый:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = nil&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = zombied&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если в разных секциях для персонажа требуются разные типы боя или разные условия, то можно воспользоваться оверрайдом   '''''combat_type'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Помните(!)''''': оверрайд всегда будет перекрывать настройку в секции '''''combat'''''. Т.е., если у вас логика на три секции и в двух из них нужен камперский комбат, а в третьей - монолитовский, то можно задать так:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
active = walker1&lt;br /&gt;
on_combat = combat&lt;br /&gt;
&lt;br /&gt;
[walker1]&lt;br /&gt;
...&lt;br /&gt;
[walker2]&lt;br /&gt;
...&lt;br /&gt;
[walker3]&lt;br /&gt;
...&lt;br /&gt;
combat_type = monolith&lt;br /&gt;
&lt;br /&gt;
[combat]&lt;br /&gt;
combat_type = camper&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В файле ''xr_effects.script'' есть функция отключающая секцию '''''combat''''' - '''''disable_combat_handler'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_combat.script''&lt;br /&gt;
&lt;br /&gt;
==Секция death==&lt;br /&gt;
Схема показывает, что происходит при смерти NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_death = death'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[death]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number} %+info -info =func%''''' - эффекты, которые вызываются при смерти NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
on_death = death@mil_freedom_max_combat1&lt;br /&gt;
&lt;br /&gt;
[death@mil_freedom_max_combat1]&lt;br /&gt;
on_info = %=military_max_dead +sar2_death_47%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_death.script''&lt;br /&gt;
&lt;br /&gt;
==Cекция hit==&lt;br /&gt;
Схема показывает, что происходит при нанесении повреждения NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_hit = hit'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[hit]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number} %+info -info =func%''''' - эффекты, которые вызываются в случае, если NPC нанесён хит.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_hit''''' НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как агрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
on_hit = on_hit@agr_factory_hold_fake&lt;br /&gt;
&lt;br /&gt;
[on_hit@agr_factory_hold_fake]&lt;br /&gt;
on_info = {=hit_by_actor} %+agr_krot_skirmish_start%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_hit.script''&lt;br /&gt;
&lt;br /&gt;
==Секция actor_dialogs==&lt;br /&gt;
Показывает, какие диалоги будут доступны или недоступны игроку при разговоре с этим NPC. Пишется практически в любой схеме.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''actor_dialogs = actor_dialogs'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[actor_dialogs]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''id = &amp;lt;название_диалога&amp;gt;''''' - доступные диалоги, перечислять через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''disable = &amp;lt;название_диалога&amp;gt;''''' - запрещенные диалоги, тоже через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
actor_dialogs = actor_dialogs&lt;br /&gt;
&lt;br /&gt;
[actor_dialbr&amp;gt;&lt;br /&gt;
:*'''''story_id''''' – числовое значениеogs]&lt;br /&gt;
id = yantar_general_ucheniy_talk_start,yantar_general_ucheniy_talk_end&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_meet.script''&lt;br /&gt;
&lt;br /&gt;
==Секция use==&lt;br /&gt;
Схема показывает, что произойдет, если игрок попытается взаимодействовать с NPC.&lt;br /&gt;
&lt;br /&gt;
'''''on_use = use'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[use]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number} %+info -info =func%''''' - эффекты, которые вызываются в случае, если игрок попытается взаимодействовать с NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример использования секции:&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
on_use = use@mil_dolg_leader&lt;br /&gt;
 &lt;br /&gt;
[use@mil_dolg_leader]&lt;br /&gt;
on_info = {=gulag_empty(mil_lager)} %+mil_dolg_leader_reward%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_use.script''&lt;br /&gt;
&lt;br /&gt;
==Секция combat_ignore==&lt;br /&gt;
Если для NPC установлена данная секция то он, не переходит в боевой режим.&amp;lt;br&amp;gt;&lt;br /&gt;
Для секции нет дополнительных полей.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''combat_ignore = combat_ignore'''''&lt;br /&gt;
&lt;br /&gt;
'''[combat_ignore]'''&lt;br /&gt;
&lt;br /&gt;
В любой другой схеме можно задать оверрайд, который позволит игнорировать бой только по выполнению условия:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[walker] '''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''combat_ignore_cond = {+info –info =func !func ~number}''''' – условия для игнорирования боя.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если для оверрайда задать значение '''''always''''', то в данной схеме NPC будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется.&amp;lt;br&amp;gt;&lt;br /&gt;
Таким образом, можно задавать игнорирование боя только будучи под определённой схемой, в отличии от секции, которая запрещает бой в любом случае.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В файле ''xr_condition.script'' есть функции, используемые для работы с кондлистом оверрайда:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''fighting_dist_ge_20''''' - текущий враг на расстоянии больше или равном 20 м;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''fighting_dist_ge''''' – универсальная функция, проверка расстояния для игрока;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''fighting_actor''''' - текущий враг актёр?;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''check_fighting''''' - проверка (по '''''story_id''''') того, что нашим врагом есть хотя бы кто-то один из списка.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример использования секции:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
combat_ignore = combat_ignore&lt;br /&gt;
&lt;br /&gt;
[combat_ignore]&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_combat_ignore.script''&lt;br /&gt;
&lt;br /&gt;
==Секция dont_spawn_character_supplies==&lt;br /&gt;
Если прописать эту секцию в кастом дату персонажу, то у него внутри не заспавниться стандартный набор барахла, прописанный в его профиле.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[dont_spawn_character_supplies]'''&lt;br /&gt;
&lt;br /&gt;
==Секция threshold==&lt;br /&gt;
Есть возможность изменять у сталкеров параметры, по которым они атакуют монстров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''threshold = threshold'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[threshold]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''max_ignore_distance = &amp;lt;number&amp;gt;''''' - (в данный момент дефолт 15 метров). Сталкер будет всегда атаковать монстров, которые находятся внутри данного радиуса.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_monster = &amp;lt;number&amp;gt;''''' - (в данный момент дефолт 0). Параметр от 0 до 1. Если функция оценки монстра ниже, чем этот параметр, и монстр находится за пределами вышеуказанного радиуса - он будет атакован. В данный момент все настроено так, что сталкеры вообще не атакуют монстров находящихся дальше чем 15 метров от них.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': второй параметр следует менять '''ОЧЕНЬ''' осторожно. Помните, в него нужно вписывать значение ''от 0 до 1''!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic]&lt;br /&gt;
...&lt;br /&gt;
threshold = threshold@mil_fbarier&lt;br /&gt;
&lt;br /&gt;
[threshold@mil_fbarier]&lt;br /&gt;
max_ignore_distance = 150&lt;br /&gt;
ignore_monster = 0.1&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\stalker_generic.script''&lt;br /&gt;
&lt;br /&gt;
==Секция Danger==&lt;br /&gt;
Секцию необходимо указывать '''только для какой-то конкретной схемы'''!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''danger = danger_condition'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[danger_condition]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance = &amp;lt;number&amp;gt;''''' - расстояние свыше которого игнорируется &amp;quot;живая&amp;quot; опасность (150 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance_grenade = &amp;lt;number&amp;gt;''''' - расстояние свыше которого игнорируется граната (15 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance_corpse = &amp;lt;number&amp;gt;''''' - расстояние свыше которого игнорируется труп (10 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance_hit = &amp;lt;number&amp;gt;''''' -  расстояние свыше которого игнорируется хит (150 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ignore_distance_sound = &amp;lt;number&amp;gt;''''' -  расстояние свыше которого игнорируется звук (50 метров по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_grenade = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о гранате (20000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_corpse = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о трупе (10000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_hit = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о хите (60000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_sound = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о звуке (15000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_inertion_time_ricochet = &amp;lt;number&amp;gt;''''' - время, спустя которое, NPC забудет о рикошете (30000 миллисекунд по умолчанию).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''danger_expiration_time = &amp;lt;number&amp;gt;''''' - время, через которое денжер перестанет быть акутальным. (5000 миллисекунд по умолчанию)&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': NPC в принципе игнорируют авто с секцией '''''m_car'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': если надо, чтобы в разных случаях сталкер игнорировал разные типы данжеров, создается несколько секций данжера '''''danger_condition@1''''', '''''danger_condition@2''''' и так далее.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[camper@dar_military_scout_camper3]&lt;br /&gt;
...&lt;br /&gt;
danger = danger_condition@scout&lt;br /&gt;
&lt;br /&gt;
[danger_condition@scout]&lt;br /&gt;
ignore_distance       = 10&lt;br /&gt;
ignore_distance_grenade = 10&lt;br /&gt;
ignore_distance_corpse  = 0&lt;br /&gt;
ignore_distance_danger_hit     = 20&lt;br /&gt;
ignore_distance_sound   = 0 &lt;br /&gt;
danger_inertion_time_hit = 1&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata_1006\scripts\xr_danger.script''&lt;br /&gt;
&lt;br /&gt;
==Секция game_info==&lt;br /&gt;
&amp;quot;Обучает&amp;quot; NPC рассказывать у костра истории и легенды. Секция прописывается в '''''custom_data''''' NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[game_info]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''stories = &amp;quot;&amp;lt;название_звуковой_темы&amp;gt;&amp;quot;''''' - имена звуковых тем из файла ''sound_theme.script''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Несколько тем перечислять через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
Существуют следующие истории и легенды:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_01''''' - Граница зоны и граната за 1 действие;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_02''''' - Про трамплин и про камешки;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_03''''' - Про то, как группа Вильнова вернулась;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_04''''' - Про то, как Костя Федорин наткнулся на артефакт и пропал на радаре;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''story_05''''' - Про то, как духманам с контролером сражаться;br&amp;gt;&lt;br /&gt;
:*'''''story_06''''' - Про дверцу, водку и избушку;br&amp;gt;&lt;br /&gt;
:*'''''legend_01''''' - Про эксперимент в Зоне, который производят инопланетяне;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''legend_02''''' - Об особо засекреченных лабораториях в зоне;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''legend_03''''' - Легенда о проводнике;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''legend_04''''' - Легенда о темном Сталкере;&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''legend_05''''' - Легенда о том что глубоко в Зоне спать нельзя.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[game_info]&lt;br /&gt;
stories = &amp;quot;story_04, legend_03, legend_04&amp;quot;&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Секция dont_spawn_loot==&lt;br /&gt;
Всякого рода сюжетные персонажи, которые должны быть пустыми после смерти (например раненные или пленные), оказываются не пустыми. Чтобы это исправить необходимо в '''''custom_data''''' персонажа прописать следующую секцию:&amp;lt;br&amp;gt;&lt;br /&gt;
'''[dont_spawn_loot]'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\death_manager.script''&lt;br /&gt;
&lt;br /&gt;
=Оверрайды=&lt;br /&gt;
Настройки, которые меняют поведение общих схем, в зависимости от активной в данный момент обычной схемы (все они необязательны).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''combat_ignore_cond = {+info –info =func !func ~number}''''' – условия для игнорирования боя.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''combat_ignore_keep_when_attacked = true/false''''' - NPC продолжает игнорировать бой, даже если в него стреляют – ''только в случае стрельбы игрока''!!!&amp;lt;br&amp;gt;&lt;br /&gt;
'''''combat_type = {+info –info =func !func ~number} &amp;lt;параметр&amp;gt;''''' - тип боя которым будет пользоваться NPC из данной схемы. Возможны следующие значения:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''camper'''''&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''monolith'''''&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''zombied'''''&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''nil'''''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_combat = {+info –info =func !func ~number} %+info -info =func%''''' - определяет поведение NPC при его уходе в бой.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''companion_enabled = true/false''''' - cвободноходящие сталкеры могут наниматься как компаньоны. Оверрайд существует, но не используется из-за недоработанной схемы ''xr_attendant.script''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_combat.script''&lt;br /&gt;
&lt;br /&gt;
==Отметки на минимапе==&lt;br /&gt;
Появилась возможность не показывать сталкеров на минимапе и на карте (прятать жёлтые и красные точки). Для этого в секции логики или в текущей схеме указываем параметр '''''show_spot'''''. Возможно наличие условия.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[walker]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''show_spot = {+info -info =func !func ~number} true/false''''' - показывать или нет на карте. По умолчанию '''''true'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\stalker_generic.script''&lt;br /&gt;
&lt;br /&gt;
=Схемы для монстров=&lt;br /&gt;
&lt;br /&gt;
==Схема mob_walker==&lt;br /&gt;
Работает аналогично схеме обычного '''''walker'''''. Но есть некоторые отличия:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_walker]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_walk = &amp;lt;имя_пути&amp;gt;''''' - путь перемещения.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_look = &amp;lt;имя_пути&amp;gt;''''' - путь обзора.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''no_reset = true/false''''' - не сбрасывать '''''action''''' предыдущей схемы (если нужно сохранить, например, звук). По умолчанию '''''false'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': У кровосососов можно управлять невидимостью, для этого необходимо указать параметр '''''state''''':&lt;br /&gt;
:'''''state = invis/vis''''' - включить/выключить невидимость.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_walker]&lt;br /&gt;
path_walk = x18_snork_walk_1&lt;br /&gt;
path_look = x18_snork_look&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_walker.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_eluder==&lt;br /&gt;
Монстр перемещается по точкам патрульного пути (не учитывая связи между точками), держась на расстоянии от игрока, при этом придерживаясь своего пути, выходя из под схемы при слишком близком приближении к игроку, и возвращаясь обратно, когда расстояние увеличиться.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_eluder]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path  = &amp;lt;имя_пути&amp;gt;''''' - работает как обычно path_walk. Набор точек патрульного пути.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''time_capture = &amp;lt;number&amp;gt;''''' - время, которое монстр находится под этой схемой. По умолчанию – 10 секунд.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''time_release = &amp;lt;number&amp;gt;''''' - время, которое монстр находится под универсальной схемой. По умолчанию – 10 секунд.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''min_dist = &amp;lt;number&amp;gt;''''' - если расстояние до врага меньше этого, то он переходит под универсальную схему. По умолчанию – 5 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''max_dist = &amp;lt;number&amp;gt;''''' - если расстояние до врага больше этого, то он переходит под '''''eluder'''''. По умолчанию – 10 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': '''работает нестабильно'''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_eluder]&lt;br /&gt;
path = dar_way_checker&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_eluder.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_remark==&lt;br /&gt;
Ремарковая схема, только не для сталкеров, а для монстров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_remark]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''state = &amp;lt;параметр&amp;gt;''''' - специфическое состояние данного конкретного монстра (для кровососов - невидимость).&amp;lt;br&amp;gt;&lt;br /&gt;
'''''dialog_cond = {+info, =func, -info, !func ~number}''''' - условия для открытия окна диалога.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''anim = &amp;lt;название_анимации&amp;gt;''''' - анимации монстра, перечисляются через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''anim.head = &amp;lt;название_анимации&amp;gt;''''' - анимации головы монстра, перечисляются через запятую.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''tip = &amp;lt;параметр&amp;gt;''''' - какой значок под светится, при наведении на него курсора.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''snd = &amp;lt;название_звуковой_темы&amp;gt;''''' - какой звук издает.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''time = &amp;lt;number&amp;gt;''''' - время проигрывания анимаций, используется только для отладки.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;br&amp;gt;&amp;lt;ini&amp;gt;[mob_remark@hold]&lt;br /&gt;
anim = stand_idle_0&lt;br /&gt;
time = 50000&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл ''gamedata\scripts\mob_remark.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_jump==&lt;br /&gt;
Схема '''''mob_jump''''' служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_jump]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_jump = &amp;lt;имя_пути&amp;gt;''''' - путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом).&lt;br /&gt;
:Реальная точка учитывает позицию '''''path_jump[0]''''' + смещение, заданное с помощью '''''offset'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''ph_jump_factor = &amp;lt;number&amp;gt;''''' - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта.&lt;br /&gt;
:Чем он больше, тем прыжок более острый, быстрый (меньше дуга). По умолчанию 1.8.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''offset = &amp;lt;vector&amp;gt;''''' - смещение по осям '''''x''''', '''''y''''', '''''z''''' соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др.&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': фактически '''''mob_jump''''' - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал '''''jumped'''''. Т.е. '''''on_signal = jumped | имя_схемы_или_nil''''' – является обязательным параметром в схеме, чтобы знать куда переходить дальше.&amp;lt;br&amp;gt;&lt;br /&gt;
При выборе позиции используется первая точка патрульного пути (0-вой индекс).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;br&amp;gt;&amp;lt;ini&amp;gt;[mob_jump]&lt;br /&gt;
path_jump = aes_snork_jump1&lt;br /&gt;
ph_jump_factor = 1.8&lt;br /&gt;
offset = 0,0,0&lt;br /&gt;
on_signal = jumped | mob_walker2&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_jump.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_camp==&lt;br /&gt;
&lt;br /&gt;
Свойства схемы:&lt;br /&gt;
:*Сидит на позиции, смотрит в точку;&lt;br /&gt;
:*Можно задать несколько позиций и время смены позиции;&lt;br /&gt;
:*Перемещается между позициями бегом;&lt;br /&gt;
:*При виде врага переходит под универсальную схему (комбат/паника и т.д);&lt;br /&gt;
:*Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции;&lt;br /&gt;
:*Если враг уходит далеко - монстр возвращается на позицию;&lt;br /&gt;
&lt;br /&gt;
'''[mob_camp]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_home = &amp;lt;имя_пути&amp;gt;''''' - путь, состоящий из точек, в которых будет находиться монстр.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_look = &amp;lt;имя_пути&amp;gt;''''' - путь, состоящий из точек, в которые будет смотреть монстр.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''time_change_point = &amp;lt;number&amp;gt;''''' - время изменения текущей camp-точки. По умолчанию - 10000 миллисекунд.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''home_min_radius  = &amp;lt;number&amp;gt;''''' - минимальный радиус от врага до camp-точки. По умолчанию - 30 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''home_max_radius = &amp;lt;number&amp;gt;''''' - максимальный радиус  от врага до camp-точки. По умолчанию - 40 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''skip_transfer_enemy = true/false''''' – управляет передачей врагов от друзей. Если установлено в '''''true''''' и видит дружественного монстра, то его враги также становятся врагами.(для этого нужно всех монстров в разные '''''group''''' разнести).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше '''''home_min_radius''''' - атакуем врага, пока враг не исчезнет или дистанция не будет больше '''''home_max_radius'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.&amp;lt;br&amp;gt;&lt;br /&gt;
Выбор текущей позиции производится случайным образом.&amp;lt;br&amp;gt;&lt;br /&gt;
Индексы точек пути для '''''path_home''''' и '''''path_look''''' должны совпадать (т.е. монстр сидит во второй точке '''''path_home''''' и смотрит во вторую точку '''''path_look''''').&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Единственным необходимым параметром является '''''path_look'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
Если не установлен '''''path_home''''', в качестве камперской точки учитывается позиция и нода объекта при спауне.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для того чтобы монстр смотрел в разные точки на кампер-позиции, '''''path_look''''' может состоять из нескольких точек.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': обязательные требованием является:&amp;lt;br&amp;gt;&lt;br /&gt;
:*'''''home_min_radius &amp;lt; home_max_radius''''';&amp;lt;br&amp;gt;&lt;br /&gt;
:*Количество точек путей '''''path_look''''' и '''''path_home должно быть равным.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
P.S. '''''mob_camp''''' можно использовать как альтернативу к монстрам под рестрикторами.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_camp]&lt;br /&gt;
path_home = aes2_snork_walk3&lt;br /&gt;
path_look = aes2_snork_look3&lt;br /&gt;
home_min_radius  = 10&lt;br /&gt;
home_max_radius = 15&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_camp.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_home==&lt;br /&gt;
Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на '''''mob_home''''', а старые гулаги постепенно переводить на '''''mob_home'''''. У кого рестрикторы работают хорошо и красиво, их можно не трогать. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_home]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''path_home = &amp;lt;имя_пути&amp;gt;''''' - точка, вокруг которой будут держаться монстр.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''home_min_radius = &amp;lt;number&amp;gt;''''' - минимальный радиус от врага до '''''path_home''''' точки. По умолчанию - 20 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''home_max_radius = &amp;lt;number&amp;gt;''''' - максимальный радиус от врага до '''''path_home''''' точки. По умолчанию - 40 метров.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''aggressive_home''''' - в назначенную точку '''''path_home''''' монстры бегут а не идут.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание:&amp;lt;br&amp;gt;&lt;br /&gt;
Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри '''''home_min''''' радиуса, иначе прячутся в укрытия. Отсюда следует, что '''''home_min_radius''''' желательно делать таким, чтобы внутри было достаточно каверов. В айдле тоже обычно расходятся по каверам. '''''home_max_radius''''' сделан по принципу большого рестриктера в схеме '''''mob_camp'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Примечание''''': добавлена возможность задания минимального и максимального радиусов для схемы '''''mob_home''''' в флагах первой точки пути ('''''path_home'''''). Для этого введены флаги '''''minr''''' и '''''maxr'''''. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из '''''секции'''''. Если не задано ни там, ни там, то берутся дефолтные значения.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_home@gar_boars_nest]&lt;br /&gt;
path_home = home&lt;br /&gt;
home_min_radius = 25&lt;br /&gt;
home_max_radius = 50&lt;br /&gt;
aggressive_home&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_home.script''&lt;br /&gt;
&lt;br /&gt;
==Схема mob_fake_death==&lt;br /&gt;
&lt;br /&gt;
Появилась схема '''''mob_fake_death''''' для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_fake_death]'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При входе в схему зомби падает, при выходе из схемы встает.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования схемы''''':&amp;lt;ini&amp;gt;[mob_fake_death]&lt;br /&gt;
on_actor_dist_le = 5 | nil&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_fake_death.script''&lt;br /&gt;
&lt;br /&gt;
=Секции для монстров=&lt;br /&gt;
&lt;br /&gt;
==Секция mob_combat==&lt;br /&gt;
Секция работает аналогично схеме '''''combat''''' для NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_combat = mob_combat'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_combat]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number}%+info -info =func%''''' - эффекты, которые вызываются когда монстр уходит в бой. Вызываются при каждом апдейте.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic@val_sos_bs]&lt;br /&gt;
...&lt;br /&gt;
on_combat = mob_combat&lt;br /&gt;
&lt;br /&gt;
[mob_combat]&lt;br /&gt;
on_info = nil %=disable_combat_handler%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_combat.script''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Секция mob_death==&lt;br /&gt;
Секция работает аналогично схеме '''''death''''' для NPC.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''on_death = mob_death'''''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[mob_death]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''on_info = {+info -info =func !func ~number} %+info -info =func%''''' - эффекты, которые вызываются при смерти монстра.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[logic@gar_boars_nest_rush]&lt;br /&gt;
...&lt;br /&gt;
on_death = mob_death@gar_boars_rush&lt;br /&gt;
&lt;br /&gt;
[mob_death@gar_boars_rush]&lt;br /&gt;
on_info = {=killed_by_actor} %=inc_counter(gar_boars_counter)%&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\mob_death.script''&lt;br /&gt;
&lt;br /&gt;
=Оверрайды для монстров=&lt;br /&gt;
'''''actor_friendly = true/false''''' - если '''''true''''', то монстр не атакует актера, до первой атаки на него.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''npc_friendly = true/false''''' - если '''''true''''', то монстр не атакует сталкеров и монстров, до первой атаки на него.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''friendly = true/false''''' - если '''''true''''', то монстр не атакует никого до первой атаки на него.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''braindead = true/false''''' - если '''''true''''', то монстр игнорирует любые атаки.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Общая секция spawner=&lt;br /&gt;
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в ''Level editor'' флажок '''''no_move_in_offline''''' и отключен '''''can_switch_offline'''''. Спавнер прописывается в '''''custom_data''''' объекта перед секцией '''''logic'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[spawner]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''cond = {+info -info =func !func ~number}''''' - условия для спавна.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После того, как объект заспавнился, его берет под управление скрипт '''''Logic'''''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Пример использования секции''''':&amp;lt;ini&amp;gt;[spawner]&lt;br /&gt;
cond = {+esc_boar_dogs_restrictor}&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл: ''gamedata\scripts\xr_spawner.script''&lt;br /&gt;
&lt;br /&gt;
==Спавн монстров дневных и ночных==&lt;br /&gt;
'''[spawner]'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''''cond = {=is_day}''''' – спавнить монстра только днем (если надо ночью, то пишем {!is_day})&amp;lt;br&amp;gt;&lt;br /&gt;
'''''check_distance = true''''' – проверка на наличие персонажа рядом.&amp;lt;br&amp;gt;&lt;br /&gt;
'''''min_distance = 100''''' – если игрок ближе указанной дистанции, то монстр не заспавниться (по дефолту 150 метров, но на самом деле это много).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size = 5&amp;gt;[[Часть 3]]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:A-Life]][[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>212.227.66.227</name></author>	</entry>

	</feed>