Перейти к контенту

Скриптование


Svoboда

Рекомендуемые сообщения

upgrades_string = ini:r_string(destr_item:section(), "upgrades")
tab_u = string.split(upgrades_string, 1, ",")

tab_u - нужная таблица.

В _g.script добавить:

--[[
 Функция разделения строки.
 Авторы: Gun12, Garry_Galler, Artos
--]]
string.split = function(str, mode, div, pattern)
    local tbl = {}
 if div then
  pattern = '%s*([^'..div..']+)%s*'
 elseif not pattern then
  pattern = '[%w%_]+'
 end
    if mode == nil then 
        for str_parse in str:gmatch(pattern) do
            table.insert(tbl, str_parse)
        end
    elseif mode == true then 
        for str_parse in str:gmatch(pattern) do
            tbl[str_parse] = true
        end
    elseif type(mode) == "number" then 
        for str_parse in str:gmatch(pattern) do
   tbl[#tbl+1] = tonumber(str_parse) or str_parse
        end
    end
 return tbl
end

Поделиться этим сообщением


Ссылка на сообщение

Как можно из скрипта обновить окно инвентаря?

Поделиться этим сообщением


Ссылка на сообщение

Если кто-то еще захочет использовать, в посте Карлана небольшая опечатка, функция называется ui.reinit_shown_ui()

Поделиться этим сообщением


Ссылка на сообщение

Почему если получить инвентарь вот так: inv = ui.get_inventory_wnd()
и приаттачить к полученному окну статик, то он не пропадает из инвентаря пока игру полностью не перезапустить. Как его удалить как только мы закрыли инвентарь? Чтобы при новом открытии он заново создался.

Поделиться этим сообщением


Ссылка на сообщение

Gray Hawk, ну раз их будет несколько, лучше в любом случае на фон выводить текст, а не писать на каждой текстуре (меньший вес будет)

---
Вопрос по скриптовым окнам. Вот допустим у меня есть окошко с элементами. Вот если у меня этих элементов столько, что они начинают вылезать за границу окошка, как мне ползунок прикрутить?

Изменено пользователем Kondr48

Поделиться этим сообщением


Ссылка на сообщение

self.object:set_callback(callback.use_object, self.use_object, self)

self.object:set_callback(callback.use_object, self.repair_outfit_start, self)

А чего вы для одного колбека делаете две разные функции?

Оставьте только первое.

 

self.object:set_callback(callback.use_object, self.use_object, self)

Потом ищите свою функцию use_object (она у вас почему-то use_obj называется), где спальник прописан и переносите кусочек, который отвечает за ремкоплект из функции repair_outfit_start в use_object.

Вот так:

 

function actor_binder:use_object(obj)
 main_sleep.sleep(obj)
 if obj:section() == "abc_repair" then
  remkomplekt.action_repair()
 end
end
 

function actor_binder:use_obj(obj)

main_sleep.sleep(obj)

end

 

function actor_binder:repair_outfit_start(obj, who)

if obj then

if obj:section() == "abc_repair" then

remkomplekt.action_repair()

end

end

end

 

 

P.S. А вообще старайтесь думать. Потому что в bind_stalker справки внесены совсем без понимания.

 

Изменено пользователем Kondr48
  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение

BoBaH_671, реально. Надо ящик просто в онлайн перевести. У себя делал так (код заточен под конкретную игровую сцену(одну) и далеко не идеален). Если кто из более опытных предложит чего по оптимитизации/правке буду только рад.

 

 

--Ограбление на Янтаре.
function yan_grab_func_1()
 level.disable_input()
 level.hide_indicators()
 timefactor = level.get_time_factor()
 level.set_time_factor(1000)
 local dir=device().cam_dir
 db.actor:set_actor_direction(dir.x,dir.y,0) --выравниваем направление взгляда, чтобы было падение более реалистичным
 level.add_cam_effector("camera_effects\\surge_02.anm", 2532, false, "")
 level.add_pp_effector("surge_fade.ppe", 2011, false)
 local snd_obj = xr_sound.get_safe_sound_object([[actor\hit_5]])
 snd_obj:play_no_feedback(actor, sound_object.s2d, 0, vector(), 15.0)
 sim = alife()
 soBox = sim:story_object(62333)
 switch_online(soBox.id)
 start_quick_timer(3, "gz_tasks.yan_grab_func_2") --Здесь таймеры Артоса. Можно использовать любые другие. По идее надо чуть подождать вроде чтобы тайник вышел в онлайн. Ну у меня как раз в данном случае все совпало как надо: пока потемнение в глазах пусть и пара таймеров сработает, мне не мешают.
end

function yan_grab_func_2()
 level.add_pp_effector("peace_fade.ppe", 1973, true)
 gz_utils.spawn_item_in_inv("item_hud_medkit", 3)
 gz_utils.spawn_item_in_inv("military_outfit")
 gz_utils.spawn_item_in_inv("wpn_ak74")
 gz_utils.spawn_item_in_inv("ammo_5.45x39_fmj", 2)
 gz_utils.spawn_item_in_inv("item_hud_voda", 3)
 start_quick_timer(4, "gz_tasks.yan_grab_func_3")
end

local function transfer_object_item(item)
    out_object:transfer_item(item, in_object)
end

function yan_grab_func_3()
 box_with_loot = level_object_by_sid(62333)
 out_object = db.actor
 in_object = box_with_loot
 db.actor:inventory_for_each(transfer_object_item)
 level.set_time_factor(timefactor)
 level.remove_pp_effector(1973)
 level.enable_input()
 level.show_indicators()
 --switch_offline(soBox.id)
end

 


Вам в принципе важно вот это:
 

 sim = alife()
 soBox = sim:story_object(62333)
 switch_online(soBox.id)
Изменено пользователем Kondr48

Поделиться этим сообщением


Ссылка на сообщение

Карлан, а какой поможет межлокационно? Речь идет о том, чтобы передать вещи актора в тайник который находится где-то там. Как поможет teleport_object? Телепортировать тайник в зону где он станет онлайн и потом обратно? Или функция работает шире, чем я думаю? Хотелось бы каких-то более подробных что ли пояснений.

Изменено пользователем Kondr48

Поделиться этим сообщением


Ссылка на сообщение

Таймеры использовать. Например отсюда:
http://www.amk-team.ru/forum/topic/13216-sborochnyj-tcekh/?p=971137

Вообще есть что-то штатное через level.add_call если не ошибаюсь, но я не помню как это использовать.

P.S. но я вообще не понимаю, зачем давать поршень и забирать его через секунду.

  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

Как заспавнить тайник скриптом? Причем чтобы все данные о нём в этом же скрипте и указать (визуал и наполнение)

Поделиться этим сообщением


Ссылка на сообщение

 

Карлан, так а где можно посмотреть? :). У вас достаточно интересных решений но кроме видео я так ничего и не находил.

 

Поделиться этим сообщением


Ссылка на сообщение

 

Silver Raven, так этих функций достаточно. Они скрывают все элементы. Есть кстати в логике аналоги =enable_ui, =disable_ui.

Поделиться этим сообщением


Ссылка на сообщение

 

UnLoaded, речь вроде шла о скрытии элементов интерфейса, а не блокировке клавиш  :) 

 

Поделиться этим сообщением


Ссылка на сообщение

Карлан, а разве камера так далеко от позиции ГГ? Насколько я видел зимние партиклы там что то типа облака метров на 10-15 вокруг ГГ, вряд ли там такая уж разница.

    CRAZY_STALKER666, что мешает посмотреть любой зимний мод, в котором это работает?  :) 

Поделиться этим сообщением


Ссылка на сообщение

 

CRAZY_STALKER666, я такую функцию нашёл только в ЗП. (Искал в ТЧ, ОГСЕ (там добавляли функции для смены отношений, просто не помню какие) и в ЗП. Вывод очевиден  :) 

 

Поделиться этим сообщением


Ссылка на сообщение
CRAZY_STALKER666, не совсем так - db.actor:position() хранит только координаты, вертексы актора получают так: db.actor:level_vertex_id(), db.actor:game_vertex_id().
Что касается того, как разделить и передать, мб вот так?
fucntion edit_actor_pos()
 local position = db.actor:position()
 local x = position.x + Ваша величина
 local y = position.y + Ваша величина
 local z = position.z + Ваша величина
 local position_new = vector():set(x,y,z)
 ваш_скрипт_куда_передать.ваша_функция(position_new)
end

А касательно вопроса "что это". Мне самому стало интересно. Видимо вектор? Поправьте если не прав  :)  всегда использовал и не задумывался как-то.

Изменено пользователем Kondr48
  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...