You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
354 lines
10 KiB
354 lines
10 KiB
----Analyze itemLinks----
|
|
|
|
local _, addon = ...
|
|
|
|
local TOOLTIP_NAME = "NarciDevToolItemParserTooltip";
|
|
|
|
local PIXEL;
|
|
local MainFrame, ItemTooltip, ItemCards, EditBox;
|
|
|
|
local RECEPTOR_SIZE = 24;
|
|
|
|
local ITEM_STRING_FORMAT = {
|
|
"itemID", "enchant", "gem1", "gem2", "gem3", "gem4", "suffix", "uniqueID", "playerLevel", "specID", "modifiersMask", "itemContext",
|
|
"numBonusIDs",
|
|
};
|
|
|
|
--[[
|
|
Results:
|
|
Runecarved Lego: #14 Runecarving Power
|
|
First bonusID ~ Upgrade Level?
|
|
3rd bonusID ~ Item level?
|
|
|
|
ItemBonusListGroupID 228 ~ Upgrade Level 1/12 7773(ItemBonusListID), 12/12 7784
|
|
The last bonusID control item level and difficuty (also item name suffix?)
|
|
--]]
|
|
|
|
local function ItemReceptor_OnEnter(self)
|
|
if self.hasItem then
|
|
self.Border:SetColorTexture(1, 1, 1);
|
|
else
|
|
local infoType, itemID, itemLink = GetCursorInfo();
|
|
if not (infoType and infoType == "item") then
|
|
self.Border:SetColorTexture(1, 0.13, 0.13);
|
|
else
|
|
self.Border:SetColorTexture(1, 1, 1);
|
|
end
|
|
end
|
|
end
|
|
|
|
local function ItemReceptor_OnLeave(self)
|
|
self.Border:SetColorTexture(self.r, self.g, self.b);
|
|
end
|
|
|
|
|
|
local function ItemReceptor_SetColor(self, r, g, b)
|
|
self.Border:SetColorTexture(r, g, b);
|
|
self.r, self.g, self.b = r, g, b;
|
|
end
|
|
|
|
local function ItemReceptor_OnDropCursor(self)
|
|
local infoType, itemID, itemLink = GetCursorInfo();
|
|
if not (infoType and infoType == "item") then return end
|
|
|
|
self:GetParent():SetItemLink(itemLink);
|
|
ClearCursor();
|
|
end
|
|
|
|
local function AcquireCard()
|
|
if not ItemCards then
|
|
ItemCards = {};
|
|
end
|
|
local numCards = #ItemCards;
|
|
for i = 1, numCards do
|
|
if not ItemCards[i]:IsShown() then
|
|
return ItemCards[i];
|
|
end
|
|
end
|
|
|
|
numCards = numCards + 1;
|
|
ItemCards[numCards] = CreateFrame("Frame", nil, MainFrame, "NarciDevToolItemParserItemCardTemplate");
|
|
ItemCards[numCards].id = numCards;
|
|
|
|
local OFFSET = 6;
|
|
|
|
ItemCards[numCards]:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", OFFSET, -OFFSET + (1 - numCards) * 32);
|
|
return ItemCards[numCards]
|
|
end
|
|
|
|
local function ShowHyperLinkOnTooltip(tooltip, hyperLink)
|
|
if hyperLink then
|
|
tooltip:SetOwner(MainFrame, "ANCHOR_NONE");
|
|
tooltip:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", 10, -72);
|
|
tooltip:SetHyperlink(hyperLink);
|
|
--tooltip:SetMinimumWidth(254 / 0.8);
|
|
local newHeight;
|
|
local f = _G[TOOLTIP_NAME.."MoneyFrame1"];
|
|
if f then
|
|
f:Hide();
|
|
f:ClearAllPoints();
|
|
local i = tooltip:NumLines();
|
|
local fontString = _G[TOOLTIP_NAME .."TextLeft".. i];
|
|
local bottom = fontString:GetBottom();
|
|
local top = tooltip:GetTop();
|
|
newHeight = top - bottom;
|
|
end
|
|
tooltip:Show();
|
|
if newHeight then
|
|
tooltip:SetHeight(newHeight);
|
|
end
|
|
end
|
|
end
|
|
|
|
local function UpdateCustomItemLink(cardID)
|
|
local link = "|Hitem";
|
|
cardID = cardID or 1;
|
|
local card = ItemCards[cardID];
|
|
for i = 1, #card.ValueBoxes do
|
|
link = link..( card.ValueBoxes[i]:GetLinkText() );
|
|
end
|
|
link = link .. "|h";
|
|
card:SetItemLink(link);
|
|
end
|
|
|
|
local function ShowBoxLabel(valueBox)
|
|
MainFrame.BoxLabel:ClearAllPoints();
|
|
if valueBox then
|
|
if valueBox.segmentLabel then
|
|
MainFrame.BoxLabel:SetText("#"..valueBox.id.." "..valueBox.segmentLabel);
|
|
else
|
|
MainFrame.BoxLabel:SetText("#"..valueBox.id);
|
|
end
|
|
MainFrame.BoxLabel:SetPoint("BOTTOM", valueBox, "TOP", 0, 2);
|
|
MainFrame.BoxLabel:Show();
|
|
else
|
|
MainFrame.BoxLabel:Hide();
|
|
end
|
|
end
|
|
|
|
|
|
NarciDevToolNumberContainerMixin = {};
|
|
|
|
function NarciDevToolNumberContainerMixin:SetValue(value)
|
|
value = tonumber(value) or 0;
|
|
self.value = value;
|
|
self.ValueText:SetText(value);
|
|
if value ~= 0 then
|
|
self.ValueText:SetTextColor(0.8, 0.8, 0.8);
|
|
else
|
|
self.ValueText:SetTextColor(0.5, 0.5, 0.5);
|
|
end
|
|
end
|
|
|
|
function NarciDevToolNumberContainerMixin:GetValue()
|
|
return self.value
|
|
end
|
|
|
|
function NarciDevToolNumberContainerMixin:GetLinkText()
|
|
if self.value and self.value > 0 then
|
|
return ":"..self.value
|
|
else
|
|
return ":"
|
|
end
|
|
end
|
|
|
|
function NarciDevToolNumberContainerMixin:ShowHighlight(state)
|
|
if state then
|
|
self.Background:SetColorTexture(0.33, 0.33, 0.33);
|
|
else
|
|
self.Background:SetColorTexture(0, 0, 0);
|
|
end
|
|
end
|
|
|
|
function NarciDevToolNumberContainerMixin:LockHighlight(state)
|
|
self.highlightLocked = state;
|
|
if state then
|
|
self:ShowHighlight(true);
|
|
else
|
|
if not self:IsMouseOver() then
|
|
self:ShowHighlight(false);
|
|
end
|
|
end
|
|
end
|
|
|
|
function NarciDevToolNumberContainerMixin:OnEnter()
|
|
self:ShowHighlight(true);
|
|
ShowBoxLabel(self);
|
|
end
|
|
|
|
function NarciDevToolNumberContainerMixin:OnLeave()
|
|
if not self.highlightLocked then
|
|
self:ShowHighlight(false);
|
|
end
|
|
ShowBoxLabel();
|
|
end
|
|
|
|
function NarciDevToolNumberContainerMixin:OnMouseDown()
|
|
EditBox:AnchorToBox(self);
|
|
end
|
|
|
|
|
|
NarciDevToolItemParserItemCardMixin = {};
|
|
|
|
function NarciDevToolItemParserItemCardMixin:OnLoad()
|
|
local f = self.Receptor;
|
|
f:SetScript("OnEnter", ItemReceptor_OnEnter);
|
|
f:SetScript("OnLeave", ItemReceptor_OnLeave);
|
|
f:SetScript("OnClick", ItemReceptor_OnDropCursor);
|
|
f:SetScript("OnReceiveDrag", ItemReceptor_OnDropCursor);
|
|
f:SetSize(RECEPTOR_SIZE, RECEPTOR_SIZE);
|
|
f.Exclusion:SetSize(RECEPTOR_SIZE - 2*PIXEL, RECEPTOR_SIZE - 2*PIXEL);
|
|
ItemReceptor_SetColor(f, 0.5, 0.5, 0.5);
|
|
|
|
self.ItemName:SetText("< Drop an item here");
|
|
end
|
|
|
|
function NarciDevToolItemParserItemCardMixin:SetItemLink(itemLink)
|
|
if not C_Item.DoesItemExistByID(itemLink) then return end;
|
|
|
|
self.itemLink = itemLink;
|
|
local itemName, _, itemQuality, itemLevel, _, _, _, _, itemEquipLoc, itemIcon = GetItemInfo(itemLink);
|
|
local itemString = string.match(itemLink, "item:([%-?%d:]+)");
|
|
--local enchantID = GetItemEnchantID(itemLink);
|
|
local r, g, b = GetItemQualityColor(itemQuality); --GetCustomQualityColor
|
|
self.Receptor.ItemIcon:SetTexture(itemIcon);
|
|
ItemReceptor_SetColor(self.Receptor, r, g, b);
|
|
|
|
self.ItemName:SetText(itemName);
|
|
self.ItemName:SetTextColor(r, g, b);
|
|
--self.ItemString:SetText(itemString);
|
|
self.Receptor.hasItem = true;
|
|
ShowHyperLinkOnTooltip(ItemTooltip, itemLink);
|
|
|
|
|
|
if not self.ValueBoxes then
|
|
self.ValueBoxes = {};
|
|
end
|
|
local values = {string.split(":", itemString)};
|
|
for i = 1, #values do
|
|
if not self.ValueBoxes[i] then
|
|
self.ValueBoxes[i] = CreateFrame("Frame", nil, self, "NarciDevToolNumberContainerTemplate");
|
|
self.ValueBoxes[i]:SetPoint("LEFT", self, "LEFT", 178 + 33 * (i - 1), 0);
|
|
self.ValueBoxes[i].id = i;
|
|
self.ValueBoxes[i].segmentLabel = ITEM_STRING_FORMAT[i];
|
|
end
|
|
self.ValueBoxes[i]:SetValue(values[i]);
|
|
end
|
|
end
|
|
|
|
NarciDevToolItemParserMixin = {};
|
|
|
|
function NarciDevToolItemParserMixin:OnShow()
|
|
if self.Init then
|
|
self:Init();
|
|
end
|
|
end
|
|
|
|
function NarciDevToolItemParserMixin:ShowFrame()
|
|
self:Show();
|
|
end
|
|
|
|
function NarciDevToolItemParserMixin:Init()
|
|
MainFrame = self;
|
|
PIXEL = NarciAPI.GetPixelForWidget(self);
|
|
|
|
self:RegisterForDrag("LeftButton");
|
|
|
|
local locale = GetLocale();
|
|
local version, build, date, tocversion = GetBuildInfo();
|
|
local narciVersion = NarciAPI.GetAddOnVersionInfo(true);
|
|
self.ClientInfo:SetText(locale.." "..version.."."..build.." "..narciVersion);
|
|
|
|
ItemTooltip = CreateFrame("GameTooltip", TOOLTIP_NAME, self, "GameTooltipTemplate");
|
|
local t = ItemTooltip;
|
|
t:Hide();
|
|
t:SetScale(1);
|
|
|
|
t.textLeft1Font = "NarciFontUniversal9";
|
|
t.textLeft2Font = "NarciFontUniversal8";
|
|
t.textRight1Font = "NarciFontUniversal9";
|
|
t.textRight2Font = "NarciFontUniversal8";
|
|
t.NineSlice:Hide();
|
|
|
|
t.TextLeft1:SetFontObject(t.textLeft1Font);
|
|
t.TextLeft2:SetFontObject(t.textLeft2Font);
|
|
t.TextRight1:SetFontObject(t.textRight1Font);
|
|
t.TextRight2:SetFontObject(t.textRight2Font);
|
|
|
|
local backdrop = t:CreateTexture(nil, "BACKGROUND");
|
|
backdrop:SetPoint("TOPLEFT", t, "TOPLEFT", 0, 0);
|
|
backdrop:SetPoint("BOTTOMRIGHT", t, "BOTTOMRIGHT", 0, 0);
|
|
backdrop:SetColorTexture(0, 0, 0);
|
|
|
|
local border = t:CreateTexture(nil, "BORDER");
|
|
border:SetPoint("TOPLEFT", t, "TOPLEFT", 0, 0);
|
|
border:SetPoint("BOTTOMRIGHT", t, "BOTTOMRIGHT", 0, 0);
|
|
border:SetColorTexture(0.33, 0.33, 0.33);
|
|
|
|
local mask = t:CreateMaskTexture(nil, "BORDER");
|
|
mask:SetPoint("TOPLEFT", border, "TOPLEFT", PIXEL, -PIXEL);
|
|
mask:SetPoint("BOTTOMRIGHT", border, "BOTTOMRIGHT", -PIXEL, PIXEL);
|
|
mask:SetTexture("Interface\\AddOns\\Narcissus\\Art\\Masks\\Exclusion", "CLAMPTOWHITE", "CLAMPTOWHITE", "NEAREST");
|
|
border:AddMaskTexture(mask);
|
|
|
|
AcquireCard();
|
|
AcquireCard();
|
|
|
|
NarciDevToolItemParserMixin.Init = nil;
|
|
self.Init = nil;
|
|
end
|
|
|
|
function NarciDevToolItemParserMixin:OnDragStart()
|
|
self:StartMoving();
|
|
end
|
|
|
|
function NarciDevToolItemParserMixin:OnDragStop()
|
|
self:StopMovingOrSizing();
|
|
end
|
|
|
|
|
|
NarciDevToolItemParserEditBoxMixin = {};
|
|
|
|
function NarciDevToolItemParserEditBoxMixin:OnLoad()
|
|
EditBox = self;
|
|
self.Background:SetColorTexture(0, 122/255, 204/255);
|
|
self:SetHighlightColor(0, 0, 0);
|
|
end
|
|
|
|
function NarciDevToolItemParserEditBoxMixin:OnEditFocusLost()
|
|
self:Hide();
|
|
end
|
|
|
|
function NarciDevToolItemParserEditBoxMixin:OnEditFocusGained()
|
|
self:HighlightText();
|
|
end
|
|
|
|
function NarciDevToolItemParserEditBoxMixin:QuitEdit()
|
|
self:Hide();
|
|
end
|
|
|
|
function NarciDevToolItemParserEditBoxMixin:ConfirmEdit()
|
|
local value = self:GetNumber() or 0;
|
|
self.parentBox:SetValue(value);
|
|
self:Hide();
|
|
UpdateCustomItemLink(self.parentBox:GetParent().id);
|
|
end
|
|
|
|
function NarciDevToolItemParserEditBoxMixin:OnTextChanged(text, isUserInput)
|
|
|
|
end
|
|
|
|
function NarciDevToolItemParserEditBoxMixin:OnHide()
|
|
self:Hide();
|
|
end
|
|
|
|
function NarciDevToolItemParserEditBoxMixin:AnchorToBox(valueBox)
|
|
self:ClearAllPoints();
|
|
self:SetPoint("TOPLEFT", valueBox, "TOPLEFT", 0, 0);
|
|
self:SetPoint("BOTTOMRIGHT", valueBox, "BOTTOMRIGHT", 0, 0);
|
|
self:SetText(valueBox:GetValue());
|
|
self:SetFrameLevel(valueBox:GetFrameLevel() + 2);
|
|
self:Show();
|
|
self.parentBox = valueBox;
|
|
self:SetFocus();
|
|
end
|
|
|