From 066ac521996da7d352825be3aa03993929aa45df Mon Sep 17 00:00:00 2001 From: Eveldee Date: Tue, 10 Jan 2023 09:59:49 +0100 Subject: [PATCH] [Raid] Resolve conflicts based on role FC instead of total HP --- Cocotte/Modules/Raids/RosterAssigner.cs | 4 ++-- Cocotte/Modules/Raids/RosterExtensions.cs | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Cocotte/Modules/Raids/RosterAssigner.cs b/Cocotte/Modules/Raids/RosterAssigner.cs index 7faaedc..35d3beb 100644 --- a/Cocotte/Modules/Raids/RosterAssigner.cs +++ b/Cocotte/Modules/Raids/RosterAssigner.cs @@ -23,13 +23,13 @@ public class RosterAssigner { if (group.Players.AnyHealer()) { - var nextHealerRoster = rosters.NonFull(group.Players.Count()).MinBy(r => r.RealHealerCount(), (x, y) => x.TotalRealFc > y.TotalRealFc ? y : x); + var nextHealerRoster = rosters.NonFull(group.Players.Count()).MinBy(r => r.RealHealerCount(), (x, y) => x.RealHealerFc() > y.RealHealerFc() ? y : x); nextHealerRoster.AddGroup(group); } else if (group.Players.AnyTank()) { - var nextTankRoster = rosters.NonFull(group.Players.Count()).MinBy(r => r.RealTankCount(), (x, y) => x.TotalRealFc < y.TotalRealFc ? x : y); + var nextTankRoster = rosters.NonFull(group.Players.Count()).MinBy(r => r.RealTankCount(), (x, y) => x.RealTankFc() < y.RealTankFc() ? x : y); nextTankRoster.AddGroup(group); } diff --git a/Cocotte/Modules/Raids/RosterExtensions.cs b/Cocotte/Modules/Raids/RosterExtensions.cs index 9c6939c..e9ed4c6 100644 --- a/Cocotte/Modules/Raids/RosterExtensions.cs +++ b/Cocotte/Modules/Raids/RosterExtensions.cs @@ -27,6 +27,26 @@ public static class RosterExtensions return players.Sum(p => p.Fc); } + public static long HealerFc(this IEnumerable players) + { + return players.Where(p => p.Role == PlayerRole.Healer).Sum(p => p.Fc); + } + + public static long TankFc(this IEnumerable players) + { + return players.Where(p => p.Role == PlayerRole.Tank).Sum(p => p.Fc); + } + + public static long RealHealerFc(this RosterInfo roster) + { + return roster.PlayerGroups.Sum(group => group.Players.HealerFc()); + } + + public static long RealTankFc(this RosterInfo roster) + { + return roster.PlayerGroups.Sum(group => group.Players.TankFc()); + } + public static int RealHealerCount(this RosterInfo rosterInfo) { return rosterInfo.PlayerGroups.Sum(g => g.Players.HealerCount());