|
|
|
|
local MAJOR, MINOR = "LibQuestXP-1.0", 12
|
|
|
|
|
local LibQuestXP = LibStub:NewLibrary(MAJOR, MINOR)
|
|
|
|
|
|
|
|
|
|
if _G.WOW_PROJECT_ID == _G.WOW_PROJECT_MAINLINE then
|
|
|
|
|
return -- Don't load for Retail
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not LibQuestXP then
|
|
|
|
|
return -- already loaded and no upgrade necessary
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local selectedQuestLogIndex = nil
|
|
|
|
|
|
|
|
|
|
local function hookSelectQuestLogEntry(questLogIndex)
|
|
|
|
|
selectedQuestLogIndex = questLogIndex
|
|
|
|
|
end
|
|
|
|
|
hooksecurefunc("SelectQuestLogEntry", hookSelectQuestLogEntry)
|
|
|
|
|
|
|
|
|
|
function LibQuestXP:GetQuestInfo(questID)
|
|
|
|
|
if LibQuestXPDB[questID] ~= nil then
|
|
|
|
|
return LibQuestXPDB[questID]['xp'], LibQuestXPDB[questID]['level']
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return 0, nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function LibQuestXP:GetAdjustedXP(xp, qLevel)
|
|
|
|
|
local charLevel = UnitLevel("player");
|
|
|
|
|
if (charLevel == 60) then
|
|
|
|
|
return 0;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local diffFactor = 2 * (qLevel - charLevel) + 20;
|
|
|
|
|
if (diffFactor < 1) then
|
|
|
|
|
diffFactor = 1;
|
|
|
|
|
elseif (diffFactor > 10) then
|
|
|
|
|
diffFactor = 10;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
xp = xp * diffFactor / 10;
|
|
|
|
|
if (xp <= 100) then
|
|
|
|
|
xp = 5 * floor((xp + 2) / 5);
|
|
|
|
|
elseif (xp <= 500) then
|
|
|
|
|
xp = 10 * floor((xp + 5) / 10);
|
|
|
|
|
elseif (xp <= 1000) then
|
|
|
|
|
xp = 25 * floor((xp + 12) / 25);
|
|
|
|
|
else
|
|
|
|
|
xp = 50 * floor((xp + 25) / 50);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if C_Seasons ~= nil and C_Seasons.HasActiveSeason() and (C_Seasons.GetActiveSeason() == Enum.SeasonID.SeasonOfMastery) then
|
|
|
|
|
local roundFactor = 50;
|
|
|
|
|
if xp < 1000 then
|
|
|
|
|
roundFactor = 10;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
xp = floor(xp / roundFactor + 0.5) * roundFactor * 2.0;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return xp;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function GetQuestLogRewardXP(questID)
|
|
|
|
|
local title, qLevel, xp, _
|
|
|
|
|
|
|
|
|
|
-- Try getting the quest from the quest log if no questID was provided
|
|
|
|
|
if questID == nil and selectedQuestLogIndex ~= nil then
|
|
|
|
|
title, qLevel, _, _, _, _, _, questID = GetQuestLogTitle(selectedQuestLogIndex)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Return 0 if quest ID is not found for some reason
|
|
|
|
|
if (questID == nil) then return 0 end
|
|
|
|
|
|
|
|
|
|
-- Get stored quest XP and quest level
|
|
|
|
|
xp, qLevel = LibQuestXP:GetQuestInfo(questID)
|
|
|
|
|
|
|
|
|
|
-- Return base XP if level information is not available
|
|
|
|
|
if qLevel == nil then return xp end
|
|
|
|
|
|
|
|
|
|
-- Return adjusted XP if all information are available
|
|
|
|
|
-- print(questID, title, xp, LibQuestXP:GetAdjustedXP(xp, qLevel)); -- Debug
|
|
|
|
|
return LibQuestXP:GetAdjustedXP(xp, qLevel)
|
|
|
|
|
end
|