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

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

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

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

    local slots = {

    [1] = {100, 190},
    [2] = {330, 190},
    [4] = {330, 440},
    [6] = {170, 400},

    }

 

    for num, xy in pairs(slots) do
        local item = db.actor:item_in_slot(num)

        if item then
        local item_sect = item:section()
        local x, y, width, height, y_fix, x_fix, w_fix = axr_base.icon_new_pos(item_sect, num)

 

        --// окно
        local weapon_tex = CUIStatic()
        self:AttachChild(weapon_tex)

        local wnd_x, wnd_y = unpack(xy)
        weapon_tex:Init(wnd_x + x_fix, wnd_y + y_fix, w_fix * f_size, height * f_size)

 

        --// текстура
        weapon_tex:InitTexture("ui\\ui_icon_equipment")
        weapon_tex:SetStretchTexture(true)
        weapon_tex:SetOriginalRect(x, y, width, height)

 

        --// прогресс
        local wpn_condition_progress = 0
        local bar = xml:InitProgressBar("bar_frame", weapon_tex)
        wpn_condition_progress = item:condition()*100
        bar:SetProgressPos(wpn_condition_progress)

 

        -- имя
        local wnd_name = "repair_wpn_" .. num

        self:Register(xml:Init3tButton(wnd_name, self), wnd_name)
        self:AddCallback("repair_wpn_" ..num, ui_events.BUTTON_CLICKED, function() self:repair_wpn(num) end, self)

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

    <bar_frame_ x="50" y="50" width="56" height="5" horz="1" min="0" max="100" pos="1">
        <background>
            <texture>ui_cop_Game_progress_efficiency_full</texture>
        </background>
        <min_color r="86" g="196" b="209"/>
        <middle_color r="86" g="196" b="209"/>
        <max_color r="86" g="196" b="209"/>
    <progress>
        <texture>ui_cop_item_cond</texture>
    </progress>
    </bar_frame>

Итог: https://yadi.sk/i/AH1ZOpH45nyQXQ

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

@Colder Привет мне кажется что всё дело вот в чём:

ты задаёшь координаты слотов

9 часов назад, Colder сказал:

 local slots = {

    [1] = {100, 190},
    [2] = {330, 190},
    [4] = {330, 440},
    [6] = {170, 400},

    }

а уже к ним привязываешь координаты прогресса

9 часов назад, Colder сказал:

 <bar_frame_ x="50" y="50"

соответственно получается где-то так

9 часов назад, Colder сказал:

 local slots = {

    [1] = {100 + 50, 190 + 50},
    [2] = {330 + 50, 190 + 50},
    [4] = {330 + 50, 440 + 50},
    [6] = {170 + 50, 400 + 50},

    }

 

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

@Colder , ну всё правильно выводится: на 50 пикселей правее левого края и на 50 ниже верхнего. А ты как задумывал? То есть, где надо, чтобы была шкала?

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

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

naxac.gif

Ссылка на комментарий
3 часа назад, Colder сказал:

Не помогло

Что именно не помогло?

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

и выводятся на 50 пихелей правее и 50 ниже - от левого верхнего угла иконки,

а так как иконки имеют разные размеры - нужно это учитывать!

либо сдвигать прогресс на дополнительное количество пихелей - относительно иконки - для каждой иконки, 

либо выводить прогресс по своим собственным координатам - не привязанных к иконке,

 

  • Согласен 1
  • Полезно 1
Ссылка на комментарий
3 часа назад, Colder сказал:

Вот я и не могу

Простейший вариант - чтоб не плодить костыли и не писать кучу проверок и функций

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

	<bar_frame_1 x="50" y="50" width="56" height="5" horz="1" min="0" max="100" pos="1">
		<background>
			<texture>ui_cop_Game_progress_efficiency_full</texture>
		</background>
		<min_color r="86" g="196" b="209"/>
		<middle_color r="86" g="196" b="209"/>
		<max_color r="86" g="196" b="209"/>
		<progress>
			<texture>ui_cop_item_cond</texture>
		</progress>
	</bar_frame_1>
	
	<bar_frame_2 x="50" y="50" width="56" height="5" horz="1" min="0" max="100" pos="1">
		<background>
			<texture>ui_cop_Game_progress_efficiency_full</texture>
		</background>
		<min_color r="86" g="196" b="209"/>
		<middle_color r="86" g="196" b="209"/>
		<max_color r="86" g="196" b="209"/>
		<progress>
			<texture>ui_cop_item_cond</texture>
		</progress>
	</bar_frame_2>
	
	<bar_frame_4 x="50" y="50" width="56" height="5" horz="1" min="0" max="100" pos="1">
		<background>
			<texture>ui_cop_Game_progress_efficiency_full</texture>
		</background>
		<min_color r="86" g="196" b="209"/>
		<middle_color r="86" g="196" b="209"/>
		<max_color r="86" g="196" b="209"/>
		<progress>
			<texture>ui_cop_item_cond</texture>
		</progress>
	</bar_frame_4>
	
	<bar_frame_6 x="50" y="50" width="56" height="5" horz="1" min="0" max="100" pos="1">
		<background>
			<texture>ui_cop_Game_progress_efficiency_full</texture>
		</background>
		<min_color r="86" g="196" b="209"/>
		<middle_color r="86" g="196" b="209"/>
		<max_color r="86" g="196" b="209"/>
		<progress>
			<texture>ui_cop_item_cond</texture>
		</progress>
	</bar_frame_6>

 

делаем 4 прогресса - так можно двигать их независимо

 

а чтоб это заработало 

 

Скрытый текст
        --// прогресс
        local wpn_condition_progress = 0
        local bar = xml:InitProgressBar("bar_frame_"..num, weapon_tex)        ---- измени эту строку вот так
        wpn_condition_progress = item:condition()*100
        bar:SetProgressPos(wpn_condition_progress)

 

100% уверенности в работоспособности нет - так как не могу проверить

но вроде должно работать :crazy2:

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

Всем привет. Ознакомился с возможностями движка ОГСР, но видимо недостаточно хорошо. 

Есть ли на этом движке возможность определить предмет на поясе и далее производить с ним какие-либо действия?

Т.е. речь не о проверке

local item = inventory.belt["item"]

а именно о том, что бы заданный объект можно было хитануть, удалить и т.п.

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

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

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

@mole venomous , можно сделать так:

local obj = db.actor:object("item")
if obj and db.actor:is_on_belt(obj) then
-- хитануть, удалить и т.п.
end

Или так (это подойдёт, если у актера может быть несколько предметов с секцией "item"):

local obj
for i = 0, db.actor:belt_count()-1 do
  obj = db.actor:item_on_belt(i)
  if obj and obj:section() == "item" then
  -- хитануть, удалить и т.п.
  end
end
Изменено пользователем naxac
  • Спасибо 1
  • Полезно 2

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

naxac.gif

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

Всем привет! Помогите разобраться. Хочу поместить в динамический худ мод NLC статик показателей ГГ . При вызове худа cтатик создается все работает но вот при закрытии удалить его ни как не получается. На get_hud():RemoveCustomStatic ни как не реагирует.

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

local function getSt(text, alpha, red, green, blue)
    alpha = (alpha<0 and 0) or (alpha>10 and 10) or alpha
    local param = 10 - math.floor(alpha + 0.5)
    text = string.sub(text, 1) .. string.format("%1.0f%%", alpha*10)
    alpha = 250 - param*10
    return {text, alpha, red, green, blue}
end


    local function show()
    local hud = get_hud()
    local custom_static
    local tbl = {
["actor_health"]  =    getSt("Здоровье:", db.actor.health *10,  0, 255,   0),                            
["actor_psy_health"] =getSt("Психика:", db.actor.psy_health    *10,   0, 250, 255),
["actor_satiety"] =   getSt("Голод:", 10 - db.actor.satiety    *10, 255, 155,   0),
["actor_radiation"] = getSt("Облучение:", db.actor.radiation    *10, 255, 255,   0),
["actor_sleep"] =   getSt("Усталость:", nlc_vars.gg_need_sleep    /25, 255, 255, 255),}
    for k,v in pairs(tbl) do
        custom_static = hud:GetCustomStatic(k)
        if custom_static == nil then
                 hud:AddCustomStatic(k, true)
        elseif v then
                    custom_static:wnd():SetText(v[1])
            custom_static:wnd():SetTextColor(v[2],v[3],v[4],v[5])
          end
    end
end

 

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

@bastorиз очевидного: не вижу кода удаления статика, только добавления (я ж не телепат и не "крутой хацкер"!); также, если у тебя GetCustomStatic(k), то и RemoveCustomStatic должен иметь параметр-указатель кого-что удалять (не всё же подряд и не случайный!)

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

AMD FX-8100 (Bulldozer) , 16GB DDR3-1600, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM!

Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136
Black_Raven.gif
 

Ссылка на комментарий
1 час назад, Black_Raven_03 сказал:

должен иметь параметр-указатель кого-что удалять

Разобрался уже статик не удалялся потому что выполнялся внутри функции  худа вынес его в отдельный скрипт и все заработало.

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

День добрый товарищи. У меня вопрос, вот какого плана: Как установить метку на предмет, если использовать «Рандомный спавн объектов» от тов. Singapur22?

Пример функции:

function my_spawn()
local tbl = {
{129.204,-6.337,-12.101,427496,133},
{101.002,-7.632,-4.966,398683,116},
{106.678,-7.494,8.702,406288,118}
}
local items = {
'af_medusa',
'af_vyvert',
'af_blood'
}       
xr_effects.uni_random_spawn(items, tbl, kol)
end

 

Pir%40t%40s.gif

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

@Pir@t@s 

В начале uni_random_spawn объявить переменную:

local cse_obj -- она будет хранить спец. объект класса для создаваемых предметов

Затем изменить строки создания предметов:

cse_obj = alife():create(item, pos, lv_id, gv_id, id) 

Далее, в конце ф-ции uni_random_spawn добавить установку метки, к примеру ставим метку на серверный объект:

level.map_add_object_spot_ser(cse_obj.id, type, text)
Описание аргументов ф-ции уст. метки смотрим в Справочнике по ф-циям и классам.

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

@Pir@t@s 

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

function uni_random_spawn(items, tbl, kol)

local lv_id, gv_id, obj, item, ms, kol2

local kol1 = 1

local id = 65535

local pos = vector()

if type(tbl) == 'table' then

ms = math.random(#tbl)

end

if type(tbl) == 'table' and type(tbl[ms]) == 'table' then

pos.x = tbl[ms][1]

pos.y = tbl[ms][2]

pos.z = tbl[ms][3]

lv_id = tbl[ms][4]

gv_id = tbl[ms][5]

else

if type(tbl) == 'table' and type(tbl[ms]) == 'number' then

ms = tbl[ms]

obj = level_object_by_sid (ms)

elseif type(tbl) == 'table' and type(tbl[ms]) == 'string' or type(tbl) == 'string' then

obj = db.actor

elseif type(tbl) == 'number' then

obj = level_object_by_sid (tbl)

end

pos = obj:position()

lv_id = obj:level_vertex_id()

gv_id = obj:game_vertex_id()

id = obj:id()

end

if kol == nil then

kol = 1

end

for s=1, kol do

if type(items) == 'table' then

item = math.random(#items)

if type(items[item]) == 'number' then

item = item - 1

end

if type(items[item+1]) == 'number' then

kol1 = items[item+1]

end

item = items[item]

else

item = items

end

for i=1, kol1 do

if type(item) == 'table' then

for k, v in ipairs(item) do

if type(item[k+1]) == 'number' then

kol2 = item[k+1]

else

kol2 = 1

end

if type(item[k]) ~= 'number' then

for j=1, kol2 do

local obj = alife():create(v, pos, lv_id, gv_id, id)

add_spot_on_map(obj.id, "red_location", "Твой текст")

end

end

end

else

local obj = alife():create(item, pos, lv_id, gv_id, id)

add_spot_on_map(obj.id, "red_location", "Твой текст")

end

end

end

end

 

function add_spot_on_map(obj_id,type,text) --+
  --возможные типы type смотри в ui\map_spots.xml 
  if obj_id then
    if text==nil then text=" " end
    -- Ставим метку на серверный объект чтобы её не пришлось обновлять
    level.map_add_object_spot_ser(obj_id, type, text)
  end
end

 

 

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

Может кто подсказать, почему сообщение приходит из секции патронов а не так как в text(имя) ?

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

function on_weapon_ammo(wpn)
    local active_item = db.actor:item_in_slot(db.actor:active_slot())

 

    if active_item then
    local ammo_type = ca_get_weapon_ammo_type( alife():object(wpn:id()))
    local section_ammo = ca_ammo_by_num(wpn:section(),ammo_type)

 

    if section_ammo~=nil and string.find(section_ammo,"ammo") then
    get_hud():AddCustomStatic("text2", true):wnd():SetText("%c[cyan]"..gts("st_ammo_string_0_1").."\\n".."%c[default]"..gts(section_ammo))
end
end
end

 

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

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

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

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

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

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

Войти

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

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

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