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

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

@Colder 

function check_community(community)
    if db.actor then
        return db.actor:character_community() == community
    end
    return false
end    

Скрытый текст

if check_community("actor") then 
    action 1
else
    action 2
end    

 

  • Нравится 1

Здесь могла быть ваша реклама.

Ссылка на комментарий
3 часа назад, I am Dead сказал(а):

можно поподробней про этот самый script_vars_storage?

Конечно можно

Это ведь, ты ТТ2 на OGSR переносил? :) Удивительно для меня, что этого не видел. Оно и год назад было там же. Ссылка оттуда.

  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Zander_driver Да, это я переносил тайные тропы, как раз таки войдет в обновление использование анимационных предметов. Возврат слота сделал немного иначе:

 

Скрытый текст

Пришлось сию конструкцию лепить через таймер, если без него то либо восстанавливается слот через который использовали предмет, либо устанавливается слот который был до использования предмета с невозможностью переключится на другой.

 

Не знаю, правильно или нет, но функция работает и лагов,багов не вызывает.

 

 

 

 -- Таймер восстановления слота
local slot_restore_timer = nil

 

             -- Запоминаем активный слот перед использованием предмета
  ogse.save_var( "store_slot", db.actor:active_slot() )
          db.actor:give_info_portion("slot_restore")

 

              -- Восстанавливаем активный слот после использования предмета
  local loaded_slot = ogse.load_var_safe( "store_slot" )
  local check_slot  = db.actor:active_slot()
  if loaded_slot and check_slot ~= loaded_slot and db.actor:has_info("slot_restore") then
    db.actor:activate_slot( loaded_slot )
  end

 

              -- Запускаем таймер на удаление поршня 

        if slot_restore_timer ~= nil then
            slot_restore_timer:stop()
        end
        slot_restore_timer = slot_timer()
        slot_restore_timer:start()

        end

 

 

function slot_restore_func()
    slot_restore_timer = nil
    db.actor:disable_info_portion("slot_restore")


end

 

-- Конструктор таймера удаления поршня
class "slot_timer"(ogse_qt.quick_timer)
function slot_timer:__init() super()
    self.limit = time_global()+3000
end
function slot_timer:condition()
    return time_global() >= self.limit
end
function slot_timer:action()
slot_restore_func()
end

 

Изменено пользователем I am Dead
  • Нравится 2
Ссылка на комментарий
Скрытый текст

--// (space-РАСТЯЖКА\X\Y\КОЛЛ-ячеек)
local btns_params = {
    inv = {space = 90, st_x = 30, st_y = 60, len_x = 4},
    slt = {space = 90, st_x = 540, st_y = 80, len_x = 4}
}

function ui_assembly:NewBtnCreate(type,i,sect,kol,pos)
    local tbl
    if type == "inv" then tbl = self.tbl_buttons
    else tbl = self.tbl_buttons_s end
    local b
    local tb = btns_params[type]
    local sizes = give_icon_params(sect)
    local pl_x = tb.st_x+(tb.space*math.mod(pos-1,tb.len_x))
    local pl_y = tb.st_y+(tb.space*math.floor((pos-1)/tb.len_x))
    local but_x = pl_x+(100-(sizes.width/2))
    local but_y = pl_y+(100-(sizes.height/2))
    b = tbl
    if not b and kol>0 then
    tbl = CUIButton()
    b = tbl
    b:SetWindowName("btn_"..type..i)
    b:SetAutoDelete(true)
    b:InitTexture("ui\\ui_icon_equipment")
    b:SetOriginalRect(sizes.x,sizes.y,sizes.width,sizes.height)
    if kol and kol>1 then
    b:SetText("x"..kol)
    else
    b:SetText("")
end
    b:SetTextColor(255,240,165,25)
    b:SetFont(GetFontGraffiti19Russian())
    b:Init(but_x,but_y,sizes.width,sizes.height)
    self:AttachChild(b)
    self:AddCallback(b:WindowName(), ui_events.BUTTON_CLICKED, loadstring("axr_assembly.btn_"..type.."_click("..i..")"), self)
    b:Show(kol>0)
    elseif b and kol==0 then
    b:Show(false)
    elseif b then
    b:SetWndPos(but_x,but_y)
    if kol>1 then b:SetText("x"..kol)
    else b:SetText("") end
    b:Show(true)
end
    if type == "inv" then self.tbl_buttons = tbl
    else self.tbl_buttons_s = tbl end
end

--// размер иконок
function give_icon_params(sect)
    local ini = system_ini()
    local t = {}
    if ini and ini:section_exist(sect) then
    t.width = ini:r_float(sect, "inv_grid_width")*50
    t.height = ini:r_float(sect, "inv_grid_height")*50
    t.x = ini:r_float(sect, "inv_grid_x")*50
    t.y = ini:r_float(sect, "inv_grid_y")*50
    else
    mylog("give_icon_params: section ["..sect.."] not exist")
    t.width = 20
    t.height = 20
    t.x = 20
    t.y = 20
end
    return t
end

Парни помогите уменьшить иконки в GUI окне.

Ссылка на комментарий

@Colder ,

b:SetStretchTexture(true)

и

b:Init(but_x,but_y,sizes.width*0.7,sizes.height*0.7)

Вместо 0.7 можно другой масштаб поставить, смотря какой нужен.

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

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий

Здравствуйте. Можно ли сделать так чтобы длительность эффекта (или сама эффективность предметов могла ухудшаться или улучшаться) восстановления здоровья после приёма, например, аптечки, мог быть другим в зависимости от, например, насыщения ГГ?

Изменено пользователем DibokDibokin
Ссылка на комментарий

@AndreySol а в оригинальном движке из скрипта нельзя получить параметры сытости, например?
Если возможно, то так-то ведь никто не запрещает получить этот параметр, и после "полноценного" приема аптечки и завершения эффекта ее действия  чутка испортить актору здоровье в зависимости от выше полученной "сытости"? Ну костыль, конечно, но если вариантов других нет, то...
Или есть противопоказания? 
 

  • Согласен 1

След от кругов на воде - это тоже след (с)

Ссылка на комментарий
50 минут назад, Okichi сказал(а):

Или есть противопоказания? 

Для костылей противопоказаний обычно нет. Но они костылями и останутся.

Конкретно по сытости: local actor_satiety = db.actor.satiety, ну и дальше делай что тебе хотца.

  • Спасибо 1
  • Согласен 3
Ссылка на комментарий

Приветствую всех, как удалить или убить объект заспавненный через all.spawn не прибегаю к началу новой игры?

 

Скрытый текст

[6520]

; cse_abstract properties
section_name = lights_hanging_lamp
name = light_uglovaya_1_glass_0006
position = -107.088996887207, -11.6824464797974, -5.0175313949585
direction = 3.14159274101257, -3.45578122138977, -1.57079589366913
id = 65535
version = 118
script_version = 6
spawn_id = 6520

; cse_alife_object properties
game_vertex_id = 703
level_vertex_id = 172
object_flags = 0xffffffba
custom_data = <<END
[collide]
ignore_static
END

; cse_visual properties
visual_name = physics\light\new_light\light_uglovaya_1_glass

; cse_ph_skeleton properties

; cse_alife_object_hanging_lamp properties
main_color = 0xffffffff
main_brightness = 0.80000001
main_color_animator = light\light_omni_white_idle
main_range = 12
light_flags = 0x3a
lamp_fixed_bones = link
health = 0
main_virtual_size = 0.1
ambient_radius = 3.5
ambient_power = 0.40000001
main_texture = lights\lights_spot_wire_02
main_bone = bone_lamp
main_cone_angle = 2.0943952
glow_radius = 0.69999999
ambient_bone = bone_omni

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 

 

Ссылка на комментарий

@I am Dead 

local sim = alife()

local s_obj = sim:object(light_uglovaya_1_glass_0006)

if s_obj then

     sim:release(s_obj, true)

end

будет работать только в ТЧ, в ЗП нет ф-ции получения объекта по имени.

  • Спасибо 1
  • Согласен 1
Ссылка на комментарий

@AndreySol Если берется имя из аллспавна - его в кавычки нужно

local s_obj = sim:object( "light_uglovaya_1_glass_0006" )
И вот что-то не уверена, что можно так удалять источники света. Для physic_object и physic_destroyable_object - сработает, для источника света - вопрос...
 

След от кругов на воде - это тоже след (с)

Ссылка на комментарий

В ТЧ для любых, каких угодно объектов сработает.

И,

Только что, Okichi сказал(а):

Если берется имя из аллспавна - его в кавычки нужно

Естественно, да :)

  • Согласен 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Zander_driver у меня совершенно точно какие-то источники света удаляться отказывались ) т.е. лампочки нет - свет есть.

След от кругов на воде - это тоже след (с)

Ссылка на комментарий

@Okichi лампочка и свет - это два отдельных объекта. Притом лампочка может вообще не быть объектом, а нарисована на стене. 

  • Согласен 5
Ссылка на комментарий
6 минут назад, dsh сказал(а):

ампочка может вообще не быть объектом, а нарисована на стене. 

Так поэтому и написала, что не обязательно удаление видимой глазами финтифлюшки удалит и свет) Т.е. имелось в виду, что  удаление свисающей лампочки не равно удалению источника света из нее.

@gam зачем перебор по id, если известно точное имя объекта из аллспавна. Имхо, не нужен совсем.

След от кругов на воде - это тоже след (с)

Ссылка на комментарий

Не поленился и проверил. Конкретно эта лампочка (light_uglovaya_1_glass_0006) замечательно удаляется, как источник света. Оставшийся светильник это декор на локации.

@I am Dead ,

способ вполне рабочий, что предложил@AndreySol , только , как уже указали, там кавычки нужны.

Скрытый текст

    local sim = alife()
    local s_obj = sim:object("light_uglovaya_1_glass_0006")
    if s_obj then
        sim:release(s_obj, true)
    end

Сам всё проверил, поставил вызов ф-ии при загрузке левела.

Изменено пользователем mole venomous
  • Нравится 2
  • Согласен 1
  • Полезно 1

Здесь могла быть ваша реклама.

Ссылка на комментарий

Доброго времени суток. Есть нескромный вопрос. Человек я в скриптовании и програмировании не слишком умный, часто беру чужие наработки и меняю под себя (конечно же с указанием авторства и огромной благодарностью). Нужна помощь. Взял из ОГСЕ на ТЧ скрипт на ограничение количества артефактов на поясе, немного переделал в силу своих скромных знаний, чтобы общее количество артефактов на поясе не превышало 5 (6 артефакт автоматически снимался). Так вот, скрипт снимает каждый 6 артефакт определенного вида (например, снимает шестую Душу, но общее количество артов может висеть и больше).

Собственно, сама функция:

function remove_arts()


    for key, value in pairs(belt) do
     if string.find(key, "af_") then
         local obj_sect = key
        if belt[key] and belt[key] > 5 then
            amk.remove_item(db.actor:object(key)) 
            amk.spawn_item_in_inv(key)
            belt[key] = belt[key] - 1
            if (not warning_last or warning_last ~= key) then                
                warning_last = key
            end
        end
     end
    end
    
end

Подскажите глупому, пожалуйста, как переделать, чтобы можно было вешать любых 5 артов, и любой 6 арт снимало.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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

AMK-Team.ru

×
×
  • Создать...