Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
51 lines
3.4 KiB
Plaintext
51 lines
3.4 KiB
Plaintext
PROPOSAL ONLY; successor/reference untouched; no native launch.
|
|
|
|
Scope: at most TWO one-time PMN4 spawn attempts in each existing original admitted
|
|
ammo truck. Quantity is a conservative successor allowance, not a copied convoy
|
|
quantity. Owned EAI_Mines.STOCK is2 per soldier; original supply convoy only fills
|
|
weapons/magazines, while original EAI_AmmoSupply.Fill dynamically fills requested
|
|
mines (maximum96 spawned cargo items). Two spares support one original engineer's
|
|
standard carried allowance without implementing recurring refill.
|
|
|
|
Files in fix.patch:
|
|
- new ERR_ConvoyMineStock.c (task-owned optional initial batch and callback)
|
|
- ERR_SupplyConvoyService.c (pin at IssueCargo, tick with existing original-owner guard)
|
|
- ERR_SupplyConvoyTactics.c (task-owned ref, terminal Stop hook)
|
|
- new tests/test_convoy_mine_stock.py
|
|
Registration is a separate registration.patch because tools/check.py has prior edits.
|
|
Copied ERR_HQ.c and ERR_MountedMagazineSeed.c are test inputs only, NOT patch files.
|
|
|
|
Primary weapon/magazine/mounted callbacks remain unchanged in task.Cargo. Optional
|
|
mine requests wait until every primary callback is finished; no mine callback is
|
|
inserted into that primary array. Normal InfantryResupply.Stock therefore never
|
|
waits for optional mine operations. Mine requests use remaining actual128 inventory
|
|
headroom and remaining128 combined primary+optional callback allowance. Magazine96
|
|
limits and their priority remain unchanged. Refused submissions still consume an
|
|
attempt; resource/capacity/ownership refusal never retries. One fixed90-second
|
|
window begins on first tick; timeout/stop/capture/mode loss is terminal.
|
|
|
|
Native GetItem is valid for Spawn (SDK generated callback lines15-18). Vanilla
|
|
SCR_AITakeItemFromArsenal_InventoryCallback lines12-15 resolves its RplId through
|
|
Replication.FindItem/RplComponent.GetEntity. Only those exact successful native
|
|
spawn identities can enter the final two-entry snapshot, after exact prefab,
|
|
initial-item exclusion, reciprocal slot, original truck storage ownership, alive,
|
|
collision handler and inactive pressure-trigger checks. No inventory-difference
|
|
fallback. Duplicate callback items deduplicate. Missing/late/unsupported identities
|
|
are omitted permanently. Physical uncertain items are preserved; callbacks remain
|
|
retained by the task batch and cannot schedule new work or reopen its snapshot.
|
|
|
|
Count()/At() expose frozen INITIAL identities, not a validated current available
|
|
stock count and not authority to transfer them. There is NO mine courier, no new
|
|
spent ledger and no reservation claim in this slice. Future finite mine delivery
|
|
must use these exact originals with the existing service's shared m_Spent and
|
|
appropriate total-cap/mutual-exclusion checks. It cannot pass the magazine-only
|
|
m_Stock to ERR_FiniteMagazineReservation and expect a mine to be accepted. Do not
|
|
claim mine replenishment, physical delivery, native insertion or multiplayer proof.
|
|
|
|
Tests: four focused programs pass; logs and results.json alongside proposal.
|
|
New actual-method harness covers the complete batch/callback methods, synchronous
|
|
success with false return, missing/unknown primary callbacks, primary independence,
|
|
128 item/callback limits, owner/mode/manager loss, fixed expiry then late callback,
|
|
preexisting/foreign/armed/dead/non-PMN items, duplicate callback identity and freeze.
|
|
Source hooks are checked directly; native Source/PAK validation remains future work.
|