diff options
-rw-r--r-- | diplomacy/engine/game.py | 8 | ||||
-rw-r--r-- | diplomacy/server/notifier.py | 3 | ||||
-rw-r--r-- | diplomacy/tests/network/test_real_game.py | 6 |
3 files changed, 17 insertions, 0 deletions
diff --git a/diplomacy/engine/game.py b/diplomacy/engine/game.py index c2a93b5..06d2fe6 100644 --- a/diplomacy/engine/game.py +++ b/diplomacy/engine/game.py @@ -1272,6 +1272,14 @@ class Game(Jsonable): self.message_history.put(previous_phase, previous_messages) self.state_history.put(previous_phase, previous_state) + # Set empty orders for unorderable powers. + if not self.is_game_done: + orderable_locations = self.get_orderable_locations() + for power_name, power_orderable_locs in orderable_locations.items(): + if not power_orderable_locs and not self.get_power(power_name).is_eliminated(): + self.set_orders(power_name, []) + self.set_wait(power_name, False) + return GamePhaseData(name=str(previous_phase), state=previous_state, orders=previous_orders, diff --git a/diplomacy/server/notifier.py b/diplomacy/server/notifier.py index 2f8761c..81ca4b0 100644 --- a/diplomacy/server/notifier.py +++ b/diplomacy/server/notifier.py @@ -144,6 +144,9 @@ class Notifier(): previous_phase_data, power.name, False), current_phase_data=server_game.filter_phase_data( current_phase_data, power.name, True)) + # Also send wait flag for each power. + for power in server_game.powers.values(): + yield self.notify_power_wait_flag(server_game, power, power.wait) @gen.coroutine def notify_account_deleted(self, username): diff --git a/diplomacy/tests/network/test_real_game.py b/diplomacy/tests/network/test_real_game.py index 94ecc19..a960b91 100644 --- a/diplomacy/tests/network/test_real_game.py +++ b/diplomacy/tests/network/test_real_game.py @@ -229,6 +229,12 @@ def send_current_orders(game): orders_to_send = expected_data.expected_phase.get_power_orders(expected_data.power_name) if orders_to_send is None: orders_to_send = [] + + if not orders_to_send and not game.get_orderable_locations(expected_data.power_name): + print('%s/no need to send empty orders for unorderable power at phase %s' % ( + expected_data.power_name, expected_data.expected_phase.name)) + return + print('%s/sending %d orders for phase %s: %s' % (expected_data.power_name, len(orders_to_send), expected_data.expected_phase.name, orders_to_send)) yield game.set_orders(orders=orders_to_send) |