Merge pull request 'adds default bases + allows mms to set custom waypoints for microdagr' (#26) from add-microdagr-waypoints into develop

Reviewed-on: hizumi/MissionTemplate#26
Reviewed-by: hizumi <hizumi@noreply.iceberg-gaming.com>
This commit was merged in pull request #26.
This commit is contained in:
2024-02-14 01:53:08 -06:00
11 changed files with 190 additions and 15 deletions

View File

@@ -5,9 +5,10 @@ class DOUBLES(PREFIX,init) {
file = "framework\init\functions";
class initServer { postInit = 1;};
class initClient { postInit = 1;};
class setDefaults { postInit = 1; };
class addAARChatHandler { postInit = 1; };
class addRespawnChatHandler { postInit = 1; };
class setDefaults {};
class addAARChatHandler {};
class addRespawnChatHandler {};
class checkMissionSettings {};
};
};
@@ -22,10 +23,11 @@ class PREFIX {
class DOUBLES(PREFIX,client) {
class functions {
file = "framework\client\functions";
class bindEmptyGroupGarbageCleanup { postInit = 1; };
class bindEventHandlers { postInit = 1; };
class bindVehicleActions { postInit = 1; };
class addZenModules {postInit = 1;};
class initClient {};
class addMicroDAGRWaypoints {};
class addZenModules {};
class bindEventHandlers {};
class bindVehicleActions {};
};
};
@@ -103,13 +105,14 @@ class DOUBLES(PREFIX,performance) {
class functions {
file = "framework\performance\functions";
class addCBASettings {preInit=1;};
class addDNI_PlayerFPS { postInit = 1; };
class addDNI_PlayerFPS {postInit = 1;};
// PFHs managed in addCBASettings onChange code
class addClientStatsPFH {};
class calculateClientStats {};
class addServerStatsPFH {};
class calculateServerStats {};
class addEmptyGroupCleanupPFH {};
};
};

View File

@@ -0,0 +1,59 @@
#include "..\script_component.hpp"
// adds default base locations to players' microDAGR as waypoints
if (!hasInterface) exitWith {};
[{!isNull player}, {
// add base locations (respawn modules)
{
private _wpName = [_x] call EFUNC(common,getNameOfBase);
private _posASL = getPosASL _x;
[_wpName, _posASL] call ace_microdagr_fnc_deviceAddWaypoint;
} forEach GVARMAIN(baseObjects);
// add custom waypoints from mission_settings.hpp
private _customWaypoints = [missionConfigFile >> "custom_microdagr_waypoints", "ARRAY", []] call CBA_fnc_getConfigEntry;
{
_x params [
["_wpName", ""],
["_pos", [0, 0, 0], [[], ""]],
["_object", "", [""]]
];
private _realPos = nil;
// if pos was provided, process
if (count _pos > 0) then {
if (typeName _pos == "STRING") then {
_realPos = [_pos, true] call ACE_common_fnc_getMapPosFromGrid;
_realPos set [2, getTerrainHeightASL _realPos];
} else {_realPos = _pos;};
};
// if object was provided, process and override any pos
if (count _object > 0) then {
// object is provided as a string variable name
private _realObject = missionNamespace getVariable _object;
if (isNull _realObject) then {
[
LEVEL_WARNING,
QUOTE(COMPONENT),
format["Invalid object for custom microDAGR waypoint: %1", _wpName],
[["name", _wpName], ["pos", _pos], ["object", _object]]] call EFUNC(common,log);
continue;
};
_realPos = getPosASL (missionNamespace getVariable _object);
};
if (isNil "_realPos") then {
[
LEVEL_WARNING,
QUOTE(COMPONENT),
format["Invalid waypoint position for custom microDAGR waypoint: %1", _wpName],
[["name", _wpName], ["pos", _pos], ["object", _object]]] call EFUNC(common,log);
continue;
};
[_wpName, _realPos] call ace_microdagr_fnc_deviceAddWaypoint;
} forEach _customWaypoints;
}] call CBA_fnc_waitUntilAndExecute;
nil;

View File

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

View File

@@ -1,5 +1,7 @@
#include "..\script_component.hpp"
if (!hasInterface) exitWith {};
[
"saveaar",
{

View File

@@ -1,5 +1,7 @@
#include "..\script_component.hpp"
if (!hasInterface) exitWith {};
[
"respawn",
{

View File

@@ -0,0 +1,41 @@
#include "..\script_component.hpp"
if (!hasInterface || !is3DENPreview) exitWith {};
private _warningText = [];
if (getText(missionConfigFile >> "author") in ["MISSION AUTHOR", ""]) then {
_warningText pushBack "<t font='EtelkaMonospacePro' size='0.7'>mission_settings\author</t> is blank or default!";
};
if (getText(missionConfigFile >> "onLoadName") in ["THIS APPEARS ON TOP OF THE LOADING SCREEN IMAGE", ""]) then {
_warningText pushBack "<t font='EtelkaMonospacePro' size='0.7'>mission_settings\onLoadName</t> is blank or default!";
};
if (getText(missionConfigFile >> "briefingName") in ["THIS IS THE NAME ON THE #MISSIONS LIST", ""]) then {
_warningText pushBack "<t font='EtelkaMonospacePro' size='0.7'>mission_settings\briefingName</t> is blank or default!";
};
if (getText(missionConfigFile >> "overviewText") in ["THIS IS WHERE YOU DESCRIBE THE MISSION IN THE #MISSION LIST", ""]) then {
_warningText pushBack "<t font='EtelkaMonospacePro' size='0.7'>mission_settings\overviewText</t> is blank or default!";
};
if (getText(missionConfigFile >> "missionSeries") in ["MY SERIES NAME", ""]) then {
_warningText pushBack "<t font='EtelkaMonospacePro' size='0.7'>mission_settings\missionSeries</t> is blank or default!";
};
if (count GVARMAIN(baseObjects) isEqualTo 0) then {
_warningText pushBack "No respawn points placed!";
};
if (count _warningText > 0) then {
[{
if (isNull (call BIS_fnc_displayMission)) exitWith {};
(_this#0) spawn {
[_this joinString "<br/>", "Issues found!", true, false] call BIS_fnc_guiMessage;
};
[_this#1] call CBA_fnc_removePerFrameHandler;
}, 1, _warningText] call CBA_fnc_addPerFrameHandler;
};
nil;

View File

@@ -1,6 +1,6 @@
#include "..\script_component.hpp"
if ( !hasInterface ) exitWith {};
if (!hasInterface) exitWith {};
["milsim_logText", {
params [["_strArray", [""], [[]]]];
@@ -14,6 +14,13 @@ waitUntil {!isNil QGVARMAIN(complete)};
["InitializePlayer", [player, true]] call BIS_fnc_dynamicGroups;
// run primary init functions
call FUNC(addAARChatHandler);
call FUNC(addRespawnChatHandler);
call FUNC(setDefaults);
call FUNC(checkMissionSettings);
// Initialize a holder for managing local diary records
// store records in format:
// [subject, [
@@ -23,6 +30,7 @@ EGVAR(common,diaryRecords) = createHashMap;
// initialize other modules
call EFUNC(client,initClient);
call EFUNC(mapcopy,initClient);
call EFUNC(reinsert,initClient);
call EFUNC(resupply,initClient);
@@ -33,6 +41,8 @@ call EFUNC(fbcb2_main,initClient);
call EFUNC(fbcb2_assets,initClient);
call FUNC(checkMissionSettings);
[
LEVEL_DEBUG,
QUOTE(COMPONENT),

View File

@@ -1,5 +1,7 @@
#include "..\script_component.hpp"
if (!hasInterface) exitWith {};
enableSaving[false, false];
enableRadio false;

View File

@@ -1,5 +1,27 @@
#include "..\script_component.hpp"
[
QGVAR(emptyGroupCleanup_enable),
"CHECKBOX",
"Empty Group Cleanup Enabled",
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
true,
true,
{
params ["_value"];
[
QGVAR(emptyGroupCleanup_enable),
_value
] call EFUNC(common,logSettingChanged);
if (!isNull (missionNamespace getVariable [QGVAR(emptyGroupCleanupPFH), locationNull])) then {
deleteLocation GVAR(emptyGroupCleanupPFH);
};
call FUNC(addEmptyGroupCleanupPFH);
}
] call CBA_fnc_addSetting;
//---------------------
// Server CPS
//---------------------

View File

@@ -7,7 +7,7 @@
[]
] call EFUNC(common,log);
_emptyGroupPFH = [
GVAR(emptyGroupCleanupPFH) = [
{
{
if (local _x) then {
@@ -19,7 +19,7 @@ _emptyGroupPFH = [
},
300,
[],
{
{ // on creation
[
LEVEL_INFO,
QUOTE(COMPONENT),
@@ -27,15 +27,16 @@ _emptyGroupPFH = [
[]
] call EFUNC(common,log);
},
{ [
{ // on deletion
[
LEVEL_INFO,
QUOTE(COMPONENT),
"Empty group deletion PFH unloaded",
[]
] call EFUNC(common,log);
},
{ true },
{ false },
{ (missionNamespace getVariable [QGVAR(emptyGroupCleanup_enable), false]) },
{ not (missionNamespace getVariable [QGVAR(emptyGroupCleanup_enable), false]) },
[]
] call CBA_fnc_createPerFrameHandlerObject;

View File

@@ -9,8 +9,21 @@ overviewText = "THIS IS WHERE YOU DESCRIBE THE MISSION IN THE #MISSION LIST";
// 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
// Add waypoints to players' MicroDAGR devices
// respawn locations (bases) are added by default, don't put them here
custom_microdagr_waypoints[] = {
// the first element is the waypoint name
// the second element is the position of the waypoint - you may use a string for map grid (up to 10 digit) or an array for {X, Y} coordinates
// the third element is optional - provide the variable name of an object if you want to use its initial position instead
// {"WAYPOINT NAME", {POSITION <[x,y]>}, OBJECT <objNull>},
// EXAMPLES:
// {"KAVALA HOSPITAL", {1234.56, 7890.12}, ""},
// {"CAMP TEMPEST", "03421460, ""},
// {"MY CUSTOM OBJECT", {}, "myCustomObject"}
};
// activate via #ace-fortify west base 2000
class ACEX_Fortify_Presets {
class base {
displayName = "Ken Custom";