Quantcast

Fix: integer overflow attempting to store<some big number> [C]: on

Alar of Daggerspine [03-13-15 - 07:19]
Fix: integer overflow attempting to store<some big number> [C]: on
loading

Signed-off-by: Alar of Daggerspine <alar@aspide.it>
Filename
CHANGELOG.txt
MatchMaker.lua
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index d2f5a76..a7f2a45 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -14,6 +14,4 @@
 *** Feature: threat tooltip in mission list wiht full countering follower list
 *** Feature: Broker displays not which toon has completed missions
 ** Fix from previous beta
-*** Sometimes opening mission after heartstoning to Garrison raised a lua error
-*** Sometimes opening the mission table as the very first action after login raised a lua error
-*** Priorities list in mission control was misaligned when choosing more than 5 priorities
+*** Fix: integer overflow attempting to store<some big number> [C]: on loading
diff --git a/MatchMaker.lua b/MatchMaker.lua
index 10d9169..ac75237 100644
--- a/MatchMaker.lua
+++ b/MatchMaker.lua
@@ -28,9 +28,8 @@ local xprint=function(...) if dbg then ns.xprint(...) end end
 local xdump=function(...) if dbg then ns.xdump(...) end end
 function addon:MissionScore(mission)
 	local totalTimeString, totalTimeSeconds, isMissionTimeImproved, successChance, partyBuffs, isEnvMechanicCountered, xpBonus, materialMultiplier,goldMultiplier = G.GetPartyMissionInfo(mission.missionID)
-	local r=mission.class=='resource' and materialMultiplier or xpBonus/10
+	local r=math.min(mission.class=='resource' and materialMultiplier or xpBonus/100,999)
 	local t=isMissionTimeImproved and 1 or 0
-	if r > 9999 then r= 999 end
 	return format("%03d%03d%01d",successChance,r,t)
 end
 function addon:FollowerScore(mission,followerID)
@@ -43,8 +42,8 @@ function addon:FollowerScore(mission,followerID)
 	end

 	local t=isMissionTimeImproved and 1 or 0
-	local c=(isEnvMechanicCountered and 1 or 0)+#partyBuffs
-	return format("%03d%01d%01d%01d%04d",successChance,r,c,t,10000-self:GetFollowerData(followerID,'rank',0))
+	local c=math.min((isEnvMechanicCountered and 1 or 0)+#partyBuffs,9)
+	return format("%03d%01d%01d%01d%04d",successChance,r,c,t,math.min(1000-self:GetFollowerData(followerID,'rank',90),999))
 end
 local filters={skipMaxed=false,skipBusy=false}
 function filters.nop(followerID)
@@ -158,7 +157,9 @@ local function MatchMaker(self,missionID,party,includeBusy,onlyBest)
 	--G.GetFollowerBiasForMission(missionID,followerID)
 	for followerID,_ in pairs(buffed) do
 		P:AddFollower(followerID)
-		tinsert(scores,format("%010d1|%s",self:FollowerScore(mission,followerID),followerID))
+		-- dirty trick to avoid issue with integer overflow
+		local followerScore=self:FollowerScore(mission,followerID)
+		tinsert(scores,format("%05d%05d1|%s",,followerID))
 		P:RemoveFollower(followerID)
 		buffeds=buffeds+1
 	end