local addonName, addon = ... local childName = addon['childName'] local child = addon[childName] local events = child['events'] local db, player local L = LibStub("AceLocale-3.0"):GetLocale(childName, true) LibStub("zzHelper"):Embed(child) child['statusItem'] = {} local NUM_BAG_SLOTS = NUM_BAG_SLOTS local GetContainerItemLink = GetContainerItemLink local GetContainerItemInfo = GetContainerItemInfo local function prepareDB() db = addon['db']['profile'][childName] child['db'] = db addon['callbacks']:Fire(format("Init%s", childName)) end local slotNames = { "HeadSlot","NeckSlot","ShoulderSlot","BackSlot","ChestSlot","ShirtSlot","TabardSlot", "WristSlot","HandsSlot","WaistSlot","LegsSlot","FeetSlot","Finger0Slot","Finger1Slot", "Trinket0Slot","Trinket1Slot","MainHandSlot","SecondaryHandSlot", "Bag0Slot","Bag1Slot","Bag2Slot","Bag3Slot" } local function getGBLimit() local amount = GetGuildBankWithdrawMoney() local guildBankMoney = GetGuildBankMoney() if ( amount == -1 ) then amount = guildBankMoney else amount = min(amount, guildBankMoney) end return amount end local function itemInfo(id) local itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, itemEquipLoc, itemTexture, itemSellPrice = GetItemInfo(id) if(itemName) then return { ['itemId'] = id, ['itemName'] = itemName, ['itemLink'] = itemLink, ['itemRarity'] = itemRarity, ['itemLevel'] = itemLevel, ['itemMinLevel'] = itemMinLevel, ['itemType'] = itemType, ['itemSubType'] = itemSubType, ['itemStackCount'] = itemStackCount, ['itemEquipLoc'] = itemEquipLoc, ['itemTexture'] = itemTexture, ['itemSellPrice'] = itemSellPrice } end end local function CheckGrey(dont) local info,i = {},{} local a = 0 local numberOfSlots,link,id local earnedMoney = 0 while(a<=NUM_BAG_SLOTS) do numberOfSlots = C_Container.GetContainerNumSlots(a) local b = 1 while(b<=numberOfSlots) do local item = ItemLocation:CreateFromBagAndSlot(a, b) if(item:IsValid()) then -- link = C_Container.GetContainerItemLink(a, b) id = C_Item.GetItemID(item) info = itemInfo(id) if(info) then if(info['itemRarity'] == 0) then if(info['itemSellPrice'] and info['itemSellPrice'] > 0) then local cinfo = C_Container.GetContainerItemInfo(a, b) if(cinfo['stackCount']) then if(not dont) then print(L['solditem'](C_Item.GetItemLink(item), info['itemSellPrice'])) end earnedMoney = earnedMoney + info['itemSellPrice'] * cinfo['stackCount'] C_Container.PickupContainerItem(a, b) PickupMerchantItem() end end end end end b = b + 1 end a = a + 1 end if(earnedMoney > 0 and not dont) then print(L['earnedmoney'](earnedMoney)) end if(earnedMoney>0 and not dont) then C_Timer.After(1,function() CheckGrey(true) end) end end local function MERCHANT_SHOW() if(CanMerchantRepair()) then local m = GetMoney() local r = GetRepairAllCost() local gbr = false if(db['guildbankrepair']) then if(CanGuildBankRepair()) then gbr = true end end if(r > 0 and (m > r or gbr) and db['autorepair']) then if(gbr) then if(getGBLimit() >= r) then RepairAllItems(1) print(L['repaircostgb'](r)) else if(m > r) then RepairAllItems() print(L['repaircost'](r)) else print(child:colorize(L['Money low'],"ff0000")) end end else RepairAllItems() print(L['repaircost'](r)) end db['repairstats'] = db['repairstats'] or {} db['repairstats'][player] = db['repairstats'][player] or 0 db['repairstats'][player] = db['repairstats'][player] + r end end if(db['sellgrey']) then CheckGrey() end end function child:pickColor(v) local col = 'ffffff' if(v > 90) then col = '00ff00' -- grĂ¼n elseif(v > 40) then col = 'ffff00' -- gelb elseif(v > 0) then col = 'ff9900' -- orange else col = 'ff0000' -- rot end return col end function events:UPDATE_INVENTORY_DURABILITY() local percent = 0 local total = 0 local cur = 0 local lowest = 100 local statusItem = child['statusItem'] wipe(statusItem) for k,v in pairs(slotNames) do local current, maximum = GetInventoryItemDurability(GetInventorySlotInfo(v)) if(maximum) then total = total + maximum cur = cur + current statusItem[v] = child:round(current / (maximum/100),0) lowest = min(statusItem[v], lowest) end end if(db['showlowest']) then percent = lowest else percent = child:round(cur / (total/100),0) end percent = child:colorize(percent, child:pickColor(percent)) child:OnText(childName, format("%s %%", percent)) end events.UPDATE_INVENTORY_ALERTS = events.UPDATE_INVENTORY_DURABILITY events.UNIT_INVENTORY_CHANGED = events.UPDATE_INVENTORY_DURABILITY local function MFOpen(...) MERCHANT_SHOW() end child['specs'] = { ['name'] = childName, ['sv'] = true, ['cfg'] = true, ['cfgReset'] = prepareDB, ['ldb'] = child['ldb'], ['defaults'] = { ['profile'] = { [childName] = { ["autorepair"] = true, ["listall"] = true, ["showlowest"] = true, } } } } function events:PLAYER_ENTERING_WORLD(event) child:UnregisterEvent('PLAYER_ENTERING_WORLD') player = format("%s-%s", UnitFullName("player")) events.UPDATE_INVENTORY_DURABILITY() child:RegisterOpen(5, MFOpen) end child:NewAddOn(...)