FF SUITEArma 3 addons

Mission maker · chapter 04 of 06

Bases and equipment / UAVs, ready room, weapon faults, power, solar, terminals

The opt-in service layer for installations and crews: automated UAVs, assembly and briefing rooms, deliberate weapon faults, generators, solar arrays and terminals.

4 sections 04 / 06 Mission maker chapter

UAV automation and live feeds

One airframe per registration: follow a player, escort a vehicle, run a patrol, hold, or watch an area and turn toward contacts. Nothing moves until the server registers the UAV.

// initServer.sqf
[_uav, createHashMapFromArray [
    ["route", [[100,200,0],[300,400,0]]],
    ["distance", 25], ["height", 5], ["interval", 3],
    ["enemySides", [east]]
]] call FF_utils_fnc_droneRegister;
[_uav, "operator", player] call FF_utils_fnc_droneAssign;
[_uav, "watch", true] call FF_utils_fnc_droneAssign;

// live feed, audience-aware
["survey", _uav, _objective, "players", true] call FF_utils_fnc_droneFeedSet;
  • The UAV must already exist and be a UAV (isUav = 1). Duplicate registrations and vehicles already flown by another registered UAV are refused.
  • Player-camera feeds are a per-client singleton — do not run a second live-feed controller in the same HUD slot.
  • With ZEN, the curator gets Drone automation / Live feed modules so you never have to write the calls above.

Full keys, status values and cleanup rules: UAV internals.

Ready room

A briefing and assembly screen for the start of a session: literal briefing text, up to eight private questions, per-player readiness, an optional skip vote, team chat and an optional music bed. Headless clients are always excluded.

// initServer.sqf
[true, createHashMapFromArray [
    ["title", "Operation briefing"],
    ["briefing", ["Read the task, then mark ready."]],
    ["questions", ["What is your role?"]],
    ["countdown", 8], ["voteEnabled", true]
]] call FF_utils_fnc_readyRoomStart;

Release your own intro from a client callback — the room never moves a player or starts a scene by itself:

// initPlayerLocal.sqf
FF_utils_readyRoomClientConfig = createHashMapFromArray [
    ["onRelease", { params ["_skip", "_participants", "_participating", "_epoch"];
                    [] spawn my_fnc_playIntro; }]
];

Policy keys, vote maths and privacy rules: Ready room internals.

Weapon faults

Deliberate firearm malfunctions that only a configured specialist can clear, plus an expanding pulse that jams weapons over an area. Nothing is random: the service only reacts to your calls.

// initServer.sqf
[true, createHashMapFromArray [
    ["duration", 10], ["traits", ["engineer"]]
]] call FF_utils_fnc_weaponFaultStart;

// later, from a trigger or a scripted event
[getPosASL _emitter, serverTime, 500, 50, false] call FF_utils_fnc_weaponFaultPulse;

Repairs are server-owned timed reservations, so two medics cannot both "finish" the same jam. ACE's own jams stay independent; ordinary ACE jam clearing does not remove a native fault.

Power, solar and terminals

Three building blocks for bases and installations. All are server-registered, all are opt-in, and none of them assumes object names or coordinates.

Transfer power

["campPower", _generator, _panel,
 createHashMapFromArray [
    ["limits", [0.1, 0.65, 0.9, 0.98]]
]] call FF_utils_fnc_powerRegister;
["campPower", true]
    call FF_utils_fnc_powerSetInput;

Charge window with a safe RUN band and a trip latch. Players interact physically; supply is server-owned.

Solar commissioning

["array", _console,
 createHashMapFromArray [
    ["dwell", 6],
    ["access", {params ["_u"];
        (_u getUnitTrait "engineer")}]
]] call FF_utils_fnc_solarRegister;

XOR pairing, active-low flags and coupled voltage dials, with a shipped player panel.

Terminals

["station", _terminal,
 createHashMapFromArray [
    ["power", {["campPower"]
        call FF_utils_fnc_powerHasSupply}],
    ["services", [["lights", "Tower",
        "lights", [_lamp]]]]
]] call FF_utils_fnc_terminalRegister;

Case/boot phases, credentials, media-gated archives and shared channels. Server half only — no browser yet.

Channel traffic

// initServer.sqf
["radio", "operations", [
    ["HQ", "Move up to the ridge."],
    ["Squad", "Copy, moving."]
], [20, 40]] call FF_utils_fnc_terminalTrafficLoop;

Mission-supplied chatter on an existing channel. Stop with terminalTrafficCancel.

Wiring them together

A terminal reads powerHasSupply, a transfer site reads the solar puzzle with solarIsSolved, and onSupply can power a registered UAV. No component links to another implicitly.

Details: Power, Solar, Terminals.