Skip to content

Commit db95584

Browse files
authored
Merge pull request #3032 from ZeroK-RTS/master
PW battles on same planet are merged up to attacker size
2 parents 408390f + d9c4b9c commit db95584

3 files changed

Lines changed: 26 additions & 15 deletions

File tree

Shared/PlasmaShared/GlobalConst.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,8 @@ static void SetMode(ModeType newMode)
163163
public const double PlanetWarsMaximumIP = 100.0; //maximum IP on each planet
164164
public const int PlanetWarsVictoryPointsToWin = 100;
165165
public const int VictoryPointDecay = 1;
166-
public const int BaseInfluencePerBattle = 35;
166+
public const int BaseInfluencePerBattle = 32;
167+
public const int InfluencePerAttacker = 1;
167168
public const double PlanetWarsAttackerMetal = 100;
168169
public const double PlanetWarsDefenderMetal = 100;
169170
public const int InfluencePerShip = 1;

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
}

ZkLobbyServer/SpringieInterface/PlanetWarsTurnHandler.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public static void ProcessBattleResult(string mapName, List<string> extraData, Z
6262
double planetIpDefs = planet.GetEffectiveIpDefense();
6363

6464
double baseInfluence = GlobalConst.BaseInfluencePerBattle;
65-
double influence = baseInfluence;
65+
double attackerBonus = attackers.Count * GlobalConst.InfluencePerAttacker;
6666

6767
double shipBonus = planet.GetEffectiveShipIpBonus(attacker);
6868

@@ -96,7 +96,7 @@ public static void ProcessBattleResult(string mapName, List<string> extraData, Z
9696
}
9797
}
9898

99-
influence = (influence + shipBonus + techBonus + defenseBonus) * ipMultiplier;
99+
double influence = (baseInfluence + attackerBonus + shipBonus + techBonus + defenseBonus) * ipMultiplier;
100100
if (influence < 0) influence = 0;
101101
influence = Math.Floor(influence * 100) / 100;
102102

@@ -128,12 +128,13 @@ public static void ProcessBattleResult(string mapName, List<string> extraData, Z
128128
}
129129
try
130130
{
131-
influenceReport = String.Format("{0} gained {1} influence ({2}% {3} of {4}{5}{6}{7})",
131+
influenceReport = String.Format("{0} gained {1} influence ({2}% {3} of {4}{5}{6}{7}{8})",
132132
attacker.Shortcut,
133133
influence,
134134
(int)(ipMultiplier * 100.0),
135135
ipReason,
136136
baseInfluence + " base",
137+
attackerBonus > 0 ? " +" + attackerBonus + " from " + attackers.Count + " attackers" : "",
137138
techBonus > 0 ? " +" + techBonus + " from techs" : "",
138139
shipBonus > 0 ? " +" + shipBonus + " from dropships" : "",
139140
defenseBonus != 0 ? " -" + -defenseBonus + " from defenses" : "");

0 commit comments

Comments
 (0)