Spaces:
Runtime error
Runtime error
| #!/usr/bin/env python3 | |
| """ | |
| Improved debug script to test keyboard controls and private chat functionality. | |
| """ | |
| import time | |
| import requests | |
| from src.facades.game_facade import GameFacade | |
| from src.services.chat_service import ChatService | |
| from src.core.game_engine import get_game_engine | |
| def test_keyboard_backend(): | |
| """Test keyboard controls backend functionality.""" | |
| print("🎮 Testing Keyboard Controls Backend") | |
| print("=" * 60) | |
| try: | |
| # Initialize game facade | |
| facade = GameFacade() | |
| # Create test player | |
| player_id = facade.join_game("KeyboardTester") | |
| print(f"✅ Test player created: {player_id}") | |
| # Get initial player data | |
| try: | |
| player_stats = facade.get_player_stats(player_id) | |
| print(f"📍 Initial position: ({player_stats.get('x', '?')}, {player_stats.get('y', '?')})") | |
| except Exception as e: | |
| print(f"⚠️ Could not get initial position: {e}") | |
| # Test all movement directions (what keyboard would trigger) | |
| movements = [ | |
| ("up", "🔼", "W/↑"), | |
| ("down", "🔽", "S/↓"), | |
| ("left", "◀️", "A/←"), | |
| ("right", "▶️", "D/→") | |
| ] | |
| print("\n🎯 Testing movement commands (keyboard backend):") | |
| for direction, icon, keys in movements: | |
| try: | |
| print(f" {icon} Testing {direction} movement (keys: {keys})...") | |
| success, new_position, events = facade.move_player(player_id, direction) | |
| if success: | |
| print(f" ✅ Success - New position: ({new_position.get('x', '?')}, {new_position.get('y', '?')})") | |
| if events: | |
| print(f" 📝 Events: {', '.join(events)}") | |
| else: | |
| print(f" ❌ Failed - Movement blocked") | |
| time.sleep(0.3) # Small delay between movements | |
| except Exception as e: | |
| print(f" ❌ Error: {str(e)}") | |
| # Test action command (spacebar equivalent) | |
| print(f"\n⚡ Testing special action (spacebar)...") | |
| try: | |
| result = facade.handle_action(player_id) | |
| print(f" ✅ Result: {result}") | |
| except Exception as e: | |
| print(f" ❌ Error: {str(e)}") | |
| # Cleanup | |
| facade.leave_game(player_id) | |
| print(f"\n🧹 Cleanup: Player {player_id} removed") | |
| return True | |
| except Exception as e: | |
| print(f"❌ Keyboard backend test failed: {str(e)}") | |
| return False | |
| def test_private_chat_backend(): | |
| """Test private chat backend functionality.""" | |
| print("\n💬 Testing Private Chat Backend") | |
| print("=" * 60) | |
| try: | |
| # Initialize services | |
| facade = GameFacade() | |
| engine = get_game_engine() | |
| world = engine.get_world() | |
| # Create test players | |
| player1_id = facade.join_game("ChatTester1") | |
| player2_id = facade.join_game("ChatTester2") | |
| print(f"✅ Test players created: {player1_id}, {player2_id}") | |
| # Move players close to each other for proximity | |
| print("\n🚶 Moving players close to each other...") | |
| facade.move_player(player1_id, "right") | |
| facade.move_player(player1_id, "right") | |
| facade.move_player(player2_id, "right") | |
| # Test proximity detection | |
| print(f"\n👥 Testing proximity detection...") | |
| try: | |
| proximity_data = facade.get_proximity_info(player1_id) | |
| nearby_entities = proximity_data.get("nearby_entities", []) | |
| print(f" ✅ Found {len(nearby_entities)} nearby entities") | |
| for entity in nearby_entities: | |
| print(f" - {entity.get('name', entity.get('id', 'Unknown'))}") | |
| except Exception as e: | |
| print(f" ❌ Proximity error: {str(e)}") | |
| # Test private message sending | |
| print(f"\n📤 Testing private message sending...") | |
| try: | |
| result = facade.send_private_message( | |
| player1_id, | |
| "ChatTester1", | |
| player2_id, | |
| "Hello from private chat test!" | |
| ) | |
| print(f" {'✅ Message sent successfully' if result else '❌ Message failed to send'}") | |
| except Exception as e: | |
| print(f" ❌ Send error: {str(e)}") | |
| # Test message retrieval | |
| print(f"\n📥 Testing private message retrieval...") | |
| try: | |
| messages = facade.get_private_messages(player1_id, player2_id) | |
| print(f" ✅ Retrieved {len(messages)} private messages") | |
| for i, msg in enumerate(messages[-2:], 1): # Show last 2 messages | |
| sender = msg.get('sender_id', 'Unknown') | |
| content = msg.get('message', 'No content') | |
| timestamp = msg.get('timestamp', 'No time') | |
| print(f" {i}. [{timestamp}] {sender}: {content}") | |
| except Exception as e: | |
| print(f" ❌ Retrieval error: {str(e)}") | |
| # Test public chat (for comparison) | |
| print(f"\n📢 Testing public chat...") | |
| try: | |
| result = facade.send_chat_message(player1_id, "Hello public chat!") | |
| print(f" {'✅ Public message sent' if result else '❌ Public message failed'}") | |
| history = facade.get_chat_history(5) | |
| print(f" ✅ Retrieved {len(history)} chat history entries") | |
| except Exception as e: | |
| print(f" ❌ Public chat error: {str(e)}") | |
| # Cleanup | |
| facade.leave_game(player1_id) | |
| facade.leave_game(player2_id) | |
| print(f"\n🧹 Cleanup: Test players removed") | |
| return True | |
| except Exception as e: | |
| print(f"❌ Private chat backend test failed: {str(e)}") | |
| return False | |
| def test_frontend_integration(): | |
| """Test frontend integration and JavaScript presence.""" | |
| print("\n🌐 Testing Frontend Integration") | |
| print("=" * 60) | |
| try: | |
| # Test main application URL | |
| print("📡 Testing main application...") | |
| response = requests.get("http://localhost:7865", timeout=10) | |
| print(f" Status: {'✅ Online' if response.status_code == 200 else '❌ Error'}") | |
| print(f" Response time: {response.elapsed.total_seconds():.2f}s") | |
| print(f" Content length: {len(response.content)} bytes") | |
| # Check for keyboard script presence | |
| print("\n⌨️ Checking keyboard script integration...") | |
| content_lower = response.text.lower() | |
| checks = [ | |
| ("gameKeyboard object", "gamekeyboard" in content_lower), | |
| ("WASD controls", "wasd" in content_lower), | |
| ("Arrow keys", "arrow" in content_lower), | |
| ("Key event handlers", "keydown" in content_lower or "keypress" in content_lower), | |
| ("Movement buttons", "move" in content_lower and "button" in content_lower), | |
| ] | |
| for check_name, check_result in checks: | |
| status = "✅ Found" if check_result else "❌ Missing" | |
| print(f" {status}: {check_name}") | |
| # Check for private chat elements | |
| print("\n💬 Checking private chat integration...") | |
| chat_checks = [ | |
| ("Private chat UI", "private" in content_lower and "chat" in content_lower), | |
| ("Nearby entities", "nearby" in content_lower), | |
| ("Chat tabs", "tab" in content_lower), | |
| ("Message input", "message" in content_lower), | |
| ] | |
| for check_name, check_result in chat_checks: | |
| status = "✅ Found" if check_result else "❌ Missing" | |
| print(f" {status}: {check_name}") | |
| # Check for enhanced features | |
| print("\n🎨 Checking enhanced features...") | |
| enhanced_checks = [ | |
| ("Player glow effect", "border" in content_lower and "yellow" in content_lower), | |
| ("Player names", "name" in content_lower and "level" in content_lower), | |
| ("Status line", "fantasy realm" in content_lower), | |
| ("Movement controls", "movement" in content_lower and "controls" in content_lower), | |
| ] | |
| for check_name, check_result in enhanced_checks: | |
| status = "✅ Found" if check_result else "❌ Missing" | |
| print(f" {status}: {check_name}") | |
| return True | |
| except Exception as e: | |
| print(f"❌ Frontend integration test failed: {str(e)}") | |
| return False | |
| def main(): | |
| """Run comprehensive debug tests with improved logging.""" | |
| print("🔍 MMORPG Debug Test - Keyboard & Private Chat") | |
| print("=" * 70) | |
| print("Testing backend functionality and frontend integration...") | |
| # Run all tests | |
| keyboard_ok = test_keyboard_backend() | |
| chat_ok = test_private_chat_backend() | |
| frontend_ok = test_frontend_integration() | |
| # Summary | |
| print("\n" + "=" * 70) | |
| print("📊 COMPREHENSIVE TEST SUMMARY") | |
| print("=" * 70) | |
| print(f"🎮 Keyboard Backend: {'✅ PASS' if keyboard_ok else '❌ FAIL'}") | |
| print(f"💬 Private Chat Backend: {'✅ PASS' if chat_ok else '❌ FAIL'}") | |
| print(f"🌐 Frontend Integration: {'✅ PASS' if frontend_ok else '❌ FAIL'}") | |
| if all([keyboard_ok, chat_ok, frontend_ok]): | |
| print("\n🎉 ALL TESTS PASSED!") | |
| print("\n✨ Next steps for manual testing:") | |
| print(" 1. Open http://localhost:7865 in your browser") | |
| print(" 2. Join the game with a player name") | |
| print(" 3. Test keyboard controls: WASD or Arrow keys") | |
| print(" 4. Test spacebar for special actions") | |
| print(" 5. Move near other players/NPCs for private chat") | |
| print(" 6. Use the private chat interface") | |
| elif keyboard_ok and chat_ok: | |
| print("\n⚠️ Backend working, but frontend integration issues detected.") | |
| print("\n🔧 Recommended fixes:") | |
| print(" - Check browser console for JavaScript errors") | |
| print(" - Verify keyboard script is properly loaded") | |
| print(" - Ensure buttons have correct IDs for script binding") | |
| else: | |
| print("\n❌ Backend issues detected - need to fix core functionality first.") | |
| print("\n🌐 Application URL: http://localhost:7865") | |
| print("=" * 70) | |
| if __name__ == "__main__": | |
| main() | |