vanilla-wow-addons – Rev 1
?pathlinks?
assert( oRA, "oRA not found!")
------------------------------
-- Are you local? --
------------------------------
local L = AceLibrary("AceLocale-2.2"):new("oRAOResurrection")
----------------------------
-- Localization --
----------------------------
L:RegisterTranslations("enUS", function() return {
["Resurrection Monitor"] = true,
["resurrection"] = true,
["resurrectionoptional"] = true,
["Optional/Resurrection"] = true,
["Options for resurrection."] = true,
["Toggle"] = true,
["toggle"] = true,
["Toggle the Resurrection Monitor."] = true,
} end )
L:RegisterTranslations("koKR", function() return {
["Resurrection Monitor"] = "부활상태 모니터",
["Optional/Resurrection"] = "부가/부활",
["Options for resurrection."] = "부활 모니터링 설정",
["Toggle"] = "토글",
["Toggle the Resurrection Monitor."] = "부활 상태 모니터를 토글합니다.",
} end )
L:RegisterTranslations("zhCN", function() return {
["Resurrection Monitor"] = "复活监视器",
["resurrection"] = "复活",
["resurrectionoptional"] = "resurrectionoptional",
["Optional/Resurrection"] = "Optional/Resurrection",
["Options for resurrection."] = "复活选项",
["Toggle"] = "激活",
["toggle"] = "激活",
["Toggle the Resurrection Monitor."] = "激活复活监视器",
} end )
L:RegisterTranslations("zhTW", function() return {
["Resurrection Monitor"] = "復活監視器",
["resurrection"] = "復活",
["resurrectionoptional"] = "resurrectionoptional",
["Optional/Resurrection"] = "可選/復活",
["Options for resurrection."] = "復活選項",
["Toggle"] = "顯示",
["toggle"] = "顯示",
["Toggle the Resurrection Monitor."] = "顯示復活監視器",
} end )
L:RegisterTranslations("frFR", function() return {
["Resurrection Monitor"] = "Surveillance des r\195\169surrections",
--["resurrection"] = true,
--["resurrectionoptional"] = true,
["Optional/Resurrection"] = "Optionnel/R\195\169surrection",
["Options for resurrection."] = "Options concernant les r\195\169surrections.",
["Toggle"] = "Afficher",
--["toggle"] = true,
["Toggle the Resurrection Monitor."] = "Affiche ou non la surveillance des r\195\169surrections.",
} end )
----------------------------------
-- Module Declaration --
----------------------------------
oRAOResurrection = oRA:NewModule(L["resurrectionoptional"])
oRAOResurrection.defaults = {
hidden = true,
}
oRAOResurrection.optional = true
oRAOResurrection.name = L["Optional/Resurrection"]
oRAOResurrection.consoleCmd = L["resurrection"]
oRAOResurrection.consoleOptions = {
type = "group",
desc = L["Options for resurrection."],
name = L["Resurrection Monitor"],
args = {
[L["toggle"]] = {
type = "toggle", name = L["Toggle"],
desc = L["Toggle the Resurrection Monitor."],
get = function() return not oRAOResurrection.db.profile.hidden end,
set = function(v)
oRAOResurrection:ToggleView()
end,
}
}
}
------------------------------
-- Initialization --
------------------------------
function oRAOResurrection:OnEnable()
self.ressers = {}
self.enabled = nil
self:RegisterEvent("oRA_LeftRaid")
self:RegisterEvent("oRA_JoinedRaid")
end
function oRAOResurrection:OnDisable()
self:UnregisterAllEvents()
self:DisableMonitor()
end
------------------------
-- Event Handlers --
------------------------
function oRAOResurrection:oRA_JoinedRaid()
if not self.enabled then
self.enabled = true
self.ressers = {}
if not self.db.profile.hidden then
self:SetupFrames()
self.resframe:Show()
self:UpdateFrame()
end
self:RegisterCheck("RES", "oRA_ResurrectionStart")
self:RegisterCheck("RESNO", "oRA_ResurrectionStop")
self:RegisterCheck("CANRES", "oRA_PlayerCanResurrect")
self:RegisterCheck("RESSED", "oRA_PlayerResurrected")
self:RegisterCheck("NORESSED", "oRA_PlayerNotResurrected")
self:RegisterEvent("RosterLib_RosterChanged", function() self:ScheduleEvent("oRACheckMonitor", self.CheckMonitor, 2, self) end )
end
end
function oRAOResurrection:oRA_LeftRaid()
self:DisableMonitor()
end
function oRAOResurrection:CheckMonitor()
local u,v
local update = false
for key, val in pairs(self.ressers) do
u = self.core.roster:GetUnitObjectFromName(key)
v = self.core.roster:GetUnitObjectFromName(val)
if not u or not v then
self.ressers[key] = nil
update = true
end
end
if update and self.enabled and not self.db.profile.hidden then self:UpdateFrame() end
end
function oRAOResurrection:oRA_ResurrectionStart(msg, author)
msg = self:CleanMessage(msg)
local _,_,player = string.find(msg, "^RES (.+)$")
if player and author then
if not self.ressers then self.ressers = {} end
self.ressers[author] = player
self:UpdateFrame()
end
end
function oRAOResurrection:oRA_ResurrectionStop(msg, author)
msg = self:CleanMessage(msg)
if not self.ressers then self.ressers = {} end
if author and self.ressers[author] then
self.ressers[author] = nil
self:UpdateFrame()
end
end
function oRAOResurrection:oRA_PlayerCanResurrect( msg, author)
-- we do nothing with these atm.
end
function oRAOResurrection:oRA_PlayerResurrected( msg, author)
-- we do nothing with these atm.
end
function oRAOResurrection:oRA_PlayerNotResurrected( msg, author)
-- we do nothing with these atm.
end
-------------------------
-- Utility Functions --
-------------------------
function oRAOResurrection:DisableMonitor()
self.enabled = nil
if self.resframe and self.resframe:IsVisible() then self.resframe:Hide() end
if self:IsEventRegistered("RosterLib_RosterChanged") then self:UnregisterEvent("RosterLib_RosterChanged") end
self:UnregisterCheck("RES")
self:UnregisterCheck("RESNO")
self:UnregisterCheck("CANRES")
self:UnregisterCheck("RESSED")
self:UnregisterCheck("NORESSED")
end
function oRAOResurrection:SavePosition()
local f = self.resframe
local x,y = f:GetLeft(), f:GetTop()
local s = f:GetEffectiveScale()
x,y = x*s,y*s
self.db.profile.posx = x
self.db.profile.posy = y
end
function oRAOResurrection:RestorePosition()
local x = self.db.profile.posx
local y = self.db.profile.posy
if not x or not y then return end
local f = self.resframe
local s = f:GetEffectiveScale()
x,y = x/s,y/s
f:ClearAllPoints()
f:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", x, y)
end
function oRAOResurrection:SetupFrames()
if not self.resframe then
local resframe = CreateFrame("Frame", "oRAResurrectionFrame", UIParent)
resframe:EnableMouse(true)
resframe:SetMovable(true)
resframe:RegisterForDrag("LeftButton")
resframe:SetScript("OnDragStart", function() if IsAltKeyDown() then self["resframe"]:StartMoving() end end)
resframe:SetScript("OnDragStop", function() self["resframe"]:StopMovingOrSizing() self:SavePosition() end)
resframe:SetWidth(175)
resframe:SetHeight(50)
--resframe:SetBackdrop({
-- bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", tile = true, tileSize = 16,
-- edgeFile = "Interface\Tooltips\UI-Tooltip-Border", edgeSize = 16,
-- insets = {left = 0, right = 0, top = 0, bottom = 0},
--})
--resframe:SetBackdropColor(0,0,0,0.5)
--resframe:SetBackdropBorderColor(1,1,1,.5)
resframe:Hide()
resframe:SetPoint("CENTER", UIParent, "CENTER", 0, 0)
local title = resframe:CreateFontString(nil, "ARTWORK")
title:SetFontObject(GameFontNormalSmall)
title:SetText(L["Resurrection Monitor"])
title:SetJustifyH("CENTER")
title:SetWidth(160)
title:SetHeight(12)
title:Show()
title:ClearAllPoints()
title:SetPoint("TOP", resframe, "TOP", 0, -5)
local text = resframe:CreateFontString(nil, "ARTWORK")
text:SetFontObject(GameFontHighlightSmall)
text:SetJustifyH("CENTER")
text:SetJustifyV("TOP")
text:SetWidth(160)
--text:SetHeight(25)
text:Show()
text:ClearAllPoints()
text:SetPoint("TOPLEFT", title, "BOTTOMLEFT", 0, -5)
self.resframe = resframe
self.title = title
self.text = text
self:RestorePosition()
end
end
function oRAOResurrection:UpdateFrame()
if self.resframe and self.resframe:IsVisible() then
local text = ""
for key, val in pairs(self.ressers) do
if ( strlen(text) > 0 ) then
text = text.."\n"
end
text = string.format("%s %s: %s",text, key, val)
end
self.text:SetText(text)
self.resframe:SetWidth(max(self.text:GetWidth()+15, 175))
self.resframe:SetHeight(max(self.text:GetHeight()+25, 50))
end
end
-------------------------
-- Command Handlers --
-------------------------
function oRAOResurrection:ToggleView()
self.db.profile.hidden = not self.db.profile.hidden
if self.resframe and self.resframe:IsVisible() then
self.resframe:Hide()
end
if self.enabled and not self.db.profile.hidden then
if not self.resframe then self:SetupFrames() end
self.resframe:Show()
end
end