79 lines
2.0 KiB
JavaScript
79 lines
2.0 KiB
JavaScript
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();
|