Advertisement
Guest User

main.lua

a guest
Jan 24th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.42 KB | None | 0 0
  1. -- constants borrowed from PersonalLootHelper
  2. local PLH_RELIC_TOOLTIP_TYPE_PATTERN = _G.RELIC_TOOLTIP_TYPE:gsub('%%s', '(.+)')
  3. local PLH_ITEM_LEVEL_PATTERN = _G.ITEM_LEVEL:gsub('%%d', '(%%d+)')
  4.  
  5. local frame = CreateFrame("Frame", "ItemLinkLevel");
  6. frame:RegisterEvent("PLAYER_LOGIN");
  7. local tooltip
  8. local socketTooltip
  9.  
  10. -- Inhibit Regular Expression magic characters ^$()%.[]*+-?)
  11. local function EscapeSearchString(str)
  12. return str:gsub("(%W)","%%%1")
  13. end
  14.  
  15. -- function borrowed from PersonalLootHelper
  16. local function CreateEmptyTooltip()
  17. local tip = CreateFrame('GameTooltip')
  18. local leftside = {}
  19. local rightside = {}
  20. local L, R
  21. for i = 1, 6 do
  22. L, R = tip:CreateFontString(), tip:CreateFontString()
  23. L:SetFontObject(GameFontNormal)
  24. R:SetFontObject(GameFontNormal)
  25. tip:AddFontStrings(L, R)
  26. leftside[i] = L
  27. rightside[i] = R
  28. end
  29. tip.leftside = leftside
  30. tip.rightside = rightside
  31. return tip
  32. end
  33.  
  34. -- function borrowed from PersonalLootHelper
  35. local function PLH_GetRelicType(item)
  36. local relicType = nil
  37.  
  38. if item ~= nil then
  39. tooltip = tooltip or CreateEmptyTooltip()
  40. tooltip:SetOwner(UIParent, 'ANCHOR_NONE')
  41. tooltip:ClearLines()
  42. tooltip:SetHyperlink(item)
  43. local t = tooltip.leftside[2]:GetText()
  44.  
  45. local index = 1
  46. local t
  47. while not relicType and tooltip.leftside[index] do
  48. t = tooltip.leftside[index]:GetText()
  49. if t ~= nil then
  50. relicType = t:match(PLH_RELIC_TOOLTIP_TYPE_PATTERN)
  51. end
  52. index = index + 1
  53. end
  54.  
  55. tooltip:Hide()
  56. end
  57.  
  58. return relicType
  59. end
  60.  
  61. -- function borrowed from PersonalLootHelper
  62. local function PLH_GetRealILVL(item)
  63. local realILVL = nil
  64.  
  65. if item ~= nil then
  66. tooltip = tooltip or CreateEmptyTooltip()
  67. tooltip:SetOwner(UIParent, 'ANCHOR_NONE')
  68. tooltip:ClearLines()
  69. tooltip:SetHyperlink(item)
  70. local t = tooltip.leftside[2]:GetText()
  71. if t ~= nil then
  72. -- realILVL = t:match('Item Level (%d+)')
  73. realILVL = t:match(PLH_ITEM_LEVEL_PATTERN)
  74. end
  75. -- ilvl can be in the 2nd or 3rd line dependng on the tooltip; if we didn't find it in 2nd, try 3rd
  76. if realILVL == nil then
  77. t = tooltip.leftside[3]:GetText()
  78. if t ~= nil then
  79. -- realILVL = t:match('Item Level (%d+)')
  80. realILVL = t:match(PLH_ITEM_LEVEL_PATTERN)
  81. end
  82. end
  83. tooltip:Hide()
  84.  
  85. -- if realILVL is still nil, we couldn't find it in the tooltip - try grabbing it from getItemInfo, even though
  86. -- that doesn't return upgrade levels
  87. if realILVL == nil then
  88. _, _, _, realILVL, _, _, _, _, _, _, _ = GetItemInfo(item)
  89. end
  90. end
  91.  
  92. if realILVL == nil then
  93. return 0
  94. else
  95. return tonumber(realILVL)
  96. end
  97. end
  98.  
  99. local function ItemHasSockets(itemLink)
  100. local result = false
  101. socketTooltip = socketTooltip or CreateFrame("GameTooltip", "ItemLinkLevelSocketTooltip", nil, "GameTooltipTemplate")
  102. socketTooltip:SetOwner(UIParent, 'ANCHOR_NONE')
  103. socketTooltip:ClearLines()
  104. for i = 1, 30 do
  105. local texture = _G[socketTooltip:GetName().."Texture"..i]
  106. if texture then
  107. texture:SetTexture(nil)
  108. end
  109. end
  110. socketTooltip:SetHyperlink(itemLink)
  111. for i = 1, 30 do
  112. local texture = _G[socketTooltip:GetName().."Texture"..i]
  113. local textureName = texture and texture:GetTexture()
  114.  
  115. if textureName then
  116. local canonicalTextureName = string.gsub(string.upper(textureName), "\\", "/")
  117. result = string.find(canonicalTextureName, EscapeSearchString("ITEMSOCKETINGFRAME/UI-EMPTYSOCKET-")) or string.find(canonicalTextureName, EscapeSearchString("458977"))
  118. end
  119. end
  120. return result
  121. end
  122.  
  123. local function ItemHasCorruption(itemLink)
  124. local result = false
  125. local isCorruptedItem = IsCorruptedItem(itemLink)
  126.  
  127. if isCorruptedItem ~=nil then
  128. result = isCorruptedItem
  129. end
  130.  
  131. return result
  132. end
  133. local function CorruptionTier(itemLink)
  134. local tier = false
  135. if (ItemHasCorruption(itemLink)) then
  136. local itemString = string.match(itemLink, "item[%-?%d:]+")
  137. itemString = itemString:sub(1, -14)
  138. itemString = string.sub(itemString, -4)
  139. --print(itemString)
  140.  
  141. t1 ={"6437","6471","6474","6477","6480","6483","6493","6537","6540","6543","6547","6549","6552","6555","6556","6557","6558","6612"}
  142. t2 ={"6438","6472","6475","6478","6481","6484","6486","6494","6538","6541","6544","6546","6548","6550","6553","6559","6561","6563","6565","6573","6613"}
  143. t3 ={"6439","6473","6476","6479","6482","6485","6495","6539","6542","6545","6551","6554","6560","6562","6564","6566","6614"}
  144. for i=1,#t2 do
  145. if (itemString == t1[i]) then
  146. tier = "1"
  147. elseif (itemString == t2[i]) then
  148. tier = "2"
  149. elseif (itemString == t3[i]) then
  150. tier = "3"
  151. end
  152. end
  153. end
  154. return tier
  155. end
  156.  
  157. local function Filter(self, event, message, user, ...)
  158. for itemLink in message:gmatch("|%x+|Hitem:.-|h.-|h|r") do
  159. local itemName, _, quality, _, _, itemType, itemSubType, _, itemEquipLoc, _, _, itemClassId, itemSubClassId = GetItemInfo(itemLink)
  160. 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
  161. local itemString = string.match(itemLink, "item[%-?%d:]+")
  162. local _, _, color = string.find(itemLink, "|?c?f?f?(%x*)|?H?([^:]*):?(%d+):?(%d*):?(%d*):?(%d*):?(%d*):?(%d*):?(%-?%d*):?(%-?%d*):?(%d*):?(%d*):?(%-?%d*)|?h?%[?([^%[%]]*)%]?|?h?|?r?")
  163. local iLevel = PLH_GetRealILVL(itemLink)
  164.  
  165. local attrs = {}
  166. if (SavedData.show_subtype and itemSubType ~= nil) then
  167. if (itemClassId == LE_ITEM_CLASS_ARMOR and itemSubClassId == 0) then
  168. -- don't display Miscellaneous for rings, necks and trinkets
  169. elseif (itemClassId == LE_ITEM_CLASS_ARMOR and itemEquipLoc == "INVTYPE_CLOAK") then
  170. -- don't display Cloth for cloaks
  171. else
  172. if (SavedData.subtype_short_format) then
  173. table.insert(attrs, itemSubType:sub(0, 1))
  174. else
  175. table.insert(attrs, itemSubType)
  176. end
  177. end
  178. if (itemClassId == LE_ITEM_CLASS_GEM and itemSubClassId == LE_ITEM_ARMOR_RELIC) then
  179. local relicType = PLH_GetRelicType(itemLink)
  180. table.insert(attrs, relicType)
  181. end
  182. end
  183. if (SavedData.show_equiploc and itemEquipLoc ~= nil and _G[itemEquipLoc] ~= nil) then table.insert(attrs, _G[itemEquipLoc]) end
  184. if (SavedData.show_ilevel and iLevel ~= nil) then
  185. local txt = iLevel
  186. if (ItemHasSockets(itemLink)) then txt = txt .. "+S" end
  187. if (ItemHasCorruption(itemLink)) then txt = txt .. "+C" end
  188. if (CorruptionTier(itemLink)) then txt = txt .. CorruptionTier(itemLink) end
  189.  
  190. table.insert(attrs, txt)
  191. end
  192.  
  193. local newItemName = itemName.." ("..table.concat(attrs, " ")..")"
  194. local newLink = "|cff"..color.."|H"..itemString.."|h["..newItemName.."]|h|r"
  195.  
  196. message = string.gsub(message, EscapeSearchString(itemLink), newLink)
  197. end
  198. end
  199. return false, message, user, ...
  200. end
  201.  
  202. local function EventHandler(self, event, ...)
  203. if (SavedData == nil) then SavedData = {} end
  204. if (SavedData.trigger_loots == nil) then SavedData.trigger_loots = true end
  205. if (SavedData.trigger_chat == nil) then SavedData.trigger_chat = true end
  206. if (SavedData.trigger_quality == nil) then SavedData.trigger_quality = 3 end
  207. if (SavedData.show_subtype == nil) then SavedData.show_subtype = true end
  208. if (SavedData.subtype_short_format == nil) then SavedData.subtype_short_format = false end
  209. if (SavedData.show_equiploc == nil) then SavedData.show_equiploc = true end
  210. if (SavedData.show_ilevel == nil) then SavedData.show_ilevel = true end
  211.  
  212. if (SavedData.trigger_loots) then
  213. ChatFrame_AddMessageEventFilter("CHAT_MSG_LOOT", Filter);
  214. end
  215.  
  216. if (SavedData.trigger_chat) then
  217. ChatFrame_AddMessageEventFilter("CHAT_MSG_BATTLEGROUND", Filter);
  218. ChatFrame_AddMessageEventFilter("CHAT_MSG_BATTLEGROUND_LEADER", Filter);
  219. ChatFrame_AddMessageEventFilter("CHAT_MSG_CHANNEL", Filter);
  220. ChatFrame_AddMessageEventFilter("CHAT_MSG_EMOTE", Filter);
  221. ChatFrame_AddMessageEventFilter("CHAT_MSG_GUILD", Filter);
  222. ChatFrame_AddMessageEventFilter("CHAT_MSG_INSTANCE_CHAT", Filter);
  223. ChatFrame_AddMessageEventFilter("CHAT_MSG_INSTANCE_CHAT_LEADER", Filter);
  224. ChatFrame_AddMessageEventFilter("CHAT_MSG_OFFICER", Filter);
  225. ChatFrame_AddMessageEventFilter("CHAT_MSG_PARTY", Filter);
  226. ChatFrame_AddMessageEventFilter("CHAT_MSG_PARTY_LEADER", Filter);
  227. ChatFrame_AddMessageEventFilter("CHAT_MSG_RAID", Filter);
  228. ChatFrame_AddMessageEventFilter("CHAT_MSG_RAID_LEADER", Filter);
  229. ChatFrame_AddMessageEventFilter("CHAT_MSG_RAID_WARNING", Filter);
  230. ChatFrame_AddMessageEventFilter("CHAT_MSG_SAY", Filter);
  231. ChatFrame_AddMessageEventFilter("CHAT_MSG_WHISPER", Filter);
  232. ChatFrame_AddMessageEventFilter("CHAT_MSG_WHISPER_INFORM", Filter)
  233. ChatFrame_AddMessageEventFilter("CHAT_MSG_YELL", Filter);
  234. end
  235.  
  236. local panel = CreateFrame("Frame", "OptionsPanel", UIParent)
  237. panel.name = "ItemLinkLevel"
  238.  
  239. local subtypeCheckBox = CreateFrame("CheckButton", "subtypeCheckBox", panel, "UICheckButtonTemplate")
  240. subtypeCheckBox:SetPoint("TOPLEFT",10, -30)
  241. subtypeCheckBox:SetChecked(SavedData.show_subtype)
  242. _G[subtypeCheckBox:GetName().."Text"]:SetText("Display armor/weapon type (Plate, Leather, ...)")
  243. subtypeCheckBox:SetScript("OnClick", function(self) SavedData.show_subtype = self:GetChecked() end)
  244.  
  245. local subtypeShortCheckBox = CreateFrame("CheckButton", "subtypeShortCheckBox", panel, "UICheckButtonTemplate")
  246. subtypeShortCheckBox:SetPoint("TOPLEFT",30, -60)
  247. subtypeShortCheckBox:SetChecked(SavedData.subtype_short_format)
  248. _G[subtypeShortCheckBox:GetName().."Text"]:SetText("Short format (P for plate, L for leather, ...)")
  249. subtypeShortCheckBox:SetScript("OnClick", function(self) SavedData.subtype_short_format = self:GetChecked() end)
  250.  
  251. local equipLocCheckbox = CreateFrame("CheckButton", "equipLocCheckbox", panel, "UICheckButtonTemplate")
  252. equipLocCheckbox:SetPoint("TOPLEFT",10, -90)
  253. equipLocCheckbox:SetChecked(SavedData.show_equiploc)
  254. _G[equipLocCheckbox:GetName().."Text"]:SetText("Display equip location (Head, Trinket, ...)")
  255. equipLocCheckbox:SetScript("OnClick", function(self) SavedData.show_equiploc = self:GetChecked() end)
  256.  
  257. local iLevelCheckbox = CreateFrame("CheckButton", "iLevelCheckbox", panel, "UICheckButtonTemplate")
  258. iLevelCheckbox:SetPoint("TOPLEFT",10, -120)
  259. iLevelCheckbox:SetChecked(SavedData.show_ilevel)
  260. _G[iLevelCheckbox:GetName().."Text"]:SetText("Display item level")
  261. iLevelCheckbox:SetScript("OnClick", function(self) SavedData.show_ilevel = self:GetChecked() end)
  262.  
  263. local triggerLootsCheckbox = CreateFrame("CheckButton", "triggerLootsCheckbox", panel, "UICheckButtonTemplate")
  264. triggerLootsCheckbox:SetPoint("TOPLEFT",10, -180)
  265. triggerLootsCheckbox:SetChecked(SavedData.trigger_loots)
  266. _G[triggerLootsCheckbox:GetName().."Text"]:SetText("Trigger on loots (requires restart)")
  267. triggerLootsCheckbox:SetScript("OnClick", function(self) SavedData.trigger_loots = self:GetChecked() end)
  268.  
  269. local triggerChatCheckbox = CreateFrame("CheckButton", "triggerChatCheckbox", panel, "UICheckButtonTemplate")
  270. triggerChatCheckbox:SetPoint("TOPLEFT",10, -210)
  271. triggerChatCheckbox:SetChecked(SavedData.trigger_chat)
  272. _G[triggerChatCheckbox:GetName().."Text"]:SetText("Trigger on chat messages (requires restart)")
  273. triggerChatCheckbox:SetScript("OnClick", function(self) SavedData.trigger_chat = self:GetChecked() end)
  274.  
  275. local triggerQualityLabel = panel:CreateFontString("triggerQualityLabel", panel, "GameFontNormal")
  276. triggerQualityLabel:SetText("Minimum trigger quality")
  277. triggerQualityLabel:SetPoint("TOPLEFT",10,-260)
  278. local triggerQualityValue = panel:CreateFontString("triggerQualityValue", panel, "GameFontNormal")
  279. local triggerQualitySlider = CreateFrame("Slider", "MySliderGlobalName", panel, "OptionsSliderTemplate")
  280. triggerQualitySlider:SetPoint("LEFT", triggerQualityLabel, "RIGHT", 10, 0)
  281. triggerQualitySlider:SetMinMaxValues(0, 6)
  282. triggerQualitySlider:SetValue(SavedData.trigger_quality)
  283. triggerQualitySlider:SetValueStep(1)
  284. getglobal(triggerQualitySlider:GetName() .. 'Low'):SetText(_G["ITEM_QUALITY0_DESC"])
  285. getglobal(triggerQualitySlider:GetName() .. 'High'):SetText(_G["ITEM_QUALITY6_DESC"])
  286. triggerQualitySlider:SetScript("OnValueChanged", function(self, value)
  287. value = math.floor(value)
  288. SavedData.trigger_quality = value
  289. triggerQualityValue:SetText(_G["ITEM_QUALITY"..value.."_DESC"])
  290. end)
  291.  
  292. triggerQualityValue:SetText(_G["ITEM_QUALITY"..SavedData.trigger_quality.."_DESC"])
  293. triggerQualityValue:SetPoint("LEFT", triggerQualitySlider, "RIGHT", 10, 0)
  294.  
  295. InterfaceOptions_AddCategory(panel)
  296. end
  297. frame:SetScript("OnEvent", EventHandler);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement