Рандомный спавн объектов — S.T.A.L.K.E.R. Inside Wiki

Рандомный спавн объектов

Материал из S.T.A.L.K.E.R. Inside Wiki

Версия от 17:22, 12 июня 2009; Singapur22 (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Предлагаю свой вариант рандомного спавна. В данном способе, нет проблем с проваливанием объектов под землю. Но рандомность, к сожалению фиксирована. Хотя, это даже к лучшему, так как появляется возможность спавнить только по укромным местам. Функция универсальна, что расширяет её возможности.

Итак, в файле 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

Другие места
LANGUAGE