📄 monkeyquest.lua
字号:
end
-- finally set the text
getglobal("MonkeyQuestButton" .. iButtonId .. "Text"):SetText(strMonkeyQuestBody);
getglobal("MonkeyQuestButton" .. iButtonId .. "Text"):Show();
getglobal("MonkeyQuestButton" .. iButtonId):Show();
-- set the bg colour
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);
else
getglobal("MonkeyQuestButton" .. iButtonId .. "Texture"):SetVertexColor(0.0, 0.0, 0.0, 0.0);
end
else
getglobal("MonkeyQuestButton" .. iButtonId .. "Texture"):SetVertexColor(0.0, 0.0, 0.0, 0.0);
end
getglobal("MonkeyQuestButton" .. iButtonId).m_iQuestIndex = i;
getglobal("MonkeyQuestButton" .. iButtonId).m_strQuestObjectives = strQuestObjectives;
iButtonId = iButtonId + 1;
strMonkeyQuestBody = "";
end
end
end
end
end
-- hide all the text buttons
for i = 1, MonkeyQuest.m_iNumQuestButtons, 1 do
getglobal("MonkeyQuestButton" .. i .. "Text"):SetWidth(MonkeyQuestFrame:GetWidth() - MONKEYQUEST_PADDING - 8);
end
-- Restore the currently 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*$");
--get number of the Quest Item needed in Chinese.
local i, j, strItemName, iNumItems, iNumNeeded = string.find(strLeaderBoardText, "(.*)"..MONKEYQUEST_QUESTITEM_COLON.."%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
------------------------------------------------------------------------------------------------------
-- Fixed by Willow : can show MQ tooltip in GameToolTip by Chinese.
if ( GetLocale() == "zhCN" ) then
strItemName = string.sub(strItemName, strlen(MONKEYQUEST_TOOLTIP_SLAIN) + 1, strlen(strItemName));
else
strItemName = string.sub(strItemName, 1, i - 2);
end
------------------------------------------------------------------------------------------------------
end
if (MonkeyQuest.m_aQuestItemList[strItemName] == nil) then
MonkeyQuest.m_aQuestItemList[strItemName] = {};
end
-- DEFAULT_CHAT_FRAME:AddMessage("strItemName is: " .. strItemName);
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
-- 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
-- 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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -