{ development }
diff --git a/client/src/PlayersStatus.css b/client/src/PlayersStatus.css
index d8adf42..dffae0e 100644
--- a/client/src/PlayersStatus.css
+++ b/client/src/PlayersStatus.css
@@ -19,7 +19,7 @@
align-items: flex-start;
pointer-events: all;
right: auto;
- bottom: 7rem; /* 1rem over top of Resource cards in hand */
+ bottom: 8rem; /* 1rem over top of Resource cards in hand */
}
.PlayersStatus .Player:not(:last-child) {
diff --git a/client/src/Resource.js b/client/src/Resource.js
index 88924cf..db0b18b 100644
--- a/client/src/Resource.js
+++ b/client/src/Resource.js
@@ -2,19 +2,22 @@ import React from "react";
import "./Resource.css";
import { assetsPath } from './Common.js';
-const Resource = ({ type, select, disabled, available, count, label, onClick }) => {
+const Resource = ({ type, disabled, available, count, label, onClick }) => {
const array = new Array(Number(count ? count : 0));
- const click = select ? select : (event) => {
+ const click = (event) => {
if (!disabled) {
event.target.classList.toggle('Selected');
}
+ if (onClick) {
+ onClick(event);
+ }
};
if (label) {
return
{ available !== undefined &&
{available}
}
{count}
@@ -29,7 +32,7 @@ const Resource = ({ type, select, disabled, available, count, label, onClick })
)) }
diff --git a/client/src/Trade.js b/client/src/Trade.js
index 1c9e524..fafee08 100644
--- a/client/src/Trade.js
+++ b/client/src/Trade.js
@@ -104,12 +104,14 @@ const Trade = () => {
onClick={() => transfer(resource, 'get')}
label={true}
type={resource}
+ disabled
count={gets[resource]}/>
{ gets[resource] === gives[resource] ? '' : (gets[resource] > gives[resource] ?
:
)}
transfer(resource, 'give')}
label={true}
type={resource}
+ disabled
available={priv ? priv[resource] - gives[resource] : undefined}
count={gives[resource]}/>
;
diff --git a/client/src/Winner.js b/client/src/Winner.js
index c8ca94e..d962418 100644
--- a/client/src/Winner.js
+++ b/client/src/Winner.js
@@ -105,7 +105,7 @@ const Winner = ({ winnerDismissed, setWinnerDismissed }) => {
}
const count = stats.robber.stole[type];
robber = <>{robber}
-
+
>;
}
robber =
@@ -137,7 +137,7 @@ const Winner = ({ winnerDismissed, setWinnerDismissed }) => {
}
const count = stats[player].stolen[type];
stolen = <>{stolen}
-
+
>;
}
if (stolen) {
diff --git a/server/routes/games.js b/server/routes/games.js
index 95cc776..6a74239 100755
--- a/server/routes/games.js
+++ b/server/routes/games.js
@@ -391,7 +391,7 @@ const distributeResources = (game, roll) => {
}
if (session) {
- addChatMessage(game, session, `${session.name} receives ${message.join(', ')}.`);
+ addChatMessage(game, session, `${session.name} receives ${message.join(', ')} for pip ${roll}.`);
}
}
@@ -476,7 +476,6 @@ const processRoll = (game, session, dice) => {
game.turn.select = {};
const volcano = layout.tiles.find((tile, index) =>
staticData.tiles[game.tileOrder[index]].type === 'desert');
- console.log({ mode: 'gold', volcano });
volcano.corners.forEach(index => {
const corner = game.placements.corners[index];
if (corner.color) {
@@ -488,9 +487,11 @@ const processRoll = (game, session, dice) => {
count += corner.type === 'settlement' ? 1 : 2;
}
});
-
+ console.log(`Volcano! - `, {
+ mode: 'gold',
+ selected: game.turn.select
+ });
if (count) {
- game.turn.actions = [ 'select-resources' ];
/* To gain volcano resources, you need at least 3 settlements,
* so Robin Hood Robber does not apply */
if (volcano === layout.tiles[game.robber]) {
@@ -499,6 +500,7 @@ const processRoll = (game, session, dice) => {
delete game.turn.select;
} else {
addChatMessage(game, null, `House rule 'Volcanoes have minerals' activated. Players must select which resources to receive from the Volcano!`);
+ game.turn.actions = ['select-resources'];
game.turn.active = 'volcano';
}
} else {
@@ -521,7 +523,8 @@ const processRoll = (game, session, dice) => {
turn: game.turn,
players: getFilteredPlayers(game),
chat: game.chat,
- dice: game.dice
+ dice: game.dice,
+ state: game.state
});
return;
}
@@ -804,11 +807,10 @@ const adminActions = (game, action, value, query) => {
if (session.player.cities === 0) {
return `Player ${game.turn.name} does not have any more cities to give.`;
}
- corners = getValidCorners(game, session.color);
+ corners = getValidCorners(game, session.color, 'settlement');
if (corners.length === 0) {
return `There are no valid locations for ${game.turn.name} to place a settlement.`;
}
- corners = getValidCorners(game, session.color, 'settlement');
game.turn.free = true;
setForCityPlacement(game, corners);
addChatMessage(game, null, `Admin gave a city to ${game.turn.name}. ` +
@@ -2766,7 +2768,7 @@ const placeRoad = (game, session, index) => {
});
message.push(`${receives[type]} ${type}`);
}
- addChatMessage(game, session, `${session.name} receives ${message.join(', ')}.`);
+ addChatMessage(game, session, `${session.name} receives ${message.join(', ')} for initial settlement placement.`);
}
}
addChatMessage(game, null, `It is ${session.name}'s turn.`);
@@ -3005,6 +3007,7 @@ const selectResources = (game, session, cards) => {
count = 1;
}
if (game.state === 'volcano') {
+ console.log({ cards, turn: game.turn });
if (!game.turn.select) {
count = 0;
} else if (session.color in game.turn.select) {
@@ -3052,8 +3055,6 @@ const selectResources = (game, session, cards) => {
display.push(`${selected[card]} ${card}`);
}
- addActivity(game, session, `${session.name} has chosen ${display.join(', ')}!`);
-
switch (game.turn.active) {
case 'monopoly':
const gave = [], type = cards[0];
@@ -3084,10 +3085,11 @@ const selectResources = (game, session, cards) => {
}
if (gave.length) {
- addChatMessage(game, session, `${session.name} player Monopoly and selected ${display.join(', ')}. ` +
+ addChatMessage(game, session, `${session.name} played Monopoly and selected ${display.join(', ')}. ` +
`Players ${gave.join(', ')}. In total, they received ${total} ${type}.`);
} else {
- addActivity(game, session, 'No players had that resource. Wa-waaaa.');
+
+ addActivity(game, session, `${session.name} has chosen ${display.join(', ')}! Unfortunately, no players had that resource. Wa-waaaa.`);
}
delete game.turn.active;
game.turn.actions = [];
@@ -4039,6 +4041,25 @@ router.ws("/ws/:id", async (ws, req) => {
case 'turn':
case 'turns':
case 'winner':
+ case 'placements':
+ case 'longestRoadLength':
+ case 'robber':
+ case 'robberName':
+ case 'pips':
+ case 'pipsOrder':
+ case 'borders':
+ case 'tileOrder':
+ case 'active':
+ case 'largestArmy':
+ case 'mostDeveloped':
+ case 'mostPorts':
+ case 'longestRoad':
+ case 'tiles':
+ case 'pipOrder':
+ case 'signature':
+ case 'borderOrder':
+ case 'dice':
+ case 'activities':
update[field] = game[field];
break;
case 'rules':