Registration, assignments, watch, live feeds
UAV automation internals
A per-UAV service that flies one airframe for you: follow a unit, escort a vehicle, run a patrol, hold and watch for contacts, and publish a camera feed to players, curators or named UIDs.
1. What exists, and what it never does
Loading Utils starts no UAV worker and changes no vehicle. Every airframe you want automated is registered explicitly by the server. A registration creates one record with its own assignment, scan and order clocks, route index, alert state and status. The service never looks up an object by a mission name and never guesses a route.
| Layer | Function | Where |
|---|---|---|
| Registration | droneRegister / droneUnregister / droneConfig | Server |
| Assignment | droneAssign | Server |
| Loops | droneServerTick, droneTickOne, droneWatchTick | Server |
| Flight helpers | droneNavigate, droneIssuePilot, dronePilotApply, dronePilotCommand, droneRestorePilot, droneFollowCenter, droneFollowGoal, droneSortMarkers | Server |
| Contact tools | droneContacts, droneSound | Server |
| Requests | droneRequest → droneHandleRequest → droneReply | Client → server → client |
| Live feed | droneFeedSet, droneFeedClear, droneFeedRequest, droneFeedEligible, droneFeedLocal, droneFeedStart, droneFeedTick, droneFeedPrune | Server + local client |
Registration requires a live vehicle with isUav = 1. A duplicate registration is refused, and so is a
vehicle whose pilot group is already driven by another registered UAV.
2. Assignments
[uav, action, [target, …]] call FF_utils_fnc_droneAssign accepts:
| Action | Third argument | Effect |
|---|---|---|
operator | Live physical player | Holds position relative to that operator. Operator death or disconnect ends the assignment; respawn does not silently take it over. |
group | Unit or group | Follows living group members, including their current vehicles. |
vehicle | Vehicle | Follows that vehicle. |
patrol | ATL positions, or [] for the configured route | At least two valid points. Marker mode needs an explicitly configured markerPrefix; numeric suffixes are ordered, so 1, 2, 10 sorts correctly and gaps are tolerated. |
hold | — | Stops navigation and keeps the current position. |
watch | true / false | Turns the contact watch worker on or off for that airframe. |
power | true / false | Engine on or off. Useful as an onSupply hook from the power service. |
settings | [distance, height, interval] | Per-UAV tuning, bounded by the table below. |
Follow and navigation orders are handed to the AI group owner; engine, altitude and heading work runs at the vehicle's locality. An ownership change forces a fresh order. Manual pilot control suspends automation and the watch worker immediately, and is detected rather than fought.
3. Configuration
| Key | Default | Bounds / meaning |
|---|---|---|
distance | 25 | 1–10000 m follow distance |
height | 5 | 1–1000 m ATL flight height (forced order for aircraft) |
interval | 3 | 0.1–30 s between navigation updates |
scanInterval | 0.5 | 0.1–5 s contact and status scan |
watchRadius | 100 | 1–5000 m proximity detection, including crew |
clearDelay | 5 | 0–60 s without contacts before resuming |
arrivalRadius | 8 | 1–100 m patrol progress threshold |
turnSpeed | 60 | 0–360 °/s threat turn rate |
threatInterval | 30 | 1–600 s between repeated alert cues |
soundRange | 60 | 1–1000 m cue audibility |
route | [] | At most 256 valid ATL points |
markerPrefix | empty | Explicit alternative patrol-marker prefix; there is no default prefix |
enemySides | [] | Explicit sides, otherwise current side relations |
createCrew | true | Creates missing crew at vehicle locality when assigned |
hoverWatch | true, planes false | Stationary threat hold; fixed-wing UAVs disable it by default |
alertObjects / normalObjects | [] | Indicator props; original hidden states are restored on release |
threatSound / activationSound | FF_Utils_DroneThreat / FF_Utils_DroneActivate | CfgSounds cues; empty disables |
access | {false} | Server callback [requester, uav, action, target] for non-curator requests |
onStatus | {} | Server callback [uav, status] on status changes |
4. Watch and contact hold
The watch worker scans watchRadius for hostiles by side relations. While a contact is held, horizontal
movement is suppressed and the airframe turns toward the nearest threat at turnSpeed, retaining vertical
velocity. Rotary UAVs support this hold by default; fixed-wing registration disables it unless overridden. Patrol index
is retained across a contact hold. Repeated alerts are spaced by threatInterval and played within
soundRange. Flight behaviour itself is not simulated by any offline check.
5. Live feeds
The feed backend is independent of navigation: an airframe can be a camera source without being automated.
// server
["survey", _source, _aimTarget, "players", true] call FF_utils_fnc_droneFeedSet;
["command", _source, _aimTarget, "curators", true] call FF_utils_fnc_droneFeedSet;
call FF_utils_fnc_droneFeedClear;
Audience is players (excludes assigned curators), curators, all or an explicit UID
list, with at most 32 enabled identities. The newest eligible revision owns one local BIS_fnc_liveFeed HUD
slot; joining, role change, respawn, source or target replacement and revision change are handled by the client worker.
Opening Zeus suspends the local feed and leaving that display resumes it. Because the BIS live feed is a per-client
singleton, a mission must not run a second live-feed controller in the same slot.
6. Requests, state and cleanup
Network callers use [requester, uav, action, target, settings] remoteExecCall ["FF_utils_fnc_droneRequest", 2].
The handler validates network owner, live registration and the server access callback before mutating
anything; registration and release additionally require a currently assigned curator. Requests are rate limited per UAV
and answered through droneReply.
Public state, readable by missions and UI:
FF_utils_droneRegistered— boolean on the airframe.FF_utils_droneSettings—[distance, height, interval, markerPrefix].FF_utils_droneStatus—[mode, watchEnabled, contactHold, operatorName, routeIndex, routeCount, contactCount, availability, watchRadius], retained for late joiners.
Release restores saved AI features, group behaviour, combat mode, current waypoint and indicator visibility, removes only the waypoints this service generated, and ends the watch worker. The airframe stays where it is with its engine state and last requested altitude. Sound cues and issued orders are transient and are never replayed to a JIP client.
7. Extension points
onStatusfor mission UI, markers or objective triggers.accessfor a terminal, a role, a UID list or a mission-specific authorization model.- Power service
onSupplycallingdroneAssignwithpowerto tie an airframe to a charged capacitor. - Terminal
dronePower/droneOperator/dronePatrol/droneHold/droneWatchservices, which delegate to this same owner.
Verified offline: follow-ring geometry, numeric marker ordering, configuration bounds and audience helpers. Not verified: aircraft physics, engine UI, UAV/AI locality, audio, hosted and dedicated multi-UAV sessions, manual pilot takeover, ownership changes, JIP and mission end.
Related functions
FF_utils_fnc_droneRegister— Registers one explicitly supplied UAV for server-owned follow/patrol/watch automation.FF_utils_fnc_droneAssign— Changes a registered UAV assignment using a trusted local server call.FF_utils_fnc_droneFeedSet— Publishes a named server-owned live feed with configurable source, target and audience.FF_utils_fnc_droneRequest— Authenticates a curator or configured operator before scheduling a server assignment.FF_utils_fnc_droneUnregister— Releases one registered UAV and restores only its managed indicators and AI controls.