def move_ship(request, game_id): err = _check_phase(request.game, game_constants.MOVE_PHASE) if err: return err system_id = System.id_str_to_pk(request.REQUEST['systemId']) ship_id = Ship.id_str_to_pk(request.REQUEST['shipId']) system = System.objects.get(pk=system_id) ship = Ship.objects.get(pk=ship_id) if ship.owner != request.player: return _forbidden("You don't own that ship!") if ship.on_deploy_queue: return _forbidden( "That ship is deploying; cancel deployment to move it") enemy_fighters = ship.system.ship_set.exclude(owner=request.player). \ exclude(attack_tech=0) if len(enemy_fighters): return _forbidden("You can't run from enemy ships") lane_traveled = ship.system.neighbors.filter(system=system) if not lane_traveled or not lane_traveled[0].lane.passable: return _forbidden("Those systems aren't connected") ship.system = system ship.moves -= 1 ship.save(); map_changed = False if request.player not in system.visible_to.all(): system.visible_to.add(request.player) map_changed = True neighbors = system.neighbors.all() for neighbor in neighbors: if request.player not in neighbor.lane.visible_to.all(): map_changed = True neighbor.lane.visible_to.add(request.player) neighbor.lane.save() _game_state_changed(request.game) if map_changed: _map_changed(request.game, [request.player]) return _json(_game_state(request.game, request.player))