Сповіщення
Очистити все

Скрипт для спавна наборів об'єктів


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
7 місяців тому
 

Пропоную вашій увазі мій скромний внесок у справу модобудування. Запропонований скрипт, на мій погляд, набагато зручніше, ніж використання традиційних формул - з дублюванням функцій alife():create() або використання кілька разів поспіль операторів циклу для спавна потрібної кількості різноїменних об'єктів. У моїй функції все це вже включено - вам залишається тільки написати функцію з даними, в якій ви вкажіть імена об'єктів, потрібну вам кількість і місце - або це конкретні координати, або інвентар ектора.

Наведений нижче скрипт є загальною функцією, куди передаються дані. Його можна покласти у будь-який скриптовий файл. Якщо ж хочете, щоб функцію можна було викликати також і з логіки - то скрипт потрібно покласти у файл xr_effects.script.

Виклик відповідно потрібно робити саме функції з даними - будь-яким зручним способом - через екшен в діалозі, через інший скрипт, через файл info_portions (якщо хочете спанити, скажімо, ектору щось в інвентар при старті гри).

Для кожного об'єкта треба вказати кількість: якщо потрібен один об'єкт то 1, якщо сто - то 100 і т.д.

Доопрацьований варіант дає можливістю спавнити по сиді як клієнтським так і серверним, тобто об'єктам, що знаходяться в офлайні, а також є можливість сповнити NPC за їх профільним ім'ям, яке вказується в тезі <specific_character id = у файлах character_desc_локація і у файлі npc_profile в тезі < id =

 
функція SpawnToNpcOrToLocation ( tab_items,tab_where ) 
local count = 0 
local pos, lvid, gvid, id, obj
 
   local  function Compare ( id ) 
     obj = alife ( ) :object ( id ) 
        return obj and obj.profile_name і obj:profile_name ( ) == tab_where
     end
 
    for k , v in  pairs ( tab_items )  do 
        if  type ( tab_where ) ==' table ' then 
            for k , v in  pairs  ( tab_items [ k ] )  do
            count = k
                for i = 1 , count do 
                 alife ( ) : create ( v, vector ( ) : set ( tab_where [ 'x' ]) ,
                  tab_where [ 'y' ] ,tab_where [ 'z' ] ) ,
                   tab_where [ 'lv' ] ,tab_where [ 'gv' ] ) 
                end 
            end
 
        elseif  type ( tab_where ) == ' _ _ 
    _ _ _  _ 
        _ _ _ _ _ _ 
        _ 
        _ _ _ _ _  _ 
            _ _ _ _ _ 
            _ _ _ 
            _ 
           _ 
        _ 
    _
 
    if obj == nil  the  return  end 
        for k, v in  pairs  ( tab_items [ k ] )  do
            count = k
                 for i = 1 , count do 
                 alife ( ) : create ( v, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id, obj.id ) 
            end 
        end
 
    elseif  type ( tab_where ) =='number' then 
        obj = level_object_by_sid ( tab_where ) 
            if obj ~= nil  then 
             id, pos, lvid, gvid = obj:id ( ) , obj:position ( ) , obj:level_vertex_id ( ) , :game_vertex_id ( ) 
             elseif obj == nil  then 
             obj = alife ( ) :story_object ( tab_where )
             id, pos, lvid, gvid = obj.id, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id
                for k, v in  pairs  ( tab_items [ k ] )  do
                    count = k
                   for i = 1 , count do 
                   alife ( ) : create ( v, pos, lvid, gvid, id ) 
                   end 
               end 
            end 
        end 
    end 
end
 

Функції передачі даних:

--для спавна за координатами:

 
function uny_spawn_1 ( ) 
local tab_items = { 
{ [ [ 1 ] = " exo_outfit " } ,
 { [ 1 ] = " af_cristall_flower " } ,
 { [ 1 ] = " wpn_fn2000 " } , {
 [ 5 ] = " 9 .
 { [ 3 ] = "bread" 
} , {
 [ 5 ] = " medkit_army" } } local tab_where = { x= -22 ,y= -33 ,z= -66 ,lv= 33333 ,gv= 44 } ( tab_items,tab_where ) end


 

--для спавна в інвентар ектора:

 
function uny_spawn_2 ( ) 
local tab_items = { 
{ [ [ 1 ] = " exo_outfit " } ,
 { [ 1 ] = " af_cristall_flower " } ,
 { [ 1 ] = " wpn_fn2000 " } , {
 [ 5 ] = " 9 .
 { [ 3 ] = "bread" } ,
 { [ 5 ] = "medkit_army" } } local tab_where = "actor" 
this.SpawnToNpcOrToLocation ( tab_items,tab_where ) end


 

--для спавна в інвентар NPC за його sid'у:

 
function uny_spawn_3 ( ) 
local tab_items = { 
{ [ [ 1 ] = " exo_outfit " } ,
 { [ 2 ] = "
 af_cristall_flower " } ,
 { [ 1 ] = " wpn_fn2000 " } ,
 { [ 5 ] = " am 5 . { [ 3 ] = " bread " } ,
 { [ 5 ] = " medkit_army " } } 
local tab_where = 006  -- це sid вовка 
this.SpawnToNpcOrToLocation ( tab_items , tab_where ) 
end
 

-- для спавна в інвентар NPC за його профільним ім'ям

 
function uny_spawn_4 ( ) 
local tab_items = { 
{ [ [ 1 ] = " ammo_12x70_buck "
 } ,
 { [ 1 ] = " ammo_12x76_dart " } ,
 { [ 1 ] = " ammo_12x76_zhekan
 " } , { _ 1 ] = "wpn_ak74u" } ,
 { [ 1 ] = 
" stalker_outfit" } ,
 { [ 1 ] = "mutant_zombie_hand" } ,
 { [ 1 ] = "mutant_snork_leg" } } local tab_where = "mil_Svoboda_trader .SpawnToNpcOrToLocation ( tab_items,tab_where ) end

 

 

   
Цитата