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

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

@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

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


Подарки

  • 4
  • 5
  • 4
  • 2
  • Ссылка на комментарий
    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

    Подарки

  • 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

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

     


    Подарки

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

    @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

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


    Подарки

  • 3
  • 5
  • 4
  • 3
  • Ссылка на комментарий

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

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