Скрипт для спавна наборов объектов — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
Erlik (обсуждение | вклад) |
Erlik (обсуждение | вклад) |
||
Строка 17: | Строка 17: | ||
и в файле npc_profile в теге <character id = | и в файле npc_profile в теге <character id = | ||
− | < | + | <lua> |
function SpawnToNpcOrToLocation(tab_items,tab_where) | function SpawnToNpcOrToLocation(tab_items,tab_where) | ||
local count = 0 | local count = 0 | ||
Строка 75: | Строка 75: | ||
end | end | ||
end | end | ||
− | </ | + | </lua> |
Функции с передачей данных: | Функции с передачей данных: | ||
--для спавна по координатам: | --для спавна по координатам: | ||
− | < | + | <lua> |
function uny_spawn_1() | function uny_spawn_1() | ||
local tab_items ={ | local tab_items ={ | ||
Строка 92: | Строка 92: | ||
this.SpawnToNpcOrToLocation(tab_items,tab_where) | this.SpawnToNpcOrToLocation(tab_items,tab_where) | ||
end | end | ||
− | </ | + | </lua> |
--для спавна в инвентарь эктора: | --для спавна в инвентарь эктора: | ||
− | < | + | <lua> |
function uny_spawn_2() | function uny_spawn_2() | ||
local tab_items ={ | local tab_items ={ | ||
Строка 107: | Строка 107: | ||
this.SpawnToNpcOrToLocation(tab_items,tab_where) | this.SpawnToNpcOrToLocation(tab_items,tab_where) | ||
end | end | ||
− | </ | + | </lua> |
− | + | ||
--для спавна в инвентарь NPC по его sid'у: | --для спавна в инвентарь NPC по его sid'у: | ||
− | < | + | <lua> |
function uny_spawn_3() | function uny_spawn_3() | ||
local tab_items ={ | local tab_items ={ | ||
Строка 122: | Строка 121: | ||
this.SpawnToNpcOrToLocation(tab_items,tab_where) | this.SpawnToNpcOrToLocation(tab_items,tab_where) | ||
end | end | ||
− | </ | + | </lua> |
-- для спавна в инвентарь NPC по его профильному имени | -- для спавна в инвентарь NPC по его профильному имени | ||
− | < | + | <lua> |
function uny_spawn_4() | function uny_spawn_4() | ||
local tab_items ={ | local tab_items ={ | ||
Строка 140: | Строка 139: | ||
this.SpawnToNpcOrToLocation(tab_items,tab_where) | this.SpawnToNpcOrToLocation(tab_items,tab_where) | ||
end | end | ||
− | </ | + | </lua> |
автор | автор |
Версия 20:39, 29 ноября 2010
Предлагаю вашему вниманию мой скромный вклад с дело модостроения. Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create() или использование несколько раз подряд операторов цикла для спавна нужного кол-ва разноименных объектов. В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите имена объектов, нужное вам кол-во и место - либо это конкретные координаты, либо инвентарь эктора.
Приведенный ниже скрипт является общей функцией, куда передаются данные. Его можно положить в любой скриптовый файл. Если же хотите, что бы функцию можно было вызывать также и из логики - то скрипт нужно положить в файл xr_effects.script.
Вызов соответственно нужно делать именно функции с данными - любым удобным\подходящим по ситуации способом - через экшен в диалоге, через другой скрипт, через файл info_portions (если хотите заспавнить, скажем, эктору что-то в инвентарь при старте игры).
Для каждого объекта надо указать кол-во: если нужен один объект то 1, если сто - то 100 и т.д.
Доработанный вариант дает возможностью спавнить по сиду как клиентским так и серверным, то есть находящимся в оффлайне объектам, а также есть возможность спавнить NPC по их профильному имени, которое указывается в теге <specific_character id = в файлах character_desc_локация и в файле npc_profile в теге <character id =
function 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 and 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)=='string' then if tab_where =="actor" then obj = alife():actor() else for i=1, 65534 do local predicate = Compare(i) if predicate then break end end end if obj == nil then 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(), obj: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]="ammo_5.56x45_ss190"}, {[3]="bread"}, {[5]="medkit_army"}} local tab_where ={x=-22,y=-33,z=-66,lv=33333,gv=44} this.SpawnToNpcOrToLocation(tab_items,tab_where) end
--для спавна в инвентарь эктора:
function uny_spawn_2() local tab_items ={ {[1]="exo_outfit"}, {[1]="af_cristall_flower"}, {[1]="wpn_fn2000"}, {[5]="ammo_5.56x45_ss190"}, {[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]="ammo_5.56x45_ss190"}, {[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_toz34"}, {[1]="wpn_ak74u"}, {[1]="stalker_outfit"}, {[1]="mutant_zombie_hand"}, {[1]="mutant_snork_leg"} } local tab_where = "mil_Svoboda_trader" -- имя из профиля this.SpawnToNpcOrToLocation(tab_items,tab_where) end
автор --Erlik 17:32, 30 ноября 2009 (UTC)