Пропоную вашій увазі мій скромний внесок у справу модобудування. Запропонований скрипт, на мій погляд, набагато зручніше, ніж використання традиційних формул - з дублюванням функцій 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