Connect optional Smuggler reserve shipment and saved interception
Prototype one free accompanying force into an empty territory with explicit opt-out, shared human/AI pricing, physical elite custody and Guild recipient accounting. Bind pending quotes to their unique saved Guild decision; preserve legacy unstamped full-price declarations. Smuggler battle collection and combined modules remain unfinished and gated. Repair a randomly dealt-out Karama fixture by relocating its actual physical card without changing inventory. Validation: 70 focused tests; typecheck, lint, 4477 offline tests, production build and 43 HTTP tests passed. Independent rules/persistence review completed, including interruption and cancellation. Browser checked the price toggle, three arrivals for two spice, and refresh with unchanged private cards. Two genuine four-profile Basic/Advanced samples completed without rejected candidates but did not use Smuggler. Preserved all 427 opening rooms and original seat/recovery rows (461 rooms after QA/HTTP). SQLite integrity and foreign keys passed. Server remained healthy after the reported power outage; no restart or reset. Verified source tree: bf6e02bf6873ca6d6b01c83481489f55b2c7db0184a7056364343440dae88803
This commit is contained in:
1 parent
06f46c6f79
commit
9381ef140d
18 files changed
+1015
-25
No files matched your search
@@ -0,0 +1,35 @@
|
||||
import type { SmugglerShipment } from '../game/smuggler-shipment';
|
||||
|
||||
export function SmugglerShipmentChoice({
|
||||
quote,
|
||||
use,
|
||||
busy,
|
||||
onChange,
|
||||
}: {
|
||||
quote: SmugglerShipment | null;
|
||||
use: boolean;
|
||||
busy: boolean;
|
||||
onChange: (use: boolean) => void;
|
||||
}) {
|
||||
if (!quote) return null;
|
||||
return (
|
||||
<section aria-label="Smuggler shipment choice" className="notice space-y-2">
|
||||
<label className="decision-checkbox">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={use}
|
||||
disabled={busy}
|
||||
onChange={(event) => onChange(event.target.checked)}
|
||||
/>
|
||||
Use Smuggler for one free accompanying force
|
||||
</label>
|
||||
<output className="fine block">
|
||||
All {quote.amount} selected forces leave reserves.
|
||||
{use
|
||||
? ` The price is for ${quote.amount - 1}; the free force is included in your selected total.`
|
||||
: ' The ordinary price applies to every selected force.'}{' '}
|
||||
The destination is currently empty.
|
||||
</output>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user