Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- constants borrowed from PersonalLootHelper
- local PLH_RELIC_TOOLTIP_TYPE_PATTERN = _G.RELIC_TOOLTIP_TYPE:gsub('%%s', '(.+)')
- local PLH_ITEM_LEVEL_PATTERN = _G.ITEM_LEVEL:gsub('%%d', '(%%d+)')
- local frame = CreateFrame("Frame", "ItemLinkLevel");
- frame:RegisterEvent("PLAYER_LOGIN");
- local tooltip
- local socketTooltip
- -- Inhibit Regular Expression magic characters ^$()%.[]*+-?)
- local function EscapeSearchString(str)
- return str:gsub("(%W)","%%%1")
- end
- -- function borrowed from PersonalLootHelper
- local function CreateEmptyTooltip()
- local tip = CreateFrame('GameTooltip')
- local leftside = {}
- local rightside = {}
- local L, R
- for i = 1, 6 do
- L, R = tip:CreateFontString(), tip:CreateFontString()
- L:SetFontObject(GameFontNormal)
- R:SetFontObject(GameFontNormal)
- tip:AddFontStrings(L, R)
- leftside[i] = L
- rightside[i] = R
- end
- tip.leftside = leftside
- tip.rightside = rightside
- return tip
- end
- -- function borrowed from PersonalLootHelper
- local function PLH_GetRelicType(item)
- local relicType = nil
- if item ~= nil then
- tooltip = tooltip or CreateEmptyTooltip()
- tooltip:SetOwner(UIParent, 'ANCHOR_NONE')
- tooltip:ClearLines()
- tooltip:SetHyperlink(item)
- local t = tooltip.leftside[2]:GetText()
- local index = 1
- local t
- while not relicType and tooltip.leftside[index] do
- t = tooltip.leftside[index]:GetText()
- if t ~= nil then
- relicType = t:match(PLH_RELIC_TOOLTIP_TYPE_PATTERN)
- end
- index = index + 1
- end
- tooltip:Hide()
- end
- return relicType
- end
- -- function borrowed from PersonalLootHelper
- local function PLH_GetRealILVL(item)
- local realILVL = nil
- if item ~= nil then
- tooltip = tooltip or CreateEmptyTooltip()
- tooltip:SetOwner(UIParent, 'ANCHOR_NONE')
- tooltip:ClearLines()
- tooltip:SetHyperlink(item)
- local t = tooltip.leftside[2]:GetText()
- if t ~= nil then
- -- realILVL = t:match('Item Level (%d+)')
- realILVL = t:match(PLH_ITEM_LEVEL_PATTERN)
- end
- -- ilvl can be in the 2nd or 3rd line dependng on the tooltip; if we didn't find it in 2nd, try 3rd
- if realILVL == nil then
- t = tooltip.leftside[3]:GetText()
- if t ~= nil then
- -- realILVL = t:match('Item Level (%d+)')
- realILVL = t:match(PLH_ITEM_LEVEL_PATTERN)
- end
- end
- tooltip:Hide()
- -- if realILVL is still nil, we couldn't find it in the tooltip - try grabbing it from getItemInfo, even though
- -- that doesn't return upgrade levels
- if realILVL == nil then
- _, _, _, realILVL, _, _, _, _, _, _, _ = GetItemInfo(item)
- end
- end
- if realILVL == nil then
- return 0
- else
- return tonumber(realILVL)
- end
- end
- local function ItemHasSockets(itemLink)
- local result = false
- socketTooltip = socketTooltip or CreateFrame("GameTooltip", "ItemLinkLevelSocketTooltip", nil, "GameTooltipTemplate")
- socketTooltip:SetOwner(UIParent, 'ANCHOR_NONE')
- socketTooltip:ClearLines()
- for i = 1, 30 do
- local texture = _G[socketTooltip:GetName().."Texture"..i]
- if texture then
- texture:SetTexture(nil)
- end
- end
- socketTooltip:SetHyperlink(itemLink)
- for i = 1, 30 do
- local texture = _G[socketTooltip:GetName().."Texture"..i]
- local textureName = texture and texture:GetTexture()
- if textureName then
- local canonicalTextureName = string.gsub(string.upper(textureName), "\\", "/")
- result = string.find(canonicalTextureName, EscapeSearchString("ITEMSOCKETINGFRAME/UI-EMPTYSOCKET-")) or string.find(canonicalTextureName, EscapeSearchString("458977"))
- end
- end
- return result
- end
- local function ItemHasCorruption(itemLink)
- local result = false
- local isCorruptedItem = IsCorruptedItem(itemLink)
- if isCorruptedItem ~=nil then
- result = isCorruptedItem
- end
- return result
- end
- local function CorruptionTier(itemLink)
- local tier = false
- if (ItemHasCorruption(itemLink)) then
- local itemString = string.match(itemLink, "item[%-?%d:]+")
- itemString = itemString:sub(1, -14)
- itemString = string.sub(itemString, -4)
- --print(itemString)
- t1 ={"6437","6471","6474","6477","6480","6483","6493","6537","6540","6543","6547","6549","6552","6555","6556","6557","6558","6612"}
- t2 ={"6438","6472","6475","6478","6481","6484","6486","6494","6538","6541","6544","6546","6548","6550","6553","6559","6561","6563","6565","6573","6613"}
- t3 ={"6439","6473","6476","6479","6482","6485","6495","6539","6542","6545","6551","6554","6560","6562","6564","6566","6614"}
- for i=1,#t2 do
- if (itemString == t1[i]) then
- tier = "1"
- elseif (itemString == t2[i]) then
- tier = "2"
- elseif (itemString == t3[i]) then
- tier = "3"
- end
- end
- end
- return tier
- end
- local function Filter(self, event, message, user, ...)
- for itemLink in message:gmatch("|%x+|Hitem:.-|h.-|h|r") do
- local itemName, _, quality, _, _, itemType, itemSubType, _, itemEquipLoc, _, _, itemClassId, itemSubClassId = GetItemInfo(itemLink)
- if (quality ~= nil and quality >= SavedData.trigger_quality and (itemClassId == LE_ITEM_CLASS_WEAPON or itemClassId == LE_ITEM_CLASS_GEM or itemClassId == LE_ITEM_CLASS_ARMOR)) then
- local itemString = string.match(itemLink, "item[%-?%d:]+")
- local _, _, color = string.find(itemLink, "|?c?f?f?(%x*)|?H?([^:]*):?(%d+):?(%d*):?(%d*):?(%d*):?(%d*):?(%d*):?(%-?%d*):?(%-?%d*):?(%d*):?(%d*):?(%-?%d*)|?h?%[?([^%[%]]*)%]?|?h?|?r?")
- local iLevel = PLH_GetRealILVL(itemLink)
- local attrs = {}
- if (SavedData.show_subtype and itemSubType ~= nil) then
- if (itemClassId == LE_ITEM_CLASS_ARMOR and itemSubClassId == 0) then
- -- don't display Miscellaneous for rings, necks and trinkets
- elseif (itemClassId == LE_ITEM_CLASS_ARMOR and itemEquipLoc == "INVTYPE_CLOAK") then
- -- don't display Cloth for cloaks
- else
- if (SavedData.subtype_short_format) then
- table.insert(attrs, itemSubType:sub(0, 1))
- else
- table.insert(attrs, itemSubType)
- end
- end
- if (itemClassId == LE_ITEM_CLASS_GEM and itemSubClassId == LE_ITEM_ARMOR_RELIC) then
- local relicType = PLH_GetRelicType(itemLink)
- table.insert(attrs, relicType)
- end
- end
- if (SavedData.show_equiploc and itemEquipLoc ~= nil and _G[itemEquipLoc] ~= nil) then table.insert(attrs, _G[itemEquipLoc]) end
- if (SavedData.show_ilevel and iLevel ~= nil) then
- local txt = iLevel
- if (ItemHasSockets(itemLink)) then txt = txt .. "+S" end
- if (ItemHasCorruption(itemLink)) then txt = txt .. "+C" end
- if (CorruptionTier(itemLink)) then txt = txt .. CorruptionTier(itemLink) end
- table.insert(attrs, txt)
- end
- local newItemName = itemName.." ("..table.concat(attrs, " ")..")"
- local newLink = "|cff"..color.."|H"..itemString.."|h["..newItemName.."]|h|r"
- message = string.gsub(message, EscapeSearchString(itemLink), newLink)
- end
- end
- return false, message, user, ...
- end
- local function EventHandler(self, event, ...)
- if (SavedData == nil) then SavedData = {} end
- if (SavedData.trigger_loots == nil) then SavedData.trigger_loots = true end
- if (SavedData.trigger_chat == nil) then SavedData.trigger_chat = true end
- if (SavedData.trigger_quality == nil) then SavedData.trigger_quality = 3 end
- if (SavedData.show_subtype == nil) then SavedData.show_subtype = true end
- if (SavedData.subtype_short_format == nil) then SavedData.subtype_short_format = false end
- if (SavedData.show_equiploc == nil) then SavedData.show_equiploc = true end
- if (SavedData.show_ilevel == nil) then SavedData.show_ilevel = true end
- if (SavedData.trigger_loots) then
- ChatFrame_AddMessageEventFilter("CHAT_MSG_LOOT", Filter);
- end
- if (SavedData.trigger_chat) then
- ChatFrame_AddMessageEventFilter("CHAT_MSG_BATTLEGROUND", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_BATTLEGROUND_LEADER", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_CHANNEL", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_EMOTE", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_GUILD", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_INSTANCE_CHAT", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_INSTANCE_CHAT_LEADER", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_OFFICER", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_PARTY", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_PARTY_LEADER", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_RAID", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_RAID_LEADER", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_RAID_WARNING", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_SAY", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_WHISPER", Filter);
- ChatFrame_AddMessageEventFilter("CHAT_MSG_WHISPER_INFORM", Filter)
- ChatFrame_AddMessageEventFilter("CHAT_MSG_YELL", Filter);
- end
- local panel = CreateFrame("Frame", "OptionsPanel", UIParent)
- panel.name = "ItemLinkLevel"
- local subtypeCheckBox = CreateFrame("CheckButton", "subtypeCheckBox", panel, "UICheckButtonTemplate")
- subtypeCheckBox:SetPoint("TOPLEFT",10, -30)
- subtypeCheckBox:SetChecked(SavedData.show_subtype)
- _G[subtypeCheckBox:GetName().."Text"]:SetText("Display armor/weapon type (Plate, Leather, ...)")
- subtypeCheckBox:SetScript("OnClick", function(self) SavedData.show_subtype = self:GetChecked() end)
- local subtypeShortCheckBox = CreateFrame("CheckButton", "subtypeShortCheckBox", panel, "UICheckButtonTemplate")
- subtypeShortCheckBox:SetPoint("TOPLEFT",30, -60)
- subtypeShortCheckBox:SetChecked(SavedData.subtype_short_format)
- _G[subtypeShortCheckBox:GetName().."Text"]:SetText("Short format (P for plate, L for leather, ...)")
- subtypeShortCheckBox:SetScript("OnClick", function(self) SavedData.subtype_short_format = self:GetChecked() end)
- local equipLocCheckbox = CreateFrame("CheckButton", "equipLocCheckbox", panel, "UICheckButtonTemplate")
- equipLocCheckbox:SetPoint("TOPLEFT",10, -90)
- equipLocCheckbox:SetChecked(SavedData.show_equiploc)
- _G[equipLocCheckbox:GetName().."Text"]:SetText("Display equip location (Head, Trinket, ...)")
- equipLocCheckbox:SetScript("OnClick", function(self) SavedData.show_equiploc = self:GetChecked() end)
- local iLevelCheckbox = CreateFrame("CheckButton", "iLevelCheckbox", panel, "UICheckButtonTemplate")
- iLevelCheckbox:SetPoint("TOPLEFT",10, -120)
- iLevelCheckbox:SetChecked(SavedData.show_ilevel)
- _G[iLevelCheckbox:GetName().."Text"]:SetText("Display item level")
- iLevelCheckbox:SetScript("OnClick", function(self) SavedData.show_ilevel = self:GetChecked() end)
- local triggerLootsCheckbox = CreateFrame("CheckButton", "triggerLootsCheckbox", panel, "UICheckButtonTemplate")
- triggerLootsCheckbox:SetPoint("TOPLEFT",10, -180)
- triggerLootsCheckbox:SetChecked(SavedData.trigger_loots)
- _G[triggerLootsCheckbox:GetName().."Text"]:SetText("Trigger on loots (requires restart)")
- triggerLootsCheckbox:SetScript("OnClick", function(self) SavedData.trigger_loots = self:GetChecked() end)
- local triggerChatCheckbox = CreateFrame("CheckButton", "triggerChatCheckbox", panel, "UICheckButtonTemplate")
- triggerChatCheckbox:SetPoint("TOPLEFT",10, -210)
- triggerChatCheckbox:SetChecked(SavedData.trigger_chat)
- _G[triggerChatCheckbox:GetName().."Text"]:SetText("Trigger on chat messages (requires restart)")
- triggerChatCheckbox:SetScript("OnClick", function(self) SavedData.trigger_chat = self:GetChecked() end)
- local triggerQualityLabel = panel:CreateFontString("triggerQualityLabel", panel, "GameFontNormal")
- triggerQualityLabel:SetText("Minimum trigger quality")
- triggerQualityLabel:SetPoint("TOPLEFT",10,-260)
- local triggerQualityValue = panel:CreateFontString("triggerQualityValue", panel, "GameFontNormal")
- local triggerQualitySlider = CreateFrame("Slider", "MySliderGlobalName", panel, "OptionsSliderTemplate")
- triggerQualitySlider:SetPoint("LEFT", triggerQualityLabel, "RIGHT", 10, 0)
- triggerQualitySlider:SetMinMaxValues(0, 6)
- triggerQualitySlider:SetValue(SavedData.trigger_quality)
- triggerQualitySlider:SetValueStep(1)
- getglobal(triggerQualitySlider:GetName() .. 'Low'):SetText(_G["ITEM_QUALITY0_DESC"])
- getglobal(triggerQualitySlider:GetName() .. 'High'):SetText(_G["ITEM_QUALITY6_DESC"])
- triggerQualitySlider:SetScript("OnValueChanged", function(self, value)
- value = math.floor(value)
- SavedData.trigger_quality = value
- triggerQualityValue:SetText(_G["ITEM_QUALITY"..value.."_DESC"])
- end)
- triggerQualityValue:SetText(_G["ITEM_QUALITY"..SavedData.trigger_quality.."_DESC"])
- triggerQualityValue:SetPoint("LEFT", triggerQualitySlider, "RIGHT", 10, 0)
- InterfaceOptions_AddCategory(panel)
- end
- frame:SetScript("OnEvent", EventHandler);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement