Skip to content

Commit

Permalink
Release v1.0.0 (#78)
Browse files Browse the repository at this point in the history
* replace real_date extension with CBA_fnc_weekDay
resolves #70

* create script to automatically update #12

* copy commonObject actions to function
function not yet used

* disable functionality if framework not initialized
resolves #65

* add vehicle info functions; see #40
from https://github.com/Soliders-in-Arms-Arma-3-Group/SIA-Mission-Framework.VR/blob/main/sia_f/functions/briefing/fn_vehicleInfo.sqf

* touch up parameters; misc.

* move obj attributes to file; supportInfo option
#40 front end

* fix actions stuff (I think)

* finish vehicle info briefing stuff
Still needs some final touches, but pretty much done.

* add zeus actions to func; misc.

* save loadout on mission start
requested by Austin [here](https://discord.com/channels/689674061366034435/690255520728350720/1029724157413445632)

* move proper actions to buttonActions/playerActions
misc

* move core serverPostInit into functions
resolves #71

* add new functions to prep

* bug fixes; convert spaces to tabs

* update vehicle info header; formatting

* fix #import instead of #include; delete build.bat
hopefully build.bat isn't used, but it just runs hemtt

* add expression disclaimer in configuration readme
not that anyone will ever read it.

* progress on #74, formatting/syntax, documentation

* Fix for #74

* safeStart Safety and Init readded
Resolves: #76

* minor tweaks
- Removed error message when a section of the briefing is empty.
- Added zeusActions function to run on postClientInit.

* XEH_PREP alphabetized

* addActions non-ace tweaks

* fix formatting

* make.py now works with pre-defined keys

* update version to v1.0.0
  • Loading branch information
SiegeToaster committed Nov 24, 2022
1 parent a4b8c9b commit 5953d40
Show file tree
Hide file tree
Showing 55 changed files with 1,075 additions and 391 deletions.
23 changes: 23 additions & 0 deletions .github/workflows/update-RPT-issue.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Update RPT issue (#12)

on:
push:
branches:
- main

jobs:
updateRPT:
runs-on: ubuntu-latest
steps:
- name: Checkout the source code
uses: actions/checkout@master
- name: Setup python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies v1
run: pip install pygithub
- name: Install dependencies v2
run: pip install pygithub3
- name: Update Issue
run: python3 tools/update_RPT_ToDo.py
2 changes: 2 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
"GVAR",
"Koromiko",
"listbox",
"OCAP",
"pygithub",
"QEFUNC",
"QEGVAR",
"QFUNC",
Expand Down
5 changes: 5 additions & 0 deletions addons/ace/XEH_PREP.hpp
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
PREP(addActionsManageKit);
PREP(addActionsTPToSquad);
PREP(initLocalArsenal);
PREP(interactions);
PREP(playerActions);
PREP(zeusActions);
152 changes: 10 additions & 142 deletions addons/ace/XEH_clientPostInit.sqf
Original file line number Diff line number Diff line change
@@ -1,145 +1,13 @@
#include "script_component.hpp"
// should behave identically to initPlayerLocal

if (!("@ace" call EFUNC(core,checkModPresence)) || (allDisplays isEqualTo [findDisplay 0]) || is3DEN) exitWith {};

/* ACE3 Interactions */
private ["_action", "_statement"];
private _buttons = missionNamespace getVariable [QEGVAR(configuration,buttons), []];
private _arsenals = missionNamespace getVariable [QEGVAR(configuration,arsenals), []];
private _commonObjects = +_buttons + _arsenals;
_commonObjects = _commonObjects arrayIntersect _commonObjects;

// =======================================================================================
// Player Self Actions

// SIA Parent Action
_action = [QGVAR(siaActions), " SIA Options", QPATHTOEF(core,ui\logo_sia3f_tiny.paa), {}, { true }] call ace_interact_menu_fnc_createAction;
[typeOf player, 1, ["ACE_SelfActions"], _action] call ace_interact_menu_fnc_addActionToClass;

// Go AFK
if (GET_CONFIG(enableGoAFK,true)) then {
private _action = [QGVAR(AFK), "Go AFK", "\A3\Ui_F\Data\IGUI\Cfg\simpleTasks\types\wait_ca.paa", { [] spawn EFUNC(core,goAFK) }, { !(player getVariable [QEGVAR(core,isAFK), false]) }] call ace_interact_menu_fnc_createAction;
[typeOf player, 1, ["ACE_SelfActions", QGVAR(siaActions)], _action] call ace_interact_menu_fnc_addActionToClass;
};

// Setup safeStart Hint
_action = [QGVAR(safeStartHint), "Show Mission Info", "\A3\Ui_F\Data\IGUI\Cfg\simpleTasks\types\unknown_ca.paa", { call EFUNC(core,hint) }, { true }] call ace_interact_menu_fnc_createAction;
[typeOf player, 1, ["ACE_SelfActions", QGVAR(siaActions)], _action] call ace_interact_menu_fnc_addActionToClass;

_statement = {
if (player getVariable [QEGVAR(core,safeStartHintEnabled), true]) then {
player setVariable [QEGVAR(core,safeStartHintEnabled), false];
hint "Setup Hint is now DISABLED";
} else {
player setVariable [QEGVAR(core,safeStartHintEnabled), true];
hint "Setup Hint is now ENABLED";
};
};

_action = [QGVAR(safeStartHintToggle), "Toggle Setup Hint", "", _statement, { !(missionNamespace getVariable [QEGVAR(core,missionStarted), false]) }] call ace_interact_menu_fnc_createAction;
[typeOf player, 1, ["ACE_SelfActions", QGVAR(siaActions), QGVAR(safeStartHint)], _action] call ace_interact_menu_fnc_addActionToClass;

// Music Control
_action = [QGVAR(MusicStop), "Stop Music", "\A3\Ui_F\Data\IGUI\RscIngameUI\RscUnitInfoAirRTDFull\ico_cpt_music_OFF_ca.paa", { playMusic "" }, { true }] call ace_interact_menu_fnc_createAction;
[typeOf player, 1, ["ACE_SelfActions", QGVAR(siaActions)], _action] call ace_interact_menu_fnc_addActionToClass;

_action = [QGVAR(MusicMute), "Mute All Music", "", { 1 fadeMusic 0 }, { musicVolume > 0 }] call ace_interact_menu_fnc_createAction;
[typeOf player, 1, ["ACE_SelfActions", QGVAR(siaActions), QGVAR(MusicStop)], _action] call ace_interact_menu_fnc_addActionToClass;

_action = [QGVAR(MusicUnmute), "Unmute All Music", "", { 1 fadeMusic 0.5 }, { musicVolume <= 0 }] call ace_interact_menu_fnc_createAction;
[typeOf player, 1, ["ACE_SelfActions", QGVAR(siaActions), QGVAR(MusicStop)], _action] call ace_interact_menu_fnc_addActionToClass;

// =======================================================================================
// Arsenal/Button Actions

// Teleport to Squad
if (!isNil "_buttons" && GET_CONFIG(enableTPToSquad,true)) then {
_action = [QGVAR(TpSquad), "Teleport to Squad", "\A3\Ui_F\Data\IGUI\Cfg\simpleTasks\types\meet_ca.paa", { [] spawn EFUNC(core,teleportToSquad) }, { true }] call ace_interact_menu_fnc_createAction;
{ [_x, 0, ["ACE_MainActions"], _action, true] call ace_interact_menu_fnc_addActionToObject } forEach _buttons;
};

// Manage Loadouts
if (GET_CONFIG(enableManageKit,true)) then {

_statement = {
player setVariable [QEGVAR(core,savedLoadout), getUnitLoadout player];
hint "Kit saved. Will be loaded on respawn.";
};

_action = [QGVAR(kit), "Save/Manage Kit", "\A3\Ui_F\Data\IGUI\Cfg\Actions\gear_ca.paa", _statement, { true }] call ace_interact_menu_fnc_createAction;
{ [_x, 0, ["ACE_MainActions"], _action, true] call ace_interact_menu_fnc_addActionToObject; } forEach _commonObjects;

_action = [QGVAR(kitSave), "Save Current Kit", "\A3\Ui_F\Data\GUI\Rsc\RscDisplayArcadeMap\icon_save_ca.paa", _statement, { true }] call ace_interact_menu_fnc_createAction;
{ [_x, 0, ["ACE_MainActions", QGVAR(kit)], _action, true] call ace_interact_menu_fnc_addActionToObject; } forEach _commonObjects;

_action = [QGVAR(kitLoad), "Load Saved Kit", "\A3\Ui_F\Data\IGUI\Cfg\Actions\reammo_ca.paa", { player setUnitLoadout (player getVariable [QEGVAR(core,savedLoadout), []]); hint "Saved kit loaded." }, { true }] call ace_interact_menu_fnc_createAction;
{ [_x, 0, ["ACE_MainActions", QGVAR(kit)], _action, true] call ace_interact_menu_fnc_addActionToObject; } forEach _commonObjects;

_action = [QGVAR(kitClear), "Remove Saved Kit", "z\ace\addons\arsenal\data\iconClearContainer.paa", { player setVariable [QEGVAR(core,savedLoadout), nil]; hint "Saved kit cleared. Will use kit from death when respawned" }, { true }] call ace_interact_menu_fnc_createAction;
{ [_x, 0, ["ACE_MainActions", QGVAR(kit)], _action, true] call ace_interact_menu_fnc_addActionToObject; } forEach _commonObjects;
};

// Update Loadout Info
if (GET_CONFIG(enableLoadoutInfo,true) && GET_CONFIG(briefLoadout,true)) then {
_action = [QGVAR(loadoutNotesRefresh), "Update Team Loadout Info", "\A3\Ui_F\Data\IGUI\Cfg\simpleTasks\types\documents_ca.paa", {
call EFUNC(core,loadoutNotes);
openMap true;
player selectDiarySubject "Diary";
}, { !(missionNamespace getVariable [QEGVAR(core,missionStarted), false]) }] call ace_interact_menu_fnc_createAction;
[typeOf player, 1, ["ACE_SelfActions", QGVAR(siaActions)], _action] call ace_interact_menu_fnc_addActionToClass;
};

// =======================================================================================
// Zeus Actions

// Pre-OP Phases
private _actionSetPhase = [QEGVAR(core,safeStart_phase), "Set Phase", "\A3\ui_f\data\IGUI\Cfg\simpleTasks\types\use_ca.paa", {}, { !(missionNamespace getVariable [QEGVAR(core,missionStarted), false]) }] call ace_interact_menu_fnc_createAction;

private _actionPhaseBriefUpper = [QGVAR(safeStart_phaseBriefUpper), "Upper-level Brief", "\A3\ui_f\data\IGUI\Cfg\simpleTasks\types\whiteboard_ca.paa", {
[QEGVAR(core,safeStart_phase), ["The upper-level brief is commencing!", "\A3\ui_f\data\IGUI\Cfg\simpleTasks\types\whiteboard_ca.paa"]] remoteExec ["BIS_fnc_showNotification"];
missionNamespace setVariable [QEGVAR(core,safeStart_phase), "Upper-level Briefing", true];
}, { !(missionNamespace getVariable [QEGVAR(core,missionStarted), false]) }] call ace_interact_menu_fnc_createAction;

private _actionPhaseBriefLower = [QGVAR(safeStart_phaseBriefLower), "Lower-level Brief", "\A3\ui_f\data\IGUI\Cfg\simpleTasks\types\whiteboard_ca.paa", {
[QEGVAR(core,safeStart_phase), ["The lower-level brief is commencing!", "\A3\ui_f\data\IGUI\Cfg\simpleTasks\types\whiteboard_ca.paa"]] remoteExec ["BIS_fnc_showNotification"];
missionNamespace setVariable [QEGVAR(core,safeStart_phase), "Lower-level Briefing", true];
}, { !(missionNamespace getVariable [QEGVAR(core,missionStarted), false]) }] call ace_interact_menu_fnc_createAction;

private _actionPhaseKit = [QGVAR(safeStart_phaseKit), "Kit Up", "\A3\ui_f\data\IGUI\Cfg\simpleTasks\types\rearm_ca.paa", {
[QEGVAR(core,safeStart_phase), ["Time to kit up!", "\A3\ui_f\data\IGUI\Cfg\simpleTasks\types\rearm_ca.paa"]] remoteExec ["BIS_fnc_showNotification"];
missionNamespace setVariable [QEGVAR(core,safeStart_phase), "Kitting Up", true];
}, { !(missionNamespace getVariable [QEGVAR(core,missionStarted), false]) }] call ace_interact_menu_fnc_createAction;

private _actionPhaseMount = [QGVAR(safeStart_phaseMount), "Mount Up", "\A3\ui_f\data\IGUI\Cfg\HoldActions\holdAction_loadDevice_ca.paa", {
[QEGVAR(core,safeStart_phase), ["Time to mount up!", "\A3\ui_f\data\IGUI\Cfg\HoldActions\holdAction_loadDevice_ca.paa"]] remoteExec ["BIS_fnc_showNotification"];
missionNamespace setVariable [QEGVAR(core,safeStart_phase), "Mounting Up", true];
}, { !(missionNamespace getVariable [QEGVAR(core,missionStarted), false]) }] call ace_interact_menu_fnc_createAction;

private _actionPhaseStandby = [QGVAR(safeStart_phaseStandby), "Stand By", "\A3\ui_f\data\IGUI\Cfg\simpleTasks\types\wait_ca.paa", {
[QEGVAR(core,safeStart_phase), ["Stand By", "\A3\ui_f\data\IGUI\Cfg\simpleTasks\types\wait_ca.paa"]] remoteExec ["BIS_fnc_showNotification"];
missionNamespace setVariable [QEGVAR(core,safeStart_phase), "Standing By", true];
}, { !(missionNamespace getVariable [QEGVAR(core,missionStarted), false]) }] call ace_interact_menu_fnc_createAction;

private _phaseActions = [_actionPhaseBriefUpper, _actionPhaseBriefLower, _actionPhaseKit, _actionPhaseMount, _actionPhaseStandby];
[["ACE_ZeusActions"], _actionSetPhase] call ace_interact_menu_fnc_addActionToZeus;
{ [["ACE_ZeusActions", QEGVAR(core,safeStart_phase)], _x] call ace_interact_menu_fnc_addActionToZeus } forEach _phaseActions;

// ToDo: Give plt leader access to phase change.

// Start Mission Action + Confirmation
_action = [QGVAR(safeStart_missionStart), "Start Mission", "\A3\ui_f\data\IGUI\Cfg\simpleTasks\types\getin_ca.paa", {}, { !(missionNamespace getVariable [QEGVAR(core,missionStarted), false]) }] call ace_interact_menu_fnc_createAction;
[["ACE_ZeusActions"], _action] call ace_interact_menu_fnc_addActionToZeus;

_action = [QGVAR(safeStart_missionStartConfirm), "Confirm", "", { call EFUNC(core,startMission) }, { !(missionNamespace getVariable [QEGVAR(core,missionStarted), false]) }] call ace_interact_menu_fnc_createAction;
[["ACE_ZeusActions", QGVAR(safeStart_missionStart)], _action] call ace_interact_menu_fnc_addActionToZeus;

// End Mission Action + Confirmation
_action = [QGVAR(safeStart_missionEnd), "End Mission", "\A3\ui_f\data\IGUI\Cfg\simpleTasks\types\getOut_ca.paa", {}, { (missionNamespace getVariable [QEGVAR(core,missionStarted), false]) }] call ace_interact_menu_fnc_createAction;
[["ACE_ZeusActions"], _action] call ace_interact_menu_fnc_addActionToZeus;

_action = [QGVAR(safeStart_missionEndWin), "Win", "", { ["end1", true, true] remoteExecCall ["BIS_fnc_endMission"] }, { (missionNamespace getVariable [QEGVAR(core,missionStarted), false]) }] call ace_interact_menu_fnc_createAction;
[["ACE_ZeusActions", QGVAR(safeStart_missionEnd)], _action] call ace_interact_menu_fnc_addActionToZeus;

_action = [QGVAR(safeStart_missionEndLose), "Lose", "", { ["end1", false, true] remoteExecCall ["BIS_fnc_endMission"] }, { (missionNamespace getVariable [QEGVAR(core,missionStarted), false]) }] call ace_interact_menu_fnc_createAction;
[["ACE_ZeusActions", QGVAR(safeStart_missionEnd)], _action] call ace_interact_menu_fnc_addActionToZeus;
if (
!("@ace" call EFUNC(core,checkModPresence)) ||
allDisplays isEqualTo [findDisplay 0] ||
is3DEN ||
!GET_CONFIG(frameworkInit,false)
) exitWith {};

// Player Self Actions
call FUNC(playerActions);
call FUNC(zeusActions);
7 changes: 6 additions & 1 deletion addons/ace/XEH_preInit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ ADDON = false;

#include "XEH_PREP.hpp"

if (!("@ace" call EFUNC(core,checkModPresence)) || (allDisplays isEqualTo [findDisplay 0]) || is3DEN) exitWith {};
if (
!("@ace" call EFUNC(core,checkModPresence)) ||
allDisplays isEqualTo [findDisplay 0] ||
is3DEN ||
!GET_CONFIG(frameworkInit,false)
) exitWith {};

ADDON = true;
7 changes: 6 additions & 1 deletion addons/ace/XEH_preStart.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,9 @@

#include "XEH_PREP.hpp"

if (!("@ace" call EFUNC(core,checkModPresence)) || (allDisplays isEqualTo [findDisplay 0]) || is3DEN) exitWith {};
if (
!("@ace" call EFUNC(core,checkModPresence)) ||
allDisplays isEqualTo [findDisplay 0] ||
is3DEN ||
!GET_CONFIG(frameworkInit,false)
) exitWith {};
66 changes: 66 additions & 0 deletions addons/ace/functions/fnc_addActionsManageKit.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#include "script_component.hpp"

/*
* Author: McKendrick, Siege
* Add 'Manage Kit' actions to the given objects.
*
* Arguments:
* 0: button objects <ARRAY of OBJECT>
*
* Return Value:
* None
*
* Example:
* [[someButton, someOtherButton]] call sia3f_ace_fnc_addActionsManageKit
*/

params [
["_objects", [], [[objNull]]]
];

if (!GET_CONFIG(enableManageKit,true) || _objects isEqualTo []) exitWith {
LOG_FUNC_END_ERROR("enableManageKit disabled or invalid/empty params");
};
LOG_FUNC_START;

TRACE_1("params",_objects);

// Manage Loadouts Expressions
private _statementKitSave = {
player setVariable [QEGVAR(core,savedLoadout), getUnitLoadout player];
hint "Kit saved. Will be loaded on respawn.";
};

private _statementKitLoad = {
player setUnitLoadout (player getVariable [QEGVAR(core,savedLoadout), []]);
hint "Saved kit loaded.";
};

private _statementKitClear = {
player setVariable [QEGVAR(core,savedLoadout), nil];
hint "Saved kit cleared. Will use kit from death when respawned.";
};

if ("@ace" call EFUNC(core,checkModPresence)) then {
private _mainAction = [QGVAR(kit), "Save/Manage Kit", "\A3\Ui_F\Data\IGUI\Cfg\Actions\gear_ca.paa", _statementKitSave, { true }] call ace_interact_menu_fnc_createAction;
private _saveAction = [QGVAR(kitSave), "Save Current Kit", "\A3\Ui_F\Data\GUI\Rsc\RscDisplayArcadeMap\icon_save_ca.paa", _statementKitSave, { true }] call ace_interact_menu_fnc_createAction;
private _loadAction = [QGVAR(kitLoad), "Load Saved Kit", "\A3\Ui_F\Data\IGUI\Cfg\Actions\reammo_ca.paa", _statementKitLoad, { true }] call ace_interact_menu_fnc_createAction;
private _clearAction = [QGVAR(kitClear), "Remove Saved Kit", "z\ace\addons\arsenal\data\iconClearContainer.paa", _statementKitClear, { true }] call ace_interact_menu_fnc_createAction;

{
private _y = _x;
[_y, 0, ["ACE_MainActions"], _mainAction, true] call ace_interact_menu_fnc_addActionToObject;
{ [_y, 0, ["ACE_MainActions", QGVAR(kit)], _x, true] call ace_interact_menu_fnc_addActionToObject; } forEach [_saveAction, _loadAction, _clearAction];
} forEach _objects;

} else {
{
_x addAction ["----------", {}]; // 10 indents for spacing
_x addAction ["<img image='\A3\Ui_F\Data\GUI\Rsc\RscDisplayArcadeMap\icon_save_ca.paa'/> Save Current Kit", _statementKitSave];
_x addAction ["<img image='\A3\Ui_F\Data\IGUI\Cfg\Actions\reammo_ca.paa'/> Load Saved Kit", _statementKitLoad];
_x addAction ["<img image='\A3\Ui_F\Data\IGUI\Cfg\Actions\gear_ca.paa'/> Remove Saved Kit", _statementKitClear];
_x addAction ["----------", {}];
} forEach _objects;
};

LOG_FUNC_END;
37 changes: 37 additions & 0 deletions addons/ace/functions/fnc_addActionsTPToSquad.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#include "script_component.hpp"

/*
* Author: McKendrick, Siege
* Add 'Teleport to Squad' actions to the given objects.
*
* Arguments:
* 0: button objects <ARRAY of OBJECT>
*
* Return Value:
* None
*
* Example:
* [[someButton, someOtherButton]] call sia3f_ace_fnc_addActionsTPToSquad
*/

params [
["_objects", [], [[objNull]]]
];

if (!GET_CONFIG(enableTPToSquad,true) || _objects isEqualTo []) exitWith {
LOG_FUNC_END_ERROR("enableTPToSquad disabled or invalid/empty params");
};
LOG_FUNC_START;

TRACE_1("params",_objects);

if ("@ace" call EFUNC(core,checkModPresence)) then {
private _tpToSquadAction = [QGVAR(TpSquad), "Teleport to Squad", "\A3\Ui_F\Data\IGUI\Cfg\simpleTasks\types\meet_ca.paa", { [] spawn EFUNC(core,teleportToSquad) }, { true }] call ace_interact_menu_fnc_createAction;
{ [_x, 0, ["ACE_MainActions"], _tpToSquadAction, true] call ace_interact_menu_fnc_addActionToObject; } forEach _objects;
} else {
{
_x addAction ["<img image='\A3\Ui_F\Data\IGUI\Cfg\simpleTasks\types\meet_ca.paa'/> Teleport to Squad", { [] spawn EFUNC(core,teleportToSquad); }];
} forEach _objects;
};

LOG_FUNC_END;
35 changes: 35 additions & 0 deletions addons/ace/functions/fnc_interactions.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#include "script_component.hpp"

/*
* Author: Siege
* Organizes buttons/arsenals and calls add action functions.
*
* Arguments:
* 0: Buttons <ARRAY of OBJECT>
* 1: Arsenals <ARRAY of OBJECT>
*
* Return Value:
* None
*
* Example:
* call sia3f_ace_fnc_interactions
*/

// interaction objects
params [
["_buttons", [], [[]]],
["_arsenals", [], [[]]]
];
LOG_FUNC_START;
TRACE_2("params",_buttons,_arsenals);

private _commonObjects = +_buttons + _arsenals;
_commonObjects = _commonObjects arrayIntersect _commonObjects;
TRACE_3("interaction objects",_buttons,_arsenals,_commonObjects);

// Arsenal/Button Actions
[_buttons] call FUNC(addActionsTPToSquad);
[_commonObjects] call FUNC(addActionsManageKit);
["addActions", _buttons] call EFUNC(core,teleport);

LOG_FUNC_END;
Loading

0 comments on commit 5953d40

Please sign in to comment.