From 1ca27a51f348645254b50797d07c584965d3f83b Mon Sep 17 00:00:00 2001 From: James Ketrenos Date: Sat, 26 Feb 2022 14:58:07 -0800 Subject: [PATCH] Fixed some ACCEPT boxes in trades so only perfect matches are accept. Moved "Offer" button to try and make it more clear when you need to submit a new offer Fixed meetClicked to update the offer text and resource counts. Signed-off-by: James Ketrenos --- client/src/Trade.js | 67 ++++++++++++++++++++++++++++++------------ server/routes/games.js | 22 +++++++------- 2 files changed, 60 insertions(+), 29 deletions(-) diff --git a/client/src/Trade.js b/client/src/Trade.js index c6999b3..252761c 100644 --- a/client/src/Trade.js +++ b/client/src/Trade.js @@ -102,11 +102,20 @@ const Trade = ({table}) => { gives: offer.gets.slice(), gets: offer.gives.slice() }; - console.log(trade); trade.gives.forEach(give => giveCount(give.type, give.count)); trade.gets.forEach(get => getCount(get.type, get.count)); table.offerTrade(trade); - }, [giveCount, getCount]); + let tmp = {}; + trade.gives.forEach(give => { + tmp[give.type] = give.count; + }); + setGives(tmp); + tmp = {}; + trade.gets.forEach(get => { + tmp[get.type] = get.count; + }); + setGets(tmp); + }, [giveCount, getCount, setGives, setGets]); if (!table.game) { return (<>); @@ -194,26 +203,44 @@ const Trade = ({table}) => { if (table.game.turn.offer) { players.forEach(trade => { - let valid = trade.gets.length && trade.gives.length; - trade.gets.forEach(resource => { - if (!valid) { + trade.valid = trade.gets.length + && trade.gives.length + && trade.gets.length === game.turn.offer.gives.length + && trade.gives.length === game.turn.offer.gets.length; + if (!trade.valid) { + return; + } + trade.gets.forEach(get => { + if (!trade.valid) { return; } - if (resource.type !== 'bank') { - const offer = table.game.turn.offer.gives.find(item => item.type === resource.type); - valid = offer && (offer.count >= resource.count); + if (get.type !== 'bank') { + const offer = table.game.turn.offer.gives.find(give => give.type === get.type); + trade.valid = offer && (offer.count === get.count); } else { - valid = false; /* Doesn't matter what the resource type is so long as there * are enough of the one kind */ - table.game.turn.offer.gives.forEach(offer => { - if (offer.count >= resource.count) { - valid = true; - } - }); + trade.valid = table.game.turn.offer.gives[0].count === get.count; } }); - trade.valid = valid; + + if (!trade.valid) { + return; + } + + trade.gives.forEach(give => { + if (!trade.valid) { + return; + } + if (give.type !== '*') { + const offer = table.game.turn.offer.gets.find(get => give.type === get.type); + trade.valid = offer && (offer.count === give.count); + } else { + /* Doesn't matter what the resource type is so long as there + * are enough of the one kind */ + trade.valid = table.game.turn.offer.gets[0].count === give.count; + } + }) }); canAccept = true; @@ -238,6 +265,7 @@ const Trade = ({table}) => { ; } + const gets = item.gets.map(get => `${get.count} ${(get.type === 'bank') ? 'of any one resource' : get.type}`) .join(', '), @@ -281,6 +309,9 @@ const Trade = ({table}) => { { players } { !player.haveResources && You have no resources to participate in this trade. } + + { player.haveResources &&
{ alignItems: 'flex-start' }}>
- You want to receive {getLine}. + You want to receive {getLine}:
@@ -298,7 +329,7 @@ const Trade = ({table}) => {
- You are willing to give {giveLine}. + You are willing to give {giveLine}:
{ player.brick > 0 && } @@ -309,8 +340,6 @@ const Trade = ({table}) => {
} - { isTurn && } diff --git a/server/routes/games.js b/server/routes/games.js index ceb3281..a6064c6 100755 --- a/server/routes/games.js +++ b/server/routes/games.js @@ -1372,17 +1372,19 @@ const isSameOffer = (player, offer) => { return same; }; -const checkOffer = (game, player, offer) => { +/* Verifies player can make the offer */ +const checkPlayerOffer = (game, player, offer) => { let error = undefined; - console.log({ - player: getPlayerName(game, player), - gets: player.gets, - gives: player.gives - }, { - name: offer.name, + console.log({ + name: getPlayerName(game, player), gets: offer.gets, - gives: offer.gives + gives: offer.gives, + sheep: player.sheep, + wheat: player.wheat, + brick: player.brick, + stone: player.stone, + wood: player.wood, }); offer.gives.forEach(give => { @@ -1589,7 +1591,7 @@ router.put("/:id/:action/:value?", async (req, res) => { if (value === 'offer') { const offer = req.body; - error = checkOffer(game, session.player, offer); + error = checkPlayerOffer(game, session.player, offer); if (error) { break; } @@ -1632,7 +1634,7 @@ router.put("/:id/:action/:value?", async (req, res) => { const offer = req.body; let target; - error = checkOffer(game, session.player, offer); + error = checkPlayerOffer(game, session.player, offer); if (error) { break; }