123
This commit is contained in:
47
server.js
47
server.js
@ -1526,10 +1526,16 @@ function playSpell(room, socketId, handIndex, targetPlayerIndex, targetBoardInde
|
||||
const needTarget = card.spellTarget && card.spellTarget !== 'none';
|
||||
|
||||
// Специальная обработка для steal_cards - требует выбор противника и карт с его доски
|
||||
// Если targetPlayerIndex указан, значит клиент уже выбрал противника и нужно отправить запрос на выбор карт
|
||||
if (eff === 'steal_cards') {
|
||||
if (targetPlayerIndex == null || targetPlayerIndex === pi) return;
|
||||
if (targetPlayerIndex == null || targetPlayerIndex === pi) {
|
||||
// Если противник не выбран, просто возвращаемся (клиент должен выбрать противника)
|
||||
return;
|
||||
}
|
||||
const targetPlayer = gameState.players[targetPlayerIndex];
|
||||
if (!targetPlayer || targetPlayer.health <= 0 || !targetPlayer.board || targetPlayer.board.length === 0) return;
|
||||
if (!targetPlayer || targetPlayer.health <= 0 || !targetPlayer.board || targetPlayer.board.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Отправляем запрос на выбор карт для кражи
|
||||
const socket = io.sockets.sockets.get(p.id);
|
||||
@ -1541,7 +1547,8 @@ function playSpell(room, socketId, handIndex, targetPlayerIndex, targetBoardInde
|
||||
maxCards: Math.min(2, targetPlayer.board.length)
|
||||
});
|
||||
}
|
||||
return; // Не тратим ману и не удаляем карту пока - это сделаем после выбора
|
||||
// Не тратим ману и не удаляем карту пока - это сделаем в stealCardsFromDeck после выбора карт
|
||||
return;
|
||||
}
|
||||
|
||||
// Для других заклинаний проверяем targetBoardIndex только если это не выбор игрока
|
||||
@ -2060,15 +2067,31 @@ io.on('connection', (socket) => {
|
||||
});
|
||||
|
||||
socket.on('getRoomsList', () => {
|
||||
const roomsList = Array.from(rooms.entries()).map(([code, room]) => ({
|
||||
code,
|
||||
playerCount: room.lobby?.length || 0,
|
||||
maxPlayers: MAX_PLAYERS,
|
||||
gameStarted: room.gameStarted || false,
|
||||
hasAI: room.aiMode || false,
|
||||
players: room.lobby?.map(p => p.name) || [],
|
||||
spectators: (room.spectators || []).length
|
||||
}));
|
||||
const roomsList = Array.from(rooms.entries()).map(([code, room]) => {
|
||||
if (room.gameStarted && room.gameState) {
|
||||
// Для запущенных игр используем данные из gameState
|
||||
return {
|
||||
code,
|
||||
playerCount: room.gameState.players?.length || 0,
|
||||
maxPlayers: MAX_PLAYERS,
|
||||
gameStarted: true,
|
||||
hasAI: room.aiMode || false,
|
||||
players: room.gameState.players?.map(p => p.name) || [],
|
||||
spectators: (room.spectators || []).length
|
||||
};
|
||||
} else {
|
||||
// Для лобби используем данные из lobby
|
||||
return {
|
||||
code,
|
||||
playerCount: room.lobby?.length || 0,
|
||||
maxPlayers: MAX_PLAYERS,
|
||||
gameStarted: false,
|
||||
hasAI: room.aiMode || false,
|
||||
players: room.lobby?.map(p => p.name) || [],
|
||||
spectators: (room.spectators || []).length
|
||||
};
|
||||
}
|
||||
});
|
||||
socket.emit('roomsList', roomsList);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user