Skip to content

Gear Loadout And EASA Atlas

rayswaynl edited this page Jun 22, 2026 · 37 revisions

Gear, Loadout And EASA Atlas

This page maps the gear purchase, profile-template, aircraft loadout and generated balance systems. It connects the live client UI to the generated SQF emitted by Tools/LoadoutManager.

All mission paths are relative to Missions/[55-2hc]warfarev2_073v48co.chernarus/.

Read This First

Need Start here
Change player gear purchase UI Client/GUI/GUI_BuyGearMenu.sqf, then Client/Functions/Client_UI_Gear_*.sqf.
Fix profile-template persistence Gear template profile filter, then Client/Functions/Client_UI_Gear_SaveTemplateProfile.sqf.
Fix vehicle/backpack cargo application Vehicle cargo equip loop bounds, then Common/Functions/Common_EquipVehicle.sqf and Common_EquipBackpack.sqf.
Fix service rearm/refuel/repair/heal affordability parity Service menu affordability guards, then Client/GUI/GUI_Menu_Service.sqf.
Change gear catalog data Common/Config/Config_Weapons.sqf, Config_Magazines.sqf, Config_SetTemplates.sqf, Config_SortWeapons.sqf, Config_SortMagazines.sqf.
Change aircraft loadouts Tools/LoadoutManager/Data/Vehicles/Aircrafts/**, not generated Client/Module/EASA/EASA_Init.sqf by hand.
Change aircraft balance Tools/LoadoutManager data classes, then regenerate Common/Functions/Common_BalanceInit.sqf.
Debug EASA in-game Client/GUI/GUI_Menu_EASA.sqf, Client/Module/EASA/EASA_Equip.sqf, Common/Functions/Common_RearmVehicle.sqf.

Current Branch Scope

Refreshed 2026-06-22 against current docs/source HEAD@e9dd7f37d1f5, current stable origin/master@0139a3468609, current B69 origin/claude/b69@8d465fce, adjacent B74 origin/claude/b74-aicom-spend@b23f557f, current Miksuu master@b8389e748243, origin/perf/quick-wins@0076040f8a5e, historical release commit a96fdda28087 and historical EASA QoL commit a66d46912e2a. Targeted diffs from the 2026-06-21 gear-template checkpoint 43c3ba05 to current docs HEAD over checked profile/template paths returned no source changes, so the docs/source line evidence remains the same while the head anchor is current. Cargo loop scope was corrected again on 2026-06-22 after direct upstream verification showed current Miksuu is master@b8389e748243, not local branch commit d9506078. Service/EASA paths were rechecked through HEAD@e9dd7f37 and remain source-unchanged from 8906ee89, 9b3fc38e and 8b71e2a1; current B69 is unchanged from finalpieces 80d3267c and current B74 is unchanged from B69 for checked service/EASA paths. Current origin exposes no release/*, service, EASA, gear, buy or QoL feature head on 2026-06-22.

Area Branch result Canonical route
Profile/template save, import and creation gates Branch-split after current-stable task 44: docs/source 72b5f0de98f9, current Miksuu b8389e748243, perf 0076040f8a5e, historical release a96fdda28087 and historical EASA QoL a66d46912e2a keep undefined _u_upgrade in Client_UI_Gear_SaveTemplateProfile.sqf:33,52,75; current stable origin/master@0139a3468609 fixes that save-filter comparison in both maintained roots at :34,57,82. All checked refs still keep the six-field Init_ProfileGear.sqf:17 guard before reading :25, the AddTemplate Barracks-or-Gear gate at Client_UI_Gear_AddTemplate.sqf:136 and Gear-only FillTemplates display at Client_UI_Gear_FillTemplates.sqf:17. Gear template profile filter
Vehicle/backpack cargo application Docs branch b2544207, current Miksuu master@b8389e748243 and historical EASA QoL commit a66d4691 still carry inclusive loops in both maintained roots. Current stable origin/master@0139a346 and historical release commit a96fdda2 fix all five loops to count(_items) - 1 in both maintained roots. Perf fixes Chernarus only; perf Vanilla remains old-shape. Vehicle cargo equip loop bounds
Service rearm/refuel/repair/heal Docs/source HEAD@e9dd7f37, current Miksuu upstream master@b8389e748243, perf and historical EASA QoL keep the old cached-price/action-debit shape. Current stable origin/master@0139a346, current B69 origin/claude/b69@8d465fce, adjacent B74 origin/claude/b74-aicom-spend@b23f557f, local checkpoint d9506078 and historical release commit a96fdda2 use newer controller code and partially guard rearm/refuel in both maintained roots, but repair/heal and broader action-time context/funds checks remain open. Service menu affordability guards
EASA purchase Current stable, current Miksuu upstream, perf, historical release and historical EASA QoL still use strict _funds > price and client-side EASA_Equip / ChangePlayerFunds debit. Line drift: docs/Miksuu/perf use GUI_Menu_EASA.sqf:47-49; current stable/local d9506078 use :118-120; historical release uses :76-78; historical EASA QoL uses :58-60 in Chernarus and old lines in Vanilla. Current B69 origin/claude/b69@8d465fce and adjacent B74 origin/claude/b74-aicom-spend@b23f557f are identical for checked EASA paths: Chernarus uses _funds >= price at :118, maintained Vanilla remains strict >. Service menu affordability guards, BuyMenu EASA QoL branch audit
EASA QoL branch Historical EASA QoL commit a66d4691 adds current-loadout highlighting/preselect only in Chernarus; it does not fix exact-funds purchase, stale/unsupported context handling, profile templates, cargo loops or maintained Vanilla propagation. Current origin exposes no feat/buymenu-easa-qol head on 2026-06-22. BuyMenu EASA QoL branch audit

System Map

flowchart TD
    GearConfig["Common/Config gear catalogs"] --> GearPools["WFBE_%SIDE_* gear pools"]
    GearPools --> BuyGear["GUI_BuyGearMenu.sqf"]
    Profile["profileNamespace WFBE_PERSISTENT_%SIDE_GEAR_TEMPLATE"] --> BuyGear
    BuyGear --> EquipUnit["Common_EquipUnit.sqf"]
    BuyGear --> EquipVehicle["Common_EquipVehicle.sqf"]
    BuyGear --> Funds["ChangeClientFunds / wfbe_funds"]

    CSharp["Tools/LoadoutManager aircraft data"] --> GeneratedEASA["Client/Module/EASA/EASA_Init.sqf"]
    CSharp --> GeneratedBalance["Common/Functions/Common_BalanceInit.sqf"]
    GeneratedEASA --> EASAUI["GUI_Menu_EASA.sqf"]
    EASAUI --> EASAEquip["EASA_Equip.sqf"]
    EASAEquip --> VehicleState["vehicle WFBE_EASA_Setup"]
    VehicleState --> Rearm["Common_RearmVehicle.sqf"]
    GeneratedBalance --> Rearm
Loading

Gear Catalog Data Model

Gear metadata is stored in missionNamespace under weapon class names and Mag_<class> names.

Source Responsibility Evidence
Common/Config/Config_Weapons.sqf Defines weapon metadata and price/upgrade/category fields. Config_Weapons.sqf:20-42
Common/Config/Config_Magazines.sqf Defines magazine metadata using Mag_<class> keys. Config_Magazines.sqf:16-32
Common/Config/Config_SortWeapons.sqf Builds side pools such as WFBE_%SIDE_Primary, Pistols, Secondary, Equipment, All. Config_SortWeapons.sqf:19-57
Common/Config/Config_SortMagazines.sqf Builds side magazine pools. Config_SortMagazines.sqf:13-29
Common/Config/Config_SetTemplates.sqf Builds side template arrays under WFBE_%SIDE_Template. Config_SetTemplates.sqf:33-47, :113-132

The buy-gear dialog fills its views from those side pools. GUI_BuyGearMenu.sqf:122-130 selects templates or side gear arrays based on the current tab.

Buy Gear Runtime

Rsc/Dialogs.hpp:530-533 loads Client/GUI/GUI_BuyGearMenu.sqf for WFBE_BuyGearMenu (idd=503000). Client init compiles the gear helpers at Client/Init/Init_Client.sqf:116-126.

The controller is a fast polling UI loop:

  • It uses WFBE_MenuAction action codes rather than MenuAction (GUI_BuyGearMenu.sqf:27, :47-62).
  • It updates views for gear, backpack and vehicle modes (GUI_BuyGearMenu.sqf:144-146).
  • It applies purchases locally through WFBE_CO_FNC_EquipUnit or WFBE_CO_FNC_EquipVehicle (GUI_BuyGearMenu.sqf:429, :439).
  • It deducts money client-side with WFBE_CL_FNC_ChangeClientFunds (GUI_BuyGearMenu.sqf:441).
  • It sleeps 0.01 while open (GUI_BuyGearMenu.sqf:503).

This is a legacy client-authoritative path. It fits the broader economy ceiling from Deep-review findings DR-14 and DR-16: buying units, selling structures and gear/EASA purchases all rely on trusted client-side checks and money mutation unless a future redesign introduces server validation or BattlEye script filters.

Profile Templates

Profile templates are loaded only when the OA version gate compiles the profile functions (Client/Init/Init_Client.sqf:169-172). The profile key is:

WFBE_PERSISTENT_%SIDE_GEAR_TEMPLATE

Evidence:

  • Client/Init/Init_ProfileVariables.sqf:37-42 reads the profile key.
  • Client/Init/Init_ProfileGear.sqf:128-144 validates and replaces side templates.
  • Client/Functions/Client_UI_Gear_SaveTemplateProfile.sqf:94-95 writes the profile key and calls saveProfileNamespace.

Template Risk

The _u_upgrade undefined-variable bug is branch-split. Current docs/source, Miksuu, perf, historical release and historical EASA QoL still reference _u_upgrade at Client_UI_Gear_SaveTemplateProfile.sqf:33,52,75. Current stable origin/master@0139a346 fixes task 44 in both maintained roots: the weapon, magazine and backpack loops now compare _get select 3 (the item's own required upgrade level) against both _upgrade_barracks and _upgrade_gear at :34,57,82. The focused patch shape and smoke plan remain in Gear template profile filter for docs/source and old-shape refs.

The visible template list also filters by current gear upgrade (Client_UI_Gear_FillTemplates.sqf:15-22). Higher-upgrade saved templates can be valid but hidden until the side upgrades gear again; support/debug docs should distinguish hidden-by-upgrade from deleted profile data.

Template creation has a separate UX/support trap. Client_UI_Gear_AddTemplate.sqf:34-132 rejects foreign weapons, magazines and backpack items when WFBE_Allow_HostileGearSaving is false, then exits with a generic "foreign equipment" hint at :132. It can also reject an otherwise well-formed template when its max upgrade is above current gear or barracks level (:150). Because the current source initializes WFBE_Allow_HostileGearSaving = true in Init_Client.sqf:10, this foreign-equipment refusal is a dormant/config-sensitive behavior in the checked-in profile, not the default live path. If that flag is ever tightened, add clearer UI copy and smoke hostile gear, backpacks, saved profile rows and higher-upgrade templates together.

The buy-gear dialog also has a template-coverage gap for vehicle/backpack cargo. Template creation at GUI_BuyGearMenu.sqf:454 passes only selected weapons, magazines and backpack content into WFBE_CL_FNC_UI_Gear_AddTemplate; the nearby TODO at :482 still says "template for veh / bp". Price calculation does include vehicle/backpack content at :485, so a purchase can still apply those selections, but profile-template persistence is not a full snapshot of the visible vehicle/backpack gear state. Support docs should distinguish "purchase can apply cargo" from "template can save cargo".

EASA Runtime

EASA is the aircraft loadout system. It is not an Arma 3 pylon system; it is Arma 2 OA weapon/magazine mutation.

Step Source Notes
Service menu opens EASA Client/GUI/GUI_Menu_Service.sqf:30-37, :240-244 Requires service context, driver and EASA upgrade gating.
Dialog loads aircraft rows Client/GUI/GUI_Menu_EASA.sqf:3-5 Reads WFBE_EASA_Vehicles and WFBE_EASA_Loadouts.
AA rows are filtered GUI_Menu_EASA.sqf:16-20 Uses WFBE_C_GAMEPLAY_AIR_AA_MISSILES and WFBE_UP_AIRAAM.
Purchase applies loadout GUI_Menu_EASA.sqf:46-50 Calls EASA_Equip, deducts funds with ChangePlayerFunds.
Equip mutates vehicle Client/Module/EASA/EASA_Equip.sqf:28-36 Adds magazines/weapons; Wildcat uses turret-specific commands.
Vehicle stores chosen setup EASA_Equip.sqf:36 WFBE_EASA_Setup is public vehicle state.
Rearm reapplies setup Common/Functions/Common_RearmVehicle.sqf:65-69 Reapplies saved EASA setup after balance/AA restriction pass.

EASA_Init.sqf:667-668 marks AA missile rows by checking each loadout magazine's CfgMagazines >> ammo, then CfgAmmo >> airLock and inherited class MissileBase, then stores:

  • WFBE_EASA_Vehicles
  • WFBE_EASA_Loadouts
  • WFBE_EASA_Default

Focused EASA review found two local correctness edges in the menu flow:

  • GUI_Menu_EASA.sqf:40-53 uses _funds > price, so an exact-funds purchase is rejected and can display "missing $0" even though the player has the listed price.
  • The service menu opens EASA from a cached vehicle/context snapshot, and EASA_Equip.sqf:8-38 silently exits if the current vehicle is unsupported. Without an action-time recheck, a stale menu can debit/show success while equipping nothing.
  • GUI_Menu_EASA.sqf:3-4 has an earlier fail-open variant: when the dialog loads on an unsupported current vehicle, it exits after logging "GUI_Menu_EASA.sqf: Player vehicle [%1] was not found within the list." but does not closeDialog 0. Treat blank/partial EASA surfaces as stale-context evidence, not just cosmetic UI weirdness.

Historical EASA QoL commit a66d4691 adds EASA current-loadout highlighting/preselect in the menu (GUI_Menu_EASA.sqf:29-40) but does not change the purchase action at GUI_Menu_EASA.sqf:46-50 or EASA_Equip.sqf. Current origin exposes no feat/buymenu-easa-qol head on 2026-06-22, so treat that commit as historical UI-orientation evidence only; exact-funds and stale/unsupported context gates remain open. See BuyMenu EASA QoL branch audit.

DR-28 Authority Finding

Claude DR-28 completed the source review for EASA and vehicle service actions. The flow is client-authoritative:

  • GUI_Menu_EASA.sqf:46-50 performs the affordability check on the client, calls EASA_Equip, then debits via ChangePlayerFunds.
  • EASA_Equip.sqf:28-36 mutates the local aircraft with addWeapon / addMagazine or turret variants, then only broadcasts the chosen WFBE_EASA_Setup index.
  • GUI_Menu_Service.sqf rearm (MenuAction == 1, ~line 482) and refuel (MenuAction == 3, ~line 505) both guard the debit with an explicit _funds >= price check in current stable/B69/B74 (comment: "QoL: affordability guard (parity with repair/heal)"). Repair (MenuAction == 2, ~line 493) debits when _repairPrice > 0 and heal (MenuAction == 5, ~line 516) when _healPrice > 0, relying on button-disable state rather than an action-time funds comparison. The residual gap — repair and heal lacking explicit action-time funds checks — is documented in Service menu affordability guards.

This is not a separate one-off bug class. It completes the economy authority map: build, buy, sell, side supply, upgrades, ICBM/special weapons, gear, EASA and service actions all rely on client-side spend/effect authority unless a future hardening pass moves the ledger and effect validation server-side or constrains the client with BattlEye script filters.

Generated Files And LoadoutManager

Tools/LoadoutManager/Program.cs:6 runs SqfFileGenerator.GenerateCommonBalanceInitAndTheEasaFileForEachTerrain().

The generator writes:

Generated target Writer evidence Purpose
Client/Module/EASA/EASA_Init.sqf Data/Terrains/BaseTerrain.cs:99 Vehicle list, loadout rows and default EASA setup.
Common/Functions/Common_BalanceInit.sqf BaseTerrain.cs:100 Generated vehicle balance mutations.
Common/Common_ReturnAircraftNameFromItsType.sqf BaseTerrain.cs:101 Aircraft display/radar-name helper.
version.sqf BaseTerrain.cs:102 Terrain-specific generated version metadata.
Common/Functions/Common_ModifyAirVehicle.sqf insertion block BaseTerrain.cs:84-86 Generated aircraft damage-model changes.

Do not hand-edit generated EASA/balance output unless you are making an emergency local experiment and plan to port it back into the C# data model. The next LoadoutManager run can overwrite generated SQF.

Balance And AA Gates

Common/Functions/Common_BalanceInit.sqf:3-4 intentionally exits on server to prevent an occasional freeze:

if (isServer) exitWith {};

That creates a subtle locality edge:

  • Server/Functions/Server_BuyUnit.sqf:139 calls BalanceInit on server-created vehicles, but generated balance exits immediately there.
  • Common/Functions/Common_RearmVehicle.sqf:50 calls BalanceInit during rearm on whoever runs the script.
  • Server_BuyUnit.sqf:157-160 and Common_RearmVehicle.sqf:55-58 also call WFBE_CO_FNC_RemoveAAMissiles based on WFBE_C_GAMEPLAY_AIR_AA_MISSILES and WFBE_UP_AIRAAM.

AA policy is path-dependent. EASA filters AA rows through WFBE_C_GAMEPLAY_AIR_AA_MISSILES and WFBE_UP_AIRAAM (GUI_Menu_EASA.sqf:15-20), client build and server buy paths also call WFBE_CO_FNC_RemoveAAMissiles (Client_BuildUnit.sqf:287-293; Server_BuyUnit.sqf:155-162), and rearm reapplies the same gate (Common_RearmVehicle.sqf:53-60). Start/pre-placed vehicles and unusual creation paths still need live smoke before claiming every aircraft/SAM follows the same AA policy.

Safe rule: when changing aircraft balance or AA loadouts, test initial spawn, start vehicles, purchased vehicles, EASA purchase and service/rearm behavior separately. A client-side rearm path may apply balance that a server-side spawn path skips.

Dangerous Loadout Metadata

The C# data model contains explicit crash-warning classes:

Source Evidence
Tools/LoadoutManager/Data/Weapons/WeaponType.cs WARNING_GAME_CRASH_DO_NOT_USE_IN_LOADOUTS_CRV7PG maps to CRV7_PG at :121-122.
Tools/LoadoutManager/Data/Ammunition/AmmunitionType.cs The matching warning ammunition enum exists under the singular Data/Ammunition folder.
Tools/LoadoutManager/Data/Ammunition/Implementations/.../WARNING_GAME_CRASH_DO_NOT_USE_IN_LOADOUTS_TWELVEROUNDCRV7PG.cs Warning implementation exists for the 12-round CRV7PG ammunition.
Tools/LoadoutManager/Data/Vehicles/Aircrafts/Implementations/BLUFOR/WILDCAT.cs Wildcat vanilla turret default references the warning ammunition at :35-38.

Treat WARNING_GAME_CRASH_DO_NOT_USE_IN_LOADOUTS_* as hard blockers, not normal TODO names. Do not copy them into new loadouts without testing the exact vehicle/turret behavior in Arma 2 OA.

Known Risks

Risk Evidence Recommended action
Gear purchase, EASA purchase and service actions are client-authoritative. GUI_BuyGearMenu.sqf:429-441, GUI_Menu_EASA.sqf:46-50, EASA_Equip.sqf:28-36, GUI_Menu_Service.sqf:196-200, :217-219; Claude DR-28. For public-server hardening, decide between a server funds/effects ledger and BattlEye script filters. If touching service code first, use Service menu affordability guards for local price/funds/context parity, but treat that as a correctness patch rather than real anti-cheat.
EASA exact-funds and stale-context handling are locally wrong. GUI_Menu_EASA.sqf:3-4 exits early on unsupported current vehicle without closing the dialog; :40-53 rejects _funds == price; GUI_Menu_Service.sqf:30-41, :240-244 and EASA_Equip.sqf:8-38 allow stale/unsupported vehicle context to no-op after menu selection. Recheck current vehicle, support eligibility, selected row and funds at action time; close or recover the dialog on unsupported vehicles; use >= for affordability if exact cash should buy the listed loadout. Smoke exact-price, under-price, unsupported/stale vehicle and driver-switch cases.
Profile template upgrade filtering references undefined _u_upgrade on docs/source and old-shape refs. Docs/source, Miksuu, perf, historical release and historical EASA QoL keep Client_UI_Gear_SaveTemplateProfile.sqf:33, :52, :75; current stable origin/master@0139a346 fixes the comparisons at :34, :57, :82. Gear template profile filter owns the patch shape and branch matrix. Patch old-shape targets before trusting saved templates to enforce upgrade gates; do not reopen the save-filter edit on current stable.
Profile template import guard allows six-element rows before reading index 6. Client/Init/Init_ProfileGear.sqf:17 accepts count _x >= 6, then :25 reads _x select 6 for backpack data; Gear template profile filter and Current Branch Scope preserve the branch matrix. Require count _x >= 7 before selecting backpack data, or branch old six-field templates through a compatibility default. Smoke old profile rows and current seven-field rows.
Buy-gear templates do not fully capture vehicle/backpack cargo selections. GUI_BuyGearMenu.sqf:454 passes only weapon, magazine and backpack-content arrays into AddTemplate; :482 still carries a vehicle/backpack template TODO; :485 includes vehicle/backpack content in price calculation. Decide whether templates should save the full visible buy-gear state. If yes, extend the template schema deliberately and add old-profile compatibility gates.
Respawn penalty mode 5 can skip custom gear at base/HQ despite no charge. Client_OnRespawnHandler.sqf:54-70; Respawn and death lifecycle atlas. If mode 5 means charge-on-mobile only, make _skip respect _charge; smoke custom gear respawn at base and mobile with insufficient funds.
Vehicle/backpack cargo equip loops overrun by one. Common_EquipVehicle.sqf:27,33,39 and Common_EquipBackpack.sqf:35,41 use inclusive for '_i' from 0 to count(_items) bounds in old-shape targets; Vehicle cargo equip loop bounds owns the fix route and Current Branch Scope preserves the branch split. Port or preserve the current stable/release count(_items)-1 fix for any target branch still carrying inclusive loops, including current Miksuu b8389e748243, then propagate Vanilla and smoke cargo application.
Buy-gear click-pool bounds are not currently proven off-by-one. GUI_BuyGearMenu.sqf:44-45 accepts one-based click slots with <= _size; Dialogs.hpp emits magazine slot IDs as 1..12 and gun slot IDs as 1..8, and Client_RemoveMagazineGear.sqf:21 treats the value as one-based cumulative size. Do not file this as a confirmed bug. A small hardening patch could still reject < 1 before calling remove.
EASA/Economy duplicate dialog IDD. Rsc/Dialogs.hpp:3209-3212, :3287-3290; Claude DR-17. UI IDD collision repair owns the exact branch matrix and smoke checklist. Preserve or port the stable/release dialog IDD split before adding scripts that use display-ID lookup.
Balance exits on server, but server spawn code calls it. Common_BalanceInit.sqf:3-4, Server_BuyUnit.sqf:139 Test spawn/rearm separately; document intended locality before moving balance logic.
AA missile gating is not proven universal. GUI_Menu_EASA.sqf:15-20, Client_BuildUnit.sqf:287-293, Server_BuyUnit.sqf:155-162, Common_RearmVehicle.sqf:53-60. Smoke start/pre-placed aircraft, purchased aircraft, SAMs, EASA loadouts and service rearm before treating WFBE_C_GAMEPLAY_AIR_AA_MISSILES / WFBE_UP_AIRAAM as complete coverage.
Generated files can be overwritten. BaseTerrain.cs:99-102 Change LoadoutManager data classes first, then regenerate.
Crash-warning CRV7PG metadata still exists. WeaponType.cs:121-122, WILDCAT.cs:35-38 Keep warning names visible and avoid using them in new loadout combinations.

Safe Change Rules

  • Edit gear catalog SQF for infantry/vehicle cargo metadata; edit LoadoutManager C# for aircraft/EASA/balance metadata.
  • After changing mission SQF, remember the Chernarus source mission is canonical; generated missions require LoadoutManager propagation.
  • After changing LoadoutManager, inspect generated EASA_Init.sqf and Common_BalanceInit.sqf diffs before trusting the output.
  • Do not confuse RscMenu_Economy (idd 23000) with RscMenu_EASA (idd 24000) when scripting display-ID lookups. On branches that predate UI IDD collision repair, verify actual IDD values before using numeric display-ID targets.
  • Do not assume server-side validation exists for gear/EASA funds or upgrade gates.

Agent Index Facts

[
  {"fact":"gear_metadata_store","source":"Common/Config/Config_Weapons.sqf:34-42; Config_Magazines.sqf:24-32","summary":"Weapon and magazine metadata are missionNamespace-backed arrays keyed by class name or Mag_<class>."},
  {"fact":"gear_templates_profile_key","source":"Client_UI_Gear_SaveTemplateProfile.sqf:94","summary":"Saved gear templates persist under WFBE_PERSISTENT_%SIDE_GEAR_TEMPLATE."},
  {"fact":"gear_purchase_authority","source":"GUI_BuyGearMenu.sqf:429-441","summary":"Gear purchases apply equipment and deduct funds client-side."},
  {"fact":"easa_generated_runtime","source":"BaseTerrain.cs:99; EASA_Init.sqf:668","summary":"EASA runtime arrays are generated by LoadoutManager, then published as WFBE_EASA_Vehicles/Loadouts/Default."},
  {"fact":"easa_vehicle_state","source":"EASA_Equip.sqf:36; Common_RearmVehicle.sqf:65-69","summary":"The selected EASA setup is stored on the vehicle as public WFBE_EASA_Setup and reapplied during rearm."},
  {"fact":"easa_authority_dr28","source":"GUI_Menu_EASA.sqf:46-50; EASA_Equip.sqf:28-36","summary":"EASA affordability, debit and loadout application are client-side; the server receives only public vehicle setup state."},
  {"fact":"easa_exact_funds_stale_context","source":"GUI_Menu_EASA.sqf:40-53; GUI_Menu_Service.sqf:30-41,240-244; EASA_Equip.sqf:8-38","summary":"EASA rejects exact-funds purchases and can no-op after stale/unsupported vehicle context unless action-time guards are added."},
  {"fact":"service_authority_dr28","source":"GUI_Menu_Service.sqf:196-200; GUI_Menu_Service.sqf:217-219","summary":"Vehicle service rearm/refuel debit unconditionally and run client-local effects without a server authority check; Service-Menu-Affordability-Guards.md owns the small local parity patch."},
  {"fact":"gear_easa_branch_scope_2026_06_22","source":"docs branch b2544207 cargo paths and HEAD@e9dd7f37 service/EASA paths; origin/master@0139a346; origin/claude/b69@8d465fce; origin/claude/b74-aicom-spend@b23f557f; current Miksuu master@b8389e748243; perf/quick-wins@0076040f; historical release a96fdda2; historical EASA QoL a66d4691; B69 finalpieces 80d3267c as provenance; local d9506078 belongs to origin/claude/* branch evidence, not current Miksuu upstream","summary":"Gear profile/template save filtering is branch-split: docs/source and old refs keep undefined _u_upgrade, while current stable fixes it in both maintained roots. The six-field profile import guard and template creation/display policy remain open across checked refs; cargo loops are fixed on current stable and historical release, but current Miksuu, perf Vanilla and docs/EASA old-shape targets still need the loop-bound port. Service/EASA remains partial: current stable, B69 and adjacent B74 guard service rearm/refuel only, while EASA exact-funds/client debit remains open everywhere checked except B69/B74 Chernarus-only exact-funds UI evidence."},
  {"fact":"balance_server_exit","source":"Common_BalanceInit.sqf:3-4; Server_BuyUnit.sqf:139","summary":"Generated balance exits on server even though server buy code calls it."},
  {"fact":"crv7pg_warning","source":"WeaponType.cs:121-122; WILDCAT.cs:35-38","summary":"CRV7PG warning metadata is explicitly marked as game-crash dangerous and still referenced in Wildcat data."}
]

Continue Reading

Previous: Client UI systems atlas | Next: Tools/build workflow

Main map: Home | Fast path: Quickstart | Agent file: agent-context.json

Sidebar

Clone this wiki locally