-------------------------------------------
--- Author: Ketho (EU-Boulderfist) ---
--- License: Public Domain ---
--- Created: 2011.11.21 ---
--- Version: 0.7 [2012.08.28] ---
-------------------------------------------
--- Curse http://www.curse.com/addons/wow/autoconfirmroll
--- WoWInterface http://www.wowinterface.com/downloads/info20516-AutoConfirmRoll.html
local NAME = ...
local VERSION = 0.7
local BUILD = "Release"
AutoConfirmRoll = LibStub("AceAddon-3.0"):NewAddon(NAME, "AceEvent-3.0", "AceConsole-3.0")
local ACR = AutoConfirmRoll
local ACR2 = LibStub("AceConfigRegistry-3.0")
local ACD = LibStub("AceConfigDialog-3.0")
local profile
---------------
--- Options ---
---------------
local rollTypes = {} -- cache
local remap = {
Need = 1,
Greed = 2,
Disenchant = 3,
}
local ITEM_QUALITY = {}
for i = 2, 4 do
ITEM_QUALITY[i] = format("%s%s|r", ITEM_QUALITY_COLORS[i].hex, _G["ITEM_QUALITY"..i.."_DESC"])
end
local defaults = {
profile = {
Need = true,
Greed = true,
Disenchant = true,
Loot = true,
Threshold = 4,
Party = true,
Raid = true,
},
}
local options = {
type = "group",
name = format("%s |cffADFF2Fv%s|r", NAME, VERSION),
handler = ACR,
args = {
inline1 = {
type = "group", order = 1,
name = " ",
inline = true,
get = "GetValue", set = "SetValueRoll",
args = {
Need = {
type = "toggle", order = 1,
width = "full", descStyle = "",
name = "|TInterface\\Buttons\\UI-GroupLoot-Dice-Up:16:16|t "..NEED,
},
Greed = {
type = "toggle", order = 2,
width = "full", descStyle = "",
name = "|TInterface\\Buttons\\UI-GroupLoot-Coin-Up:16:16|t "..GREED,
},
Disenchant = {
type = "toggle", order = 3,
width = "full", descStyle = "",
name = "|TInterface\\Buttons\\UI-GroupLoot-DE-Up:16:16|t "..ROLL_DISENCHANT,
},
Loot = {
type = "toggle", order = 4,
width = "full", desc = "|cff71D5FFAutoConfirmLoot|r\n"..LOOT_NO_DROP,
name = "|TInterface\\Cursor\\Pickup:16:16:1|t "..LOOT,
set = "SetValue"
},
},
},
spacing = {type = "description", order = 2, name = ""},
inline2 = {
type = "group", order = 3,
name = FILTERS,
inline = true,
get = "GetValue", set = "SetValue",
args = {
Threshold = {
type = "select", order = 1,
descStyle = "",
name = " "..LOOT_THRESHOLD,
values = ITEM_QUALITY,
},
spacing = {type = "description", order = 2, name = " "},
Party = {
type = "toggle", order = 3,
width = "full", descStyle = "",
name = " |cffA8A8FF"..PARTY.."|r",
},
Raid = {
type = "toggle", order = 4,
width = "full", descStyle = "",
name = " |cffFF7F00"..RAID.."|r",
},
},
},
},
}
function ACR:GetValue(i)
return profile[i[#i]]
end
function ACR:SetValue(i, v)
profile[i[#i]] = v
end
function ACR:SetValueRoll(i, v)
profile[i[#i]] = v
rollTypes[remap[i[#i]]] = v
end
---------------------------
--- Ace3 Initialization ---
---------------------------
local slashCmds = {"acr", "autoconfirm", "autoconfirmroll"}
function ACR:OnInitialize()
self.db = LibStub("AceDB-3.0"):New("AutoConfirmRollDB", defaults, true)
self.db.RegisterCallback(self, "OnProfileChanged", "RefreshDB")
self.db.RegisterCallback(self, "OnProfileCopied", "RefreshDB")
self.db.RegisterCallback(self, "OnProfileReset", "RefreshDB")
self:RefreshDB()
self.db.global.version = VERSION
self.db.global.build = BUILD
ACR2:RegisterOptionsTable("AutoConfirmRoll_Main", options)
local profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db)
ACR2:RegisterOptionsTable("AutoConfirmRoll_Profiles", profiles)
ACD:AddToBlizOptions("AutoConfirmRoll_Main", NAME)
ACD:AddToBlizOptions("AutoConfirmRoll_Profiles", profiles.name, NAME)
ACD:SetDefaultSize("AutoConfirmRoll_Main", 280, 385)
for _, v in ipairs(slashCmds) do
self:RegisterChatCommand(v, "SlashCommand")
end
end
function ACR:OnEnable()
self:RegisterEvent("CONFIRM_LOOT_ROLL", "CONFIRM_ROLL")
self:RegisterEvent("CONFIRM_DISENCHANT_ROLL", "CONFIRM_ROLL")
self:RegisterEvent("LOOT_BIND_CONFIRM")
end
function ACR:RefreshDB()
profile = self.db.profile
rollTypes = {
profile.Need,
profile.Greed,
profile.Disenchant,
}
end
local enable = {
["1"] = true,
on = true,
enable = true,
load = true,
}
local disable = {
["0"] = true,
off = true,
disable = true,
unload = true,
}
function ACR:SlashCommand(input)
if strtrim(input) == "" then
ACD:Open("AutoConfirmRoll_Main")
elseif enable[input] then
self:Enable()
self:Print("|cffADFF2F"..VIDEO_OPTIONS_ENABLED.."|r")
elseif disable[input] then
self:Disable()
self:Print("|cffFF2424"..VIDEO_OPTIONS_DISABLED.."|r")
end
end
--------------
--- Events ---
--------------
local function IsGroup()
local numParty = GetNumSubgroupMembers()
local numRaid = GetNumGroupMembers()
local isParty = profile.Party and (numRaid == 0 and numParty > 0)
local isRaid = profile.Raid and numRaid > 0
return isRaid or isParty
end
function ACR:CONFIRM_ROLL(event, id, lootType)
print ("CONFIRM_ROLL event handed to ACR")
local qualityThreshold = select(4, GetLootRollItemInfo(id)) <= profile.Threshold
if rollTypes[lootType] and qualityThreshold and IsGroup() then
ConfirmLootRoll(id, lootType)
--Manually hiding StaticPopup for compatibility with ElvUI
StaticPopup_Hide("CONFIRM_LOOT_ROLL")
end
end
local f = CreateFrame("Frame")
function ACR:LOOT_BIND_CONFIRM(event, slot)
local qualityThreshold = select(4, GetLootSlotInfo(slot)) <= profile.Threshold
if profile.Loot and qualityThreshold then
-- delay by a single OnUpdate iteration
f:SetScript("OnUpdate", function(self, elapsed)
ConfirmLootSlot(slot)
self:SetScript("OnUpdate", nil)
end)
-- in contrary to ConfirmLootRoll, ConfirmLootSlot doesn't include hiding the StaticPopup
StaticPopup_Hide("LOOT_BIND")
end
end