@@ -928,6 +928,10 @@ private PwMatchCommand StampLobbyCommand(LobbySnapshot snapshot, PwPhase phase,
928928 }
929929 else // DefendCollect
930930 {
931+ // attack/defend are mutually exclusive across the whole cycle (see JoinPlanetDefense),
932+ // so any squad's attacker list disqualifies this player from defending ANY squad.
933+ var playerIsAttackerAnywhere = playerName != null && snapshot . Options . Any ( o => o . AttackerNames . Contains ( playerName ) ) ;
934+
931935 var options = snapshot . Options . Select ( s =>
932936 {
933937 var playerIsAttacker = playerName != null && s . AttackerNames . Contains ( playerName ) ;
@@ -942,7 +946,7 @@ private PwMatchCommand StampLobbyCommand(LobbySnapshot snapshot, PwPhase phase,
942946 PlanetImage = s . PlanetImage ,
943947 Count = s . Count ,
944948 Needed = s . Needed ,
945- CanSelectForBattle = canDefend && ! playerIsAttacker ,
949+ CanSelectForBattle = canDefend && ! playerIsAttackerAnywhere ,
946950 PlayerIsAttacker = playerIsAttacker ,
947951 PlayerIsDefender = playerName != null && s . DefenderNames . Contains ( playerName ) ,
948952 AttackerFaction = s . AttackerFactionShortcut ,
@@ -1139,12 +1143,12 @@ private DateTime GetAttackDeadline()
11391143 if ( AttackOptions . Count == 0 )
11401144 return PhaseStartTime . AddMinutes ( GlobalConst . PlanetWarsMinutesToAttackIfNoOption ) ;
11411145
1142- return PhaseStartTime . AddMinutes ( GlobalConst . PlanetWarsMinutesToAttack ) ;
1146+ return PhaseStartTime . AddMinutes ( DynamicConfig . Instance . PwAttackPhaseMinutes ) ;
11431147 }
11441148
11451149 private DateTime GetDefendDeadline ( )
11461150 {
1147- return PhaseStartTime . AddMinutes ( GlobalConst . PlanetWarsMinutesToAccept ) ;
1151+ return PhaseStartTime . AddMinutes ( DynamicConfig . Instance . PwDefendPhaseMinutes ) ;
11481152 }
11491153
11501154 /// <summary>
@@ -1302,8 +1306,8 @@ private static PwStatus GeneratePwStatus()
13021306 MinLevel = GlobalConst . MinPlanetWarsLevel ,
13031307 PlanetWarsNextMode = MiscVar . PlanetWarsNextMode ,
13041308 PlanetWarsNextModeTime = MiscVar . PlanetWarsNextModeTime ,
1305- AttackerPhaseMinutes = GlobalConst . PlanetWarsMinutesToAttack ,
1306- DefenderPhaseMinutes = GlobalConst . PlanetWarsMinutesToAccept ,
1309+ AttackerPhaseMinutes = DynamicConfig . Instance . PwAttackPhaseMinutes ,
1310+ DefenderPhaseMinutes = DynamicConfig . Instance . PwDefendPhaseMinutes ,
13071311 MaxAttackCharges = DynamicConfig . Instance . PwAttackChargesMax ,
13081312 } ;
13091313 }
0 commit comments