Connect group allied transit custody
Verify and publish checkpoint container / container (push) Successful in 10m27s

This commit is contained in:
Quintine committed 2026-10-28 22:59:38 +11:00
1 parent ea3b21f92c
commit 4798a3579b
5 files changed
+152 -23

No files matched your search

+6 -6
View File
@@ -748,8 +748,9 @@ import {
settleAdvisors,
arrivalAsAdvisor,
} from './advisors';
import { isAlliedShipmentVisit, makeBasicAlliedShipment, quoteBasicAlliedShipment,
import { isAlliedShipmentVisit, makeBasicAlliedShipment, quoteBasicAlliedShipment, basicAlliedShipmentHasWitness,
type BasicAlliedShipment } from './allied-separation';
import type { CoalitionState } from './coalition-alliance';
import { casualtyOptions, maxCombatDial, maxCombatSupport, validCombatForces, type Casualties, type CombatForces } from './combat';
import { FACTIONS, faction, type FactionId } from './catalog';
import { quoteLobbyBotConfiguration } from './lobby-bot-configuration';
@@ -1430,6 +1431,8 @@ type RicheseAllyOffer = {
payer: string;
};
export type Game = {
/** Unexposed group-alliance integration state; absent in existing games. */
coalitionState?: CoalitionState;
/** Public written agreements. Their prose is honored by players, not parsed. */
deals?: PublicDeal[];
/** A human-to-human lobby offer, pending the recipient's consent. */
@@ -19742,7 +19745,7 @@ function allowedEntry(
'That sector is in storm.',
);
const blocked = occupancyRule(() =>
territoryEntryBlock(g.players, p.id, t, advisors, temporaryAlliedShipment),
territoryEntryBlock(g.players, p.id, t, advisors, temporaryAlliedShipment, g.coalitionState),
);
requireRule(!blocked, blocked ?? 'This territory cannot be entered.');
}
@@ -23121,10 +23124,7 @@ function alliedSeparationView(g: Game, p: Player): {territories: string[]; noFie
function basicAlliedShipmentView(g: Game, p: Player) {
const visit = g.basicAlliedShipment;
if (g.advanced || g.phase !== 5 || !visit || visit.player !== p.id ||
visit.turn !== g.turn || p.ally !== visit.ally) return null;
const ally = getPlayer(g, visit.ally);
if (ally.ally !== p.id || !at(ally, visit.territory) || sharesEcazOccupation(g, p, visit.territory)) return null;
if (!visit || !occupancyRule(() => basicAlliedShipmentHasWitness(g, p, visit))) return null;
const quote = occupancyRule(() => quoteBasicAlliedShipment(g, p, visit));
const deployed = p.noField?.deployed;
const noField = !!visit.noField && deployed?.tokenId === visit.noField && deployed.controller === p.id &&