summaryrefslogtreecommitdiffstats
path: root/Common/Config/Core_Squads/Squads_GetFactionGroups.sqf
blob: cf5df8217ceac61bb3407739b9961a04129e03e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* Use this file if you wish to set quickly a faction's groups */
Private ['_aiTeamTemplates','_aiTeamTemplateName','_aiTeamTemplateRequires','_aiTeamTypes','_aiTeamUpgrades','_blacklist','_cfgFaction','_faction','_side'];

_side = _this select 0;
_faction = _this select 1;
_blacklist = if (count _this > 2) then {_this select 2} else {[]};

_cfgFaction = configFile >> "CfgGroups" >> _side >> _faction;

if !(isClass _cfgFaction) exitWith {diag_log Format ["[WFBE (ERROR)][frameno:%1 | ticktime:%2] Squads_SetFactionGroups: Entry (configFile >> '%3' >> '%4') is not a valid group config.",diag_frameno,diag_tickTime,_side,_faction]};

_aiTeamTemplates = [];
_aiTeamTemplateName = [];
_aiTeamTemplateRequires = [];
_aiTeamTypes =  [];
_aiTeamUpgrades = [];

//--- Iterate through the faction's config and grab the group along with it's properties.
for "_i" from 0 to ((count _cfgFaction) - 1) do {
	Private ["_classKind"];
	_classKind = _cfgFaction select _i;
	
	// ACE CSW squads don't work quite right.
	if (isClass _classKind && toUpper (configName(_classKind)) != "ACE_CSW_INFANTRY") then {
		Private ["_nameKind"];
		_nameKind = getText (_classKind >> "name");
		for "_j" from 0 to ((count _classKind) - 1) do {
			Private ["_classType"];
			_classType = _classKind select _j;
			if (isClass _classType && !(configName(_classType) in _blacklist)) then {
				Private ["_factoryPool","_groupUnits","_levels","_nameGroup","_require"];
				_nameGroup = getText (_classType >> "name");
				_aiTeamTemplateName = _aiTeamTemplateName + [Format ["%1 - %2",_nameKind,_nameGroup]];
				_groupUnits = [];
				_require = [false, false, false, false];
				_levels = [0,0,0,0];
					
				for "_k" from 0 to ((count _classType) - 1) do {
					Private ["_classUnit"];
					_classUnit = _classType select _k;
					
					if (isClass _classUnit) then {
						Private ["_unit"];
						_unit = getText (_classUnit >> "vehicle");
						_groupUnits = _groupUnits + [_unit];
						
						_get = _unit Call GetNamespace;
						if !(isNil "_get") then {
							_type = _get select QUERYUNITFACTORY;
							_upgrade = _get select QUERYUNITUPGRADE;
							
							_require set [_type, true];
							_levels set [_type, _upgrade];
						} else {
							diag_log Format ["[WFBE (ERROR)][frameno:%2 | ticktime:%3] Squads_SetFactionGroups: Unit '%1' is not a defined within the core files.",_unit,diag_frameno,diag_tickTime];
							/* TODO, Attempt to define*/
						};
					};
				};
				
				_factoryPool = switch (configName _classKind) do {
					case "Infantry": {0};
					case "Motorized": {1};
					case "Mechanized": {2};
					case "Armor": {2};
					case "Air": {3};
					default {0};
				};
				_aiTeamTypes = _aiTeamTypes + [_factoryPool];
				_aiTeamUpgrades = _aiTeamUpgrades + [_levels];
				_aiTeamTemplateRequires = _aiTeamTemplateRequires + [_require];
				_aiTeamTemplates = _aiTeamTemplates + [_groupUnits];
			};
		};
	};
};

[_aiTeamTemplates, _aiTeamTemplateName, _aiTeamTemplateRequires, _aiTeamTypes, _aiTeamUpgrades]