216 lines
7.9 KiB
Lua
216 lines
7.9 KiB
Lua
NanamiPlates = {}
|
|
NanamiPlates.modules = {}
|
|
NanamiPlates.registry = {}
|
|
|
|
local pairs = pairs
|
|
local tostring = tostring
|
|
local CreateFrame = CreateFrame
|
|
|
|
local superwow_active = (SpellInfo ~= nil) or (UnitGUID ~= nil) or (SUPERWOW_VERSION ~= nil)
|
|
NanamiPlates.superwow_active = superwow_active
|
|
|
|
local _, playerClass = UnitClass("player")
|
|
playerClass = playerClass or ""
|
|
NanamiPlates.playerClass = playerClass
|
|
|
|
NanamiPlates.castDB = {}
|
|
NanamiPlates.castTracker = {}
|
|
NanamiPlates.debuffTracker = {}
|
|
NanamiPlates.recentMeleeCrits = {}
|
|
NanamiPlates.recentMeleeHits = {}
|
|
NanamiPlates.playerClassCache = {}
|
|
NanamiPlates.playerRole = "DPS"
|
|
|
|
local function Print(msg)
|
|
if DEFAULT_CHAT_FRAME then
|
|
DEFAULT_CHAT_FRAME:AddMessage("|cffff88cc[Nanami-Plates]|r " .. tostring(msg))
|
|
end
|
|
end
|
|
NanamiPlates.Print = Print
|
|
|
|
local function HookScript(frame, script, func)
|
|
local prev = frame:GetScript(script)
|
|
frame:SetScript(script, function(a1, a2, a3, a4, a5, a6, a7, a8, a9)
|
|
if prev then prev(a1, a2, a3, a4, a5, a6, a7, a8, a9) end
|
|
func(a1, a2, a3, a4, a5, a6, a7, a8, a9)
|
|
end)
|
|
end
|
|
NanamiPlates.HookScript = HookScript
|
|
|
|
local function DisableShaguTweaksNameplates()
|
|
if ShaguTweaks and ShaguTweaks.libnameplate then
|
|
ShaguTweaks.libnameplate:SetScript("OnUpdate", nil)
|
|
ShaguTweaks.libnameplate.OnInit = {}
|
|
ShaguTweaks.libnameplate.OnShow = {}
|
|
ShaguTweaks.libnameplate.OnUpdate = {}
|
|
ShaguTweaks.libnameplate.disabled_by_nanamiplates = true
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
local function DisablePfUINameplates()
|
|
if pfUI then
|
|
if pfUI.modules then pfUI.modules["nameplates"] = nil end
|
|
if pfNameplates then
|
|
pfNameplates:Hide()
|
|
pfNameplates:UnregisterAllEvents()
|
|
end
|
|
if pfUI.nameplates then pfUI.nameplates = nil end
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
DisableShaguTweaksNameplates()
|
|
DisablePfUINameplates()
|
|
|
|
local function GetPlayerClassByName(name)
|
|
if not name then return nil end
|
|
local cache = NanamiPlates.playerClassCache
|
|
if cache[name] then return cache[name] end
|
|
|
|
local playerName = UnitName("player")
|
|
if name == playerName then
|
|
cache[name] = playerClass
|
|
return playerClass
|
|
end
|
|
|
|
local numRaid = GetNumRaidMembers()
|
|
if numRaid > 0 then
|
|
for i = 1, numRaid do
|
|
local raidName, _, _, _, _, raidClass = GetRaidRosterInfo(i)
|
|
if raidName == name then
|
|
cache[name] = raidClass
|
|
return raidClass
|
|
end
|
|
end
|
|
else
|
|
local numParty = GetNumPartyMembers()
|
|
for i = 1, numParty do
|
|
local partyUnit = "party" .. i
|
|
if UnitExists(partyUnit) then
|
|
local partyName = UnitName(partyUnit)
|
|
if partyName == name then
|
|
local _, partyClass = UnitClass(partyUnit)
|
|
cache[name] = partyClass
|
|
return partyClass
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
NanamiPlates.GetPlayerClassByName = GetPlayerClassByName
|
|
|
|
local NP_EventFrame = CreateFrame("Frame", "NanamiPlatesFrame", UIParent)
|
|
|
|
NP_EventFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
NP_EventFrame:RegisterEvent("ADDON_LOADED")
|
|
NP_EventFrame:RegisterEvent("PLAYER_TARGET_CHANGED")
|
|
NP_EventFrame:RegisterEvent("UNIT_AURA")
|
|
NP_EventFrame:RegisterEvent("PARTY_MEMBERS_CHANGED")
|
|
NP_EventFrame:RegisterEvent("RAID_ROSTER_UPDATE")
|
|
NP_EventFrame:RegisterEvent("PLAYER_LEVEL_UP")
|
|
NP_EventFrame:RegisterEvent("PLAYER_REGEN_DISABLED")
|
|
NP_EventFrame:RegisterEvent("PLAYER_REGEN_ENABLED")
|
|
NP_EventFrame:RegisterEvent("UNIT_CASTEVENT")
|
|
NP_EventFrame:RegisterEvent("SPELLCAST_STOP")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_FAILED_LOCALPLAYER")
|
|
NP_EventFrame:RegisterEvent("CHARACTER_POINTS_CHANGED")
|
|
NP_EventFrame:RegisterEvent("QUEST_LOG_UPDATE")
|
|
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_PARTY_DAMAGE")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_BUFF")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_SELF_DAMAGE")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_TRADESKILLS")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_AURA_GONE_OTHER")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_AURA_GONE_SELF")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_PARTY_BUFF")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_SELF_BUFF")
|
|
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_COMBAT_SELF_HITS")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_COMBAT_PARTY_HITS")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_COMBAT_FRIENDLYPLAYER_HITS")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_COMBAT_CREATURE_VS_CREATURE_HITS")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_COMBAT_SELF_RANGED_HITS")
|
|
NP_EventFrame:RegisterEvent("CHAT_MSG_COMBAT_PARTY_RANGED_HITS")
|
|
|
|
NanamiPlates.EventFrame = NP_EventFrame
|
|
|
|
NanamiPlates.SPELL_EVENTS = {
|
|
["CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_CREATURE_VS_PARTY_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF"] = true,
|
|
["CHAT_MSG_SPELL_CREATURE_VS_CREATURE_BUFF"] = true,
|
|
["CHAT_MSG_SPELL_SELF_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_TRADESKILLS"] = true,
|
|
["CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_AURA_GONE_OTHER"] = true,
|
|
["CHAT_MSG_SPELL_AURA_GONE_SELF"] = true,
|
|
["CHAT_MSG_SPELL_CREATURE_VS_PARTY_BUFF"] = true,
|
|
["CHAT_MSG_SPELL_CREATURE_VS_SELF_BUFF"] = true,
|
|
["CHAT_MSG_SPELL_FAILED_LOCALPLAYER"] = true,
|
|
}
|
|
|
|
NanamiPlates.SPELL_DAMAGE_EVENTS = {
|
|
["CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_CREATURE_VS_PARTY_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_SELF_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE"] = true,
|
|
["CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE"] = true,
|
|
}
|
|
|
|
NanamiPlates.COMBAT_EVENTS = {
|
|
["CHAT_MSG_COMBAT_SELF_HITS"] = true,
|
|
["CHAT_MSG_COMBAT_PARTY_HITS"] = true,
|
|
["CHAT_MSG_COMBAT_FRIENDLYPLAYER_HITS"] = true,
|
|
["CHAT_MSG_COMBAT_CREATURE_VS_CREATURE_HITS"] = true,
|
|
["CHAT_MSG_COMBAT_SELF_RANGED_HITS"] = true,
|
|
["CHAT_MSG_COMBAT_PARTY_RANGED_HITS"] = true,
|
|
}
|
|
|
|
NanamiPlates.STUN_EFFECTS = {
|
|
"Cheap Shot", "Kidney Shot", "Bash", "Hammer of Justice",
|
|
"Charge Stun", "Intercept Stun", "Concussion Blow",
|
|
"Gouge", "Sap", "Pounce"
|
|
}
|
|
|
|
NanamiPlates.REMOVE_PENDING_PATTERNS = {
|
|
SPELLIMMUNESELFOTHER or "%s is immune to your %s.",
|
|
IMMUNEDAMAGECLASSSELFOTHER or "%s is immune to your %s damage.",
|
|
SPELLMISSSELFOTHER or "Your %s missed %s.",
|
|
SPELLRESISTSELFOTHER or "Your %s was resisted by %s.",
|
|
SPELLEVADEDSELFOTHER or "Your %s was evaded by %s.",
|
|
SPELLDODGEDSELFOTHER or "Your %s was dodged by %s.",
|
|
SPELLDEFLECTEDSELFOTHER or "Your %s was deflected by %s.",
|
|
SPELLREFLECTSELFOTHER or "Your %s was reflected back by %s.",
|
|
SPELLPARRIEDSELFOTHER or "Your %s was parried by %s.",
|
|
SPELLLOGABSORBSELFOTHER or "Your %s is absorbed by %s.",
|
|
}
|
|
|
|
NanamiPlates.TANK_CLASSES = {
|
|
["Warrior"] = true,
|
|
["Paladin"] = true,
|
|
["Druid"] = true,
|
|
["Shaman"] = true,
|
|
}
|
|
|
|
if DEFAULT_CHAT_FRAME then
|
|
DEFAULT_CHAT_FRAME:AddMessage("|cffff88cc[Nanami-Plates]|r Loading...")
|
|
end
|