/* Author: Aaron Clark - EpochMod.com Contributors: Description: Generates loot tables from configs Licence: Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/both/EPOCH_weightedArray.sqf */ //[[[cog import generate_private_arrays ]]] private ["_allow","_lootIndex","_lootTableArray","_lootTableName","_return","_value","_weightedArray"]; //[[[end]]] params ["_configName","_keyName","_arrayName"]; _lootTableName = format["EPOCH_LT_%1_%2_%3",_configName,_keyName,_arrayName]; _return = missionNamespace getVariable[_lootTableName,[]]; // check for compiled loot table if(_return isEqualTo[]) then { // Since no cached version is found, make one. _lootTableArray = []; _weightedArray = []; _lootIndex = 0; { if(_x isEqualType []) then { _x params ["_tname","_tqty",["_extraLogicRaw", [] ]]; _allow = true; if !(_extraLogicRaw isEqualTo[]) then { _extraLogicRaw params [["_extraLogicType",""],["_extraLogicName",""],["_extraLogicCond",""],["_extraLogicData",""]]; // check extra logic _value = switch _extraLogicType do { case "getDate": { date select _extraLogicName }; case "getSunorMoon": { sunOrMoon }; case "getMissionNamespaceVariable": { missionNamespace getVariable [_extraLogicName, _extraLogicData] }; // not really needed default { _extraLogicName }; }; _allow = [_value,_extraLogicCond,_extraLogicData] call EPOCH_fnc_arrayToLogic; }; if (_allow) then { _lootTableArray pushBack _tname; for "_i" from 1 to _tqty do { _weightedArray pushBack _lootIndex; }; _lootIndex = _lootIndex + 1; }; } else { _lootTableArray pushBack _x; _weightedArray pushBack _lootIndex; _lootIndex = _lootIndex + 1; }; }forEach getArray((_configName call EPOCH_returnConfig) >> _keyName >> _arrayName); _return = [_lootTableArray,_weightedArray]; // cache loot final loot table missionNamespace setVariable[_lootTableName,_return]; }; _return