Альтернативный spawner - Форум



[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Теория модостроения » Туторы по созданию » Альтернативный spawner
Альтернативный spawner
HardtmuthДата: Пт, 06.06.2014, 16:39 | Сообщение # 1




Сообщений: 731
Награды: 5
Репутация: 8

Статус:
Автор: Arist

Многие думаю сталкивались с проблемой невозможности спавна "неживых" обьектов с помощью секции:

   
Код
[spawner]cond =


Есть один способ, заменяющий это. Нужно сделать следующее.

В 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)%




Форум » Теория модостроения » Туторы по созданию » Альтернативный spawner
Страница 1 из 11
Поиск:

Войти Зарегистрироваться