196 lines
5.6 KiB
Lua
196 lines
5.6 KiB
Lua
--[[
|
|
Copyright (C) 2006-2007 Nymbia
|
|
Copyright (C) 2010 Hendrik "Nevcairiel" Leppkes < h.leppkes@gmail.com >
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
]]
|
|
local Quartz3 = LibStub("AceAddon-3.0"):GetAddon("Quartz3")
|
|
local L = LibStub("AceLocale-3.0"):GetLocale("Quartz3")
|
|
|
|
local MODNAME = "Tradeskill"
|
|
local Tradeskill = Quartz3:NewModule(MODNAME, "AceEvent-3.0", "AceHook-3.0")
|
|
local Player = Quartz3:GetModule("Player")
|
|
|
|
local TimeFmt = Quartz3.Util.TimeFormat
|
|
|
|
----------------------------
|
|
-- Upvalues
|
|
local GetTime, UnitCastingInfo = GetTime, UnitCastingInfo
|
|
local unpack, tonumber, format = unpack, tonumber, format
|
|
|
|
local getOptions
|
|
|
|
local castBar, castBarText, castBarTimeText, castBarIcon, castBarSpark, castBarParent
|
|
|
|
local repeattimes, castname, duration, totaltime, starttime, casting, bail
|
|
local completedcasts = 0
|
|
local restartdelay = 1
|
|
|
|
local function tradeskillOnUpdate()
|
|
local currentTime = GetTime()
|
|
if casting then
|
|
local elapsed = duration * completedcasts + currentTime - starttime
|
|
castBar:SetValue(elapsed)
|
|
|
|
local perc = (currentTime - starttime) / duration
|
|
castBarSpark:ClearAllPoints()
|
|
castBarSpark:SetPoint("CENTER", castBar, "LEFT", perc * Player.db.profile.w, 0)
|
|
|
|
if Player.db.profile.hidecasttime then
|
|
castBarTimeText:SetFormattedText(TimeFmt(totaltime - elapsed))
|
|
else
|
|
castBarTimeText:SetFormattedText("%s / %s", format(TimeFmt(totaltime - elapsed)), format(TimeFmt(totaltime)))
|
|
end
|
|
else
|
|
if (starttime + duration + restartdelay < currentTime) or (completedcasts >= repeattimes) or bail or completedcasts == 0 then
|
|
Player.Bar.fadeOut = true
|
|
Player.Bar.stopTime = currentTime
|
|
castBar:SetValue(duration * repeattimes)
|
|
castBarTimeText:SetText("")
|
|
castBarSpark:Hide()
|
|
castBarParent:SetScript("OnUpdate", Player.Bar.OnUpdate)
|
|
castBar:SetMinMaxValues(0, 1)
|
|
else
|
|
local elapsed = duration * completedcasts
|
|
castBar:SetValue(elapsed)
|
|
|
|
castBarSpark:ClearAllPoints()
|
|
castBarSpark:SetPoint("CENTER", castBar, "LEFT", Player.db.profile.w, 0)
|
|
|
|
if Player.db.profile.hidecasttime then
|
|
castBarTimeText:SetFormattedText(TimeFmt(totaltime - elapsed))
|
|
else
|
|
castBarTimeText:SetFormattedText("%s / %s", format(TimeFmt(totaltime - elapsed)), format(TimeFmt(totaltime)))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function Tradeskill:OnInitialize()
|
|
self:SetEnabledState(Quartz3:GetModuleEnabled(MODNAME))
|
|
Quartz3:RegisterModuleOptions(MODNAME, getOptions, L["Tradeskill Merge"])
|
|
end
|
|
|
|
|
|
function Tradeskill:OnEnable()
|
|
self:RawHook(Player, "UNIT_SPELLCAST_START")
|
|
self:RegisterEvent("UNIT_SPELLCAST_STOP")
|
|
self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
|
|
self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED")
|
|
self:Hook("DoTradeSkill", true)
|
|
end
|
|
|
|
function Tradeskill:UNIT_SPELLCAST_START(object, event, unit)
|
|
if unit ~= "player" then
|
|
return self.hooks[object].UNIT_SPELLCAST_START(object, event, unit)
|
|
end
|
|
local spell, _, displayName, icon, startTime, endTime, isTradeskill = UnitCastingInfo(unit)
|
|
if isTradeskill then
|
|
repeattimes = repeattimes or 1
|
|
duration = (endTime - startTime) / 1000
|
|
totaltime = duration * (repeattimes or 1)
|
|
starttime = GetTime()
|
|
casting = true
|
|
Player.Bar.fadeOut = nil
|
|
castname = spell
|
|
bail = nil
|
|
Player.Bar.endTime = nil
|
|
|
|
castBar:SetStatusBarColor(unpack(Quartz3.db.profile.castingcolor))
|
|
castBar:SetMinMaxValues(0, totaltime)
|
|
|
|
castBar:SetValue(0)
|
|
castBarParent:Show()
|
|
castBarParent:SetScript("OnUpdate", tradeskillOnUpdate)
|
|
castBarParent:SetAlpha(Player.db.profile.alpha)
|
|
|
|
local numleft = repeattimes - completedcasts
|
|
if numleft <= 1 then
|
|
castBarText:SetText(displayName)
|
|
else
|
|
castBarText:SetFormattedText("%s (%s)", displayName, numleft)
|
|
end
|
|
castBarSpark:Show()
|
|
castBarIcon:SetTexture(icon)
|
|
else
|
|
castBar:SetMinMaxValues(0, 1)
|
|
return self.hooks[object].UNIT_SPELLCAST_START(object, event, unit)
|
|
end
|
|
end
|
|
|
|
function Tradeskill:UNIT_SPELLCAST_STOP(event, unit)
|
|
if unit ~= "player" then
|
|
return
|
|
end
|
|
casting = false
|
|
end
|
|
|
|
function Tradeskill:UNIT_SPELLCAST_SUCCEEDED(event, unit, spell)
|
|
if unit ~= "player" then
|
|
return
|
|
end
|
|
if castname == spell then
|
|
completedcasts = completedcasts + 1
|
|
end
|
|
end
|
|
|
|
function Tradeskill:UNIT_SPELLCAST_INTERRUPTED(event, unit)
|
|
if unit ~= "player" then
|
|
return
|
|
end
|
|
bail = true
|
|
end
|
|
|
|
function Tradeskill:DoTradeSkill(index, num)
|
|
completedcasts = 0
|
|
repeattimes = tonumber(num) or 1
|
|
end
|
|
|
|
function Tradeskill:ApplySettings()
|
|
castBarParent = Player.Bar
|
|
castBar = Player.Bar.Bar
|
|
castBarText = Player.Bar.Text
|
|
castBarTimeText = Player.Bar.TimeText
|
|
castBarIcon = Player.Bar.Icon
|
|
castBarSpark = Player.Bar.Spark
|
|
end
|
|
|
|
do
|
|
local options
|
|
function getOptions()
|
|
if not options then
|
|
options = {
|
|
type = "group",
|
|
name = L["Tradeskill Merge"],
|
|
order = 600,
|
|
args = {
|
|
toggle = {
|
|
type = "toggle",
|
|
name = L["Enable"],
|
|
desc = L["Enable"],
|
|
get = function()
|
|
return Quartz3:GetModuleEnabled(MODNAME)
|
|
end,
|
|
set = function(info, v)
|
|
Quartz3:SetModuleEnabled(MODNAME, v)
|
|
end,
|
|
},
|
|
},
|
|
}
|
|
end
|
|
return options
|
|
end
|
|
end
|