<?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=91.217.2.225&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=91.217.2.225&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/91.217.2.225"/>
		<updated>2026-04-30T01:32:36Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=Space_restrictor</id>
		<title>Space restrictor</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=Space_restrictor"/>
				<updated>2014-01-10T11:07:34Z</updated>
		
		<summary type="html">&lt;p&gt;91.217.2.225: /* Начало */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Начало==&lt;br /&gt;
----------------------------------------------------------&lt;br /&gt;
Значит, распаковываем алл.спавн с помощью ACDC...Распаковали.&lt;br /&gt;
Откроем, например, alife_l02_garbage.ltx.&lt;br /&gt;
В самом конце допишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[2145]&lt;br /&gt;
; cse_abstract properties&lt;br /&gt;
section_name = space_restrictor&lt;br /&gt;
name = sgm_kvest&lt;br /&gt;
position = 41.297409057617,0.44233170151711,-299.86953735352&lt;br /&gt;
direction = 0,0,0&lt;br /&gt;
&lt;br /&gt;
; cse_alife_object properties&lt;br /&gt;
game_vertex_id = 253&lt;br /&gt;
distance = 0&lt;br /&gt;
level_vertex_id = 214760&lt;br /&gt;
object_flags = 0xffffff3e&lt;br /&gt;
custom_data = &amp;lt;&amp;lt;END&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = %+story_sgm_kvest2_3%&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
; cse_shape properties&lt;br /&gt;
shapes = shape0&lt;br /&gt;
shape0:type = box&lt;br /&gt;
shape0:axis_x = 6.5,0,0&lt;br /&gt;
shape0:axis_y = 0,6.5,0&lt;br /&gt;
shape0:axis_z = 0,0,6.5&lt;br /&gt;
shape0:offset = 0,0,0&lt;br /&gt;
; cse_alife_space_restrictor properties&lt;br /&gt;
restrictor_type = 3&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[2145] - порядковый номер&lt;br /&gt;
section_name = space_restrictor - имя секции (нам надо space_restrictor)&lt;br /&gt;
name = svalka_prikol - личное имя (задаём любое)&lt;br /&gt;
position = - позиции (место, где будем спавнить его)&lt;br /&gt;
direction = - поворот рестриктра (не трогаем...)&lt;br /&gt;
game_vertex_id = - геймвертекс &lt;br /&gt;
level_vertex_id = - левелвертекс&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вы хотите сделать сферический space_restrictor, то вместо &lt;br /&gt;
&amp;lt;code&amp;gt;shape0:axis_x = 6.5,0,0&lt;br /&gt;
shape0:axis_y = 0,6.5,0&lt;br /&gt;
shape0:axis_z = 0,0,6.5&lt;br /&gt;
shape0:offset = 0,0,0&amp;lt;/code&amp;gt;&lt;br /&gt;
пишем:&lt;br /&gt;
&amp;lt;code&amp;gt;shape0:offset = 0,0,0&lt;br /&gt;
shape0:radius = 44.6438484191895&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Примечание: координаты спавна, game_vertex_id и level_vertex_id можно получить с помощью следующей функции:''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;lua&amp;gt;&lt;br /&gt;
function main_menu:OnButton_credits_clicked()&lt;br /&gt;
if level.present() and (db.actor ~= nil) and db.actor:alive() then&lt;br /&gt;
	local vid = db.actor:level_vertex_id()&lt;br /&gt;
	local gvid = db.actor:game_vertex_id()&lt;br /&gt;
	local a = db.actor:position()&lt;br /&gt;
	local text = &amp;quot;Позиция:\\nX = &amp;quot;..a.x..&amp;quot;\\nY = &amp;quot;..a.y..&amp;quot;\\nZ = &amp;quot;..a.z..&amp;quot;\\nlevel_vertex_id = &amp;quot;..vid..&amp;quot;\\ngame_vertex_id = &amp;quot;..gvid&lt;br /&gt;
	news_manager.send_tip(db.actor, text, nil, nil, 30000)&lt;br /&gt;
	self:OnButton_return_game()&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
просто допишите её в ui_main_menu.script, в самом конце.&lt;br /&gt;
&lt;br /&gt;
==Логика==&lt;br /&gt;
&lt;br /&gt;
===Выдача infoportions===&lt;br /&gt;
Теперь логика для рестриктора:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = %+имя инфопоршня%&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С такой логикой рестриктор будет выдавать ГГ инфопоршень.&lt;br /&gt;
&lt;br /&gt;
===Эффекты выброса===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_timer = 100000| %=start_small_reject% sr_idle2&lt;br /&gt;
&lt;br /&gt;
[sr_idle2]&lt;br /&gt;
on_timer = 100000| %=start_small_reject% sr_idle&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Такая логика будет запускать каждые 100 сек. эффекты выброса.&lt;br /&gt;
&lt;br /&gt;
===Проверка на наличие и выдача infoportion===&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[logic]&lt;br /&gt;
active = sr_idle&lt;br /&gt;
&lt;br /&gt;
[sr_idle]&lt;br /&gt;
on_actor_inside = {+test_condition} nil %+test_result%&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''{+test_condition}'' - это проверка (условие) наличия у ГГ инфопоршня ''test_condition''. Если у ГГ данный инфопоршень есть, то рестриктор выдаст новый инфопоршень (''test_result'').&lt;br /&gt;
&lt;br /&gt;
==Shapes==&lt;br /&gt;
Двигаем дальше.&amp;lt;br&amp;gt;&lt;br /&gt;
shapes = тут вписываем названия шейпов&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
shapes = shape0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;shape0:type = - это тип шейпа. Ставить или box,или sphere.&lt;br /&gt;
box - коробка&lt;br /&gt;
sphere - сфера&lt;br /&gt;
&lt;br /&gt;
shape0:axis_x = ваша цифра,0,0&lt;br /&gt;
shape0:axis_y = 0,ваша цифра,0&lt;br /&gt;
shape0:axis_z = 0,0,ваша цифра&lt;br /&gt;
- это размеры шейпа.&lt;br /&gt;
&lt;br /&gt;
restrictor_type - тип рестриктра.&amp;lt;/code&amp;gt;&lt;br /&gt;
Я везде ставлю restrictor_type = 3, поэтому сказать не могу на что влияет значение.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ну вот и всё.Думаю всё чётко и ясно.Будут вопросы обращайтесь.&amp;lt;br /&amp;gt;&lt;br /&gt;
ПС: спасибо р-09 за объяснение некоторых моментов с логикой.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Статью написал:&lt;br /&gt;
'''джЭдай, SGMTeam.'''&amp;lt;br&amp;gt;&lt;br /&gt;
Статью преобразовывал в вики (неправильный перенос строк, ошибки с отсутствием некоторых знаков, запись в категорию) - '''Rekongstor'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:Конфигурационные файлы]] [[Категория:Скрипты]]&lt;/div&gt;</summary>
		<author><name>91.217.2.225</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%81%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D1%85</id>
		<title>Начальные сведения о скриптах</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%81%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D1%85"/>
				<updated>2013-08-01T18:05:09Z</updated>
		
		<summary type="html">&lt;p&gt;91.217.2.225: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ПРЕДИСЛОВИЕ&lt;br /&gt;
{{Message_box|&lt;br /&gt;
id	=pseudoscience|&lt;br /&gt;
align = left|&lt;br /&gt;
backgroundcolor	= #f9f9f9|&lt;br /&gt;
image	=Lamp.gif|&lt;br /&gt;
heading	= Для чего нужны скрипты и сведения и их использовании - Rez@niy aka Oxygenium|&lt;br /&gt;
message = В скриптах содержаться инструкции для выполнения по условиям.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итак, начнём. Создадим в папке '''gamedata/scripts''' файл с любым названием и расширением '''.script'''. Пускай, '''my_test.script'''. В нем будем прописывать функции.   &lt;br /&gt;
Рассмотрим простой скрипт спавна предмета в рюкзак ГГ. Пропишем:&amp;lt;lua&amp;gt;--*********************************************&lt;br /&gt;
--**TESTING**&lt;br /&gt;
--*********************************************&lt;br /&gt;
--&lt;br /&gt;
-- Создает в рюкзаке ГГ &amp;quot;калаш&amp;quot;&lt;br /&gt;
function ak_create()&lt;br /&gt;
    alife():create(&amp;quot;wpn_ak74&amp;quot;, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
Давайте разбирать.&lt;br /&gt;
Игра считывает весь код из файла, поэтому не удивляйтесь, если игра вылетит при наличии лишнего текста, символов и прочего ненужного в скрипте. Однако, подобных проблем возникать не будет, если мы ''закомментируем'' лишнее. Чтобы игра не считывала текст, перед ним мы ставим две черточки, два минуса, два дефиса, в общем называйте как угодно:&amp;lt;lua&amp;gt;--&amp;lt;/lua&amp;gt;&lt;br /&gt;
Часто таким образом оставляют словесную подсказку того, что делает данный участок кода, либо комментируют код, который на данный момент не нужен, но возможно пригодится в дальнейшем. В общем, зачастую комментарий - это пояснения к исходному тексту программы. В данном случае, система не будет считывать следующие строки:&amp;lt;lua&amp;gt;--*********************************************&lt;br /&gt;
--**TESTING**&lt;br /&gt;
--*********************************************&lt;br /&gt;
--&lt;br /&gt;
-- Создает в рюкзаке ГГ &amp;quot;калаш&amp;quot;&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многострочный комментарий выглядит так&lt;br /&gt;
&amp;lt;lua&amp;gt;--[[ком&lt;br /&gt;
мен&lt;br /&gt;
та&lt;br /&gt;
рий]]&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Идем дальше.  &lt;br /&gt;
''function'' - всегда обязательное начало, это что-то в роде id в языке '''LUA'''. После ''function'' отступаем и пишем текст. Данный текст может состоять из букв латинского алфавита и цифр, при этом важно, чтобы этот текст начинался с буквы и в нём не содержалось пробелов. Этот текст будет названием функции. Не забываем после названия функции дописать две круглые скобки:&lt;br /&gt;
&amp;lt;lua&amp;gt;()&amp;lt;/lua&amp;gt; &lt;br /&gt;
Это обязательный элемент. В нем указываются аргументы функции, с которыми идет работа. В нашем случае таковых нету, но элемент обязателен.  &lt;br /&gt;
Дальше идёт сам спавн объекта:&lt;br /&gt;
&amp;lt;lua&amp;gt;alife():create(&amp;quot;wpn_ak74&amp;quot;, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())&amp;lt;/lua&amp;gt;&lt;br /&gt;
В конце функции обязательно наличие ''end''. Он означает конец функции. Логично, правда? :)&lt;br /&gt;
 &lt;br /&gt;
Напоминаю, при таком раскладе АК-74 заспавнится в рюкзак ГГ. &lt;br /&gt;
Если же мы пожелаем заспавнить калаш где-нибудь на локации, вызов спавна приобретет следующий вид:&lt;br /&gt;
&amp;lt;lua&amp;gt;alife():create(&amp;quot;wpn_ak74&amp;quot;, vector():set(-81.800, -4.980, -72.739), 186578, 76)&amp;lt;/lua&amp;gt;&lt;br /&gt;
АК заспавнится в вагончике, недалеко от Деревни новичков.&lt;br /&gt;
&lt;br /&gt;
Но без детального разбора мы дальше, пожалуй,не пойдем. В целом, скелет функции спавна таким методом выглядит так:&lt;br /&gt;
&amp;lt;lua&amp;gt;function название_функции()&lt;br /&gt;
    alife():create(&amp;quot;имя_секции_предмета&amp;quot;, vector():set(x,y,z), level_vertex_id, game_vertex_id)&lt;br /&gt;
end&amp;lt;/lua&amp;gt; &lt;br /&gt;
Про конкретные значения.&lt;br /&gt;
''alife():create'' - стандартный вызов спавна&lt;br /&gt;
''vector():set'' - инициализация координат &lt;br /&gt;
''x,y,z'' - координаты места по долготе, высоте, ширине&lt;br /&gt;
''level_vertex_id'' и ''game_vertex_id'' - дополнительные координаты относительно локации &lt;br /&gt;
Все это нужно снимать в игре. Есть множество способов.&lt;br /&gt;
Что касается спавна в рюкзак ГГ, тут с координатами действует немного другая схема. Объект актора можно получить посредством вот такой записи: ''db.actor'', а получить его данные можно вот так:&lt;br /&gt;
&lt;br /&gt;
''db.actor:position()'' - координаты x,y,z актера&lt;br /&gt;
&lt;br /&gt;
''db.actor:level_vertex_id(),db.actor:game_vertex_id()'' - думаю, понятно&lt;br /&gt;
&lt;br /&gt;
''db.actor:id()'' - дополнительный параметр, сам id актера, нужен, чтоб предмет заспавнился именно в рюкзак.&lt;br /&gt;
&lt;br /&gt;
На самом деле, для спавна в инвентарь атору, значение координат, левел и гейм вертексов не важны, а ключевым является последний параметр - '''''id''''' актора, в игре оно всегда равно нулю. Т.е. заспавнить тот же &amp;quot;Калаш&amp;quot; в рюкзак можно и так:&amp;lt;lua&amp;gt;alife():create(&amp;quot;wpn_ak74&amp;quot;, vector(), 0, 0, 0)&amp;lt;/lua&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Написали? Отлично!&lt;br /&gt;
&amp;lt;br&amp;gt;Теперь осталось только подключить это к игре, то есть вызвать функцию спавна.  &lt;br /&gt;
&amp;lt;br&amp;gt;Идём в файл '''dialogs_escape.xml''' и выбираем какой-нибудь диалог. &lt;br /&gt;
&amp;lt;br&amp;gt;Там, после поля ''text'', одной из фраз диалога приписываем: &lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;action&amp;gt;my_test.ak_create&amp;lt;/action&amp;gt;&amp;lt;/xml&amp;gt;&lt;br /&gt;
Как это понимать:&lt;br /&gt;
&amp;lt;xml&amp;gt;&amp;lt;action&amp;gt;название_скрипта.название_функции&amp;lt;/action&amp;gt;&amp;lt;/xml&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Всё, сохраняем и тестируем. В итоге, когда вы в игре нажмёте на фразу после которой находится ''action'', заспауниться калаш на указанных координатах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Message_box|&lt;br /&gt;
id	=pseudoscience1|&lt;br /&gt;
align = left|&lt;br /&gt;
backgroundcolor	= #f9f9f9|&lt;br /&gt;
image	=Lamp.gif|&lt;br /&gt;
heading	= Углублённое изучение - Rez@niy|&lt;br /&gt;
message = Далее идём в более углублённое изучение. Изучаем построение}}&lt;br /&gt;
&lt;br /&gt;
Прописываем функцию. Задаём условие:&lt;br /&gt;
&amp;lt;lua&amp;gt;if логическое_условие then&amp;lt;/lua&amp;gt;&lt;br /&gt;
Для закрытия тэга:&lt;br /&gt;
&amp;lt;lua&amp;gt;end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну и я напишу.'''Меченый(Стрелок)'''&lt;br /&gt;
&lt;br /&gt;
Мой монолог построен так: В - Вопрос,О - Ответ&lt;br /&gt;
&lt;br /&gt;
Начнём:&lt;br /&gt;
'''В''' - Что такое ЦИКЛ? И как он выглядит?&lt;br /&gt;
''О'' - Цикл это повторение одного и того же действия n-ое кол-во раз&lt;br /&gt;
выглядит так&lt;br /&gt;
&amp;lt;pre&amp;gt;for i=1,n,step do&lt;br /&gt;
&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
За место i может быть любая переменная, за место n - число которое больше первоначального значения(i)&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot; /&amp;gt;Здесь i - это счетчик цикла. Эта переменная локальна для цикла, т.е. она доступна только внутри тела цикла.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot; /&amp;gt;1 - начальное значение счетчика, n - конечное.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot; /&amp;gt;step - шаг цикла ( указывать необязательно, по умолчанию равно 1 )&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot; /&amp;gt;Переменные, объявленные локальными в теле цикла, доступны только внутри цикла.&lt;br /&gt;
&amp;lt;lua&amp;gt;local con = get_console()&lt;br /&gt;
For i = 10,5,-2 do&lt;br /&gt;
	con:execute(&amp;quot;i=&amp;quot;..tostring(i)) -- выведет в консоль последовательно 10, 8, 6&lt;br /&gt;
end&lt;br /&gt;
con:execute(&amp;quot;i=&amp;quot;..tostring(i)) -- выведет строку &amp;quot;i=nil&amp;quot;,т.к. счетчик уже недоступен.&lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
'''В''' - А для чего можно использовать цикл?&lt;br /&gt;
''О'' - Чтобы выполнить некоторый набор инструкций несколько раз.&lt;br /&gt;
&amp;lt;br&amp;gt;Пример 1.Перебор по id. Узнаем монстр ли объект,если да, то функция пишет в консоль строку вида &amp;quot;monster_&amp;quot;&amp;lt;имя объекта&amp;gt;, иначе &amp;quot;no_monster_&amp;quot;&amp;lt;имя объекта&amp;gt;&lt;br /&gt;
&amp;lt;lua&amp;gt;local con = console()&lt;br /&gt;
for id=1,65534 do&lt;br /&gt;
	local obj = level.object_by_id(id)&lt;br /&gt;
	if obj~= nil then&lt;br /&gt;
		if IsMonster(obj) then&lt;br /&gt;
			con:execute(&amp;quot;monster_&amp;quot;..obj:name())&lt;br /&gt;
		else&lt;br /&gt;
			con:execute(&amp;quot;no_monster_&amp;quot;..obj:name())&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
Пример 2.Спавн/&lt;br /&gt;
&amp;lt;lua&amp;gt;local pos = vector():set(-220.21,-19.93,-158.98)&lt;br /&gt;
for i=1,5 do --функция повторится 5 раз,следовательно будет заспавнено 5 АК &lt;br /&gt;
	alife():create(&amp;quot;wpn_ak47&amp;quot;,pos,33447,47,65535)&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
и т.п.&lt;br /&gt;
существует ещё цикл  с предусловием (while a,n do),но об этом позже&lt;br /&gt;
'''В''' - Какие параметры ГГ можно корректировать  скриптами?&lt;br /&gt;
''О'' - Таких не много, запись будет такой :&lt;br /&gt;
&amp;lt;pre&amp;gt;db.actor.параметр&amp;lt;/pre&amp;gt;&lt;br /&gt;
Параметры:&lt;br /&gt;
&amp;lt;pre&amp;gt;radiation&lt;br /&gt;
health&lt;br /&gt;
psy_health&lt;br /&gt;
power&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''В''' - а можно ли спавнить в рандомной точке предмет,если да,то как?&lt;br /&gt;
''О'' - можно&lt;br /&gt;
Для этого нам понадобится таблица максимальных значений ''level_vertex_id'' и ''game_vertex_id''&lt;br /&gt;
выглядит она так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;local level_vertexes={&lt;br /&gt;
l01_escape = {lvid=595580, gvid=44},&lt;br /&gt;
l02_garbage = {lvid=384039, gvid=265},&lt;br /&gt;
l03_agroprom = {lvid=438379, gvid=693},&lt;br /&gt;
l04_darkvalley = {lvid=392517, gvid=813},&lt;br /&gt;
l06_rostok = {lvid=69283, gvid=1311},&lt;br /&gt;
l07_military = {lvid=915663, gvid=1546},&lt;br /&gt;
l10_radar = {lvid=796328, gvid=1868},&lt;br /&gt;
l11_pripyat = {lvid=295965, gvid=2269}&lt;br /&gt;
}&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ЗЫ:Извините ,что не для всех уровней,исправлюсь &lt;br /&gt;
Так, таблица у нас есть, теперь нам нужно написать функцию спавна. Давайте покажу на Монстрах.&lt;br /&gt;
Создадим таблицу с секциями спавна монстров:&lt;br /&gt;
(Я буду использовать свои наработки, поэтому таких секции у вас не будет, эта таблица - пример)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;local mutants = {&lt;br /&gt;
&amp;quot;zombie_ghost_hell&amp;quot;,&lt;br /&gt;
&amp;quot;zombie_normal_hell&amp;quot;,&lt;br /&gt;
&amp;quot;zombie_immortal_hell&amp;quot;,&lt;br /&gt;
&amp;quot;bloodsucker_weak_hell&amp;quot;,&lt;br /&gt;
&amp;quot;tushkano_normal_hell&amp;quot;,&lt;br /&gt;
&amp;quot;snork_weak_hell&amp;quot;,&lt;br /&gt;
&amp;quot;burer_weak_hell&amp;quot;,&lt;br /&gt;
&amp;quot;cat_weak_hell&amp;quot;,&lt;br /&gt;
&amp;quot;chimera_weak_hell&amp;quot;,&lt;br /&gt;
&amp;quot;gigant_strong_hell&amp;quot;&lt;br /&gt;
}&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таблицу записали ,наконец приступим к оформлению главной функции&lt;br /&gt;
&amp;lt;lua&amp;gt;function random_spawn()&lt;br /&gt;
local count = math.random(5,20) --выбираем кол-во заспавненых мобов&lt;br /&gt;
local section = mutants[math.random(table.getn(mutants))] -- выбираем секцию моба&lt;br /&gt;
local lv = math.random(level_vertexes[level.name()][&amp;quot;lvid&amp;quot;]) --выбираем левел вертекс&lt;br /&gt;
local gv = level_vertexes[level.name()][&amp;quot;gvid&amp;quot;] --выбираем гэйм вертекс&lt;br /&gt;
for ind = 1, count do&lt;br /&gt;
	alife():create(section, level.vertex_position(lv), lv, gv)--\\level.vertex_position(lv) - позиция левел вертекса&lt;br /&gt;
end&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее помещаем вызов функции в '''bind_stalker.script''' в ''net_spawn()'' и при каждой загрузке будут спавнится мобы в рандомной точке&lt;br /&gt;
[[Категория:Скрипты]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;Вступление ГГ в группировку!&amp;lt;/big&amp;gt;&lt;br /&gt;
1.Создаем файл '''ваше_название_скприпта.script''' в папке '''gamedata/scripts'''&lt;br /&gt;
2. Открываем его и пишем:&lt;br /&gt;
--меняем группировку ГГ&lt;br /&gt;
&amp;lt;lua&amp;gt;function new_group(actor, npc)&lt;br /&gt;
if npc:character_community() ~= &amp;quot;(dolg)&amp;quot; then &lt;br /&gt;
	npc:set_character_community(&amp;quot;dolg&amp;quot;, 0, 0) &lt;br /&gt;
end&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
Выдаём функцию при разговоре с НПС&lt;br /&gt;
&lt;br /&gt;
НПС вступает в группировку&lt;br /&gt;
&amp;lt;pre&amp;gt;function ваше_название_функции(npc, actor)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вызываем также, из любого диалога&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;Нельзя взять оружие без брони&amp;lt;/big&amp;gt;&lt;br /&gt;
Пишем функцию в любом скрипе:&lt;br /&gt;
&amp;lt;lua&amp;gt;function ваше_название_функции()&lt;br /&gt;
	local armor = db.actor:item_in_slot(6) -- слот брони&lt;br /&gt;
	local weapon = db.actor:item_in_slot(2) -- слот оружия (для пистолетов в оригинале слот 1)&lt;br /&gt;
	if db.actor:active_slot()==2 and weapon then -- за место 2 пишем слот оружия еще раз&lt;br /&gt;
		local tmp = armor and armor:section() or &amp;quot;&amp;quot;&lt;br /&gt;
		if not string.find(tmp, &amp;quot;пишем_название_брони&amp;quot;) and (weapon:section()==&amp;quot;пишем_название_оружия&amp;quot;) then&lt;br /&gt;
			-- пример:if (not string.find(tmp, &amp;quot;exo&amp;quot; )) and weapon:section()==&amp;quot;wpn_pkm&amp;quot; then&lt;br /&gt;
			&lt;br /&gt;
			-- скидываем оружие из слота в инвентарь&lt;br /&gt;
			-- выкидываем оружие, и тем самым освобождаем слот&lt;br /&gt;
			db.actor:drop_item(weapon)&lt;br /&gt;
			-- спавним ствол с той же секцией, чтобы он занял слот&lt;br /&gt;
			local tmpw = amk.spawn_item_in_inv(weapon:section())&lt;br /&gt;
			-- подбираем выкинутый предмет обратно в инвентарь&lt;br /&gt;
			-- т.к. слот как бы занят он ляжет в рюкзак&lt;br /&gt;
			db.actor:transfer_item(weapon,db.actor)&lt;br /&gt;
			-- удаляем оружие в слоте&lt;br /&gt;
			alife():release(tmpw)&lt;br /&gt;
			&lt;br /&gt;
			-- выводим сообщение на экран о том, что нельзя брать оружие без определённой брони&lt;br /&gt;
			news_manager.send_tip(db.actor,&amp;quot;Невозможно взять пулемёт в руки без экзы&amp;quot;,nil,nil,10000)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее идем по пути '''gamedata/script/bind_stalker.script'''&lt;br /&gt;
Функция: &lt;br /&gt;
&amp;lt;pre&amp;gt;function actor_binder:update(delta)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Сразу ниже неё пиши вызов в формате :&lt;br /&gt;
&amp;lt;code&amp;gt;название_файла.название_функции&amp;lt;/code&amp;gt;&lt;br /&gt;
Можешь написать эту функцию в любом файле из папки '''scripts''', а можешь создать свой файл и назвать, скажем, '''my_script''', и написать там.&lt;br /&gt;
Должно быть так :&lt;br /&gt;
Код&lt;br /&gt;
&amp;lt;lua&amp;gt;function actor_binder:update(delta)&lt;br /&gt;
my_script.check_armor()&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;Удаление предмета с заданным именем из игры&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;function name_function()&lt;br /&gt;
local se_obj = alife():object(&amp;quot;сюда_пишем_что_удалять_будем&amp;quot;)&lt;br /&gt;
if se_obj then&lt;br /&gt;
	alife():release(se_obj, true)&lt;br /&gt;
end&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ПРИМЕР&lt;br /&gt;
--' убираем финального Клыка&lt;br /&gt;
&amp;lt;lua&amp;gt;function dell_kluk_final()&lt;br /&gt;
local se_obj = alife():object(&amp;quot;final_kluk&amp;quot;)&lt;br /&gt;
if se_obj then&lt;br /&gt;
	alife():release(se_obj, true)&lt;br /&gt;
end&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Я добавлю может кому и пригодится.'''Болотный Доктор'''&lt;br /&gt;
&lt;br /&gt;
         ВЫДАЁМ ПРЕДМЕТ АКТОРУ&lt;br /&gt;
&amp;lt;lua&amp;gt;function название функции (first_speaker, second_speaker)&lt;br /&gt;
	dialogs.relocate_item_section(second_speaker, &amp;quot;название предмета&amp;quot;, &amp;quot;in&amp;quot;) &lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Размещается в файлах скрипт.&lt;br /&gt;
&lt;br /&gt;
Выдача поршня вставляется под строку действия.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;action&amp;gt;название скрипта.название функции&amp;lt;/action&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Примечание, что бы выдать два одинаковых предмета пишем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;function название функции (first_speaker, second_speaker)&lt;br /&gt;
	dialogs.relocate_item_section(second_speaker, &amp;quot;название предмета&amp;quot;, &amp;quot;in&amp;quot;,2) &lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если надо больше меняем цифру 2 на нужную нам.&lt;br /&gt;
&lt;br /&gt;
      ОТБИРАЕМ ПРЕДМЕТ У АКТОРА.&lt;br /&gt;
&amp;lt;lua&amp;gt;function название функции(first_speaker, second_speaker)&lt;br /&gt;
    dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, &amp;quot;название предмета&amp;quot;)&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
размещается в файлах скрипт&lt;br /&gt;
&lt;br /&gt;
выдача поршня вставляется под строку действия:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;action&amp;gt;название скрипта.название функции&amp;lt;/action&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Примечание, что бы отобрать два одинаковых предмета пишем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;function название функции(first_speaker, second_speaker)&lt;br /&gt;
    dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, &amp;quot;название предмета&amp;quot;,2)&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
Если надо больше меняем цифру 2 на нужную нам.&lt;br /&gt;
&lt;br /&gt;
      СПАВНИМ ВЕЩЬ В РЮКЗАК ГГ&lt;br /&gt;
&amp;lt;lua&amp;gt;function название функции()&lt;br /&gt;
local obj = alife():create(&amp;quot;ВЕЩЬ&amp;quot;, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В диалог:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;action&amp;gt;название скрипта.название функции&amp;lt;/action&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ПРОВЕРКА НАЛИЧИЯ У АКТОРА ПРЕДМЕТА&lt;br /&gt;
Вариант первый&lt;br /&gt;
&amp;lt;lua&amp;gt;function Название функции()&lt;br /&gt;
    if db.actor:object(&amp;quot;название предмета&amp;quot;) then&lt;br /&gt;
        return true&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
в диалог:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;precondition&amp;gt;имя скрипта.название функции&amp;lt;/precondition&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;---------Вариант второй)------------------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;function название функции(first_speaker, second_speaker)&lt;br /&gt;
    return first_speaker:object(&amp;quot;название предмета&amp;quot;) ~= nil&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
в диалог:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;precondition&amp;gt;имя скрипта.название функции&amp;lt;/precondition&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ПРОВЕРКА ВЕЩЕЙ У ГГ&lt;br /&gt;
&amp;lt;lua&amp;gt;function Название функции(first_speaker, second_speaker)&lt;br /&gt;
    return first_speaker:object(&amp;quot;название предмета&amp;quot;) ~= nil or&lt;br /&gt;
             first_speaker:object(&amp;quot;название предмета&amp;quot;) ~= nil or&lt;br /&gt;
             first_speaker:object(&amp;quot;название предмета&amp;quot;) ~= nil&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
в диалог:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;precondition&amp;gt;имя скрипта.название функции&amp;lt;/precondition&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
описание... если есть хотя бы одна вещь, то мы получим фразу, если нет всех нет разговора&lt;br /&gt;
&lt;br /&gt;
ПРОВЕРКА ДЕНЕГ У ГГ&lt;br /&gt;
Вариант первый(используют ПЫС)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;function название функции(first_speaker, second_speaker)&lt;br /&gt;
    return first_speaker:money() &amp;gt;= 2000&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
в диалог: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;precondition&amp;gt;имя скрипта.название функции&amp;lt;/precondition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-----------Вариант два--------------&amp;gt;&lt;br /&gt;
Использовал на ТЧ, но и в ЗП работает&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;function название функции()&lt;br /&gt;
return db.actor:money()&amp;gt;=10000&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
В диалог: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;precondition&amp;gt;имя скрипта.название функции&amp;lt;/precondition&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
СПАВН ПРЕДМЕТА&lt;br /&gt;
&amp;lt;lua&amp;gt;function spawn_vintar()&lt;br /&gt;
alife():create(&amp;quot;Название предмета&amp;quot;,vector():set(24.725412368774,-3.6072344779968,173.83030700684),993926,210)&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В диалог:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;action&amp;gt;название скрипта.название функции&amp;lt;/action&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
МГНОВЕННАЯ СМЕРТЬ ГГ&lt;br /&gt;
&amp;lt;lua&amp;gt;function название функции(npc, actor)&lt;br /&gt;
    npc:kill(actor)&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В диалог:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;action&amp;gt;название скрипта.название функции&amp;lt;/action&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ПРОВЕРКА КОЛ_ВА ОДИНАКОВЫХ ПРЕДМЕТОВ&lt;br /&gt;
&amp;lt;lua&amp;gt;function название функции(first_speaker, second_speaker)&lt;br /&gt;
	local item_sections = {&lt;br /&gt;
		[&amp;quot;medkit&amp;quot;] = 5, -- к примеру 5 аптечек&lt;br /&gt;
		[&amp;quot;bandage&amp;quot;] = 2} -- и два бинта&lt;br /&gt;
&lt;br /&gt;
	local function calc(temp, item)&lt;br /&gt;
		local sect = item:section()&lt;br /&gt;
		if item_sections[sect] and item_sections[sect]&amp;gt;0 then&lt;br /&gt;
			if item_sections[sect]==1 then&lt;br /&gt;
				item_sections[sect] = nil&lt;br /&gt;
			else&lt;br /&gt;
				item_sections[sect] = item_sections[sect] - 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	db.actor:iterate_inventory(calc, db.actor)&lt;br /&gt;
	return next(item_sections)==nil&lt;br /&gt;
end &lt;br /&gt;
&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В диалог:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;precondition&amp;gt;имя скрипта.название функции&amp;lt;/precondition&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ЛЕЧЕНИЕ ГГ &lt;br /&gt;
Вставим этот экшен в диалог:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;action&amp;gt;dialogs.medic_magic_potion&amp;lt;/action&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ВЫДАЧА ДЕНЕГ от НПС ГГ&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;function название функции(first_speaker, second_speaker)&lt;br /&gt;
    dialogs.relocate_money_to_actor(first_speaker, second_speaker, 2000)&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В диалог:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;action&amp;gt;название скрипта.название функции&amp;lt;/action&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ВЫДАЧА ДЕНЕГ от ГГ  НПС&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;function название функции(actor, npc)&lt;br /&gt;
   dialogs.relocate_money(npc,кол-во,&amp;quot;out&amp;quot;)   &lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В диалог:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;action&amp;gt;название скрипта.название функции&amp;lt;/action&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
НПС становится врагом после определенной ветки диалога или другом  -5000 враг  5000 друг&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;function название скрипта(actor, npc)                                            &lt;br /&gt;
    npc:force_set_goodwill(-5000, actor)&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;action&amp;gt;название скрипта.название функции&amp;lt;/action&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ПРОВЕРКА СМЕРТИ NPC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;function название функции проверки(actor,npc)&lt;br /&gt;
   return has_alife_info(&amp;quot;инфо смерти&amp;quot;)&lt;br /&gt;
end&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В диалог: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;precondition&amp;gt;имя скрипта.название функции&amp;lt;/precondition&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Авторы ==&lt;br /&gt;
'''Оригинальный вид статьи:'''&lt;br /&gt;
*Rez@nyi&lt;br /&gt;
*Меченый&lt;br /&gt;
*Болотный Доктор&lt;br /&gt;
'''Переоформление, перестройка, дополнение статьи:''' &lt;br /&gt;
*FantomICW&lt;/div&gt;</summary>
		<author><name>91.217.2.225</name></author>	</entry>

	</feed>