Uppdate
This commit is contained in:
@@ -105,7 +105,13 @@ class GameState:
|
||||
if building.owner_id != player_id:
|
||||
return {"success": False, "error": "You don't own this building"}
|
||||
|
||||
building.name = name
|
||||
# Validate name length (max 20 characters)
|
||||
name = name.strip()
|
||||
if len(name) > 20:
|
||||
return {"success": False, "error": "Name too long (max 20 characters)"}
|
||||
|
||||
# Empty name is allowed (removes the label)
|
||||
building.name = name if name else None
|
||||
logger.info(f"Player {player_id} renamed building at ({x},{y}) to '{name}'.")
|
||||
return {"success": True}
|
||||
|
||||
|
||||
+11
-3
@@ -22,10 +22,17 @@ def initialize_components(test_db_path=None):
|
||||
"""Initialize server components with optional test database"""
|
||||
global game_state, ws_manager, economy_engine, database
|
||||
|
||||
# Initialize database first
|
||||
database = Database(test_db_path) if test_db_path else Database()
|
||||
database.init_db()
|
||||
|
||||
# Create game state and load data from database
|
||||
game_state = GameState()
|
||||
game_state.load_state(database.load_game_state())
|
||||
|
||||
# Now create WebSocketManager (it will rebuild nickname mapping from loaded players)
|
||||
ws_manager = WebSocketManager(game_state)
|
||||
economy_engine = EconomyEngine(game_state)
|
||||
database = Database(test_db_path) if test_db_path else Database()
|
||||
|
||||
return game_state, ws_manager, economy_engine, database
|
||||
|
||||
@@ -84,8 +91,7 @@ async def lifespan(app: FastAPI):
|
||||
initialize_components()
|
||||
|
||||
logger.info("Server starting up...")
|
||||
database.init_db()
|
||||
game_state.load_state(database.load_game_state())
|
||||
# Database and game state are already initialized in initialize_components()
|
||||
|
||||
# Start the hybrid economy loop
|
||||
task = asyncio.create_task(economy_loop())
|
||||
@@ -175,6 +181,8 @@ async def handle_message(websocket: WebSocket, data: dict):
|
||||
if result["success"]:
|
||||
await ws_manager.broadcast({"type": "building_updated", "x": data["x"], "y": data["y"], "name": data["name"]})
|
||||
database.save_game_state(game_state)
|
||||
else:
|
||||
await websocket.send_json({"type": "error", "message": result["error"]})
|
||||
|
||||
elif msg_type == "chat":
|
||||
nickname = await ws_manager.get_nickname(websocket)
|
||||
|
||||
@@ -13,6 +13,17 @@ class WebSocketManager:
|
||||
self.player_nicknames: Dict[str, str] = {}
|
||||
self.nickname_to_id: Dict[str, str] = {}
|
||||
self.game_state = game_state
|
||||
|
||||
# Rebuild nickname-to-ID mapping from game state
|
||||
self._rebuild_nickname_mapping()
|
||||
|
||||
def _rebuild_nickname_mapping(self):
|
||||
"""Rebuild the nickname-to-ID mapping from existing players in game state."""
|
||||
for player_id, player in self.game_state.players.items():
|
||||
self.nickname_to_id[player.nickname] = player_id
|
||||
|
||||
if self.nickname_to_id:
|
||||
logger.info(f"Rebuilt nickname-to-ID mapping for {len(self.nickname_to_id)} players: {list(self.nickname_to_id.keys())}")
|
||||
|
||||
async def connect(self, websocket: WebSocket, nickname: str):
|
||||
"""Connect a new player, allowing multiple connections per nickname."""
|
||||
|
||||
Reference in New Issue
Block a user