vanilla-wow-addons – Rev 1
?pathlinks?
-- Title: TitanRepair v2.17 (improved Performances by Archarodim - 2006-04-21 04:35 CEST)
-- Notes: Adds Durability Info to Titan Panel, also reminds you to repair
-- Author: lua@lumpn.de/Adsertor
TITAN_REPAIR_ID = "Repair";
REPAIR_INDEX = 0;
REPAIR_MONEY = 0;
REPAIR_ITEM_STATUS = {};
REPAIR_ITEM_BAG = {};
-- this index (0) will be never set, just accessed to this state, it simplifies code for TitanRepair_GetMostDamagedItem() when Tit_R_EquipedMinIndex == 0
REPAIR_ITEM_STATUS[0] = { val = 0, max = 0, cost = 0, name = INVTYPE_HEAD, slot = "VIRTUAL" };
--
REPAIR_ITEM_STATUS[1] = { val = 0, max = 0, cost = 0, name = INVTYPE_HEAD, slot = "Head" };
REPAIR_ITEM_STATUS[2] = { val = 0, max = 0, cost = 0, name = INVTYPE_SHOULDER, slot = "Shoulder" };
REPAIR_ITEM_STATUS[3] = { val = 0, max = 0, cost = 0, name = INVTYPE_CHEST, slot = "Chest" };
REPAIR_ITEM_STATUS[4] = { val = 0, max = 0, cost = 0, name = INVTYPE_WAIST, slot = "Waist" };
REPAIR_ITEM_STATUS[5] = { val = 0, max = 0, cost = 0, name = INVTYPE_LEGS, slot = "Legs" };
REPAIR_ITEM_STATUS[6] = { val = 0, max = 0, cost = 0, name = INVTYPE_FEET, slot = "Feet" };
REPAIR_ITEM_STATUS[7] = { val = 0, max = 0, cost = 0, name = INVTYPE_WRIST, slot = "Wrist" };
REPAIR_ITEM_STATUS[8] = { val = 0, max = 0, cost = 0, name = INVTYPE_HAND, slot = "Hands" };
REPAIR_ITEM_STATUS[9] = { val = 0, max = 0, cost = 0, name = INVTYPE_WEAPONMAINHAND, slot = "MainHand" };
REPAIR_ITEM_STATUS[10] = { val = 0, max = 0, cost = 0, name = INVTYPE_WEAPONOFFHAND, slot = "SecondaryHand" };
REPAIR_ITEM_STATUS[11] = { val = 0, max = 0, cost = 0, name = INVTYPE_RANGED, slot = "Ranged" };
REPAIR_ITEM_STATUS[12] = { val = 0, max = 0, cost = 0, name = INVENTORY_TOOLTIP };
INVENTORY_REPAIR_STATUS = {}
INVENTORY_REPAIR_STATUS[0] = { val = 0, max = 0, cost = 0, name = INVENTORY_TOOLTIP };
INVENTORY_REPAIR_STATUS[1] = { val = 0, max = 0, cost = 0, name = INVENTORY_TOOLTIP };
INVENTORY_REPAIR_STATUS[2] = { val = 0, max = 0, cost = 0, name = INVENTORY_TOOLTIP };
INVENTORY_REPAIR_STATUS[3] = { val = 0, max = 0, cost = 0, name = INVENTORY_TOOLTIP };
INVENTORY_REPAIR_STATUS[4] = { val = 0, max = 0, cost = 0, name = INVENTORY_TOOLTIP };
local TitRep_show_debug = false; -- will tell you a lot about what's happening
local Tit_R_WholeScanInProgress = false;
local Tit_R_UpdateCheckDelay = 2; -- 2 seconds must elaps between scans
local Tit_R_DelayTimer = 0; -- init the timer
local Tit_R_EquipedMinIndex = 0; -- keep a record of the most damaged equiped item (used when removing the most damaged item placed in the inventory to switch on an equiped index)
local Tit_R_PleaseCheckBag = { };
local Tit_R_CouldRepair = false;
local Tit_R_CheckForUpdate = false; -- tells the TitanPanelRepairButton_OnUpdate() function that it has something to do
Tit_R_PleaseCheckBag[0] = 0;
Tit_R_PleaseCheckBag[1] = 0;
Tit_R_PleaseCheckBag[2] = 0;
Tit_R_PleaseCheckBag[3] = 0;
Tit_R_PleaseCheckBag[4] = 0;
Tit_R_PleaseCheckBag[5] = 0; -- this will be used for equiped items, not very good but simplify the code...
-- Tit_R_PleaseCheckBag element values meaning:
-- 0 means "This bag did not changed, no need to scan it"
-- 1 means "Please Check This Bag"
-- 2 means "Yes I'm checking, don't disturb me"
--
local InitialLoad = 0; -- Found no use of this
StaticPopupDialogs["REPAIR_CONFIRMATION"] = {
text = TEXT(REPAIR_LOCALE["confirmation"]),
button1 = TEXT(YES),
button2 = TEXT(NO),
OnAccept = function()
TitanRepair_RepairItems();
end,
OnShow = function()
MoneyFrame_Update(this:GetName().."MoneyFrame", REPAIR_MONEY);
end,
hasMoneyFrame = 1,
timeout = 0,
};
function TitanPanelRepairButton_OnLoad()
-- register plugin
this.registry = {
id = TITAN_REPAIR_ID,
builtIn = 1,
version = "2.17.11000",
menuText = REPAIR_LOCALE["menu"],
buttonTextFunction = "TitanPanelRepairButton_GetButtonText",
tooltipTitle = REPAIR_LOCALE["tooltip"],
tooltipTextFunction = "TitanPanelRepairButton_GetTooltipText",
icon = "Interface\\AddOns\\Titan\\Artwork\\TitanRepair",
iconWidth = 16,
savedVariables = {
ShowIcon = 1,
ShowLabelText = 1,
ShowItemName = TITAN_NIL,
ShowUndamaged = TITAN_NIL,
ShowPopup = TITAN_NIL,
ShowPercentage = TITAN_NIL,
ShowColoredText = TITAN_NIL,
RepairInventory = TITAN_NIL,
ShowInventory = 1 -- this is no longer a problem :-D
}
};
this:RegisterEvent("PLAYER_LEAVING_WORLD");
this:RegisterEvent("PLAYER_ENTERING_WORLD");
end
function TitanPanelRepairButton_ScanAllItems()
if (TitanGetVar(TITAN_REPAIR_ID,"ShowInventory") == 1) then
Tit_R_PleaseCheckBag[0] = 1;
Tit_R_PleaseCheckBag[1] = 1;
Tit_R_PleaseCheckBag[2] = 1;
Tit_R_PleaseCheckBag[3] = 1;
Tit_R_PleaseCheckBag[4] = 1;
end
Tit_R_PleaseCheckBag[5] = 1;
Tit_R_WholeScanInProgress = true;
TitanPanelButton_UpdateButton(TITAN_REPAIR_ID);
end
function TitanPanelRepairButton_OnEvent()
-- NOTE that events test are done in probability order:
-- The events that fires the most are tested first
if (event == "UPDATE_INVENTORY_ALERTS") then
-- register to check the equiped items on next appropriate OnUpdate call
if (TitRep_show_debug) then -- this if is not necessary but is here to optimize this part the most possible
tit_debug_bis("Event " .. event .. " TREATED!");
end
Tit_R_PleaseCheckBag[5] = 1;
Tit_R_CheckForUpdate = true;
return;
end
-- when arg1 is > 4 it means that a bank's bag has been updated
if ( (event == "BAG_UPDATE") and (arg1 < 5) and (TitanGetVar(TITAN_REPAIR_ID,"ShowInventory") == 1)) then
-- register to check this bag's items on next appropriate OnUpdate call
if (TitRep_show_debug) then -- this if is not necessary but is here to optimize this part the most possible
tit_debug_bis("Event " .. event .. " TREATED!");
end
Tit_R_PleaseCheckBag[arg1] = 1;
Tit_R_CheckForUpdate = true;
return;
end
if (event == "MERCHANT_SHOW") then
if TitanGetVar(TITAN_REPAIR_ID,"ShowPopup") == 1 then
local repairCost, canRepair = GetRepairAllCost();
if (canRepair) then
Tit_R_CouldRepair = true;
if (TitanGetVar(TITAN_REPAIR_ID, "RepairInventory")) then
repairCost = repairCost + TitanRepair_GetRepairInvCost();
end
if (repairCost > 0) then
REPAIR_MONEY = repairCost;
StaticPopup_Show("REPAIR_CONFIRMATION");
end
end
end
return;
end
if ( event == "MERCHANT_CLOSED" ) then
StaticPopup_Hide("REPAIR_CONFIRMATION");
-- When an object is repaired in a bag, the BAG_UPDATE event is not sent... :'(
-- so we rescan all
if (Tit_R_CouldRepair) then
TitanPanelRepairButton_ScanAllItems();
Tit_R_CheckForUpdate = true;
Tit_R_CouldRepair = false;
end;
return;
end
if (event == "PLAYER_ENTERING_WORLD") then
this:RegisterEvent("BAG_UPDATE");
this:RegisterEvent("UPDATE_INVENTORY_ALERTS");
this:RegisterEvent("MERCHANT_SHOW");
this:RegisterEvent("MERCHANT_CLOSED");
-- Check everything on world enter (at init and after zoning)
-- (NOTE: this will take 6 * Tit_R_UpdateCheckDelay seconds to update)
TitanPanelRepairButton_ScanAllItems();
Tit_R_CheckForUpdate = true;
return;
end
if (event == "PLAYER_LEAVING_WORLD") then
this:UnregisterEvent("BAG_UPDATE");
this:UnregisterEvent("UPDATE_INVENTORY_ALERTS");
this:UnregisterEvent("MERCHANT_SHOW");
this:UnregisterEvent("MERCHANT_CLOSED");
return;
end
end
-- A little debug function
function tit_debug_bis( Message)
if (TitRep_show_debug) then
DEFAULT_CHAT_FRAME:AddMessage("TiT_Rep: " .. Message, 0.5, 0.3, 1);
end
end
function TitanPanelRepairButton_OnUpdate (Elapsed)
-- Note that Tit_R_CheckForUpdate is a boolean value, boolean values are easier to test for the cpu
if (not Tit_R_CheckForUpdate) then
return;
end
Tit_R_CheckForUpdate = false; -- this is the first thing we do so another event that fires while we are here can set it to true
-- test if a "bag" needs to be scanned
for tocheck = 0, 5 do
-- if there is one
if (Tit_R_PleaseCheckBag[tocheck] == 1) then
Tit_R_CheckForUpdate = true; -- so Tit_R_CheckForUpdate will remain false only if there WAS nothing to do :-) (The WAS is important)
-- and ONLY if no event fires while we were in this loop... We can't miss anything :-D
-- increase the delay timer
Tit_R_DelayTimer = Tit_R_DelayTimer + Elapsed;
-- if enough time has elapsed
if (Tit_R_DelayTimer > Tit_R_UpdateCheckDelay) then
-- we are checking...
Tit_R_PleaseCheckBag[tocheck] = 2;
-- reset the timer, next update will be made once Tit_R_UpdateCheckDelay seconds have elapsed from now
Tit_R_DelayTimer = 0;
if (tocheck ~= 5) then -- call update inventory function (I've put this test first because there is 5 chances on 6 that it returns true)
tit_debug_bis("Upadate: Checking bag " .. tocheck .. " as requested");
TitanRepair_GetInventoryInformation(tocheck);
else -- call update equiped items function
tit_debug_bis("Upadate: Checking equiped items as requested");
TitanRepair_GetEquipedInformation();
end
-- test if another check was not asked during this update (avoid to miss something... rare but still)
if (Tit_R_PleaseCheckBag[tocheck] ~= 1) then
-- Check completed
Tit_R_PleaseCheckBag[tocheck] = 0;
end
-- we break here since we don't have time to scan anything else.
break;
else
break;
end
end
end
-- These lines are commented because they're here just for debugging...
-- if (not Tit_R_CheckForUpdate) then
-- if we get here it means there was nothing to update (we've gone through 0 to 5 without hitting a bag to check that would have set Tit_R_CheckForUpdatep to true)
-- tit_debug_bis("***No more \"Please\" to handle, easy mode on");
-- end
end;
function TitanRepair_GetStatusPercent(val, max)
if (max > 0) then
return (val / max);
end
return 1.0;
end;
function TitanRepair_GetMostDamagedItem ()
-- Get repair status for Equiped items and inventory
-- NOTE: TitanRepair_GetStatusPercent() will return 1.0 if max value <= 0
local EquipedItemsStatus = TitanRepair_GetStatusPercent( REPAIR_ITEM_STATUS[Tit_R_EquipedMinIndex].val, REPAIR_ITEM_STATUS[Tit_R_EquipedMinIndex].max );
local InventoryItemsStatus = TitanRepair_GetStatusPercent( REPAIR_ITEM_STATUS[12].val, REPAIR_ITEM_STATUS[12].max );
-- if everything is repaired
if (EquipedItemsStatus == 1.0 and InventoryItemsStatus == 1.0) then
tit_debug_bis("Everything is repaired");
return 0;
end
-- If something is more or equaly damaged than the current most damaged equiped item
--
-- NOTE: The <= is important because InventoryItemsStatus is updated BEFORE EquipedItemsStatus
-- The typicale case is when you move the most damaged equiped item to your iventory,
-- when this function will be called by TitanRepair_GetInventoryInformation(), Tit_R_EquipedMinIndex will point to an empty slot:
-- since TitanRepair_GetEquipedInformation() won't have been called yet (bag update events are treated before equiped item event),
-- EquipedItemsStatus will be egual to InventoryItemsStatus...
-- So the <= is to avoid that Tit_R_EquipedMinIndex points to nothing (even if it has no concequence right now, it may save hours of debugging some day...)
if ( (InventoryItemsStatus <= EquipedItemsStatus) and (TitanGetVar(TITAN_REPAIR_ID,"ShowInventory") == 1) ) then
tit_debug_bis("Inventory is more damaged than equiped items");
return 12;
else -- if EquipedItemsStatus < InventoryItemsStatus
tit_debug_bis("Equiped items are more damaged than inventory");
return Tit_R_EquipedMinIndex;
end
-- Typical 6 possibilities:
-- - InventoryItemsStatus == 1 and EquipedItemsStatus == 1 ==> returns 0
-- - InventoryItemsStatus < 1 and EquipedItemsStatus == 1 ==> returns 12
-- - InventoryItemsStatus == 1 and EquipedItemsStatus < 1 ==> ! (InventoryItemsStatus <= EquipedItemsStatus) ==> returns Tit_R_EquipedMinIndex
-- - InventoryItemsStatus < 1 and EquipedItemsStatus < 1 :
-- - InventoryItemsStatus <= EquipedItemsStatus ==> returns 12
-- - InventoryItemsStatus > EquipedItemsStatus ==> ! (InventoryItemsStatus <= EquipedItemsStatus) ==> returns Tit_R_EquipedMinIndex
end;
function TitanRepair_GetInventoryInformation(bag)
local min_status = 1.0;
local min_val = 0;
local min_max = 0;
TitanRepairTooltip:SetOwner(WorldFrame, "ANCHOR_NONE");
if (bag > 4) then -- should never get true though, bag > 4 are for the bank's bags
return;
end
-- we re-scan the whole bag so we reset its status
INVENTORY_REPAIR_STATUS[bag].cost = 0; -- reset this bag globl repair cost
INVENTORY_REPAIR_STATUS[bag].val = 0; --
INVENTORY_REPAIR_STATUS[bag].max = 0; --
for slot = 1, GetContainerNumSlots(bag) do -- find the most damaged item of this bag
local act_status, act_val, act_max, act_cost = TitanRepair_GetStatus(slot, bag); -- retrieve slot's item repair status
if (act_status < min_status) then -- if this item is more damaged than the others
min_status = act_status;
min_val = act_val;
min_max = act_max;
-- set the global bag repair state to this item state
INVENTORY_REPAIR_STATUS[bag].val = act_val;
INVENTORY_REPAIR_STATUS[bag].max = act_max;
end
-- add this item cost to this bag global repair cost
INVENTORY_REPAIR_STATUS[bag].cost = INVENTORY_REPAIR_STATUS[bag].cost + act_cost;
end
-- We check all the bags so we reset the global inventory status
REPAIR_ITEM_STATUS[12].cost = 0; -- reset global repair cost for inventory
REPAIR_ITEM_STATUS[12].val = 0; --
REPAIR_ITEM_STATUS[12].max = 0; --
min_status = 1.0; -- reset min status to maximum
-- let's find the bag that contains the most damaged item of the inventory
for bag = 0, 4 do
local act_val = INVENTORY_REPAIR_STATUS[bag].val ;
local act_max = INVENTORY_REPAIR_STATUS[bag].max ;
local act_cost = INVENTORY_REPAIR_STATUS[bag].cost ;
local act_status= TitanRepair_GetStatusPercent(act_val, act_max);
-- if the bag contains a damaged item (else act_status == 1, and min_status <= 1 and so this if never get true)
if (act_status < min_status) then
min_status = act_status;
min_val = act_val;
min_max = act_max;
REPAIR_ITEM_STATUS[12].val = act_val;
REPAIR_ITEM_STATUS[12].max = act_max;
end
-- add each bag global repair cost to inventory global repair cost
REPAIR_ITEM_STATUS[12].cost = REPAIR_ITEM_STATUS[12].cost + act_cost;
end
REPAIR_INDEX = TitanRepair_GetMostDamagedItem();
tit_debug_bis("(inv) REPAIR_INDEX=" ..REPAIR_INDEX );
-- Update the button text only if we are not waiting for TitanRepair_GetEquipedInformation()
-- else an incorrect value may be displayed till TitanRepair_GetEquipedInformation() is called
-- if a whole scan is in progress we update the button ("Updating..." is displayed in that case, so incorrect values are acceptable)
if ( (Tit_R_PleaseCheckBag[5] == 0) or Tit_R_WholeScanInProgress ) then
TitanPanelButton_UpdateButton(TITAN_REPAIR_ID);
else
tit_debug_bis("Waiting for updating button text");
end
TitanPanelButton_UpdateTooltip();
TitanRepairTooltip:Hide();
end
function TitanRepair_GetEquipedInformation()
local min_status = 1.0;
local min_val = 0;
local min_max = 0;
local min_index = 0;
Tit_R_EquipedMinIndex = 0;
TitanRepairTooltip:SetOwner(WorldFrame, "ANCHOR_NONE");
for index, value in INVENTORY_ALERT_STATUS_SLOTS do -- index begins from 1
local act_status, act_val, act_max, act_cost = TitanRepair_GetStatus(index);
if ( act_status < min_status ) then
min_status = act_status;
min_val = act_val;
min_max = act_max;
min_index = index;
end
REPAIR_ITEM_STATUS[index].val = act_val;
REPAIR_ITEM_STATUS[index].max = act_max;
REPAIR_ITEM_STATUS[index].cost = act_cost;
end
Tit_R_EquipedMinIndex = min_index;
REPAIR_INDEX = TitanRepair_GetMostDamagedItem();
-- if a whole update is in progress, and we are here, then we have finished this wole update :)
-- it has to be here because it changes the text of the button.
if (Tit_R_WholeScanInProgress) then
Tit_R_WholeScanInProgress = false;
end
tit_debug_bis("(equip) REPAIR_INDEX=" ..REPAIR_INDEX .. " min_index=" .. min_index);
TitanPanelButton_UpdateButton(TITAN_REPAIR_ID);
TitanPanelButton_UpdateTooltip();
TitanRepairTooltip:Hide();
end
function TitanRepair_GetStatus(index, bag)
local val = 0;
local max = 0;
local cost = 0;
local hasItem, repairCost
if (bag) then
local _, lRepairCost = TitanRepairTooltip:SetBagItem(bag, index);
repairCost = lRepairCost;
hasItem = 1;
else
local slotName = REPAIR_ITEM_STATUS[index].slot .. "Slot";
local id = GetInventorySlotInfo(slotName);
local lHasItem, _, lRepairCost = TitanRepairTooltip:SetInventoryItem("player", id);
hasItem = lHasItem;
repairCost = lRepairCost;
end
if (hasItem) then
if (repairCost) then
cost = repairCost;
end
for i = 1, 30 do
local field = getglobal("TitanRepairTooltipTextLeft" .. i);
if (field ~= nil) then
local text = field:GetText();
if (text) then
-- find durability
local _, _, f_val, f_max = string.find(text, REPAIR_LOCALE["pattern"]);
if (f_val) then
val = tonumber(f_val);
max = tonumber(f_max);
end
end
end
end
end
return TitanRepair_GetStatusPercent(val, max), val, max, cost;
end
local Tit_R_LastKnownText = "";
local Tit_R_LastKnownItemFrac = 1.0;
function TitanRepair_GetStatusStr(index, short)
-- skip if fully repaired
if (index == 0) then
return TitanRepair_AutoHighlight(1.0, "100%");
end
local valueText = "";
-- if used for button text
if (short) then
valueText = Tit_R_LastKnownText;
end
local item_status = REPAIR_ITEM_STATUS[index];
local item_frac = TitanRepair_GetStatusPercent(item_status.val, item_status.max);
-- skip if empty slot
if (item_status.max == 0) then
if (short) then
if (not Tit_R_WholeScanInProgress) then
valueText = TitanRepair_AutoHighlight(Tit_R_LastKnownItemFrac, valueText .. " (" .. REPAIR_LOCALE["WholeScanInProgress"] .. ")");
else
valueText = TitanRepair_AutoHighlight(Tit_R_LastKnownItemFrac, valueText);
end
return valueText;
else
return nil;
end
end
-- percent or value
if (TitanGetVar(TITAN_REPAIR_ID,"ShowPercentage") or short) then
valueText = string.format("%d%%", item_frac * 100);
else
valueText = string.format("%d / %d", item_status.val, item_status.max);
end
-- color
valueText = TitanRepair_AutoHighlight(item_frac, valueText);
-- name
if (not short or TitanGetVar(TITAN_REPAIR_ID, "ShowItemName")) then
valueText = valueText .. " " .. item_status.name;
end
-- add repair cost
local item_cost = TitanRepair_GetCostStr(item_status.cost);
if (not short and item_cost) then
valueText = valueText .. "\t" .. item_cost;
end
if (short) then
Tit_R_LastKnownText = valueText;
Tit_R_LastKnownItemFrac = item_frac;
end
return valueText;
end
function TitanRepair_AutoHighlight (item_frac, valueText)
-- I've changed this so when the ratio is 1, the text is green (green means OK for FPS, Latency, etc...)
-- beneath 0.91 (so it can be true for 0.90) the text is white
-- and red if the ratio reach 0.20
-- I didn't check for <= 0.90 or <= 0.20 because fractional eguality test is not acurate...
if (TitanGetVar(TITAN_REPAIR_ID, "ShowColoredText")) then
if (item_frac == 0.0) then
valueText = TitanUtils_GetRedText(valueText);
elseif (item_frac < 0.21) then
valueText = TitanUtils_GetNormalText(valueText);
elseif (item_frac < 0.91) then
valueText = TitanUtils_GetHighlightText(valueText);
else
valueText = TitanUtils_GetGreenText(valueText);
end
else
valueText = TitanUtils_GetHighlightText(valueText);
end
return valueText;
end
function TitanRepair_GetCostStr(cost)
if (cost > 0) then
return TitanUtils_GetHighlightText(string.format("%.2fg" , cost / 10000));
end
return nil;
end
-- to move in the localisation files
REPAIR_LOCALE["WholeScanInProgress"] = "Updating...";
function TitanPanelRepairButton_GetButtonText(id)
-- supports turning off labels
if (not Tit_R_WholeScanInProgress) then
return REPAIR_LOCALE["button"], TitanRepair_GetStatusStr(REPAIR_INDEX, 1);
else
return REPAIR_LOCALE["button"], TitanRepair_GetStatusStr(REPAIR_INDEX, 1) .. " (" .. REPAIR_LOCALE["WholeScanInProgress"] .. ")";
end
end
function TitanPanelRepairButton_GetTooltipText()
local out = "";
local cost = 0;
local sum = 0;
for i = 1, table.getn(REPAIR_ITEM_STATUS) do
local str = TitanRepair_GetStatusStr(i);
cost = REPAIR_ITEM_STATUS[i].cost;
sum = sum + cost;
if ((str) and (TitanGetVar(TITAN_REPAIR_ID,"ShowUndamaged") or (cost > 0))) then
out = out .. str .. "\n";
end
end
if (sum > 0) then
local costStr = TitanRepair_GetCostStr(sum);
if (costStr) then
out = out .. "\n" .. REPAIR_COST .. " " .. costStr;
end
else
out = out .. "\n" .. REPAIR_LOCALE["nothing"];
end
return out;
end
function TitanPanelRightClickMenu_PrepareRepairMenu()
TitanPanelRightClickMenu_AddTitle(TitanPlugins[TITAN_REPAIR_ID].menuText);
local info = {};
info.text = REPAIR_LOCALE["percentage"];
info.func = TitanRepair_ShowPercentage;
info.checked = TitanGetVar(TITAN_REPAIR_ID,"ShowPercentage");
UIDropDownMenu_AddButton(info);
local info = {};
info.text = REPAIR_LOCALE["itemname"];
info.func = TitanRepair_ShowItemName;
info.checked = TitanGetVar(TITAN_REPAIR_ID,"ShowItemName");
UIDropDownMenu_AddButton(info);
local info = {};
info.text = REPAIR_LOCALE["undamaged"];
info.func = TitanRepair_ShowUndamaged;
info.checked = TitanGetVar(TITAN_REPAIR_ID,"ShowUndamaged");
UIDropDownMenu_AddButton(info);
local info = {};
info.text = REPAIR_LOCALE["popup"];
info.func = TitanRepair_ShowPop;
info.checked = TitanGetVar(TITAN_REPAIR_ID,"ShowPopup");
UIDropDownMenu_AddButton(info);
local info = {};
info.text = REPAIR_LOCALE["repinventory"];
info.func = TitanRepair_RepairInventory;
info.checked = TitanGetVar(TITAN_REPAIR_ID,"RepairInventory");
UIDropDownMenu_AddButton(info);
local info = {};
info.text = REPAIR_LOCALE["showinventory"];
info.func = TitanRepair_ShowInventory;
info.checked = TitanGetVar(TITAN_REPAIR_ID,"ShowInventory");
UIDropDownMenu_AddButton(info);
TitanPanelRightClickMenu_AddSpacer();
TitanPanelRightClickMenu_AddToggleIcon(TITAN_REPAIR_ID);
TitanPanelRightClickMenu_AddToggleLabelText(TITAN_REPAIR_ID);
TitanPanelRightClickMenu_AddToggleColoredText(TITAN_REPAIR_ID);
TitanPanelRightClickMenu_AddSpacer();
TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_REPAIR_ID, TITAN_PANEL_MENU_FUNC_HIDE);
end
function TitanRepair_ShowPercentage()
TitanToggleVar(TITAN_REPAIR_ID, "ShowPercentage");
TitanPanelButton_UpdateButton(TITAN_REPAIR_ID);
end
function TitanRepair_ShowItemName()
TitanToggleVar(TITAN_REPAIR_ID, "ShowItemName");
TitanPanelButton_UpdateButton(TITAN_REPAIR_ID);
end
function TitanRepair_ShowUndamaged()
TitanToggleVar(TITAN_REPAIR_ID, "ShowUndamaged");
end
function TitanRepair_ShowPop()
TitanToggleVar(TITAN_REPAIR_ID, "ShowPopup");
end
function TitanRepair_RepairInventory()
TitanToggleVar(TITAN_REPAIR_ID, "RepairInventory");
end
function TitanRepair_ShowInventory()
if (Tit_R_WholeScanInProgress) then
return;
end
tit_debug_bis("TitanRepair_ShowInventory has been called !!");
TitanToggleVar(TITAN_REPAIR_ID, "ShowInventory");
if TitanGetVar(TITAN_REPAIR_ID,"ShowInventory") ~= 1 then
REPAIR_ITEM_STATUS[12].cost = 0;
REPAIR_ITEM_STATUS[12].val = 0;
REPAIR_ITEM_STATUS[12].max = 0;
end
TitanPanelRepairButton_ScanAllItems();
Tit_R_CheckForUpdate = true;
end
function TitanRepair_RepairItems()
RepairAllItems();
if (not TitanGetVar(TITAN_REPAIR_ID, "RepairInventory")) then
return;
end
ShowRepairCursor();
local bag, slot
for bag = 0, 4 do
for slot = 1, GetContainerNumSlots(bag) do
local _, repairCost = TitanRepairTooltip:SetBagItem(bag, slot);
if (repairCost and (repairCost > 0)) then
UseContainerItem(bag,slot);
Tit_R_PleaseCheckBag[bag] = 1; -- this bag will be updated
Tit_R_CheckForUpdate = true;
end
end
end
HideRepairCursor();
end
function TitanRepair_GetRepairInvCost()
local result = 0;
local bag;
TitanRepairTooltip:SetOwner(WorldFrame, "ANCHOR_NONE");
for bag = 0, 4 do
for slot = 1, GetContainerNumSlots(bag) do
local _, repairCost = TitanRepairTooltip:SetBagItem(bag, slot);
if (repairCost and (repairCost > 0)) then
result = result + repairCost;
end
end
end
TitanRepairTooltip:Hide();
return result;
end