-
Notifications
You must be signed in to change notification settings - Fork 0
Arma 2 OA Agent Traps Reference
PR-cited and prompt-cited checklist of Arma 2 OA 1.64 traps that recently cost WASP agents review time. Use this before patching mission SQF, reviewing fleet PRs, or translating a code-review finding into a lane.
Refreshed 2026-07-03 from
rayswaynl/a2waspwarfarePR metadata, the live wiki and the Game PC fleet prompt (C:\Users\Game\CODEX-FLEET-PROMPT.md, SHA25676A3B3156CC9253E34CEEBB54F19A2C2DBF37BCFEAFDCD6B816028B45269632A). This page is a guardrail, not release status: re-check the exact target branch before editing source.
| Trap | Safe shape | Burned in |
|---|---|---|
Server-side code calling a client-to-server bridge that ends in publicVariableServer. From the server, that send path can be a no-op for the intended callback. |
When already on the server, call the server callback directly. For side supply, use the WFBE_SE_FNC_HandleSideSupplyChange shape instead of bouncing through a server-bound PV bridge. |
PR #370; compare the side-supply false-positive review on PR #288. |
Arma 3 command reflexes in OA mission code: isEqualType, isEqualTo, params, pushBack, findIf, selectRandom command, apply, forceFollowRoad, array reveal, worldSize, getPosVisual, A3 string find / substring select, sort-by-CODE and b_inf-style marker types. |
Verify every command against the BI Arma 2 OA category. Prefer existing OA patterns: typeName, explicit private + select, set [count _array, value] / WFBE_CO_FNC_ArrayPush, forEach scans, BIS_fnc_selectRandom or floor(random count _array), per-entity reveal, visiblePosition, toArray / toString, and existing marker classes. |
Current Game PC fleet prompt hard rule; command version reference; compatibility audit. |
Group receiver getVariable [name, default]. In A2 OA, unset variables on GROUP receivers can return nil instead of the default. |
For groups, call WFBE_CO_FNC_GroupGetBool or use one-arg _grp getVariable _name followed by isNil default substitution. The 2-arg default form is fine on objects and missionNamespace. |
Current Game PC fleet prompt; Group Bool getVariable A2-OA trap. |
Boolean operands with == or !=. A2 OA rejects Boolean equality operands even when the comparison looks harmless. |
Use direct gates (if (_flag) then { ... }) or explicit if/else latches when comparing two Boolean states. Keep == / != for numeric, string, side or object identity comparisons after checking operand types. |
Current Game PC fleet prompt and PR validation rules. |
Nested forEach loops reusing _x or _this. An inner loop can overwrite the value the outer loop still needs. |
Capture the outer value first, for example _veh = _x or _cTown = _x, then use the captured local inside the inner loop or spawned body. |
PR #34. |
Default-off thresholds using 0 as a real threshold. A condition like counter >= threshold can fire immediately when the default is 0. |
Treat 0 as disabled. Gate with threshold > 0 before comparing counters or latching state. |
PR #374. |
AT launcher detection through primaryWeapon or string isKindOf "Launcher". A2 infantry launchers live in secondaryWeapon, and weapon class strings are not vehicle classes. |
For broad "has launcher" checks, use non-empty secondaryWeapon _unit. For exact weapon metadata, inspect configFile >> "CfgWeapons" deliberately. |
PR #374. |
Applying isKindOf to the wrong config family. String class checks walk CfgVehicles, so weapon or magazine classnames can silently fail. |
Match the command to the config family: vehicle object/class checks for CfgVehicles, explicit config reads for CfgWeapons/CfgMagazines. |
PR #374 and PR #69. |
| Introducing remembered or mod-derived classnames without proof. A classname that is not in the mission tree can compile but fail only when that branch runs in engine. | New classnames must already appear somewhere in the target mission tree, or the PR must include explicit config proof for the target content set. | Current Game PC fleet prompt hard rule; config-family review fallout in PR #374. |
Case-only review findings. SQF identifiers and string == comparisons are case-insensitive, so spelling-only reports often turn into no-op patches. |
Prove a case-only issue in the actual context before patching. Do not generalize this to every string-backed storage surface; setVariable / getVariable keys still need exact-source verification. |
PR #153 and PR #288. |
Two-click confirmation paths that clear MenuAction too early. ConfirmAction needs the selected action state to survive the first click so the second click can resolve it. |
Clear MenuAction only after the confirm/decline branch has consumed the selected action. Test both first-click prompt and second-click execution. |
PR #380; positive current use in PR #413. |
Extending a shared setVariable-backed tuple by auditing only the readers. Growing wfbe_aicom_townorder from 3 to 4 elements passed a reader audit, but two other writers still emitted the old 3-element array and silently truncated the extension mid-flight (~T+210s), reverting the feature in play. |
Grep every setVariable site for the exact key before extending a shared tuple's element count, not just the getVariable / reader sites. Ship reader and writer changes for the new shape atomically. |
2026-07-08, PR #910 adversarial-verify finding D2. |
SQF branch-scoped locals feeding shared tail code. A dispatch-write block shared by a bootstrap and a non-bootstrap branch read _mounted / _teamAir, but only the non-bootstrap branch assigned them, so the shared tail threw an undefined-variable error on every match's opening dispatches. |
Guard reads of branch-scoped locals in shared tail code with isNil "_varname" (string form works across branches) or hoist the assignment above the branch split so every path defines the local before the shared block runs. |
PR #910 adversarial-verify finding D1. |
Parameters.hpp default= values silently overriding SQF constants at mission start. Three features were live-OFF on the test box for this exact reason: SQF declared the constant as 1 (on), but the lobby param's default=0 wins for every match that never touches the params menu. |
When arming or auditing a feature flag, check the matching Parameters.hpp entry's default= value, not just the SQF constant declaration — the lobby default wins at mission start regardless of what the constant says. |
2026-07-08 lobby params audit. |
Transport direction is not authority, and it is not always symmetric. If the producer is already server-local, do not route a state change through a helper whose final hop is publicVariableServer. The current server-side pattern for supply rewards is a direct callback into the side-supply handler, matching the review fix recorded on PR #370.
PR #288 is a separate lesson: its review found the advertised side-supply desync was not proved as a functional bug. Keep this distinction sharp in future reviews:
-
publicVariableServerfrom server-side producer code is a direction trap. - Case-only or formatting-only key differences are often false positives until proven on the exact branch.
The current fleet prompt treats A3-only command reflexes as auto-rejects because OA 1.64 will not run them. Before source work, scan the diff for the prompt list: isEqualType, isEqualTo, params, pushBack, findIf, selectRandom, apply, forceFollowRoad, array reveal, worldSize, getPosVisual, A3 string find / substring select, sort-by-CODE and b_inf-style marker types.
Use Arma 2 OA command versions for the local wiki quick check, then verify any uncertain command against Bohemia's Arma 2 OA scripting command category before opening a source PR. Keep these distinctions straight:
-
_arr call BIS_fnc_selectRandomis an OA-safe function call;selectRandom _arris the A3 command form. -
visiblePositionis the OA-safe replacement for thegetPosVisualoverlay trap recorded in the compatibility audit. -
WFBE_CO_FNC_ArrayPush/set [count _array, value]is the OA append idiom; do not modernize it intopushBack. -
toArray/toStringplus a manual loop is the OA string fallback; do not paste A3 substringselector stringfindsnippets into mission code.
The group getVariable [name, default] trap is receiver-specific. Objects, side logics and missionNamespace can use the two-arg default form, but GROUP receivers need the helper or the one-arg getVariable + isNil shape. This matters most for AI commander and group-GC state because most groups never have every flag set.
Do not "simplify" existing WFBE_CO_FNC_GroupGetBool calls into inline two-arg group reads during review cleanup. That loses the exact A2/OA compatibility guard the helper exists to provide.
Treat _flag == true, _flag != false and _a == _b where both operands are Boolean as A2/OA hazards. The safe forms are direct conditions for one flag and explicit latches when two Boolean states must be compared. Numeric thresholds, string keys, side values and object identity checks can still use == / !=; the point is operand type, not the glyph itself.
SQF loop magic variables are convenient but fragile in nested code. Before adding an inner forEach, capture any outer _x / _this value that will be needed later. This is especially important in spawned bodies, town scans, vehicle scans and capture scoring where the old value can be used several lines after the inner loop.
Fleet features default off. When a feature uses a numeric threshold, the default 0 should mean "disabled", not "fire at zero". The robust shape is:
if (_threshold > 0) then {
if (_count >= _threshold) then {
// latch or apply the feature.
};
};Do not ask CfgVehicles questions about CfgWeapons classnames. For an infantry unit object:
-
primaryWeapon _unitis the rifle slot. -
secondaryWeapon _unitis the launcher slot. - A non-empty
secondaryWeaponis the simple "has launcher" signal used by recent review fixes. - If the exact launcher class matters, read
configFile >> "CfgWeapons" >> _weaponClassrather than using a vehicle-class predicate.
The related classname rule is simple: do not introduce classnames from memory. Either the class already appears in the target mission tree, or the PR body needs explicit config proof for the intended content set.
WFBE_CL_FNC_ConfirmAction style interactions are stateful. The first click records or displays confirmation state; the second click resolves it. If the surrounding handler writes MenuAction = -1 before the second click path runs, the confirm helper has nothing left to match and the action becomes unreachable.
Extending a shared tuple's element count is a writer-audit problem, not a reader-audit problem. wfbe_aicom_townorder grew from 3 to 4 elements; the reader audit passed because every reader was updated to expect 4 elements, but two other setVariable writers for the same key were missed and kept emitting 3-element arrays. The extension silently reverted mid-match (~T+210s) once one of the stale writers ran after the reader change landed. Before extending any shared setVariable-backed tuple, grep every setVariable site for the exact key — not only getVariable call sites — and land the writer and reader changes together.
A dispatch-write block shared by a bootstrap branch and a non-bootstrap branch relied on _mounted and _teamAir, but only the non-bootstrap branch assigned those locals before falling into the shared tail. Every match's opening dispatches ran the bootstrap branch first and hit an undefined-variable error the moment the shared tail read the unassigned locals. When a then/else split feeds into shared tail code, either hoist the assignment above the split so both branches define the local, or guard the read with isNil "_varname" (the string form works regardless of which branch executed).
A SQF constant declaring a feature "on" does not mean the feature is on in a live match. Parameters.hpp default= values win at mission start for any player who does not touch the lobby params menu, and three features were confirmed live-OFF on the test box because their lobby param default was 0 while the matching SQF constant said 1. When arming, auditing, or reasoning about a feature flag, check the Parameters.hpp entry's default= alongside the SQF constant — checking the constant alone is not sufficient proof of the flag's live state.
-
Group Bool getVariable A2-OA trap - the dedicated page for the group
getVariable [name, default]unset/nil trap. - Arma 2 OA command versions - first-version evidence and OA-safe replacements for command traps.
- Arma 2 OA compatibility audit - doc/source audit for Arma 3 assumptions and inverse traps.
- Networking and public variables - transport, direct PV channels and authority boundaries.
- Variable and naming conventions - identifier/key casing rules and naming contracts.
-
Array and collection utility reference - array helpers,
forEachidioms and sentinel caveats. -
ICBM authority playbook - high-risk
RequestSpecialand confirmation-adjacent tactical-menu flows.
Previous: Arma 2 OA compatibility audit | Next: Arma 2 OA command versions
Main map: Home | Fast path: Quickstart | Agent pack: LLM agent entry pack
Home | Agent Guide | Current live state | Release 1.2.2 (B91) | Quickstart | Progress | Lifecycle wait-chain | Join/disconnect | Parameters/build | Assets/config | SQF atlas | PV index | Modules | Support/specials | Commander/HQ | Commander vote/reassign | Construction/CoIn | Construction cleanup | WDDM compositions | Factory/purchase | Upgrades/research | Towns/camps/capture | Victory/endgame | Markers/cleanup | Server runtime | AI runtime/HC | AI commander audit | HC delegation | Town AI safety | Commander reassignment | Resistance supply | Player UI workflow | UI atlas | Respawn/death | Gear template filter | Vehicle cargo loop | Service guards | UI IDD repair | UI design inspiration | WASP overlay | Feature status | Source propagation | release readiness | Tooling readiness | Integration trust | AntiStack DB | Owner decisions | Shelved registry | Abandoned feature revival | Hardening roadmap | PVF dispatch | Server authority | ICBM authority | Attack-wave authority | Telemetry families | AICOM V2 cutover | Consumer port map | Testing workflow | Server ops | Web tools | Ecosystem repos | Arma 2 OA refs | A2 traps | OA compatibility audit | Coverage ledger | Navigation inventory | Pruning ledger | Knowledge roadmap | Agent context | Collab protocol | Worklog | Audit archive 2026-07 | Briefing reference | Utes invasion concept
- Shelved AICOM concepts - revivable someday ideas (owner-shelved 2026-07-03)
Docs rule: source-backed claims only; Arma 2 OA scripting docs only; gameplay edits start in Missions/[55-2hc]warfarev2_073v48co.chernarus.
- Getting started
- Status and coordination
- Agent context
- Agent collaboration protocol
- Agent worklog
- Agent worklog archive
- Progress dashboard
- PR cleanup and integration lab
- Shelved PR #169: gear price double-count
- Shelved PR #194: Chernarus no-trees
- Coordination board
- Codebase coverage ledger
- Bottleneck removal queue
- Current source status
- Wiki mirror reconciliation
- Navigation inventory
- Registers
- Agent orchestration
- Architecture
- Architecture overview
- Mission entrypoints and lifecycle
- Lifecycle wait chain
- Player join/disconnect and AntiStack lifecycle
- Mission parameters/localization/build inputs
- Stringtable localization key-family catalog
- Source inventory
- Content structure and maps
- Assets/config/localization/parameters
- Mission start parameters index
- Code and networking
- Gameplay systems
- Core systems index
- Gameplay systems atlas
- Commander/HQ lifecycle atlas
- Economy, towns and supply
- Economy system reference
- Balance asymmetries
- Anti-stack skill-balance mechanic
- Empty-side supply income stagnation
- Towns, camps and capture atlas
- Victory and endgame atlas
- Victory conditions reference
- Territorial victory reference
- Marker cleanup and restoration
- Marker loop engine and registries
- Map marker families content catalog
- Marker subsystem function reference
- Client marker FSM updater map
- Support specials and tactical modules
- SCUD TEL tactical munitions
- Naval HVT objectives (carriers/SCUD)
- SCUD saturation strike mechanic
- Takistan airfield FPV drone design
- Construction and CoIn systems
- Structure damage reduction & friendly-fire
- Construction logic list cleanup
- Flak tower & WDDM anchor compositions
- Resistance supply scaffold
- GUER Insurgents faction overview
- GUER Insurgents branch audit
- GUER insurgent player economy
- GUER Commissar Panel
- GUER air-defense loop (Ka-137/Mi-24)
- Upgrades and research atlas
- Supply mission architecture
- Supply mission authority cleanup
- Current supply helicopters PR1
- Respawn and death-loop lifecycle
- Vehicle theft economy pitch
- GUER tunnel network pitch
- Content, reference and catalogs
- Faction unit/vehicle roster catalog
- Auxiliary/SF/civilian unit catalog
- Gear store loadout route catalog
- Upgrade research (cross-faction)
- Gear store price and upgrade catalog
- Gear store catalog (complete, per faction)
- Defense structures catalog
- Artillery reference per faction
- AI squad team templates catalog
- Town AI lifecycle reference
- Town AI group composition catalog
- Class-skill system reference
- Player skill abilities reference
- Default gear template content catalog
- Chernarus map content reference
- Takistan map content reference
- Takistan features
- Takistan parity reference
- Takistan oilfields objective reference
- IRS IR-smoke countermeasure
- Arty module special munitions
- Zeta cargo sling-load reference
- Spawn primitive function reference
- Kill and score pipeline
- Waypoint helper function reference
- Position and proximity function reference
- Side/team state function reference
- Player AI watchdog and recovery
- AICOM stuck-recovery v2
- LoadoutManager data-model contributor guide
- Discord status bot setup and reference
- GLOBALGAMESTATS extension reference
- New player quickstart (player guide)
- Optional client mods (player guide)
- Earning funds and score (player guide)
- Vehicle service and logistics (player guide)
- Commander's handbook (player guide)
- Tactical support menu
- Paradrop player experience
- Supply missions (player guide)
- In-game briefing & Diary field manual
- Playable maps catalog
- Faction root variables reference
- Faction base structures catalog
- Counter-battery radar system
- Bank, Reserve and Artillery Radar structures
- Map ruleset model and object config
- Countermeasures module reference
- Vehicle countermeasure (flares/spoofing)
- UAV terminal and spotter system
- Artillery firing function reference
- Service Point pricing model
- Medic redeployment truck (forward spawn)
- Side-patrol runtime and convoy mechanics
- Day/night cycle and weather system
- Config lookup helper reference
- CIPHER sort utilities reference
- Modded maps status and content
- BattlEye filter setup and OA taxonomy
- Player squad/group join protocol
- AutoFlip vehicle recovery
- Engine stealth fuel toggle
- Valhalla vehicle climbing-assist
- Missile and ordnance Fired-EH reference
- Vehicle equip and rearm reference
- Array and collection utilities
- Server composition spawner reference
- Upgrade queue server loop
- Map boundaries and off-map enforcement
- Namespace/profile/diagnostic utilities
- Group bool getVariable A2-OA trap
- Vehicle weapon balance init
- View distance auto-throttle
- Camp & respawn-camp getters
- Performance audit writer
- Site clearance (bulldozer)
- Factory queue cancel & refund
- AI commander tunable constants
- Experimental feature-flag constants
- Flag system quick reference
- Mission tunable constants catalog
- Gear parsing & cargo capacity
- Structure dressing function
- Paradrop delivery functions
- ICBM nuke client VFX & radiation
- Server HandleSpecial router
- LocalizeMessage chat router
- Gear buy-menu render & price functions
- Server broadcast & telemetry loops
- Per-unit client init pipeline
- Vehicle marking & texture pipeline
- Defense category & budget
- Legacy AI order primitives
- Commander-team driver
- AICOM command verbs
- AICOM behavior fix taxonomy
- AI commander wildcard deck reference
- AICOM aircraft and airfield system
- Static-defense manning
- End-of-game stats screen
- AI commander execution loop
- Deployable bipod / weapon resting
- Town-economy getters
- Server-init deadspawn & airfield probe
- GUER VBIED detonate action
- Resource income-tick engine
- AI commander treasury accessors
- PVF send-helper contracts
- AICOM logging & AICOMSTAT telemetry
- AICOMSTAT v2 event census
- WASPSCALE v2 telemetry
- WASPSCALE v2-ext coverage audit
- Telemetry families reference
- Group lifecycle & entity reaping
- Batch AI spawner orchestrator
- Client funds/income HUD readout
- Server group GC & cap warning
- Town runtime tuning constants
- Client input/hotkey handler
- WASP base-repair system
- WASP DropRPG launcher/ordnance
- CoIn construction-interface client engine
- Town-capture garrison & airfield rebuild
- Map-control & minimap templates
- Client FPS & state telemetry
- Client service-proximity getters
- Airfield-exclusive roster & unit hints
- Unit-camera spectator system
- Town-garrison patrol/defense worker
- RequestTeamUpdate squad-discipline
- Arma2Warfare GPT assistant
- LoadoutManager build configs & defines
- GLOBALGAMESTATS extension logging
- Discord bot instrumented logging
- Eden/Everon & Taviana map content
- Cruise missile strike asset
- AI / HC
- AI headless and performance
- AI mods and pathfinding reference
- Headless client scaling and topology
- AI runtime/HC loop map
- Headless client init and stat loop
- HC delegation target selection
- Player AI caps and role balance
- Old WarfareBE FPS comparison
- AI commander autonomy audit
- Upstream BE 2073 AICOM delta
- Parent 2.073 divergence audit
- AI commander capture & fun plan
- AI commander B69 improvement roadmap
- AI commander B69 implementation sketches
- AICOM V2 cutover status
- Headless delegation and failover
- Commander reassignment call shape
- GUER Director living-resistance pitch
- Quality and operations
- Foundation perf findings & Tier-3 dead-ends
- Dead/stale code register
- Commander vote/reassignment
- Attack-wave authority
- Server runtime and operations
- Server ops runbook
- JIP enrollment & client data delivery (b74.2 lessons)
- Server gameplay runtime atlas
- PerformanceAuditAnalyzer
- Performance opportunity sweep
- Documentation plan
- Knowledge platform roadmap
- Wiki quality audit
- Wiki pruning and relevance ledger
- Audit findings queue (2026-06-03)
- Deep review findings
- Client UI / server-loop perf findings
- Performance gain simulation
- Self-host testing field notes
- Cleanup and work lanes
- Hardening and authority
- UI / player workflows
- Client UI, HUD and menus
- UI HUD and dialogs
- Player UI workflow map
- Client UI systems atlas
- UI IDD collision repair
- UI control class library reference
- UI theme palette and style macros
- UI design inspiration 2026-07
- Available-actions client gate FSM
- Gear/loadout/EASA atlas
- Gear template profile filter
- Vehicle cargo equip loop bounds
- Factory and purchase systems atlas
- Service menu affordability guards
- WASP overlay
- Class-skill system reference
- Skin selector and class swap
- Earplugs audio toggle
- Mission audio catalog
- HQ radio knowledge-base catalog
- QoL trio player hints
- Player vehicle/travel actions
- Tooling / release / integrations
- Tools and build workflow
- Warfare web tools
- Ecosystem & companion repos
- Zargabad tooling parity
- July 2026 release readiness
- Operator monitor and CPU affinity tools
- Tooling release readiness audit
- Source fix propagation queue
- Agent release readiness ledger
- Release source intake map
- Testing/debugging/release workflow
- Current RPT release gate
- RPT telemetry consumer port map
- External integrations
- Integration trust boundary audit
- AntiStack database extension audit
- Community & Dev
- Community & Dev
- Miksuu upstream wiki import / archive index
- Upstream changelog feature leads
- Developer history and upstream lessons
- Upstream Miksuu commit intel
- Upstream mining ledger
- Archive script mining v2
- Upstream BE 2073 AICOM delta
- Parent 2.073 divergence audit
- PR8 and Drone upstream lesson match
- Development lessons learned
- External research reports
- Audit archive 2026-07
- Briefing reference
- Utes invasion concept
- Miksuu archive: Home
- Miksuu archive: Welcome
- Miksuu archive: Big announcements
- Miksuu archive: Changelog
- Miksuu archive: Development process
- Miksuu archive: Discord bot
- Miksuu archive: Gameplay videos
- Miksuu archive: LoadoutManager
- Miksuu archive: Chernarus script architecture
- Base-game visual catalogs
- Compatibility and references
- HC upstream history and lessons
- Player stats branch audit
- BuyMenu EASA QoL branch audit
- Perf quick wins branch audit
- Commander positions branch audit
- Zargabad branch audit
- Quad AI Commander concept
- Arma 2 OA external reference guide
- Base-game config & image reference
- Arma 2 OA compatibility audit
- Arma 2 OA agent traps reference
- Arma 2 OA command versions
- Wiki source consistency
- External Arma 2 OA reference index