This site works best with JavaScript enabled. Please enable JavaScript to get the best experience from this site.
My decision-making processes for which alt to switch to in order to handle mission completions looks like this:- among the alts who have completed missions, switch to the one with the *largest* time remaining until her next mission completes. (All missions complete -> infinite time until next completion; such an alt would get handled first)
This saves me from bouncing to an alt only to have to come back a couple minutes later when another mission completes. With 11 alts, it's often the case that by the time I finish handling ones with large time-to-next-completion, the ones with low time-to-next-completion have finished additional missions. In the end, I can handle more completions in less time with fewer alt swaps.
Currently, I'm eyeballing this using the mission status tooltip, but I would greatly appreciate a pair of custom fields in the tooltip header (in the style of %mnt and %mnc) to support my workflow:- character with at least one completed mission and the largest time remaining until the next completed mission; some sensible non-value if no characters have completed missions- (optional) the amount of time remaining until the next completed mission on that character.
For example: http://i.imgur.com/B7vbc5J.png
If I switch to Anastasya to complete "Heart of the Iron Horde", then move on to another alt, "Night Watch" will probably complete after I've switched away, requiring me to switch back later.
Instead, my heuristic says I should handle alts in this order:
Cryoseismic/Pavli, with no missions complete, don't get touched until they complete a mission, at least 43m from now.
I've implemented this, probably not as cleanly as possible. Would a diff be useful?
thinking about a "todo" display (not sure on the way its implemented/displayed yet) - but yes, diff would be helpful (maybe with screenshot?)
The only UI difference is in the tooltip's header, so the screenshots are pretty light:
http://i.imgur.com/fUx7SFx.png - note "Juggle: Pavli" in the extreme upper right. In this case, Pavli has at least one complete mission, and time-until-next-complete is infinite (no pending missions), so she should be handled first.
http://i.imgur.com/yO7pmRp.png - note "Juggle: Cryoseismic". Now that Pavli's missions are completed, Cryo has at least one complete mission, and time-until-next-complete is 5h40m, longer than any other character with completed missions
Further logic, not shown in above screenshots:
The code diff is across two files:
data.lua: (this part was straightforward, aside from not having localized the name)
497,508d496 < ["jnc"] = { < name = "Character next juggle", < data = function(data) < local juggle = Garrison.getTableValue(data, "missionCount", "nextJuggle", "playerName") < if juggle then < return juggle < else < return Garrison.getTableValue(data, "missionCount", "nextChar", "playerName") < end < end, < type = Garrison.TYPE_MISSION, < },
core.lua: (this part could probably be significantly cleaned up, this is just the first thing that worked)
545,548d544 < if not missionCount.completedByChar[paramCharInfo] then < missionCount.completedByChar[paramCharInfo] = 0 < end < missionCount.completedByChar[paramCharInfo] = missionCount.completedByChar[paramCharInfo] + 1 554,557c550 < end < if not missionCount.nextTimeByChar[paramCharInfo] or timeLeft < missionCount.nextTimeByChar[paramCharInfo] then < missionCount.nextTimeByChar[paramCharInfo] = timeLeft < end --- > end 565,568d557 < if not missionCount.completedByChar[paramCharInfo] then < missionCount.completedByChar[paramCharInfo] = 0 < end < missionCount.completedByChar[paramCharInfo] = missionCount.completedByChar[paramCharInfo] + 1 698a688 > nextName = nil, 700,702d689 < completedByChar = {}, < nextTimeByChar = {}, < nextJuggle = nil, 723,739d709 < missionCount.nextJuggle = nil < mostCompleted = 0 < for char, completed in pairs(missionCount.completedByChar) do < if not missionCount.nextJuggle then -- no current favorite < missionCount.nextJuggle = char < mostCompleted = completed < elseif not missionCount.nextTimeByChar[char] then -- this char has no pending missions; top priority < if missionCount.nextTimeByChar[missionCount.nextJuggle] or mostCompleted < completed then < missionCount.nextJuggle = char < mostCompleted = completed < end < elseif missionCount.nextTimeByChar[missionCount.nextJuggle] and missionCount.nextTimeByChar[char] > missionCount.nextTimeByChar[missionCount.nextJuggle] then -- this char's next mission is longer than the current favorite's < missionCount.nextJuggle = char < mostCompleted = completed < end < end < 756a727 > nextName = nil,
"an argument could be made that this should just be nil, instead."
I convinced myself. This now just returns nil if no missions are complete.
I also added a corresponding %jnt% var, so I can eyeball how soon I'll be juggling missions again. Under 10 minutes or so and I won't bother.
I still want this feature, and it's one of the core reasons I use Broker_Garrison. I'd been holding my version at 1.6.something to avoid having to re-merge my patch into each new release, but the shipyard update forced me to update.
The diff to core.lua is unchanged from the previous diff I posted.
The diff to data.lua follows, and includes my comments about "should just be nil" and "%jnt%":
558a559,578 > ["jnc"] = { > name = "Character next juggle", > data = function(data) > return Garrison.getTableValue(data, "missionCount", "nextJuggle", "playerName") > end, > type = Garrison.TYPE_MISSION, > }, > ["jnt"] = { > name = "Time next juggle", > data = function(data) > local juggle = Garrison.getTableValue(data, "missionCount", "nextJuggle", "playerName") > local time = Garrison.getTableValue(data, "missionCount", "nextTimeByChar", juggle) or 0 > if time > 0 then > return Garrison.formattedSeconds(time) > else > return nil > end > end, > type = Garrison.TYPE_MISSION, > },
Whoops, the following line:
> local juggle = Garrison.getTableValue(data, "missionCount", "nextJuggle", "playerName")
Should instead be:
> local juggle = Garrison.getTableValue(data, "missionCount", "nextJuggle")
To post a comment, please login or register a new account.