|
|
|
"""
|
|
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:
|
|
|
|
facade = GameFacade()
|
|
|
|
|
|
player_id = facade.join_game("KeyboardTester")
|
|
print(f"✅ Test player created: {player_id}")
|
|
|
|
|
|
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}")
|
|
|
|
|
|
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)
|
|
|
|
except Exception as e:
|
|
print(f" ❌ Error: {str(e)}")
|
|
|
|
|
|
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)}")
|
|
|
|
|
|
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:
|
|
|
|
facade = GameFacade()
|
|
engine = get_game_engine()
|
|
world = engine.get_world()
|
|
|
|
|
|
player1_id = facade.join_game("ChatTester1")
|
|
player2_id = facade.join_game("ChatTester2")
|
|
print(f"✅ Test players created: {player1_id}, {player2_id}")
|
|
|
|
|
|
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")
|
|
|
|
|
|
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)}")
|
|
|
|
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)}")
|
|
|
|
|
|
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):
|
|
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)}")
|
|
|
|
|
|
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)}")
|
|
|
|
|
|
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:
|
|
|
|
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")
|
|
|
|
|
|
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}")
|
|
|
|
|
|
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}")
|
|
|
|
|
|
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...")
|
|
|
|
|
|
keyboard_ok = test_keyboard_backend()
|
|
chat_ok = test_private_chat_backend()
|
|
frontend_ok = test_frontend_integration()
|
|
|
|
|
|
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()
|
|
|