quicksave

This commit is contained in:
jwinterm
2025-05-26 20:23:41 -04:00
parent 50ccf28a04
commit 49166b00c6
2 changed files with 98 additions and 19 deletions
+6 -16
View File
@@ -189,24 +189,14 @@ const InputHandler = {
setupClickHandlers: function() {
// Add click handling for the HTML START button
$('#startButton').click(function(e) {
console.log("🖱️ START button clicked - starting game");
console.log("🖱️ START button clicked - auto-starting game");
// Trigger the same logic as typing 'enter'
const isDebugMode = window.location.hostname === 'localhost' ||
window.location.hostname === '127.0.0.1' ||
window.location.protocol === 'file:';
// Use the new auto_start event for immediate entry
socket.emit('auto_start');
socket.emit('chat message', 'enter');
if (isDebugMode || ScreenManager.canEnterGame()) {
console.log("✅ Can enter immediately - showing waiting screen");
if (typeof Game !== 'undefined' && Game.drawWaitingScreen) {
Game.drawWaitingScreen();
}
} else {
console.log("⏳ Will be queued - showing queue message");
$('#messages').append($('<li style="color: #ff0;">').text("* You have been added to the queue! Game will start after next block."));
UI.scrollChat();
console.log("✅ Auto-start requested - showing waiting screen");
if (typeof Game !== 'undefined' && Game.drawWaitingScreen) {
Game.drawWaitingScreen();
}
// Add visual feedback to chat
+92 -3
View File
@@ -51,6 +51,7 @@ class SocketHandlers {
socket.on('disconnect', () => this.handleDisconnect(socket));
socket.on('debug_ping', (data) => this.handleDebugPing(socket, data));
socket.on('register_client', (data) => this.handleRegisterClient(socket, data));
socket.on('auto_start', () => this.handleAutoStart(socket)); // New handler for start button
}
/**
@@ -65,12 +66,12 @@ class SocketHandlers {
switch (command) {
case 'hello':
this.broadcastManager.sendStatusUpdate(socket.id, 'help',
'Welcome, to enter the dungeon type Enter, and you will be given a Wownero address, ' +
'which you must send between 10-100 WOW to enter. The more you send, the more you can win.');
'Welcome! Type "enter" to join the queue for the next block, or use the START button for immediate entry. ' +
'You must send between 10-100 WOW to enter. The more you send, the more you can win.');
return;
case 'enter':
this.handleGameEntry(socket);
this.handleGameQueue(socket);
return;
case 'cancel':
@@ -117,6 +118,94 @@ class SocketHandlers {
}
}
/**
* Handle game queue request (typing "enter")
*/
handleGameQueue(socket) {
console.log(`Player ${socket.id} requested to enter the dungeon - ADDING TO QUEUE`);
const currentUser = this.getUserBySocket(socket.id);
if (!currentUser) {
this.broadcastManager.sendStatusUpdate(socket.id, 'error', 'Error: Could not add to queue. Please try again.');
return;
}
// Check if already waiting
const existingIndex = this.WAITING_PLAYERS.findIndex(p => p.serverId === socket.id);
if (existingIndex !== -1) {
this.broadcastManager.sendStatusUpdate(socket.id, 'info', 'You are already in the queue!');
return;
}
// Check if already in a game
if (this.activeGames.has(socket.id)) {
this.broadcastManager.sendStatusUpdate(socket.id, 'error', 'You are already in a game!');
return;
}
// Add to waiting queue
this.WAITING_PLAYERS.push({
serverId: socket.id,
clientId: currentUser.clientId,
entryTime: Date.now()
});
const currentBlock = this.debugManager.getCurrentBlockHeight();
const nextBlock = currentBlock + 1;
this.broadcastManager.sendStatusUpdate(socket.id, 'queue',
`Added to queue! You will enter when block ${nextBlock} is found. Current block: ${currentBlock}`);
console.log(`🕒 QUEUE ENTRY: Player ${socket.id} queued for block ${nextBlock}. Queue length: ${this.WAITING_PLAYERS.length}`);
}
/**
* Handle auto start request (start button)
*/
handleAutoStart(socket) {
console.log(`Player ${socket.id} requested auto-start via start button - STARTING IMMEDIATELY`);
const currentUser = this.getUserBySocket(socket.id);
if (!currentUser) {
this.broadcastManager.sendStatusUpdate(socket.id, 'error', 'Error: Could not start game. Please try again.');
return;
}
// Check if already in a game
if (this.activeGames.has(socket.id)) {
this.broadcastManager.sendStatusUpdate(socket.id, 'error', 'You are already in a game!');
return;
}
// Remove from waiting queue if present
const waitingIndex = this.WAITING_PLAYERS.findIndex(p => p.serverId === socket.id);
if (waitingIndex !== -1) {
this.WAITING_PLAYERS.splice(waitingIndex, 1);
console.log(`🚀 AUTO-START: Removed ${socket.id} from waiting queue for immediate start`);
}
console.log(`Found user for socket ${socket.id}, starting game immediately...`);
try {
// For auto-entry, player enters on current block
const currentBlock = this.debugManager.getCurrentBlockHeight();
currentUser.blockRec = currentBlock;
console.log(`🕒 AUTO-START: Player enters on block ${currentUser.blockRec}, will die when block ${currentUser.blockRec + 1} starts`);
const game = this.createGameForUser(currentUser, 'standard');
const gameState = game.getState();
gameState.blockHeight = currentBlock;
console.log(`🎮 SENDING IMMEDIATE GAME_START to ${socket.id} (AUTO-START)`);
this.io.to(socket.id).emit('game_start', gameState);
console.log(`Game started immediately for player ${socket.id} via auto-start`);
} catch (error) {
console.error(`Error creating game:`, error);
this.broadcastManager.sendStatusUpdate(socket.id, 'error', 'Error starting game: ' + error.message);
}
}
/**
* Handle cancel entry request
*/