class SessionManager { constructor() { this.sessions = new Map(); // socket.id => session data } addPlayer(socketId, playerRaw) { this.sessions.set(socketId, { id: playerRaw.id, username: playerRaw.username, level: playerRaw.level, energy: playerRaw.energy, maxEnergy: playerRaw.maxEnergy, status: "docked", currentLocation: "Home_Base", scene: "world", sceneData: null, joinedAt: Date.now(), equipment: { weapon: playerRaw.equippedWeapon, armor: playerRaw.equippedArmor, engine: playerRaw.equippedEngine, shield: playerRaw.equippedShield, helmet: playerRaw.equippedHelmet, boots: playerRaw.equippedBoots, hands: playerRaw.equippedHands, pants: playerRaw.equippedPants, accessory: playerRaw.equippedAccessory, }, }); } setPlayerScene(socketId, sceneName, data = null) { const session = this.sessions.get(socketId); if (session) { session.scene = sceneName; session.sceneData = data; session.status = sceneName === "dungeon" ? "in_mission" : "active"; console.log(`[Session] Player ${session.id} switched to ${sceneName}`); } } getPlayerSession(socketId) { return this.sessions.get(socketId); } updateEquipment(socketId, slot, itemId) { const session = this.sessions.get(socketId); if (session) { session.equipment[slot] = itemId; } } updateStatus(socketId, newStatus, location = null) { const session = this.sessions.get(socketId); if (session) { session.status = newStatus; if (location) session.currentLocation = location; } } removePlayer(socketId) { this.sessions.delete(socketId); } getPlayer(socketId) { return this.sessions.get(socketId); } getPlayerByUserId(userId) { return Array.from(this.sessions.values()).find((s) => s.id === userId); } getAllOnline() { return Array.from(this.sessions.values()); } } module.exports = new SessionManager();