Рандомный спавн объектов
Материал из S.T.A.L.K.E.R. Inside Wiki
Предлагаю свой вариант рандомного спавна. В данном способе, нет проблем с проваливанием объектов под землю. Но рандомность, к сожалению фиксирована. Хотя, это даже к лучшему, так как появляется возможность спавнить только по укромным местам. Функция универсальна, что расширяет её возможности.
Итак, в файле xr_effects.script вписываем новую функцию:
function uni_random_spawn(items, tbl)
local item, ms
local pos, lv_id, gv_id
if type(items) == 'table' then
item = items[math.random(#items)]
else
item = items
end
if type(tbl[1]) == 'table' then
ms = math.random(#tbl)
pos = vector()
pos.x = tbl[ms][1]
pos.y = tbl[ms][2]
pos.z = tbl[ms][3]
lv_id = tbl[ms][4]
gv_id = tbl[ms][5]
else
pos = vector()
pos.x = tbl[1]
pos.y = tbl[2]
pos.z = tbl[3]
lv_id = tbl[4]
gv_id = tbl[5]
end
alife():create(item, pos, lv_id, gv_id, 65535)
end
Данная функция является общей, и прямого вызова не имеет. Для того, чтобы произвести рандомный спавн, создаём дополнительную функцию с данными, которую мы и будем вызывать.
Для рандомного спавна, случайного обекта из определённого списка:
function my_spawn_1()
local items = {'item1','item2','item3','item4','item5'}
local tbl = {
{x1, y1, z1, lv1, gv1},
{x2, y2, z2, lv2, gv2},
{x3, y3, z3, lv3, gv3}
}
this.uni_random_spawn(items, tbl)
end
Где:
таблица items - список объектов, для рандомного выбора одного из них.
таблица tbl - список секций с координатами мест спавна, для рандомного выбора одной из них.
Где, x, y, z, lv, gv - заменяются на реальные координаты pos.x, pos.y, pos.z
и level_vertex_id, game_vertex_id соответственно.
Для рандомного спавна определённого объекта:
function my_spawn_2()
local items = {'item1'} --или 'item1'
local tbl = {
{x1, y1, z1, lv1, gv1},
{x2, y2, z2, lv2, gv2},
{x3, y3, z3, lv3, gv3}
}
this.uni_random_spawn(items, tbl)
end
Сдесь у нас прописан всего один объект, который можно не заключать в фигурные скобки.
Для спавна в определённом месте, случайного объекта из определённого списка:
function my_spawn_3()
local items = {'item1','item2','item3','item4','item5'}
local tbl = {{x1, y1, z1, lv1, gv1}} --или {x1, y1, z1, lv1, gv1}
this.uni_random_spawn(items, tbl)
end
Для спавна в определённом месте, определённого объекта:
function my_spawn_3()
local items = {'item1'} --или 'item1'
local tbl = {{x1, y1, z1, lv1, gv1}} --или {x1, y1, z1, lv1, gv1}
this.uni_random_spawn(items, tbl)
end
Вызов можно производить из любого места. Для того, чтобы вызвать спавн из диалога, в нужном тэге прописываем вызов одной из функций с данными:
<action>xr_effects.my_spawn_1</action>
Как вызывать из других мест, пожалуй пояснять не нужно.
Автор скрипта: SINGAPUR22