..::STALKER.BY::.. http://stalker.by/forum/ |
|
Научите работать со скриптами http://stalker.by/forum/viewtopic.php?f=533&t=1998 |
Страница 1 из 1 |
Автор: | Змей [ 22 дек 2010, 20:15 ] |
Заголовок сообщения: | Научите работать со скриптами |
Научите работать со скриптами |
Автор: | halif [ 03 янв 2011, 22:27 ] |
Заголовок сообщения: | Re: Научите работать со скриптами |
ну нужно знать lua, и иметь опыт думаю это тебе поможет http://big.vip-zone.su/doc/devel/lua.xml |
Автор: | RazoR [ 31 янв 2011, 22:35 ] |
Заголовок сообщения: | Re: Научите работать со скриптами |
Предлагаю вашему вниманию мой скромный вклад с дело модостроения. Предложенный скрипт, на мой взгляд, гораздо удобнее, нежели использование традиционных формул - с дублированием функций alife():create() или использование несколько раз подряд операторов цикла для спавна нужного кол-ва разноименных объектов. В моей функции все это уже включено - вам остается только написать функцию с данными, в которой вы укажите имена объектов, нужное вам кол-во и место - либо это конкретные координаты, либо инвентарь эктора. local count = 0 function uni_spawn_new(tab_items,tab_where) 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 for k, v in pairs (tab_items[k]) do count = k for i=1, count do alife():create(v, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end end elseif type(tab_where)=='number' then local obj = level_object_by_sid(tab_where) for k, v in pairs (tab_items[k]) do count = k for i=1, count do alife():create(v, obj:position(), obj:level_vertex_id(), obj:game_vertex_id(), obj:id()) end end end end end доработанный вариант с возможностью спавна по сиду не только онлайн(клиентским), но и оффлайн(серверным) объектам. То есть можете смело спавнить в инвентарь NPC и ящиков, которые на момент активации скрипта находятся в оффлайне либо на других(неактивных) локациях. local count = 0 function uni_spawn_new(tab_items,tab_where) local pos, lvid, gvid, id 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 for k, v in pairs(tab_items[k]) do count = k for i=1, count do alife():create(v, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end end elseif type(tab_where)=='number' then local obj = level_object_by_sid(tab_where) if obj ~= nil then id = obj:id() pos = obj:position() lvid = obj:level_vertex_id() gvid = obj:game_vertex_id() elseif obj == nil then obj = alife():story_object(tab_where) id = obj.id pos = obj.position lvid = obj.m_level_vertex_id gvid = 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 Эту функцию нужно будет просто скопировать в любой скриптовый файл. Конечно, сама по себе она работать не будет - в эту функцию необходимо передать нужные нам данные: имя объекта по ltx секции (или если это NPC - то его имя из спавн секции: например "agr_stalker_regular"), его кол-во, место спавна. Вот так должна выглядеть функция с данными, которую вы и будете вызывать любым удобным для вас способом: каждый объект таблицы tab_items должен быть заключен в фигурные скобки, имя объекта - в кавычках, кол-во объектов указываем в квадратных скобках. (для тех, кто знает lua - тут все понятно: цифры это порядковые индексы элемента таблицы, которые я использовал в качестве значений для переменной лимита оператора цикла). Координаты указываем во второй таблице tab_where - x,y,z - это понятно координаты по осям, lv, gv - левел вертекс и гейм вертекс. Для знатоков lua тут тоже все ясно - по строковым индексам нужные данные передаются в основной скрипт и функция спавнит объект куда нам надо. function uny_spawn_1() 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 = {x=-249.495,y=-18.495,z=-107.105, lv=10784,gv=8} this.uni_spawn_new(tab_items,tab_where) end то же самое, но для спавна в инвентарь эктора: function uny_spawn_2() 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 = "actor" this.uni_spawn_new(tab_items,tab_where) end Для спавна в инвентарь эктора просто меняется тип переменной - с "table" на "string". А скрипт, заметив это, тут же понимает куда ему надо спавнить. Кстати, вместо строчки "actor", можно писать все угодно - это не имеет никакого значения. Разумеется, слово должно быть заключено в кавычки. И третий вариант - для спавна в инвентарь непися по его 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.uni_spawn_new(tab_items,tab_where) end |
Страница 1 из 1 | Часовой пояс: UTC + 2 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |