adds default bases + allows mms to set custom waypoints for microdagr #26

Merged
hizumi merged 3 commits from add-microdagr-waypoints into develop 2024-02-14 01:53:10 -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 {};
IndigoFox marked this conversation as resolved
Review

regression introduced here with bindEmptyGroupGarbageCleanup on my part due to naming convention.
postInit = 1 was to allow running on all machine, as technically the server is a client; needs to be executed on both clients and server for due to locality issues on failed ownership transfers

regression introduced here with bindEmptyGroupGarbageCleanup on my part due to naming convention. postInit = 1 was to allow running on all machine, as technically the server is a client; needs to be executed on both clients and server for due to locality issues on failed ownership transfers
Review

moved to performance module and is now managed with global setting & removal/reapply on setting change

moved to performance module and is now managed with global setting & removal/reapply on setting change
class bindEventHandlers {};
class bindVehicleActions {};
};
};
@@ -110,6 +112,7 @@ class DOUBLES(PREFIX,performance) {
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

@@ -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";