vanilla-wow-addons – Rev 1
?pathlinks?
assert( oRA, "oRA not found!")
------------------------------
-- Are you local? --
------------------------------
local L = AceLibrary("AceLocale-2.2"):new("oRAPResurrection")
local BS = AceLibrary("Babble-Spell-2.2")
local G = AceLibrary("Gratuity-2.0")
local spells = {
[BS["Rebirth"]] = true,
[BS["Resurrection"]] = true,
[BS["Redemption"]] = true,
[BS["Ancestral Spirit"]] = true,
[BS["Reincarnation"]] = true,
}
----------------------------
-- Localization --
----------------------------
L:RegisterTranslations("enUS", function() return {
["resurrection"] = true,
["resurrectionparticipant"] = true,
["Participant/Resurrection"] = true,
["Options for resurrection."] = true,
["Toggle"] = true,
["toggle"] = true,
["^Corpse of (.+)$"] = true,
} end )
L:RegisterTranslations("koKR", function() return {
["Participant/Resurrection"] = "부분/부활",
["Options for resurrection."] = "부활 설정",
["Toggle"] = "토글",
["^Corpse of (.+)$"] = "^([^%s]+)의 시체",
} end )
L:RegisterTranslations("zhCN", function() return {
["resurrection"] = "复活术",
["resurrectionparticipant"] = "resurrectionparticipant",
["Participant/Resurrection"] = "Participant/Resurrection",
["Options for resurrection."] = "复活的选项",
["Toggle"] = "显示",
["toggle"] = "显示",
["^Corpse of (.+)$"] = "^([^%s]+)的尸体",
} end )
L:RegisterTranslations("zhTW", function() return {
["resurrection"] = "復活",
["resurrectionparticipant"] = "resurrectionparticipant",
["Participant/Resurrection"] = "隊員/復活",
["Options for resurrection."] = "復活選項",
["Toggle"] = "顯示",
["toggle"] = "顯示",
["^Corpse of (.+)$"] = "^(.+)的屍體",
} end )
L:RegisterTranslations("frFR", function() return {
--["resurrection"] = true,
--["resurrectionparticipant"] = true,
["Participant/Resurrection"] = "Participant/R\195\169surrection",
["Options for resurrection."] = "Options concernant les r\195\169surrections",
["Toggle"] = "Afficher",
--["toggle"] = true,
["^Corpse of (.+)$"] = "^Cadavre de (.+)$",
} end )
----------------------------------
-- Module Declaration --
----------------------------------
oRAPResurrection = oRA:NewModule(L["resurrectionparticipant"], "AceHook-2.1")
oRAPResurrection.defaults = {
}
oRAPResurrection.participant = true
oRAPResurrection.name = L["Participant/Resurrection"]
-- oRAPResurrection.consoleCmd = L["resurrection"]
-- oRAPResurrection.consoleOptions = {
-- type = "group",
-- desc = L["Options for resurrection."],
-- args = {
-- }
-- }
------------------------------
-- Initialization --
------------------------------
function oRAPResurrection:OnEnable()
self.spell = nil
self.target = nil
self.enabled = nil
self:HookAndRegister()
end
function oRAPResurrection:OnDisable()
self:UnregisterAllEvents()
self:UnhookAll()
end
function oRAPResurrection:HookAndRegister()
self:RegisterEvent("oRA_JoinedRaid")
self:RegisterEvent("oRA_LeftRaid")
end
------------------------
-- Event Handlers --
------------------------
function oRAPResurrection:oRA_JoinedRaid()
if not self.enabled then
self.enabled = true
local _, c = UnitClass("player")
if c == "DRUID" or c == "PRIEST" or c == "SHAMAN" or c == "PALADIN" then
self:RegisterEvent("SPELLCAST_START")
self:RegisterEvent("SPELLCAST_INTERRUPTED", "SpellFailed")
self:RegisterEvent("SPELLCAST_FAILED", "SpellFailed")
self:RegisterEvent("SPELLCAST_STOP", "SpellFailed")
self:Hook("CastSpell", true)
self:Hook("CastSpellByName", true)
self:Hook("UseAction", true)
self:Hook("SpellTargetUnit", true)
self:Hook("SpellStopTargeting", true)
self:Hook("TargetUnit", true)
self:HookScript(WorldFrame, "OnMouseDown", "WorldFrameOnMouseDown")
end
self:Hook(StaticPopupDialogs["DEATH"], "OnShow", function()
self.hooks[StaticPopupDialogs["DEATH"]].OnShow()
if HasSoulstone() then self:SendMessage("CANRES") end end, true )
self:Hook(StaticPopupDialogs["RESURRECT"], "OnShow", function()
self.hooks[StaticPopupDialogs["RESURRECT"]].OnShow()
self:SendMessage("RESSED") end, true )
self:Hook(StaticPopupDialogs["RESURRECT_NO_SICKNESS"], "OnShow", function()
self.hooks[StaticPopupDialogs["RESURRECT_NO_SICKNESS"]].OnShow()
self:SendMessage("RESSED") end, true )
self:Hook(StaticPopupDialogs["RESURRECT_NO_TIMER"], "OnShow", function()
self.hooks[StaticPopupDialogs["RESURRECT_NO_TIMER"]].OnShow()
self:SendMessage("RESSED") end, true )
-- hrmf we can't hook the OnHide's normally, since they are not there. But
-- blizzard will fire the OnHide if it finds it.
-- so some more magic to get this working. And be friendly if someone else created
-- an OnHide already.
if not StaticPopupDialogs["RESURRECT"].OnHide then
StaticPopupDialogs["RESURRECT"].OnHide = function() self:SendMessage("NORESSED") end
else
self:Hook(StaticPopupDialogs["RESURRECT"], "OnHide", function()
self.hooks[StaticPopupDialogs["RESURRECT"]].OnHide()
self:SendMessage("NORESSED") end, true )
end
if not StaticPopupDialogs["RESURRECT_NO_SICKNESS"].OnHide then
StaticPopupDialogs["RESURRECT_NO_SICKNESS"].OnHide = function() self:SendMessage("NORESSED") end
else
self:Hook(StaticPopupDialogs["RESURRECT_NO_SICKNESS"], "OnHide", function()
self.hooks[StaticPopupDialogs["RESURRECT_NO_SICKNESS"]].OnHide()
self:SendMessage("NORESSED") end, true )
end
if not StaticPopupDialogs["RESURRECT_NO_TIMER"].OnHide then
StaticPopupDialogs["RESURRECT_NO_TIMER"].OnHide = function()
if not StaticPopup_FindVisible("DEATH") then self:SendMessage("NORESSED") end
end
else
self:Hook(StaticPopupDialogs["RESURRECT_NO_TIMER"], "OnHide", function()
self.hooks[StaticPopupDialogs["RESURRECT_NO_TIMER"]].OnHide()
if not StaticPopup_FindVisible("DEATH") then self:SendMessage("NORESSED") end end, true )
end
end
end
function oRAPResurrection:oRA_LeftRaid()
self:DisableSpellHooking()
end
function oRAPResurrection:SPELLCAST_START(spell)
if spells[spell] and self.spell == spell and self.target then
self:SendMessage("RES " .. self.target )
end
end
function oRAPResurrection:SpellFailed()
if self.spell and self.target and spells[self.spell] then
self:SendMessage("RESNO")
self.spell = nil
self.target = nil
end
end
--------------
-- Disabler --
--------------
function oRAPResurrection:DisableSpellHooking()
self:UnhookAll()
self:UnregisterAllEvents()
-- register our old stuff again
self:HookAndRegister()
end
-------------
-- HOOKS --
-------------
function oRAPResurrection:CastSpell(id, tab)
self.hooks["CastSpell"](id, tab)
G:Erase()
G:SetSpell(id, tab)
local spellname = G:GetLine(1)
if spellname then
if SpellIsTargeting() then
self.spell = spellname
elseif UnitExists("target") then
self.spell = spellname
self.target = UnitName("target")
end
end
end
function oRAPResurrection:CastSpellByName( a1, a2)
self.hooks["CastSpellByName"](a1,a2)
local _,_,spell = string.find(a1, "^([^%(]+)")
if spell then
if SpellIsTargeting() then
self.spell = spell
elseif UnitExists("target") then
self.spell = spell
self.target = UnitName("target")
end
end
end
function oRAPResurrection:UseAction( a1, a2, a3)
self.hooks["UseAction"](a1, a2, a3)
G:Erase()
G:SetAction(a1)
local spellname = G:GetLine(1)
self.spell = spellname
-- Test to see if this is a macro
if GetActionText(a1) or not self.spell then
return
end
if SpellIsTargeting() then
-- Spell is waiting for a target
return
elseif a3 then
-- Spell is being cast on the player
self.target = UnitName("player")
elseif UnitExists("target") then
-- Spell is being cast on the current target
self.target = UnitName("target")
end
end
function oRAPResurrection:SpellTargetUnit( a1 )
local shallTargetUnit
if SpellIsTargeting() then
shallTargetUnit = true
end
self.hooks["SpellTargetUnit"](a1)
if shallTargetUnit and self.spell and not SpellIsTargeting() then
self.target = UnitName(a1)
end
end
function oRAPResurrection:SpellStopTargeting()
self.hooks["SpellStopTargeting"]()
self.spell = nil
self.target = nil
end
function oRAPResurrection:TargetUnit( a1 )
self.hooks["TargetUnit"](a1)
if self.spell and UnitExists(a1) then
self.target = UnitName(a1)
end
end
function oRAPResurrection:WorldFrameOnMouseDown()
if self.spell and UnitName("mouseover") then
self.target = UnitName("mouseover")
elseif self.spell and GameTooltipTextLeft1:IsVisible() then
local _, _, name = string.find(GameTooltipTextLeft1:GetText(), L["^Corpse of (.+)$"])
if ( name ) then
self.target = name;
end
end
self.hooks[WorldFrame]["OnMouseDown"]()
end