tooltip code refactor, added skill requirement if its craftable item
This commit is contained in:
Spit
2025-04-27 16:57:53 +03:00
parent 1ef67e9d77
commit 9b628213f6
3 changed files with 296 additions and 222 deletions
+1 -1
View File
@@ -3,7 +3,7 @@
## Notes: Shows possible loot from dungeon bosses and other sources. ## Notes: Shows possible loot from dungeon bosses and other sources.
## Author: Shagu (pfUI update code), Lexie (Turtle WoW fixes/updates), Otari (overhaul/revamp, menu changes, bugfixes/updates) ## Author: Shagu (pfUI update code), Lexie (Turtle WoW fixes/updates), Otari (overhaul/revamp, menu changes, bugfixes/updates)
## LegacyAuthor: Daviesh, Pompa (Turtle WoW World Bosses), Xerron (Turtle WoW World Bosses), Gurky (Turtle WoW 1.16/1.16.1 Dungeons) ## LegacyAuthor: Daviesh, Pompa (Turtle WoW World Bosses), Xerron (Turtle WoW World Bosses), Gurky (Turtle WoW 1.16/1.16.1 Dungeons)
## Version: 3.1.3 ## Version: 3.1.4
## SavedVariablesPerCharacter: AtlasLootCharDB ## SavedVariablesPerCharacter: AtlasLootCharDB
## OptionalDeps: Alphamap, AtlasLoader, LootLink, ItemSync, HewdropLib, Ace2, EquipCompare, EQCompare ## OptionalDeps: Alphamap, AtlasLoader, LootLink, ItemSync, HewdropLib, Ace2, EquipCompare, EQCompare
+290 -216
View File
@@ -1,170 +1,86 @@
-- extra info on GameTooltip and ItemRefTooltip -- extra info on GameTooltip and ItemRefTooltip
local AL = AceLibrary("AceLocale-2.2"):new("AtlasLoot")
local AtlasLootTip = CreateFrame("Frame", "AtlasLootTip", GameTooltip) local AtlasLootTip = CreateFrame("Frame", "AtlasLootTip", GameTooltip)
local strfind = string.find local strfind = string.find
local GetItemInfo = GetItemInfo local GetItemInfo = GetItemInfo
local GREY = "|cff999999" local GREY = "|cff999999"
local lastSearchName local WrappingLines = {
local lastSearchID ["Set: %s"] = gsub("^"..ITEM_SET_BONUS, " %%s", ""),
["(%d) Set: %s"] = gsub(gsub(ITEM_SET_BONUS_GRAY, "%(%%d%)", "^%%(%%d%%)"), " %%s", ""),
["Effect: %s"] = gsub("^"..ITEM_SPELL_EFFECT, " %%s", ""),
["Equip:"] = "^"..ITEM_SPELL_TRIGGER_ONEQUIP,
["Chance on hit:"] = "^"..ITEM_SPELL_TRIGGER_ONPROC,
["Use:"] = "^"..ITEM_SPELL_TRIGGER_ONUSE,
}
local function GetItemIDByName(name) local lines = {}
if not name then return nil end for i = 1, 30 do
if name ~= lastSearchName then lines[i] = {}
for itemID = 1, 99999 do end
local itemName = GetItemInfo(itemID)
if (itemName and itemName == name) then local function AddSourceLine(tooltip, sourceStr)
lastSearchID = itemID local name = tooltip:GetName()
local numLines = tooltip:NumLines()
local left, right
local leftText, rightText
local rL, gL, bL
local rR, gR, bR
local wrap
for i in pairs(lines) do
for j in pairs(lines[i]) do
lines[i][j] = nil
end
end
for i = 1, numLines do
left = getglobal(name .. "TextLeft" .. i)
right = getglobal(name .. "TextRight" .. i)
leftText = left:GetText()
rightText = right:IsShown() and right:GetText()
rL, gL, bL = left:GetTextColor()
rR, gR, bR = right:GetTextColor()
lines[i][1] = leftText
lines[i][2] = rightText
lines[i][3] = rL
lines[i][4] = gL
lines[i][5] = bL
lines[i][6] = rR
lines[i][7] = gR
lines[i][8] = bR
end
if not lines[1][1] then return end
tooltip:SetText(lines[1][1], lines[1][3], lines[1][4], lines[1][5], 1, false)
if numLines < 28 then
tooltip:AddLine(sourceStr)
elseif lines[2][1] then
lines[2][1] = sourceStr.."\n"..lines[2][1]
end
for i = 2, getn(lines) do
if lines[i][2] then
tooltip:AddDoubleLine(lines[i][1], lines[i][2], lines[i][3], lines[i][4], lines[i][5], lines[i][6], lines[i][7], lines[i][8])
else
wrap = false
if strsub(lines[i][1] or "", 1, 1) == "\"" then
wrap = true
else
for _, pattern in pairs(WrappingLines) do
if strfind(lines[i][1] or "", pattern) then
wrap = true
break break
end end
end end
lastSearchName = name
end end
return lastSearchID tooltip:AddLine(lines[i][1], lines[i][3], lines[i][4], lines[i][5], wrap)
end
end end
local function HookTooltip(tooltip) tooltip:Show()
local original_SetLootRollItem = tooltip.SetLootRollItem
local original_SetLootItem = tooltip.SetLootItem
local original_SetMerchantItem = tooltip.SetMerchantItem
local original_SetQuestLogItem = tooltip.SetQuestLogItem
local original_SetQuestItem = tooltip.SetQuestItem
local original_SetHyperlink = tooltip.SetHyperlink
local original_SetBagItem = tooltip.SetBagItem
local original_SetInboxItem = tooltip.SetInboxItem
local original_SetInventoryItem = tooltip.SetInventoryItem
local original_SetCraftItem = tooltip.SetCraftItem
local original_SetCraftSpell = tooltip.SetCraftSpell
local original_SetTradeSkillItem = tooltip.SetTradeSkillItem
local original_SetAuctionItem = tooltip.SetAuctionItem
local original_SetAuctionSellItem = tooltip.SetAuctionSellItem
local original_SetTradePlayerItem = tooltip.SetTradePlayerItem
local original_SetTradeTargetItem = tooltip.SetTradeTargetItem
local original_OnHide = tooltip:GetScript("OnHide")
tooltip:SetScript("OnHide", function()
if original_OnHide then original_OnHide() end
this.itemID = nil
end)
function tooltip.SetLootRollItem(self, rollID)
original_SetLootRollItem(self, rollID)
local _, _, id = strfind(GetLootRollItemLink(rollID) or "", "item:(%d+)")
self.itemID = tonumber(id)
AtlasLootTip.extendTooltip(self)
end
function tooltip.SetLootItem(self, slot)
original_SetLootItem(self, slot)
local _, _, id = strfind(GetLootSlotLink(slot) or "", "item:(%d+)")
self.itemID = tonumber(id)
AtlasLootTip.extendTooltip(self)
end
function tooltip.SetMerchantItem(self, merchantIndex)
original_SetMerchantItem(self, merchantIndex)
local _, _, id = strfind(GetMerchantItemLink(merchantIndex) or "", "item:(%d+)")
self.itemID = tonumber(id)
AtlasLootTip.extendTooltip(self)
end
function tooltip.SetQuestLogItem(self, itemType, index)
original_SetQuestLogItem(self, itemType, index)
local _, _, id = strfind(GetQuestLogItemLink(itemType, index) or "", "item:(%d+)")
self.itemID = tonumber(id)
AtlasLootTip.extendTooltip(self)
end
function tooltip.SetQuestItem(self, itemType, index)
original_SetQuestItem(self, itemType, index)
local _, _, id = strfind(GetQuestItemLink(itemType, index) or "", "item:(%d+)")
self.itemID = tonumber(id)
AtlasLootTip.extendTooltip(self)
end
function tooltip.SetHyperlink(self, arg1)
original_SetHyperlink(self, arg1)
local _, _, id = strfind(arg1 or "", "item:(%d+)")
self.itemID = tonumber(id)
AtlasLootTip.extendTooltip(self)
end
function tooltip.SetBagItem(self, container, slot)
local hasCooldown, repairCost = original_SetBagItem(self, container, slot)
local _, _, id = strfind(GetContainerItemLink(container, slot) or "", "item:(%d+)")
self.itemID = tonumber(id)
AtlasLootTip.extendTooltip(self)
return hasCooldown, repairCost
end
function tooltip.SetInboxItem(self, mailID, attachmentIndex)
original_SetInboxItem(self, mailID, attachmentIndex)
local itemName = GetInboxItem(mailID)
self.itemID = GetItemIDByName(itemName)
AtlasLootTip.extendTooltip(self)
end
function tooltip.SetInventoryItem(self, unit, slot)
local hasItem, hasCooldown, repairCost = original_SetInventoryItem(self, unit, slot)
local _, _, id = strfind(GetInventoryItemLink(unit, slot) or "", "item:(%d+)")
self.itemID = tonumber(id)
AtlasLootTip.extendTooltip(self)
return hasItem, hasCooldown, repairCost
end
function tooltip.SetCraftItem(self, skill, slot)
original_SetCraftItem(self, skill, slot)
local _, _, id = strfind(GetCraftReagentItemLink(skill, slot) or "", "item:(%d+)")
self.itemID = tonumber(id)
AtlasLootTip.extendTooltip(self)
end
function tooltip.SetCraftSpell(self, slot)
original_SetCraftSpell(self, slot)
local _, _, id = strfind(GetCraftItemLink(slot) or "", "item:(%d+)")
self.itemID = tonumber(id)
AtlasLootTip.extendTooltip(self)
end
function tooltip.SetTradeSkillItem(self, skillIndex, reagentIndex)
original_SetTradeSkillItem(self, skillIndex, reagentIndex)
if reagentIndex then
local _, _, id = strfind(GetTradeSkillReagentItemLink(skillIndex, reagentIndex) or "", "item:(%d+)")
self.itemID = tonumber(id)
else
local _, _, id = strfind(GetTradeSkillItemLink(skillIndex) or "", "item:(%d+)")
self.itemID = tonumber(id)
end
AtlasLootTip.extendTooltip(self)
end
function tooltip.SetAuctionItem(self, atype, index)
original_SetAuctionItem(self, atype, index)
local itemName = GetAuctionItemInfo(atype, index)
self.itemID = GetItemIDByName(itemName)
AtlasLootTip.extendTooltip(self)
end
function tooltip.SetAuctionSellItem(self)
original_SetAuctionSellItem(self)
local itemName = GetAuctionSellItemInfo()
self.itemID = GetItemIDByName(itemName)
AtlasLootTip.extendTooltip(self)
end
function tooltip.SetTradePlayerItem(self, index)
original_SetTradePlayerItem(self, index)
local _, _, id = strfind(GetTradePlayerItemLink(index) or "", "item:(%d+)")
self.itemID = tonumber(id)
AtlasLootTip.extendTooltip(self)
end
function tooltip.SetTradeTargetItem(self, index)
original_SetTradeTargetItem(self, index)
local _, _, id = strfind(GetTradeTargetItemLink(index) or "", "item:(%d+)")
self.itemID = tonumber(id)
AtlasLootTip.extendTooltip(self)
end
end end
local sets = { local sets = {
@@ -181,6 +97,40 @@ local sets = {
["Tabards"] = true, ["Tabards"] = true,
} }
local professions = {
["Apprentice"] = true,
["Journeyman"] = true,
["Expert"] = true,
["Artisan"] = true,
["Goblin"] = true,
["Gnomish"] = true,
["Survival"] = true,
["Herbalism"] = true,
["FirstAid"] = true,
["Poisons"] = true,
["Mining"] = true,
["Smelting"] = true,
["Elemental"] = true,
["Tribal"] = true,
["Dragonscale"] = true,
["Weaponsmith"] = true,
["Axesmith"] = true,
["Hammersmith"] = true,
["Swordsmith"] = true,
["Armorsmith"] = true,
["Gemology"] = true,
["Goldsmithing"] = true,
}
local function SetPartialMatch(set, str)
if type(set) ~= "table" then return end
for k in pairs(set) do
if strfind(str, k, 1, true) then
return k
end
end
end
local function SetContains(set, key) local function SetContains(set, key)
if not set or not key then if not set or not key then
return false return false
@@ -189,17 +139,16 @@ local function SetContains(set, key)
end end
local lastItemID, lastSourceStr, lastDropRate local lastItemID, lastSourceStr, lastDropRate
function AtlasLootTip.extendTooltip(tooltip) local function ExtendTooltip(tooltip)
if not AtlasLootCharDB.ShowSource then if not AtlasLootCharDB.ShowSource then
return return
end end
local tooltipName = tooltip:GetName() local tooltipName = tooltip:GetName()
local itemName = getglobal(tooltipName .. "TextLeft1"):GetText()
local line2 = getglobal(tooltipName .. "TextLeft2") local line2 = getglobal(tooltipName .. "TextLeft2")
local craftSpell, source, sourceStr, dropRate local craftSpell, source, sourceStr, dropRate
local isCraft, isWBLoot, isPvP, isRepReward, isSetPiece, isWorldEvent = false, false, false, false, false, false local isCraft, isWBLoot, isPvP, isRepReward, isSetPiece, isWorldEvent = false, false, false, false, false, false
local itemID = tonumber(tooltip.itemID) local itemID = tonumber(tooltip.itemID)
if itemName and itemID and itemID ~= 51217 then -- 51217 Fashion Coin if itemID and itemID ~= 51217 then -- 51217 Fashion Coin
if itemID ~= lastItemID then if itemID ~= lastItemID then
for row = 1, tooltip:NumLines() do for row = 1, tooltip:NumLines() do
local rowtext = getglobal(tooltipName.."TextLeft"..row):GetText() local rowtext = getglobal(tooltipName.."TextLeft"..row):GetText()
@@ -226,47 +175,20 @@ function AtlasLootTip.extendTooltip(tooltip)
break break
end end
for k2, v2 in pairs(AtlasLoot_Data["AtlasLootCrafting"][k1]) do for k2, v2 in pairs(AtlasLoot_Data["AtlasLootCrafting"][k1]) do
if v2[1] ~= 0 and v2[1] ~= "" --[[and string.sub(v2[1], 1, 1) ~= "e"]] then if v2[1] ~= 0 and v2[1] ~= "" then
if (v2[1] == craftSpell or v2[1] == itemID) and if (v2[1] == craftSpell or v2[1] == itemID) and SetPartialMatch(professions, k1) then
(strfind(k1, "Apprentice", 1, true) or
strfind(k1, "Journeyman", 1, true) or
strfind(k1, "Expert", 1, true) or
strfind(k1, "Artisan", 1, true) or
strfind(k1, "Goblin", 1, true) or
strfind(k1, "Gnomish", 1, true) or
strfind(k1, "Survival", 1, true) or
strfind(k1, "Herbalism", 1, true) or
strfind(k1, "FirstAid", 1, true) or
strfind(k1, "Poisons", 1, true) or
strfind(k1, "Mining", 1, true) or
strfind(k1, "Smelting", 1, true) or
strfind(k1, "Elemental", 1, true) or
strfind(k1, "Tribal", 1, true) or
strfind(k1, "Dragonscale", 1, true) or
strfind(k1, "Weaponsmith", 1, true) or
strfind(k1, "Axesmith", 1, true) or
strfind(k1, "Hammersmith", 1, true) or
strfind(k1, "Swordsmith", 1, true) or
strfind(k1, "Armorsmith", 1, true) or
strfind(k1, "Gemology", 1, true) or
strfind(k1, "Goldsmithing", 1, true))
then
source = k1 source = k1
isCraft = true isCraft = true
dropRate = AtlasLoot_FixText(v2[4] or "") or ""
dropRate = gsub(dropRate or "", "\124cff%x%x%x%x%x%x", "")
local skill = ""
_, _, dropRate, skill = strfind(dropRate or "", "("..AL["Skill:"]..") (%d+)")
if dropRate and skill then
dropRate = skill ~= "300" and dropRate.." "..skill.."+" or dropRate.." "..skill
lastDropRate = dropRate
else
lastDropRate = nil lastDropRate = nil
-- if strfind(k1, "Apprentice", 1, true) then end
-- dropRate = "1-75"
-- lastDropRate = dropRate
-- elseif strfind(k1, "Journeyman", 1, true) then
-- dropRate = "75-150"
-- lastDropRate = dropRate
-- elseif strfind(k1, "Expert", 1, true) then
-- dropRate = "150-225"
-- lastDropRate = dropRate
-- elseif strfind(k1, "Artisan", 1, true) then
-- dropRate = "225-300"
-- lastDropRate = dropRate
-- end
break break
end end
end end
@@ -454,38 +376,190 @@ function AtlasLootTip.extendTooltip(tooltip)
return return
end end
if line2 and line2:GetText() then -- if line2:GetText() then
local str
if dropRate then if dropRate then
line2:SetText(GREY..sourceStr.." ("..dropRate..")|r\n"..line2:GetText()) str = GREY..sourceStr.." ("..dropRate..")|r"
else else
line2:SetText(GREY..sourceStr.."|r\n"..line2:GetText()) str = GREY..sourceStr.."|r"
end end
else AddSourceLine(tooltip, str)
if dropRate then -- end
tooltip:AddLine(GREY..sourceStr.." ("..dropRate..")|r") elseif lastSourceStr then
else -- if line2:GetText() then
tooltip:AddLine(GREY..sourceStr.."|r") local str
end
end
elseif itemID == lastItemID then
if lastSourceStr then
if line2:GetText() then
if lastDropRate then if lastDropRate then
line2:SetText(GREY..lastSourceStr.." ("..lastDropRate..")|r\n"..line2:GetText()) str = GREY..lastSourceStr.." ("..lastDropRate..")|r"
else else
line2:SetText(GREY..lastSourceStr.."|r\n"..line2:GetText()) str = GREY..lastSourceStr.."|r"
end end
AddSourceLine(tooltip, str)
-- end
end
end
end
local lastSearchName
local lastSearchID
local function GetItemIDByName(name)
if not name then return nil end
if name ~= lastSearchName then
for itemID = 1, 99999 do
local itemName = GetItemInfo(itemID)
if (itemName and itemName == name) then
lastSearchID = itemID
break
end
end
lastSearchName = name
end
return lastSearchID
end
local function HookTooltip(tooltip)
local original_SetLootRollItem = tooltip.SetLootRollItem
local original_SetLootItem = tooltip.SetLootItem
local original_SetMerchantItem = tooltip.SetMerchantItem
local original_SetQuestLogItem = tooltip.SetQuestLogItem
local original_SetQuestItem = tooltip.SetQuestItem
local original_SetHyperlink = tooltip.SetHyperlink
local original_SetBagItem = tooltip.SetBagItem
local original_SetInboxItem = tooltip.SetInboxItem
local original_SetInventoryItem = tooltip.SetInventoryItem
local original_SetCraftItem = tooltip.SetCraftItem
local original_SetCraftSpell = tooltip.SetCraftSpell
local original_SetTradeSkillItem = tooltip.SetTradeSkillItem
local original_SetAuctionItem = tooltip.SetAuctionItem
local original_SetAuctionSellItem = tooltip.SetAuctionSellItem
local original_SetTradePlayerItem = tooltip.SetTradePlayerItem
local original_SetTradeTargetItem = tooltip.SetTradeTargetItem
local original_OnHide = tooltip:GetScript("OnHide")
tooltip:SetScript("OnHide", function()
if original_OnHide then original_OnHide() end
this.itemID = nil
end)
function tooltip.SetLootRollItem(self, rollID)
original_SetLootRollItem(self, rollID)
local _, _, id = strfind(GetLootRollItemLink(rollID) or "", "item:(%d+)")
self.itemID = tonumber(id)
ExtendTooltip(self)
end
function tooltip.SetLootItem(self, slot)
original_SetLootItem(self, slot)
local _, _, id = strfind(GetLootSlotLink(slot) or "", "item:(%d+)")
self.itemID = tonumber(id)
ExtendTooltip(self)
end
function tooltip.SetMerchantItem(self, merchantIndex)
original_SetMerchantItem(self, merchantIndex)
local _, _, id = strfind(GetMerchantItemLink(merchantIndex) or "", "item:(%d+)")
self.itemID = tonumber(id)
ExtendTooltip(self)
end
function tooltip.SetQuestLogItem(self, itemType, index)
original_SetQuestLogItem(self, itemType, index)
local _, _, id = strfind(GetQuestLogItemLink(itemType, index) or "", "item:(%d+)")
self.itemID = tonumber(id)
ExtendTooltip(self)
end
function tooltip.SetQuestItem(self, itemType, index)
original_SetQuestItem(self, itemType, index)
local _, _, id = strfind(GetQuestItemLink(itemType, index) or "", "item:(%d+)")
self.itemID = tonumber(id)
ExtendTooltip(self)
end
function tooltip.SetHyperlink(self, arg1)
original_SetHyperlink(self, arg1)
local _, _, id = strfind(arg1 or "", "item:(%d+)")
self.itemID = tonumber(id)
ExtendTooltip(self)
end
function tooltip.SetBagItem(self, container, slot)
local hasCooldown, repairCost = original_SetBagItem(self, container, slot)
local _, _, id = strfind(GetContainerItemLink(container, slot) or "", "item:(%d+)")
self.itemID = tonumber(id)
ExtendTooltip(self)
return hasCooldown, repairCost
end
function tooltip.SetInboxItem(self, mailID, attachmentIndex)
original_SetInboxItem(self, mailID, attachmentIndex)
local itemName = GetInboxItem(mailID)
self.itemID = GetItemIDByName(itemName)
ExtendTooltip(self)
end
function tooltip.SetInventoryItem(self, unit, slot)
local hasItem, hasCooldown, repairCost = original_SetInventoryItem(self, unit, slot)
local _, _, id = strfind(GetInventoryItemLink(unit, slot) or "", "item:(%d+)")
self.itemID = tonumber(id)
ExtendTooltip(self)
return hasItem, hasCooldown, repairCost
end
function tooltip.SetCraftItem(self, skill, slot)
original_SetCraftItem(self, skill, slot)
local _, _, id = strfind(GetCraftReagentItemLink(skill, slot) or "", "item:(%d+)")
self.itemID = tonumber(id)
ExtendTooltip(self)
end
function tooltip.SetCraftSpell(self, slot)
original_SetCraftSpell(self, slot)
local _, _, id = strfind(GetCraftItemLink(slot) or "", "item:(%d+)")
self.itemID = tonumber(id)
ExtendTooltip(self)
end
function tooltip.SetTradeSkillItem(self, skillIndex, reagentIndex)
original_SetTradeSkillItem(self, skillIndex, reagentIndex)
if reagentIndex then
local _, _, id = strfind(GetTradeSkillReagentItemLink(skillIndex, reagentIndex) or "", "item:(%d+)")
self.itemID = tonumber(id)
else else
if lastDropRate then local _, _, id = strfind(GetTradeSkillItemLink(skillIndex) or "", "item:(%d+)")
tooltip:AddLine(GREY..lastSourceStr.." ("..lastDropRate..")|r") self.itemID = tonumber(id)
else
tooltip:AddLine(GREY..lastSourceStr.."|r")
end end
ExtendTooltip(self)
end end
function tooltip.SetAuctionItem(self, atype, index)
original_SetAuctionItem(self, atype, index)
local itemName = GetAuctionItemInfo(atype, index)
self.itemID = GetItemIDByName(itemName)
ExtendTooltip(self)
end end
function tooltip.SetAuctionSellItem(self)
original_SetAuctionSellItem(self)
local itemName = GetAuctionSellItemInfo()
self.itemID = GetItemIDByName(itemName)
ExtendTooltip(self)
end end
function tooltip.SetTradePlayerItem(self, index)
original_SetTradePlayerItem(self, index)
local _, _, id = strfind(GetTradePlayerItemLink(index) or "", "item:(%d+)")
self.itemID = tonumber(id)
ExtendTooltip(self)
end
function tooltip.SetTradeTargetItem(self, index)
original_SetTradeTargetItem(self, index)
local _, _, id = strfind(GetTradeTargetItemLink(index) or "", "item:(%d+)")
self.itemID = tonumber(id)
ExtendTooltip(self)
end end
tooltip:Show()
end end
HookTooltip(GameTooltip) HookTooltip(GameTooltip)
@@ -500,7 +574,7 @@ AtlasLootTip:SetScript("OnShow", function()
end end
end end
end end
AtlasLootTip.extendTooltip(GameTooltip) ExtendTooltip(GameTooltip)
end end
end) end)
+1 -1
View File
@@ -3603,9 +3603,9 @@ AtlasLoot_Data["AtlasLootCrafting"] = {
{ "s41065", "INV_Stone_08", "=q1=Coarse Gemstone Cluster", "=ds=#sr# =so1=125 =so2=140 =so3=142 =so4=145" }, { "s41065", "INV_Stone_08", "=q1=Coarse Gemstone Cluster", "=ds=#sr# =so1=125 =so2=140 =so3=142 =so4=145" },
{ "s41057", "INV_Crown_01", "=q2=Agatestone Crown", "=ds=#sr# =so1=125 =so2=145 =so3=155 =so4=165" }, { "s41057", "INV_Crown_01", "=q2=Agatestone Crown", "=ds=#sr# =so1=125 =so2=145 =so3=155 =so4=165" },
{ "s41061", "INV_Belt_31", "=q2=Binding Signet", "=ds=#sr# =so1=125 =so2=145 =so3=155 =so4=165" }, { "s41061", "INV_Belt_31", "=q2=Binding Signet", "=ds=#sr# =so1=125 =so2=145 =so3=155 =so4=165" },
{ "s41063", "INV_Bracer_14", "=q2=Enchanted Bracelets", "=ds=#sr# =so1=125 =so2=145 =so3=155 =so4=165" },
}; };
JewelcraftingJourneyman2 = { JewelcraftingJourneyman2 = {
{ "s41063", "INV_Bracer_14", "=q2=Enchanted Bracelets", "=ds=#sr# =so1=125 =so2=145 =so3=155 =so4=165" },
{ "s41776", "INV_Jewelry_Ring_24", "=q2=Ring of Midnight", "=ds=#sr# =so1=125 =so2=145 =so3=155 =so4=165" }, { "s41776", "INV_Jewelry_Ring_24", "=q2=Ring of Midnight", "=ds=#sr# =so1=125 =so2=145 =so3=155 =so4=165" },
{ "s41059", "INV_Staff_15", "=q2=Moonlight Staff", "=ds=#sr# =so1=125 =so2=150 =so3=160 =so4=170" }, { "s41059", "INV_Staff_15", "=q2=Moonlight Staff", "=ds=#sr# =so1=125 =so2=150 =so3=160 =so4=170" },
{ "s41568", "INV_Jewelry_Ring_10", "=q2=Dazzling Moonstone Band", "=ds=#sr# =so1=130 =so2=150 =so3=160 =so4=170" }, { "s41568", "INV_Jewelry_Ring_10", "=q2=Dazzling Moonstone Band", "=ds=#sr# =so1=130 =so2=150 =so3=160 =so4=170" },