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