Compare commits
2 Commits
194feb94dd
...
066ac52199
| Author | SHA1 | Date | |
|---|---|---|---|
| 066ac52199 | |||
| b4d41a449f |
@@ -83,7 +83,7 @@ public partial class RaidModule
|
|||||||
}
|
}
|
||||||
|
|
||||||
await RespondAsync(
|
await RespondAsync(
|
||||||
embed: EmbedUtils.SuccessEmbed($"Successfully filled the roster").Build(),
|
embed: EmbedUtils.SuccessEmbed("Successfully filled the roster").Build(),
|
||||||
ephemeral: true
|
ephemeral: true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public class RosterAssigner
|
|||||||
|
|
||||||
// Create rosters
|
// Create rosters
|
||||||
var neededRosters = (int)Math.Ceiling(players.Count(p => !p.Substitute) / (double)playersPerRoster);
|
var neededRosters = (int)Math.Ceiling(players.Count(p => !p.Substitute) / (double)playersPerRoster);
|
||||||
var rosters = Enumerable.Range(0, neededRosters).Select(_ => new RosterInfo()).ToList();
|
var rosters = Enumerable.Range(0, neededRosters).Select(_ => new RosterInfo(playersPerRoster)).ToList();
|
||||||
|
|
||||||
// Todo Check when there's more than max players per roster
|
// Todo Check when there's more than max players per roster
|
||||||
|
|
||||||
@@ -23,13 +23,13 @@ public class RosterAssigner
|
|||||||
{
|
{
|
||||||
if (group.Players.AnyHealer())
|
if (group.Players.AnyHealer())
|
||||||
{
|
{
|
||||||
var nextHealerRoster = rosters.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);
|
nextHealerRoster.AddGroup(group);
|
||||||
}
|
}
|
||||||
else if (group.Players.AnyTank())
|
else if (group.Players.AnyTank())
|
||||||
{
|
{
|
||||||
var nextTankRoster = rosters.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);
|
nextTankRoster.AddGroup(group);
|
||||||
}
|
}
|
||||||
@@ -43,7 +43,7 @@ public class RosterAssigner
|
|||||||
// Third pass: assign dps
|
// Third pass: assign dps
|
||||||
foreach (var group in dpsGroup)
|
foreach (var group in dpsGroup)
|
||||||
{
|
{
|
||||||
var nextDpsRoster = rosters.MinBy(r => r.TotalRealFc);
|
var nextDpsRoster = rosters.NonFull(group.Players.Count()).MinBy(r => r.TotalRealFc);
|
||||||
|
|
||||||
nextDpsRoster!.AddGroup(group);
|
nextDpsRoster!.AddGroup(group);
|
||||||
}
|
}
|
||||||
@@ -74,7 +74,7 @@ public class RosterAssigner
|
|||||||
// Third pass: assign dps
|
// Third pass: assign dps
|
||||||
foreach (var group in dpsGroup)
|
foreach (var group in dpsGroup)
|
||||||
{
|
{
|
||||||
var nextDpsRoster = rosters.MinBy(r => r.TotalFc);
|
var nextDpsRoster = rosters.NonFull(group.Substitutes.Count()).MinBy(r => r.TotalFc);
|
||||||
|
|
||||||
nextDpsRoster!.AddGroup(group);
|
nextDpsRoster!.AddGroup(group);
|
||||||
}
|
}
|
||||||
@@ -109,11 +109,14 @@ public class RosterInfo
|
|||||||
|
|
||||||
public IEnumerable<PlayerGroup> PlayerGroups => _groups.Where(g => !g.AllSubstitutes);
|
public IEnumerable<PlayerGroup> PlayerGroups => _groups.Where(g => !g.AllSubstitutes);
|
||||||
public IEnumerable<PlayerGroup> SubstituteGroups => _groups.Where(g => g.AllSubstitutes);
|
public IEnumerable<PlayerGroup> SubstituteGroups => _groups.Where(g => g.AllSubstitutes);
|
||||||
|
|
||||||
|
public uint MaxPlayerCount { get; }
|
||||||
|
|
||||||
private readonly IList<PlayerGroup> _groups;
|
private readonly IList<PlayerGroup> _groups;
|
||||||
|
|
||||||
public RosterInfo()
|
public RosterInfo(uint maxPlayerCount)
|
||||||
{
|
{
|
||||||
|
MaxPlayerCount = maxPlayerCount;
|
||||||
_groups = new List<PlayerGroup>();
|
_groups = new List<PlayerGroup>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,7 +129,7 @@ public class RosterInfo
|
|||||||
{
|
{
|
||||||
foreach (var group in _groups)
|
foreach (var group in _groups)
|
||||||
{
|
{
|
||||||
group.AssignRosterNumer(rosterNumber);
|
group.AssignRosterNumber(rosterNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -157,7 +160,7 @@ public class PlayerGroup
|
|||||||
_players.Add(player);
|
_players.Add(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AssignRosterNumer(int rosterNumber)
|
public void AssignRosterNumber(int rosterNumber)
|
||||||
{
|
{
|
||||||
foreach (var rosterPlayer in _players)
|
foreach (var rosterPlayer in _players)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -27,6 +27,26 @@ public static class RosterExtensions
|
|||||||
return players.Sum(p => p.Fc);
|
return players.Sum(p => p.Fc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static long HealerFc(this IEnumerable<RosterPlayer> players)
|
||||||
|
{
|
||||||
|
return players.Where(p => p.Role == PlayerRole.Healer).Sum(p => p.Fc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long TankFc(this IEnumerable<RosterPlayer> 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)
|
public static int RealHealerCount(this RosterInfo rosterInfo)
|
||||||
{
|
{
|
||||||
return rosterInfo.PlayerGroups.Sum(g => g.Players.HealerCount());
|
return rosterInfo.PlayerGroups.Sum(g => g.Players.HealerCount());
|
||||||
@@ -46,4 +66,10 @@ public static class RosterExtensions
|
|||||||
{
|
{
|
||||||
return rosterInfo.PlayerGroups.Concat(rosterInfo.SubstituteGroups).Sum(g => g.Players.Concat(g.Substitutes).TankCount());
|
return rosterInfo.PlayerGroups.Concat(rosterInfo.SubstituteGroups).Sum(g => g.Players.Concat(g.Substitutes).TankCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int TotalPlayerCount(this RosterInfo rosterInfo) =>
|
||||||
|
rosterInfo.PlayerGroups.Sum(group => group.Players.Count());
|
||||||
|
|
||||||
|
public static IEnumerable<RosterInfo> NonFull(this IEnumerable<RosterInfo> rosters, int addedPlayersCount) =>
|
||||||
|
rosters.Where(roster => roster.TotalPlayerCount() + addedPlayersCount <= roster.MaxPlayerCount);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user