Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement type-dependent classes for rebel AIs #1947

Merged
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
8 changes: 1 addition & 7 deletions A3-Antistasi/functions/CREATE/fn_createUnit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,7 @@ params ["_group", "_type", "_position", ["_markers", []], ["_placement", 0], ["_
private _unitDefinition = customUnitTypes getVariable [_type, []];

if !(_unitDefinition isEqualTo []) exitWith {
_unitDefinition params ["_loadouts", "_traits"];
private _unitClass = switch (side _group) do {
case west: { "B_G_Soldier_F" };
case east: { "O_G_Soldier_F" };
case independent: { "I_G_Soldier_F" };
case civilian: { "C_Man_1" };
};
_unitDefinition params ["_loadouts", "_traits", "_unitClass"];
private _unit = _group createUnit [_unitClass, _position, _markers, _placement, _special];
_unit setUnitLoadout selectRandom _loadouts;
_unit setVariable ["unitType", _type, true];
Expand Down
6 changes: 3 additions & 3 deletions A3-Antistasi/functions/CREATE/fn_registerUnitType.sqf
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#include "..\..\Includes\common.inc"
FIX_LINE_NUMBERS()

params [["_unitTypeName", nil, [""]], ["_unitLoadouts", nil, [[]]]];
params [["_unitTypeName", nil, [""]], ["_unitDefinition", nil, [[]]]];

if (!isServer) exitWith {};

Debug_2("Registering unit %1 with %2 loadouts", _unitTypeName, count _unitLoadouts);
Debug_3("Registering unit %1 with class %2 and %3 loadouts", _unitTypeName, _unitDefinition#2, count (_unitDefinition#0));

customUnitTypes setVariable [_unitTypeName, _unitLoadouts, true];
customUnitTypes setVariable [_unitTypeName, _unitDefinition, true];
36 changes: 32 additions & 4 deletions A3-Antistasi/functions/Templates/fn_compatabilityLoadFaction.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,42 @@ private _factionPrefix =

missionNamespace setVariable ["faction_" + _factionPrefix, _faction, true];

private _baseUnitClass = switch (_side) do {
case west: { "B_G_Soldier_F" };
case east: { "O_G_Soldier_F" };
case independent: { "I_G_Soldier_F" };
case civilian: { "C_Man_1" };
};

private _unitClassMap = if (_side isNotEqualTo independent) then { createHashMap } else {
createHashMapFromArray [ // Cases matter. Lower case here because allVariables on namespace returns lowercase
["militia_unarmed", "I_G_Survivor_F"],
["militia_rifleman", "I_G_Soldier_F"],
["militia_staticcrew", "I_G_Soldier_F"],
["militia_medic", "I_G_medic_F"],
["militia_sniper", "I_G_Sharpshooter_F"],
["militia_marksman", "I_G_Soldier_M_F"],
["militia_lat", "I_G_Soldier_LAT_F"],
["militia_machinegunner", "I_G_Soldier_AR_F"],
["militia_explosivesexpert", "I_G_Soldier_exp_F"],
["militia_grenadier", "I_G_Soldier_GL_F"],
["militia_squadleader", "I_G_Soldier_SL_F"],
["militia_engineer", "I_G_engineer_F"],
["militia_at", "I_Soldier_AT_F"],
["militia_aa", "I_Soldier_AA_F"],
["militia_petros", "I_G_officer_F"]
]
};

//Register loadouts globally.
private _loadoutsPrefix = format ["loadouts_%1_", _factionPrefix];
private _allLoadouts = _faction getVariable "loadouts";
private _allDefinitions = _faction getVariable "loadouts";
{
private _loadoutName = _x;
private _loadouts = _allLoadouts getVariable _loadoutName;
[_loadoutsPrefix + _loadoutName, _loadouts] call A3A_fnc_registerUnitType;
} forEach allVariables _allLoadouts;
private _definition = _allDefinitions getVariable _loadoutName;
private _unitClass = _unitClassMap getOrDefault [_loadoutName, _baseUnitClass];
[_loadoutsPrefix + _loadoutName, _definition + [_unitClass]] call A3A_fnc_registerUnitType;
} forEach allVariables _allDefinitions;

if (_side isEqualTo east) then {
nameInvaders = _faction getVariable "name";
Expand Down