Shestak UI
Go Back   Shestak UI > Interface Forums > Russian Community > Bugs Reports

Bugs Reports Report any bugs or issues you come across with ShestakUI.

Advertising

 
Thread Tools
Old 13.01.2013, 16:45   #1
 Assistant User Information

Wetxius's Avatar
Bug Многозарядные абилки и отображение таймера

Есть абилка с зарядами большими, чем один.

Если заряды все восстановлены - всё в порядке. Если потратить один заряд, то сразу вешает таймер (ну, не сразу кстати, а после спадения баффа. В моем случае - длань); крайняя левая иконка, заряд 1 есть ещё, но таймер уже пишет.
Вопрос, можно ли сделать показ таймера только после использования всех зарядов, а если хотя бы один остался - показывать только спиральку?

P.S. Вызывает ступор показ таймера: в рейд нужно кинуть боп, смотрю на таймер - кд. Приглядываюсь к числу зарядов, хм, есть ещё. Кидаю длань. Всё дело в повышение удобности.
Say Thank:
Shestak (16.01.2013)
Old 13.01.2013, 16:45   #1.5 - Disable Ads

Advertise on this site

Old 13.01.2013, 18:47   #2
Shestak
 Junior Member User Information

Shestak's Avatar
А как ведет себя дефолтный OmniCC на таких абилках/кнопках?


П.С.: Я к стати удивлен, что такие заряды есть на бопе/дланях, именно в этой интерпретации(старт таймера на панелях). Думал как-то иначе это сделано у палов.
Old 13.01.2013, 18:53   #3
Wetxius
 Assistant User Information

Wetxius's Avatar
Quote:
Originally Posted by Shestak View Post
А как ведет себя дефолтный OmniCC на таких абилках/кнопках?
OmniCC показывает таймер только при нуле зарядов. При одном - таймера нет.
Say Thank:
Shestak (13.01.2013)
Old 13.01.2013, 18:54   #4
Shestak
 Junior Member User Information

Shestak's Avatar
Quote:
Originally Posted by Wetxius View Post
Quote:
Originally Posted by Shestak View Post
А как ведет себя дефолтный OmniCC на таких абилках/кнопках?
OmniCC показывает таймер только при нуле зарядов. При одном - таймера нет.
Т.е. так, как надо? Если да, как освобожусь на днях, посмотрю.
Old 13.01.2013, 18:59   #5
Wetxius
 Assistant User Information

Wetxius's Avatar
Quote:
Originally Posted by Shestak View Post
Т.е. так, как надо? Если да, как освобожусь на днях, посмотрю.
Да, как надо. В ElvUI тоже так (если интересно; ради теста ставил).
Say Thank:
Shestak (13.01.2013)
Old 13.01.2013, 20:24   #6
m2jest1c
 Assistant User Information

m2jest1c's Avatar
Подтверждаю, только у лока немного по-другому таймер запускается на Рука Гул'дана:

использовал 1 заряд > идет спиралька без цифр (всё ок)

> вошел в демонформу > к спиральке добавились цифры

> вышел из демонформы > цифры остались
Say Thank:
Shestak (13.01.2013)
Old 16.01.2013, 13:53   #7
Shestak
 Junior Member User Information

Shestak's Avatar
Quote:
Originally Posted by Wetxius View Post
Если заряды все восстановлены
А как сделать так, что бы эти заряды были у пала
Old 16.01.2013, 14:12   #8
m2jest1c
 Assistant User Information

m2jest1c's Avatar
Quote:
Originally Posted by Shestak View Post
А как сделать так, что бы эти заряды были у пала
4 тир талантов - Мягкость
http://eu.battle.net/wow/ru/tool/tal...culator#b!...2..
Say Thank:
Shestak (16.01.2013)
Old 16.01.2013, 14:14   #9
Shestak
 Junior Member User Information

Shestak's Avatar
А вот так вот потестите:
lua Code [Select]:
local T, C, L, _ = unpack(select(2, ...))
if IsAddOnLoaded("OmniCC") or IsAddOnLoaded("ncCooldown") or IsAddOnLoaded("tullaCC") then return end

----------------------------------------------------------------------------------------
--  Cooldown count(OmniCC by Tuller)
----------------------------------------------------------------------------------------
local format = string.format
local floor = math.floor
local min = math.min

local function GetFormattedTime(s)
    local day, hour, minute = 86400, 3600, 60
    if s >= day then
        return format("%dd", floor(s / day + 0.5)), s % day
    elseif s >= hour then
        return format("%dh", floor(s / hour + 0.5)), s % hour
    elseif s >= minute then
        return format("%dm", floor(s / minute + 0.5)), s % minute
    end
    return floor(s + 0.5), s - floor(s)
end

local function Timer_Stop(self)
    self.enabled = nil
    self:Hide()
end

local function Timer_ForceUpdate(self)
    self.nextUpdate = 0
    self:Show()
end

local function Timer_OnSizeChanged(self, width, height)
    local fontScale = T.Round(width) / 40
    if fontScale == self.fontScale then
        return
    end

    self.fontScale = fontScale
    if fontScale < 0.5 then
        self:Hide()
    else
        self.text:SetFont(C.font.cooldown_timers_font, C.font.cooldown_timers_font_size, C.font.cooldown_timers_font_style)
        self.text:SetShadowOffset(C.font.cooldown_timers_font_shadow and 1 or 0, C.font.cooldown_timers_font_shadow and -1 or 0)
        if self.enabled then
            Timer_ForceUpdate(self)
        end
    end
end

local function Timer_OnUpdate(self, elapsed)
    if self.text:IsShown() then
        if self.nextUpdate > 0 then
            self.nextUpdate = self.nextUpdate - elapsed
        else
            if (self:GetEffectiveScale() / UIParent:GetEffectiveScale()) < 0.5 then
                self.text:SetText("")
                self.nextUpdate = 1
            else
                local remain = self.duration - (GetTime() - self.start)
                if floor(remain + 0.5) > 0 then
                    local time, nextUpdate = GetFormattedTime(remain)
                    self.text:SetText(time)
                    self.nextUpdate = nextUpdate
                    if floor(remain + 0.5) > 5 then
                        self.text:SetTextColor(1, 1, 1)
                    else
                        self.text:SetTextColor(1, 0.2, 0.2)
                    end
                else
                    Timer_Stop(self)
                end
            end
        end
    end
end

local function Timer_Create(self)
    local scaler = CreateFrame("Frame", nil, self)
    scaler:SetAllPoints(self)

    local timer = CreateFrame("Frame", nil, scaler)
    timer:Hide()
    timer:SetAllPoints(scaler)
    timer:SetScript("OnUpdate", Timer_OnUpdate)

    local text = timer:CreateFontString(nil, "OVERLAY")
    text:SetPoint("CENTER", 1, 0)
    text:SetJustifyH("CENTER")
    timer.text = text

    Timer_OnSizeChanged(timer, scaler:GetSize())
    scaler:SetScript("OnSizeChanged", function(self, ...) Timer_OnSizeChanged(timer, ...) end)

    self.timer = timer
    return timer
end

local function Timer_Start(self, start, duration)
    if self.noOCC then return end
    local button = self:GetParent()
    if not button then return; end

    if start > 0 and duration > 2 then
        local timer = self.timer or Timer_Create(self)
        timer.start = start
        timer.duration = duration
        timer.enabled = true
        timer.nextUpdate = 0
        if timer.fontScale >= 0.5 then timer:Show() end
    else
        local timer = self.timer
        if timer then
            Timer_Stop(timer)
        end
    end

    local action = button._state_action or button.action
    if self.timer then
        if action and type(action) == "number" then
            local charges = GetActionCharges(action)
            if charges > 0 then
                self.timer:SetAlpha(0)
                return
            end
        end
        self.timer:SetAlpha(1)
    end
end

hooksecurefunc(getmetatable(ActionButton1Cooldown).__index, "SetCooldown", Timer_Start)

local active = {}
local hooked = {}

local function cooldown_OnShow(self)
    active[self] = true
end

local function cooldown_OnHide(self)
    active[self] = nil
end

local function cooldown_ShouldUpdateTimer(self, start, duration)
    local timer = self.timer
    if not timer then
        return true
    end
    return timer.start ~= start
end

local function cooldown_Update(self)
    local button = self:GetParent()
    local start, duration = GetActionCooldown(button.action)
    local charges = GetActionCharges(button.action)

    if charges and charges > 0 then return end

    if cooldown_ShouldUpdateTimer(self, start, duration) then
        Timer_Start(self, start, duration)
    end
end

local EventWatcher = CreateFrame("Frame")
EventWatcher:Hide()
EventWatcher:SetScript("OnEvent", function(self, event)
    for cooldown in pairs(active) do
        cooldown_Update(cooldown)
    end
end)
EventWatcher:RegisterEvent("ACTIONBAR_UPDATE_COOLDOWN")

local function actionButton_Register(frame)
    local cooldown = frame.cooldown
    if not hooked[cooldown] then
        cooldown:HookScript("OnShow", cooldown_OnShow)
        cooldown:HookScript("OnHide", cooldown_OnHide)
        hooked[cooldown] = true
    end
end

if _G["ActionBarButtonEventsFrame"].frames then
    for i, frame in pairs(_G["ActionBarButtonEventsFrame"].frames) do
        actionButton_Register(frame)
    end
end

hooksecurefunc("ActionBarButtonEventsFrame_RegisterFrame", actionButton_Register)
Old 16.01.2013, 14:37   #10
m2jest1c
 Assistant User Information

m2jest1c's Avatar
Лок:
1) Рука Гул'дана (кд нет, 2 заряда) > остался 1 заряд, цифр нет > Рука Гул'дана (посл. заряд) > 0 зарядов, цифры есть
2) Рука Гул'дана (кд нет, 2 заряда) > демонформа > остался 1 заряд, цифр нет > выход из формы > Рука Гул'дана (посл. заряд) > 0 зарядов, цифры нет
3) Рука Гул'дана (кд нет, 2 заряда) > демонформа > остался 1 заряд, цифр нет > Волна Хаоса (посл. заряд) > 0 зарядов, цифры нет > выход из формы > 0 зарядов, цифры есть
4) Рука Гул'дана (кд нет, 2 заряда) > демонформа > остался 1 заряд, цифр нет > Волна Хаоса (посл. заряд) > 0 зарядов, цифры нет > откатился 1 заряд > Волна Хаоса (посл. заряд) > 0 зарядов, цифры есть
5) Демонформа > Волна Хаоса (кд нет, 2 заряда) > остался 1 заряд, цифр нет > Волна Хаоса (посл. заряд) > 0 зарядов, цифры есть

Паладин:
Тут вроде всё хорошо, но со 100% уверенностью утверждать не стану.

Добавлено через 6 минут
Обновил п. 3 и добавил п. 4.

Добавлено через 2 минуты
И п. 5.

Tags
перезарядка

Thread Tools


Similar Threads
Thread Thread Starter Forum Replies Last Post
Отображение глобальных кулдаунов рейда ALFer Technical Support 44 15.09.2012 21:18
[Fixed] Пропало отображение ГКД ajoas Bugs Reports 2 08.09.2012 15:50
Отображение дебафов/дотов на неймплейтах yoxoxo Technical Support 4 18.08.2011 15:12
[Fixed] Вылетают не понятные абилки Teac Bugs Reports 1 22.09.2010 00:14
Отображение петов в рейде Obakol Technical Support 3 05.07.2010 17:16


Mobile Style Русский English Deutsch Italian Chinese