Skip to content
Open
Show file tree
Hide file tree
Changes from all 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);

7 changes: 6 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,12 @@ 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_itemPriceCache = createHashMap;

////////////////////////////////////
Expand Down
3 changes: 3 additions & 0 deletions A3A/addons/core/functions/init/fn_initVarServer.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,7 @@ Debug_1("Extra equip mod paths: %1", A3A_extraEquipMods);
// TEMPLATE LOADING ///
//////////////////////////////////////
Info("Reading templates");
A3A_customSkeletonClasses = [];
{
private _side = [west, east, resistance, civilian] # _forEachIndex;
Info_2("Loading template %1 for side %2", _x, _side);
Expand Down Expand Up @@ -344,6 +345,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