Рандомный спавн объектов — различия между версиями
Материал из 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