vanilla-wow-addons – Rev 1
?pathlinks?
--[[
MonkeyQuest:
Displays your quests for quick viewing.
Website: http://wow.visualization.ca/
Author: Trentin (monkeymods@gmail.com)
Contributors:
Celdor
- Help with the Quest Log Freeze bug
Diungo
- Toggle grow direction
Pkp
- Color Quest Titles the same as the quest level
wowpendium.de
- German translation
MarsMod
- Valid player name before the VARIABLES_LOADED event bug
- Settings resetting bug
Dunewarrior
- Tooltip update for WoW 1.7.0
Global
- PvP Quests
--]]
-- script variables not saved
MonkeyQuest = {};
MonkeyQuest.m_bLoaded = false; -- true when the config variables are loaded
MonkeyQuest.m_bVariablesLoaded = false;
MonkeyQuest.m_iNumQuestButtons = 40; -- 40 is the max possible entries in the quest log (20 quests and 20 different locations)
MonkeyQuest.m_iMaxTextWidth = 229; -- wraps the text if it gets too long, mostly needed for objectives
MonkeyQuest.m_strPlayer = "";
MonkeyQuest.m_aQuestList = {};
MonkeyQuest.m_aQuestItemList = {};
MonkeyQuest.m_bGotQuestLogUpdate = false;
MonkeyQuest.m_bNeedRefresh = false;
MonkeyQuest.m_fTimeSinceRefresh = 0.0;
MonkeyQuest.m_bCleanQuestList = true; -- used to clean up the hidden list on the first questlog update event
MonkeyQuest.m_colourBorder = { r = TOOLTIP_DEFAULT_COLOR.r, g = TOOLTIP_DEFAULT_COLOR.g, b = TOOLTIP_DEFAULT_COLOR.b };
function MonkeyQuest_OnLoad()
-- register events
this:RegisterEvent('VARIABLES_LOADED');
this:RegisterEvent('QUEST_LOG_UPDATE'); -- used to know when to refresh the MonkeyQuest text
this:RegisterEvent('UNIT_NAME_UPDATE'); -- this is the event I use to get per character config settings
this:RegisterEvent('PLAYER_ENTERING_WORLD'); -- this event gives me a good character name in situations where 'UNIT_NAME_UPDATE' doesn't even trigger
this:RegisterEvent('PLAYER_LEVEL_UP'); -- when you level up the difficulty of some quests may change
-- events when zone changes to update the zone highlighting quests
this:RegisterEvent('ZONE_CHANGED');
this:RegisterEvent('ZONE_CHANGED_INDOORS');
this:RegisterEvent('ZONE_CHANGED_NEW_AREA');
-- initialize the border and backdrop of the main frame
--this:SetBackdropBorderColor(TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b);
--this:SetBackdropColor(TOOLTIP_DEFAULT_BACKGROUND_COLOR.r, TOOLTIP_DEFAULT_BACKGROUND_COLOR.g, TOOLTIP_DEFAULT_BACKGROUND_COLOR.b, 0);
-- setup the title of the main frame
MonkeyQuestTitleText:SetText(MONKEYQUEST_TITLE);
MonkeyQuestTitleText:SetTextColor(MONKEYLIB_TITLE_COLOUR.r, MONKEYLIB_TITLE_COLOUR.g, MONKEYLIB_TITLE_COLOUR.b);
MonkeyQuestTitleText:Show();
MonkeyQuestSlash_Init();
-- overide af tooltip functions
MonkeyQuest_OLD_aftt_setName = aftt_setName;
aftt_setName = MonkeyQuest_NEW_aftt_setName;
-- this will catch mobs needed for quests
this:RegisterEvent('UPDATE_MOUSEOVER_UNIT');
-- this should catch items when you're going to sell them
MonkeyQuest_OLD_ContainerFrameItemButton_OnEnter = ContainerFrameItemButton_OnEnter;
ContainerFrameItemButton_OnEnter = MonkeyQuest_NEW_ContainerFrameItemButton_OnEnter;
end
function MonkeyQuest_OnUpdate(arg1)
-- if not loaded yet then get out
if (MonkeyQuest.m_bLoaded == false) then
return;
end
-- need to make sure we don't read from the quest list before a QUEST_LOG_UPDATE or we'll get the previous character's data
if (MonkeyQuest.m_bGotQuestLogUpdate == false) then
return;
end
-- update the timer
MonkeyQuest.m_fTimeSinceRefresh = MonkeyQuest.m_fTimeSinceRefresh + arg1;
-- if it's been more than MONKEYQUEST_DELAY seconds and we need to process a dropped QUEST_LOG_UPDATE
if (MonkeyQuest.m_fTimeSinceRefresh > MONKEYQUEST_DELAY and MonkeyQuest.m_bNeedRefresh == true) then
MonkeyQuest_Refresh();
end
if (MonkeyQuest.m_bCleanQuestList == true) then
if (MonkeyQuest.m_fTimeSinceRefresh > 15.0) then
MonkeyQuestInit_CleanQuestList();
MonkeyQuest.m_bCleanQuestList = false;
end
end
end
function MonkeyQuest_OnQuestLogUpdate()
-- if everything's been loaded, refresh the Quest Monkey Display
if (MonkeyQuest.m_bLoaded == true) then
if (MonkeyQuest.m_bNeedRefresh == true) then
-- don't process, let the OnUpdate catch it, but reset the timer
MonkeyQuest.m_fTimeSinceRefresh = 0.0;
else
MonkeyQuest.m_bNeedRefresh = true;
MonkeyQuest.m_fTimeSinceRefresh = 0.0;
end
end
end
-- OnEvent Function
function MonkeyQuest_OnEvent(event)
if (event == 'VARIABLES_LOADED') then
-- this event gets called when the variables are loaded
-- there's a possible situation where the other events might get a valid
-- player name BEFORE this event, which resets your config settings :(
MonkeyQuest.m_bVariablesLoaded = true;
-- double check that the mod isn't already loaded
if (not MonkeyQuest.m_bLoaded) then
MonkeyQuest.m_strPlayer = UnitName('player');
-- if MonkeyQuest.m_strPlayer is UNKNOWNOBJECT get out, need a real name
if (MonkeyQuest.m_strPlayer ~= nil and MonkeyQuest.m_strPlayer ~= UNKNOWNOBJECT) then
-- should have a valid player name here
MonkeyQuestInit_LoadConfig();
end
end
-- exit this event
return;
end -- VARIABLES_LOADED
if (event == 'UNIT_NAME_UPDATE') then
-- this event gets called whenever a unit's name changes (supposedly)
-- Note: Sometimes it gets called when unit's name gets set to
-- UNKNOWNOBJECT
-- double check that the mod isn't already loaded
if (not MonkeyQuest.m_bLoaded) then
-- this is the first place I know that reliably gets the player name
MonkeyQuest.m_strPlayer = UnitName('player');
-- if MonkeyQuest.m_strPlayer is UNKNOWNOBJECT get out, need a real name
if (MonkeyQuest.m_strPlayer ~= nil and MonkeyQuest.m_strPlayer ~= UNKNOWNOBJECT) then
-- should have a valid player name here
MonkeyQuestInit_LoadConfig();
end
end
-- exit this event
return;
end -- UNIT_NAME_UPDATE
if (event == 'PLAYER_ENTERING_WORLD') then
-- this event gets called when the player enters the world
-- Note: on initial login this event will not give a good player name
-- double check that the mod isn't already loaded
if (not MonkeyQuest.m_bLoaded) then
MonkeyQuest.m_strPlayer = UnitName('player');
-- if MonkeyQuest.m_strPlayer is UNKNOWNOBJECT get out, need a real name
if (MonkeyQuest.m_strPlayer ~= nil and MonkeyQuest.m_strPlayer ~= UNKNOWNOBJECT) then
-- should have a valid player name here
MonkeyQuestInit_LoadConfig();
end
end
-- exit this event
return;
end -- PLAYER_ENTERING_WORLD
if (event == 'QUEST_LOG_UPDATE') then
MonkeyQuest.m_bGotQuestLogUpdate = true;
MonkeyQuest_OnQuestLogUpdate();
return;
end -- QUEST_LOG_UPDATE
if (event == 'ZONE_CHANGED' or event == 'ZONE_CHANGED_INDOORS' or event == 'ZONE_CHANGED_NEW_AREA') then
MonkeyQuest_Refresh();
end -- ZONE_CHANGED
if (event == 'PLAYER_LEVEL_UP') then
MonkeyQuest_Refresh();
end -- PLAYER_LEVEL_UP
if (event == 'TOOLTIP_ANCHOR_DEFAULT') then
if (MonkeyQuest_SearchTooltip() == true) then
GameTooltip:AddLine(MONKEYQUEST_TOOLTIP_QUESTITEM, MONKEYLIB_TITLE_COLOUR.r, MONKEYLIB_TITLE_COLOUR.g, MONKEYLIB_TITLE_COLOUR.b, 1);
GameTooltip:SetHeight(GameTooltip:GetHeight() + 14);
end
end -- TOOLTIP_ANCHOR_DEFAULT
if (event == 'UPDATE_MOUSEOVER_UNIT') then
-- check if this is a quest item
MonkeyQuest_SearchTooltip();
end -- UPDATE_MOUSEOVER_UNIT
end
-- this function is called when the frame should be dragged around
function MonkeyQuest_OnMouseDown(arg1)
-- if not loaded yet then get out
if (MonkeyQuest.m_bLoaded == false) then
return;
end
-- left button moves the frame around
if (arg1 == "LeftButton" and MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bLocked == false) then
MonkeyQuestFrame:StartMoving();
end
-- right button on the title or frame opens up the MonkeyBuddy, if it's there
if (arg1 == "RightButton" and MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bAllowRightClick == true) then
if (MonkeyBuddyFrame ~= nil) then
ShowUIPanel(MonkeyBuddyFrame);
-- make MonkeyBuddy show the MonkeyQuest config
MonkeyBuddyQuestTab_OnClick();
end
end
end
-- this function is called when the frame is stopped being dragged around
function MonkeyQuest_OnMouseUp(arg1)
-- if not loaded yet then get out
if (MonkeyQuest.m_bLoaded == false) then
return;
end
if (arg1 == "LeftButton") then
MonkeyQuestFrame:StopMovingOrSizing();
-- save the position
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameLeft = MonkeyQuestFrame:GetLeft();
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameTop = MonkeyQuestFrame:GetTop();
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameBottom = MonkeyQuestFrame:GetBottom();
end
end
function MonkeyQuest_OnEnter()
-- BIB support
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bLockBIB == true) then
MonkeyQuestFrame:Show();
end
end
function MonkeyQuest_OnLeave()
-- BIB support
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bLockBIB == true) then
MonkeyQuest_Hide();
end
end
function MonkeyQuestCloseButton_OnClick()
-- if not loaded yet then get out
if (MonkeyQuest.m_bLoaded == false) then
return;
end
MonkeyQuest_Hide();
end
function MonkeyQuestCloseButton_OnEnter()
-- no noob tip?
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowNoobTips == false) then
return;
end
-- put the tool tip in the default position
GameTooltip:SetOwner(this, "ANCHOR_TOPRIGHT");
-- set the tool tip text
GameTooltip:SetText(MONKEYQUEST_NOOBTIP_HEADER, TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b, 1);
GameTooltip:AddLine(MONKEYQUEST_NOOBTIP_CLOSE, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
GameTooltip:AddLine(MONKEYQUEST_HELP_OPEN_MSG, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
GameTooltip:Show();
end
function MonkeyQuestMinimizeButton_OnClick()
-- if not loaded yet then get out
if (MonkeyQuest.m_bLoaded == false) then
return;
end
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bMinimized = not MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bMinimized;
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bMinimized == true) then
MonkeyQuestMinimizeButton:SetNormalTexture("Interface\\AddOns\\MonkeyLibrary\\Textures\\MinimizeButton-Down");
else
MonkeyQuestMinimizeButton:SetNormalTexture("Interface\\AddOns\\MonkeyLibrary\\Textures\\MinimizeButton-Up");
end
MonkeyQuest_Refresh();
end
function MonkeyQuestMinimizeButton_OnEnter()
-- no noob tip?
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowNoobTips == false) then
return;
end
-- put the tool tip in the default position
GameTooltip:SetOwner(this, "ANCHOR_TOPRIGHT");
-- set the tool tip text
GameTooltip:SetText(MONKEYQUEST_NOOBTIP_HEADER, TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b, 1);
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bMinimized) then
GameTooltip:AddLine(MONKEYQUEST_NOOBTIP_RESTORE, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
else
GameTooltip:AddLine(MONKEYQUEST_NOOBTIP_MINIMIZE, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
end
GameTooltip:Show();
end
function MonkeyQuestShowHiddenCheckButton_OnClick()
-- if not loaded yet then get out
if (MonkeyQuest.m_bLoaded == false) then
return;
end
if (this:GetChecked()) then
PlaySound("igMainMenuOptionCheckBoxOff");
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowHidden = true;
else
PlaySound("igMainMenuOptionCheckBoxOn");
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowHidden = false;
end
MonkeyQuest_Refresh();
end
function MonkeyQuestShowHiddenCheckButton_OnEnter()
-- no noob tip?
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowNoobTips == false) then
return;
end
-- put the tool tip in the default position
GameTooltip:SetOwner(this, "ANCHOR_TOPRIGHT");
-- set the tool tip text
GameTooltip:SetText(MONKEYQUEST_NOOBTIP_HEADER, TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b, 1);
if (this:GetChecked()) then
GameTooltip:AddLine(MONKEYQUEST_NOOBTIP_HIDEALLHIDDEN, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
else
GameTooltip:AddLine(MONKEYQUEST_NOOBTIP_SHOWALLHIDDEN, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
end
GameTooltip:Show();
end
function MonkeyQuest_Show()
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bDisplay = true;
MonkeyQuestFrame:Show();
MonkeyQuest_Refresh();
end
function MonkeyQuest_Hide()
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bDisplay = false;
MonkeyQuestFrame:Hide();
end
function MonkeyQuest_SetAlpha(iAlpha)
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iAlpha = iAlpha;
MonkeyQuestFrame:SetBackdropColor(TOOLTIP_DEFAULT_BACKGROUND_COLOR.r, TOOLTIP_DEFAULT_BACKGROUND_COLOR.g, TOOLTIP_DEFAULT_BACKGROUND_COLOR.b, iAlpha);
--MonkeyQuestFrame:SetAlpha(0.5);
end
function MonkeyQuest_SetFrameAlpha(iAlpha)
MonkeyQuestFrame:SetAlpha(iAlpha);
end
function MonkeyQuest_Refresh()
-- if not loaded yet, get outta here
if (MonkeyQuest.m_bLoaded == false) then
return;
end
-- BIB bad options check
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bLockBIB == true) then
if (BIB_MonkeyQuestButton ~= nil) then
if (not BIB_MonkeyQuestButton:IsShown()) then
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bLockBIB = false;
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strAnchor = "ANCHOR_TOPLEFT";
MonkeyQuest_Show();
end
else
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bLockBIB = false;
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strAnchor = "ANCHOR_TOPLEFT";
MonkeyQuest_Show();
end
end
-- set the check state of the MonkeyQuestShowHiddenCheckButton
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowHidden == true) then
MonkeyQuestShowHiddenCheckButton:SetChecked(1);
else
MonkeyQuestShowHiddenCheckButton:SetChecked(0);
end
-- make sure the minimize button has the right texture
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bMinimized == true) then
MonkeyQuestMinimizeButton:SetNormalTexture("Interface\\AddOns\\MonkeyLibrary\\Textures\\MinimizeButton-Down");
else
MonkeyQuestMinimizeButton:SetNormalTexture("Interface\\AddOns\\MonkeyLibrary\\Textures\\MinimizeButton-Up");
end
local strMonkeyQuestBody = "";
local colour;
local strTitleColor;
local iButtonId = 1;
local bNextHeader = false;
-- Remember the currently selected quest log entry
local tmpQuestLogSelection = GetQuestLogSelection();
local iNumEntries, iNumQuests = GetNumQuestLogEntries();
MonkeyQuestTitleText:SetTextHeight(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFontHeight + 2);
-- set the title, with or without the number of quests
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowNumQuests == true) then
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bHideTitle == false) then
MonkeyQuestTitleText:SetText(MONKEYQUEST_TITLE .. " " .. iNumQuests .. "/" .. MAX_QUESTLOG_QUESTS);
else
MonkeyQuestTitleText:SetText(iNumQuests .. "/" .. MAX_QUESTLOG_QUESTS);
end
elseif (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bHideTitle == false) then
MonkeyQuestTitleText:SetText(MONKEYQUEST_TITLE);
else
MonkeyQuestTitleText:SetText("");
end
-- update the BIB text
if (BIB_MonkeyQuestButton_GetButtonText) then
BIB_MonkeyQuestButton_GetButtonText();
end
MonkeyQuest.m_iNumEntries = iNumEntries;
-- hide all the text buttons
for i = 1, MonkeyQuest.m_iNumQuestButtons, 1 do
getglobal("MonkeyQuestButton" .. i .. "Text"):SetText("");
getglobal("MonkeyQuestButton" .. i .. "Text"):Hide();
getglobal("MonkeyQuestButton" .. i):Hide();
getglobal("MonkeyQuestHideButton" .. i):Hide();
getglobal("MonkeyQuestButton" .. i .. "Text"):SetWidth(MonkeyQuestFrame:GetWidth() - MONKEYQUEST_PADDING - 8);
getglobal("MonkeyQuestButton" .. i .. "Text"):SetTextHeight(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFontHeight);
end
MonkeyQuest_RefreshQuestItemList();
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bMinimized == false) then
for i = 1, iNumEntries, 1 do
-- strQuestLogTitleText the title text of the quest, may be a header (ex. Wetlands)
-- strQuestLevel the level of the quest
-- strQuestTag the tag on the quest (ex. COMPLETED)
local strQuestLogTitleText, strQuestLevel, strQuestTag, isHeader, isCollapsed, isComplete = GetQuestLogTitle(i);
-- are we looking for the next header?
if (bNextHeader == true and isHeader) then
-- no longer skipping quests
bNextHeader = false;
end
if (bNextHeader == false) then
-- no longer looking for the next header
-- Select the quest log entry for other functions like GetNumQuestLeaderBoards()
SelectQuestLogEntry(i);
-- double check this quest is in the hidden list, if not, it's a new quest
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_aQuestList[strQuestLogTitleText] == nil) then
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_aQuestList[strQuestLogTitleText] = {};
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_aQuestList[strQuestLogTitleText].m_bChecked = true;
end
if (isHeader) then
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_aQuestList[strQuestLogTitleText].m_bChecked == true) then
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bNoHeaders == false or
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowHidden == true or
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bAlwaysHeaders == true) then
strMonkeyQuestBody = strMonkeyQuestBody ..
format(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strHeaderOpenColour .. "%s|r",
"- " .. strQuestLogTitleText) .. "\n";
getglobal("MonkeyQuestButton" .. iButtonId .. "Text"):SetText(strMonkeyQuestBody);
getglobal("MonkeyQuestButton" .. iButtonId .. "Text"):Show();
getglobal("MonkeyQuestButton" .. iButtonId):Show();
-- set the bg colour
getglobal("MonkeyQuestButton" .. iButtonId .. "Texture"):SetVertexColor(0.0, 0.0, 0.0, 0.0);
getglobal("MonkeyQuestButton" .. iButtonId).m_iQuestIndex = i;
getglobal("MonkeyQuestButton" .. iButtonId).id = iButtonId;
getglobal("MonkeyQuestHideButton" .. iButtonId):Hide();
getglobal("MonkeyQuestHideButton" .. iButtonId).m_strQuestLogTitleText = strQuestLogTitleText;
iButtonId = iButtonId + 1;
strMonkeyQuestBody = "";
end
else
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowHidden == true or
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bAlwaysHeaders == true) then
strMonkeyQuestBody = strMonkeyQuestBody ..
format(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strHeaderClosedColour .. "%s|r",
"+ " .. strQuestLogTitleText) .. "\n";
getglobal("MonkeyQuestButton" .. iButtonId .. "Text"):SetText(strMonkeyQuestBody);
getglobal("MonkeyQuestButton" .. iButtonId .. "Text"):Show();
getglobal("MonkeyQuestButton" .. iButtonId):Show();
-- set the bg colour
getglobal("MonkeyQuestButton" .. iButtonId .. "Texture"):SetVertexColor(0.0, 0.0, 0.0, 0.0);
getglobal("MonkeyQuestButton" .. iButtonId).m_iQuestIndex = i;
getglobal("MonkeyQuestButton" .. iButtonId).id = iButtonId;
getglobal("MonkeyQuestHideButton" .. iButtonId):Hide();
getglobal("MonkeyQuestHideButton" .. iButtonId).m_strQuestLogTitleText = strQuestLogTitleText;
iButtonId = iButtonId + 1;
strMonkeyQuestBody = "";
end
-- keep looping through the list until we find the next header
bNextHeader = true;
end
else
-- check if the user even wants this displayed
if ((MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_aQuestList[strQuestLogTitleText].m_bChecked == true or
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowHidden) and
(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bHideCompletedQuests == false or
(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bHideCompletedQuests == true and not isComplete) or
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowHidden)) then
-- the user has this quest checked off or he's showing all quests anyways, so we show it
getglobal("MonkeyQuestHideButton" .. iButtonId):Show();
-- update hide quests buttons
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_aQuestList[strQuestLogTitleText].m_bChecked == true) then
getglobal("MonkeyQuestHideButton" .. iButtonId):SetChecked(1);
else
getglobal("MonkeyQuestHideButton" .. iButtonId):SetChecked(0);
end
getglobal("MonkeyQuestHideButton" .. iButtonId).m_strQuestLogTitleText = strQuestLogTitleText;
colour = GetDifficultyColor(strQuestLevel);
-- Begin Pkp Changes
if(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bColourTitle) then
strTitleColor = format("|c%02X%02X%02X%02X", 255, colour.r * 255, colour.g * 255, colour.b * 255);
else
strTitleColor = MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strQuestTitleColour;
end
-- padding
strMonkeyQuestBody = strMonkeyQuestBody .. " ";
-- check if the user wants the quest levels
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowQuestLevel == true) then
if (strQuestTag == ELITE) then
strMonkeyQuestBody = strMonkeyQuestBody ..
format("|c%02X%02X%02X%02X%s|r", 255, colour.r * 255, colour.g * 255, colour.b * 255,
"[" .. strQuestLevel .. "+] ");
elseif (strQuestTag == MONKEYQUEST_DUNGEON) then
strMonkeyQuestBody = strMonkeyQuestBody ..
format("|c%02X%02X%02X%02X%s|r", 255, colour.r * 255, colour.g * 255, colour.b * 255,
"[" .. strQuestLevel .. "d] ");
elseif (strQuestTag == RAID) then
strMonkeyQuestBody = strMonkeyQuestBody ..
format("|c%02X%02X%02X%02X%s|r", 255, colour.r * 255, colour.g * 255, colour.b * 255,
"[" .. strQuestLevel .. "r] ");
elseif (strQuestTag == MONKEYQUEST_PVP) then
strMonkeyQuestBody = strMonkeyQuestBody ..
format("|c%02X%02X%02X%02X%s|r", 255, colour.r * 255, colour.g * 255, colour.b * 255,
"[" .. strQuestLevel .. "p] ");
else
strMonkeyQuestBody = strMonkeyQuestBody ..
format("|c%02X%02X%02X%02X%s|r", 255, colour.r * 255, colour.g * 255, colour.b * 255,
"[" .. strQuestLevel .. "] ");
end
end
-- add the completed tag, if needed
if (isComplete and isComplete < 0) then
strMonkeyQuestBody = strMonkeyQuestBody ..
format(strTitleColor .. "%s|r", strQuestLogTitleText) ..
" (" .. MONKEYQUEST_QUEST_FAILED .. ")\n";
elseif (isComplete and isComplete > 0) then
strMonkeyQuestBody = strMonkeyQuestBody ..
format(strTitleColor .. "%s|r", strQuestLogTitleText) ..
" (" .. MONKEYQUEST_QUEST_DONE .. ")\n";
else
strMonkeyQuestBody = strMonkeyQuestBody ..
format(strTitleColor .. "%s|r", strQuestLogTitleText) .. "\n";
end
local strQuestDescription, strQuestObjectives = GetQuestLogQuestText();
if (GetNumQuestLeaderBoards() > 0) then
for ii=1, GetNumQuestLeaderBoards(), 1 do
--local string = getglobal("QuestLogObjective"..ii);
local strLeaderBoardText, strType, iFinished = GetQuestLogLeaderBoard(ii);
MonkeyQuest_AddQuestItemToList(strLeaderBoardText);
if (strLeaderBoardText) then
if (not iFinished) then
strMonkeyQuestBody = strMonkeyQuestBody .. " " .. MonkeyQuest_GetLeaderboardColorStr(strLeaderBoardText) ..
strLeaderBoardText .. "\n";
elseif (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bHideCompletedObjectives == false
or MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowHidden) then
strMonkeyQuestBody = strMonkeyQuestBody .. " " ..
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strCompleteObjectiveColour ..
strLeaderBoardText .. "\n";
end
end
end
elseif (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bObjectives) then
-- this quest has no leaderboard so display the objective instead if the config is set
strMonkeyQuestBody = strMonkeyQuestBody .. " " ..
format(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strOverviewColour .. "%s|r",
strQuestObjectives) .. "\n";
--format("|c%02X%02X%02X%02X%s|r", 255, GRAY_FONT_COLOR.r * 255, GRAY_FONT_COLOR.g * 255,
--GRAY_FONT_COLOR.b * 255, strQuestObjectives) .. "\n";
end
-- finally set the text
getglobal("MonkeyQuestButton" .. iButtonId .. "Text"):SetText(strMonkeyQuestBody);
getglobal("MonkeyQuestButton" .. iButtonId .. "Text"):Show();
getglobal("MonkeyQuestButton" .. iButtonId):Show();
-- set the bg colour
getglobal("MonkeyQuestButton" .. iButtonId .. "Texture"):SetVertexColor(0.0, 0.0, 0.0, 0.0);
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowZoneHighlight) then
local strSubZoneText = string.lower(GetSubZoneText());
if (strSubZoneText ~= "") then
if (string.find(string.lower(strQuestDescription), strSubZoneText, 1, true) or
string.find(string.lower(strQuestObjectives), strSubZoneText, 1, true)) then
local a, r, g, b = MonkeyLib_ColourStrToARGB(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strZoneHighlightColour);
getglobal("MonkeyQuestButton" .. iButtonId .. "Texture"):SetVertexColor(r, g, b, MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iAlpha);
end
end
end
getglobal("MonkeyQuestButton" .. iButtonId).m_iQuestIndex = i;
getglobal("MonkeyQuestButton" .. iButtonId).m_strQuestObjectives = strQuestObjectives;
iButtonId = iButtonId + 1;
strMonkeyQuestBody = "";
end
end
end
end
end
for i = 1, MonkeyQuest.m_iNumQuestButtons, 1 do
getglobal("MonkeyQuestButton" .. i .. "Text"):SetWidth(MonkeyQuestFrame:GetWidth() - MONKEYQUEST_PADDING - 8);
end
-- Restore the current quest log selection
SelectQuestLogEntry(tmpQuestLogSelection);
MonkeyQuest_Resize();
-- we don't have a dropped QUEST_LOG_UPDATE anymore
MonkeyQuest.m_bNeedRefresh = false;
MonkeyQuest.m_fTimeSinceRefresh = 0.0;
end
function MonkeyQuest_RefreshQuestItemList()
local strQuestLogTitleText, strQuestLevel, strQuestTag, isHeader, isCollapsed, isComplete;
local i;
local iNumEntries, iNumQuests = GetNumQuestLogEntries();
MonkeyQuest.m_aQuestItemList = nil;
MonkeyQuest.m_aQuestItemList = {};
for i = 1, iNumEntries, 1 do
-- strQuestLogTitleText the title text of the quest, may be a header (ex. Wetlands)
-- strQuestLevel the level of the quest
-- strQuestTag the tag on the quest (ex. COMPLETED)
strQuestLogTitleText, strQuestLevel, strQuestTag, isHeader, isCollapsed, isComplete = GetQuestLogTitle(i);
if (not isHeader) then
-- Select the quest log entry for other functions like GetNumQuestLeaderBoards()
SelectQuestLogEntry(i);
if (GetNumQuestLeaderBoards() > 0) then
for ii=1, GetNumQuestLeaderBoards(), 1 do
--local string = getglobal("QuestLogObjective"..ii);
local strLeaderBoardText, strType, iFinished = GetQuestLogLeaderBoard(ii);
MonkeyQuest_AddQuestItemToList(strLeaderBoardText);
end
end
end
end
end
-- does a decent job of figuring out if the quest objective is an item and if so adds it to the list
function MonkeyQuest_AddQuestItemToList(strLeaderBoardText)
local i, j, strItemName, iNumItems, iNumNeeded = string.find(strLeaderBoardText, "(.*):%s*([-%d]+)%s*/%s*([-%d]+)%s*$");
if (iNumItems == nil) then
-- not a quest item
return;
end
i, j = string.find(strItemName, MONKEYQUEST_TOOLTIP_SLAIN);
if (i ~= nil) then
strItemName = string.sub(strItemName, 1, i - 2);
end
if (MonkeyQuest.m_aQuestItemList[strItemName] == nil) then
MonkeyQuest.m_aQuestItemList[strItemName] = {};
end
MonkeyQuest.m_aQuestItemList[strItemName].m_iNumItems = iNumItems;
MonkeyQuest.m_aQuestItemList[strItemName].m_iNumNeeded = iNumNeeded;
end
function MonkeyQuest_Resize()
local iHeight = 0;
local text;
local button;
local iTextWidth = 0;
local iPadding = MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iQuestPadding;
-- if not loaded yet then get out
if (MonkeyQuest.m_bLoaded == false) then
return;
end
--iTextWidth = MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameWidth - MONKEYQUEST_PADDING - 8;
iTextWidth = MonkeyQuestFrame:GetWidth() - MONKEYQUEST_PADDING - 8;
-- make sure the titlebutton is the right size for the title text
MonkeyQuestTitleButton:SetWidth(MonkeyQuestTitleText:GetWidth());
MonkeyQuestTitleButton:SetHeight(MonkeyQuestTitleText:GetHeight());
for i = 1, MonkeyQuest.m_iNumQuestButtons, 1 do
text = getglobal("MonkeyQuestButton" .. i .. "Text");
button = getglobal("MonkeyQuestButton" .. i);
if (text:IsVisible()) then
text:SetWidth(iTextWidth);
iHeight = iHeight + text:GetHeight() + iPadding;
button:SetWidth(text:GetWidth());
button:SetHeight(text:GetHeight());
end
end
iHeight = iHeight + MonkeyQuestTitleText:GetHeight() + MONKEYQUEST_PADDING;
--MonkeyQuestFrame:SetWidth(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameWidth);
MonkeyQuestFrame:SetHeight(iHeight);
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameLeft == nil) then
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameLeft = 500;
end
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameTop == nil) then
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameTop = 500;
end
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameBottom == nil) then
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameBottom = 539;
end
-- Set the grow direction
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bLockBIB == false) then
-- Added by Diungo
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bGrowUp == false) then
MonkeyQuestFrame:ClearAllPoints();
-- grow down
MonkeyQuestFrame:SetPoint("TOPLEFT", "UIParent", "BOTTOMLEFT",
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameLeft,
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameTop);
-- check to see if it grew off the screen
--if (MonkeyQuestFrame:GetBottom() < 0) then
-- MonkeyQuestFrame:SetPoint("TOPLEFT", "UIParent", "BOTTOMLEFT",
-- MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameLeft,
-- MonkeyQuestFrame:GetHeight() - 2);
--end
else
MonkeyQuestFrame:ClearAllPoints();
-- grow up
MonkeyQuestFrame:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT",
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameLeft,
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameBottom);
-- check to see if it grew off the screen
--if (MonkeyQuestFrame:GetTop() > 1024) then
-- MonkeyQuestFrame:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT",
-- MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameLeft,
-- 1024 - (MonkeyQuestFrame:GetHeight() - 2));
--end
end
end
-- save the position
if (MonkeyQuestFrame:GetLeft() ~= nil) then
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameLeft = MonkeyQuestFrame:GetLeft();
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameTop = MonkeyQuestFrame:GetTop();
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameBottom = MonkeyQuestFrame:GetBottom();
end
end
-- Get a colour for the leaderboard item depending on how "done" it is
function MonkeyQuest_GetLeaderboardColorStr(strText)
local i, j, strItemName, iNumItems, iNumNeeded = string.find(strText, "(.*):%s*([-%d]+)%s*/%s*([-%d]+)%s*$");
local colour = {a = 1.0, r = 1.0, g = 1.0, b = 1.0};
local colourInitial = {a = 1.0, r = 1.0, g = 1.0, b = 1.0};
local colourMid = {a = 1.0, r = 1.0, g = 1.0, b = 1.0};
local colourComplete = {a = 1.0, r = 1.0, g = 1.0, b = 1.0};
colourInitial.a, colourInitial.r, colourInitial.g, colourInitial.b = MonkeyLib_ColourStrToARGB(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strInitialObjectiveColour);
colourMid.a, colourMid.r, colourMid.g, colourMid.b = MonkeyLib_ColourStrToARGB(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strMidObjectiveColour);
colourComplete.a, colourComplete.r, colourComplete.g, colourComplete.b = MonkeyLib_ColourStrToARGB(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strCompleteObjectiveColour);
local colourDelta1 = {
a = (colourMid.a - colourInitial.a),
r = (colourMid.r - colourInitial.r),
g = (colourMid.g - colourInitial.g),
b = (colourMid.b - colourInitial.b)
};
local colourDelta2 = {
a = (colourComplete.a - colourMid.a),
r = (colourComplete.r - colourMid.r),
g = (colourComplete.g - colourMid.g),
b = (colourComplete.b - colourMid.b)
};
if (iNumItems ~= nil) then
-- standard x/y type objective
if ((iNumItems / iNumNeeded) < 0.5) then
colour.r = colourInitial.r + ((iNumItems / (iNumNeeded / 2)) * colourDelta1.r);
colour.g = colourInitial.g + ((iNumItems / (iNumNeeded / 2)) * colourDelta1.g);
colour.b = colourInitial.b + ((iNumItems / (iNumNeeded / 2)) * colourDelta1.b);
else
colour.r = colourMid.r + (((iNumItems - (iNumNeeded / 2)) / (iNumNeeded / 2)) * colourDelta2.r);
colour.g = colourMid.g + (((iNumItems - (iNumNeeded / 2)) / (iNumNeeded / 2)) * colourDelta2.g);
colour.b = colourMid.b + (((iNumItems - (iNumNeeded / 2)) / (iNumNeeded / 2)) * colourDelta2.b);
end
else
-- it's a quest with no numerical objectives
local i, j, strItemName, strItems, strNeeded = string.find(strText, "(.*):%s*([-%a]+)%s*/%s*([-%a]+)%s*$");
-- is it a string/string type?
if (strItems ~= nil) then
if (strItems == strNeeded) then
-- strings are equal, completed objective
return MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strCompleteObjectiveColour;
else
-- strings are not equal, uncompleted objective
return MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strInitialObjectiveColour;
end
else
-- special objective
return MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strSpecialObjectiveColour;
end
end
-- just incase the numbers went slightly out of range
if (colour.r > 1.0) then
colour.r = 1.0;
end
if (colour.g > 1.0) then
colour.g = 1.0;
end
if (colour.b > 1.0) then
colour.b = 1.0;
end
if (colour.r < 0.0) then
colour.r = 0.0;
end
if (colour.g < 0.0) then
colour.g = 0.0;
end
if (colour.b < 0.0) then
colour.b = 0.0;
end
return MonkeyLib_ARGBToColourStr(colour.a, colour.r, colour.g, colour.b);
end
-- Get a colour for the leaderboard item depending on how "done" it is
function MonkeyQuest_GetCompletenessColorStr(iNumItems, iNumNeeded)
local colour = {a = 1.0, r = 1.0, g = 1.0, b = 1.0};
local colourInitial = {a = 1.0, r = 1.0, g = 1.0, b = 1.0};
local colourMid = {a = 1.0, r = 1.0, g = 1.0, b = 1.0};
local colourComplete = {a = 1.0, r = 1.0, g = 1.0, b = 1.0};
colourInitial.a, colourInitial.r, colourInitial.g, colourInitial.b = MonkeyLib_ColourStrToARGB(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strInitialObjectiveColour);
colourMid.a, colourMid.r, colourMid.g, colourMid.b = MonkeyLib_ColourStrToARGB(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strMidObjectiveColour);
colourComplete.a, colourComplete.r, colourComplete.g, colourComplete.b = MonkeyLib_ColourStrToARGB(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strCompleteObjectiveColour);
local colourDelta1 = {
a = (colourMid.a - colourInitial.a),
r = (colourMid.r - colourInitial.r),
g = (colourMid.g - colourInitial.g),
b = (colourMid.b - colourInitial.b)
};
local colourDelta2 = {
a = (colourComplete.a - colourMid.a),
r = (colourComplete.r - colourMid.r),
g = (colourComplete.g - colourMid.g),
b = (colourComplete.b - colourMid.b)
};
if (iNumItems ~= nil) then
-- standard x/y type objective
if ((iNumItems / iNumNeeded) < 0.5) then
colour.r = colourInitial.r + ((iNumItems / (iNumNeeded / 2)) * colourDelta1.r);
colour.g = colourInitial.g + ((iNumItems / (iNumNeeded / 2)) * colourDelta1.g);
colour.b = colourInitial.b + ((iNumItems / (iNumNeeded / 2)) * colourDelta1.b);
else
colour.r = colourMid.r + (((iNumItems - (iNumNeeded / 2)) / (iNumNeeded / 2)) * colourDelta2.r);
colour.g = colourMid.g + (((iNumItems - (iNumNeeded / 2)) / (iNumNeeded / 2)) * colourDelta2.g);
colour.b = colourMid.b + (((iNumItems - (iNumNeeded / 2)) / (iNumNeeded / 2)) * colourDelta2.b);
end
else
-- it's a quest with no numerical objectives
local i, j, strItemName, strItems, strNeeded = string.find(strText, "(.*):%s*([-%a]+)%s*/%s*([-%a]+)%s*$");
-- is it a string/string type?
if (strItems ~= nil) then
if (strItems == strNeeded) then
-- strings are equal, completed objective
return MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strCompleteObjectiveColour;
else
-- strings are not equal, uncompleted objective
return MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strInitialObjectiveColour;
end
else
-- special objective
return MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strSpecialObjectiveColour;
end
end
-- just incase the numbers went slightly out of range
if (colour.r > 1.0) then
colour.r = 1.0;
end
if (colour.g > 1.0) then
colour.g = 1.0;
end
if (colour.b > 1.0) then
colour.b = 1.0;
end
if (colour.r < 0.0) then
colour.r = 0.0;
end
if (colour.g < 0.0) then
colour.g = 0.0;
end
if (colour.b < 0.0) then
colour.b = 0.0;
end
return colour.a, colour.r, colour.g, colour.b;
end
-- when the mouse goes over the main frame, this gets called
function MonkeyQuestTitle_OnEnter()
-- noob tip?
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowNoobTips == true) then
-- put the tool tip in the specified position
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strAnchor == "DEFAULT") then
GameTooltip_SetDefaultAnchor(GameTooltip, this);
else
GameTooltip:SetOwner(MonkeyQuestFrame, MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strAnchor);
end
-- set the tool tip text
GameTooltip:SetText(MONKEYQUEST_NOOBTIP_HEADER, TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b, 1);
GameTooltip:AddLine(MONKEYQUEST_NOOBTIP_TITLE, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
GameTooltip:Show();
return;
end
-- put the tool tip in the default position
GameTooltip_SetDefaultAnchor(GameTooltip, this);
-- set the tool tip text
GameTooltip:SetText(MONKEYQUEST_TITLE_VERSION, MONKEYLIB_TITLE_COLOUR.r, MONKEYLIB_TITLE_COLOUR.g, MONKEYLIB_TITLE_COLOUR.b, 1);
GameTooltip:AddLine(MONKEYQUEST_DESCRIPTION, GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b, 1);
GameTooltip:Show();
end
function MonkeyQuestButton_OnLoad()
this:RegisterForClicks("LeftButtonUp", "RightButtonUp");
end
function MonkeyQuestButton_OnClick(button)
local strQuestLogTitleText, strQuestLevel, strQuestTag, isHeader, isCollapsed, isComplete = GetQuestLogTitle(this.m_iQuestIndex);
if (isHeader) then
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_aQuestList[getglobal("MonkeyQuestHideButton" .. this.id).m_strQuestLogTitleText].m_bChecked =
not MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_aQuestList[getglobal("MonkeyQuestHideButton" .. this.id).m_strQuestLogTitleText].m_bChecked;
MonkeyQuest_Refresh();
MonkeyQuestFrame:Show();
MonkeyQuest_Refresh();
return;
end
-- print text to the chat edit frame if shift is down and the
-- chat frame edit box is open and it's not a zone header
if (IsShiftKeyDown() and ChatFrameEditBox:IsVisible()) then
-- what button was it?
if (button == "LeftButton") then
if (strQuestTag == ELITE) then
ChatFrameEditBox:Insert("[" .. strQuestLevel .. "+] " .. strQuestLogTitleText .. " ");
elseif (strQuestTag == MONKEYQUEST_DUNGEON) then
ChatFrameEditBox:Insert("[" .. strQuestLevel .. "d] " .. strQuestLogTitleText .. " ");
elseif (strQuestTag == RAID) then
ChatFrameEditBox:Insert("[" .. strQuestLevel .. "r] " .. strQuestLogTitleText .. " ");
elseif (strQuestTag == MONKEYQUEST_PVP) then
ChatFrameEditBox:Insert("[" .. strQuestLevel .. "p] " .. strQuestLogTitleText .. " ");
else
ChatFrameEditBox:Insert("[" .. strQuestLevel .. "] " .. strQuestLogTitleText .. " ");
end
else
local strChatObjectives = "";
-- Remember the currently selected quest log entry
local tmpQuestLogSelection = GetQuestLogSelection();
-- Select the quest log entry for other functions like GetNumQuestLeaderBoards()
SelectQuestLogEntry(this.m_iQuestIndex);
if (GetNumQuestLeaderBoards() > 0) then
for i=1, GetNumQuestLeaderBoards(), 1 do
--local string = getglobal("QuestLogObjective"..ii);
local strLeaderBoardText, strType, iFinished = GetQuestLogLeaderBoard(i);
if (strLeaderBoardText) then
strChatObjectives = strChatObjectives .. "{" .. strLeaderBoardText .. "} ";
end
end
elseif (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bObjectives) then
-- this quest has no leaderboard so display the objective instead if the config is set
local strQuestDescription, strQuestObjectives = GetQuestLogQuestText();
strChatObjectives = strChatObjectives .. "{" .. strQuestObjectives .. "} ";
end
ChatFrameEditBox:Insert(strChatObjectives);
-- Restore the currently selected quest log entry
SelectQuestLogEntry(tmpQuestLogSelection);
end
-- the user isn't trying to actually open the real quest log, so just exit here
return;
end
if (IsControlKeyDown()) then
-- what button was it?
if (button == "LeftButton") then
-- Select the quest log entry for other functions like GetNumQuestLeaderBoards()
SelectQuestLogEntry(this.m_iQuestIndex);
-- try and share this quest with party members
if (GetQuestLogPushable() and GetNumPartyMembers() > 0) then
QuestLogPushQuest();
end
else
-- Remember the currently selected quest log entry
--local tmpQuestLogSelection = GetQuestLogSelection();
-- Select the quest log entry for other functions like GetNumQuestLeaderBoards()
SelectQuestLogEntry(this.m_iQuestIndex);
SetAbandonQuest();
StaticPopup_Show("ABANDON_QUEST", GetAbandonQuestName());
-- Restore the currently selected quest log entry
--SelectQuestLogEntry(tmpQuestLogSelection);
end
-- the user isn't trying to actually open the real quest log, so just exit here
return;
end
-- if MonkeyQuestLog is installed, open that instead
if (MkQL_SetQuest ~= nil) then
if (MkQL_Main_Frame:IsVisible()) then
if (MkQL_global_iCurrQuest == this.m_iQuestIndex) then
MkQL_Main_Frame:Hide();
return;
end
end
MkQL_SetQuest(this.m_iQuestIndex);
return;
end
-- show the real questlog
ShowUIPanel(QuestLogFrame);
-- check if there's even a need to mess with the offset
if (MonkeyQuest.m_iNumEntries > QUESTS_DISPLAYED) then
-- move the real quest log list scrollbar to the correct place
if (this.m_iQuestIndex < MonkeyQuest.m_iNumEntries - QUESTS_DISPLAYED) then
FauxScrollFrame_SetOffset(QuestLogListScrollFrame, this.m_iQuestIndex - 1);
QuestLogListScrollFrameScrollBar:SetValue((this.m_iQuestIndex - 1) * QUESTLOG_QUEST_HEIGHT);
else
FauxScrollFrame_SetOffset(QuestLogListScrollFrame, MonkeyQuest.m_iNumEntries - QUESTS_DISPLAYED);
QuestLogListScrollFrameScrollBar:SetValue((MonkeyQuest.m_iNumEntries - QUESTS_DISPLAYED) * QUESTLOG_QUEST_HEIGHT);
end
end
-- actually select the quest entry
SelectQuestLogEntry(this.m_iQuestIndex);
QuestLog_SetSelection(this.m_iQuestIndex);
-- update the real quest log
QuestLog_Update();
-- if MonkeyQuestLog is installed, open that instead
end
function MonkeyQuestButton_OnEnter()
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strAnchor == "NONE") then
return;
end
local strQuestLogTitleText, strQuestLevel, strQuestTag, isHeader, isCollapsed, isComplete = GetQuestLogTitle(this.m_iQuestIndex);
if (strQuestLogTitleText == nil) then
return;
end
if (isHeader) then
-- no noob tip?
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowNoobTips == false) then
return;
end
-- put the tool tip in the specified position
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strAnchor == "DEFAULT") then
GameTooltip_SetDefaultAnchor(GameTooltip, this);
else
GameTooltip:SetOwner(MonkeyQuestFrame, MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strAnchor);
end
-- set the tool tip text
GameTooltip:SetText(MONKEYQUEST_NOOBTIP_HEADER, TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b, 1);
GameTooltip:AddLine(MONKEYQUEST_NOOBTIP_QUESTHEADER, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
GameTooltip:Show();
return;
end
-- put the tool tip in the specified position
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strAnchor == "DEFAULT") then
GameTooltip_SetDefaultAnchor(GameTooltip, this);
else
GameTooltip:SetOwner(MonkeyQuestFrame, MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strAnchor);
end
-- set the tool tip text
GameTooltip:SetText(strQuestLogTitleText, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
GameTooltip:AddLine(this.m_strQuestObjectives, GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b, 1);
GameTooltip:AddLine(strQuestTag, TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b, 1);
-- see if any nearby group mates are on this quest
local iNumPartyMembers = GetNumPartyMembers();
local isOnQuest, i;
for i = 1, iNumPartyMembers do
isOnQuest = IsUnitOnQuest(this.m_iQuestIndex, "party" .. i);
if (isOnQuest and isOnQuest == 1) then
-- this member is on the quest
GameTooltip:AddLine(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strCompleteObjectiveColour .. UnitName("party" .. i));
else
-- this member isn't on the quest
GameTooltip:AddLine(MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strInitialObjectiveColour .. UnitName("party" .. i));
end
end
GameTooltip:Show();
end
function MonkeyQuestHideButton_OnLoad()
end
function MonkeyQuestHideButton_OnEnter()
-- no noob tip?
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_bShowNoobTips == false) then
return;
end
-- put the tool tip in the specified position
if (MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strAnchor == "DEFAULT") then
GameTooltip_SetDefaultAnchor(GameTooltip, this);
else
GameTooltip:SetOwner(MonkeyQuestFrame, MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_strAnchor);
end
-- set the tool tip text
GameTooltip:SetText(MONKEYQUEST_NOOBTIP_HEADER, TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b, 1);
GameTooltip:AddLine(MONKEYQUEST_NOOBTIP_HIDEBUTTON, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
GameTooltip:Show();
end
function MonkeyQuestHideButton_OnClick()
-- if not loaded yet then get out
if (MonkeyQuest.m_bLoaded == false) then
return;
end
if (this:GetChecked()) then
PlaySound("igMainMenuOptionCheckBoxOff");
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_aQuestList[this.m_strQuestLogTitleText].m_bChecked = true;
else
PlaySound("igMainMenuOptionCheckBoxOn");
MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_aQuestList[this.m_strQuestLogTitleText].m_bChecked = false;
end
MonkeyQuest_Refresh();
MonkeyQuestFrame:Show();
MonkeyQuest_Refresh();
end
function MonkeyQuest_PrintPoints()
if (DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:AddMessage("Left: "..MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameLeft);
DEFAULT_CHAT_FRAME:AddMessage("Top: "..MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameTop);
DEFAULT_CHAT_FRAME:AddMessage("Bottom: "..MonkeyQuestConfig[MonkeyQuest.m_strPlayer].m_iFrameBottom);
end
end