Альтернативный spawner
Автор: Arist
Многие думаю сталкивались с проблемой невозможности спавна "неживых" обьектов с помощью секции:
Есть один способ, заменяющий это. Нужно сделать следующее.
В xr_effects.script вставляем три эти скрипта:
Код
function spawn_object(actor, obj, p)
local spawn_sect = p[1]
if spawn_sect == nil then
abort("Wrong spawn section for 'spawn_object' function %s. For object %s", tostring(spawn_sect), obj:name())
end
local path_name = p[2]
if path_name == nil then
abort("Wrong path_name for 'spawn_object' function %s. For object %s", tostring(path_name), obj:name())
end
if not level.patrol_path_exists(path_name) then
abort("Path %s doesnt exist. Function 'spawn_object' for object %s ", tostring(path_name), obj:name())
end
local ptr = patrol(path_name)
local se_obj = alife():create(spawn_sect,ptr:point(),ptr:level_vertex_id(0),ptr:game_vertex_id(0))
end
function spawn_obj_in_zone(actor, obj, p)
local spawn_sect = p[1]
if spawn_sect == nil then
abort("Wrong spawn section for 'spawn_object' function %s. For object %s", tostring(spawn_sect), obj:name())
end
local zone_name = p[2]
if zone_name == nil then
abort("Wrong zone_name for 'spawn_object' function %s. For object %s", tostring(zone_name), obj:name())
end
if db.zone_by_name[zone_name] == nil then
abort("Zone %s doesnt exist. Function 'spawn_object' for object %s ", tostring(zone_name), obj:name())
end
local zone = db.zone_by_name[zone_name]
local spawned_obj = alife():create( spawn_sect,zone:position(),zone:level_vertex_id(),zone:game_vertex_id())
end
function spawn_object_in(actor, obj, p)
local spawn_sect = p[1]
if spawn_sect == nil then
abort("Wrong spawn section for 'spawn_object' function %s. For object %s", tostring(spawn_sect), obj:name())
end
local target_name = p[2]
if target_name == nil then
abort("Wrong target_name for 'spawn_object_in' function %s. For object %s", tostring(target_name), obj:name())
end
local box = alife():object(target_name)
if(box==nil) then
abort("There is no such object %s", target_name)
end
local obj = alife():create(spawn_sect,vector(),0,0,box.id)
end
Теперь в логике рестриктора можно делать следующее:
Спавн НПС или предмета по точке в WAY:
Код
[logic]active = sr_idle
[sr_idle]
on_info = {+test_info} nil %=spawn_object(agr_stalker_veteran:esc_test_way) =spawn_object(medkit:esc_test_way)%
Второй скрипт, спавн в рестриктор:
Код
[logic]active = sr_idle
[sr_idle]
on_info = {+test_info} nil %=spawn_obj_in_zone(agr_stalker_veteran:esc_test_restrictor) =spawn_obj_in_zone(medkit:esc_test_restrictor)%
Спавн в ящик и труп:
Код
[logic]active = sr_idle
[sr_idle]
on_info = {+test_info} nil %=spawn_object_in(antirad:level_prefix_inventory_box_0003)
=spawn_object_in(exo_outfit:esc_stalker_corpse)%