|
|
Строка 1: |
Строка 1: |
− | Предлагаю вашему вниманию мой скромный вклад с дело модостроения.
| + | L4YsE0 <a href="http://pziqivoacngs.com/">pziqivoacngs</a>, [url=http://kligpkvlhndn.com/]kligpkvlhndn[/url], [link=http://eisjvtqboehp.com/]eisjvtqboehp[/link], http://qywytojakpzh.com/ |
− | Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create() или использование несколько раз подряд операторов цикла для спавна нужного кол-ва разноименных объектов.
| + | |
− | В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите имена объектов, нужное вам кол-во и место - либо это конкретные координаты, либо инвентарь эктора.
| + | |
− | | + | |
− | Приведенный ниже скрипт является общей функцией, куда передаются данные.
| + | |
− | Его можно положить в любой скриптовый файл.
| + | |
− | Если же хотите, что бы функцию можно было вызывать также и из логики - то скрипт нужно положить в файл xr_effects.script.
| + | |
− | | + | |
− | Вызов соответственно нужно делать именно функции с данными - любым удобным\подходящим по ситуации способом - через экшен в диалоге, через другой скрипт, через файл info_portions (если хотите заспавнить, скажем, эктору что-то в инвентарь при старте игры).
| + | |
− | | + | |
− | Для каждого объекта надо указать кол-во: если нужен один объект то 1, если сто - то 100 и т.д.
| + | |
− | | + | |
− | Доработанный вариант дает возможностью спавнить по сиду как клиентским так и серверным, то есть находящимся в оффлайне объектам,
| + | |
− | а также есть возможность спавнить NPC по их профильному имени, которое указывается в теге
| + | |
− | <specific_character id = | + | |
− | в файлах character_desc_локация
| + | |
− | и в файле npc_profile в теге <character id =
| + | |
− | | + | |
− | <lua>
| + | |
− | 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
| + | |
− | </lua>
| + | |
− | | + | |
− | Функции с передачей данных:
| + | |
− | | + | |
− | --для спавна по координатам:
| + | |
− | <lua> | + | |
− | 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
| + | |
− | </lua>
| + | |
− | | + | |
− | --для спавна в инвентарь эктора:
| + | |
− | <lua>
| + | |
− | 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
| + | |
− | </lua>
| + | |
− | --для спавна в инвентарь NPC по его sid'у:
| + | |
− | <lua>
| + | |
− | 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
| + | |
− | </lua>
| + | |
− | | + | |
− | -- для спавна в инвентарь NPC по его профильному имени
| + | |
− | <lua>
| + | |
− | 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
| + | |
− | </lua>
| + | |
− | | + | |
− | автор
| + | |
− | --[[Участник:Erlik|Erlik]] 17:32, 30 ноября 2009 (UTC)
| + | |
− | | + | |
− | [[Категория:Скрипты]]
| + | |