Пример #1
0
def _duplicate_session(sio: ServerApp, session: GameSession, new_title: str):
    _verify_has_admin(sio, session.id, None)

    current_user = sio.get_current_user()
    _add_audit_entry(sio, session, f"Duplicated session as {new_title}")

    with database.db.atomic():
        new_session: GameSession = GameSession.create(
            name=new_title,
            password=session.password,
            creator=current_user,
            layout_description_json=session.layout_description_json,
            seed_hash=session.seed_hash,
            dev_features=session.dev_features,
        )
        for preset in session.presets:
            assert isinstance(preset, GameSessionPreset)
            GameSessionPreset.create(
                session=new_session,
                row=preset.row,
                preset=preset.preset,
            )
        GameSessionMembership.create(
            user=current_user,
            session=new_session,
            row=None,
            admin=True,
            connection_state="Offline",
        )
        GameSessionAudit.create(
            session=new_session,
            user=current_user,
            message=f"Duplicated from {session.name}",
        )
Пример #2
0
def create_game_session(sio: ServerApp, session_name: str):
    current_user = sio.get_current_user()

    with database.db.atomic():
        new_session = GameSession.create(
            name=session_name,
            password=None,
            creator=current_user,
        )
        GameSessionPreset.create(
            session=new_session,
            row=0,
            preset=json.dumps(PresetManager(None).default_preset.as_json))
        membership = GameSessionMembership.create(user=sio.get_current_user(),
                                                  session=new_session,
                                                  row=0,
                                                  admin=True)

    sio.join_game_session(membership)
    return new_session.create_session_entry()