Quantcast

Full 6.2.0 Compatibility

Alar of Daggerspine [06-20-15 - 22:16]
Full 6.2.0 Compatibility

Signed-off-by: Alar of Daggerspine <alar@aspide.it>
Filename
Debug.lua
GarrisonCommander.lua
GarrisonCommander.xml
Init.lua
MatchMaker.lua
MissionCache.lua
MissionControl.lua
ShipYard.lua
diff --git a/Debug.lua b/Debug.lua
index 69358f2..09ffd19 100644
--- a/Debug.lua
+++ b/Debug.lua
@@ -1,4 +1,5 @@
 --@do-not-package@
+local _G=_G
 LoadAddOn("Blizzard_DebugTools")
 local me, ns = ...
 if (me=="doc") then
@@ -275,6 +276,25 @@ local function traitGen()
 		map[key][trait.id]=trait.name
 	end
 	DevTools_Dump(map)
+	do
+		local f=ns.AceGUI:Create("Frame")
+		local editbox=ns.AceGUI:Create("EditBox")
+		f:AddChild(editbox)
+		editbox:SetFullHeight(true)
+		f:SetLayout("Fill")
+		f:DoLayout()
+		local accumulator=""
+		local context = {
+				depth = 0,
+				key = nil,
+		};
+		context.GetTableName = function() return nil end
+		context.GetFunctionName = context.GetTableName
+		context.GetUserdataName = context.GetTableName
+		context.Write=function(this,msg) accumulator=accumulator..msg end
+		DevTools_RunDump(map,context)
+		editbox:SetText(accumulator)
+	end
 end
 local trackedEvents={}
 local function eventTrace ( self, event, ... )
diff --git a/GarrisonCommander.lua b/GarrisonCommander.lua
index acdc349..050f094 100644
--- a/GarrisonCommander.lua
+++ b/GarrisonCommander.lua
@@ -302,6 +302,16 @@ sorters.Age=function (mission1, mission2)
 		return p1 < p2
 	end
 end
+sorters.Class=function(mission1,mission2)
+	if type(mission1)~="table" or type(mission2) ~="table" then return end
+	local p1=addon:GetMissionData(mission1.missionID,'class','other')
+	local p2=addon:GetMissionData(mission2.missionID,'class','other')
+	if (p1==p2) then
+		return strcmputf8i(mission1.name, mission2.name) < 0
+	else
+		return p1 < p2
+	end
+end
 sorters.Followers=function(mission1, mission2)
 	if type(mission1)~="table" or type(mission2) ~="table" then return end
 	local p1=addon:GetMissionData(mission1.missionID,'numFollowers',1)
@@ -347,6 +357,10 @@ function addon.Garrison_SortMissions_Original(missionsList)
 	addon:OnAllMissions(function(missionID) addon:MatchMaker(missionID) end)
 	origGarrison_SortMissions(missionsList)
 end
+function addon.Garrison_SortMissions_Class(missionsList)
+	addon:OnAllMissions(function(missionID) addon:MatchMaker(missionID) end)
+	table.sort(missionsList, sorters.Class);
+end
 local t={}
 for i=1,256 do
 	local rc,good=pcall(G.GetFollowerAbilityIsTrait,i)
@@ -385,6 +399,7 @@ function addon:OnInitialized()
 		Garrison_SortMissions_Age=L["Expiration Time"],
 		Garrison_SortMissions_Xp=L["Global approx. xp reward"],
 		Garrison_SortMissions_Duration=L["Duration Time"],
+		Garrison_SortMissions_Class=L["Reward type"],
 	},
 	L["Sort missions by:"],L["Original sort restores original sorting method, whatever it was (If you have another addon sorting mission, it should kick in again)"])
 	self:AddToggle("MAXRES",true,L["Maximize result"],L["Allows a lower success percentage for resource missions. Use /gac gui to change percentage. Default is 80%"])
@@ -431,13 +446,8 @@ local function fillCounters(self,category)

 		if ( not frame ) then
 			frame = CreateFrame("Button", nil, self, "GarrisonTraitCounterTemplate");
-			if i %  offset == 1 then
-				local a,b,c,x,y=self.TraitsList[1]:GetPoint(1)
-				frame:SetPoint(a,b,c,0,0)
-			else
-				frame:SetPoint("RIGHT", self.TraitsList[i-1], "LEFT", -14, 0);
-				frame:SetScript("OnEnter",GarrisonTraitCounter_OnEnter)
-			end
+			frame:SetPoint("LEFT", self.TraitsList[i-1], "RIGHT", 14, 0);
+			frame:SetScript("OnEnter",GarrisonTraitCounter_OnEnter)
 			self.TraitsList[i] = frame;
 		end
 		frame.Icon:SetTexture(G.GetFollowerAbilityIcon(id))
@@ -463,7 +473,7 @@ function _G.GarrisonTraitCountersFrame_OnLoad(self, followerType, tooltipString)
 	self.tooltipString = tooltipString;
 	self.choice=CreateFrame('Frame',self:GetName()..tostring(GetTime()*1000),self,"UIDropDownMenuTemplate")
 	self.choice.button=_G[self.choice:GetName()..'Button']
-	self.choice:SetPoint("TOPLEFT",GMF.FollowerTab,"BOTTOMLEFT",-10,-5)
+	self.choice:SetPoint("TOPLEFT")
 	fillCounters(self,1)
 	do
 		local frame=self.choice
@@ -475,18 +485,20 @@ function _G.GarrisonTraitCountersFrame_OnLoad(self, followerType, tooltipString)
 		UIDropDownMenu_Initialize(frame, function(...)
 			local i=0
 			for v,k in pairs(list) do
-				i=i+1
-				local info=UIDropDownMenu_CreateInfo()
-				info.text=k
-				info.value=v
-				info.func=sel
-				info.arg1=v
-				info.arg2=i
-				UIDropDownMenu_AddButton(info,1)
+				if ns.traitTable[v] then
+					i=i+1
+					local info=UIDropDownMenu_CreateInfo()
+					info.text=k
+					info.value=v
+					info.func=sel
+					info.arg1=v
+					info.arg2=i
+					UIDropDownMenu_AddButton(info,1)
+				end
 			end
 		end)
-		UIDropDownMenu_SetWidth(frame, 100);
-		UIDropDownMenu_SetButtonWidth(frame, 124)
+		UIDropDownMenu_SetWidth(frame, 150);
+		UIDropDownMenu_SetButtonWidth(frame, 174)
 		UIDropDownMenu_SetSelectedID(frame, 1)
 		UIDropDownMenu_JustifyText(frame, "LEFT")
 		--EasyMenu(list,frame,frame,0,0,nil,5)
@@ -1712,7 +1724,7 @@ function addon:SetUp(...)
 	addon:ActivateButton(bt,"MissionComplete",L["Complete all missions without confirmation"])
 	GarrisonTraitCountersFrame:ClearAllPoints()
 	GarrisonTraitCountersFrame:SetParent(GarrisonThreatCountersFrame:GetParent())
-	GarrisonTraitCountersFrame:SetPoint("BOTTOMRIGHT",0,-25)
+	GarrisonTraitCountersFrame:SetPoint("BOTTOMLEFT",200,0)
 	GarrisonTraitCountersFrame:Show()

 	return self:StartUp()
@@ -1846,12 +1858,12 @@ end
 function addon:checkMethod(method,hook)
 	if (type(self[method])=="function") then
 --@debug@
-		print("Hooking ",hook,"to self:" .. method)
+		--print("Hooking ",hook,"to self:" .. method)
 --@end-debug@
 		return true
 --@debug@
 	else
-		print("Hooking ",hook,"to print")
+		--print("Hooking ",hook,"to print")
 --@end-debug@
 	end
 end
@@ -1890,7 +1902,8 @@ function addon:SafeHookScript(frame,hook,method,postHook)
 		end
 	end
 	if (frame) then
-		if (self:IsHooked(frame,hook)) then return end
+		--This allow to change a hook, for example to substitute an one time init with the standard routine
+		if (self:IsHooked(frame,hook)) then self:Unhook(frame,hook)	end
 		if (method) then
 			if (postHook) then
 				self:SecureHookScript(frame,hook,method)
@@ -2282,7 +2295,11 @@ do
 			self:OpenFollowersTab()
 			GMF.selectedFollower=followerID
 			if (GMF.FollowerTab) then
-				GarrisonFollowerPage_ShowFollower(GMF.FollowerTab,followerID)
+				if (ns.toc <60200) then
+					GarrisonFollowerPage_ShowFollower(GMF.FollowerTab,followerID)
+				else
+					GMFFollowers:ShowFollower(followerID)
+				end
 			end
 		else
 			menu[1].text=frame.info.name
@@ -2437,14 +2454,16 @@ addon.SetUp=addon.ExperimentalSetUp


 -- Blizzard functions override
-local function override(blizfunc)
-	if not orig[blizfunc] then
-		orig[blizfunc]=_G[blizfunc]
-		_G[blizfunc]=over[blizfunc]
+local function override(blizfunc,...)
+	local overrider=blizfunc
+	if select('#',...) > 0 then
+		blizfunc=strjoin('.',blizfunc,...)
+		overrider=strjoin('_',overrider,...)
 	end
---@debug@
-	print("Overriding ",blizfunc)
---@end-debug@
+	assert(type(over[overrider])=="function",overrider)
+	if (orig[overrider]) then return end
+	local code="local orig,over,overrider=... orig[overrider]=_G."..blizfunc.." _G."..blizfunc.."=over[overrider]"
+	assert(loadstring(code, "Executing " ..code))(orig,over,overrider)
 end
 function over.StolenGarrisonMissionPageFollowerFrame_OnEnter(self)
 	if not self.info then
@@ -2633,7 +2652,7 @@ do
 		local missions;
 		if (self.showInProgress) then
 			-- Ten times in a second is enough...
-			local tick=math.floor(GetTime()*10)
+			local tick=math.floor(GetTime())
 			if (tick == lastcall) then
 			else
 				collectgarbage("step",500)
@@ -3058,17 +3077,19 @@ function over.GarrisonMissionList_SetTab(...)
 	end
 	if (HD) then addon:ResetSinks() end
 end
-function over.GarrisonMissionController_OnClickTab(self,tab,...)
-	print("Click su",...)
+function over.GarrisonMissionFrame_SelectTab(self,tab,...)
 	-- I dont actually care wich page we are shoing, I know I must redraw missions
-	orig.GarrisonMissionController_OnClickTab(self,tab,...)
+	orig.GarrisonMissionFrame_SelectTab(self,tab,...)
 	addon:RefreshFollowerStatus()
 	for i=1,#GMFMissionListButtons do
 		GMFMissionListButtons.lastMissionID=nil
 	end
-	lastTab=tab:GetID()
+	lastTab=tab
 	if (HD) then addon:ResetSinks() end
-	addon:OpenLastTab();
+	if GMF.tabMC then
+		GMF.tabMC:SetChecked(false)
+		ns.GMC:Hide()
+	end
 end
 function over.GarrisonMissionButton_OnClick(f,b)
 	print(f,f:GetName())
@@ -3076,14 +3097,13 @@ function over.GarrisonMissionButton_OnClick(f,b)
 end

 --hooksecurefunc("GarrisonMissionList_Update",function(...)print("Original GarrisonMissionList_Update",...)end)
-override("GarrisonMissionPage_Close")
 override("GarrisonMissionList_Update")
 override("GarrisonMissionButton_SetRewards")
 override("GarrisonMissionButton_OnEnter")
 override("GarrisonMissionPageFollowerFrame_OnEnter")
 override("GarrisonMissionList_SetTab")
 override("GarrisonMissionButton_OnClick")
-override("GarrisonMissionController_OnClickTab")
+override("GarrisonMissionFrame","SelectTab")

 GMF.MissionTab.MissionPage.CloseButton:SetScript("OnClick",over.GarrisonMissionPage_Close)
 for i=1,#GMFMissionListButtons do
diff --git a/GarrisonCommander.xml b/GarrisonCommander.xml
index fea07eb..c23b8cf 100644
--- a/GarrisonCommander.xml
+++ b/GarrisonCommander.xml
@@ -417,7 +417,7 @@
 		<Frames>
 			<Button parentArray="TraitsList" inherits="GarrisonTraitCounterTemplate">
 				<Anchors>
-					<Anchor point="TOPRIGHT" x="0" y="7"/>
+					<Anchor point="TOPLEFT" x="0" y="0"/>
 				</Anchors>
 			</Button>
 		</Frames>
diff --git a/Init.lua b/Init.lua
index ff64f3d..ffb09a3 100644
--- a/Init.lua
+++ b/Init.lua
@@ -14,17 +14,25 @@ local tostring=tostring
 local tonumber=tonumber
 --@debug@
 LoadAddOn("Blizzard_DebugTools")
-if LibDebug then LibDebug() end
+if LibDebug then LibDebug() else ns.print=function() end end
 --@end-debug@
 --[===[@non-debug@
-setfenv(1,setmetatable({print=function(...) print("x",...) end},{__index=_G}))
+ns.print=function() end
 --@end-non.debug@]===]
 ns.addon=LibStub("LibInit"):NewAddon(me,'AceHook-3.0','AceTimer-3.0','AceEvent-3.0','AceBucket-3.0')
-local chatframe=ns.addon:GetChatFrame("aDebug")
-local function pd(...)
-	--if (chatframe) then chatframe:AddMessage(format("GC:%6.3f %s",GetTime(),strjoin(' ',tostringall(...)))) end
-	pp(format("|cff808080GC:%6.3f|r %s",GetTime(),strjoin(' ',tostringall(...))))
+local ENV=setmetatable({
+	print=ns.print
+},
+{__index=_G}
+)
+function ns.Configure()
+		local old_env = getfenv(2)
+		if old_env ~= _G and old_env ~= ENV then
+			error("The calling function has a modified environment, I won't replace it.", 2)
+		end
+		setfenv(2, ENV)
 end
+
 local addon=ns.addon --#addon
 ns.toc=select(4,GetBuildInfo())
 ns.AceGUI=LibStub("AceGUI-3.0")
@@ -265,8 +273,9 @@ ns.traitTable= {
 		[41] = "Furyslayer",
 	},
 }
-
-
+ns.traitTable={
+[1]={  [9]="Wastelander",  [7]="Mountaineer",  [45]="Cave Dweller",  [46]="Guerilla Fighter",  [44]="Naturalist",  [48]="Marshwalker",  [49]="Plainsrunner",  [8]="Cold-Blooded"},[2]={  [80]="Extra Training",  [314]="Greasemonkey",  [79]="Scavenger",  [256]="Treasure Hunter",  [29]="Fast Learner"},[3]={  [76]="High Stamina",  [221]="Epic Mount",  [77]="Burst of Power"},[6]={  [61]="Tailoring",  [52]="Mining",  [54]="Alchemy",  [56]="Enchanting",  [58]="Inscription",  [60]="Leatherworking",  [62]="Skinning",  [53]="Herbalism",  [55]="Blacksmithing",  [57]="Engineering",  [59]="Jewelcrafting"},[7]={  [64]="Humanist",  [66]="Child of the Moon",  [68]="Canine Companion",  [65]="Dwarvenborn",  [67]="Ally of Argus",  [69]="Brew Aficionado",  [63]="Gnome-Lover"},[8]={  [37]="Beastslayer",  [39]="Primalslayer",  [4]="Orcslayer",  [43]="Talonslayer",  [36]="Demonslayer",  [38]="Ogreslayer",  [40]="Gronnslayer",  [42]="Voidslayer",  [41]="Furyslayer"}
+}
 -------------------- to be estracted to CountersCache
 --
 --local G=C_Garrison
diff --git a/MatchMaker.lua b/MatchMaker.lua
index 1368b78..b9ceabc 100644
--- a/MatchMaker.lua
+++ b/MatchMaker.lua
@@ -170,7 +170,6 @@ end
 local function MatchMaker(self,missionID,party,includeBusy,onlyBest)
 	local mission=self:GetMissionData(missionID)
 	local class=self:GetMissionData(missionID,'class')
-	print(C(format("MATCHMAKER %s (%d) class: %s",mission.name,missionID,class),'Orange'),includeBusy and "Busy" or "Ready")
 	local filterOut=filters[class] or filters.other
 	filters.skipMaxed=self:GetBoolean("IGP")
 	if (includeBusy==nil) then
@@ -246,25 +245,21 @@ local function MatchMaker(self,missionID,party,includeBusy,onlyBest)
 	if P:FreeSlots() > 0 then
 		if not onlyBest then
 			filters.skipMaxed=false
-			print("           AddMore 1 with skipmaxed false",filters.skipMaxed)
 			AddMoreFollowers(self,mission,scores)
 		end
 	end
 	if P:FreeSlots() > 0 then
 		filters.skipMaxed=false
-		print("           AddMore 1 with just do true")
 		AddMoreFollowers(self,mission,scores,true)
 	end
 	if P:FreeSlots() > 0 then
 		filters.skipMaxed=false
-		print("           AddMore 1 with just do true")
 		AddMoreFollowers(self,mission,fillers,true)
 	end
 	if dbg then
 		P:Dump()
 		scroller:AddRow("Final score: " .. self:MissionScore(mission))
 	end
-	print("Final score",self:MissionScore(mission))
 	if not party.class then
 		party.class=class
 		party.itemLevel=mission.itemLevel
diff --git a/MissionCache.lua b/MissionCache.lua
index 42b3586..8f50922 100644
--- a/MissionCache.lua
+++ b/MissionCache.lua
@@ -1,4 +1,5 @@
 local me,ns=...
+ns.Configure()
 local addon=ns.addon --#addon
 local holdEvents,releaseEvents=addon.holdEvents,addon.releaseEvents
 local xdump=ns.xdump
@@ -75,7 +76,6 @@ function addon:GetMissionData(missionID,key,default)
 	end
 	if (key==nil) then
 		if (mission.class=="retry" or not mission.globalXp or key=="globalXp") then
-			print(key)
 			self:AddExtraData(mission)
 		end
 		return mission
@@ -139,7 +139,7 @@ function addon:AddExtraData(mission)
 					return
 				end
 				if itemTexture:lower()==rushOrders then
-					mission.rush=1
+					mission.rush=mission.rush+v.quantity
 				elseif itemName and (not v.quantity or v.quantity==1) and not v.followerXP then
 					if itemLevel > 1 and itemMinLevel >=90 then
 						mission.itemLevel=itemLevel
@@ -175,10 +175,10 @@ function addon:AddExtraData(mission)
 		mission.class='followerUpgrade'
 	elseif mission.itemLevel>=645 then
 		mission.class='epic'
-	elseif mission.rush>=0 then
+	elseif mission.rush>0 then
 		mission.class='rush'
 	elseif numrewards > 1 then
-		mission.class='generic'
+		mission.class='other'
 	else
 		mission.class='xp'
 		mission.xpOnly=true
diff --git a/MissionControl.lua b/MissionControl.lua
index e9a9cbd..355fab6 100644
--- a/MissionControl.lua
+++ b/MissionControl.lua
@@ -33,8 +33,8 @@ local tItems = {
 	{t = 'Enable/Disable resource awards. (Resources/Seals)', i= 'Interface\\Icons\\inv_garrison_resource', key = 'resources'},
 	{t = 'Enable/Disable rush scroll.', i= 'Interface\\ICONS\\INV_Scroll_12', key = 'rush'},
 	{t = 'Enable/Disable Follower XP Bonus rewards.', i = 'Interface\\Icons\\XPBonus_Icon', key = 'xp'},
-	{t = 'Enable/Disable follower equip enhancement.', i = 'Interface\\ICONS\\Garrison_ArmorUpgrade', key = 'followerEquip'},
-	{t = 'Enable/Disable item tokens.', i = "Interface\\ICONS\\INV_Bracer_Cloth_Reputation_C_01", key = 'equip'},
+	{t = 'Enable/Disable follower equip enhancement.', i = 'Interface\\ICONS\\Garrison_ArmorUpgrade', key = 'followerUpgrade'},
+	{t = 'Enable/Disable item tokens.', i = "Interface\\ICONS\\INV_Bracer_Cloth_Reputation_C_01", key = 'itemLevel'},
 	{t = 'Enable/Disable apexis.', i = "Interface\\Icons\\inv_apexis_draenor", key = 'apexis'},
 	{t = 'Enable/Disable other rewards.', i = "Interface\\ICONS\\INV_Box_02", key = 'other'}
 }
@@ -81,7 +81,11 @@ function module:GMCCreateMissionList(workList)
 	local function msort(i1,i2)
 		local c1=addon:GetMissionData(i1,'class','other')
 		local c2=addon:GetMissionData(i2,'class','other')
-		return addon:GetMissionData(i1,c1,0) > addon:GetMissionData(i2,c2,0)
+		if (c1==c2) then
+			return addon:GetMissionData(i1,c1,0) > addon:GetMissionData(i2,c2,0)
+		else
+			return tOrder[c1]<tOrder[c2]
+		end
 	end
 	table.sort(workList,msort)
 end
@@ -242,8 +246,9 @@ local function drawItemButtons()
 	local h=37 -- itemButtonTemplate standard size
 	local gap=5
 	local single=GMC.settings.useOneChance
-	for j = 1, #tItems do
-		local i=tOrder[j]
+	--for j = 1, #tItems do
+		--local i=tOrder[j]
+	for j,i in ipairs(tOrder) do
 		local frame = GMC.ignoreFrames[j] or CreateFrame('BUTTON', "Priority" .. j, GMC.aif, 'ItemButtonTemplate')
 		GMC.ignoreFrames[j] = frame
 		frame:SetID(i)
@@ -252,6 +257,7 @@ local function drawItemButtons()
 		frame:SetPoint('TOPLEFT', 0,(j) * (-h -gap) * scale)
 		frame.icon:SetTexture(tItems[i].i)
 		frame.key=tItems[i].key
+		tOrder[frame.key]=j
 		frame.tooltip=tItems[i].t
 		frame.allowed=GMC.settings.allowedRewards[frame.key]
 		frame.chance=GMC.settings.rewardChance[frame.key]
@@ -322,6 +328,7 @@ local function drawItemButtons()
 							f:SetID(id)
 							for j=1,#tItems do
 								tOrder[j]=GMC.ignoreFrames[j]:GetID()
+								tOrder[GMC.ignoreFrames[j].key]=j
 							end
 							break
 						end
diff --git a/ShipYard.lua b/ShipYard.lua
index 03057e1..0d2114e 100644
--- a/ShipYard.lua
+++ b/ShipYard.lua
@@ -9,10 +9,8 @@ local _G=_G
 --if LibDebug() then LibDebug() end
 --@end-debug@
 local new, del, copy =ns.new,ns.del,ns.copy
-local GMF=GarrisonMissionFrame
-local GMFMissions=GarrisonMissionFrameMissions
+local GSF=GarrisonShipyardFrame
 local G=C_Garrison
-local GARRISON_CURRENCY=GARRISON_CURRENCY
 local pairs=pairs
 local format=format
 local strsplit=strsplit
@@ -21,4 +19,10 @@ local module=addon:NewSubClass('ShipYard') --#Module
 function module:OnInitialize()
 	self:Print("ShipYard Loaded")
 end
-print("CIAOCIAO")
\ No newline at end of file
+function module:Setup()
+	print("Doing one time initialization")
+	self:SafeHookScript(GSF,"OnShow","GSF_OnShow",true)
+end
+function module:GSF_OnShow()
+	print("Doing all time initialization")
+end