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 16.01.2013, 14:42   #11
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 == 0 and 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)

П.С.: Я так давно не играл локом, что вообще не понимаю, что написано

Добавлено через 4 минуты
И вот это еще проверьте пожалуйста.
Old 16.01.2013, 14:42   #1.5 - Disable Ads

Advertise on this site

Old 16.01.2013, 15:08   #12
m2jest1c
 Assistant User Information

m2jest1c's Avatar
Quote:
Originally Posted by Shestak View Post
А вот так:
Ничего не изменилось.
Quote:
Originally Posted by Shestak View Post
И вот это еще проверьте пожалуйста.
One moment.

Добавлено через 24 минуты
Quote:
Originally Posted by Shestak View Post
И вот это еще проверьте пожалуйста.
Или я что-то делаю не так, или... С этим аддоном реакции (цифр) нет совсем.

Как устанавливал? Zip и всё содержимое в папку tullaCC.
Old 16.01.2013, 15:21   #13
Shestak
 Junior Member User Information

Shestak's Avatar
Quote:
Originally Posted by m2jest1c View Post
Как устанавливал? Zip и всё содержимое в папку tullaCC.
Хм, на панелях действительно нет таймера. Есть только на икноках филгера(от tullaCC).

Добавлено через 1 минуту
В config.lua сделай так:
C.minScale = 0.4
Old 16.01.2013, 15:36   #14
m2jest1c
 Assistant User Information

m2jest1c's Avatar
Quote:
Originally Posted by Shestak View Post
В config.lua сделай так:
C.minScale = 0.4
Работает. Всё правильно работает.

Добавлено через 2 минуты
Offtop
Old 16.01.2013, 15:49   #15
Shestak
 Junior Member User Information

Shestak's Avatar
Так, значит можно обновлять сабж на tullaCC, я так понял?

Offtop
Old 16.01.2013, 15:56   #16
m2jest1c
 Assistant User Information

m2jest1c's Avatar
Quote:
Originally Posted by Shestak View Post
Так, значит можно обновлять сабж на tullaCC, я так понял?
Ну да, сейчас Королей в ПМШ в демоне убивал, все ок.

Offtop
Old 16.01.2013, 17:20   #17
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, charges, maxCharges)
    local remainingCharges = charges or 0

    if start > 0 and duration > 2 and remainingCharges == 0 and (not self.noOCC) 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
end

hooksecurefunc(getmetatable(_G["ActionButton1Cooldown"]).__index, "SetCooldown", Timer_Start)

if not _G["ActionBarButtonEventsFrame"] then return end

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, charges, maxCharges)
    local timer = self.timer
    if not timer then
        return true
    end
    return not(timer.start == start or timer.charges == charges or timer.maxCharges == maxCharges)
end

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

    if cooldown_ShouldUpdateTimer(self, start, duration, charges, maxCharges) then
        Timer_Start(self, start, duration, charges, maxCharges)
    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)

Добавлено через 5 минут
В общем ласт вариант на пале работает так, как и хотел Wetxius. Осталось на локе проверить.
Say Thank:
m2jest1c (16.01.2013)
Old 16.01.2013, 17:23   #18
m2jest1c
 Assistant User Information

m2jest1c's Avatar
Quote:
Originally Posted by Shestak View Post
Давай еще тестанем на локе?
Потестил, на первый взгляд всё супер, если что замечу - отпишу
Say Thank:
Shestak (16.01.2013)
Old 16.01.2013, 17:47   #19
Shestak
 Junior Member User Information

Shestak's Avatar
Quote:
Originally Posted by m2jest1c View Post
Потестил, на первый взгляд всё супер, если что замечу - отпишу
В общем пока на гите тогда https://github.com/Shestak/ShestakUI...65b019e5079184
Say Thank:
Wetxius (16.01.2013)

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