diff --git a/GarrisonCommander.lua b/GarrisonCommander.lua index 8192ea5..55d16c5 100644 --- a/GarrisonCommander.lua +++ b/GarrisonCommander.lua @@ -21,7 +21,7 @@ local trc=false local pin=false local baseHeight local minHeight -local addon=addon --#addon +local addon=addon --#self ns.bigscreen=true -- Blizzard functions override support local orig={} --#originals @@ -413,6 +413,17 @@ function addon:OnInitialized() self:Trigger("MSORT") self:AddOpenCmd("show","showdata","Prints a mission score") LoadAddOn("GarrisonCommander-Broker") +--@debug@ + print("Sanity checks") + print(self:GetAgeColor(1/0)) + print(self:GetAgeColor(0/0)) + print(self:GetAgeColor(GetTime()+100)) + print(type(1/0)) + print(type(0/0)) + print(pcall(format,"%03d %03d",1/0,0/0)) + print(pcall(format,"%03d %03d",tonumber(1/0) or 1,tonumber(0/0) or 2)) +--@end-debug@ + return true end function addon:showdata(fullargs,action,missionid) @@ -1921,7 +1932,7 @@ function addon:FillMissionPage(missionInfo) stage.expires:SetDrawLayer(stage.MissionEnv:GetDrawLayer()) stage.expires:SetPoint("TOPLEFT",stage.MissionEnv,"BOTTOMLEFT") end - stage.expires:SetFormattedText(GARRISON_MISSION_AVAILABILITY2,missionInfo.offerTimeRemaining) + stage.expires:SetFormattedText(GARRISON_MISSION_AVAILABILITY2,missionInfo.offerTimeRemaining or "") stage.expires:SetTextColor(self:GetAgeColor(missionInfo.offerEndTime)) --@debug@ if not stage.missionid then @@ -2882,6 +2893,7 @@ function addon:AddThreatsToButton(button,mission,missionID,bigscreen) end end function addon:GetAgeColor(age) + age=tonumber(age) or 0 if age>GetTime() then age=age-GetTime() end if age < 0 then age=0 end local hours=floor(age/3600) diff --git a/Init.lua b/Init.lua index 6d71900..1a7a094 100644 --- a/Init.lua +++ b/Init.lua @@ -12,6 +12,7 @@ local strspilit=strsplit local tostringall=tostringall local tostring=tostring local tonumber=tonumber +local type=type --@debug@ LoadAddOn("Blizzard_DebugTools") print(LoadAddOn("LibDebug")) @@ -82,7 +83,20 @@ do end --@end-debug@ end - +-- my implementation of tonumber which accounts for nan and inf +function ns.tonumber(value) + if value~=value then return nil + elseif value==math.huge then return nil + else return tonumber(value) or nil + end +end +-- my implementation of type which accounts for nan and inf +function ns.type(value) + if value~=value then return nil + elseif value==math.huge then return nil + else return type(value) + end +end local stacklevel=0 local frames function ns.holdEvents() diff --git a/MatchMaker.lua b/MatchMaker.lua index 69b41a1..94f0a3b 100644 --- a/MatchMaker.lua +++ b/MatchMaker.lua @@ -26,26 +26,24 @@ local GARRISON_SHIP_OIL_CURRENCY=GARRISON_SHIP_OIL_CURRENCY local dbg local useCap=false local currentCap=100 + local function formatScore(c,r,x,t,maxres,cap) + c=tonumber(c) or 0 + r=tonumber(r) or 0 + x=tonumber(x) or 0 + t=tonumber(t) or 0 cap=tonumber(cap) or 100 if (not maxres) then cap=100 end - return format("%03d %03d %03d %03d %01d",min(c,cap),r,c,x,t),c -end -function addon:MissionScore(mission,voidcap) - if ns.toc >=60200 then return self:xMissionScore(mission) end - if not mission then - return formatScore(0,1,0,0,false,0) - end - local totalTimeString, totalTimeSeconds, isMissionTimeImproved, successChance, partyBuffs, isEnvMechanicCountered, xpBonus, materialMultiplier,goldMultiplier = G.GetPartyMissionInfo(mission.missionID) - local r=mission.class=="gold" and goldMultiplier or materialMultiplier - local t=isMissionTimeImproved and 1 or 0 - local x=mission.xp and xpBonus/mission.xp*100 or 0 - return formatScore(successChance,r,x,t,mission.maxable and useCap,currentCap) + return format("%03d %03d %03d %03d %01d",math.min(c,cap),r,c,x,t),c end -function addon:xMissionScore(mission) + +-- Empty lines to keep line numbers in sync + +function addon:MissionScore(mission) if (mission) then local totalTimeString, totalTimeSeconds, isMissionTimeImproved, successChance, partyBuffs, isEnvMechanicCountered, xpBonus, materialMultiplier,goldMultiplier = G.GetPartyMissionInfo(mission.missionID) local x=mission.xp and xpBonus/mission.xp*100 or 0 + if x~=x then x=0 end -- Nan is the only value which differs from itself local r=0 if type(materialMultiplier)=='table' then for _,v in pairs(mission.rewards) do diff --git a/MissionCompletion.lua b/MissionCompletion.lua index dbde539..b48f1dc 100644 --- a/MissionCompletion.lua +++ b/MissionCompletion.lua @@ -223,7 +223,7 @@ function module:MissionAutoComplete(event,ID,arg1,arg2,arg3,arg4) end currentMission.state=step else - report:AddButton(L["Building Final report"],function() module:MissionsPrintResult() end) + report:AddButton(L["Building Final report"],function() module:MissionsPrintResults() end) startTimer(1,"LOOT") end end