From 73b20c2c5438952a78216b22776a6e9d8f0bea2f Mon Sep 17 00:00:00 2001 From: Kavalar Date: Tue, 3 Feb 2026 00:16:30 +0300 Subject: [PATCH] login fix, lobby fix --- app.py | 65 +++++++++++++++-- templates/lobby.html | 165 +++++++++++++++++++++++++++++++++++++++++-- templates/login.html | 2 +- 3 files changed, 217 insertions(+), 15 deletions(-) diff --git a/app.py b/app.py index a495a7a..1453a42 100644 --- a/app.py +++ b/app.py @@ -833,6 +833,44 @@ def reset_room(room_code): return jsonify({'success': True}) +@app.route('/api/room//players') +@login_required +def get_room_players(room_code): + """Получение списка игроков комнаты без перезагрузки страницы""" + room = GameRoom.query.filter_by(code=room_code).first_or_404() + + # Проверяем, состоит ли пользователь в комнате + current_player = GamePlayer.query.filter_by( + user_id=current_user.id, + room_id=room.id + ).first() + + if not current_player: + return jsonify({'error': 'Вы не в этой комнате'}), 403 + + # Получаем всех игроков + players = GamePlayer.query.filter_by(room_id=room.id).all() + + players_data = [] + for player in players: + user = User.query.get(player.user_id) + players_data.append({ + 'user_id': player.user_id, + 'username': user.username if user else 'Игрок', + 'is_admin': player.is_admin, + 'is_ready': player.is_ready, + 'capital': player.capital, + 'ability_name': get_ability_name(player.ability), + 'ability_description': get_ability_description(player.ability) + }) + + return jsonify({ + 'success': True, + 'players': players_data, + 'room_status': room.status + }) + + @app.route('/room//delete', methods=['POST']) @login_required def delete_room(room_code): @@ -952,16 +990,29 @@ def handle_connect(): @socketio.on('join_room') def handle_join_room(data): room_code = data.get('room') - if room_code: + if room_code and current_user.is_authenticated: join_room(room_code) logger.info(f'User {current_user.username} joined room {room_code}') - # Отправляем уведомление другим игрокам - emit('player_joined', { - 'user_id': current_user.id, - 'username': current_user.username, - 'timestamp': datetime.utcnow().isoformat() - }, room=room_code, include_self=False) + # Проверяем, было ли уже уведомление о входе + session_key = f'has_notified_join_{room_code}' + if not session.get(session_key): + # Отправляем уведомление другим игрокам + emit('player_joined', { + 'user_id': current_user.id, + 'username': current_user.username, + 'timestamp': datetime.utcnow().isoformat(), + 'is_reconnect': False + }, room=room_code, include_self=False) + + # Отмечаем в сессии, что уведомление отправлено + session[session_key] = True + else: + # Это реконнект, отправляем тихое обновление + emit('player_reconnected', { + 'user_id': current_user.id, + 'username': current_user.username + }, room=room_code, include_self=False) @socketio.on('leave_room') diff --git a/templates/lobby.html b/templates/lobby.html index 66889f6..d790b91 100644 --- a/templates/lobby.html +++ b/templates/lobby.html @@ -423,11 +423,20 @@ {% block scripts %}