<?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=92.127.117.78&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=92.127.117.78&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/92.127.117.78"/>
		<updated>2026-06-15T09:56:38Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4_NPC_%D0%B2_offline-online_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82</id>
		<title>SoC. Переход NPC в offline-online через скрипт</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SoC._%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4_NPC_%D0%B2_offline-online_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82"/>
				<updated>2009-07-06T07:39:30Z</updated>
		
		<summary type="html">&lt;p&gt;92.127.117.78: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;На многих форумах, часто задают такой вопрос '''&amp;quot;Как перевести нпс в offline, а затем в online, через скрипт?&amp;quot;'''. Но вразумительного ответа, так нигде и не дают. Перечисляют множество возможных операторов перевода, но при этом сами не уверены, работают они или нет. Просмотрев уже существующие скрипты, нашёл нужные операторы перевода мобов в '''offline-online'''.&lt;br /&gt;
---------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
---------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
Итак. Вот сами операторы перевода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;alife():set_switch_offline (id, value)&lt;br /&gt;
alife():set_switch_online (id, value)&lt;br /&gt;
alife():set_interactive (id, value)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Есть условие их использования. Данные операторы должны использоваться только вместе. Правда зачем нужен оператор '''set_interactive''', я не в курсе. Вроде и без него работает. Но в оригинальных скриптах он везде используется, поэтому я его не стал исключать.&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;big&amp;gt;'''Перевод в offline:'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, у нас есть уникальный нпс, которого нужно перевести в '''offline'''. Первое, что нам нужно сделать, это определить его '''id'''. Не '''sid''' из файла '''game_story_ids.ltx''', а '''id''' объекта. Некоторые причисляют их к одному и тому же параметру. Хотя это не так. '''Sid''' -это принудительно-зарегистрированный ключ инициализации объекта, для управления объектом в не зависимости от того, где он находится. '''Id''' -это порядковый номер объекта, который задаётся автоматически, при спавне.&lt;br /&gt;
Определение '''id''' может быть разнообразным. Всё зависит от ситуации и откуда наша функция будет вызываться. Но в любом случае, определение '''id''' объекта производится через его '''userdata'''.&lt;br /&gt;
Если наша функция будет вызываться из логики нпс, то '''userdata''' объекта будет передаваться в функцию автоматически. Главное правильно задать переменную в скобках наименования функции:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function name(actor, npc)&lt;br /&gt;
...&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где, '''actor''' и '''npc''' -переменные содержащие '''userdata''' актора и непися, с логики которого данная функция вызывается, соответственно. Нужно всегда помнить, что в данной ситуации, первая переменная содержит '''userdata актора''', а вторая '''userdata непися'''. При этом, наименования переменных могут быть произвольными. Главное соблюдать порядок наименования.&lt;br /&gt;
Чтобы в данной ситуации определить его '''id''', не потребуется писать никаких действий, достаточно прописать определение '''id''' объекта, в том месте, где должно прописываться его '''id''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;npc:id()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если наша функция будет вызываться не из логики, а например из скрипта, где при определённых условиях, определённый непись будет переводиться в '''offline''', нам понадобится его '''sid''', через который мы и определим его '''userdata'''. Есть два способа определения '''userdata''' через '''sid'''. Первый способ, это определение через функцию '''level_object_by_sid()''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;local npc = level_object_by_sid( sid объекта )&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй способ, это определение через '''alife()''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;local npc = alife():story_object( sid объекта )&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом, первый способ срабатывает значительно быстрее, так как поиск объекта производится из списка объектов, находящихся в '''online'''. А, второй способ производит поиск объекта из списка всех объектов находящихся в игре.&lt;br /&gt;
Предпочтительно конечно использовать второй способ, так как при первом способе придётся писать дополнительные действия, для защиты от '''error''', когда нпс будет и так находиться в '''offline'''.&lt;br /&gt;
Но у второго способа есть одно отличие от стандарта. '''Id''' объекта придётся определять не через функцию '''id()''', а через его переменную '''id''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;npc.id&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итак. Вроде как определились с данными '''id'''. Теперь создадим саму функцию перевода нпс в '''offline'''.&lt;br /&gt;
&lt;br /&gt;
'''Для вызова функции из логики нпс:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function name(actor, npc)&lt;br /&gt;
&lt;br /&gt;
if npc then&lt;br /&gt;
&lt;br /&gt;
alife():set_switch_offline (npc:id(), true)&lt;br /&gt;
alife():set_switch_online (npc:id(), false)&lt;br /&gt;
alife():set_interactive (npc:id(), false)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Для вызова функции из другого скрипта, будет выглядеть так (если userdata не определена)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function name()&lt;br /&gt;
&lt;br /&gt;
local npc = alife():story_object( sid объекта )&lt;br /&gt;
&lt;br /&gt;
if npc then&lt;br /&gt;
&lt;br /&gt;
alife():set_switch_offline (npc.id, true)&lt;br /&gt;
alife():set_switch_online (npc.id, false)&lt;br /&gt;
alife():set_interactive (npc.id, false)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;big&amp;gt;'''Перевод в online:'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перевода в '''online''', действуют те же условия. С одним отличием. Первый способ определения '''userdata''' через '''sid''', не допустим. Так как данный оператор действителен, только если объект находится в '''online'''. В любом другом случае, он выдаст ошибку.&lt;br /&gt;
&lt;br /&gt;
Итак, функции перевода нпс в '''online''':&lt;br /&gt;
&lt;br /&gt;
'''Для вызова функции из логики нпс:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function name(actor, npc)&lt;br /&gt;
&lt;br /&gt;
if npc then&lt;br /&gt;
&lt;br /&gt;
alife():set_switch_offline (npc:id(), false)&lt;br /&gt;
alife():set_switch_online (npc:id(), true)&lt;br /&gt;
alife():set_interactive (npc:id(), true)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Для вызова функции из другого скрипта,(если userdata не определена):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function name()&lt;br /&gt;
&lt;br /&gt;
local npc = alife():story_object( sid объекта )&lt;br /&gt;
&lt;br /&gt;
if npc then&lt;br /&gt;
&lt;br /&gt;
alife():set_switch_offline (npc.id, false)&lt;br /&gt;
alife():set_switch_online (npc.id, true)&lt;br /&gt;
alife():set_interactive (npc.id, true)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
-------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Переводы в offline и в online производится не зависимо от того, где находится актор, хоть нос к носу с переводимым нпс.&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Автор статьи &amp;lt;big&amp;gt;'''Singapur22'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: скрипты ]]&lt;/div&gt;</summary>
		<author><name>92.127.117.78</name></author>	</entry>

	</feed>