aboutsummaryrefslogtreecommitdiff
path: root/diplomacy
diff options
context:
space:
mode:
authornotoraptor <notoraptor@users.noreply.github.com>2019-07-16 17:27:56 -0400
committerPhilip Paquette <pcpaquette@gmail.com>2019-07-16 17:27:56 -0400
commit9df83e126e73779491915d2681ab76eada958ce1 (patch)
treeb389f540140ed8b0195d97a49830ecd7565c0c52 /diplomacy
parentfbc808296da2682fe7495f8e0b3174da517ed5ef (diff)
Web - User should auto-pass when no orders are possible. (#43)
- Set default empty orders set for unorderable powers after a processing. - Set wait to False for unorderable powers. - Notify powers wait flags when sending game processed notifications. - Do not send empty orders set for unorderable powers in network test.
Diffstat (limited to 'diplomacy')
-rw-r--r--diplomacy/engine/game.py8
-rw-r--r--diplomacy/server/notifier.py3
-rw-r--r--diplomacy/tests/network/test_real_game.py6
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)