Рандомный спавн объектов — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
| Строка 95: | Строка 95: | ||
Как вызывать из других мест, пожалуй пояснять не нужно. | Как вызывать из других мест, пожалуй пояснять не нужно. | ||
| + | ----------------------------------------------------------------------------------- | ||
| + | Схема находится в доработке. В ближайшее время выложу более универсальную версию. | ||
| + | ----------------------------------------------------------------------------------- | ||
| + | Автор скрипта: '''SINGAPUR22''' | ||
[[Категория:скрипты]] | [[Категория:скрипты]] | ||
| − | |||
| − | |||
| − | |||
Версия 12:38, 13 июня 2009
Предлагаю свой вариант рандомного спавна. В данном способе, нет проблем с проваливанием объектов под землю. Но рандомность, к сожалению фиксирована. Хотя, это даже к лучшему, так как появляется возможность спавнить только по укромным местам. Функция универсальна, что расширяет её возможности.
Итак, в файле 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