Compare commits

...

12 Commits

Author SHA1 Message Date
hizumi
1e5d50828b Update CHANGELOG.md 2024-02-08 19:12:44 -06:00
f8af54aa06 Merge pull request 'develop' (#24) from develop into main
Reviewed-on: https://17th-gs.iceberg-gaming.com:5443/hizumi/MissionTemplate/pulls/24
2024-02-08 19:05:40 -06:00
hizumi
2c733f77df Merge branch 'develop' of https://iceberg-gaming.com:5443/hizumi/MissionTemplate into develop 2024-02-08 19:00:15 -06:00
8ed6b8a5c6 Merge pull request 'misc-improvements' (#23) from misc-improvements into develop
Reviewed-on: https://17th-gs.iceberg-gaming.com:5443/hizumi/MissionTemplate/pulls/23
2024-02-08 18:35:52 -06:00
1d7e1ede37 Merge branch 'develop' into misc-improvements 2024-02-08 18:35:36 -06:00
363016d778 Merge pull request 'allow zeus add/remove of wheels/tracks from vehicles' (#22) from feature/set-wheels-tracks-with-zen-module into develop
Reviewed-on: https://17th-gs.iceberg-gaming.com:5443/hizumi/MissionTemplate/pulls/22
2024-02-08 18:28:57 -06:00
hizumi
bbe798734a Update README.md
correct typo
2024-02-07 23:26:32 -06:00
hizumi
e372563e58 prepare v4.0.0 release 2024-02-07 23:25:23 -06:00
hizumi
8283f19b77 Update mission_settings.hpp
document and give a default example
2024-02-07 23:25:04 -06:00
644de22b32 Merge branch 'develop' into feature/set-wheels-tracks-with-zen-module 2024-02-07 22:06:13 -06:00
5d3c28b807 ready for dedi 2024-02-07 13:11:58 -08:00
02e97b3e0e Merge pull request 'develop' (#21) from develop into main
Reviewed-on: https://17th-gs.iceberg-gaming.com:5443/hizumi/MissionTemplate/pulls/21
2024-02-06 23:17:30 -06:00
10 changed files with 371 additions and 69 deletions

View File

@@ -4,7 +4,34 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project badly attempts [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [3.2] - 2024-02-01
## [4.0.0] - 2024-02-07
Version 4 marks a massive rewrite due in whole to @IndigoFox by updating the internals of the framework into CBA macros and functions.
### Added
- Added ability for FBCB2 Assets to locate themselves on player local map
- Added various framework utitily functions
- Added ability for mission maker to allow spawning of resupply boxes from arsenal boxes
- Added CBA settings for resupply box spawning
- Added additional vehicle flags
- Addded Zeus module to fill vehicle ace cargo inventory with tracks/tires
### Changed
- Documented purpose of `missionSeries` parameter in `mission_settings.hpp`
- Moved internal functions into new framework directory structure
- Moved FBCB2 internal data structure into multiple defintion files
- Moved resupply boxes internal data structures into their own definiton file
- Moved player inventory internal data structure into its own defintion file
- Moved vehicle flags internal data structure into its own defitinion file
- Use player's preferred ACE color settings for medical triage icons
### Deleted
- Leftover resupply box code from before version 3.2.0 update
## [3.2.0] - 2024-02-01
### Added
@@ -62,7 +89,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
- Lowered garbage collection times and range for dead bodies
## [3.0] - 2023-05-03
## [3.0.0] - 2023-05-03
### Added
@@ -79,7 +106,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
- Remove `CfgRemoteExec` from `description.ext` as it has been deprecated as of Arma v1.54
## [2.2] - 2023-04-23
## [2.2.0] - 2023-04-23
### Added
@@ -93,7 +120,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
- Force `sideChat` CBA setting to 'disabled' on mission start by default
## [2.1] - 2023-04-12
## [2.1.0] - 2023-04-12
### Added
@@ -103,7 +130,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
- Allow `#admin` to enable or disable `sideChat` via CBA setting on a per mission file basis.
`Escape -> Configure -> Addon Options -> Server -> 17th Battalion -> Enable Side Chat`
## [2.0] -2023-04-12
## [2.0.0] -2023-04-12
### Added
@@ -113,7 +140,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
- mission.jpg to correct dimensions and optimize
## [1.9] - 2023-03-07
## [1.9.0] - 2023-03-07
### Added

View File

@@ -20,7 +20,7 @@ Once copied, the final structure should appear similar to the following:
├── mission.sqm
```
If you're building a mission for use in an op, please delete "aaFrameworkUtils" and "framework\x". These are for the purposes of development and add bloat to the mission download when players connect to your mission.
> **Note:** If you're building a mission for use and not actively developing code, the `aaFrameworkUtils` and `framework\x` directories **should be deleted**. *These are for the purposes of development and add size bloat to the mission download when players connect to your mission.*
After the requisite configuration file edits have been made, your mission is ready to be packed into a pbo for deployment.
@@ -45,6 +45,14 @@ The contents of the lower half of the file are where the mission maker is able t
This file will be displayed the client mission loading screen.
File should remain small *(under 300KiB)* and should optimally be `1024px by 512px` in resolution
## defines/
This directory contains the definition files use by the framework in various places. *Contents should not be edited*
## framework/
This directory contains the code for the mission framework. **Contents must not be edited.**
## images/
This directory is for organizational purposes for any images you wish to use in your mission
@@ -52,7 +60,7 @@ This directory is for organizational purposes for any images you wish to use in
## scripts/
This directory is for organizational purposes for any custom scripts you wish to use in your mission.
> **Note**: Scripts may need to be edited to account for their new location
> **Note:** Scripts may need to be edited to account for their new location
## sounds/
@@ -63,7 +71,8 @@ This directory is for organizational purposes for any custom scripts you wish to
This directory is for organizational purposes for textures files used by mission scripts.
## DEV NOTES
# Development Notes
All modules are broken apart as such in /framework. Client and server inits are managed in /framework/init.

View File

@@ -24,10 +24,10 @@ class CfgFunctions {
class DOUBLES(PREFIX,client) {
class functions {
file = "framework\client\functions";
class addZenModules { postInit = 1; };
class bindEmptyGroupGarbageCleanup { postInit = 1; };
class bindEventHandlers { postInit = 1; };
class bindVehicleActions { postInit = 1; };
class addZenModules {postInit = 1;};
};
};
@@ -169,4 +169,12 @@ class CfgFunctions {
class isClassExcluded {};
};
};
class DOUBLES(PREFIX,zeus) {
class functions {
file = "framework\zeus\functions";
class initClient {};
class addZenModules {};
};
};
};

View File

@@ -2,61 +2,6 @@
if ( !hasInterface ) exitWith {};
[
QUOTE(MODULE_CATEGORY_NAME),
"Create Resupply Box",
{
params [["_pos", [0,0,0], [[]], 3], ["_target", objNull, [objNull]]];
// get parent definition
private _supplyCratesCfg = call EFUNC(resupply,getSupplyCratesCfg);
// get the subclass names
private _boxTypesAvailable = _supplyCratesCfg call BIS_fnc_getCfgSubClasses;
_boxTypesAvailable sort true;
_comboOptions = _boxTypesAvailable apply {
[
// display name
[_supplyCratesCfg >> _x >> "displayName", "STRING", "ERROR"] call CBA_fnc_getConfigEntry,
// tooltip
[_supplyCratesCfg >> _x >> "tooltip", "STRING", "ERROR"] call CBA_fnc_getConfigEntry,
// icon
[_supplyCratesCfg >> _x >> "icon", "STRING", "ERROR"] call CBA_fnc_getConfigEntry
]
};
[
"Resupply Box Options",
[
// [ "COMBO", "Box Type", [[1,2,3], [["Ammo"],["Weapons"],["Medical"]],0] ]
["COMBO", "Box Type", [_boxTypesAvailable, _comboOptions, 0]]
],
{
params ["_dialog", "_args"];
_dialog params ["_typeOptionSelected"];
_args params ["_pos", "_target", "_keysSorted"];
private _box = [_target, _typeOptionSelected, _pos] call EFUNC(resupply,createBox);
if (isNull _box) exitWith {
["Resupply Box", "WARNING: Failed to locate or create box!"] call BIS_fnc_curatorHint;
};
[
"Resupply Box",
format[
"Created %1",
getText((call EFUNC(resupply,getSupplyCratesCfg)) >> _typeOptionSelected >> "displayName")
]
] call BIS_fnc_curatorHint;
},
{},
[_pos, _target]
] call zen_dialog_fnc_create;
}
] call zen_custom_modules_fnc_register;
[
QUOTE(MODULE_CATEGORY_NAME),
"Grounds Cleanup",

View File

@@ -28,6 +28,7 @@ call EFUNC(reinsert,initClient);
call EFUNC(resupply,initClient);
call EFUNC(triageIcons,initClient);
call EFUNC(vehicleFlags,initClient);
call EFUNC(zeus,initClient);
call EFUNC(fbcb2_main,initClient);
call EFUNC(fbcb2_assets,initClient);

View File

@@ -1,4 +1,4 @@
#define MAJOR 3
#define MINOR 2
#define PATCHLVL 1
#define MAJOR 4
#define MINOR 0
#define PATCHLVL 0
#define BUILD 0

View File

@@ -0,0 +1,294 @@
#include "..\script_component.hpp"
if ( !hasInterface ) exitWith {};
// Create Resupply Box
[
QUOTE(MODULE_CATEGORY_NAME),
"Create Resupply Box",
{
// module placement
params [["_pos", [0,0,0], [[]], 3], ["_target", objNull, [objNull]]];
// get parent definition
private _supplyCratesCfg = call EFUNC(resupply,getSupplyCratesCfg);
// get the subclass names
private _boxTypesAvailable = _supplyCratesCfg call BIS_fnc_getCfgSubClasses;
_boxTypesAvailable sort true;
_comboOptions = _boxTypesAvailable apply {
[
// display name
[_supplyCratesCfg >> _x >> "displayName", "STRING", "ERROR"] call CBA_fnc_getConfigEntry,
// tooltip
[_supplyCratesCfg >> _x >> "tooltip", "STRING", "ERROR"] call CBA_fnc_getConfigEntry,
// icon
[_supplyCratesCfg >> _x >> "icon", "STRING", "ERROR"] call CBA_fnc_getConfigEntry
]
};
[ // create the dialog
"Resupply Box Options",
[
// [ "COMBO", "Box Type", [[1,2,3], [["Ammo"],["Weapons"],["Medical"]],0] ]
["COMBO", "Box Type", [_boxTypesAvailable, _comboOptions, 0]]
],
{
params ["_dialog", "_args"];
_dialog params ["_typeOptionSelected"];
_args params ["_pos", "_target", "_keysSorted"];
private _box = [_target, _typeOptionSelected, _pos] call EFUNC(resupply,createBox);
if (isNull _box) exitWith {
["Resupply Box", "WARNING: Failed to locate or create box!"] call BIS_fnc_curatorHint;
};
[
"Resupply Box",
format[
"Created %1",
getText((call EFUNC(resupply,getSupplyCratesCfg)) >> _typeOptionSelected >> "displayName")
]
] call BIS_fnc_curatorHint;
},
{},
[_pos, _target]
] call zen_dialog_fnc_create;
}
] call zen_custom_modules_fnc_register;
// Manage wheels in a vehicle's ACE cargo
[
QUOTE(MODULE_CATEGORY_NAME),
"Manage Wheels in Vehicle",
{
// module placement
params [["_pos", [0,0,0], [[]], 3], ["_target", objNull, [objNull]]];
if (isNull _target) exitWith {
["Manage Wheels in Vehicle", "WARNING: No vehicle selected!"] call BIS_fnc_curatorHint;
};
if (_target isKindOf "CAManBase") exitWith {
["Manage Wheels in Vehicle", "WARNING: Cannot add wheels/tracks to a person!"] call BIS_fnc_curatorHint;
};
if (_target isKindOf "Static") exitWith {
["Manage Wheels in Vehicle", "WARNING: Cannot add wheels/tracks to a static object!"] call BIS_fnc_curatorHint;
};
// get loaded details
private _loadedItems = _target getVariable ["ace_cargo_loaded", []];
private _loadedItemsObjects = _loadedItems select { _x isEqualType objNull };
private _loadedItemsVirtual = _loadedItems select { _x isEqualType "" };
private _spaceLeft = _target getVariable ["ace_cargo_space", 0];
private _wheels = _loadedItemsVirtual select { _x isEqualTo "ACE_Wheel" };
_wheels append (_loadedItemsObjects select { typeOf _x isEqualTo "ACE_Wheel" });
private _maxWheels = floor ((_spaceLeft + count _loadedItems) / ("ACE_Wheel" call ace_cargo_fnc_getSizeItem));
private _currentWheels = count _wheels;
private _comboOptions = [[], [], _currentWheels];
for "_i" from 0 to _maxWheels do {
_comboOptions#0 pushBack _i;
_comboOptions#1 pushBack format["%1", _i];
};
[ // create the dialog
"Manage Wheels in Vehicle",
[
// [ "COMBO", "Box Type", [[1,2,3], [["Ammo"],["Weapons"],["Medical"]],0] ]
["TOOLBOX", "Existing Data", [
0, // default value
2, // num rows
2, // num columns
[
format["Loaded Items: %1", count _loadedItems],
format["Space Left: %1", _spaceLeft],
format["Loaded Wheels: %1", count _wheels]
]
]],
["COMBO", "Desired ACE Wheels Count", _comboOptions, true]
],
{
params ["_dialogValues", "_args"];
_dialogValues params ["_listItem", "_desiredWheelsCount"];
_args params ["_pos", "_target", "_currentWheelsCount"];
// MANAGE WHEELS
if (_desiredWheelsCount > _currentWheelsCount) then {
// add wheels
private _wheelsToAdd = _desiredWheelsCount - _currentWheelsCount;
systemChat format["Adding %1 wheels...", _wheelsToAdd];
for "_i" from 1 to _wheelsToAdd do {
if (
["ACE_Wheel", _target] call ace_cargo_fnc_canLoadItemIn
) then {
["ACE_Wheel", _target] call ace_cargo_fnc_addCargoItem;
};
};
};
if (_desiredWheelsCount < _currentWheelsCount) then {
// remove wheels
private _wheelsToRemove = _currentWheelsCount - _desiredWheelsCount;
systemChat format["Removing %1 wheels...", _wheelsToRemove];
["ACE_Wheel", _target, _wheelsToRemove] call ace_cargo_fnc_removeCargoItem;
};
// get loaded details
private _loadedItems = _target getVariable ["ace_cargo_loaded", []];
private _loadedItemsObjects = _loadedItems select { _x isEqualType objNull };
private _loadedItemsVirtual = _loadedItems select { _x isEqualType "" };
private _spaceLeft = _target getVariable ["ace_cargo_space", 0];
private _wheels = _loadedItemsVirtual select { _x isEqualTo "ACE_Wheel" };
_wheels append (_loadedItemsObjects select { typeOf _x isEqualTo "ACE_Wheel" });
private _maxWheels = floor ((_spaceLeft + count _loadedItems) / ("ACE_Wheel" call ace_cargo_fnc_getSizeItem));
private _currentWheels = count _wheels;
[
"Manage Wheels in Vehicle",
format[
"Updated count of wheels in vehicle: %1",
_currentWheels
]
] call BIS_fnc_curatorHint;
true;
},
{},
[_pos, _target, count _wheels, count _tracks]
] call zen_dialog_fnc_create;
}
] call zen_custom_modules_fnc_register;
// Manage tracks in a vehicle's ACE cargo
[
QUOTE(MODULE_CATEGORY_NAME),
"Manage Tracks in Vehicle",
{
// module placement
params [["_pos", [0,0,0], [[]], 3], ["_target", objNull, [objNull]]];
if (isNull _target) exitWith {
["Manage Tracks in Vehicle", "WARNING: No vehicle selected!"] call BIS_fnc_curatorHint;
};
if (_target isKindOf "CAManBase") exitWith {
["Manage Tracks in Vehicle", "WARNING: Cannot add wheels/tracks to a person!"] call BIS_fnc_curatorHint;
};
if (_target isKindOf "Static") exitWith {
["Manage Tracks in Vehicle", "WARNING: Cannot add wheels/tracks to a static object!"] call BIS_fnc_curatorHint;
};
// get loaded details
private _loadedItems = _target getVariable ["ace_cargo_loaded", []];
private _loadedItemsObjects = _loadedItems select { _x isEqualType objNull };
private _loadedItemsVirtual = _loadedItems select { _x isEqualType "" };
private _spaceLeft = _target getVariable ["ace_cargo_space", 0];
private _tracks = _loadedItemsVirtual select { _x isEqualTo "ACE_Track" };
_tracks append (_loadedItemsObjects select { typeOf _x isEqualTo "ACE_Track" });
private _maxTracks = floor ((_spaceLeft + count _loadedItems) / ("ACE_Track" call ace_cargo_fnc_getSizeItem));
private _currentTracks = count _tracks;
private _comboOptions = [[], [], _currentTracks];
for "_i" from 0 to _maxTracks do {
_comboOptions#0 pushBack _i;
_comboOptions#1 pushBack format["%1", _i];
};
[ // create the dialog
"Manage Tracks in Vehicle",
[
// [ "COMBO", "Box Type", [[1,2,3], [["Ammo"],["Weapons"],["Medical"]],0] ]
["TOOLBOX", "Existing Data", [
0, // default value
2, // num rows
2, // num columns
[
format["Loaded Items: %1", count _loadedItems],
format["Space Left: %1", _spaceLeft],
format["Loaded Tracks: %1", count _tracks]
]
]],
["COMBO", "Desired ACE Tracks Count", _comboOptions, true]
],
{
params ["_dialogValues", "_args"];
_dialogValues params ["_listItem", "_desiredTracksCount"];
_args params ["_pos", "_target", "_currentTracksCount"];
// MANAGE TRACKS
if (_desiredTracksCount > _currentTracksCount) then {
// add tracks
private _tracksToAdd = _desiredTracksCount - _currentTracksCount;
systemChat format["Adding %1 tracks...", _tracksToAdd];
for "_i" from 1 to _tracksToAdd do {
if (
["ACE_Track", _target] call ace_cargo_fnc_canLoadItemIn
) then {
["ACE_Track", _target] call ace_cargo_fnc_addCargoItem;
};
};
};
if (_desiredTracksCount < _currentTracksCount) then {
// remove tracks
private _tracksToRemove = _currentTracksCount - _desiredTracksCount;
systemChat format["Removing %1 tracks...", _tracksToRemove];
["ACE_Track", _target, _tracksToRemove] call ace_cargo_fnc_removeCargoItem;
};
// get loaded details
private _loadedItems = _target getVariable ["ace_cargo_loaded", []];
private _loadedItemsObjects = _loadedItems select { _x isEqualType objNull };
private _loadedItemsVirtual = _loadedItems select { _x isEqualType "" };
private _spaceLeft = _target getVariable ["ace_cargo_space", 0];
private _tracks = _loadedItemsVirtual select { _x isEqualTo "ACE_Track" };
_tracks append (_loadedItemsObjects select { typeOf _x isEqualTo "ACE_Track" });
private _maxTracks = floor ((_spaceLeft + count _loadedItems) / ("ACE_Track" call ace_cargo_fnc_getSizeItem));
private _currentTracks = count _tracks;
[
"Manage Tracks in Vehicle",
format[
"Updated count of tracks in vehicle: %1",
_currentTracks
]
] call BIS_fnc_curatorHint;
true;
},
{},
[_pos, _target, _currentTracks]
] call zen_dialog_fnc_create;
}
] call zen_custom_modules_fnc_register;
[
LEVEL_INFO,
QUOTE(COMPONENT),
"ZEUS ENHANCED MODULES ADDED",
[]
] call EFUNC(common,log);
nil;

View File

@@ -0,0 +1,14 @@
#include "..\script_component.hpp"
if (!hasInterface) exitWith {};
call FUNC(addZenModules);
[
LEVEL_DEBUG,
QUOTE(COMPONENT),
"postInit complete",
[]
] call EFUNC(common,log);
localNamespace setVariable [QGVAR(complete), true];

View File

@@ -0,0 +1,3 @@
#define COMPONENT zeus
#define COMPONENT_BEAUTIFIED Zeus Utilities
#include "../script_mod.hpp"

View File

@@ -6,7 +6,8 @@ onLoadMission = "THIS APPEARS BELOW THE LOADING SCREEN IMAGE";
briefingName = "THIS IS THE NAME ON THE #MISSIONS LIST";
overviewText = "THIS IS WHERE YOU DESCRIBE THE MISSION IN THE #MISSION LIST";
missionSeries = "";
// The name for the series of missions of your campaign. Used for organizational and search purposes
missionSeries = "MY SERIES NAME";
// activate via #ace-fortify west base 2000