Plugins - broma-arma/BromA-A3-Framework-Mark3 GitHub Wiki

Framework Plugins

Plugins are the backbone of the Framework, determining what features are added into the mission and how they are configured - and as such they behave in a fundamentally modular manner, configured to not only work out of the box with the rest of the Framework, but also simple to be disabled and removed should the mission maker call for it.

Disabling Plugins

If one or more features aren't what you need in your mission, worry not, as removing them is very simple. Open and comment whatever you desire from:

framework\plugins\plugins.cpp

Keep in mind that every single plugin has been added for a reason and is properly optimized - removing plugins to avoid "bloat" might be tempting but it solves a problem that doesn't exist in the first place.


ACE3

Adds a help entry for medical in the diary and some mission parameters.

Parameters

Revive time - determines how long players will have to live after going unconscious.
Lives - How many times can a player die before no longer being able to get up.
Medical System - determines between the Advanced and Basic medical system.
Make everyone medic - Self-explanatory.

Warning

The mission/settings/mods-settings/ace3-settings.sqf file is no longer used and any changes to it will not have any effect.


ACE3 Spectator

Manages some stuff about the spectator system.


AI Spawner

Spawn AI.

This is a large subject, so this plugin is detailed in further detail in its own page.


AO Limit

Runs code when a player leaves the designated area of operations, denoted by a marker named "ao".

Variable Description
_pos Position within the area.
_targetObject Player, or player's vehicle, that left the area.

Examples

left_ao_do = { hintSilent "Please remain within the area of operations."; }; // Default
left_ao_do = { _targetObject setPos _pos; }; // Force player/vehicle to remain in the AO.
left_ao_do = { _targetObject setDamage 1; }; // Kill deserters

Block third-person

It's very common that depending on the context of your mission, the use of Third Person perspective might be undesirable: for TvTs and other scenarios where realism is intended, it can cause balance issues and make things weird. However disabling it all together isn't a good solution as some missions will require players to drive in vehicles with no modeled interiors or fly on first person only, which might prove difficult.

So in order to give the mission maker the choice, a plugin to block the use of third person depending on context has been included into the Framework.

Settings

Setting Description
tp_allowed_units Add units who you wish to be exempt from the restriction

Parameters

Parameter Options
Third person enabled Disabled
Enabled
Drivers/Commanders only

Examples

// Command group
tp_allowed_units = [blu_0_0_1, blu_0_0_2, blu_0_0_3];
// Command, squad leaders, and team leaders
tp_allowed_units = [blu_0_0_1, blu_1_0_1, blu_1_1_1, blu_1_2_1, blu_2_0_1, blu_2_1_1, blu_2_2_1, blu_3_0_1, blu_3_1_1, blu_3_2_1, blu_4_0_1, blu_4_1_1, blu_4_2_1, blu_5_0_1];
// Vehicle crew
tp_allowed_units = [blu_11_1_1, blu_11_1_2, blu_11_1_3, blu_12_1_1, blu_12_1_2, blu_12_1_3, blu_12_1_4];
// Helicopter/Plane pilots
tp_allowed_units = [blu_13_1_1, blu_13_1_2, blu_14_1_1, blu_14_1_2, blu_14_2_1, blu_14_2_2];

Casualty Cap

Ends the mission after a certain parameter determined percentage of mission set groups have died.

Settings

Setting Description Example
casualty_group_BLU Casualty groups for BLUFOR.
Must be a string that evaluates to an array.
casualty_group_BLU = "[blu_0_0, blu_1_0, blu_1_1, blu_1_2, blu_2_0, blu_2_1, blu_2_2, blu_3_0, blu_3_1, blu_3_2, blu_4_0, blu_4_1, blu_4_2]";
casualty_group_OP Casualty groups for OPFOR.
Must be a string that evaluates to an array.
casualty_group_OP = "[op_0_0, op_1_0, op_1_1, op_1_2, op_2_0, op_2_1, op_2_2, op_3_0, op_3_1, op_3_2, op_4_0, op_4_1, op_4_2]";
casualty_group_IND Casualty groups for INDFOR.
Must be a string that evaluates to an array.
casualty_group_IND = "[ind_0_0, ind_1_0, ind_1_1, ind_1_2, ind_2_0, ind_2_1, ind_2_2, ind_3_0, ind_3_1, ind_3_2, ind_4_0, ind_4_1, ind_4_2]";

Parameters

Parameter Options Description
Casualty Cap - Disabled (Default)
- 80%
- 90%
- 95%
- 100%
Percentage of players that must be dead in order to fail the mission.

Integrated to work with the framework as a Plugin you can easily disable and configure.

Press Ctrl + \ to open the menu to change your terrain/object rendering distance.

Settings

Setting Description Example
CHVD_allowNoGrass Allows players to turn grass off - recommended false for TVTs. CHVD_allowNoGrass = (mission_game_mode == "coop");
CHVD_maxView Max rendering distance for the terrain. CHVD_maxView = 12000;
CHVD_maxObj Max rendering distance for objects. CHVD_maxObj = 12000;

Civilian Casualty Cap

Players can get particularly trigger-happy in missions, completely disregarding the safety of the poor and innocent virtual dwellers of their virtual battles. In order to add some extra dose of challenge, this script will watch over how many civilians are killed, and upon reaching a certain threshold, punish the perpetrators with a mission failure.

Settings

Setting Description Example
responsible_sides Sides who will be held accountable for civilian deaths. responsible_sides = [side_a_side, side_b_side];

Parameters

Parameter Options Description
Tolerance with civilian deaths - Disabled
- Low: 5
- Medium: 15
- High: 30
How many civilians can be killed before the mission ends.

Commander Lock

Before a mission can be properly started, some extra preparations are usually needed, whatever they may be. With that in mind, this plugin will make sure that until an authorized unit gives the mission the All Clear, players will not be able to fire their weapons, throw any grenades, enter any vehicles, or if your mission is a TVT, leave their setup zones.

Settings

Setting Description Example
co_lock_units Units that can start the mission or ready their respective sides.
Must be a string that compiles as an array.
co_lock_units = "[blu_0_0_1, blu_1_0_1, op_0_0_1, op_1_0_1, ind_0_0_1, ind_1_0_1]";
co_lock_tvt_mode TVT mode, meaning the players will have to wait until other sides are ready as well. co_lock_tvt_mode = false;

DAC

Working with DAC can be confusing and painful, especially considering the vast amount of features and customizations. With that in mind, the Framework includes a way to create DAC zones using nothing but verbose sentences, all Headless Client compatible.

This is a large subject, so this plugin is detailed in further detail in its own page.


Friendly Fire Warning

Ain't nothing better than some good ol' blue on blue to spice up some engagements. But for whenever you need to know who just annihilated one of their own, this plugin will come in handy.

Settings

Setting Description Example
friendly_fire_timer_minutes How long it'll take for a friendly fire notification to appear, in minutes. friendly_fire_timer_minutes = 1;
friendly_fire_count_AI Show notification when an AI wounds a player. friendly_fire_count_AI = false;

Group Markers

Displays markers for player groups on the map.


Headless Client

If any of you doesn't know what a Headless Client is, I suggest you start by reading this. Otherwise, this plugin will determine which entity will be tasked with running the relevant AI scripts.

Parameters

Parameter Options Description
Enable Headless Client - Disabled (Default)
- Enabled
Enable Headless Client.

Intros

Some nice and simple pre-configured intro cutscenes that you can use in your mission.

Settings

Setting Description Example
intro_cutscene - "ESTABLISHING": Create an establishing shot type of scene on the character.
- "TEXT": Shows the name of the nearest location and time on the screen.
- "CINEMA": Same as "TEXT", with a cinema style top and bottom border.
- "NONE": Nothing.
intro_cutscene = "TEXT";

JIP Teleport

Adds a scroll action that allows players who Join in Progress to teleport to their squad mates.


Loading screen

Draws a black screen with a loading message, while the player's game loads.


Map Cover

Covers the area outside of operations with a marker, in order to emphasize its borders, denoted by a marker named "ao".


Mission Conditions

Sets the mission conditions such as weather and time.

Settings

Setting Description Example
missionCustomDate [year, month, day, hours, minutes] If not set, editor setting will be used. missionCustomDate = [1955, 11, 1, 0, 0];
missionCustomWeather [overcast, rain, lightnings, rainbow] If not set, editor setting will be used. missionCustomWeather = [1, 1, 1, 0];
missionCustomFog [fogValue, fogDecay, fogBase] If not set, editor setting will be used. missionCustomFog = [1, 0, 0];
missionCustomWind [windStr, gusts, waves] If not set, editor setting will be used. missionCustomWind = [0.2, 0.5, 0.1];

Parameters

Parameter Options
Time 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00, 07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00, 19:00, 20:00, 21:00, 22:00, 23:00
Dawn, Early morning, Morning, Noon (Default), Afternoon, Evening, Dusk, Night
Random, Custom
Weather Clear (Default), Overcast, Raining, Storm
Random, Mission Settings
Fog Clear (Default), Mist, Low/Thin, Low/Thick, Medium/Thin, Medium/Thick, High/Thin, High/Thick, Extreme
Random, Mission Settings
Wind None (Default), Light, Medium, Strong, Extreme
Random, Mission Settings

Mission maker tools

Adds a few handy scroll actions to the player when testing in single player.

  • Arsenal (Vanilla/ACE)
  • Initialize/Stop AI units

Multiplayer Garage

Provides a multiplayer compatible arsenal garage.

Function

BRM_FMK_MPGarage_fnc_open
	0: Object/Array/String position - The position of the shown vehicles
		Object - position and direction of object
		Array - position and optional direction (direction: index 3)
		String - position and direction of Marker

	1: Bool allowExternal - False to disable load/save (optional, default: true)
	2: Code spawnHandler - Custom code that is called when player presses OK (optional, default: spawns the selected vehicle near the position)
		Params: [Array position, Number direction, String vehicleClass, String texture, Array animations, Array loadout]
			position: Position that was passed to "Open", converted to Array position
			direction: Direction that was passed to "Open", in position
			vehicleClass: Class name of the selected vehicle
			texture: Variant class name
			animations: Array of animation sources and probability: ["AnimationSource1", 0, "animationSource2", 1]; Probability is 1 if selected, otherwise 0
			loadout: Array of the selected pylon loadouts: [[pylonIndex, pylonPriority, pylonMagazineName, pylonTurret], ...]

	3: String/Array/Code vehicleFilter - Filters the selectable vehicles (optional, default: "all")
		String - predefined filters: "air", "plane", "heli", "land", "car", "tank", "static", "ship", "all". Invalid filter name results in no vehicles being allowed
		Array - CfgVehicles type names. E.g. ["Motorcycle"], ["Tank", "StaticWeapon"], ["Plane", "Motorcycle"]
		Code - called with params [Config vehicleClass]. Return true if vehicle is allowed.

	4: Bool allowIncompatiblePylons - True to allow incompatible weapons on pylons. (optional, default: false)

Example

// Garage 20 meters in-front of player, facing same direction as player
[(player getRelPos [20, 0]) + [getDir player]] call BRM_FMK_MPGarage_fnc_open;
// Air-only garage on position/direction of helipad object, with no loading/saving.
[helipad, false, nil, "air"] call BRM_FMK_MPGarage_fnc_open;
// Garage on marker "Garage", with custom vehicle spawn handler.
["Garage", nil, {
	params ["_position", "_direction", "_vehicleClass", "_texture", "_animations", "_loadout"];

	systemChat format ["You selected a '%1'!", _vehicleClass];
}, nil] call BRM_FMK_MPGarage_fnc_open;

Plank Building

Allow players to place buildings and other objects.

Settings

Note

Settings are located in the framework/plugins/plank_building/functions/includes/settings.sqf file.

Setting Description Example
plank_objects_side_a Objects, and min distance from object, that will serve as the construction anchors for side A plank_objects_side_a = [["constructionTruck", 30], ["constructionCar", 10]];
plank_objects_side_b ... side B plank_objects_side_b = [["constructionTruckB", 30], ["constructionCarB", 10]];
plank_objects_side_c ... side C plank_objects_side_c = [["constructionTruckC", 30], ["constructionCarC", 10]];
PLANK_Player_Objects Number of objects that can be placed by other players. PLANK_Player_Objects = [1, 0, 10, 0, 15, 5, 0, 0];
PLANK_Officer_Objects Number of objects that can be placed by Officer players. PLANK_Officer_Objects = [5, 3, 20, 5, 20, 10, 0, 5];
PLANK_FTL_Objects Number of objects that can be placed by fire team leader players. PLANK_FTL_Objects = [3, 1, 20, 1, 15, 10, 0, 1];
PLANK_SL_Objects Number of objects that can be placed by squad leader players. PLANK_SL_Objects = [5, 2, 20, 3, 15, 10, 0, 2];
PLANK_Specialist_Objects Number of objects that can be placed by specialist players. PLANK_Specialist_Objects = [25, 15, 100, 25, 100, 50, 0, 25];
PLANK_FMK_buildSpeed Build speed multiplier PLANK_FMK_buildSpeed = 1;
plank_deploy_fortData Objects that can be placed, with configuration data for each object. plank_deploy_fortData = [["Small bunker", Land_BagBunker_Small_F", 3, 180, 360, {}, 20], ["Bunker", "Land_BagBunker_Large_F", 8, 180, 60, {}, 35], ["Wide Sandbag fence", "Land_BagFence_Long_F", 2, 0, 360, {}, 8], ["H-Barrier watch tower", "Land_HBarrierTower_F", 7, 180, 360, {}, 100], ["Short Sandbag fence", "Land_BagFence_Short_F", 2, 0, 360, {}, 4], ["Razor Wire", "Land_Razorwire_F", 4, 0, 360, {}, 10], ["Concrete wall long", "Land_CncWall4_F", 8, 0, 360, {}, 60], ["Bunker Tower", "Land_BagBunker_Tower_F", 7, 90, 360, {}, 60]];

Prevent Reslot

After a certain period of time, the server will lock players into their current slots, and will prevent any attempt to re-join as a different unit.

Settings

Setting Description Example
mission_preventreslot_timer Time, in seconds, players have until their current slot is locked. mission_preventreslot_timer = 5*60;

Radio Frequency

Generates radio channels and frequencies based on what groups are active in the mission and setups players radio.


Respawn System

This simple respawn system manages player lives and whether or not a player should be able to respawn, integrated with the Spectator System.

Parameters

Parameter Options Description
Allow immediate respawning - Disabled (Default)
- Enabled
Instant respawn.
Player lives - 1
- 3 (Default)
- 5
- 10
Amount of lives players will have.
Respawns per completed objective - 0
- 3
- 5
- 10 (Default)
- Everyone
Amount of lives players will have.

Round System

Manages rounds for TvT/COTvT missions.

Settings

Setting Description Example
round_prep_time_seconds How many seconds players will have to prepare themselves before the match begins. round_prep_time_seconds = 10;
round_seconds_between Seconds in between rounds. round_seconds_between = 15;
round_alerted_minutes What minutes will players be alerted of the remaining time in the round. round_alerted_minutes = [1, 5, 15, 30];
round_side_a_victory_con The conditions for victory. These can be left alone, as it is also possible to win through other means - see below. round_side_a_victory_con = "(sideAcondition)";
round_side_b_victory_con The conditions for victory. These can be left alone, as it is also possible to win through other means - see below. round_side_b_victory_con = "(sideBcondition)";
round_side_c_victory_con The conditions for victory. These can be left alone, as it is also possible to win through other means - see below. round_side_c_victory_con = "(sideCcondition)";
round_timeout_winner Whoever wins once the round time limit runs out. Valid are: - "SCORE", which will calculate the side with the fewer losses.
- SIDE, like side_a_side or WEST, will give the victory to the side.
- "DRAW" ends the round with no winners.
round_timeout_winner = "SCORE";
win_messages_a Fill these up with your victory messages. %1 refers to the winner's name. win_messages_a = ["%1 victory!", "%1 have won the round!"];
win_messages_b Fill these up with your victory messages. %1 refers to the winner's name. win_messages_b = ["%1 victory!", "%1 have won the round!"];
win_messages_c Fill these up with your victory messages. %1 refers to the winner's name. win_messages_c = ["%1 victory!", "%1 have won the round!"];
draw_messages Same as above, except for a draw. draw_messages = ["The round has ended in a draw!", "Draw!", "Nobody wins!"];
round_end_notification Round end notifications, can be either "HINT" or "NOTIFICATION". round_end_notification = "NOTIFICATION"
round_display_score Display each team's score after the round is over. round_display_score = true;
round_setup_size Size of the setup zone for the players. round_setup_size = 10;
respawn_markers_A Markers in which players will respawn. If more are supplied, a random one will be chosen FOR EACH PLAYER. respawn_markers_A = [format["respawn_%1", toLower(str(side_a_side))]];
respawn_markers_B Markers in which players will respawn. If more are supplied, a random one will be chosen FOR EACH PLAYER. respawn_markers_B = [format["respawn_%1", toLower(str(side_b_side))]];
respawn_markers_C Markers in which players will respawn. If more are supplied, a random one will be chosen FOR EACH PLAYER. respawn_markers_C = [format["respawn_%1", toLower(str(side_c_side))]];

Parameters

Parameter Options
Amount of rounds needed to win - 1
- 2
- 3 (Default)
- 4
- 5
Time limit per round - 1 minute
- 5 minutes
- 15 minutes (Default)
- 30 minutes
- 1 hour
- No limit

Setup Zone

Creates a perimeter around the players in TvT missions in which they cannot leave, removed only upon a certain time limit is reached or if the Commander Lock plugin is enabled, all sides are ready to start the mission.

Settings

Setting Description Example
setup_zone_area How large is the setup area, in square meters. setup_zone_area = 50;

Parameters

Parameter Options Description
Setup Time - 15 seconds (Default)
- 1 minute
- 3 minutes
- 5 minutes
- 10 minutes
How long will the setup zone stay up for.

Spawn AI

Ever needed to spawn some AI in your mission without wanting to deal with DAC's limitations, but short of time to learn something new? Don't worry, the Framework has you covered. This plugin will handle AI spawning in an extremely flexible and simple manner, and in only a few minutes you'll have your enemies up and running.

Function

The plugin utilizes only a single function, BRM_FMK_SpawnAI_fnc_infantry (although it does way more than just create infantry).

[WEST, "USARMY", 0, 2, 1, 0.5, "AWARE", "YELLOW", "PARADROP", ["B_Heli_Light_01_F"], true, ["point_2_1"], ["point_2_LZ"], ["point_2_2"], [200, 100, 50]] spawn BRM_FMK_SpawnAI_fnc_infantry;
Parameter Description Type
0 Side of the units. SIDE
1 Loadout. STRING
2 Type of units.
0: Regular infantry, 1: Recon, 2: Snipers
NUMBER
3 How many groups will be spawned. NUMBER
4 The size of the groups.
0: Duo, 1: Fire-team, 2: Squad, 3: Platoon
NUMBER
5 Unit skill. SCALAR
6 Behavior. STRING
7 Combat mode. STRING
8 Task.
"ATTACK", "DEFEND", "PATROL", "PARADROP".
STRING
9 PPossible vehicles to be used. This may be left empty. ARRAY of VEHICLES
10 Whether the vehicle will return after dropping off the infantry. BOOLEAN
11 Possible starting points. ARRAY of MARKERS
12 Possible LZ/drop-off points. This may be left empty. ARRAY of MARKERS
13 Possible end points. ARRAY of MARKERS
14 Radius of spawn: [Start, LZ, End] ARRAY

Spawn Protection

Nobody likes getting killed because of an accidental grenade or misfire right after the mission starts. This plugin creates a protection zone around each side's respawn point, protecting friendly units from any kind of damage.

Settings

Setting Description Example
spawn_protection_area How large is the spawn protection area, in square meters. `spawn_protection_area = 50;

Parameters

Parameter Options Description
Spawn protection duration - Disabled
- 1 minute
- 15 minutes
- 30 minutes
- Infinite (Default)
How long will the spawn protection stay up for.

Sync Status

Whenever a player disconnects or leaves the session for whatever reason, the server will memorize its mission relevant data, like location, ACE status, gear and even what vehicle they were in - and then reassign them all upon them joining again.


Team Roster

Creates a diary page with information about all members of your side, separated by group, colored by class and denoted by rank. Works with custom callsigns.


Time Acceleration

Creates a module that makes time go faster. Can also freeze time.

Parameters

Parameter Options Description
Time acceleration - 0x
- 1x (Default)
- 2x
- 5x
- 10x
- 100x
How fast will time go.

Time Limit

After a certain time limit has passed in the mission, the main side in the mission will fail it.

Settings

Setting Description Example
spawn_protection_area At which minutes the players should be notified of the time remaining. time_alerted_minutes = [120, 60, 15, 1];

Parameters

Parameter Options Description
Time Limit - No limit (Default)
- 3 hours
- 2 hours
- 1 hour
- 45 minutes
- 30 minutes
- 15 minutes
- 10 minutes
- 1 minute
Time the mission will last for.
Time added per objective - Disabled (Default)
- 5 minutes
- 15 minutes
- 30 minutes
- 1 hour
Time added to the limit, when an objective is completed.

Vanilla Spectator

Enables compatibility with the vanilla spectator system.

Settings

Setting Description Example
vanillaspectator_whitelisted_sides sides that can be spectated vanillaspectator_whitelisted_sides = [];
vanillaspectator_can_view_AI whether AI can be viewed by the spectator vanillaspectator_can_view_AI = true;
vanillaspectator_free_camera_available whether free camera mode is available vanillaspectator_free_camera_available = true;
vanillaspectator_third_person_available whether 3rd Person camera mode is available vanillaspectator_third_person_available = true;
vanillaspectator_show_focus_available whether to show Focus Info stats widget vanillaspectator_show_focus_available = true;
vanillaspectator_show_buttons whether or not to show camera buttons widget vanillaspectator_show_buttons = true;
vanillaspectator_show_controls whether to show controls helper widget vanillaspectator_show_controls = true;
vanillaspectator_show_header whether to show header widget vanillaspectator_show_header = true;
vanillaspectator_show_entities whether to show entities / locations lists vanillaspectator_show_entities = true;

⚠️ **GitHub.com Fallback** ⚠️