-- -- Chat Colors -- local STATUS_COLOR = "|c000066FF"; local CONNECTION_COLOR = "|c0033FF66"; local MONEY_COLOR = "|c00FFCC33"; local DEBUG_COLOR = "|c0000FF00"; local GREY = "|c00909090"; local BRIGHTGREY = "|c00D0D0D0"; local WHITE = "|c00FFFFFF"; local SILVER = "|c00C0C0C0"; local COPPER = "|c00CC9900"; local GOLD = "|c00FFFF66"; local AR_CurrentVersion = "0.6"; local AR_DiagOpen = false; local AR_CB= nil; local AR_CBV; local AR_CBT = 0; -- -- Event Handlers -- function AutoRepair_OnLoad() this:RegisterEvent("VARIABLES_LOADED"); this:RegisterEvent("MERCHANT_SHOW"); end function AutoRepair_OnEvent(event) if ( event == "VARIABLES_LOADED" ) then AR_Load() end if ( event == "MERCHANT_SHOW") then if (CanMerchantRepair() and AR_Save.enabled) then AR_RepairHandler(false); end end end function AutoRepair_OnUpdate(dt) if (AR_CB) then AR_CBT = AR_CBT + dt if (AR_CBT > 1) then AR_CBT = 0; if (AR_CBV) then AR_CB(AR_CBV); else AR_CB(); end end end end -- -- Initialization And Configuration. -- function AR_Load() AR_Chat("AutoRepair v"..AR_CurrentVersion.." loaded."); if (AR_Save == nil) then AR_SaveSetup(); end if (AR_Save.version ~= AR_CurrentVersion) then AR_UpgradeFrom(AR_Save.version); end SlashCmdList["AUTOREPAIR"] = AR_SlashHandler; SLASH_AUTOREPAIR1 = "/autorepair"; SLASH_AUTOREPAIR2 = "/ar"; end function AR_UpgradeFrom(oldVersion) if (oldVersion == "0.5") then AR_Save.version = AR_CurrentVersion; AR_Save.verbose = true; AR_Save.skipInv = false; end end function AR_SaveSetup() AR_Chat("Default Variable Values Loaded."); AR_Chat("To Learn How To Change Settings Type /ar"); AR_Save = {}; AR_Save.version = AR_CurrentVersion; AR_Save.enabled = true; AR_Save.costThreshold = 0; AR_Save.minCost = 0; AR_Save.promptEnabled = true; AR_Save.verbose = true; AR_Save.skipInv = false; end -- -- Helper Functions -- function AR_Chat(text) DEFAULT_CHAT_FRAME:AddMessage(STATUS_COLOR..text); end -- function By Turan (turan@gryffon.com) - AuctionIt! -- http://turan.gryffon.com/wow.html -- gryphon globals.lua -- moved this function here since he updates his library's often function setAmountString(amt, sep) local str = ""; local gold, silver, copper; if (amt == 0) then str = COPPER .. "0 Copper" .. STATUS_COLOR; return str; end if ( not sep ) then sep = " " end; copper = mod(floor(amt + .5), 100); silver = mod(floor(amt/100), 100); gold = mod(floor(amt/(100*100)), 100); if ( gold > 0 ) then str = GOLD .. gold .. " Gold" end; if ( silver > 0 ) then if ( str ~= "" ) then str = str .. sep end; str = str .. SILVER .. silver .. " Silver"; end; if ( copper > 0 ) then if ( str ~= "" ) then str = str .. sep end; str = str .. COPPER .. copper .. " Copper"; end; str = str .. STATUS_COLOR; return str; end function setEnabledString(enabled) if (enabled) then return "Enabled."; else return "Disabled."; end end -- -- Slash Command Handlers -- function AR_SlashHandler(msg) local _,_,command,options = string.find(msg,"([%w%p]+)%s*(.*)$"); if (command) then command = string.lower(command); end if (command == nil or command == "") then AR_Chat("Current Settings:"); AR_Chat("MinCost: ".. WHITE .. setAmountString(AR_Save.minCost)); AR_Chat("Threshold: " .. WHITE .. setAmountString(AR_Save.costThreshold)); AR_Chat("Prompts: " .. WHITE .. setEnabledString(AR_Save.promptEnabled)); AR_Chat("Verbose: " .. WHITE .. setEnabledString(AR_Save.verbose)); AR_Chat("Skipping Inventory: " .. WHITE .. setEnabledString(AR_Save.skipInv)); AR_Chat("Available Commands:"); AR_Chat("/ar MinCost -- " .. WHITE .."Sets the minimal ammount you wish to ever auto repair for. This is compared to the total repair costs."); AR_Chat("/ar Threshold -- " .. WHITE .."Sets the most your willing to pay for without being prompt. If your total repair bill is less then your threshold and more than your min. then you'll automatically repair everything."); AR_Chat("/ar Prompts -- " .. WHITE .."This toggles showing prompts. If prompts are disabled Auto Repair will still repair your stuff as long as you can afford it."); AR_Chat("/ar Enable -- " .. WHITE .."This turns AutoRepair on and off."); AR_Chat("/ar Verbose -- " .. WHITE .. "This toggles showing repair ammounts in the chat area after repair has been done."); AR_Chat("/ar SkipInv -- " .. WHITE .. "This toggles skipping inventory check/repair. If enabled, AR will NOT check your inventory."); elseif (command == 'enable') then AR_EnableHandler(); elseif (command == 'mincost') then AR_MinCostHandler(options); elseif (command == 'threshold') then AR_ThresholdHandler(options); elseif (command == 'prompt') then AR_PromptHandler(); elseif (command == 'verbose') then AR_VerboseHandler(); elseif (command == 'skipinv') then AR_SkipInvHandler(); end end function AR_SkipInvHandler() if (AR_Save.skipInv) then AR_Save.skipInv = false; AR_Chat("Auto Repair will NOW check your inventory and offer to repair it. Type /ar skipinv to turn this off."); else AR_Save.skipInv = true; AR_Chat("Auto Repair will NO LONGER check your inventory and offer to repair it. Type /ar skipinv to turn this back on."); end end function AR_VerboseHandler() if (AR_Save.verbose) then AR_Save.verbose = false; AR_Chat("Auto Repair's verbose mode has been disabled. Type /ar verbose to enable it."); else AR_Save.verbose = true; AR_Chat("Auto Repair's verbose mode has been enabled. type /ar verbose to disable it."); end end function AR_PromptHandler() if (AR_Save.promptEnabled) then AR_Save.promptEnabled = false; AR_Chat("Auto Repair prompts have been disabled. Type /ar prompt to enable them."); AR_Chat("Please note that this dosn't disable Auto Repair and if the ammount is affordable and over your minimal cost, your equipment will still be repaired."); else AR_Save.promptEnabled = true; AR_Chat("Auto Repair prompts have been enabled. type /ar prompt to disable them."); end end function AR_EnableHandler() if (AR_Save.enabled) then AR_Save.enabled= false; AR_Chat("Auto Repair has been disabled. Type /ar enable to turn it back on."); else AR_Save.enabled= true; AR_Chat("Auto Repair has been enabled. type /ar enable to turn it off."); end end function AR_MinCostHandler(option) if(option == nil or option == "") then AR_Chat("AutoRepair: Min. Repair Cost: "..setAmountString(AR_Save.minCost).."."); AR_Chat("To Change MinCost Use:"); AR_Chat("/ar mincost "); AR_Chat(" must be greater than Zero."); AR_Chat(" is entered in copper."); else num = tonumber(option); if (num < 0) then AR_Chat("AutoRepair: Min. Repair Cost Set Error."); AR_Chat("Correct Usage:"); AR_Chat("/ar mincost "); AR_Chat(" must be greater than Zero."); AR_Chat(" is entered in copper."); else AR_Save.minCost = num; AR_Chat("AutoRepair: Min. Repair Cost Set To: "..setAmountString(AR_Save.minCost).."."); end end end function AR_ThresholdHandler(option) if(option == nil or option == "") then AR_Chat("AutoRepair: Threshold Amount: "..setAmountString(AR_Save.costThreshold).."."); AR_Chat("To Change Threshold Use:"); AR_Chat("/ar threshold "); AR_Chat(" must be greater than Zero."); AR_Chat(" is entered in copper."); else num = tonumber(option); if (num < 0) then AR_Chat("AutoRepair: Threshold Set Error."); AR_Chat("Correct Usage:"); AR_Chat("/ar threshold "); AR_Chat(" must be greater than Zero."); AR_Chat(" is entered in copper."); else AR_Save.costThreshold = num; AR_Chat("AutoRepair: Threshold Amount Set To: "..setAmountString(AR_Save.costThreshold).."."); end end end -- -- Repair Functions -- function AR_RepairHandler(skip_equip) if (AR_Save.promptEnabled and CanMerchantRepair()) then local AR_EquipCost = GetRepairAllCost(); local AR_InvCost = AR_GetInventoryCost(); local AR_Funds = GetMoney(); local AR_TotalCost = AR_EquipCost + AR_InvCost; local AR_Afford = AR_TotalCost < AR_Funds; local AR_UnderThreshold = AR_TotalCost < AR_Save.costThreshold; local AR_OverMin = AR_TotalCost > AR_Save.minCost; local AR_Needed = AR_TotalCost > 0; if (AR_Afford and AR_UnderThreshold and AR_OverMin and AR_Needed) then AR_RepairEquipment(); if (AR_Save.skipInv) then AR_TotalCost = AR_EquipCost; else AR_RepairInventory(); end return; end if (not skip_equip) then AR_Afford = AR_EquipCost < AR_Funds; AR_OverMin = AR_EquipCost > AR_Save.minCost; AR_Needed = AR_EquipCost > 0; if (AR_Afford and AR_OverMin and AR_Needed) then AR_ShowEquipPrompt(AR_EquipCost); if (not AR_Save.skipInv) then AR_CB= AR_RepairHandler; AR_CBV = true; AR_CBT = 0; end end end if (AR_DiagOpen) then return; else AR_CB= nil; AR_CBV = nil; AR_CBT = 0; end AR_Funds = GetMoney(); AR_Afford = AR_InvCost < AR_Funds; AR_OverMin = AR_InvCost > AR_Save.minCost; AR_Needed = AR_InvCost > 0; AR_Wanted = not AR_Save.skipInv; if (AR_Afford and AR_OverMin and AR_Needed and AR_Wanted) then AR_ShowInvPrompt(AR_InvCost); end elseif (CanMerchantRepair()) then local AR_EquipCost = GetRepairAllCost(); local AR_InvCost = AR_GetInventoryCost(); local AR_Funds = GetMoney(); local AR_TotalCost = AR_EquipCost + AR_InvCost; local AR_Afford = AR_TotalCost < AR_Funds; local AR_OverMin = AR_TotalCost > AR_Save.minCost; local AR_Needed = AR_TotalCost > 0; if (AR_Afford and AR_OverMin and AR_Needed) then AR_RepairEquipment(); if (AR_Save.skipInv) then AR_TotalCost = AR_EquipCost; else AR_RepairInventory(); end end end end function AR_OpenDiagToggle() if (AR_DiagOpen) then AR_DiagOpen = false; else AR_DiagOpen = true; end end function AR_ShowEquipPrompt(cost) local AR_CostText = setAmountString(cost); StaticPopupDialogs["REPAIR_EQUIP_BIND"] = { text = TEXT(STATUS_COLOR.."AutoRepair v"..AR_CurrentVersion.." (Kael Cycle)\n\n\nIt Will Cost "..AR_CostText.." To Fix Your Equipment.\n\nDo You Wish To Repair Your Equipment?"), button1 = TEXT(OKAY), button2 = TEXT(CANCEL), OnAccept = function() AR_RepairEquipment(); end, OnShow = function() AR_OpenDiagToggle(); end, OnHide = function() AR_OpenDiagToggle(); end, showAlert = 1, timeout = 0, exclusive = 0, whileDead = 1, interruptCinematic = 1 }; PlaySound("QUESTADDED"); StaticPopup_Show("REPAIR_EQUIP_BIND"); end function AR_ShowInvPrompt(cost) local AR_CostText = setAmountString(cost); StaticPopupDialogs["REPAIR_INV_BIND"] = { text = TEXT(STATUS_COLOR.."AutoRepair v"..AR_CurrentVersion.." (Kael Cycle)\n\n\nIt Will Cost "..AR_CostText.." To Fix The Items In Your Inventory.\n\nDo You Wish To Repair Your Items?"), button1 = TEXT(OKAY), button2 = TEXT(CANCEL), OnAccept = function() AR_RepairInventory(); end, OnShow = function() AR_OpenDiagToggle(); end, OnHide = function() AR_OpenDiagToggle(); end, showAlert = 1, timeout = 0, exclusive = 0, whileDead = 1, interruptCinematic = 1 }; PlaySound("QUESTADDED"); StaticPopup_Show("REPAIR_INV_BIND"); end function AR_GetInventoryCost() local AR_InventoryCost = 0; for bag = 0,4,1 do for slot = 1, GetContainerNumSlots(bag) , 1 do local hasCooldown, repairCost = GameTooltip:SetBagItem(bag,slot); if (repairCost) then AR_InventoryCost = AR_InventoryCost + repairCost; end end end return AR_InventoryCost; end function AR_RepairEquipment() RepairAllItems(); if (AR_Save.verbose) then local cost = GetRepairAllCost(); AR_Chat("Your repair bill for work done to your equipment was: " .. setAmountString(cost) .. "."); end end function AR_RepairInventory() ShowRepairCursor(); for bag = 0,4,1 do for slot = 1, GetContainerNumSlots(bag) , 1 do local hasCooldown, repairCost = GameTooltip:SetBagItem(bag,slot); if (repairCost and repairCost > 0) then UseContainerItem(bag,slot); end end end HideRepairCursor(); if (AR_Save.verbose) then local cost = AR_GetInventoryCost(); AR_Chat("Your repair bill for work done to your inventory was: " .. setAmountString(cost) .. "."); end end