vanilla-wow-addons – Rev 1
?pathlinks?
assert( oRA, "oRA not found!")
------------------------------
-- Are you local? --
------------------------------
local L = AceLibrary("AceLocale-2.2"):new("oRAPMainTank")
----------------------------
-- Localization --
----------------------------
L:RegisterTranslations("enUS", function() return {
["maintank"] = true,
["MainTank"] = true,
["mt"] = true,
["Options for the maintanks."] = true,
["refresh"] = true,
["The local maintank list has been refreshed."] = true,
["Refresh Maintanks"] = true,
["Refresh the local maintank list."] = true,
["Participant/MainTank"] = true,
["notifydeath"] = true,
["Notify deaths"] = true,
["Notifies you when a main tank dies."] = true,
["Tank %s has died!"] = true,
maintankdies = "^([^%s]+) dies%.$",
} end )
L:RegisterTranslations("koKR", function() return {
["MainTank"] = "메인탱커",
["Options for the maintanks."] = "메인탱커 설정",
["The local maintank list has been refreshed."] = "로컬 메인탱커 목록이 갱신되었습니다.",
["Refresh Maintanks"] = "메인탱커 갱신",
["Refresh the local maintank list."] = "로컬 메인탱커 목록을 갱신합니다.",
["Participant/MainTank"] = "부분/메인탱커",
["Notify deaths"] = "사망 알림",
["Notifies you when a main tank dies."] = "메인탱커가 사망시 이를 알려줍니다.",
["Tank %s has died!"] = "메인탱커 %s|1이;가; 죽었습니다!",
maintankdies = "^([^%s]+)|1이;가; 죽었습니다%.$",
} end )
L:RegisterTranslations("zhCN", function() return {
["maintank"] = "MT目标",
["MainTank"] = "MT目标",
["mt"] = "MT目标",
["Options for the maintanks."] = "MT选项",
["refresh"] = "刷新",
["The local maintank list has been refreshed."] = "本地MT已刷新",
["Refresh Maintanks"] = "刷新MT",
["Refresh the local maintank list."] = "刷新本地MT名单",
["Participant/MainTank"] = "Participant/MainTank",
["notifydeath"] = "死亡通知",
["Notify deaths"] = "死亡通知",
["Notifies you when a main tank dies."] = "当MT死亡是通知你",
["Tank %s has died!"] = "MT %s 已死亡!",
maintankdies = "^(.+)死亡了.",
} end )
L:RegisterTranslations("zhTW", function() return {
["maintank"] = "主坦",
["MainTank"] = "主坦",
["mt"] = "主坦",
["Options for the maintanks."] = "主坦選項",
["refresh"] = "更新",
["The local maintank list has been refreshed."] = "個人主坦名單已更新",
["Refresh Maintanks"] = "更新主坦",
["Refresh the local maintank list."] = "更新個人主坦名單",
["Participant/MainTank"] = "隊員/主坦",
["notifydeath"] = "死亡通知",
["Notify deaths"] = "死亡通知",
["Notifies you when a main tank dies."] = "當主坦死亡時通知你",
["Tank %s has died!"] = "主坦 %s 已死亡!",
maintankdies = "^(.+)死亡了.",
} end )
L:RegisterTranslations("frFR", function() return {
--["maintank"] = true,
--["MainTank"] = true,
--["mt"] = true,
["Options for the maintanks."] = "Options concernant les maintanks.",
--["refresh"] = true,
["The local maintank list has been refreshed."] = "La liste locale des maintanks a \195\169t\195\169 rafra\195\174chie.",
["Refresh Maintanks"] = "Rafra\195\174chir les maintanks",
["Refresh the local maintank list."] = "Rafra\195\174chit la liste locale des maintanks.",
["Participant/MainTank"] = "Participant/MainTank",
--["notifydeath"] = true,
["Notify deaths"] = "Annoncer les morts",
["Notifies you when a main tank dies."] = "Pr\195\169viens quand un maintank meurt.",
["Tank %s has died!"] = "Le tank %s est mort !",
maintankdies = "^([^%s]+) meurt%.$",
} end )
L:RegisterTranslations("deDE", function() return {
["Tank %s has died!"] = "Tank %s ist gestorben!",
maintankdies = "^([^%s]+) stirbt%.$",
} end )
----------------------------------
-- Module Declaration --
----------------------------------
oRAPMainTank = oRA:NewModule(L["maintank"])
oRAPMainTank.defaults = {
notifydeath = false,
}
oRAPMainTank.participant = true
oRAPMainTank.name = L["Participant/MainTank"]
oRAPMainTank.consoleCmd = L["mt"]
oRAPMainTank.consoleOptions = {
type = "group",
desc = L["Options for the maintanks."],
name = L["MainTank"],
args = {
[L["refresh"]] = {
name = L["Refresh Maintanks"], type = "execute",
desc = L["Refresh the local maintank list."],
func = function()
oRAPMainTank:Refresh()
end,
disabled = function() return not oRA:IsModuleActive(oRAPMainTank) end,
},
[L["notifydeath"]] = {
name = L["Notify deaths"], type = "toggle",
desc = L["Notifies you when a main tank dies."],
get = function() return oRAPMainTank.db.profile.notifydeath end,
set = function(v) oRAPMainTank.db.profile.notifydeath = v end,
},
}
}
------------------------------
-- Initialization --
------------------------------
function oRAPMainTank:OnRegister()
if not self.core.maintanktable then
self.core.maintanktable = self.core.db.profile.maintanktable or {}
end
end
function oRAPMainTank:OnEnable()
self:RegisterEvent("CHAT_MSG_COMBAT_FRIENDLY_DEATH")
self:RegisterEvent("oRA_LeftRaid")
self:RegisterCheck("SET", "oRA_SetMainTank")
self:RegisterCheck("R", "oRA_RemoveMainTank")
end
function oRAPMainTank:OnDisable()
self:UnregisterAllEvents()
self:UnregisterCheck("SET")
self:UnregisterCheck("R")
end
-------------------------------
-- Event Handlers --
-------------------------------
function oRAPMainTank:CHAT_MSG_COMBAT_FRIENDLY_DEATH(msg)
if not self.db.profile.notifydeath then return end
local _, _, tank = string.find(msg, L["maintankdies"])
if not tank then return end
for k, name in pairs(self.core.maintanktable) do
if name == tank then
-- I'm pretty sure this is the same sound that CTRA uses, someone
-- should confirm.
if BigWigs then
self:TriggerEvent("BigWigs_Message", string.format(L["Tank %s has died!"], name), "Red", true, false)
elseif RaidWarningFrame then
RaidWarningFrame:AddMessage(string.format(L["Tank %s has died!"], name), 1.0, 0, 0, 1.0, UIERRORS_HOLD_TIME)
end
PlaySound("igQuestFailed")
end
end
end
function oRAPMainTank:oRA_SetMainTank(msg, author)
if not self:IsValidRequest( author, true ) then return end
msg = self:CleanMessage(msg)
local _, _, num, name = string.find(msg, "^SET (%d+) (.+)$")
if not num or not name then return end
self:RemoveTank(name)
self.core.maintanktable[tonumber(num)] = name
self.core.db.profile.maintanktable = self.core.maintanktable
self:TriggerEvent("oRA_MainTankUpdate", self.core.maintanktable)
end
function oRAPMainTank:oRA_RemoveMainTank(msg, author)
if not self:IsValidRequest( author, true ) then return end
msg = self:CleanMessage(msg)
local _, _, name = string.find( msg, "^R (.+)$")
if not name then return end
self:RemoveTank(name)
self:TriggerEvent("oRA_MainTankUpdate", self.core.maintanktable)
end
function oRAPMainTank:oRA_LeftRaid()
self.core.maintanktable = {}
self.core.db.profile.maintanktable = nil
self:TriggerEvent("oRA_MainTankUpdate", self.core.maintanktable )
end
-------------------------------
-- Utility Functions --
-------------------------------
function oRAPMainTank:RemoveTank(name)
if not name then return end
for n, t in pairs(self.core.maintanktable) do
if t == name then
self.core.maintanktable[n] = nil
end
end
self.core.db.profile.maintanktable = self.core.maintanktable
end
-------------------------------
-- Command Handlers --
-------------------------------
function oRAPMainTank:Refresh()
self:TriggerEvent("oRA_MainTankUpdate", self.core.maintanktable)
self:Print(L["The local maintank list has been refreshed."])
end