vanilla-wow-addons – Rev 1
?pathlinks?
--
-- 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 <number> -- " .. WHITE .."Sets the minimal ammount you wish to ever auto repair for. This is compared to the total repair costs.");
AR_Chat("/ar Threshold <number> -- " .. 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 <number>");
AR_Chat("<number> must be greater than Zero.");
AR_Chat("<number> 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 <number>");
AR_Chat("<number> must be greater than Zero.");
AR_Chat("<number> 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 <number>");
AR_Chat("<number> must be greater than Zero.");
AR_Chat("<number> 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 <number>");
AR_Chat("<number> must be greater than Zero.");
AR_Chat("<number> 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