Go to most recent revision | Compare with Previous | Blame | View Log
--replace : with \58 --localize --clean up code and make it well-documented --add queuing system for multiple items --collect all enchant ids & remove need for dropdown -- ESOutpost © ZAM Network LLC -- All Rights Reserved local wm = GetWindowManager() local strformat = string.format local IsItemBound = IsItemBound local ZO_Alert = ZO_Alert local M = ESOutpostMaps local gui = ESOutpostGUI local dataForString = {} local server local function strsplit(inputstr, sep) local t, i = {}, 1 for str in string.gmatch(inputstr, "([^"..sep.."]+)") do t[i] = str i = i + 1 end return t end local function RGBPercToHex(r,g,b) r = r <= 1 and r >= 0 and r or 0 g = g <= 1 and g >= 0 and g or 0 b = b <= 1 and b >= 0 and b or 0 return string.format("%02x%02x%02x", r*255, g*255, b*255) end local function wipe(tbl) for k,v in pairs(tbl) do k = nil end end local function DataIsComplete() local missingText = "|cC5C29EESO|rutpost: Your data is not complete." local isComplete if not gui.lvlNum:IsHidden() and gui.lvlNum:GetText() == "" then --d("missing level") isComplete = false --elseif not gui.staffType:IsHidden() and gui.staffType.dropdown:GetSelectedItem() == "Type" then --d("missing stafftype") --isComplete = false elseif not gui.traitValuebg:IsHidden() and gui.traitValue:GetText() == "" then --d("missing traitvalue") isComplete = false elseif not gui.enchant:IsHidden() and gui.enchant.dropdown:GetSelectedItem() == "Select Enchant" then --d("missing enchant") isComplete = false elseif (not gui.enchantValueXbg:IsHidden() and gui.enchantValueX:GetText() == "") or (not gui.enchantValueYbg:IsHidden() and gui.enchantValueY:GetText() == "") then --d("missing enchantvalue") isComplete = false else --d("data complete!") isComplete = true end if isComplete then return true else ZO_Alert(nil, SOUNDS.SKILL_GAINED, missingText) return false end end local function GenerateString() if not DataIsComplete() then return else gui.genstring:SetText("Generating String") dataForString[5] = (gui.lvlNum.vr and "VR" or "")..gui.lvlNum:GetText() --dataForString[8] = gui.staffType.hash -- or "" dataForString[12] = gui.traitValue:GetText() --== "" and "" or gui.traitValue:GetText() dataForString[13] = gui.enchant.hash -- or "" dataForString[14] = gui.enchantValueX:GetText() --== "" and "" or gui.enchantValueX:GetText() dataForString[15] = gui.enchantValueY:GetText() --== "" and "" or gui.enchantValueY:GetText() gui.genstring:SetText(table.concat(dataForString, ":")) gui.copy:SetEnabled(true) end end gui.generate:SetHandler("OnClicked", GenerateString) --[[local function StaffTypeToggle(itemType, isStaff) gui.staffType.dropdown:SetSelectedItem("Type") gui.staffType.hash = "" gui.type:ClearAnchors() gui.staffType:SetHidden(not isStaff) if itemType == ITEMTYPE_WEAPON and isStaff then gui.type:SetAnchor(LEFT, gui.staffType, RIGHT, 10, 1) else gui.type:SetAnchor(LEFT, gui.lvlNumbg, RIGHT, 15, 0) end gui.type:SetAnchor(TOPRIGHT, gui.name, BOTTOMRIGHT, 0, 6) end]] local function ItemTraitToggle(hasTrait, hasStatValue, stat) gui.trait:ClearAnchors() if not hasStatValue then gui.trait:SetAnchor(LEFT, gui.statValue, LEFT) else gui.trait:SetAnchor(LEFT, gui.statValue, RIGHT, 20, 0) end gui.traitValue:Clear() gui.traitValuebg:SetHidden(not hasTrait) end local canShowEnchants = {[ITEMTYPE_WEAPON] = true, [ITEMTYPE_ARMOR] = true, [ITEMTYPE_GLYPH_WEAPON] = true, [ITEMTYPE_GLYPH_JEWELRY] = true, [ITEMTYPE_GLYPH_ARMOR] = true} local function EnchantToggle(rawItemType, weaponType, equipType, isLocked) if canShowEnchants[rawItemType] then gui.enchant:SetHidden(false) gui.enchant.dropdown:ClearItems() local enchants if equipType == EQUIP_TYPE_RING or equipType == EQUIP_TYPE_NECK or rawItemType == ITEMTYPE_GLYPH_JEWELRY then enchants = M.jewelryEnchants elseif rawItemType == ITEMTYPE_ARMOR or weaponType == "shield" or rawItemType == ITEMTYPE_GLYPH_ARMOR then enchants = M.armorEnchants else enchants = M.weaponEnchants end for i=1,#enchants do local entry = gui.enchant.dropdown:CreateItemEntry(enchants[i].text, gui.enchant.callback) entry.vars = enchants[i].vars entry.hash = enchants[i].hash gui.enchant.dropdown:AddItem(entry, ZO_COMBOBOX_SUPRESS_UPDATE) end else gui.enchant:SetHidden(true) end gui.enchant.dropdown:SetSelectedItem("Select Enchant") gui.enchantValueX:Clear() gui.enchantValueY:Clear() gui.enchantValueXbg:SetHidden(true) gui.enchantValueYbg:SetHidden(true) gui.enchant.type = "" gui.enchant.hash = "" if isLocked then gui.locked:SetDimensions(16, 16) else gui.locked:SetDimensions(0, 0) end end local function CanCollectData(control, silent) if control == GuiRoot then return end if not M.server[server] then if not silent then ZO_Alert(nil, SOUNDS.SKILL_GAINED, "|cC5C29EESO|rutpost: You must be on either the NA or EU Megaserver to sell an item through |cC5C29EESO|rutpost.") end return false elseif control.bagId == 0 then if not silent then ZO_Alert(nil, SOUNDS.SKILL_GAINED, "|cC5C29EESO|rutpost: You cannot appraise an item that is equipped.") end return false elseif control:GetParent() == ZO_BuyBackListContents or control:GetParent() == ZO_StoreWindowListContents then if not silent then ZO_Alert(nil, SOUNDS.SKILL_GAINED, "|cC5C29EESO|rutpost: You cannot appraise an item from this window.") end return false elseif not control.dataEntry or not control.dataEntry.data or not control.dataEntry.data.bagId then return false elseif IsItemBound(control.dataEntry.data.bagId, control.dataEntry.data.slotIndex) then if not silent then ZO_Alert(nil, SOUNDS.SKILL_GAINED, "|cC5C29EESO|rutpost: You cannot sell that item.") end return false else return true end end function CollectESOutpostItemData() --global - keybound function local control = moc() if control.outpostBtn then control = control.row end if not CanCollectData(control) then return end local controlData = control.dataEntry.data local bagId = controlData.bagId local slotIndex = controlData.slotIndex gui.tooltip:ClearLines() gui.tooltip:SetBagItem(bagId, slotIndex) wipe(dataForString) gui.genstring:Clear() gui.copy:SetEnabled(false) local link = GetItemLink(bagId, slotIndex) local itemLinkData = strsplit(link, ":") local icon, stack, _, _, locked, equipType, itemStyle, quality = GetItemInfo(bagId, slotIndex) local soundCat = GetItemSoundCategory(bagId, slotIndex) PlayItemSound(soundCat, ITEM_SOUND_ACTION_SLOT) gui.icon.texture:SetTexture(icon) local name = controlData.name gui.name:SetText(strformat("%s|c%s%s", stack>1 and "x"..stack.." " or "", RGBPercToHex(GetInterfaceColor(INTERFACE_COLOR_TYPE_ITEM_QUALITY_COLORS, quality)), name)) local level = tonumber(itemLinkData[5]) local isVeteran = level > 49 gui.lvl:SetText(isVeteran and "|t32:32:EsoUI\\Art\\UnitFrames\\target_veteranrank_icon.dds|tRank" or "Level") gui.lvlNum:SetText(isVeteran and GetItemLevel(bagId, slotIndex)-50-quality or level or 0) gui.lvlNum.vr = isVeteran local rawItemType = GetItemType(bagId, slotIndex) or "none" local weaponType, armorType, itemType if rawItemType == ITEMTYPE_WEAPON then --itemType = M.weaponType[soundCat] and M.weaponType[soundCat].text or "Weapon" weaponType = GetItemWeaponType(link) itemType = GetString("SI_WEAPONTYPE", weaponType) or "Weapon" elseif rawItemType == ITEMTYPE_ARMOR then --itemType = M.armorType[soundCat] and M.armorType[soundCat].text or "Armor" armorType = GetItemArmorType(link) itemType = GetString("SI_ARMORTYPE", armorType) itemType = itemType and itemType.." Armor" or "Armor" else itemType = GetString("SI_ITEMTYPE", rawItemType) end local equipTypeText = GetString("SI_EQUIPTYPE", equipType) or "" gui.type:SetText(strformat("%s%s", itemType, equipTypeText=="" and "" or " ("..equipTypeText..")")) --StaffTypeToggle(rawItemType, soundCat == ITEM_SOUND_CATEGORY_STAFF) local statValue = controlData.statValue --or 0 local rawTrait = GetItemTrait(bagId, slotIndex) local trait = GetString("SI_ITEMTRAITTYPE", rawTrait) gui.statValue:SetText(statValue>0 and strformat("%s %d", (weaponType == "shield" and "Armor") or (rawItemType == ITEMTYPE_WEAPON and "Damage") or (rawItemType == ITEMTYPE_ARMOR and "Armor"), statValue) or "") gui.trait:SetText(rawTrait>0 and trait or "") ItemTraitToggle(rawTrait>0, statValue>0, statValue) EnchantToggle(rawItemType, weaponType, equipType, locked) dataForString = { [1] = name:gsub(":", [[\58]]), [2] = M.itemQuality[quality], [3] = stack, [4] = icon:sub(18, -5), --only the file name of the icon, not the whole path [5] = "", --placeholder for level - double-check this number before generating the string [6] = M.itemType[rawItemType] or "", [7] = weaponType and M.weaponType[weaponType] or armorType and M.armorType[armorType] or "", [8] = "", --"None" - placeholder for staffType [9] = M.equipType[equipType] or "", [10] = statValue or "", [11] = M.traitType[rawTrait], [12] = "", --placeholder for traitValue [13] = "", --placeholder for enchant [14] = "", --placeholder for enchant valueX [15] = "", --placeholder for enchant valueY [16] = locked and "l" or "u", [17] = M.itemStyle[itemStyle] or "", [18] = itemLinkData[3], --itemID [19] = M.server[server] or "" } gui:SetHidden(false) end --EVENT_MANAGER:RegisterForEvent("ESOutpost", EVENT_PLAYER_ACTIVATED, function(event, addon) EVENT_MANAGER:RegisterForEvent("ESOutpost", EVENT_ADD_ON_LOADED, function(event, addon) if addon == "ESOutpost" then ZO_CreateStringId("SI_BINDING_NAME_ESOUTPOST_LINK", "Get ESOutpost Link") local keybindStripDescriptor = { alignment = KEYBIND_STRIP_ALIGN_RIGHT, order = 1000, name = "ESOutpost", keybind = "ESOUTPOST_LINK", callback = function(descriptor) CollectESOutpostItemData() end, --[[visible = function(descriptor) if CanCollectData(moc(), true) then return true else return false end end,]] icon = "ESOutpost\\ESO-Outpost-Logo-Small.dds", } local keybindAdded local function KeybindVisibility() if CanCollectData(moc(), true) then if not keybindAdded then KEYBIND_STRIP:AddKeybindButton(keybindStripDescriptor) keybindAdded = true end else if keybindAdded then KEYBIND_STRIP:RemoveKeybindButton(keybindStripDescriptor) keybindAdded = false end end end KEYBIND_STRIP.keybinds["ESOUTPOST_LINK"] = nil --why do I need this??? ZO_PlayerInventory:SetHandler("OnShow", function() EVENT_MANAGER:RegisterForUpdate("ESOutpostKeybindVisibility", 100, KeybindVisibility) --KEYBIND_STRIP:AddKeybindButton(keybindStripDescriptor) end) ZO_PlayerInventory:SetHandler("OnHide", function() --KEYBIND_STRIP:RemoveKeybindButton(keybindStripDescriptor) EVENT_MANAGER:RegisterForUpdate("ESOutpostKeybindVisibility") end) --ZO_PlayerBank --ZO_GuildBank gui:CreateInventoryButtons() server = GetCVar("LastRealm") end end)