-
Notifications
You must be signed in to change notification settings - Fork 0
Client Service Structure Proximity Getters
Source-verified 2026-06-21 against master 0139a346. Paths relative to Missions/[55-2hc]warfarev2_073v48co.chernarus/ unless noted. Arma 2 OA 1.64.
This page documents the three client-side "which friendly logistics structure am I near" getters — Client_GetClosestAirport, Client_GetClosestCamp and Client_GetClosestDepot — plus the GUER-only town-center EASA predicate Client_CanUseTownCenterEASA that sits beside them in the same registration block. Each getter runs nearEntities over a WFBE_Logic_* proxy class, applies a side/alive/state filter specific to that structure, and returns the matching object or objNull. They are the proximity backbone behind the action FSM's gear/depot/hangar gates, the gear-store target picker, and the buy-units and service menus.
These are distinct from the generic Common_* proximity helpers (GetClosestEntity*, GetClosestLocation*, SortByDistance, BuildingInRange) documented in Position And Proximity Function Reference: those operate on caller-supplied lists or the global towns array, whereas these Client_* getters scan a fixed WFBE_Logic_* class and bake in the player's sideID ownership test. The EASA repair-point siblings (Client_CanUseRepairPointEASA, Client_GetRepairTruckServicePoints, Client_CanRepairCampNearby) are covered in Player Skill Abilities Reference and are not repeated here.
All four are compiled into WFBE_CL_FNC_* aliases in the client function-load block of Init_Client.sqf.
| Function | Compile alias | Registration | Source | Returns |
|---|---|---|---|---|
Client_GetClosestAirport.sqf |
WFBE_CL_FNC_GetClosestAirport |
Client/Init/Init_Client.sqf:105 |
Client/Functions/Client_GetClosestAirport.sqf:1-16 |
Airfield logic object, or objNull
|
Client_GetClosestCamp.sqf |
WFBE_CL_FNC_GetClosestCamp |
Client/Init/Init_Client.sqf:126 |
Client/Functions/Client_GetClosestCamp.sqf:1 |
Camp logic object, or objNull
|
Client_GetClosestDepot.sqf |
WFBE_CL_FNC_GetClosestDepot |
Client/Init/Init_Client.sqf:127 |
Client/Functions/Client_GetClosestDepot.sqf:1 |
Depot logic object, or objNull
|
Client_CanUseTownCenterEASA.sqf |
WFBE_CL_FNC_CanUseTownCenterEASA |
Client/Init/Init_Client.sqf:124 |
Client/Functions/Client_CanUseTownCenterEASA.sqf:1-29 |
true/false
|
Each getter takes [_positionOrObject, _range] (callers pass vehicle player), scans a WFBE_Logic_* class with nearEntities, and assigns _closest on the last matching entity in the iteration (no nearest-sort — the last qualifying _x wins). All three default _closest to objNull (Client_GetClosestAirport.sqf:9, Client_GetClosestCamp.sqf:1, Client_GetClosestDepot.sqf:1), so callers test the result with isNull.
| Getter | Scanned class | Required state | Side filter | Source |
|---|---|---|---|---|
| Airport | WFBE_Logic_Airfield |
wfbe_hangar is set and alive
|
No side test — any side's player matches an alive-hangar airfield in range |
Client_GetClosestAirport.sqf (one-liner) |
| Camp | WFBE_Logic_Camp |
alive (_x getVariable "wfbe_camp_bunker") |
(_x getVariable "sideID") == sideID, unless the optional 3rd arg _ignore_side is true
|
Client_GetClosestCamp.sqf:1 |
| Depot | WFBE_Logic_Depot |
sideID set and isNil {_x getVariable "wfbe_inactive"}
|
(_x getVariable "sideID") == sideID |
Client_GetClosestDepot.sqf:1 |
Per-getter detail:
-
Airport — The forEach guards on
!(isNil {_x getVariable "wfbe_hangar"}), thenalive _hangar. The side branch keys offsideJoined: resistance players additionally require the airfield'swfbe_airfield_side(read with defaultcivilian) to equalresistance, so GUER only gets a neutral/captured-airfield match for an airfield they actually hold; WEST/EAST take theelsebranch and accept any alive-hangar airfield in range (Client_GetClosestAirport.sqf:14). -
Camp — Reads the optional third parameter into
_ignore_sideviaif (count _this > 2), defaultingfalse. The guard chain is!(isNil sideID)->alive wfbe_camp_bunker-> side test. When_ignore_sideistruethe side test is skipped entirely, so any alive-bunker camp in range matches (Client_GetClosestCamp.sqf:1). Note the file's own header comment mislabels it as "closest depot" — it scansWFBE_Logic_Camp. -
Depot — The tightest filter: a single combined test
(_x getVariable "sideID") == sideID && isNil {_x getVariable "wfbe_inactive"}, so a depot whosewfbe_inactiveflag has been set is skipped even when owned by the player's side (Client_GetClosestDepot.sqf:1).
The Camp and Depot getters compare each structure's sideID variable against the client-global sideID (the joining player's numeric side). This is a structure-ownership test, not a side comparison via side/sideJoined — the structure must carry a matching numeric sideID. The Airport getter does not use sideID; it gates resistance on wfbe_airfield_side instead.
| Consumer | Getter(s) used | What it gates | Source |
|---|---|---|---|
| Action FSM — field gear |
GetClosestCamp, GetClosestDepot
|
gearInRange: when WFBE_C_TOWNS_GEAR (_buygearfrom) is 1/2/3, picks camp / depot / either at _gear_field_range (WFBE_C_UNITS_PURCHASE_GEAR_MOBILE_RANGE) |
Client/FSM/updateavailableactions.fsm:162-167 |
| Action FSM — town depot | GetClosestDepot |
depotInRange at _tcr; a hit also sets serviceInRange = true
|
Client/FSM/updateavailableactions.fsm:194-195 |
| Action FSM — hangar | GetClosestAirport |
hangarInRange at _pura, only when WFBE_C_GAMEPLAY_HANGARS_ENABLED > 0
|
Client/FSM/updateavailableactions.fsm:202-204 |
| Gear-store AI target picker |
GetClosestCamp, GetClosestDepot
|
_add: when _camp_gear_enabled, _gear_mode 1/2/3 selects camp / depot / either at the unit's mobile gear range |
Client/Functions/Client_UI_Gear_UpdateTarget.sqf:30-35 |
| Buy-units menu |
GetClosestDepot, GetClosestAirport
|
'Depot' case at WFBE_C_TOWNS_PURCHASE_RANGE; 'Airport' case at WFBE_C_UNITS_PURCHASE_HANGAR_RANGE, whose result also feeds the captured-airfield roster swap |
Client/GUI/GUI_Menu_BuyUnits.sqf:327,331 |
| Service menu | GetClosestDepot |
Town depots added to the per-target _nearSupport list at WFBE_C_UNITS_SUPPORT_RANGE
|
Client/GUI/GUI_Menu_Service.sqf:296 |
The case 3 / _gear_mode 3 "either" path in the FSM and gear picker iterates [GetClosestCamp, GetClosestDepot] and takes the first non-null with if !(isNull _x) exitWith (updateavailableactions.fsm:165, Client_UI_Gear_UpdateTarget.sqf:33). The buy-units 'Airport' case feeds its result straight into the Task-12 captured-airfield exclusive-roster swap (GUI_Menu_BuyUnits.sqf:334).
A boolean predicate [_unit, _vehicle] -> bool that grants the aircraft-loadout editor (EASA) at friendly town centers for the playable GUER faction. GUER Insurgents are base-less — no service points, no EASA upgrade economy — so EASA is offered at town centers instead, mirroring the WEST/EAST service-point path (Client_CanUseRepairPointEASA). It is GUER-only by construction (Client_CanUseTownCenterEASA.sqf:2-6).
Early-out gates, in order (Client_CanUseTownCenterEASA.sqf:13-17):
| Gate | Condition that returns false
|
Line |
|---|---|---|
| Playable GUER off |
WFBE_C_GUER_PLAYERSIDE <= 0 (read with default 0) |
:13 |
| Not resistance | side group _unit != resistance |
:14 |
| On foot | _vehicle == _unit |
:15 |
| Not the driver | driver _vehicle != _unit |
:16 |
| Wrong vehicle |
typeOf _vehicle not in WFBE_EASA_Vehicles
|
:17 |
If all gates pass, it reads _range = WFBE_C_UNITS_SUPPORT_RANGE (the same rearm-action range as the service-point EASA path) and scans the global towns array: a town qualifies as a friendly center when its sideID (default -1) is neither WFBE_C_WEST_ID nor WFBE_C_EAST_ID — i.e. GUER-owned or neutral, but not WEST- or EAST-held — and the unit is within _range of it. The first such town short-circuits _ok = true via exitWith (Client_CanUseTownCenterEASA.sqf:19-26). This "neutral-or-friendly = not-enemy-held" idiom matches the GUER respawn-pick logic.
-
Last-match, not nearest. None of the three getters sort; the last qualifying entity in
nearEntitiesorder is returned. Within the smallWFBE_Logic_*candidate set at action ranges this is usually fine, but a refactor must not assume the result is the geometrically closest. -
Depot
wfbe_inactiveskip. A depot owned by the player's side is still rejected oncewfbe_inactiveis set; do not drop that flag check when touching the depot gate (Client_GetClosestDepot.sqf:1). -
Airport resistance branch. GUER matches an airfield only when
wfbe_airfield_side == resistance; the defaultcivilianread means an un-flagged airfield never matches for resistance (Client_GetClosestAirport.sqf:14). -
Camp
_ignore_sideoverride. The optional third argument disables the ownership test entirely — callers passing it accept any alive-bunker camp in range (Client_GetClosestCamp.sqf:1). -
Camp header comment is wrong. The
Client_GetClosestCamp.sqfheader reads "Return the closest depot"; the body scansWFBE_Logic_Camp. Trust the code, not the comment.
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 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