From ca5190a2c69b48b692602dd45517b018390195ad Mon Sep 17 00:00:00 2001 From: Alar of Daggerspine Date: Sun, 21 Jun 2015 00:16:45 +0200 Subject: [PATCH] Full 6.2.0 Compatibility Signed-off-by: Alar of Daggerspine --- Debug.lua | 20 +++++++++++ GarrisonCommander.lua | 96 +++++++++++++++++++++++++++++-------------------- GarrisonCommander.xml | 2 +- Init.lua | 25 ++++++++----- MatchMaker.lua | 5 --- MissionCache.lua | 8 ++--- MissionControl.lua | 17 ++++++--- ShipYard.lua | 12 ++++--- 8 files changed, 120 insertions(+), 65 deletions(-) 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 @@ 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]