Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion A3A/addons/core/Includes/common.inc
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#include "LogMacros.inc"

//Template macros
#define Faction(SIDE) (switch SIDE do {case west:{A3A_faction_occ}; case east:{A3A_faction_inv}; case resistance:{A3A_faction_reb}; case civilian:{A3A_faction_civ}; default {Error_1("Bad side passed passed to Faction(side), Side: %1", SIDE); createHashMap};})
#define Faction(SIDE) (switch SIDE do {case west:{A3A_faction_occ}; case east:{A3A_faction_inv}; case resistance:{A3A_faction_reb}; case civilian:{A3A_faction_civ}; default {Error_1("Bad side passed to Faction(side), Side: %1", SIDE); createHashMap};})
#define FactionGet(FAC, VAR) (A3A_faction_##FAC get VAR)
#define FactionGetOrDefault(FAC, VAR, DEF) (A3A_faction_##FAC getOrDefault [VAR, DEF])

Expand Down
11 changes: 9 additions & 2 deletions A3A/addons/core/functions/CREATE/fn_createUnit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,15 @@ private _unit = if (_unitDefinition isEqualTo []) then {
_group createUnit [_type, _position, _markers, _placement, _special];
} else {
_unitDefinition params ["_loadouts", "_traits", "_unitClass"];
private _u = _group createUnit [_unitClass, _position, _markers, _placement, _special];
private _u = if (_unitClass in A3A_customSkeletonClasses) then {
private _targetSide = side _group;
private _tempGroup = createGroup [_targetSide, true];
_u = _tempGroup createUnit [_unitClass, _position, _markers, _placement, _special];
[_u] joinSilent _group;
_u;
} else {
_group createUnit [_unitClass, _position, _markers, _placement, _special];
};

// shuffle select, uses each entry once until empty, then refills
private _buffer = A3A_loadoutShuffleBuffers getOrDefault [_type, [], true];
Expand All @@ -51,7 +59,6 @@ private _unit = if (_unitDefinition isEqualTo []) then {
};

_unit setVariable ["unitType", _type, true];

private _identity = if (isNil "_identity") then {
[Faction(side _unit), _type] call A3A_fnc_createRandomIdentity;
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,14 @@ private _allDefinitions = _faction get "loadouts";
//Register loadouts globally.
{
private _loadoutName = _x;
private _unitClass = _unitClassMap getOrDefault [_loadoutName, _baseUnitClass];
[_loadoutsPrefix + _loadoutName, _y + [_unitClass]] call A3A_fnc_registerUnitType;
private _unitDef = +_y;
private _customClass = _unitDef # 2;
if (_customClass == "") then {
_unitDef set [2, _unitClassMap getOrDefault [_loadoutName, _baseUnitClass]];
} else {
A3A_customSkeletonClasses pushBackUnique _customClass;
};
[_loadoutsPrefix + _loadoutName, _unitDef] call A3A_fnc_registerUnitType;
} forEach _allDefinitions;

#if __A3_DEBUG__
Expand Down
12 changes: 6 additions & 6 deletions A3A/addons/core/functions/Templates/fn_loadFaction.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -50,18 +50,18 @@ private _allLoadouts = createHashMap;
_dataStore set ["loadouts", _allLoadouts];

private _fnc_saveUnitToTemplate = {
params ["_typeName", "_loadouts", ["_traits", []]];
private _unitDefinition = [_loadouts, _traits];
params ["_typeName", "_loadouts", ["_traits", []], ["_baseClass", ""]];
private _unitDefinition = [_loadouts, _traits, _baseClass];
_allLoadouts set [_typeName, _unitDefinition];
};

private _fnc_generateAndSaveUnitToTemplate = {
params ["_name", "_template", "_loadoutData", "_traits", "_count"];
params ["_name", "_template", "_loadoutData", "_traits", "_count", "_baseClass"];
private _loadouts = [];
for "_i" from 1 to _count do {
_loadouts pushBack ([_template, _loadoutData] call A3A_fnc_loadout_builder);
};
[_name, _loadouts, _traits] call _fnc_saveUnitToTemplate;
[_name, _loadouts, _traits, _baseClass] call _fnc_saveUnitToTemplate;
};

private _fnc_generateAndSaveUnitsToTemplate = {
Expand All @@ -74,9 +74,9 @@ private _fnc_generateAndSaveUnitsToTemplate = {
while {_unitTemplates isNotEqualTo [] and diag_tickTime < _endTime} do {
private _unitLine = _unitTemplates deleteAt 0; // not many of these, array shuffle is cheap

_unitLine params ["_name", "_template", ["_traits", []], ["_count", 5]];
_unitLine params ["_name", "_template", ["_traits", []], ["_count", 5], ["_baseClass", ""]];
private _finalName = format ["%1_%2", _prefix, _name];
[_finalName, _template, _loadoutData, _traits, _count] call _fnc_generateAndSaveUnitToTemplate;
[_finalName, _template, _loadoutData, _traits, _count, _baseClass] call _fnc_generateAndSaveUnitToTemplate;
};
};
};
Expand Down
10 changes: 2 additions & 8 deletions A3A/addons/core/functions/init/fn_initACE.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,11 @@ if (isNil "ace_interact_menu_fnc_compileMenu" || isNil "ace_interact_menu_fnc_co
// Remove actions from Antistasi unit types
// Need to compile the menus first, because ACE delays creating menus until a unit of that class is created

// Player units
private _unitTypes = ["a3a_unit_player", // current player type
"I_G_soldier_F", "I_G_Soldier_TL_F", "I_G_Soldier_AR_F", "I_G_medic_F", "I_G_engineer_F", "I_G_Soldier_GL_F"]; // kept for extender compat
// AI units
_unitTypes append ["a3a_unit_west", "a3a_unit_east", "a3a_unit_civ", "a3a_unit_reb", "a3a_unit_reb_unarmed", "a3a_unit_reb_medic", "a3a_unit_reb_sniper", "a3a_unit_reb_marksman",
"a3a_unit_reb_lat", "a3a_unit_reb_mg", "a3a_unit_reb_exp", "a3a_unit_reb_gl", "a3a_unit_reb_sl", "a3a_unit_reb_eng", "a3a_unit_reb_at", "a3a_unit_reb_aa", "a3a_unit_reb_petros"];

{
[_x] call ace_interact_menu_fnc_compileMenu;
[_x] call ace_interact_menu_fnc_compileMenuSelfAction;
[_x, 0, ["ACE_ApplyHandcuffs"]] call ace_interact_menu_fnc_removeActionFromClass;
[_x, 1, ["ACE_SelfActions", "ACE_TeamManagement", "ACE_LeaveGroup"]] call ace_interact_menu_fnc_removeActionFromClass;
[_x, 0, ["ACE_MainActions", "ACE_JoinGroup"]] call ace_interact_menu_fnc_removeActionFromClass;
} forEach _unitTypes; // TODO: add raw unit types from new templates
} forEach (A3A_customUnitClasses + A3A_customSkeletonClasses);

8 changes: 7 additions & 1 deletion A3A/addons/core/functions/init/fn_initVarCommon.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,13 @@ A3A_vestDamageAdj = createHashMap;
// Data to prevent over-using the same loadouts
A3A_loadoutShuffleBuffers = createHashMap;

// Price cache for mags & weapons
// List of unit classnames Antistasi uses
A3A_customUnitClasses = ["I_G_soldier_F", "I_G_Soldier_TL_F", "I_G_Soldier_AR_F", "I_G_medic_F", "I_G_engineer_F", "I_G_Soldier_GL_F", // Player units
"a3a_unit_west", "a3a_unit_east", "a3a_unit_civ", "a3a_unit_reb", "a3a_unit_reb_unarmed", "a3a_unit_reb_medic", "a3a_unit_reb_sniper", "a3a_unit_reb_marksman", // spawned units
"a3a_unit_reb_lat", "a3a_unit_reb_mg", "a3a_unit_reb_exp", "a3a_unit_reb_gl", "a3a_unit_reb_sl", "a3a_unit_reb_eng", "a3a_unit_reb_at", "a3a_unit_reb_aa", "a3a_unit_reb_petros"
];
A3A_customSkeletonClasses = [];
Comment thread
Tiny-DM marked this conversation as resolved.
Outdated

A3A_itemPriceCache = createHashMap;

////////////////////////////////////
Expand Down
2 changes: 2 additions & 0 deletions A3A/addons/core/functions/init/fn_initVarServer.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,8 @@ call A3A_fnc_compileMissionAssets;
publicVariable ("A3A_faction_"+_x);
} forEach ["occ", "inv", "reb", "civ", "all"]; // ["A3A_faction_occ", "A3A_faction_inv", "A3A_faction_reb", "A3A_faction_civ", "A3A_faction_all"]

publicVariable "A3A_customSkeletonClasses";

// Set template-dependent map stuff

flagX setFlagTexture FactionGet(reb,"flagTexture"); // HQ flag, should be local here
Expand Down