Skip to content

Commit e86a4a3

Browse files
committed
merge squads for defense
1 parent 0dbf529 commit e86a4a3

1 file changed

Lines changed: 20 additions & 11 deletions

File tree

ZkLobbyServer/SpringieInterface/PlanetWarsMatchMaker.cs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -406,27 +406,36 @@ private double GetPlayerWhr(string name)
406406

407407
private async Task LaunchAllBattles()
408408
{
409-
foreach (var squad in FormedSquads)
409+
// merge squads on the same planet into one battle per planet
410+
foreach (var planetId in FormedSquads.Select(s => s.PlanetID).Distinct().ToList())
410411
{
411-
// filter to still-connected
412-
squad.Attackers = squad.Attackers.Where(x => server.ConnectedUsers.ContainsKey(x)).ToList();
413-
squad.Defenders = squad.Defenders.Where(x => server.ConnectedUsers.ContainsKey(x)).ToList();
412+
var squads = FormedSquads.Where(s => s.PlanetID == planetId).ToList();
413+
var first = squads.First();
414+
415+
// merge all squads into one AttackOption
416+
var merged = CreateSquadFromOption(first);
417+
foreach (var squad in squads)
418+
{
419+
merged.Attackers.AddRange(squad.Attackers.Where(x => server.ConnectedUsers.ContainsKey(x)));
420+
merged.Defenders.AddRange(squad.Defenders.Where(x => server.ConnectedUsers.ContainsKey(x)));
421+
}
414422

415-
if (squad.Defenders.Count > 0 && squad.Attackers.Count > 0)
423+
if (merged.Defenders.Count > 0 && merged.Attackers.Count > 0)
416424
{
417425
// battle (may be uneven)
418426
try
419427
{
420-
var battle = new PlanetWarsServerBattle(server, squad);
428+
merged.TeamSize = Math.Max(merged.Attackers.Count, merged.Defenders.Count);
429+
var battle = new PlanetWarsServerBattle(server, merged);
421430
await server.AddBattle(battle);
422-
RunningBattles[battle.BattleID] = squad;
431+
RunningBattles[battle.BattleID] = merged;
423432

424-
foreach (var usr in squad.Attackers.Union(squad.Defenders))
433+
foreach (var usr in merged.Attackers.Union(merged.Defenders))
425434
await server.ForceJoinBattle(usr, battle);
426435

427436
if (await battle.StartGame())
428437
{
429-
var text = $"Battle for planet {squad.Name} starts on zk://@join_player:{squad.Attackers.FirstOrDefault()} Roster: {string.Join(",", squad.Attackers)} vs {string.Join(",", squad.Defenders)}";
438+
var text = $"Battle for planet {merged.Name} starts on zk://@join_player:{merged.Attackers.FirstOrDefault()} Roster: {string.Join(",", merged.Attackers)} vs {string.Join(",", merged.Defenders)}";
430439
foreach (var fac in factions) await server.GhostChanSay(fac.Shortcut, text);
431440
}
432441
else
@@ -440,10 +449,10 @@ private async Task LaunchAllBattles()
440449
Trace.TraceError("PlanetWars LaunchBattle error: {0}", ex);
441450
}
442451
}
443-
else if (squad.Attackers.Count > 0)
452+
else if (merged.Attackers.Count > 0)
444453
{
445454
// concede - zero defenders
446-
RecordPlanetwarsLoss(squad);
455+
RecordPlanetwarsLoss(merged);
447456
}
448457
// else: no attackers left, skip entirely
449458
}

0 commit comments

Comments
 (0)