def admin_session(user, session_id): session: GameSession = GameSession.get_by_id(session_id) rows = [] presets = session.all_presets for player in session.players: player = typing.cast(GameSessionMembership, player) if player.is_observer: rows.append([ player.effective_name, "Observer", "", ]) else: preset = presets[player.row] db = default_database.resource_database_for(preset.game) inventory = [] if player.inventory is not None: try: parsed_inventory: list[dict] = BinaryInventory.parse( player.inventory) except construct.ConstructError: # Handle old format in an adhoc way # TODO 4.3: remove this code and purge all old inventory from the server db items_by_id: dict[int, ItemResourceInfo] = { item.extra["item_id"]: item for item in db.item } parsed_inventory = [{ "name": items_by_id[item["index"]].short_name, **item, } for item in OldBinaryInventory.parse( player.inventory)] for item in parsed_inventory: if item["amount"] + item["capacity"] > 0: inventory.append("{} x{}/{}".format( db.get_item(item["name"]).long_name, item["amount"], item["capacity"])) rows.append([ player.effective_name, preset.name, ", ".join(inventory), ]) header = ["Name", "Preset", "Inventory"] return "<table border='1'><tr>{}</tr>{}</table>".format( "".join(f"<th>{h}</th>" for h in header), "".join("<tr>{}</tr>".format("".join(f"<td>{h}</td>" for h in r)) for r in rows), )
def game_session_request_update(sio: ServerApp, session_id: int): current_user = sio.get_current_user() session: GameSession = GameSession.get_by_id(session_id) membership = GameSessionMembership.get_by_ids(current_user.id, session_id) _emit_session_meta_update(session) if session.layout_description is not None: _emit_session_actions_update(session) if not membership.is_observer and session.state != GameSessionState.SETUP: _emit_game_session_pickups_update(sio, membership) _emit_session_audit_update(session)
def join_game_session(sio: ServerApp, session_id: int, password: Optional[str]): session = GameSession.get_by_id(session_id) if session.password is not None: if password is None or _hash_password(password) != session.password: raise WrongPassword() elif password is not None: raise WrongPassword() membership = GameSessionMembership.get_or_create( user=sio.get_current_user(), session=session, defaults={ "row": None, "admin": False })[0] _emit_session_update(session) sio.join_game_session(membership) return session.create_session_entry()
def admin_session(user, session_id): session: GameSession = GameSession.get_by_id(session_id) rows = [] presets = session.all_presets for player in session.players: player = typing.cast(GameSessionMembership, player) if player.is_observer: rows.append([ player.effective_name, "Observer", "", ]) else: preset = presets[player.row] db = default_database.resource_database_for(preset.game) inventory = [] for item in json.loads(player.inventory): if item["amount"] + item["capacity"] > 0: inventory.append("{} x{}/{}".format( db.get_item(item["index"]).long_name, item["amount"], item["capacity"])) rows.append([ player.effective_name, preset.name, ", ".join(inventory), ]) header = ["Name", "Preset", "Inventory"] return "<table border='1'><tr>{}</tr>{}</table>".format( "".join(f"<th>{h}</th>" for h in header), "".join("<tr>{}</tr>".format("".join(f"<td>{h}</td>" for h in r)) for r in rows), )