vanilla-wow-addons – Rev 1
?pathlinks?
Minimalist = AceAddon:new({
name = "Minimalist",
version = "2.9.0",
description = "Useful Tweaks and Automations for a Good Gameplay Experience",
author = "Grennon of Argent Dawn",
email = "jeramy.smith@gmail.com",
releaseDate = "07/18/06",
aceCompatible = "103",
category = "interface",
db = AceDatabase:new("MinimalistDB"),
defaults = Minimalist_Defaults,
})
function Minimalist:Initialize()
self.GetOpt = function(var) return self.db:get(self.profilePath,var) end
self.SetOpt = function(var,val) self.db:set(self.profilePath,var,val) end
end
function Minimalist:Enable()
SlashCmdList["MINIMALIST"] = MinCmdHandler
SLASH_MINIMALIST1 = "/minimalist"
SLASH_MINIMALIST2 = "/min"
local checkbox, func
for _, checkbox in Minimalist_CheckButtons do
if (self.GetOpt(checkbox.var)) then
func = checkbox.func
func(true)
end
end
for i=1, 4 do
local sf = getglobal("MinimalistSubFrame"..i)
sf:SetBackdropBorderColor(0.4, 0.4, 0.4)
sf:SetBackdropColor(0.15, 0.15, 0.15)
getglobal("MinimalistSubFrame"..i.."Title"):SetText(getglobal("MinimalistFrameTab"..i):GetText())
end
end
function MinCmdHandler()
Minimalist:Show()
end
function Minimalist:Show()
if (MinimalistFrame:IsVisible()) then return end
local key, value, button, string, checked
for key, value in Minimalist_CheckButtons do
button = getglobal("MinimalistFrame_CheckButton"..value.index)
string = getglobal("MinimalistFrame_CheckButton"..value.index.."Text")
checked = nil
button.disabled = nil
if (value.var) then
if (self.GetOpt(value.var)) then
checked = 1
else
checked = 0
end
else
checked = 0
end
OptionsFrame_EnableCheckBox(button)
button:SetChecked(checked)
string:SetText(key)
button.tooltipText = value.tooltipText
end
MinimalistFrame:Show()
self:TabHandler("MinimalistFrameTab1")
end
function Minimalist:CheckButton_OnClick()
local key, value, button
for key, value in Minimalist_CheckButtons do
if (this:GetName() == "MinimalistFrame_CheckButton"..value.index) then
button = getglobal("MinimalistFrame_CheckButton"..value.index)
if (button:GetChecked()) then
self.SetOpt(value.var, TRUE)
if (value.func) then
local func = value.func
func(true)
end
else
self.SetOpt(value.var, FALSE)
if (value.func) then
local func = value.func
func(false)
end
end
end
end
end
function Minimalist:CheckButton_OnEnter()
if (this.tooltipText ) then
GameTooltip:SetOwner(this, "ANCHOR_LEFT")
GameTooltip:SetText(this.tooltipText, nil, nil, nil, nil, 1)
end
end
-- the following function is for ace hooking nils
function Minimalist:DummyFunc()
end
function Minimalist:TabHandler(tab)
for i=1, 4 do
if (tab == "MinimalistFrameTab"..i) then getglobal("MinimalistSubFrame"..i):Show()
else getglobal("MinimalistSubFrame"..i):Hide() end
end
end
-- merchant handlers
function Minimalist:MHOn()
if (not Minimalist_Merchant_Show) then
self:RegisterEvent("MERCHANT_SHOW", "MinMerchantHandler")
Minimalist_Merchant_Show = true
end
end
function Minimalist:MHOff()
if (self.GetOpt("AUTOSELL") or self.GetOpt("AUTOREPAIR") or not Minimalist_Merchant_Show) then return end
self:UnregisterEvent("MERCHANT_SHOW")
Minimalist_Merchant_Show = false
end
function Minimalist:MinMerchantHandler()
if (self.GetOpt("AUTOSELL")) then self:MinSellJunk() end
if (CanMerchantRepair() and self.GetOpt("AUTOREPAIR")) then self:RepairHandler() end
end
-- gossip handlers
function Minimalist:GHOn()
if (not Minimalist_Gossip_Show) then
self:RegisterEvent("GOSSIP_SHOW", "MinGossipHandler")
Minimalist_Gossip_Show = true
end
end
function Minimalist:GHOff()
if (self.GetOpt("GOSSIPSKIP") or self.GetOpt("QUESTLEVEL") or not Minimalist_Gossip_Show) then return end
self:UnregisterEvent("GOSSIP_SHOW")
Minimalist_Gossip_Show = false
end
function Minimalist:MinGossipHandler()
if (self.GetOpt("QUESTLEVEL")) then self:GossipQuestLevelShow() end
if (self.GetOpt("GOSSIPSKIP")) then self:SkipGossip() end
end
function Minimalist:SkipGossip()
local bwl = "The orb's markings match the brand on your hand."
local mc = "You see large cavernous tunnels"
local t = GetGossipText()
if (t == bwl or (strsub(t,1,31) == mc)) then
SelectGossipOption(1)
return
end
local list = {GetGossipOptions()}
for i = 2,getn(list),2 do
if(list[i]=="taxi" or list[i]=="battlemaster" or list[i]=="banker") then SelectGossipOption(i/2) return end
end
end
-- smart taxi functions
function Minimalist:SmartTaxiOn()
self:RegisterEvent("TAXIMAP_OPENED", "MinDisMount")
end
function Minimalist:SmartTaxiOff()
self:UnregisterEvent("TAXIMAP_OPENED")
end
function Minimalist:MinDisMount()
for i=0,15 do
if GetPlayerBuffTexture(i) then
if string.find(GetPlayerBuffTexture(i),"Mount") then CancelPlayerBuff(i) end
end
end
end
-- hide/unhide default UI toolbar gryphons
function Minimalist:GryphOn()
MainMenuBarLeftEndCap:Hide()
MainMenuBarRightEndCap:Hide()
end
function Minimalist:GryphOff()
MainMenuBarLeftEndCap:Show()
MainMenuBarRightEndCap:Show()
end
-- functions to display quest level
function Minimalist:MinQLOn()
self:Hook("GetQuestLogTitle", "MinGetQuestLogTitle")
self:RegisterEvent("QUEST_GREETING", "MinCheckQuestDetail")
self:GHOn()
end
function Minimalist:MinQLOff()
self:Unhook("GetQuestLogTitle")
self:UnregisterEvent("QUEST_GREETING")
self:GHOff()
end
-- the following MinGetQuestLogTitle is based on the method ct_questlevels uses
function Minimalist:MinGetQuestLogTitle(questIndex)
local questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete = self:CallHook("GetQuestLogTitle", questIndex)
if ( not isHeader and level ) then
if ( questLogTitleText ) then
questLogTitleText = "[" .. level .. "] " .. questLogTitleText
end
end
return questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete
end
-- display quest level in a gossip window, inspired by AutoSelect
function Minimalist:GossipQuestLevelShow()
local buttonindex = 1
local list, button
if (GetGossipAvailableQuests()) then
list,button = {GetGossipAvailableQuests()}
for i = 2,getn(list),2 do
button = getglobal("GossipTitleButton"..(buttonindex))
button:SetText(format('[%d] %s',list[i],list[i-1]))
buttonindex = buttonindex + 1
end
buttonindex = buttonindex + 1
end
if (GetGossipActiveQuests()) then
list,button = {GetGossipActiveQuests()}
for i = 2,getn(list),2 do
button = getglobal("GossipTitleButton"..(buttonindex))
button:SetText(format('[%d] %s',list[i],list[i-1]))
buttonindex = buttonindex + 1
end
end
end
-- display quest level in a quest detail window, based on AutoSelect
function Minimalist:MinCheckQuestDetail()
local nact,navl = GetNumActiveQuests(), GetNumAvailableQuests()
local title,level,button
local o,GetTitle,GetLevel = 0,GetActiveTitle,GetActiveLevel
for i = 1,nact+navl do
if(i==nact+1) then
o,GetTitle,GetLevel = nact,GetAvailableTitle,GetAvailableLevel
end
title,level = GetTitle(i-o), GetLevel(i-o)
button = getglobal("QuestTitleButton"..i)
button:SetText(format('[%d] %s',level,title))
end
end
-- honor progress bar override this is my own and not based on the other mods out there
function Minimalist:MinHonorFrame_Update(updateAll)
self:CallHook("HonorFrame_Update", updateALL)
local RankProgress = GetPVPRankProgress()*100
local RankProgress = string.format("%.2f", RankProgress)
local RankProgress = " - "..RankProgress.."%"
local oldranktext = HonorFrameCurrentPVPRank:GetText()
HonorFrameCurrentPVPRank:SetText("("..oldranktext.." "..RankProgress..")")
HonorFrameCurrentPVPTitle:SetPoint("TOP", "HonorFrame", "TOP", - HonorFrameCurrentPVPRank:GetWidth()/2, -83)
end
-- autorepair functions based on KC_AutoRepair by Kaelten
function Minimalist:setAmountString(amt)
local str = ""
local sep = " "
local copper = mod(floor(amt + .5), 100)
local silver = mod(floor(amt/100), 100)
local gold = mod(floor(amt/(100*100)), 100)
if ( gold > 0 ) then str = gold .. " Gold" end
if ( silver > 0 ) then
if ( str ~= "" ) then str = str .. sep end
str = str .. silver .. " Silver"
end
if ( copper > 0 ) then
if ( str ~= "" ) then str = str .. sep end
str = str .. copper .. " Copper"
end
return str
end
function Minimalist:RepairHandler()
local STATUS_COLOR = "|c00FFFF66"
local equipcost = GetRepairAllCost()
local funds = GetMoney()
if (funds < equipcost) then Minimalist_ChatFrame:AddMessage(STATUS_COLOR.."Insufficient Funds to Repair") end
if (funds > equipcost and equipcost > 0) then
Minimalist_ChatFrame:AddMessage(STATUS_COLOR.."Total Repair Costs: "..self:setAmountString(equipcost))
if (equipcost > 0) then RepairAllItems() end
end
end
-- autosell grey junk, adapted from AutoProfit
function Minimalist:MinSellJunk()
local bag, slot
for bag = 0, 4 do
if GetContainerNumSlots(bag) > 0 then
for slot = 0, GetContainerNumSlots(bag) do
local _, _, _, quality = GetContainerItemInfo(bag, slot)
if (quality == 0 or quality == -1) then
if (self:ProcessLink(GetContainerItemLink(bag, slot))) then
PickupContainerItem(bag, slot)
MerchantItemButton_OnClick("LeftButton")
end
end
end
end
end
end
function Minimalist:ProcessLink(link)
local color
local name
for color, _, name in string.gfind(link, "|c(%x+)|Hitem:(%d+:%d+:%d+:%d+)|h%[(.-)%]|h|r") do
if (color == "ff9d9d9d") then
for i=1,table.getn(Minimalist_AutoSell_Blacklist) do
if (name == Minimalist_AutoSell_Blacklist[i]) then return false end
end
return true
end
return false
end
end
-- Improved Repututation Handlers and Functions
function Minimalist:MinRepOn()
-- the next three lines display the faction text/numbers on the Rep Bar (1.10 replacement for the xpbar)
self:RepBarSet()
self:RegisterEvent("PLAYER_ENTERING_WORLD", "RepBarSet")
self:RegisterEvent("UPDATE_FACTION", "RepChat_Update")
for i=1, 15 do
self:HookScript(getglobal("ReputationBar"..i), "OnEnter", "DummyFunc")
self:HookScript(getglobal("ReputationBar"..i), "OnLeave", "DummyFunc")
end
self:Hook("ReputationFrame_Update", "RepFrame_Update")
end
function Minimalist:MinRepOff()
ReputationWatchBar.cvarLocked = nil
ReputationWatchBar.textLocked = nil
ReputationWatchStatusBarText:Hide()
self:UnregisterEvent("UPDATE_FACTION")
for i=1, 15 do
self:UnhookScript(getglobal("ReputationBar"..i), "OnEnter")
self:UnhookScript(getglobal("ReputationBar"..i), "OnLeave")
end
self:Unhook("ReputationFrame_Update")
self:UnregisterEvent("PLAYER_ENTERING_WORLD")
ReputationFrame_Update()
end
function Minimalist:RepBarSet()
ReputationWatchBar.cvarLocked = 1
ReputationWatchBar.textLocked = 1
ReputationWatchStatusBarText:Show()
end
--based on Reputation Mod, displays the raw honor numbers on the reputation frame
function Minimalist:RepFrame_Update()
self:CallHook("ReputationFrame_Update")
local numFactions = GetNumFactions()
local factionOffset = FauxScrollFrame_GetOffset(ReputationListScrollFrame)
local factionIndex, factionStanding, standingID, barValue, isHeader
for i=1, NUM_FACTIONS_DISPLAYED, 1 do
factionIndex = factionOffset + i
if ( factionIndex <= numFactions ) then
_, _, standingID, barMin, barMax, barValue, _, _, isHeader = GetFactionInfo(factionIndex)
if ( not isHeader ) then
factionStanding = getglobal("FACTION_STANDING_LABEL"..standingID)
getglobal("ReputationBar"..i.."FactionStanding"):SetText( factionStanding.." - "..barValue-barMin.."/"..barMax-barMin)
end
end
end
end
-- based on Rep Mod, displays faction until next standing in the combat or main chat window
local MinReps = { }
function Minimalist:RepChat_Update()
self:RepBarSet()
local RepRemains
for factionIndex=1, GetNumFactions(), 1 do
local name, _, standingID, barMin, barMax, barValue, _, _, isHeader, _ = GetFactionInfo(factionIndex)
if ( not isHeader ) then
if (MinReps[name]) then
local difference = barValue - MinReps[name].Value
if (difference > 0 and standingID ~= 8) then
RepRemains = barMax-barValue
Minimalist_ChatFrame:AddMessage(format("%d faction needed until %s with %s.",RepRemains,getglobal("FACTION_STANDING_LABEL"..standingID+1),name), 1.0, 1.0, 0.0)
elseif (difference < 0 and standingID ~= 1) then
difference=abs(difference)
RepRemains = barValue-barMin
Minimalist_ChatFrame:AddMessage(format("%d faction left until %s with %s.",RepRemains,getglobal("FACTION_STANDING_LABEL"..standingID-1),name), 1.0, 1.0, 0.0)
end
MinReps[name].Value = barValue
else
MinReps[name] = { }
MinReps[name].Value = barValue
end
end
end
end
--autorez function based on work from AutoRez mod, pretty simple, huh?
function Minimalist:MinAutoRez()
if (arg1 == "Chained Spirit") then return end
if (GetCorpseRecoveryDelay() ~= 0) then return end
HideUIPanel(StaticPopup1)
AcceptResurrect()
end
-- ignore duel function
function Minimalist:MinAutoDuel()
HideUIPanel(StaticPopup1)
CancelDuel()
end
--minimap functions based on idminimap
function Minimalist:MapLocOn()
MinMapFrame:Show()
MinMapFrame:SetScript("OnUpdate", MinMapLoc)
self:RegisterEvent("ZONE_CHANGED_NEW_AREA", "Fix_Zone")
end
function Minimalist:Fix_Zone()
local x, y = GetPlayerMapPosition("player")
if x == 0 and y == 0 then
SetMapToCurrentZone()
end
end
function Minimalist:MapLocOff()
MinMapLocText:SetText('')
MinMapFrame:SetScript("OnUpdate", nil)
self:UnregisterEvent(" ZONE_CHANGED_NEW_AREA")
if (not self.GetOpt("MAPSCROLL")) then MinMapFrame:Hide() end
end
function MinMapLoc()
local x, y = GetPlayerMapPosition("player")
if x == 0 and y == 0 then
MinMapLocText:SetText('')
else
MinMapLocText:SetText(string.format('%s,%s', floor(x*100), floor(y*100)))
end
end
function Minimalist:MapScrollOn()
MinMapFrame:Show()
MinMapFrame:SetScript("OnMouseWheel", MinMapZoom)
MinMapFrame:EnableMouseWheel(1)
end
function Minimalist:MapScrollOff()
MinMapFrame:SetScript("OnMouseWheel", nil)
MinMapFrame:EnableMouseWheel(FALSE)
if (not self.GetOpt("MAPLOC")) then MinMapFrame:Hide() end
end
function MinMapZoom()
if arg1 < 0 then
if Minimap:GetZoom() ~= 0 then Minimap:SetZoom(Minimap:GetZoom() - 1) end
else
if Minimap:GetZoom() ~= 5 then Minimap:SetZoom(Minimap:GetZoom() + 1) end
end
end
function Minimalist:MinMapHide()
MinimapZoomIn:Hide()
MinimapZoomOut:Hide()
GameTimeFrame:Hide()
MinimapToggleButton:Hide()
MinimapZoneTextButton:Hide()
MinimapBorderTop:Hide()
end
function Minimalist:MinMapShow()
MinimapZoomIn:Show()
MinimapZoomOut:Show()
GameTimeFrame:Show()
MinimapToggleButton:Show()
MinimapZoneTextButton:Show()
MinimapBorderTop:Show()
end
-- chat mods based on Industrial's idChat and Random's ChatScroll
function Minimalist:ChatScrollOn()
for i = 1, 7 do
local cf = getglobal('ChatFrame'..i)
self:HookScript(cf, 'OnMouseWheel', 'ChatScroll')
cf:EnableMouseWheel(1)
end
end
function Minimalist:ChatScrollOff()
for i = 1, 7 do
local cf = getglobal('ChatFrame'..i)
self:UnhookScript(cf, 'OnMouseWheel')
cf:EnableMouseWheel(FALSE)
end
end
function Minimalist:ChatScroll()
self:CallScript(this, 'OnMouseWheel')
if arg1 > 0 then
if IsShiftKeyDown() then this:ScrollToTop() else this:ScrollUp() end
elseif arg1 < 0 then
if IsShiftKeyDown() then this:ScrollToBottom() else this:ScrollDown() end
end
end
function Minimalist:ChatButtonsOn()
if (ChatFrameMenuButton:IsVisible()) then return end
local cf
ChatFrameMenuButton:Show()
for i = 1, 7 do
cf=getglobal('ChatFrame'..i..'UpButton')
self:UnhookScript(cf, 'OnShow')
cf:Show()
cf=getglobal('ChatFrame'..i..'DownButton')
self:UnhookScript(cf, 'OnShow')
cf:Show()
cf=getglobal('ChatFrame'..i..'BottomButton')
self:UnhookScript(cf, 'OnShow')
cf:Show()
end
end
function Minimalist:ChatButtonsOff()
if (not ChatFrameMenuButton:IsVisible()) then return end
local cf
ChatFrameMenuButton:Hide()
for i = 1, 7 do
cf=getglobal('ChatFrame'..i..'UpButton')
cf:Hide()
self:HookScript(cf, 'OnShow', function() this:Hide() end)
cf=getglobal('ChatFrame'..i..'DownButton')
cf:Hide()
self:HookScript(cf, 'OnShow', function() this:Hide() end)
cf=getglobal('ChatFrame'..i..'BottomButton')
cf:Hide()
self:HookScript(cf, 'OnShow', function() this:Hide() end)
end
end
function Minimalist:ChatMoveEditBox()
local eb = VisorEditBox or ChatFrameEditBox
eb:ClearAllPoints()
eb:SetPoint('BOTTOMLEFT', 'ChatFrame1', 'TOPLEFT', -5, 0)
eb:SetPoint('BOTTOMRIGHT', 'ChatFrame1', 'TOPRIGHT', 5, 0)
end
function Minimalist:ChatRestoreEditBox()
local eb = VisorEditBox or ChatFrameEditBox
eb:ClearAllPoints()
eb:SetPoint('TOPLEFT', 'ChatFrame1', 'BOTTOMLEFT', -5, 0)
eb:SetPoint('TOPRIGHT', 'ChatFrame1', 'BOTTOMRIGHT', 5, 0)
end
function Minimalist:ChatArrowsOn()
local eb = VisorEditBox or ChatFrameEditBox
eb:SetAltArrowKeyMode(false)
end
function Minimalist:ChatArrowsOff()
local eb = VisorEditBox or ChatFrameEditBox
eb:SetAltArrowKeyMode(enabled)
end
function Minimalist:ChatParseOn()
if Minimalist_Chat_Parse then return end
for i = 1, 7 do
local cf = getglobal("ChatFrame"..i)
self:Hook(cf, "AddMessage", function(cf, msg, r, g, b, id)
msg = msg or ''
r = r or ''
g = g or ''
b = b or ''
id = id or nil
if (self.GetOpt("CHATTIME")) then msg = date("%H:%M:%S").."| "..msg end
if (self.GetOpt("CHATCLEAN")) then
msg = string.gsub(msg, '%[Guild%]', '(G)')
msg = string.gsub(msg, '%[Party%]', '(P)')
msg = string.gsub(msg, '%[Raid%]', '(R)')
msg = string.gsub(msg, '%[Raid Leader%]', '(R)')
msg = string.gsub(msg, '%[Raid Warning%]', '(!)')
msg = string.gsub(msg, '%[Officer%]', '(O)')
msg = string.gsub(msg, '%[(%d)%..-%]', '(%1)')
end
self:CallHook(cf, "AddMessage", msg, r, g, b, id)
end)
end
Minimalist_Chat_Parse = true
end
function Minimalist:ChatParseOff()
if (self.GetOpt("CHATCLEAN") or self.GetOpt("CHATTIME") or not Minimalist_Chat_Parse) then return end
for i=1,7 do self:Unhook(getglobal('ChatFrame'..i), 'AddMessage') end
Minimalist_Chat_Parse = false
end
Minimalist:RegisterForLoad()