Support staged group Emperor aid
Verify and publish checkpoint container / container (push) Successful in 10m13s
Verify and publish checkpoint container / container (push) Successful in 10m13s
This commit is contained in:
1 parent
b89c225d5b
commit
9081249574
10 files changed
+413
-17
No files matched your search
+20
-6
@@ -16060,6 +16060,14 @@ function coalitionFundingAvailable(g: Game, p: Player, committedBid = false): bo
|
||||
const group = coalitionRule(() => coalitionOf(g.players, g.coalitionState, p.id));
|
||||
return group?.members.length === 3;
|
||||
}
|
||||
function coalitionEmperorGroup(g: Game, p: Player) {
|
||||
if (!g.coalitionState || p.faction !== 'emperor' || g.status !== 'playing' || g.advanced ||
|
||||
g.expansions.length || g.homeworlds || g.nexusCards || g.leaderSkills || g.techTokens ||
|
||||
g.strongholdCards || g.ecazTreachery || g.discoveryEnabled ||
|
||||
!g.players.every(seat => ['atreides', 'beneGesserit', 'emperor', 'fremen', 'guild', 'harkonnen'].includes(seat.faction))) return null;
|
||||
const group = coalitionRule(() => coalitionOf(g.players, g.coalitionState, p.id));
|
||||
return group?.members.length === 3 ? group : null;
|
||||
}
|
||||
function guildGroupAlly(g: Game, p: Player): boolean {
|
||||
return coalitionRule(() => groupGuildShipmentRate(g.players, p.id, g.coalitionState));
|
||||
}
|
||||
@@ -44640,11 +44648,12 @@ function applyActionInner(
|
||||
return g;
|
||||
}
|
||||
if (t === 'emperorGift' || t === 'emperorRevival') {
|
||||
requireRule(
|
||||
p.faction === 'emperor' && p.ally,
|
||||
'Only the Emperor may use this power for an ally.',
|
||||
);
|
||||
const recipient = getPlayer(g, p.ally);
|
||||
const group = coalitionEmperorGroup(g, p);
|
||||
const recipientId = group ? stringField(action.target) : p.ally;
|
||||
requireRule(p.faction === 'emperor' && recipientId &&
|
||||
(group ? recipientId !== id && group.members.includes(recipientId) : recipientId === p.ally),
|
||||
'Only the Emperor may use this power for an ally.');
|
||||
const recipient = getPlayer(g, recipientId);
|
||||
if (t === 'emperorRevival') {
|
||||
requireRule(
|
||||
!revivalPrevented(g, recipient.id),
|
||||
@@ -44685,7 +44694,7 @@ function applyActionInner(
|
||||
);
|
||||
if (t === 'emperorRevival')
|
||||
requireRule(
|
||||
p.spice >= paidForceRevivalCost(recipient, amount, elite),
|
||||
uncommittedSpice(g, p) >= paidForceRevivalCost(recipient, amount, elite),
|
||||
'Not enough spice for these extra revivals.',
|
||||
);
|
||||
if (liveShipmentPromises(g.shipmentPromises ?? [], p.id, g.turn).length ||
|
||||
@@ -47019,6 +47028,11 @@ export function viewGame(state: Game, id: string, now?: number) {
|
||||
? g.aid[me.ally].amount
|
||||
: 0,
|
||||
},
|
||||
coalitionEmperor: (() => {
|
||||
const group = coalitionEmperorGroup(g, me);
|
||||
return group ? {allies: group.members.filter(member => member !== id),
|
||||
availableSpice: Math.max(0, uncommittedSpice(g, me))} : null;
|
||||
})(),
|
||||
coalitionFunding: coalitionFundingAvailable(g, me) ? (() => {
|
||||
const group = coalitionRule(() => coalitionOf(g.players, g.coalitionState, id))!;
|
||||
const pledges = g.coalitionEscrow!.pledges;
|
||||
|
||||
Reference in new issue
Block a user