froggyluv 2136 Posted October 12, 2017 So this is where my Beauty School DropOut level math fails me - I need to count and average the Skill of any given group on the map. Share this post Link to post Share on other sites
opusfmspol 282 Posted October 13, 2017 (edited) These seem to be working, give them a shot: syntax: x = skill unitName Reveal hidden contents /* --------------------------------------------------------------- returns average skill for all units in a group. The 'skill' command syntax used is: _value = skill _unitName; Example of use, compiled as a function and called: getSkillAverage = compile preprocessfilelinenumbers "getSkillAverage.sqf"; _skillAverage = _group call getSkillAverage; returns value averaged for the group, example: 3.563425 ------------------------------------------------------------------ */ ScriptName "getSkillAverage.sqf"; Private ["_grp","_units","_skills","_total","_count","_skillAverage"]; _grp = _this; _units = Units _grp; _skills = []; // Get an array of each unit's skill level. {_skills = _skills + [skill _x];} forEach _units; // Get the total skill combined. _total = 0; _count = Count _skills; {_total = _total + _x} forEach _skills; // Divide by the number of each. _skillAverage = (_total / _count); // Return the value. _skillAverage syntax: x = unitName skill skillType Reveal hidden contents /* --------------------------------------------------------------- returns skillsets array averaged for all units in a group. The 'skill' command syntax used is: _value = unitName skill skillType; Example of use, compiled as a function and called: getEachSkillAverage = compile preprocessfilelinenumbers "getEachSkillAverage.sqf" _skillAverages = _group call getEachSkillAverage; returns averages for the group: [_aimingAccuracy, select 0; _aimingShake, select 1; _aimingSpeed, select 2; _endurance, select 3; _spotDistance, select 4; _spotTime, select 5; _courage, select 6; _reloadSpeed, select 7; _commanding, select 8; _general] select 9; ------------------------------------------------------------------ */ ScriptName "getEachSkillAverage.sqf"; Private ["_grp","_units","_skills","_skillNames","_eachSkillAverage","_skillSet","_unit","_index","_count","_total","_average"]; _grp = _this; _units = Units _grp; _skills = []; _skillNames = ["aimingAccuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","commanding","general"]; _eachSkillAverage = [0,0,0,0,0,0,0,0,0,0]; // Get an array containing arrays of each unit's individual skills. { _skills = _skills + [[]]; _skillSet = _skills select (count _skills - 1); _unit = _x; {_skillSet = _skillSet + [_unit Skill _x]} forEach _skillNames; _skills set [(count _skills - 1),_skillSet]; } forEach _units; // Combine into an array containing total for all units' individual skills _index = 0; { _skillSet = _skills select _index; _count = 0; { _eachSkillAverage set [_count,((_eachSkillAverage select _count) + (_skillSet select _count))]; _count = _count + 1; } forEach _skillSet; _index = _index + 1; } forEach _skillNames; // Divide each skill amount by the number of units. _index = 0; { _total = _eachSkillAverage select _index; _average = (_total / (count _units)); _eachSkillAverage set [_index,_average]; _index = _index + 1; } forEach _skillNames; // Return the array. _eachSkillAverage Edited October 13, 2017 by opusfmspol 1 Share this post Link to post Share on other sites
pierremgi 4906 Posted October 13, 2017 { _x setVariable ["grpMean", (units _x apply {skill _x}) call BIS_fnc_arithmeticMean ] } forEach allGroups; recall the value by _mean = _yourGroup getVariable "grpMean" 1 1 Share this post Link to post Share on other sites
froggyluv 2136 Posted October 13, 2017 Elegant solution pierremgi -many thanks BIS_fnc_arithmeticMean -where do you even find this stuff?! Share this post Link to post Share on other sites
Mirek 166 Posted October 13, 2017 https://community.bistudio.com/wiki/Category:Arma_3:_Functions Share this post Link to post Share on other sites
serena 151 Posted October 13, 2017 private _result = allGroups apply {private _acc = 0; {_acc = _acc + skill _x} forEach units _x; _acc / count units _x} // Result: [0.4375,0.4375,1] private _result = allGroups apply {private _acc = 0; {_acc = _acc + skill _x} forEach units _x; [_x, _acc / count units _x]} // Result: [[B Alpha 1-1,0.4375],[B Alpha 1-2,0.4375],[B Alpha 1-3,1]] 2 Share this post Link to post Share on other sites
froggyluv 2136 Posted October 13, 2017 On 10/13/2017 at 5:12 AM, opusfmspol said: These seem to be working, give them a shot: These are great man - i actually needed a subSkills breakdown as well -this REALLY helps thanks man! Share this post Link to post Share on other sites