Connect Kull bid answers and group transport
Verify and publish checkpoint container / container (push) Successful in 12m6s
Verify and publish checkpoint container / container (push) Successful in 12m6s
This commit is contained in:
1 parent
420943b890
commit
f667383565
16 files changed
+438
-26
No files matched your search
@@ -285,6 +285,7 @@ import { MoritaniAssassinate, MoritaniAssassinateHistory } from './moritani-assa
|
||||
import { MoritaniExtortion, MoritaniExtortionNotice } from './moritani-extortion';
|
||||
import { AdvancedAllySeparation } from './advanced-ally-separation';
|
||||
import { CoalitionNexus } from './coalition-nexus';
|
||||
import { RosterAlliance } from './roster-alliance';
|
||||
import { CoalitionFunding, coalitionFundingContributions, type CoalitionFundingContribution } from './coalition-funding';
|
||||
import { CoalitionEmperorAid } from './coalition-emperor-aid';
|
||||
import { NexusEmperorPayment } from './nexus-emperor-payment';
|
||||
@@ -423,7 +424,7 @@ export function GameTable({
|
||||
const guildTransport =
|
||||
useGuildSecret ||
|
||||
me.faction === 'guild' ||
|
||||
!!g.coalitionFunding && groupGuildShipmentRate(g.players, me.id, g.coalitionState) ||
|
||||
groupGuildShipmentRate(g.players, me.id, g.coalitionState) ||
|
||||
g.players.some((p) => p.faction === 'guild' && p.id === me.ally);
|
||||
const [botFaction, setBotFaction] = useState('');
|
||||
const [botDifficulty, setBotDifficulty] = useState<Difficulty>('Medium');
|
||||
@@ -1626,15 +1627,7 @@ export function GameTable({
|
||||
` · ${g.techTokens![id].spice} spice at phase end`}
|
||||
</div>
|
||||
))}
|
||||
{p.ally && (
|
||||
<div className="fine">
|
||||
Allied with{' '}
|
||||
{
|
||||
faction(g.players.find((x) => x.id === p.ally)!.faction)
|
||||
.name
|
||||
}
|
||||
</div>
|
||||
)}
|
||||
<RosterAlliance game={g} playerId={p.id} />
|
||||
</div>
|
||||
))}
|
||||
{g.status === 'lobby' &&
|
||||
@@ -2260,7 +2253,7 @@ export function GameTable({
|
||||
Structured bid, alliance, Revival, bribe and combined turn-action questions are unavailable.
|
||||
</> : <>
|
||||
Requires Basic CHOAM with the CHOAM and Ix decks plus each faction’s deck, and no other optional modules.
|
||||
Phase-wide bid and combined turn-action Truthtrance questions are unavailable.
|
||||
Combined turn-action Truthtrance questions are unavailable.
|
||||
When Richese is seated, structured bid, alliance, Revival and bribe commitments are also unavailable,
|
||||
and some Kull reactions may be unavailable in complex response windows.
|
||||
</>}{' '}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
'use client';
|
||||
|
||||
import { faction } from '@/game/catalog';
|
||||
import { coalitionAllies } from '@/game/coalition-alliance';
|
||||
import type { GameView } from '@/game/engine';
|
||||
|
||||
/** Alliance membership is public; a staged larger alliance has no scalar
|
||||
* player.ally value, so use its authoritative public membership ledger. */
|
||||
export function RosterAlliance({game, playerId}: {
|
||||
game: Pick<GameView, 'players' | 'coalitionState'>;
|
||||
playerId: string;
|
||||
}) {
|
||||
const player = game.players.find(seat => seat.id === playerId);
|
||||
if (!player) return null;
|
||||
const ids = game.coalitionState
|
||||
? coalitionAllies(game.players, game.coalitionState, playerId)
|
||||
: player.ally ? [player.ally] : [];
|
||||
const names = ids.flatMap(id => {
|
||||
const ally = game.players.find(seat => seat.id === id);
|
||||
return ally ? [faction(ally.faction).name] : [];
|
||||
});
|
||||
return names.length ? <div className="fine">Allied with {names.join(' and ')}</div> : null;
|
||||
}
|
||||
Reference in new issue
Block a user