vanilla-wow-addons – Rev 1
?pathlinks?
--[[
Set Wrangler
]]
--------------------------------------------------------------------------------------------------
-- Constants
--------------------------------------------------------------------------------------------------
SW_NUM_CLASSES = table.getn(SW_TEXT_CLASSNAMES);
SW_NUM_SET_TABS = 10;
SW_NUM_BUTTONS = 8;
SW_MAX_CACHE_ATTEMPTS = 50;
SW_ITEMS_ON_LINE = 2;
SW_PART_HEAD = 1;
SW_PART_SHOULD = 2;
SW_PART_CHEST = 3;
SW_PART_LEGS = 4;
SW_PART_HANDS = 5;
SW_PART_FEET = 6;
SW_PART_BELT = 7;
SW_PART_WRISTS = 8;
SW_PART_BACK = 9;
SW_PART_TRINKET = 10;
SW_PART_FINGER = 11;
SW_PART_HAND = 12;
SW_PART_OHAND = 13;
SW_PART_OFFHAND = 14;
SW_PART_ZG_TRINK = 1;
SW_PART_ZG_NECK = 2;
SW_PART_ZG_CHEST = 3;
SW_PART_ZG_BELT = 4;
SW_PART_ZG_WRISTS = 5;
SW_CACHE_TIMER = 0.5;
SW_DEFAULT_ICON = "Interface/Icons/INV_Misc_QuestionMark";
SW_VERSION = "12";
SW_WHISPER_MAX = 17;
SW_MAX_TABS = 8;
--------------------------------------------------------------------------------------------------
-- Globals
--------------------------------------------------------------------------------------------------
gaClassSetData = {};
gSelectedClass = 0;
gSelectedSet = 0;
gSelectedPart = 0;
gLinkToIndex = 1;
gDoCacheTimer = 0;
gCacheTimer = 0;
gCacheAttempts = 0;
gCacheData = {};
gCacheData.itemLink = "";
gCacheData.callback = "";
gWhisperLowerBound = 1;
gTabSet = 0;
gLocalPartData = {};
local function dout(msg)
if( DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:AddMessage(msg,1.0,0,0);
end
end
--------------------------------------------------------------------------------------------------
-- Class level functions
--------------------------------------------------------------------------------------------------
function SetWrangler_LoadClass(classId,setId)
SetWrangler_HideInfoIcons();
if (setId == nil) then
gSelectedSet = 1;
setId = 1;
end
gTabSet = 0;
SetWrangler_SetTabText(classId);
SetWrangler_LoadSetDropDown();
SetWrangler_UpdateClassTabs(classId);
SetWrangler_LoadSet(setId);
-- Page numbers
SetWranglerTabPageText:SetText(SW_TEXT_PAGE.." "..(gTabSet+1).."/"..gaClassSetData[gSelectedClass].numTabSets);
end
function SetWrangler_UpdateClassTabs(classId)
local tabFrame;
for i=1,SW_NUM_CLASSES do
tabFrame = getglobal("SetWranglerFrameTab"..i);
if (i == classId) then
PanelTemplates_SelectTab(tabFrame);
else
PanelTemplates_DeselectTab(tabFrame);
end
end
end
function SetWrangler_SetClassTabs()
local tabFrame;
for i=1,table.getn(gaClassSetData) do
--dout("Setting tab: "..i..": "..gaClassSetData[i].sName);
tabFrame = getglobal("SetWranglerFrameTab"..i);
tabFrame:SetText(gaClassSetData[i].sName);
PanelTemplates_TabResize(1,tabFrame);
getglobal(tabFrame:GetName().."HighlightTexture"):SetWidth(tabFrame:GetTextWidth() + 35);
tabFrame:Show();
end
end
--------------------------------------------------------------------------------------------------
-- Set level functions
--------------------------------------------------------------------------------------------------
function SetWrangler_LoadSet(setId, leaveChecks)
-- disable other tabs until set is loaded
--dout("Load Set: "..setId);
local setSize = table.getn(gaClassSetData[gSelectedClass].aSetData);
-- Check everything
if (setSize == 0) then
SetWrangler_LoadEmptySet();
else
if (leaveChecks == nil) then
SetWrangler_SetChecks(1);
end
-- Hide the info icon
SetWranglerRankIcon:Hide();
SetWrangler_UpdateSetTabs(setId);
-- Title Text
nameLocationText = getglobal("SetWranglerButtonTitle".."ButtonTextNameLocation");
infoText = getglobal("SetWranglerButtonTitle".."ButtonTextInfo");
SetWranglerButtonTitleButtonTextNameLocation:SetText(gaClassSetData[gSelectedClass].aSetData[setId].sName);
infoText:SetText(gaClassSetData[gSelectedClass].aSetData[setId].setInfo);
-- Set the set stats
SetWranglerFrameInfoText:SetText(gaClassSetData[gSelectedClass].aSetData[setId].setStats);
for i=1,SW_NUM_BUTTONS do
swButton = getglobal("SetWranglerSetTabFrameButton"..i);
swButton:Hide();
end
for i=1,table.getn(gaClassSetData[gSelectedClass].aSetData[setId].aPartData) do
nameLocationText = getglobal("SetWranglerSetTabFrameButton"..i.."ButtonTextNameLocation");
infoText = getglobal("SetWranglerSetTabFrameButton"..i.."ButtonTextInfo");
icon = getglobal("SetWranglerSetTabFrameButton"..i.."Icon");
-- Set the text
infoText:SetText(gaClassSetData[gSelectedClass].aSetData[setId].aPartData[i].itemInfo);
-- Set the icon
link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[i].itemLink
if (string.find(link,"item:") ~= nil) then
checkButton = getglobal("SetWranglerSetTabFrameButton"..i.."CheckButton");
state = checkButton:GetChecked();
if (state ~= nil) then
if (SetWranglerOptions.useLocalCacheOnly == nil and SetWranglerOptions.disconnectFree == nil) then
SetWrangler_CacheItem(link,SetWrangler_LoadSet);
--dout("caching");
end
end
local nm,_,rarity,_,_,_,_,_,tex = GetItemInfo(link);
if (tex ~= nil) then
icon:SetNormalTexture(tex);
else
icon:SetNormalTexture(SW_DEFAULT_ICON);
end
if (nm ~= nil) then
nameLocationText:SetText(SW_LINK_COLOR_OPEN..SW_LINK_COLORS[rarity]..nm..SW_LINK_COLOR_CLOSE);
elseif (SetWranglerOptions.disconnectFree == nil) then
nameLocationText:SetText("Link not cached locally...");
else
local index = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[i].itemLink;
index = string.gsub(index,"item:","");
nameLocationText:SetText(SW_LINK_COLOR_OPEN..SWLocalSetData[index]["c"]..SWLocalSetData[index]["i"]..SW_LINK_COLOR_CLOSE);
end
else
icon:SetNormalTexture(SW_DEFAULT_ICON);
nameLocationText:SetText("Invalid link...");
end
swButton = getglobal("SetWranglerSetTabFrameButton"..i);
swButton:Show();
end
end
end
function SetWrangler_GetItemInfo(link)
local part = gLocalPartData[link];
local name, tex;
if (part ~= nil) then
name = SW_LINK_COLOR_OPEN..part.color[1]..part.line[1]..SW_LINK_COLOR_CLOSE;
tex = part.tex;
else
name = "Invalid link...";
tex = nil;
end
return name,tex;
end
function SetWrangler_SetChecks(state)
SetWranglerButtonTitleCheckButton:SetChecked(state);
local checkButton;
for i=1,table.getn(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData) do
checkButton = getglobal("SetWranglerSetTabFrameButton"..i.."CheckButton");
checkButton:SetChecked(state);
end
end
function SetWrangler_LoadEmptySet()
SetWranglerButtonTitleCheckButton:SetChecked(nil);
nameLocationText = getglobal("SetWranglerButtonTitle".."ButtonTextNameLocation");
infoText = getglobal("SetWranglerButtonTitle".."ButtonTextInfo");
SetWranglerButtonTitleButtonTextNameLocation:SetText("Unknown Set");
infoText:SetText("Ensure case is handled in SetWranglerData.lua");
for i=1,SW_NUM_BUTTONS do
swButton = getglobal("SetWranglerSetTabFrameButton"..i);
swButton:Hide();
end
end
function SetWrangler_UpdateSetTabs(setId)
local tabFrame;
setId = setId - (gTabSet * SW_MAX_TABS);
for i=1, SW_MAX_TABS do
tabFrame = getglobal("SetWranglerSetTabFrameTab"..i);
if (i == setId) then
PanelTemplates_SelectTab(tabFrame);
else
PanelTemplates_DeselectTab(tabFrame);
end
end
end
function SetWrangler_SetTabText(classId)
if (classId == nil) then
classId = gSelectedClass;
end
local startIndex = (gTabSet * SW_MAX_TABS) + 1;
local endIndex = startIndex + SW_MAX_TABS - 1;
if (table.getn(gaClassSetData[classId].aSetData) < endIndex) then
endIndex = table.getn(gaClassSetData[classId].aSetData);
end
local tabFrame;
for i=1,SW_NUM_SET_TABS do
tabFrame = getglobal("SetWranglerSetTabFrameTab"..i);
tabFrame:Hide();
end
local tabIndex = 1;
for i=startIndex,endIndex do
tabFrame = getglobal("SetWranglerSetTabFrameTab"..tabIndex);
tabIndex = tabIndex + 1;
tabFrame:SetText(gaClassSetData[classId].aSetData[i].sTabName);
PanelTemplates_TabResize(0,tabFrame);
getglobal(tabFrame:GetName().."HighlightTexture"):SetWidth(tabFrame:GetTextWidth() + 31);
if (SetWranglerOptions.useDropDown == nil) then
tabFrame:Show();
end
end
-- button disable / enable
--dout(gaClassSetData[classId].numTabSets.." == "..(gTabSet + 1));
if (gaClassSetData[classId].numTabSets == (gTabSet + 1)) then
SetWranglerTabButtonNext:Disable();
else
SetWranglerTabButtonNext:Enable();
end
if (gTabSet == 0) then
SetWranglerTabButtonBack:Disable();
else
SetWranglerTabButtonBack:Enable();
end
end
--------------------------------------------------------------------------------------------------
-- Utility functions
--------------------------------------------------------------------------------------------------
function SetWrangler_Toggle()
if SetWranglerFrame:IsVisible() then
HideUIPanel(SetWranglerFrame);
else
ShowUIPanel(SetWranglerFrame);
end
end
function SetWrangler_StartCacheTimer(itemLink, callback)
gDoCacheTimer = 1;
gCacheTimer = 0;
--gCacheAttempts = 0;
gCacheData.itemLink = itemLink;
gCacheData.callback = callback;
end
function SetWrangler_MakeTextLink(itemLink)
local iName,iLink,iRarity,_,iType,_,_,iEquip = GetItemInfo(itemLink);
local textLink = nil;
if (iName == nil) then
--dout("Failed to cache item link");
else
--dout("Creating a link for: "..iName);
-- New link
textLink = SW_LINK_COLOR_OPEN;
textLink = textLink..SW_LINK_COLORS[iRarity];
textLink = textLink..SW_LINK_HYPERLINK_OPEN;
textLink = textLink..itemLink;
textLink = textLink..SW_LINK_LINK_OPEN;
textLink = textLink..iName;
textLink = textLink..SW_LINK_LINK_CLOSE;
textLink = textLink..SW_LINK_COLOR_CLOSE;
end
return textLink;
end
function SetWrangler_CacheItem(itemLink,callback)
local attempts = 0;
local name = GetItemInfo(itemLink);
if (name == nil) then
--dout("Caching: "..itemLink);
ShowUIPanel(SWCacheTooltip);
if ( not SWCacheTooltip:IsVisible() ) then
SWCacheTooltip:SetOwner(UIParent, "ANCHOR_PRESERVE");
end
SWCacheTooltip:SetHyperlink(itemLink);
SetWrangler_StartCacheTimer(itemLink,callback);
else
--dout(itemLink.." is already cached");
end
end
function SetWrangler_LoadPlayerClass()
local playerClass = UnitClass("player");
if (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_DRUID]) then
gSelectedClass = SW_CLASS_DRUID;
gSelectedSet = 1;
elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_HUNTER]) then
gSelectedClass = SW_CLASS_HUNTER;
gSelectedSet = 1;
elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_MAGE]) then
gSelectedClass = SW_CLASS_MAGE;
gSelectedSet = 1;
elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_PALADIN]) then
gSelectedClass = SW_CLASS_PALADIN;
gSelectedSet = 1;
elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_PRIEST]) then
gSelectedClass = SW_CLASS_PRIEST;
gSelectedSet = 1;
elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_ROGUE]) then
gSelectedClass = SW_CLASS_ROGUE;
gSelectedSet = 1;
elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_SHAMAN]) then
gSelectedClass = SW_CLASS_SHAMAN;
gSelectedSet = 1;
elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_WARLOCK]) then
gSelectedClass = SW_CLASS_WARLOCK;
gSelectedSet = 1;
elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_WARRIOR]) then
gSelectedClass = SW_CLASS_WARRIOR;
gSelectedSet = 1;
end
SetWrangler_LoadClass(gSelectedClass, gSelectedSet);
end
function SetWrangler_Init(opposite)
local faction = UnitFactionGroup("player");
if (opposite == nil) then
if (string.lower(faction) == SW_TEXT_ALLIANCE) then
gPlayerFaction = SW_TEXT_ALLIANCE;
SW_TEXT_RANK_NAMES = SW_TEXT_RANK_NAMES_A;
else
gPlayerFaction = SW_TEXT_HORDE;
SW_TEXT_RANK_NAMES = SW_TEXT_RANK_NAMES_H;
end
else
if (string.lower(faction) == SW_TEXT_ALLIANCE) then
gPlayerFaction = SW_TEXT_HORDE;
SW_TEXT_RANK_NAMES = SW_TEXT_RANK_NAMES_H;
else
gPlayerFaction = SW_TEXT_ALLIANCE;
SW_TEXT_RANK_NAMES = SW_TEXT_RANK_NAMES_A;
end
end
for i=1,table.getn(SW_TEXT_CLASSNAMES) do
gaClassSetData[i] = SetWrangler_MakeMasterData(i);
end
SetWrangler_SetClassTabs();
-- Set arrow text
SetWranglerTabButtonNext:SetText(">>");
SetWranglerTabButtonBack:SetText("<<");
end
function SetWrangler_LoadSetDropDown()
UIDropDownMenu_Initialize(SetWranglerSetDropDown, SetWranglerSetDropDownOnInit);
UIDropDownMenu_SetWidth(150, SetWranglerSetDropDown);
SetWrangler_UpdateSetDropDown();
end
function SetWrangler_UpdateSetDropDown()
UIDropDownMenu_SetSelectedValue(SetWranglerSetDropDown, gSelectedSet);
UIDropDownMenu_SetText(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].sTabName,SetWranglerSetDropDown);
end
--------------------------------------------------------------------------------------------------
-- Handler functions
--------------------------------------------------------------------------------------------------
function SetWranglerOnLoad()
UIPanelWindows["SetWranglerFrame"] = { area = "left", pushable = 9, whileDead = 1 };
this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("PLAYER_LOGIN");
-- Register our slash command
SLASH_SETWRANGLER1 = "/setwrangler";
SLASH_SETWRANGLER2 = "/sw";
SlashCmdList["SETWRANGLER"] = function(msg)
SetWrangler_SlashCommandHandler(msg);
end
UIDropDownMenu_Initialize(SetWranglerLinkDropDown, SetWranglerDropDownOnInit);
UIDropDownMenu_SetWidth(60, SetWranglerLinkDropDown);
UIDropDownMenu_Initialize(SetWranglerRightClickMenu, SetWranglerRightClickMenu_AddItems, "MENU");
end
function SetWrangler_OnShow()
SetWranglerFrameTitleText:SetText(BINDING_HEADER_SETWRANGLER.." v"..SW_VERSION.."");
-- Load the player's class
SetWrangler_LoadPlayerClass();
-- Page numbers
SetWranglerTabPageText:SetText(SW_TEXT_PAGE.." "..(gTabSet+1).."/"..gaClassSetData[gSelectedClass].numTabSets);
-- temp
--SetWrangler_Init();
--
gLinkToIndex = 1;
UIDropDownMenu_SetSelectedValue(SetWranglerLinkDropDown, gLinkToIndex);
UIDropDownMenu_SetText(SW_TEXT_LINK_OPTIONS[gLinkToIndex],SetWranglerLinkDropDown);
--UIDropDownMenu_SetSelectedValue(SetWranglerSetDropDown, gSelectedSet);
--UIDropDownMenu_SetText(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].sTabName,SetWranglerLinkDropDown);
if (SetWranglerOptions.disconnectFree ~= nil) then
SetWranglerPreviewButton:Disable();
SetWranglerLinkButton:Disable();
else
SetWranglerPreviewButton:Enable();
SetWranglerLinkButton:Enable();
end
end
function SetWranglerOnEvent(event)
if( event == "VARIABLES_LOADED" ) then
if (SetWranglerOptions == nil) then
SetWranglerOptions = {};
SetWranglerOptions.useLocalCacheOnly = 1;
SetWranglerOptions.useDropDown = nil;
end
-- Set the check
SetWranglerLocalCacheCheckButton:SetChecked(SetWranglerOptions.useLocalCacheOnly);
-- set the set drop down
if (SetWranglerOptions.useDropDown ~= nil) then
SetWrangler_ShowTabNav(false);
SetWrangler_ShowDropDownNav(true);
end
-- see if we need to load local data
if (SetWranglerOptions.disconnectFree ~= nil) then
SetWrangler_LoadLocalData();
end
elseif( event == "PLAYER_LOGIN" ) then
SetWrangler_Init(SetWranglerOptions.viewOpposingFaction);
end
end
function SetWrangler_OnInfoButtonEnter()
GameTooltip:SetOwner(this, "ANCHOR_NONE");
GameTooltip:SetPoint("TOPLEFT",this, "BOTTOMLEFT",32,0);
local link = nil;
if (this:GetID() == 1) then
link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink2;
elseif (this:GetID() == 2) then
link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink3;
elseif (this:GetID() == 3) then
link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink4;
else
link = "";
end
if (SetWranglerOptions.disconnectFree == nil) then -- do normal method
if (string.find(link,"item:") ~= nil) then
if (GetItemInfo(link)) then
GameTooltip:SetHyperlink(link);
GameTooltip:Show();
end
end
else
local index = string.gsub(link,"item:","");
SetWrangler_SetLocalTooltip(index);
end
end
function SetWrangler_OnButtonEnter()
GameTooltip:SetOwner(this, "ANCHOR_NONE");
GameTooltip:SetPoint("TOPLEFT",this, "BOTTOMLEFT",32,0);
if (SetWranglerOptions.disconnectFree == nil) then -- do normal method
local link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[this:GetParent():GetID()].itemLink;
if (string.find(link,"item:") ~= nil) then
if (GetItemInfo(link)) then
GameTooltip:SetHyperlink(link);
GameTooltip:Show();
end
end
else -- Do disconnect free local method
local index = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[this:GetParent():GetID()].itemLink;
index = string.gsub(index,"item:","");
SetWrangler_SetLocalTooltip(index);
end
this:GetParent():LockHighlight();
end
function SetWrangler_SetLocalTooltip(index)
local ttText = SWLocalSetData[index]["t"];
local token = "";
if (ttText ~= nil) then
local color = SWLocalSetData[index]["c"];
--dout(ttText);
token,ttText = SetWrangler_GetToken(ttText);
GameTooltip:AddLine(SW_LINK_COLOR_OPEN..color..token..SW_LINK_COLOR_CLOSE);
-- Binding
token,ttText = SetWrangler_GetToken(ttText);
GameTooltip:AddLine(SW_LINK_COLOR_OPEN.."ffffff"..token..SW_LINK_COLOR_CLOSE);
-- Spot and type
leftToken,ttText = SetWrangler_GetToken(ttText);
rightToken,ttText = SetWrangler_GetToken(ttText);
GameTooltip:AddDoubleLine(leftToken,rightToken,1,1,1,1,1,1);
-- The bonuses
token,ttText = SetWrangler_GetToken(ttText);
--dout(token.." ("..SetWrangler_SafeLen(token)..")");
local lineColor = "ffffff";
while (SetWrangler_IsEmpty(token) == false) do
if (string.find(token,"Equip:") ~= nil or string.find(token,"Passive:") ~= nil or string.find(token,"Use:") ~= nil) then
lineColor = SW_GREEN;
end
GameTooltip:AddLine(SW_LINK_COLOR_OPEN..lineColor..token..SW_LINK_COLOR_CLOSE);
token,ttText = SetWrangler_GetToken(ttText);
--dout(token.." ("..SetWrangler_SafeLen(token)..")");
end
local firstTime = true;
-- Set the set text
token,ttText = SetWrangler_GetToken(ttText);
while (SetWrangler_SafeLen(token) > 0) do
if (firstTime == true) then
GameTooltip:AddLine(" ");
firstTime = false;
end
GameTooltip:AddLine(SW_GOLD_OPEN..token..SW_LINK_COLOR_CLOSE);
token,ttText = SetWrangler_GetToken(ttText);
end
firstTime = true;
-- Set the descriptive text
token,ttText = SetWrangler_GetToken(ttText);
while (SetWrangler_SafeLen(token) > 0) do
if (firstTime == true) then
GameTooltip:AddLine(" ");
firstTime = false;
end
GameTooltip:AddLine(SW_GREEN_OPEN..token..SW_LINK_COLOR_CLOSE);
token,ttText = SetWrangler_GetToken(ttText);
end
GameTooltip:SetWidth(200);
GameTooltip:Show();
end
end
function SetWrangler_GetToken(ttText)
if (ttText == nil) then
return nil,nil;
end
local lineEnd = string.find(ttText,"ยท");
if (lineEnd == nil) then
return "";
end
if (lineEnd > 35) then
for i=35, SetWrangler_SafeLen(ttText) do
--dout(string.byte(token,i));
local char = string.byte(ttText,i);
if (char > 127 or char == 32) then
lineEnd = i;
i = SetWrangler_SafeLen(ttText);
end
end
end
local token = string.sub(ttText,1,lineEnd);
ttText = string.sub(ttText,lineEnd+1);
return token,ttText;
end
function SetWrangler_SafeLen(str)
if (str == nil) then
return 0;
end
return string.len(str);
end
function SetWrangler_IsEmpty(token)
if (SetWrangler_SafeLen(token) == 0) then
return true;
end
for i=1, SetWrangler_SafeLen(token) do
--dout(string.byte(token,i));
local char = string.byte(token,i);
if (char ~= 32 and char ~= 10 and char < 127) then
return false;
end
end
return true;
end
function SetWrangler_OnUpdate(elapse)
if (gDoCacheTimer == 1) then
--dout("Update: "..gCacheTimer);
gCacheTimer = gCacheTimer + elapse;
if (gCacheTimer > SW_CACHE_TIMER) then
gDoCacheTimer = 0;
gCacheAttempts = gCacheAttempts + 1;
if (gCacheAttempts <= SW_MAX_CACHE_ATTEMPTS) then
gCacheData.callback(gSelectedSet,1);
else
nameLocationText:SetText("Failed to load link...");
end
end
end
end
function SetWranglerFunctionButton_OnEnter()
if( this:GetCenter() < GetScreenWidth() / 2 ) then
GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT");
else
GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT");
end
if (this == SetWranglerPreviewButton) then
GameTooltip:SetText("Preview the checked items in the Dressing Room.");
elseif (this == SetWranglerLinkButton) then
GameTooltip:SetText("Link the checked items in the chat window.");
elseif (this == SetWranglerLocalCacheCheckButton or this == SWOptionsLocalCacheCheckButton) then
GameTooltip:SetText(SW_TEXT_CACHE_TT);
elseif (this == SetWranglerTabButtonNext) then
GameTooltip:SetText(SW_TEXT_TAB_NEXT);
elseif (this == SetWranglerTabButtonBack) then
GameTooltip:SetText(SW_TEXT_TAB_BACK);
elseif (this == SWOptionsDropDownCheckButton) then
GameTooltip:SetText(SW_TEXT_TAB_NAV);
elseif (this == SWOptionsMOFakeButton) then
GameTooltip:SetText(SW_TEXT_PMODE);
elseif (this == SWOptionsDisconnectFreeCheckButton) then
GameTooltip:SetText(SW_TEXT_DFMODE);
end
end
function SetWrangler_SlashCommandHandler(msg)
SetWrangler_Toggle();
end
--------------------------------------------------------------------------------------------------
-- OnClick Handlers
--------------------------------------------------------------------------------------------------
function SetWranglerOnEventOnClassClick(classId)
gDoCacheTimer = 0;
SetWrangler_HideInfoIcons();
gSelectedClass = classId;
if (classId <= table.getn(gaClassSetData)) then
SetWrangler_LoadClass(classId);
end
end
function SetWranglerOnEventOnSetClick(setId)
gDoCacheTimer = 0;
SetWrangler_HideInfoIcons();
gSelectedSet = (gTabSet * SW_MAX_TABS) + setId;
SetWrangler_LoadSet(gSelectedSet);
SetWrangler_UpdateSetDropDown();
end
function SetWrangler_OnCheckButtonClick()
local state = this:GetChecked();
SetWrangler_SetChecks(state);
end
function SetWrangler_OnPreview()
--ShowUIPanel(DressUpModel);
-- Dummy link to open it or Undress will not work initially
DressUpItemLink("");
if (SetWranglerOptions.previewMode == 2) then -- get naked
DressUpModel:Undress();
elseif (SetWranglerOptions.previewMode == 3) then -- dress in current armor
DressUpModel:Dress();
end
for i=1,table.getn(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData) do
checkButton = getglobal("SetWranglerSetTabFrameButton"..i.."CheckButton");
state = checkButton:GetChecked();
if (state ~= nil) then
if (GetItemInfo(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[i].itemLink) ~= nil) then
DressUpItemLink(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[i].itemLink);
end
end
end
--DressUpItemLink("item:4044:0:0:0");
--DressUpItemLink("item:16793:0:0:0");
end
function SetWrangler_OnLink()
--dout("Link");
local numOnLine = 0;
local line = "";
local CHAT_SYSTEM = SW_TEXT_LINK_OPTIONS_SL[gLinkToIndex];
SendChatMessage(BINDING_HEADER_SETWRANGLER.." "..SW_TEXT_LINKS,CHAT_SYSTEM,nil,nil);
SendChatMessage(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].sName.." ("..gaClassSetData[gSelectedClass].sName..", "..gaClassSetData[gSelectedClass].aSetData[gSelectedSet].setInfo..")",CHAT_SYSTEM,nil,nil);
for i=1,table.getn(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData) do
checkButton = getglobal("SetWranglerSetTabFrameButton"..i.."CheckButton");
state = checkButton:GetChecked();
if (state ~= nil) then
link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[i].itemLink
if (GetItemInfo(link) ~= nil) then
textLink = SetWrangler_MakeTextLink(link);
if (textLink ~= nil and string.find(link,"item:") ~= nil) then
line = line..textLink..", ";
numOnLine = numOnLine + 1;
val = math.mod(numOnLine,SW_ITEMS_ON_LINE);
if (math.mod(numOnLine,SW_ITEMS_ON_LINE) == 0) then
line = string.sub(line,1,string.len(line) - 2);
SendChatMessage(line,CHAT_SYSTEM,nil,nil);
numOnLine = 0;
line = "";
end
end
end
end
end
if (numOnLine > 0) then
line = string.sub(line,1,string.len(line) - 2);
SendChatMessage(line,system,nil,whisperName);
end
end
function SetWrangler_OnLocalCache()
if (SetWranglerOptions.useLocalCacheOnly == nil) then
SetWranglerOptions.useLocalCacheOnly = 1;
else
SetWranglerOptions.useLocalCacheOnly = nil;
SetWrangler_HideInfoIcons();
SetWrangler_LoadSet(gSelectedSet,1);
end
end
function SetWranglerCommand_OnLink(system, whisperName)
--dout("Link");
local numOnLine = 0;
local line = "";
SendChatMessage(BINDING_HEADER_SETWRANGLER.." "..SW_TEXT_LINKS,system,nil,whisperName);
SendChatMessage(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].sName.." ("..gaClassSetData[gSelectedClass].sName..", "..gaClassSetData[gSelectedClass].aSetData[gSelectedSet].setInfo..")",system,nil,whisperName);
for i=1,table.getn(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData) do
checkButton = getglobal("SetWranglerSetTabFrameButton"..i.."CheckButton");
state = checkButton:GetChecked();
if (state ~= nil) then
link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[i].itemLink
if (GetItemInfo(link) ~= nil) then
textLink = SetWrangler_MakeTextLink(link);
if (textLink ~= nil and string.find(link,"item:") ~= nil) then
line = line..textLink..", ";
numOnLine = numOnLine + 1;
if (math.mod(numOnLine,SW_ITEMS_ON_LINE) == 0) then
line = string.sub(line,1,string.len(line) - 2);
SendChatMessage(line,system,nil,whisperName);
numOnLine = 0;
line = "";
end
end
end
end
end
if (numOnLine > 0) then
line = string.sub(line,1,string.len(line) - 2);
SendChatMessage(line,system,nil,whisperName);
end
end
function SetWrangler_HideInfoIcons()
-- Hide the info icons
SetWranglerSetTabFrameInfoIcon1:Hide();
SetWranglerSetTabFrameInfoIcon2:Hide();
SetWranglerSetTabFrameInfoIcon3:Hide();
end
function SetWrangler_LoadInfoIcons()
local part = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart];
SetWrangler_HideInfoIcons();
for i=1,3 do
local link = nil;
if (i == 1) then
link = part.itemLink2;
elseif (i == 2) then
link = part.itemLink3;
elseif (i == 3) then
link = part.itemLink4;
end
local button = getglobal("SetWranglerSetTabFrameInfoIcon"..i);
local title = getglobal("SetWranglerInfoIconTitle"..i);
if (link ~= nil) then
if (string.find(link,"item:") ~= nil) then
if (SetWranglerOptions.useLocalCacheOnly == nil) then
SetWrangler_CacheItem(link,SetWrangler_LoadInfoIcons);
end
local nm,_,rarity,_,_,_,_,_,tex = GetItemInfo(link);
if (tex ~= nil) then
button:SetNormalTexture(tex);
else
button:SetNormalTexture(SW_DEFAULT_ICON);
end
if (nm ~= nil) then
title:SetText(SW_LINK_COLOR_OPEN..SW_LINK_COLORS[rarity]..nm..SW_LINK_COLOR_CLOSE);
elseif (SetWranglerOptions.disconnectFree == nil) then
title:SetText("Link not cached locally...");
else
local index = string.gsub(link,"item:","");
title:SetText(SW_LINK_COLOR_OPEN..SWLocalSetData[index]["c"]..SWLocalSetData[index]["i"]..SW_LINK_COLOR_CLOSE);
end
else
--dout("default tex");
button:SetNormalTexture(SW_DEFAULT_ICON);
end
button:Show();
end
end
end
function SetWranglerItem_OnClick(button)
gDoCacheTimer = 0;
local partIndex = this:GetID();
if (partIndex == 500) then -- then icon button
partIndex = this:GetParent():GetID();
end
gSelectedPart = partIndex;
if (button == "LeftButton") then
if (IsShiftKeyDown()) then
if (SetWranglerOptions.disconnectFree == nil) then
link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink
if (link ~= nil) then
if (GetItemInfo(link) ~= nil) then
textLink = SetWrangler_MakeTextLink(link);
if ( not ChatFrameEditBox:IsVisible() ) then
ChatFrame_OpenChat(textLink);
else
ChatFrameEditBox:SetText(ChatFrameEditBox:GetText()..textLink);
end
end
end
end
else
-- see if the part has an info icon
local part = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[partIndex];
infoIcon = part.itemInfoIcon;
if (infoIcon ~= nil) then
SetWranglerRankIcon:SetTexture(infoIcon);
SetWranglerRankIcon:Show();
else
SetWranglerRankIcon:Hide();
end
SetWranglerFrameInfoText:SetText(part.itemStats);
SetWrangler_LoadInfoIcons();
end
else
if (SetWranglerOptions.disconnectFree == nil) then
gWhisperLowerBound = 1;
xOffset = 72;
yOffset = (this:GetHeight() / 2);
ToggleDropDownMenu(1, nil, SetWranglerRightClickMenu, "SetWranglerSetTabFrameButton"..partIndex, xOffset, yOffset);
end
end
end
function SetWranglerTitleButton_OnClick(button)
SetWrangler_HideInfoIcons();
-- Set the set stats
gSelectedPart = 0;
if (button == "LeftButton") then
SetWranglerRankIcon:Hide();
SetWranglerFrameInfoText:SetText(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].setStats);
else
gWhisperLowerBound = 1;
xOffset = 40;
yOffset = (this:GetHeight() / 2);
ToggleDropDownMenu(1, nil, SetWranglerRightClickMenu, "SetWranglerButtonTitle", xOffset, yOffset);
end
end
function SetWranglerRightClickMenu_OnClick()
ToggleDropDownMenu(1, nil, SetWranglerRightClickMenu, "SetWranglerSetTabFrame", 100, 420);
if (this.value == "preview") then
if (gSelectedPart > 0) then
if (GetItemInfo(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink) ~= nil) then
DressUpItemLink(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink);
end
else -- do whole set
SetWrangler_OnPreview();
end
else
local CHAT_SYSTEM, link;
if (this.value == 1) then
CHAT_SYSTEM = SW_TEXT_LINK_OPTIONS_SL[1];
elseif (this.value == 2) then
CHAT_SYSTEM = SW_TEXT_LINK_OPTIONS_SL[2];
elseif (this.value == 3) then
CHAT_SYSTEM = SW_TEXT_LINK_OPTIONS_SL[3];
elseif (this.value == 4) then
CHAT_SYSTEM = SW_TEXT_LINK_OPTIONS_SL[4];
elseif (this.value == 5) then
CHAT_SYSTEM = SW_TEXT_LINK_OPTIONS_SL[5];
elseif (this.value == 6) then
CHAT_SYSTEM = SW_TEXT_LINK_OPTIONS_SL[6];
end
if (gSelectedPart > 0) then
link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink;
if (string.find(link,"item:") ~= nil) then
SendChatMessage(BINDING_HEADER_SETWRANGLER.." "..SW_TEXT_LINKS,CHAT_SYSTEM);
textLink = SetWrangler_MakeTextLink(link);
if (GetItemInfo(link) ~= nil) then
if (textLink ~= nil) then
SendChatMessage(textLink,CHAT_SYSTEM);
end
end
end
else -- link set
SetWranglerCommand_OnLink(CHAT_SYSTEM);
end
end
end
function SetWranglerWhisperRightClickMenu_OnClick()
ToggleDropDownMenu(1, nil, SetWranglerRightClickMenu, "SetWranglerSetTabFrame", 100, 420);
local whisper;
if (this.value == 0) then
whisper = UnitName("target");
else
whisper = this.value;
end
if (whisper ~= nil) and (string.len(whisper) > 0) then
if (gSelectedPart > 0 and string.find(link,"item:") ~= nil) then
link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink;
if (GetItemInfo(link) ~= nil) then
textLink = SetWrangler_MakeTextLink(link);
SendChatMessage(textLink,"WHISPER",nil,whisper);
end
else
SetWranglerCommand_OnLink("WHISPER",whisper);
end
end
end
function SetWranglerMoreRightClickMenu_OnClick()
--dout("inc and update");
gWhisperLowerBound = gWhisperLowerBound + SW_WHISPER_MAX + 1;
UIDropDownMenu_Initialize(SetWranglerRightClickMenu, SetWranglerRightClickMenu_AddItems, "MENU");
end
function SetWrangler_OnTabNavClick()
if (this == SetWranglerTabButtonNext) then
gTabSet = gTabSet + 1;
elseif (this == SetWranglerTabButtonBack) then
gTabSet = gTabSet - 1;
end
SetWrangler_UpdateSetTabs(gSelectedSet);
SetWrangler_SetTabText();
-- Page numbers
SetWranglerTabPageText:SetText(SW_TEXT_PAGE.." "..(gTabSet+1).."/"..gaClassSetData[gSelectedClass].numTabSets);
end
function SetWrangler_OnOptions()
ShowUIPanel(SWOptionsFrame);
end
--------------------------------------------------------------------------------------------------
-- Menu functions
--------------------------------------------------------------------------------------------------
function SetWranglerDropDownOnInit()
SetWranglerDropDownAdd(SetWranglerDropDownDropDownOnSelect);
end
function SetWranglerSetDropDownOnInit()
SetWranglerDropDownAddSets(SetWranglerSetDropDownOnSelect);
end
function SetWranglerDropDownDropDownOnSelect()
UIDropDownMenu_SetSelectedValue(SetWranglerLinkDropDown, this.value);
UIDropDownMenu_SetText(SW_TEXT_LINK_OPTIONS[this.value],SetWranglerLinkDropDown);
gLinkToIndex = this.value;
end
function SetWranglerSetDropDownOnSelect()
UIDropDownMenu_SetSelectedValue(SetWranglerSetDropDown, this.value);
UIDropDownMenu_SetText(gaClassSetData[gSelectedClass].aSetData[this.value].sTabName,SetWranglerSetDropDown);
gDoCacheTimer = 0;
SetWrangler_HideInfoIcons();
local setId = this.value;
gSelectedSet = setId;
-- set the correct tab set here
gTabSet = math.ceil(setId / SW_MAX_TABS) - 1;
SetWrangler_UpdateSetTabs(gSelectedSet);
SetWrangler_SetTabText();
SetWrangler_LoadSet(setId);
end
function SetWranglerDropDownAdd(func)
for i=1,table.getn(SW_TEXT_LINK_OPTIONS) do
info = {};
info.text = SW_TEXT_LINK_OPTIONS[i];
info.func = func;
info.value = i;
UIDropDownMenu_AddButton(info);
end
end
function SetWranglerDropDownAddSets(func)
--dout(gSelectedClass);
for i=1,table.getn(gaClassSetData[gSelectedClass].aSetData) do
info = {};
info.text = gaClassSetData[gSelectedClass].aSetData[i].sTabName;
info.func = func;
info.value = i;
UIDropDownMenu_AddButton(info);
end
end
function SetWranglerRightClickMenu_AddItems()
--dout("Init");
if (UIDROPDOWNMENU_MENU_LEVEL == 1) then
SetWranglerRightClickMenu_AddTitle(BINDING_HEADER_SETWRANGLER);
SetWranglerRightClickMenu_AddCommand(SW_TEXT_PREVIEW, "preview", SetWranglerRightClickMenu_OnClick, nil);
SetWranglerRightClickMenu_AddNest(SW_TEXT_LINK, "2")
elseif (UIDROPDOWNMENU_MENU_LEVEL == 2) then
for i=1,table.getn(SW_TEXT_LINK_OPTIONS) do
SetWranglerRightClickMenu_AddCommand(SW_TEXT_LINK_OPTIONS[i], i, SetWranglerRightClickMenu_OnClick, nil, UIDROPDOWNMENU_MENU_LEVEL);
end
SetWranglerRightClickMenu_AddNest(SW_TEXT_WHISPER, "3",2);
elseif (UIDROPDOWNMENU_MENU_LEVEL == 3) then
SetWranglerRightClickMenu_AddCommand(SW_LINK_COLOR_OPEN..SW_LINK_COLORS[3]..SW_TEXT_WHISPER_TARGET..SW_LINK_COLOR_CLOSE, 0, SetWranglerWhisperRightClickMenu_OnClick,nil, UIDROPDOWNMENU_MENU_LEVEL, 74, 133, 184);
local bound = gWhisperLowerBound + SW_WHISPER_MAX;
local addMore = 0;
if (bound > GetNumFriends()) then
bound = GetNumFriends();
else
addMore = 1;
end
--dout("low: "..gWhisperLowerBound);
--dout("high: "..bound);
for i=gWhisperLowerBound,bound do
local name, level, class, area, connected = GetFriendInfo(i);
if (connected == 1) then
SetWranglerRightClickMenu_AddCommand(name, name, SetWranglerWhisperRightClickMenu_OnClick, nil, UIDROPDOWNMENU_MENU_LEVEL);
else
SetWranglerRightClickMenu_AddCommand(name, name, SetWranglerWhisperRightClickMenu_OnClick, 1, UIDROPDOWNMENU_MENU_LEVEL);
end
end
if (addMore == 1) then
SetWranglerRightClickMenu_AddMoreCommand(SW_LINK_COLOR_OPEN..SW_LINK_COLORS[3]..SW_TEXT_MORE..SW_LINK_COLOR_CLOSE, 0, SetWranglerMoreRightClickMenu_OnClick,UIDROPDOWNMENU_MENU_LEVEL);
end
end
end
function SetWranglerRightClickMenu_AddTitle(title, level)
if (title) then
local info = {};
info.text = title;
info.notClickable = 1;
info.isTitle = 1;
UIDropDownMenu_AddButton(info, level);
end
end
function SetWranglerRightClickMenu_AddNest(text, value, level)
local info = {};
info.text = text;
--info.value = value;
info.func = nil;
info.hasArrow = 1;
info.notCheckable = 1;
info.keepShownOnClick = 1;
UIDropDownMenu_AddButton(info, level);
end
function SetWranglerRightClickMenu_AddCommand(text, value, functionName, disabled, level, r, g, b)
local info = {};
info.text = text;
info.value = value;
info.func = functionName;
info.notCheckable = 1;
info.disabled = disabled;
info.r = r;
info.g = g;
info.b = b;
UIDropDownMenu_AddButton(info, level);
end
function SetWranglerRightClickMenu_AddMoreCommand(text, value, functionName, level)
local info = {};
info.text = text;
info.value = value;
info.func = functionName;
info.notCheckable = 1;
info.keepShownOnClick = 1;
info.checked = nil;
UIDropDownMenu_AddButton(info, level);
end
--------------------------------------------------------------------------------------------------
-- Options functions
--------------------------------------------------------------------------------------------------
function SWOptionsFrame_OnLoad()
end
function SWOptionsFrame_OnShow()
SWOptionsLocalCacheCheckButton:SetChecked(SetWranglerLocalCacheCheckButton:GetChecked());
SWOptionsDropDownCheckButton:SetChecked(SetWranglerOptions.useDropDown);
SWOptionsDisconnectFreeCheckButton:SetChecked(SetWranglerOptions.disconnectFree);
UIDropDownMenu_Initialize(SWOptionsPreviewModeDropDown, SetWrranglerPreviewModeDropDownOnInit);
UIDropDownMenu_SetWidth(150, SWOptionsPreviewModeDropDown);
if (SetWranglerOptions.previewMode == nil) then
SetWranglerOptions.previewMode = 1;
end
UIDropDownMenu_SetSelectedValue(SWOptionsPreviewModeDropDown, SetWranglerOptions.previewMode);
UIDropDownMenu_SetText(SW_TEXT_PREVIEW_OPTIONS[SetWranglerOptions.previewMode],SWOptionsPreviewModeDropDown);
end
function SWOptionsFrame_OnHide()
end
function SWOptionsFrame_OnOK()
---
SetWranglerOptions.useLocalCacheOnly = SWOptionsLocalCacheCheckButton:GetChecked();
SetWranglerLocalCacheCheckButton:SetChecked(SetWranglerOptions.useLocalCacheOnly);
---
SetWranglerOptions.useDropDown = SWOptionsDropDownCheckButton:GetChecked();
if (SetWranglerOptions.useDropDown ~= nil) then
SetWrangler_ShowTabNav(false);
SetWrangler_ShowDropDownNav(true);
else
SetWrangler_ShowTabNav(true);
SetWrangler_ShowDropDownNav(false);
end
---
SetWranglerOptions.disconnectFree = SWOptionsDisconnectFreeCheckButton:GetChecked();
if (SetWranglerOptions.disconnectFree ~= nil) then
SetWrangler_LoadLocalData();
-- Disable the preview and link buttons
SetWranglerPreviewButton:Disable();
SetWranglerLinkButton:Disable();
SetWranglerLocalCacheCheckButton:Hide();
else
SetWrangler_ClearLocalData();
SetWranglerPreviewButton:Enable();
SetWranglerLinkButton:Enable();
SetWranglerLocalCacheCheckButton:Show();
end
---
HideUIPanel(SWOptionsFrame);
-- refresh the current set
SetWrangler_LoadSet(gSelectedSet);
end
function SetWrangler_ShowTabNav(show)
local tabFrame;
if (show == false) then
for i=1,SW_NUM_SET_TABS do
tabFrame = getglobal("SetWranglerSetTabFrameTab"..i);
tabFrame:Hide();
end
SetWranglerTabButtonNext:Hide();
SetWranglerTabButtonBack:Hide();
SetWranglerTabPageText:Hide();
else
SetWrangler_SetTabText(gSelectedClass);
SetWranglerTabButtonNext:Show();
SetWranglerTabButtonBack:Show();
SetWranglerTabPageText:Show();
end
end
function SetWrangler_ShowDropDownNav(show)
if (show == false) then
SetWranglerSetDropDown:Hide();
else
SetWranglerSetDropDown:Show();
end
end
function SetWrranglerPreviewModeDropDownOnInit()
SetWranglerPreviewModeDropDownAdd(SetWranglerPreviewModeDropDownOnSelect);
end
function SetWranglerPreviewModeDropDownAdd(func)
for i=1,table.getn(SW_TEXT_PREVIEW_OPTIONS) do
info = {};
info.text = SW_TEXT_PREVIEW_OPTIONS[i];
info.func = func;
info.value = i;
UIDropDownMenu_AddButton(info);
end
end
function SetWranglerPreviewModeDropDownOnSelect()
UIDropDownMenu_SetSelectedValue(SWOptionsPreviewModeDropDown, SetWranglerOptions.previewMode);
UIDropDownMenu_SetText(SW_TEXT_PREVIEW_OPTIONS[this.value],SWOptionsPreviewModeDropDown);
SetWranglerOptions.previewMode = this.value;
end
Generated by GNU Enscript 1.6.5.90.