arma2-epoch-server/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/buildWeaponArrays.sqf
2022-04-21 16:15:41 +03:00

152 lines
6.6 KiB
Plaintext
Executable File

/*
buildWeaponArrays
Description: Do not edit anything in this file unless instructed by the developer.
Last updated: 11:53 AM 6/25/2014
*/
private ["_bldgClasses","_lootItem","_aiWeaponBanList","_lootList","_cfgBuildingLoot","_startTime","_lootConfigFile"];
if (!isNil "DZAI_weaponsInitialized") exitWith {};
_startTime = diag_tickTime;
_lootConfigFile = if !((DZAI_customLootTables) && {(isClass (missionConfigFile >> "CfgBuildingLoot"))}) then {
if (DZAI_debugLevel > 0) then {diag_log "DZAI Debug: Building DZAI weapon arrays using CfgBuildingLoot data."};
configFile
} else {
if (DZAI_debugLevel > 0) then {diag_log "DZAI Debug: Building DZAI weapon arrays using custom CfgBuildingLoot data."};
missionConfigFile
};
_bldgClasses = [
["Residential","Farm"], //weapongrade 0
["Military"], //weapongrade 1
["MilitarySpecial"], //weapongrade 2
["HeliCrash"]]; //weapongrade 3
//Built-in weapon ban list for melee weapons and nonweapon items
_aiWeaponBanList =
[
"Crossbow_DZ","Crossbow","MeleeHatchet","MeleeCrowbar","MeleeMachete","MeleeBaseball","MeleeBaseBallBat","MeleeBaseBallBatBarbed","MeleeBaseBallBatNails","Chainsaw", //Melee weapons
"ItemMap","Binocular","ItemWatch","ItemCompass","ItemFlashlight","ItemKnife","NVGoggles","ItemGPS","ItemEtool","Binocular_Vector","ItemMatchbox","ItemToolbox", //Non-weapon items
"ItemKeyKit","ItemMatchbox" //Epoch items
];
//Add user-specified banned weapons to DZAI weapon banlist.
{
if !(_x in _aiWeaponBanList) then {
_aiWeaponBanList set [count _aiWeaponBanList,_x];
};
} count DZAI_banAIWeapons;
DZAI_banAIWeapons = nil;
//diag_log format ["DEBUG :: List of weapons to be removed from DZAI classname tables: %1",_aiWeaponBanList];
//Compatibility with Namalsk's selectable loot table feature.
if (isNil "dayzNam_buildingLoot") then {
_cfgBuildingLoot = "cfgBuildingLoot";
if (isClass (_lootConfigFile >> _cfgBuildingLoot >> "Barracks")) then {
(_bldgClasses select 2) set [((_bldgClasses select 2) find "MilitarySpecial"),"Barracks"];
};
} else {
_cfgBuildingLoot = dayzNam_buildingLoot;
(_bldgClasses select 3) set [((_bldgClasses select 3) find "HeliCrash"),"HeliCrashNamalsk"];
};
//diag_log format ["DEBUG :: _cfgBuildingLoot: %1",_cfgBuildingLoot];
//Compatibility with DayZ 1.7.7's new HeliCrash tables
if ((isClass (_lootConfigFile >> _cfgBuildingLoot >> "HeliCrashWEST")) && {(isClass (_lootConfigFile >> _cfgBuildingLoot >> "HeliCrashEAST"))}) then {
_bldgClasses set [3,["HeliCrashWEST","HeliCrashEAST"]];
//diag_log format ["DEBUG :: HeliCrash tables modified: %1",(_bldgClasses select 3)];
};
_lootList = call {
if (isArray (_lootConfigFile >> _cfgBuildingLoot >> "Default" >> "lootTypeSmall")) exitWith {["lootType","lootTypeSmall"]}; //Epoch 1.0.5 new loot table structure
if (isArray (_lootConfigFile >> _cfgBuildingLoot >> "Default" >> "lootType")) exitWith {["lootType"]}; //DayZ 1.8.1 and pre-Epoch 1.0.5 loot table structure
["itemType"] //Old DayZ loot table structure.
};
//diag_log format ["DEBUG :: _lootList: %1",_lootList];
//Declare all temporary DZAI weapon arrays. DO NOT EDIT.
_DZAI_Pistols0_temp = [];
_DZAI_Pistols1_temp = [];
_DZAI_Pistols2_temp = [];
_DZAI_Pistols3_temp = [];
_DZAI_Rifles0_temp = [];
_DZAI_Rifles1_temp = [];
_DZAI_Rifles2_temp = [];
_DZAI_Rifles3_temp = [];
//Build the weapon arrays.
for "_i" from 0 to (count _bldgClasses - 1) do { //_i = weapongrade
for "_j" from 0 to (count (_bldgClasses select _i) - 1) do { //If each weapongrade has more than 1 building class, investigate them all
_bldgLoot = [];
{
_bldgLoot = _bldgLoot + (getArray (_lootConfigFile >> _cfgBuildingLoot >> ((_bldgClasses select _i) select _j) >> _x));
} count _lootList;
{
call {
if ((_x select 1) == "weapon") exitWith {
_weaponItem = _x select 0;
if (!(_weaponItem in _aiWeaponBanList)) then {
_itemType = (getNumber (configFile >> "CfgWeapons" >> _weaponItem >> "type"));
call {
if (_itemType == 1) exitWith {
call compile format ["_DZAI_Rifles%1_temp set [(count _DZAI_Rifles%1_temp),'%2'];",_i,_weaponItem]
};
if (_itemType == 2) exitWith {
call compile format ["_DZAI_Pistols%1_temp set [(count _DZAI_Pistols%1_temp),'%2'];",_i,_weaponItem];
};
};
};
};
if ((_x select 1) == "cfglootweapon") exitWith {
{
_weaponItem = _x select 0;
if (!(_weaponItem in _aiWeaponBanList)) then {
_itemType = (getNumber (configFile >> "CfgWeapons" >> _weaponItem >> "type"));
call {
if (_itemType == 1) exitWith {
call compile format ["_DZAI_Rifles%1_temp set [(count _DZAI_Rifles%1_temp),'%2'];",_i,_weaponItem]
};
if (_itemType == 2) exitWith {
call compile format ["_DZAI_Pistols%1_temp set [(count _DZAI_Pistols%1_temp),'%2'];",_i,_weaponItem];
};
};
};
} count (getArray (_lootConfigFile >> "cfgLoot" >> (_x select 0)));
};
};
} forEach _bldgLoot;
};
};
//Redefine each prebuilt weapon array if new table is not empty
if ((count _DZAI_Pistols0_temp) > 0) then {DZAI_Pistols0 = _DZAI_Pistols0_temp};
if ((count _DZAI_Pistols1_temp) > 0) then {DZAI_Pistols1 = _DZAI_Pistols1_temp}; //else {DZAI_Pistols1 = [] + DZAI_Pistols0};
if ((count _DZAI_Pistols2_temp) > 0) then {DZAI_Pistols2 = _DZAI_Pistols2_temp}; //else {DZAI_Pistols2 = [] + DZAI_Pistols1};
if ((count _DZAI_Pistols3_temp) > 0) then {DZAI_Pistols3 = _DZAI_Pistols3_temp} else {DZAI_Pistols3 = [] + DZAI_Pistols2};
if ((count _DZAI_Rifles0_temp) > 0) then {DZAI_Rifles0 = _DZAI_Rifles0_temp};
if ((count _DZAI_Rifles1_temp) > 0) then {DZAI_Rifles1 = _DZAI_Rifles1_temp}; //else {DZAI_Rifles1 = [] + DZAI_Rifles0};
if ((count _DZAI_Rifles2_temp) > 0) then {DZAI_Rifles2 = _DZAI_Rifles2_temp}; //else {DZAI_Rifles2 = [] + DZAI_Rifles1};
if ((count _DZAI_Rifles3_temp) > 0) then {DZAI_Rifles3 = _DZAI_Rifles3_temp} else {DZAI_Rifles3 = [] + DZAI_Rifles2};
if (DZAI_debugLevel > 0) then {
if (DZAI_debugLevel > 1) then {
//Display finished weapon arrays
diag_log format ["Contents of DZAI_Pistols0: %1",DZAI_Pistols0];
diag_log format ["Contents of DZAI_Pistols1: %1",DZAI_Pistols1];
diag_log format ["Contents of DZAI_Pistols2: %1",DZAI_Pistols2];
diag_log format ["Contents of DZAI_Pistols3: %1",DZAI_Pistols3];
diag_log format ["Contents of DZAI_Rifles0: %1",DZAI_Rifles0];
diag_log format ["Contents of DZAI_Rifles1: %1",DZAI_Rifles1];
diag_log format ["Contents of DZAI_Rifles2: %1",DZAI_Rifles2];
diag_log format ["Contents of DZAI_Rifles3: %1",DZAI_Rifles3];
};
diag_log format ["DZAI Debug: Weapon classname tables created in %1 seconds.",(diag_tickTime - _startTime)];
};
DZAI_weaponsInitialized = true;