local addonname, addon = ... local L = addon.L function addon:Initialize() local events = CreateFrame'Frame' events:SetScript('OnEvent', function(frame, e, ...) if type(self[e]) == 'function' then self[e](self, ...) end end) function self:RegisterEvent(...) events:RegisterEvent(...) end function self:UnregisterEvent(...) events:UnregisterEvent(...) end self:RegisterEvent'ADDON_LOADED' self:RegisterEvent'PLAYER_ROLES_ASSIGNED' end function addon:ADDON_LOADED(name) if addonname ~= name then return end -- DB local defaults = { profile = { minthreat = 5000, dynamic_minthreat = true, enabled_in = { dungeon = true, raid = false }, raid_icons = { 8, 7, 1, 2 }, } } self.db = LibStub('AceDB-3.0'):New('KungalooshDB', defaults, true) self:CreateConfig() self:UnregisterEvent'ADDON_LOADED' end function addon:Print(...) print('|cFF33FF99Kungaloosh|r '..string.format(...)) end function addon:PLAYER_ROLES_ASSIGNED() self:EnableIfTank() end function addon:PLAYER_REGEN_ENABLED() self:ResetState() end function addon:UNIT_THREAT_LIST_UPDATE() local istanking, status, threatpct, rawthreatpct, threat = UnitDetailedThreatSituation('player', 'target') if GetRaidTargetIndex'target' == nil then if threat and threat > (self:GetMinThreat() * 100) then local icon = self:GetNextIcon() if icon then SetRaidTarget('target', icon) end end end end function addon:RAID_TARGET_UPDATE() local function check(unit) if UnitExists(unit) then local icon = GetRaidTargetIndex(unit) if icon then self.iconstate[icon] = true end end end check('target') check('pettarget') for i=1,5 do check('party'..i..'target') end for i=1,40 do check('raid'..i..'target') end end function addon:ResetState() self.iconstate = self.iconstate or {} table.wipe(self.iconstate) end function addon:GetNextIcon() for i, icon in ipairs(self.db.profile.raid_icons) do if not self.iconstate[icon] then return icon end end end function addon:GetMinThreat() if self.db.profile.dynamic_minthreat then local level = UnitLevel'player' return (level * level) * 1.2 else return self.db.profile.minthreat end end function addon:EnableIfTank() if self.db.profile.enabled_in.dungeon then local istank, ishealer, isdamage = UnitGroupRolesAssigned'player' if istank then return self:Enable(L['is now enabled since you are assigned as a tank']) end end if self.db.profile.enabled_in.raid then if GetPartyAssignment('MAINTANK', 'player') then return self:Enable(L['is now enabled since you are assigned as a tank']) end end return self:Disable() end function addon:Enable(msg) if self.enabled then return end self:RegisterEvent'PLAYER_REGEN_ENABLED' self:RegisterEvent'UNIT_THREAT_LIST_UPDATE' self:RegisterEvent'RAID_TARGET_UPDATE' self.enabled = true self:ResetState() if msg then self:Print(msg) end end function addon:Disable(msg) if not self.enabled then return end self:UnregisterEvent'PLAYER_REGEN_ENABLED' self:UnregisterEvent'UNIT_THREAT_LIST_UPDATE' self:UnregisterEvent'RAID_TARGET_UPDATE' self.enabled = false if msg then self:Print(msg) end end function addon:Toggle() if not self.enabled then self:Enable(L['is now enabled']) else self:Disable(L['is now disabled']) end end function SlashCmdList.KUNGALOOSH() addon:Toggle() end addon:Initialize() _G['SLASH_KUNGALOOSH1'] = '/kungaloosh' _G['SLASH_KUNGALOOSH2'] = '/kl'