diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 83d9e2e..c332268 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,5 +1,9 @@
*GarrisonCommander helps you when choosing the right follower for the right mission*
+* *2.6.7*
+Feature: Shipyard mission autofill!! See the success chance in map and have your fleet automagically setup
+Fix: Consolidate broker colours for buttons, Now, red, always means ypu need to check it
+
* *2.6.6*
Feature: Quick mission completion enabled for shipyard
Feature: In Ship missions mission expire time added
diff --git a/FollowerCache.lua b/FollowerCache.lua
index 980bf3b..6aec808 100644
--- a/FollowerCache.lua
+++ b/FollowerCache.lua
@@ -22,6 +22,7 @@ local LE_FOLLOWER_TYPE_SHIPYARD_6_2=_G.LE_FOLLOWER_TYPE_SHIPYARD_6_2
local maxrank=GARRISON_FOLLOWER_MAX_UPGRADE_QUALITY*1000+GARRISON_FOLLOWER_MAX_LEVEL
local module=addon:NewSubClass('FollowerCache')
local cache={} --#cache
+local followerTypes={}
local EMPTY={}
function module:OnInitialized()
self:RegisterEvent("GARRISON_FOLLOWER_REMOVED","OnEvent")
@@ -74,6 +75,7 @@ function cache:Refresh()
if next(self.cache) then return end
self:Wipe()
for _,follower in pairs(G.GetFollowers(self.type)) do
+ followerTypes[follower.followerID]=follower.followerTypeID
if follower.isCollected then
self:AddExtraData(follower)
self:AddAbilities(follower)
@@ -205,10 +207,13 @@ end
-- Addon level proxies
function addon:GetAnyData(followerType,...)
- if followerType== LE_FOLLOWER_TYPE_GARRISON_6_0 then
- return self:GetFollowerData(...)
- else
+ if followerType==0 then
+ followerType=self:GetFollowerType(...)
+ end
+ if followerType== LE_FOLLOWER_TYPE_SHIPYARD_6_2 then
return self:GetShipData(...)
+ else
+ return self:GetFollowerData(...)
end
end
function addon:GetFollowerData(followerID,key,default)
@@ -229,6 +234,16 @@ end
function addon:GetShipsIterator(func)
return module.shipCache:GetFollowersIterator(func)
end
+function addon:GetAnyIterator(followerType,func)
+ if followerType==LE_FOLLOWER_TYPE_GARRISON_6_0 then
+ return self:GetFollowersIterator(func)
+ else
+ return self:GetShipsIterator(func)
+ end
+end
+function addon:GetFollowerType(followerID)
+ return followerTypes[followerID] or 0
+end
--[=[
local function keyToIndex(key)
diff --git a/GarrisonCommander-Broker/ldb.lua b/GarrisonCommander-Broker/ldb.lua
index 08004fb..d33a0cd 100644
--- a/GarrisonCommander-Broker/ldb.lua
+++ b/GarrisonCommander-Broker/ldb.lua
@@ -214,7 +214,7 @@ function addon:CountCaches()
local now=time()
local expired=400*600 -- 1 risorsa ogni 10 minuti, per fullare servono 500 * 600 secondi
for p,j in pairs(self.db.realm.caches) do
- local expired=(addon.db.realm.cachesize[p] or 500)*0.9 /600
+ local expired=(addon.db.realm.cachesize[p] or 500)*0.9 *600
if j>0 then
tot=tot+1
if j+expired < now then
@@ -227,11 +227,11 @@ end
function addon:CountEmpty()
local tot=0
local missing=0
- local expire=time()+3600*24
+ local expire=time()+3600*12
for p,j in pairs(self.db.realm.orders) do
- for s,_ in pairs(j) do
+ for s,w in pairs(j) do
tot=tot+1
- if not j[s] or j[s] < expire then missing=missing+1 end
+ if not w or w < expire then missing=missing+1 end
end
end
return missing,tot
@@ -447,7 +447,7 @@ cacheobj=LibStub:GetLibrary("LibDataBroker-1.1"):NewDataObject("GC-Cache", {
function farmobj:Update()
local n,t=addon:CountMissing()
if (t>0) then
- local c=addon:ColorToString(addon:Gradient((t-n)/t))
+ local c=addon:ColorToString(addon:Gradient(n/t))
farmobj.text=format("|cff%s%d|r/|cff%s%d|r",c,t-n,C.Green.c,t)
else
farmobj.text=NONE
@@ -456,7 +456,7 @@ end
function cacheobj:Update()
local n,t=addon:CountCaches()
if (t>0) then
- local c=addon:ColorToString(addon:Gradient((t-n)/t))
+ local c=addon:ColorToString(addon:Gradient(n/t))
cacheobj.text=format("|cff%s%d|r/|cff%s%d|r",c,t-n,C.Green.c,t)
else
cacheobj.text=NONE
@@ -542,7 +542,7 @@ end
function workobj:Update()
local n,t=addon:CountEmpty()
if (t>0) then
- local c=addon:ColorToString(addon:Gradient((t-n)/t))
+ local c=addon:ColorToString(addon:Gradient((n)/t))
workobj.text=format("|cff%s%d|r/|cff%s%d|r",c,t-n,C.Green.c,t)
else
workobj.text=NONE
@@ -551,17 +551,26 @@ function workobj:Update()
end
function workobj:OnTooltipShow()
self:AddLine(CAPACITANCE_WORK_ORDERS)
+ local now=time()
+ local normal=24*3600
+ local short=12*3600
+ local long=48*3600
for k,v in kpairs(addon.db.realm.orders) do
if (k==ns.me) then
self:AddLine(k,C.Green())
else
self:AddLine(k,C.Orange())
end
+
for s,d in kpairs(v) do
- local delta=d-time()
+ local delta=d-now
if (delta >0) then
- local hours=delta/(3600*48)
- self:AddDoubleLine(s,SecondsToTime(delta),nil,nil,nil,addon:Gradient(hours))
+ local gradient=1
+ if delta > long then gradient=0
+ elseif delta > normal then gradient=0.25
+ elseif delta >short then gradient=0.5
+ end
+ self:AddDoubleLine(s,SecondsToTime(delta),nil,nil,nil,addon:Gradient(gradient))
else
self:AddDoubleLine(s,EMPTY,nil,nil,nil,C:Red())
end
diff --git a/GarrisonCommander.lua b/GarrisonCommander.lua
index 161667b..c4d0de6 100644
--- a/GarrisonCommander.lua
+++ b/GarrisonCommander.lua
@@ -905,7 +905,6 @@ end
function addon:EventGARRISON_MISSION_COMPLETE_RESPONSE(event,missionID,completed,rewards)
dbcache.history[missionID][time()]={result=100,success=rewards}
dbcache.seen[missionID]=nil
- dbcache.seen[missionID]=nil
end
-----------------------------------------------------
-- Coroutines data and clock management
@@ -1929,6 +1928,9 @@ end
local GARRISON_MISSION_AVAILABILITY1=GARRISON_MISSION_AVAILABILITY..'\n %s'
local GARRISON_MISSION_AVAILABILITY2=GARRISON_MISSION_ENVIRONMENT:sub(1,10)..GARRISON_MISSION_AVAILABILITY..':|r %s'
local GARRISON_MISSION_ID=GARRISON_MISSION_ENVIRONMENT:sub(1,10)..'MissionID:|r |cffffffff%s|r'
+local fakeinfo={followerID=false}
+local fakeframe={}
+
function addon:FillMissionPage(missionInfo)
if type(missionInfo)=="number" then missionInfo=self:GetMissionData(missionInfo) end
if not missionInfo then return end
@@ -1953,41 +1955,36 @@ if not stage.missionid then
--@end-debug@
if( IsControlKeyDown()) then self:Print("Shift key, ignoring mission prefill") return end
if (self:GetBoolean("NOFILL")) then return end
- if missionType==LE_FOLLOWER_TYPE_SHIPYARD_6_2 then
- print("SHip Mission",missionInfo)
- return
- end
local missionID=missionInfo.missionID
--@debug@
print("UpdateMissionPage for",missionID,missionInfo.name,missionInfo.numFollowers)
--@end-debug@
holdEvents()
- if ns.toc < 60200 then
- GarrisonMissionPage_ClearParty()
- else
- GMF:ClearParty()
- end
+ local main=missionInfo.followerTypeID==LE_FOLLOWER_TYPE_GARRISON_6_0 and GMF or GSF
+ local missionpage=main.MissionTab.MissionPage
+
+ main:ClearParty()
local party=self:GetParty(missionID)
if (party) then
local members=party.members
for i=1,missionInfo.numFollowers do
+ local followerframe=missionpage.Followers[i]
local followerID=members[i]
if (followerID) then
- local rc,error=pcall(GarrisonMissionPage_AddFollower,followerID)
- if (not rc) then
- print("fillmissinopage",error)
- end
+ main:AssignFollowerToMission(followerframe,self:GetAnyData(missionInfo.followerTypeID,followerID))
+ -- local rc,error=pcall(GarrisonMissionPage_AddFollower,followerID)
+ -- if (not rc) then
+ -- print("fillmissinopage",error)
+ -- end
end
end
- end
- if ns.toc < 60200 then
- GarrisonMissionPage_UpdateParty()
else
- GMF:UpdateMissionParty(GMF.MissionTab.MissionPage.Followers)
- GMF:UpdateMissionData(GMF.MissionTab.MissionPage)
- --self:Dump(GMF.MissionTab.MissionPage.Followers,"Selected followers")
- --GarrisonMissionPage_UpdateEmptyString()
+ print("No martini no party")
end
+ main:UpdateMissionParty(main.MissionTab.MissionPage.Followers)
+ main:UpdateMissionData(main.MissionTab.MissionPage)
+ --self:Dump(GMF.MissionTab.MissionPage.Followers,"Selected followers")
+ --GarrisonMissionPage_UpdateEmptyString()
releaseEvents()
end
local firstcall=true
diff --git a/MatchMaker.lua b/MatchMaker.lua
index e07d7bc..af43b9f 100644
--- a/MatchMaker.lua
+++ b/MatchMaker.lua
@@ -156,9 +156,9 @@ local function AddMoreFollowers(self,mission,scores,justdo)
end
end
end
-local function MatchMaker(self,missionID,party,includeBusy,onlyBest)
- local mission=self:GetMissionData(missionID)
- local class=self:GetMissionData(missionID,'class')
+local function MatchMaker(self,mission,party,includeBusy,onlyBest)
+ local class=mission.class
+ local missionID=mission.missionID
local filterOut=filters[class] or filters.other
filters.skipMaxed=self:GetBoolean("IGP")
if (includeBusy==nil) then
@@ -185,7 +185,7 @@ local function MatchMaker(self,missionID,party,includeBusy,onlyBest)
end
--]]
local minchance=floor(currentCap/mission.numFollowers)-mission.numFollowers*mission.numFollowers
- for _,followerID in self:GetFollowersIterator() do
+ for _,followerID in self:GetAnyIterator(mission.followerTypeID) do
if self:IsFollowerAvailableForMission(followerID,filters.skipBusy) then
if P:AddFollower(followerID) then
local score,chance=self:FollowerScore(mission,followerID)
@@ -209,7 +209,7 @@ local function MatchMaker(self,missionID,party,includeBusy,onlyBest)
scroller:addRow("Cap Res Cha Xp T Vra Ran")
for i=1,#scores do
local score,followerID=strsplit('@',scores[i])
- local t=score .. " " .. addon:GetFollowerData(followerID,'fullname') .. " " .. tostring(G.GetFollowerStatus(followerID))
+ local t=score .. " " .. addon:GetAnyData(mission.followerTypeID,followerID,'fullname') .. " " .. tostring(G.GetFollowerStatus(followerID))
scroller:addRow(t)
end
else
@@ -268,10 +268,13 @@ local function MatchMaker(self,missionID,party,includeBusy,onlyBest)
--del(buffed)
end
function addon:MCMatchMaker(missionID,party,skipEpic,cap)
+ local mission=type(missionID)=="table" and missionID or self:GetMissionData(missionID)
+ missionID=mission.missionID
+ if (not party) then party=addon:GetParty(missionID) end
useCap=true
currentCap=cap
print("Using cap data:",useCap,currentCap)
- MatchMaker(self,missionID,party,false)
+ MatchMaker(self,mission,party,false)
if (skipEpic) then
if (self:GetMissionData(missionID,'class')=='xp') then
for i=1,#party.members do
@@ -283,18 +286,24 @@ function addon:MCMatchMaker(missionID,party,skipEpic,cap)
wipe(party.members)
end
end
+ return party.perc
end
function addon:MatchMaker(missionID,party,includeBusy)
- if (not party) then party=self:GetParty(missionID) end
+ local mission=type(missionID)=="table" and missionID or self:GetMissionData(missionID)
+ missionID=mission.missionID
+ if (not party) then party=addon:GetParty(missionID) end
useCap=self:GetBoolean("MAXRES")
currentCap= self:GetNumber("MAXRESCHANCE")
- MatchMaker(self,missionID,party,includeBusy)
+ MatchMaker(self,mission,party,includeBusy)
+ return party.perc
end
function addon:TestMission(missionID,includeBusy)
+ local mission=type(missionID)=="table" and missionID or self:GetMissionData(missionID)
+ missionID=mission.missionID
dbg=true
local party=new()
party.members=new()
- self:MatchMaker(missionID,party,includeBusy)
+ self:MatchMaker(mission,party,includeBusy)
--@debug@
DevTools_Dump(party)
--@end-debug@
@@ -304,10 +313,12 @@ function addon:TestMission(missionID,includeBusy)
dbg=false
end
function addon:MCTestMission(missionID,includeBusy,chance)
+ local mission=type(missionID)=="table" and missionID or self:GetMissionData(missionID)
+ missionID=mission.missionID
dbg=true
local party=new()
party.members=new()
- self:MCMatchMaker(missionID,party,includeBusy,true,chance)
+ self:MCMatchMaker(mission,party,includeBusy,true,chance)
--@debug@
DevTools_Dump(party)
--@end-debug@
diff --git a/PartyCache.lua b/PartyCache.lua
index 43e724b..059ff44 100644
--- a/PartyCache.lua
+++ b/PartyCache.lua
@@ -112,12 +112,6 @@ function party:AddFollower(followerID)
if (rc and code) then
tinsert(members,followerID)
return true
---@debug@
- else
- print("Unable to add",followerID, G.GetFollowerName(followerID),"to",ID,code,self:IsIn(followerID),G.GetFollowerStatus(followerID))
- print(members[1],members[2],members[3])
- print(debugstack(1,6,0))
---@end-debug@
end
end
end
@@ -141,7 +135,18 @@ function party:StoreFollowers(table)
return #table
end
local function fsort(a,b)
- return addon:GetFollowerData(a,"rank")>addon:GetFollowerData(b,"rank")
+ --return addon:GetFollowerData(a,"rank")>addon:GetFollowerData(b,"rank")
+ local rank1=addon:GetAnyData(0,a,"rank")
+ local rank2=addon:GetAnyData(0,b,"rank")
+ if tonumber(rank1) and tonumber(rank2) then
+ return rank1 < rank2
+ else
+ print(a,rank1)
+ print(b,rank2)
+ print(G.GetFollowerName(a))
+ print(G.GetFollowerName(b))
+ return 0
+ end
end
function party:Close(desttable)
local perc
@@ -201,8 +206,10 @@ function addon:GetParty(missionID,key,default)
--Running Mission, taking followers from mission data
local followers=self:GetMissionData(missionID,'followers')
addPartyMissionInfo(party,missionID)
- for i=1,#followers do
- party.members[i]=followers[i]
+ if followers then
+ for i=1,#followers do
+ party.members[i]=followers[i]
+ end
end
end
if key then
diff --git a/ShipYard.lua b/ShipYard.lua
index 0af1581..6f52f6a 100644
--- a/ShipYard.lua
+++ b/ShipYard.lua
@@ -34,6 +34,7 @@ function module:OnInitialize()
print("ShipYard Loaded")
self:SafeSecureHook("GarrisonShipyardMapMission_SetTooltip")
self:SafeSecureHook("GarrisonShipyardMap_UpdateMissions")
+ self:SafeSecureHook("GarrisonShipyardMap_SetupBonus")
self:SafeHookScript(GSF,"OnShow","Setup",true)
self:SafeHookScript(GSF.MissionTab.MissionList.CompleteDialog,"OnShow",function(... ) sprint("CompleteDialog",...) end,true)
self:SafeHookScript(GSF.MissionTab,"OnShow",function(... ) sprint("MissionTab",...) end,true)
@@ -42,9 +43,40 @@ function module:OnInitialize()
--GarrisonShipyardMapMission1
--@end-debug@
end
+---
+--Invoked on every mission display, only for available missions
+--
+local i=0
+function module:HookedGarrisonShipyardMap_SetupBonus(missionList,frame,mission)
+ if not GSF:IsShown() then return end
+ print(frame:GetWidth(),mission)
+ addon:AddExtraData(mission)
+ local perc=addon:MatchMaker(mission)
+ local addendum=frame.GcAddendum
+ if not addendum then
+ if mission.inProgress then return end
+ i=i+1
+ addendum=CreateFrame("Frame",nil,frame)
+ addendum:SetPoint("TOPLEFT",frame,"TOPLEFT",64,-10)
+ addendum:SetWidth(100)
+ addendum:SetHeight(70)
+ addendum.chance=addendum:CreateFontString(nil,"OVERLAY","GameFontHighlightMedium")
+ addendum.chance:SetPoint("TOPLEFT")
+ addendum.expire=addendum:CreateFontString(nil,"OVERLAY","GameFontHighlightSmall")
+ addendum.expire:SetPoint("TOPLEFT",addendum.chance,"BOTTOMLEFT")
+ --addendum.duration=addendum:CreateFontString(nil,"OVERLAY","GameFontHighlightSmall")
+ --addendum.duration:SetPoint("TOPLEFT",addendum.expire,"BOTTOMLEFT")
+ frame.GcAddendum=addendum
+ end
+ if mission.inProgress then addendum:Hide() return end
+ addendum:Show()
+ addendum.chance:SetFormattedText("%d%%",perc)
+ addendum.chance:SetTextColor(self:GetDifficultyColors(perc))
+ addendum.expire:SetText(mission.class)
+ --addendum.duration:SetText(mission.duration)
+end
function module:HookedGarrisonShipyardMap_UpdateMissions()
local self = GarrisonShipyardFrame.MissionTab.MissionList
- print("Could manage",#self.missions)
end
function module:HookedGSF_OnClickMission(this,missionInfo)
self:FillMissionPage(missionInfo)
@@ -66,6 +98,7 @@ function module:HookedGarrisonFollowerButton_UpdateCounters(gsf,frame,follower,s
--@end-debug@
end
+
function module:Setup(this,...)
print("Doing one time initialization for",this:GetName(),...)
self:SafeHookScript(GSF,"OnShow","OnShow",true)
@@ -92,7 +125,7 @@ end
function module:OpenLastTab()
print("Should restore tab")
end
---[[
+--[[ Follower
displayHeight = 0.25
followerTypeID = 2
iLevel = 600
@@ -115,4 +148,37 @@ displayID = 63894
scale = 110
levelXP = 40000
--]]
+--[[ Mission
+followerTypeID = 2
+description = Hellscream has posted a sub near the Horde's main base on Ashran. Take that sub out. Alliance, that means you, too. Factional hatreds have no place here.
+cost = 150
+adjustedPosX = 798
+duration = 8 hr
+adjustedPosY = -246
+durationSeconds = 28800
+state = -2
+inProgress=false
+typePrefix = ShipMissionIcon-Treasure
+typeAtlas = ShipMissionIcon-Treasure-Mission
+offerTimeRemaining = 19 days 1 hr
+level = 100
+offeredGarrMissionTextureID = 0
+offerEndTime = 1681052.25
+mapPosY = -246
+type = Ship-Treasure
+name = Warspear Fishing
+iLevel = 0
+numRewards = 1
+rewards = [table: 000000004D079210]
+hasBonusEffect = false
+numFollowers = 2
+costCurrencyTypesID = 1101
+followers = [table: 000000004D0791C0]
+missionID = 563
+canStart = false
+location = [ph]
+isRare = false
+mapPosX = 798
+locPrefix = GarrMissionLocation-TannanSea
+--]]
--view mission button GSF.MissionTab.MissionList.CompleteDialog.BorderFrame.ViewButton
\ No newline at end of file