mirror of
https://github.com/AlecM33/Werewolf.git
synced 2025-12-26 15:57:50 +01:00
reveal role functionality, beginnings of mod transfer
This commit is contained in:
@@ -102,10 +102,29 @@ class GameManager {
|
||||
let person = game.people.find((person) => person.id === personId)
|
||||
if (person && !person.out) {
|
||||
this.logger.debug('game ' + accessCode + ': killing player ' + person.name);
|
||||
person.userType = globals.USER_TYPES.KILLED_PLAYER;
|
||||
person.out = true;
|
||||
namespace.in(accessCode).emit(globals.CLIENT_COMMANDS.KILL_PLAYER, person.id)
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
socket.on(globals.CLIENT_COMMANDS.REVEAL_PLAYER, (accessCode, personId) => {
|
||||
let game = this.activeGameRunner.activeGames[accessCode];
|
||||
if (game) {
|
||||
let person = game.people.find((person) => person.id === personId)
|
||||
if (person && !person.revealed) {
|
||||
this.logger.debug('game ' + accessCode + ': revealing player ' + person.name);
|
||||
person.revealed = true;
|
||||
namespace.in(accessCode).emit(
|
||||
globals.CLIENT_COMMANDS.REVEAL_PLAYER,
|
||||
{
|
||||
id: person.id,
|
||||
gameRole: person.gameRole,
|
||||
alignment: person.alignment
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
const globals = require("../config/globals")
|
||||
|
||||
/* The purpose of this component is to only return the game state information that is necessary. For example, we only want to return player role information
|
||||
to moderators. This avoids any possibility of a player having access to information that they shouldn't.
|
||||
*/
|
||||
const GameStateCurator = {
|
||||
getGameStateFromPerspectiveOfPerson: (game, person, gameRunner, socket, logger) => {
|
||||
return getGameStateBasedOnPermissions(game, person, gameRunner);
|
||||
@@ -21,6 +24,7 @@ function getGameStateBasedOnPermissions(game, person, gameRunner) {
|
||||
}
|
||||
switch (person.userType) {
|
||||
case globals.USER_TYPES.PLAYER:
|
||||
case globals.USER_TYPES.KILLED_PLAYER:
|
||||
return {
|
||||
accessCode: game.accessCode,
|
||||
status: game.status,
|
||||
@@ -32,7 +36,7 @@ function getGameStateBasedOnPermissions(game, person, gameRunner) {
|
||||
return person.assigned === true
|
||||
&& (person.userType !== globals.USER_TYPES.MODERATOR && person.userType !== globals.USER_TYPES.TEMPORARY_MODERATOR)
|
||||
})
|
||||
.map((filteredPerson) => ({ name: filteredPerson.name, id: filteredPerson.id, userType: filteredPerson.userType, out: filteredPerson.out })),
|
||||
.map((filteredPerson) => mapPerson(filteredPerson)),
|
||||
timerParams: game.timerParams,
|
||||
isFull: game.isFull,
|
||||
}
|
||||
@@ -75,7 +79,8 @@ function mapPeopleForModerator(people, client) {
|
||||
gameRole: person.gameRole,
|
||||
gameRoleDescription: person.gameRoleDescription,
|
||||
alignment: person.alignment,
|
||||
out: person.out
|
||||
out: person.out,
|
||||
revealed: person.revealed
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -88,12 +93,25 @@ function mapPeopleForTempModerator(people, client) {
|
||||
name: person.name,
|
||||
id: person.id,
|
||||
userType: person.userType,
|
||||
out: person.out
|
||||
out: person.out,
|
||||
revealed: person.revealed
|
||||
}));
|
||||
}
|
||||
|
||||
function mapPerson(person) {
|
||||
return { name: person.name, id: person.id, userType: person.userType, out: person.out };
|
||||
if (person.revealed) {
|
||||
return {
|
||||
name: person.name,
|
||||
id: person.id,
|
||||
userType: person.userType,
|
||||
out: person.out,
|
||||
revealed: person.revealed,
|
||||
gameRole: person.gameRole,
|
||||
alignment: person.alignment
|
||||
};
|
||||
} else {
|
||||
return { name: person.name, id: person.id, userType: person.userType, out: person.out, revealed: person.revealed };
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = GameStateCurator;
|
||||
|
||||
Reference in New Issue
Block a user