Plugins - broma-arma/BromA-A3-Framework-Mark3 GitHub Wiki
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.
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.
Adds a help entry for medical in the diary and some mission 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.
Manages some stuff about the spectator system.
Spawn AI.
This is a large subject, so this plugin is detailed in further detail in its own page.
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. |
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 desertersIt'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.
| Setting | Description |
|---|---|
tp_allowed_units |
Add units who you wish to be exempt from the restriction |
| Parameter | Options |
|---|---|
| Third person enabled | Disabled Enabled Drivers/Commanders only |
// 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];Ends the mission after a certain parameter determined percentage of mission set groups have died.
| 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]"; |
| 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.
| 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; |
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.
| Setting | Description | Example |
|---|---|---|
responsible_sides |
Sides who will be held accountable for civilian deaths. | responsible_sides = [side_a_side, side_b_side]; |
| Parameter | Options | Description |
|---|---|---|
| Tolerance with civilian deaths | - Disabled - Low: 5 - Medium: 15 - High: 30 |
How many civilians can be killed before the mission ends. |
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.
| 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; |
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.
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.
| 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; |
Displays markers for player groups on the map.
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.
| Parameter | Options | Description |
|---|---|---|
| Enable Headless Client | - Disabled (Default) - Enabled |
Enable Headless Client. |
Some nice and simple pre-configured intro cutscenes that you can use in your mission.
| 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"; |
Adds a scroll action that allows players who Join in Progress to teleport to their squad mates.
Draws a black screen with a loading message, while the player's game loads.
Covers the area outside of operations with a marker, in order to emphasize its borders, denoted by a marker named "ao".
Sets the mission conditions such as weather and time.
| 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]; |
| 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 |
Adds a few handy scroll actions to the player when testing in single player.
- Arsenal (Vanilla/ACE)
- Initialize/Stop AI units
Provides a multiplayer compatible arsenal garage.
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)
// 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;Allow players to place buildings and other objects.
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]]; |
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.
| Setting | Description | Example |
|---|---|---|
mission_preventreslot_timer |
Time, in seconds, players have until their current slot is locked. | mission_preventreslot_timer = 5*60; |
Generates radio channels and frequencies based on what groups are active in the mission and setups players radio.
This simple respawn system manages player lives and whether or not a player should be able to respawn, integrated with the Spectator System.
| 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. |
Manages rounds for TvT/COTvT missions.
| 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))]]; |
| 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 |
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.
| Setting | Description | Example |
|---|---|---|
setup_zone_area |
How large is the setup area, in square meters. | setup_zone_area = 50; |
| 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. |
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.
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 |
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.
| Setting | Description | Example |
|---|---|---|
spawn_protection_area |
How large is the spawn protection area, in square meters. | `spawn_protection_area = 50; |
| Parameter | Options | Description |
|---|---|---|
| Spawn protection duration | - Disabled - 1 minute - 15 minutes - 30 minutes - Infinite (Default) |
How long will the spawn protection stay up for. |
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.
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.
Creates a module that makes time go faster. Can also freeze time.
| Parameter | Options | Description |
|---|---|---|
| Time acceleration | - 0x - 1x (Default) - 2x - 5x - 10x - 100x |
How fast will time go. |
After a certain time limit has passed in the mission, the main side in the mission will fail it.
| 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]; |
| 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. |
Enables compatibility with the vanilla spectator system.
| 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; |