<?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.93.153&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.93.153&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.93.153"/>
		<updated>2026-06-14T08:06:15Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A0%D0%B0%D0%BD%D0%B4%D0%BE%D0%BC%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2</id>
		<title>Рандомный спавн объектов</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A0%D0%B0%D0%BD%D0%B4%D0%BE%D0%BC%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B0%D0%B2%D0%BD_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"/>
				<updated>2009-06-14T05:17:40Z</updated>
		
		<summary type="html">&lt;p&gt;92.127.93.153: Увеличена универсальность функции.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагаю свой вариант рандомного спавна. В данном способе, нет проблем с проваливанием объектов под землю. Но рандомность, к сожалению фиксирована. Хотя, это даже к лучшему, так как появляется возможность спавнить только по укромным местам, а так же возможность указывать не только координаты, но и id объектов, в том числе и нпс. Функция универсальна, что расширяет её возможности.&lt;br /&gt;
&lt;br /&gt;
Итак, в файле '''xr_effects.script''' вписываем новую функцию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function uni_random_spawn(items, tbl, kol, rand)&lt;br /&gt;
    local obj, item, ms&lt;br /&gt;
    local lv_id, gv_id&lt;br /&gt;
    local id = 65535&lt;br /&gt;
    local pos = vector()&lt;br /&gt;
&lt;br /&gt;
    if kol == nil then&lt;br /&gt;
        kol = 1&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if type(items) == 'table' then&lt;br /&gt;
        item = math.random(#items)&lt;br /&gt;
        item = items[item]&lt;br /&gt;
    else&lt;br /&gt;
        item = items&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if type(tbl) == 'table' then&lt;br /&gt;
        ms = math.random(#tbl)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if type(tbl) == 'table' and type(tbl[ms]) == 'table' then&lt;br /&gt;
        pos.x = tbl[ms][1]&lt;br /&gt;
        pos.y = tbl[ms][2]&lt;br /&gt;
        pos.z = tbl[ms][3]&lt;br /&gt;
        lv_id = tbl[ms][4]&lt;br /&gt;
        gv_id = tbl[ms][5]&lt;br /&gt;
    else&lt;br /&gt;
        if type(tbl) == 'table' and type(tbl[ms]) == 'number' then&lt;br /&gt;
            ms = tbl[ms]&lt;br /&gt;
            obj = level_object_by_sid (ms)&lt;br /&gt;
        elseif type(tbl) == 'table' and type(tbl[ms]) == 'string' or type(tbl) == 'string' then&lt;br /&gt;
            obj = db.actor&lt;br /&gt;
        elseif type(tbl) == 'number' then&lt;br /&gt;
            obj = level_object_by_sid (tbl)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        pos = obj:position()&lt;br /&gt;
        lv_id = obj:level_vertex_id()&lt;br /&gt;
        gv_id = obj:game_vertex_id()&lt;br /&gt;
        id = obj:id()&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i=1, kol do&lt;br /&gt;
        if rand == true then&lt;br /&gt;
            item = math.random(#items)&lt;br /&gt;
            item = items[item]&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        alife():create(item, pos, lv_id, gv_id, id)&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;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function random_spawn_data_1()&lt;br /&gt;
local tbl = --таблица мест спавна&lt;br /&gt;
&lt;br /&gt;
local items = --таблица объектов спавна&lt;br /&gt;
&lt;br /&gt;
local kol = 5 --количество объектов спавна, за один раз. если строку вообще не указывать, то спавниться будет только один предмет.&lt;br /&gt;
&lt;br /&gt;
local rand = true --для kol. если true, то случайные объекты. если строку вообще не указывать, то случайно-одинаковые объекты. Строка не указывается, если kol не указан.&lt;br /&gt;
&lt;br /&gt;
this.uni_random_spawn(items, tbl, kol, rand) --если обе функции находятся в одном файле.&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если функция с данными прописывается в другом файле, то вместо '''this''' пишется имя файла без расширения, в котором находится общая функция. В нашем случае, это '''xr_effects.script'''.&lt;br /&gt;
Тоесть, получится так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;xr_effects.uni_random_spawn(items, tbl, kol, rand)&amp;lt;/pre&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;
'''1.Рандомно, случайный объект:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function random_spawn_data_1()&lt;br /&gt;
local tbl = {&lt;br /&gt;
2040, -- id ящика&lt;br /&gt;
'huesos', --строка, а значит инвентарь актора&lt;br /&gt;
{125.45,-1,117.88,35447,1213}, --координаты(x, y, z, lv_id, gv_id)&lt;br /&gt;
{134.526,0,70.318,36649,1229},&lt;br /&gt;
{102,0,128.98,32231,1219},&lt;br /&gt;
2041,&lt;br /&gt;
573,&lt;br /&gt;
500, --id Бармена&lt;br /&gt;
'actor',&lt;br /&gt;
'npc'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local items = {'af_medusa','af_cristall_flower'} --Список возможных объектов&lt;br /&gt;
&lt;br /&gt;
this.uni_spawn_new(items, tbl, kol, rand)&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таблица '''tbl''' содержит в себе разные типы мест для спавна. Такие как '''id''', '''актор''' и '''непосредственные координаты'''. Весь список данных записывается в фигурных скобках, через запятую. Непосредственные координаты, заключаются в дополнительные фигурные скобки, как в нашем примере.&lt;br /&gt;
Строки, могут содержать в себе любую информацию. Это не имеет значения, так как проверка идёт на тип значения 'string'. Если строка, то спавнить в инвентаре актора.&lt;br /&gt;
&lt;br /&gt;
Таблица '''items''' содержит в себе, список возможных объектов. Которые так же, вписываются в фигурные скобки, через запятую.&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
'''2. Рандомно, определённый объект:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function random_spawn_data_1()&lt;br /&gt;
local tbl = {&lt;br /&gt;
2040, -- id ящика&lt;br /&gt;
'actor', --строка, а значит инвентарь актора&lt;br /&gt;
{125.45,-1,117.88,35447,1213}, --координаты(x, y, z, lv_id, gv_id)&lt;br /&gt;
{134.526,0,70.318,36649,1229},&lt;br /&gt;
{102,0,128.98,32231,1219},&lt;br /&gt;
2041,&lt;br /&gt;
573,&lt;br /&gt;
500 --id Бармена&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local items = 'af_medusa' --Объект спавна&lt;br /&gt;
&lt;br /&gt;
this.uni_spawn_new(items, tbl, kol, rand)&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В данном случае, выбирается всего один объект, а значит в таблице '''items''' фигурные скобки ставить не обязательно. Что переделывает её, в простую переменную.&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
'''3. В определённом месте, случайный объект:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function random_spawn_data_1()&lt;br /&gt;
local tbl = 2040 -- id ящика&lt;br /&gt;
&lt;br /&gt;
local items = {'af_medusa','af_cristall_flower'} --Список возможных объектов&lt;br /&gt;
&lt;br /&gt;
this.uni_spawn_new(items, tbl, kol, rand)&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом случае, переменная '''tbl''' может иметь один из трёх типов '''(table, number, string)'''. Если указывается id ящика или нпс, то прописывается так, как указано на примере. В данном случае, '''tbl''' будет иметь, тип - number. Если указать актора, то тип будет string:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;local tbl = &amp;quot;actor&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну а если указывать непосредственные координаты, то tbl будет таблицей:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;local tbl = {134.526,0,70.318,36649,1229}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
'''4. В определённом месте, определённый объект:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function random_spawn_data_1()&lt;br /&gt;
local tbl = 2040&lt;br /&gt;
&lt;br /&gt;
local items = 'af_medusa'&lt;br /&gt;
&lt;br /&gt;
this.uni_spawn_new(items, tbl, kol, rand)&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну тут, всё уже понятно.&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Всё. Теперь вызываем функцию '''random_spawn_data_1''', например из диалога:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;action&amp;gt;xr_effects.random_spawn_data_1&amp;lt;/action&amp;gt;&amp;lt;/pre&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;
-----------------------------------------------------------------------------------&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
Автор скрипта: '''SINGAPUR22'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:скрипты]]&lt;/div&gt;</summary>
		<author><name>92.127.93.153</name></author>	</entry>

	</feed>