Quantcast

Another round of small bugfixes

Alar of Daggerspine [06-26-15 - 11:04]
Another round of small bugfixes

Signed-off-by: Alar of Daggerspine <alar@aspide.it>
Filename
GarrisonCommander.lua
Init.lua
MatchMaker.lua
MissionCompletion.lua
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