mirror of
https://github.com/bra1n/townsquare.git
synced 2025-04-04 22:24:36 +00:00
add ST reveal grimoire
This commit is contained in:
parent
fb87f6f8cb
commit
bd0f343fc1
4 changed files with 75 additions and 11 deletions
|
@ -130,6 +130,10 @@
|
||||||
Send Characters
|
Send Characters
|
||||||
<em><font-awesome-icon icon="theater-masks"/></em>
|
<em><font-awesome-icon icon="theater-masks"/></em>
|
||||||
</li>
|
</li>
|
||||||
|
<li v-if="!session.isSpectator" @click="revealGrimoire">
|
||||||
|
Reveal Grimoire
|
||||||
|
<em><font-awesome-icon icon="satellite-dish"/></em>
|
||||||
|
</li>
|
||||||
<li
|
<li
|
||||||
v-if="session.voteHistory.length"
|
v-if="session.voteHistory.length"
|
||||||
@click="toggleModal('voteHistory')"
|
@click="toggleModal('voteHistory')"
|
||||||
|
@ -274,6 +278,13 @@ export default {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
revealGrimoire() {
|
||||||
|
if (this.session.isSpectator) return;
|
||||||
|
const popup = "Do you want to reveal the GRIMOIRE to players?";
|
||||||
|
if (confirm(popup)) {
|
||||||
|
this.$store.commit("session/revealGrimoire", true);
|
||||||
|
}
|
||||||
|
},
|
||||||
imageOptIn() {
|
imageOptIn() {
|
||||||
const popup =
|
const popup =
|
||||||
"Are you sure you want to allow custom images? A malicious script file author might track your IP address this way.";
|
"Are you sure you want to allow custom images? A malicious script file author might track your IP address this way.";
|
||||||
|
|
|
@ -33,6 +33,7 @@ const faIcons = [
|
||||||
"Question",
|
"Question",
|
||||||
"Random",
|
"Random",
|
||||||
"RedoAlt",
|
"RedoAlt",
|
||||||
|
"SatelliteDish",
|
||||||
"SearchMinus",
|
"SearchMinus",
|
||||||
"SearchPlus",
|
"SearchPlus",
|
||||||
"Square",
|
"Square",
|
||||||
|
|
|
@ -25,7 +25,8 @@ const state = () => ({
|
||||||
votingSpeed: 3000,
|
votingSpeed: 3000,
|
||||||
isVoteInProgress: false,
|
isVoteInProgress: false,
|
||||||
voteHistory: [],
|
voteHistory: [],
|
||||||
isRolesDistributed: false
|
isRolesDistributed: false,
|
||||||
|
isGrimoireRevealed: false
|
||||||
});
|
});
|
||||||
|
|
||||||
const getters = {};
|
const getters = {};
|
||||||
|
@ -47,6 +48,7 @@ const mutations = {
|
||||||
setVoteInProgress: set("isVoteInProgress"),
|
setVoteInProgress: set("isVoteInProgress"),
|
||||||
claimSeat: set("claimedSeat"),
|
claimSeat: set("claimedSeat"),
|
||||||
distributeRoles: set("isRolesDistributed"),
|
distributeRoles: set("isRolesDistributed"),
|
||||||
|
revealGrimoire: set("isGrimoireRevealed"),
|
||||||
setSessionId(state, sessionId) {
|
setSessionId(state, sessionId) {
|
||||||
state.sessionId = sessionId
|
state.sessionId = sessionId
|
||||||
.toLocaleLowerCase()
|
.toLocaleLowerCase()
|
||||||
|
|
|
@ -240,11 +240,17 @@ class LiveSession {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Publish the current gamestate.
|
* Publish the current gamestate.
|
||||||
* Optional param to reduce traffic. (send only player data)
|
* Optional param isLightweight to reduce traffic (=send only player data)
|
||||||
|
* Optional param isRevealGrimoire to reveal grimoire (=include ALL player roles, reminders & bluffs), overrides isLightweight
|
||||||
* @param playerId
|
* @param playerId
|
||||||
* @param isLightweight
|
* @param isLightweight
|
||||||
|
* @param isRevealGrimoire
|
||||||
*/
|
*/
|
||||||
sendGamestate(playerId = "", isLightweight = false) {
|
sendGamestate(
|
||||||
|
playerId = "",
|
||||||
|
isLightweight = false,
|
||||||
|
isRevealGrimoire = false
|
||||||
|
) {
|
||||||
if (this._isSpectator) return;
|
if (this._isSpectator) return;
|
||||||
this._gamestate = this._store.state.players.players.map(player => ({
|
this._gamestate = this._store.state.players.players.map(player => ({
|
||||||
name: player.name,
|
name: player.name,
|
||||||
|
@ -252,28 +258,39 @@ class LiveSession {
|
||||||
isDead: player.isDead,
|
isDead: player.isDead,
|
||||||
isVoteless: player.isVoteless,
|
isVoteless: player.isVoteless,
|
||||||
pronouns: player.pronouns,
|
pronouns: player.pronouns,
|
||||||
...(player.role && player.role.team === "traveler"
|
...(player.role && (player.role.team === "traveler" || isRevealGrimoire)
|
||||||
? { roleId: player.role.id }
|
? { roleId: player.role.id }
|
||||||
: {})
|
: {}),
|
||||||
|
reminders: isRevealGrimoire
|
||||||
|
? player.reminders.map(reminder => ({
|
||||||
|
name: reminder.name,
|
||||||
|
role: reminder.role
|
||||||
|
}))
|
||||||
|
: {}
|
||||||
}));
|
}));
|
||||||
if (isLightweight) {
|
if (isLightweight && !isRevealGrimoire) {
|
||||||
this._sendDirect(playerId, "gs", {
|
this._sendDirect(playerId, "gs", {
|
||||||
gamestate: this._gamestate,
|
gamestate: this._gamestate,
|
||||||
isLightweight
|
isLightweight
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const { session, grimoire } = this._store.state;
|
const { session, grimoire } = this._store.state;
|
||||||
const { fabled } = this._store.state.players;
|
const { fabled, bluffs } = this._store.state.players;
|
||||||
this.sendEdition(playerId);
|
this.sendEdition(playerId);
|
||||||
this._sendDirect(playerId, "gs", {
|
this._sendDirect(playerId, "gs", {
|
||||||
gamestate: this._gamestate,
|
gamestate: this._gamestate,
|
||||||
|
isLightweight: isLightweight,
|
||||||
|
isRevealGrimoire: isRevealGrimoire,
|
||||||
isNight: grimoire.isNight,
|
isNight: grimoire.isNight,
|
||||||
nomination: session.nomination,
|
nomination: session.nomination,
|
||||||
votingSpeed: session.votingSpeed,
|
votingSpeed: session.votingSpeed,
|
||||||
lockedVote: session.lockedVote,
|
lockedVote: session.lockedVote,
|
||||||
isVoteInProgress: session.isVoteInProgress,
|
isVoteInProgress: session.isVoteInProgress,
|
||||||
fabled: fabled.map(({ id }) => id),
|
fabled: fabled.map(({ id }) => id),
|
||||||
...(session.nomination ? { votes: session.votes } : {})
|
...(session.nomination ? { votes: session.votes } : {}),
|
||||||
|
bluffs: isRevealGrimoire
|
||||||
|
? bluffs.map(bluff => ({ roleId: bluff.id }))
|
||||||
|
: []
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -288,14 +305,24 @@ class LiveSession {
|
||||||
const {
|
const {
|
||||||
gamestate,
|
gamestate,
|
||||||
isLightweight,
|
isLightweight,
|
||||||
|
isRevealGrimoire,
|
||||||
isNight,
|
isNight,
|
||||||
nomination,
|
nomination,
|
||||||
votingSpeed,
|
votingSpeed,
|
||||||
votes,
|
votes,
|
||||||
lockedVote,
|
lockedVote,
|
||||||
isVoteInProgress,
|
isVoteInProgress,
|
||||||
fabled
|
fabled,
|
||||||
|
bluffs
|
||||||
} = data;
|
} = data;
|
||||||
|
if (isRevealGrimoire) {
|
||||||
|
// includes ALL roles, reminders & bluffs
|
||||||
|
const popup =
|
||||||
|
"Reveal the Storyteller's grimoire? This will overwrite your grimoire.";
|
||||||
|
if (!confirm(popup)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
const players = this._store.state.players.players;
|
const players = this._store.state.players.players;
|
||||||
// adjust number of players
|
// adjust number of players
|
||||||
if (players.length < gamestate.length) {
|
if (players.length < gamestate.length) {
|
||||||
|
@ -337,6 +364,14 @@ class LiveSession {
|
||||||
value: {}
|
value: {}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// reminder tokens
|
||||||
|
if (isRevealGrimoire) {
|
||||||
|
this._store.commit("players/update", {
|
||||||
|
player,
|
||||||
|
property: "reminders",
|
||||||
|
value: state.reminders
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
if (!isLightweight) {
|
if (!isLightweight) {
|
||||||
this._store.commit("toggleNight", !!isNight);
|
this._store.commit("toggleNight", !!isNight);
|
||||||
|
@ -350,6 +385,18 @@ class LiveSession {
|
||||||
this._store.commit("players/setFabled", {
|
this._store.commit("players/setFabled", {
|
||||||
fabled: fabled.map(id => this._store.state.fabled.get(id))
|
fabled: fabled.map(id => this._store.state.fabled.get(id))
|
||||||
});
|
});
|
||||||
|
if (isRevealGrimoire) {
|
||||||
|
this._store.commit("session/revealGrimoire", true);
|
||||||
|
bluffs.forEach((bluff, i) => {
|
||||||
|
const role =
|
||||||
|
this._store.state.roles.get(bluff.roleId) ||
|
||||||
|
this._store.getters.rolesJSONbyId.get(bluff.roleId) || {};
|
||||||
|
this._store.commit("players/setBluff", {
|
||||||
|
index: i,
|
||||||
|
role
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -462,8 +509,8 @@ class LiveSession {
|
||||||
if (!this._isSpectator) return;
|
if (!this._isSpectator) return;
|
||||||
const player = this._store.state.players.players[index];
|
const player = this._store.state.players.players[index];
|
||||||
if (!player) return;
|
if (!player) return;
|
||||||
// special case where a player stops being a traveler
|
|
||||||
if (property === "role") {
|
if (property === "role") {
|
||||||
|
// special case where a player stops being a traveler
|
||||||
if (!value && player.role.team === "traveler") {
|
if (!value && player.role.team === "traveler") {
|
||||||
// reset to an unknown role
|
// reset to an unknown role
|
||||||
this._store.commit("players/update", {
|
this._store.commit("players/update", {
|
||||||
|
@ -472,7 +519,7 @@ class LiveSession {
|
||||||
value: {}
|
value: {}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// load role, first from session, the global, then fail gracefully
|
// load role, first from session, then global, then fail gracefully
|
||||||
const role =
|
const role =
|
||||||
this._store.state.roles.get(value) ||
|
this._store.state.roles.get(value) ||
|
||||||
this._store.getters.rolesJSONbyId.get(value) ||
|
this._store.getters.rolesJSONbyId.get(value) ||
|
||||||
|
@ -822,6 +869,9 @@ export default store => {
|
||||||
session.distributeRoles();
|
session.distributeRoles();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "session/revealGrimoire":
|
||||||
|
session.sendGamestate("", false, true);
|
||||||
|
break;
|
||||||
case "session/nomination":
|
case "session/nomination":
|
||||||
session.nomination(payload);
|
session.nomination(payload);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Reference in a new issue