[DoN] Komfritten

A3AXI - equipment problems

16 posts in this topic

I'm having a slight problem equipping my AIAXI people.

I want them to be somewhat similar eg comming from the same army / hired company.

I have disabled dynamic equip spawn from trader, as the traders don't hold what they need (they are modified heavily).

When i try to equip them i do this in terms of dynamic spawn

Spoiler

//Purchase price limit for items generated by dynamic classname system as defined in CfgExileArsenal. Lowering this value may reduce variety of items carried by AI. (Default: 2000)
    itemPriceLimit = 2000;
    
    //1: Generate AI weapons from Exile trader tables (Default)
    //0: Weapons defined by pistolList, rifleList, machinegunList, sniperList
    //dynamicWeaponBlacklist: Classnames of weapons to ignore from Exile trader tables
    generateDynamicWeapons = 0;
    dynamicWeaponBlacklist[] = {};
    
    //1: Use Exile loot table data as whitelist for AI-usable weapon scopes (Default)
    //0: Scopes defined by weaponOpticsList
    //dynamicOpticsBlacklist: List of optics classnames to ignore from Exile trader tables.
    generateDynamicOptics = 0;
    dynamicOpticsBlacklist[] = {};
    
    //1: Generate AI uniform types from Exile trader tables (Default)
    //0: Uniforms defined by uniformTypes0, uniformTypes1, uniformTypes2, uniformTypes3
    //dynamicUniformBlacklist: List of uniform classnames to ignore from Exile trader tables.
    generateDynamicUniforms = 0;
    dynamicUniformBlacklist[] = {};
    
    //1: Generate AI backpack types from Exile trader tables (Default)
    //0: Backpacks defined by backpackTypes0, backpackTypes1, backpackTypes2, backpackTypes3
    //dynamicBackpackBlacklist: List of backpack classnames to ignore from Exile trader tables.
    generateDynamicBackpacks = 0;
    dynamicBackpackBlacklist[] = {};
    
    //1: Generate AI backpack types from Exile trader tables (Default)
    //0: Vests defined by vestTypes0, vestTypes1, vestTypes2, vestTypes3
    //dynamicVestBlacklist: List of vest classnames to ignore from Exile trader tables.
    generateDynamicVests = 0;
    dynamicVestBlacklist[] = {};
    
    //1: Generate AI headgear types from Exile trader tables (Default)
    //0: Headgear defined by headgearTypes0, headgearTypes1, headgearTypes2, headgearTypes3
    //dynamicHeadgearBlacklist: List of headgear classnames to ignore from Exile trader tables.
    generateDynamicHeadgear = 0;
    dynamicHeadgearBlacklist[] = {};
    
    //1: Generate AI food types from Exile trader tables (Default)
    //0: Food defined by foodLoot
    //dynamicFoodBlacklist: List of food classnames to ignore from Exile trader tables.
    generateDynamicFood = 1;
    dynamicFoodBlacklist[] = {};
    
    //1: Generate AI generic loot types from Exile trader tables. Includes "Hardware", "Smoke", "Flare" -class items. (Default)
    //0: Loot defined by MiscLoot
    //dynamicLootBlacklist: List of loot classnames to ignore from Exile trader tables.
    generateDynamicLoot = 1;
    dynamicLootBlacklist[] = {};

and this in the defined list for what they should equip:

Spoiler

//AI uniform classnames. Note: uniformTypes0-3 will not be read if generateDynamicUniforms is enabled.
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    uniformTypes0[] = {"U_O_SpecopsUniform_blk"};
    uniformTypes1[] = {"U_O_SpecopsUniform_blk"};
    uniformTypes2[] = {"U_O_SpecopsUniform_blk"};
    uniformTypes3[] = {"U_O_SpecopsUniform_blk"};
    
    //AI weapon classnames. Note: pistolList, rifleList, machinegunList, sniperList will not be read if generateDynamicWeapons is enabled.
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    pistolList[] = {"hgun_ACPC2_F","hgun_P07_F","hgun_Pistol_heavy_01_F","hgun_Pistol_heavy_02_F","hgun_Rook40_F"};
    rifleList[] = {"arifle_Katiba_C_F","arifle_Katiba_F","arifle_Katiba_GL_F","arifle_Mk20_F","arifle_Mk20_GL_F","arifle_Mk20_GL_plain_F","arifle_Mk20_plain_F","arifle_Mk20C_F","arifle_Mk20C_plain_F","arifle_MX_Black_F","arifle_MX_F","arifle_MX_GL_Black_F","arifle_MX_GL_F","arifle_MXC_Black_F","arifle_MXC_F","arifle_SDAR_F","arifle_TRG20_F","arifle_TRG21_F","arifle_TRG21_GL_F"};
    machinegunList[] = {"arifle_MX_SW_Black_F","arifle_MX_SW_F","LMG_Mk200_F","LMG_Zafir_F"};
    sniperList[] = {"arifle_MXM_Black_F","arifle_MXM_F","srifle_EBR_F"};
    
    //AI weapon scope attachment settings. Note: weaponOpticsList will not be read if generateDynamicOptics is enabled.
    weaponOpticsList[] = {"optic_NVS","optic_LRPS","optic_AMS","optic_AMS_khk","optic_AMS_snd","optic_DMS","optic_Arco","optic_Hamr","optic_MRCO","optic_Holosight","optic_Holosight_smg","optic_Aco","optic_ACO_grn","optic_Aco_smg","optic_ACO_grn_smg","optic_Yorris","optic_MRD"};
    
    //AI backpack types (for AI levels 0-3). Note: backpackTypes0-3 will not be read if generateDynamicBackpacks is enabled.
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    backpackTypes0[] = {"B_AssaultPack_blk"};
    backpackTypes1[] = {"B_AssaultPack_blk"};
    backpackTypes2[] = {"B_AssaultPack_blk"};
    backpackTypes3[] = {"B_AssaultPack_blk"};
    
    //AI vest types (for AI levels 0-3). Note: vestTypes0-3 will not be read if generateDynamicVests is enabled.
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    vestTypes0[] = {"V_Rangemaster_belt"};
    vestTypes1[] = {"V_Rangemaster_belt"};
    vestTypes2[] = {"V_Rangemaster_belt"};
    vestTypes3[] = {"V_TacVestCamo_khk"};
    
    //AI head gear types. Note: headgearTypes0-3 will not be read if generateDynamicHeadgear is enabled.
    headgearTypes0[] = {"H_Bandanna_khk"};
    headgearTypes1[] = {"H_Bandanna_khk"};
    headgearTypes2[] = {"H_Bandanna_khk"};
    headgearTypes3[] = {"H_Bandanna_khk"};

Weird thing is that the "H_Bandanna_khk" actually spawned on several of the soldiers when they were in dynamic mode. When I switched to "defined" is would do this in the LOG:

Spoiler

20:51:12 "[A3XAI] Removing invalid vest classname from A3XAI_vestTypes0 array: V_Press_F."
20:51:12 "[A3XAI] Removing invalid vest classname from A3XAI_vestTypes1 array: V_Press_F."
20:51:12 "[A3XAI] Removing invalid vest classname from A3XAI_vestTypes1 array: V_TacVest_blk."
20:51:12 "[A3XAI] Removing invalid vest classname from A3XAI_vestTypes1 array: V_TacVest_camo."
20:51:12 "[A3XAI] Removing invalid vest classname from A3XAI_vestTypes1 array: V_TacVest_oli."
20:51:12 "[A3XAI] Removing invalid vest classname from A3XAI_vestTypes1 array: V_TacVestIR_blk."
20:51:12 "[A3XAI] Removing invalid vest classname from A3XAI_vestTypes2 array: V_TacVest_blk."
20:51:12 "[A3XAI] Removing invalid vest classname from A3XAI_vestTypes2 array: V_TacVest_brn."
20:51:12 "[A3XAI] Removing invalid vest classname from A3XAI_vestTypes2 array: V_TacVest_khk."
20:51:12 "[A3XAI] Removing invalid vest classname from A3XAI_vestTypes2 array: V_TacVestCamo_khk."
20:51:12 "[A3XAI] Removing invalid vest classname from A3XAI_vestTypes3 array: V_TacVest_blk_POLICE."
20:51:12 "[A3XAI] Removing invalid headgear classname from A3XAI_headgearTypes0 array: H_Bandanna_khk."
20:51:12 "[A3XAI] Removing invalid headgear classname from A3XAI_headgearTypes1 array: H_Bandanna_khk."
20:51:12 "[CfgWeapons] Removing invalid headgear classname from A3XAI_headgearTypes2 array: H_Bandanna_khk."
20:51:12 "[A3XAI] Removing invalid headgear classname from A3XAI_headgearTypes3 array: H_Bandanna_khk."
20:51:12 "[A3XAI] Verified 56 unique classnames in 0.216003 seconds."

Any clues on what I do wrong?

Share this post


Link to post
Share on other sites

If you know the class names are right, you can disable the check:

	//Enable or disable verification and error-correction of classname tables used by A3XAI. If invalid entries are found, they are removed and logged into the RPT log.
	//If disabled, any invalid classnames will not be removed and clients may crash if AI bodies with invalid items are looted. Only disable if a previous scan shows no invalid classnames (Default: 1).										
	verifyClassnames = 0;

I did this on ours, as I have dressed our AI as Police Officers, and it didn't like the classname: V_TacVest_blk_POLICE.

Share this post


Link to post
Share on other sites
Advertisement
3 hours ago, [DoN] Komfritten said:

20:51:12 "[A3XAI] Removing invalid vest classname from A3XAI_vestTypes0 array: V_Press_F."

i cant recall, since all those messages a3xai gave where totally correct (wrong item class in wrong table). but all the items in your .rpt have "." in their calss names. i just cant remember if a3xai debug adds this but i dont think so. so check all the class names in question. i think you accidentially put that dot / point whatever in there

Edited by Dizzturbed

Share this post


Link to post
Share on other sites

I'm sure mine all had a "." on the end in the logs as well, but they weren't in the config of A3XAI.

If you know they're correct, just switch the checks off

Share this post


Link to post
Share on other sites

Hmm problem is that it does not show them in game too. It's kinda weird...

Code looks like this:

Spoiler

uniformTypes0[] = {"U_O_SpecopsUniform_blk"};
    uniformTypes1[] = {"U_O_SpecopsUniform_blk"};
    uniformTypes2[] = {"U_O_SpecopsUniform_blk"};
    uniformTypes3[] = {"U_O_SpecopsUniform_blk"};
    
    //AI weapon classnames. Note: pistolList, rifleList, machinegunList, sniperList will not be read if generateDynamicWeapons is enabled.
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    pistolList[] = {"hgun_ACPC2_F","hgun_P07_F","hgun_Pistol_heavy_01_F","hgun_Pistol_heavy_02_F","hgun_Rook40_F"};
    rifleList[] = {"arifle_Katiba_C_F","arifle_Katiba_F","arifle_Katiba_GL_F","arifle_Mk20_F","arifle_Mk20_GL_F","arifle_Mk20_GL_plain_F","arifle_Mk20_plain_F","arifle_Mk20C_F","arifle_Mk20C_plain_F","arifle_MX_Black_F","arifle_MX_F","arifle_MX_GL_Black_F","arifle_MX_GL_F","arifle_MXC_Black_F","arifle_MXC_F","arifle_SDAR_F","arifle_TRG20_F","arifle_TRG21_F","arifle_TRG21_GL_F"};
    machinegunList[] = {"arifle_MX_SW_Black_F","arifle_MX_SW_F","LMG_Mk200_F","LMG_Zafir_F"};
    sniperList[] = {"arifle_MXM_Black_F","arifle_MXM_F","srifle_EBR_F"};
    
    //AI weapon scope attachment settings. Note: weaponOpticsList will not be read if generateDynamicOptics is enabled.
    weaponOpticsList[] = {"optic_NVS","optic_LRPS","optic_AMS","optic_AMS_khk","optic_AMS_snd","optic_DMS","optic_Arco","optic_Hamr","optic_MRCO","optic_Holosight","optic_Holosight_smg","optic_Aco","optic_ACO_grn","optic_Aco_smg","optic_ACO_grn_smg","optic_Yorris","optic_MRD"};
    
    //AI backpack types (for AI levels 0-3). Note: backpackTypes0-3 will not be read if generateDynamicBackpacks is enabled.
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    backpackTypes0[] = {"B_AssaultPack_blk"};
    backpackTypes1[] = {"B_AssaultPack_blk"};
    backpackTypes2[] = {"B_AssaultPack_blk"};
    backpackTypes3[] = {"B_AssaultPack_blk"};
    
    //AI vest types (for AI levels 0-3). Note: vestTypes0-3 will not be read if generateDynamicVests is enabled.
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    vestTypes0[] = {"V_Rangemaster_belt"};
    vestTypes1[] = {"V_Rangemaster_belt"};
    vestTypes2[] = {"V_Rangemaster_belt"};
    vestTypes3[] = {"V_TacVestCamo_khk"};
    
    //AI head gear types. Note: headgearTypes0-3 will not be read if generateDynamicHeadgear is enabled.
    headgearTypes0[] = {"H_Bandanna_khk"};
    headgearTypes1[] = {"H_Bandanna_khk"};
    headgearTypes2[] = {"H_Bandanna_khk"};
    headgearTypes3[] = {"H_Bandanna_khk"};

no "full stop" at the end - suppose the LOGGER does that... I'm quite clueless of what to do...

Share this post


Link to post
Share on other sites

Im having this happen too. I'm trying to get the A3XAI soldiers equipped with Russian Weapons from @NATO_Rus_weapons and uniforms/gear from @RussianGRU_mas. I've basically done the same as above, added the classnames to the lists and set the GenerateDynamicXXXXXX to 0 to get it to use them. What happens ingame is the AI are wearing the Gorka uniforms but not any other gear or weapons, the RPT generates the same errors as above and then uses the defaults (with the messages having a . at the end of each classname)

Im thinking of editing the A3XAI_build_weaponslist.sqf and inserting the items there and see what happens

  • Like 1

Share this post


Link to post
Share on other sites

Hello.

If you want to get rid of these, you need to edit @A3XAI\Addons\a3xai\scripts\verifyClassnames.sqf.

Spoiler

20:51:12 "[A3XAI] Removing invalid vest classname from A3XAI_vestTypes0 array: V_Press_F."

 

verifyClassnames.sqf should looks like this.

Spoiler

private["_verified","_errorFound","_startTime"];

_startTime = diag_tickTime;

_verified = [];

{
    _array = missionNamespace getVariable [_x,[]];
    _errorFound = false;
    {
        if !(_x in _verified) then {
            call {
                if ((isNil {_x}) or {!((typeName _x) isEqualTo "STRING")}) exitWith {
                    diag_log format ["A3XAI] Removing non-string item %1 from classname table.",_x];
                    _array deleteAt _forEachIndex;
                };
                if (isClass (configFile >> "CfgWeapons" >> _x)) exitWith {
                    if (((configName (inheritsFrom (configFile >> "CfgWeapons" >> _x))) isEqualTo "FakeWeapon") or {(getNumber (configFile >> "CfgWeapons" >> _x >> "scope")) isEqualTo 0}) then {
                        diag_log format ["[A3XAI] Removing invalid classname: %1.",_x];
                        _array deleteAt _forEachIndex;
                    } else {
                        _verified pushBack _x;
                    };
                };
                if (isClass (configFile >> "CfgMagazines" >> _x)) exitWith {
                    if (((configName (inheritsFrom (configFile >> "CfgMagazines" >> _x))) isEqualTo "FakeMagazine") or {(getNumber (configFile >> "CfgMagazines" >> _x >> "scope")) isEqualTo 0}) then {
                        diag_log format ["[A3XAI] Removing invalid classname: %1.",_x];
                        _array deleteAt _forEachIndex;
                    } else {
                        _verified pushBack _x;
                    };
                };
                if (isClass (configFile >> "CfgVehicles" >> _x)) exitWith {
                    if (((configName (inheritsFrom (configFile >> "CfgVehicles" >> _x))) isEqualTo "Banned") or {(getNumber (configFile >> "CfgVehicles" >> _x >> "scope")) isEqualTo 0}) then {
                        diag_log format ["[A3XAI] Removing invalid classname: %1.",_x];
                        _array deleteAt _forEachIndex;
                    } else {
                        _verified pushBack _x;
                    };
                };
                diag_log format ["[A3XAI] Removing invalid classname: %1.",_x];    //Default case - if classname doesn't exist at all
                _array deleteAt _forEachIndex;
            };
        };
    } forEach _array;
} forEach A3XAI_tableChecklist;

if (A3XAI_maxAirPatrols > 0) then {
    {
        try {
            if ((typeName _x) != "ARRAY") then {
                throw format ["[A3XAI] Removing non-array type element from A3XAI_airVehicleList array: %1.",_x];
            };
            if ((count _x) < 2) then {
                throw format ["[A3XAI] Array in A3XAI_airVehicleList has only one element: %1. 2 expected: {Classname, Amount}.",_x];
            };
            if (!((_x select 0) isKindOf "Air")) then {
                throw format ["[A3XAI] Removing non-Air type vehicle from A3XAI_airVehicleList array: %1.",(_x select 0)];
            };
        } catch {
            diag_log _exception;
            A3XAI_airVehicleList deleteAt _forEachIndex;
        };
    } forEach A3XAI_airVehicleList;
};

if (A3XAI_maxLandPatrols > 0) then {
    {
        try {
            if ((typeName _x) != "ARRAY") then {
                throw format ["[A3XAI] Removing non-array type element from A3XAI_landVehicleList array: %1.",_x];
            };
            if ((count _x) < 2) then {
                throw format ["[A3XAI] Array in A3XAI_landVehicleList has only one element: %1. 2 expected: {Classname, Amount}.",_x];
            };
            if (!((_x select 0) isKindOf "LandVehicle")) then {
                throw format ["[A3XAI] Removing non-LandVehicle type vehicle from A3XAI_landVehicleList array: %1.",(_x select 0)];
            };
            if (((_x select 0) isKindOf "StaticWeapon")) then {
                throw format ["[A3XAI] Removing StaticWeapon type vehicle from A3XAI_landVehicleList array: %1.",(_x select 0)];
            };
        } catch {
            diag_log _exception;
            A3XAI_landVehicleList deleteAt _forEachIndex;
        };
    } forEach A3XAI_landVehicleList;
};

if (A3XAI_maxAirReinforcements > 0) then {
    {
        try {
            if (!(_x isKindOf "Air")) then {
                throw format ["[A3XAI] Removing non-Air type vehicle from A3XAI_airReinforcementVehicles array: %1.",_x];
            };
        } catch {
            diag_log _exception;
            A3XAI_airReinforcementVehicles deleteAt _forEachIndex;
        };
    } forEach A3XAI_airReinforcementVehicles;
};

if (A3XAI_maxUAVPatrols > 0) then {
    {
        try {
            if ((typeName _x) != "ARRAY") then {
                throw format ["[A3XAI] Removing non-array type element from A3XAI_UAVList array: %1.",_x];
            };
            if ((count _x) < 2) then {
                throw format ["[A3XAI] Array in A3XAI_UAVList has only one element: %1. 2 expected: {Classname, Amount}.",_x];
            };
            if (!((_x select 0) isKindOf "Air")) then {
                throw format ["[A3XAI] Removing non-Air type vehicle from A3XAI_UAVList array: %1.",(_x select 0)];
            };
        } catch {
            diag_log _exception;
            A3XAI_UAVList deleteAt _forEachIndex;
        };
    } forEach A3XAI_UAVList;
};

if (A3XAI_maxUGVPatrols > 0) then {
    {
        try {
            if ((typeName _x) != "ARRAY") then {
                throw format ["[A3XAI] Removing non-array type element from A3XAI_UGVList array: %1.",_x];
            };
            if ((count _x) < 2) then {
                throw format ["[A3XAI] Array in A3XAI_UGVList has only one element: %1. 2 expected: {Classname, Amount}.",_x];
            };
            if (!((_x select 0) isKindOf "LandVehicle")) then {
                throw format ["[A3XAI] Removing non-LandVehicle type vehicle from A3XAI_UGVList array: %1.",(_x select 0)];
            };
            if (((_x select 0) isKindOf "StaticWeapon")) then {
                throw format ["[A3XAI] Removing StaticWeapon type vehicle from A3XAI_UGVList array: %1.",(_x select 0)];
            };
        } catch {
            diag_log _exception;
            A3XAI_UGVList deleteAt _forEachIndex;
        };
    } forEach A3XAI_UGVList;
};

{
    if (([configFile >> "CfgWeapons" >> _x >> "ItemInfo","uniformClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "") then {
        diag_log format ["[A3XAI] Removing invalid uniform classname from A3XAI_uniformTypes0 array: %1.",_x];
        A3XAI_uniformTypes0 deleteAt _forEachIndex;
    };
} forEach A3XAI_uniformTypes0;

{
    if (([configFile >> "CfgWeapons" >> _x >> "ItemInfo","uniformClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "") then {
        diag_log format ["[A3XAI] Removing invalid uniform classname from A3XAI_uniformTypes1 array: %1.",_x];
        A3XAI_uniformTypes1 deleteAt _forEachIndex;
    };
} forEach A3XAI_uniformTypes1;

{
    if (([configFile >> "CfgWeapons" >> _x >> "ItemInfo","uniformClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "") then {
        diag_log format ["[A3XAI] Removing invalid uniform classname from A3XAI_uniformTypes2 array: %1.",_x];
        A3XAI_uniformTypes2 deleteAt _forEachIndex;
    };
} forEach A3XAI_uniformTypes2;

{
    if (([configFile >> "CfgWeapons" >> _x >> "ItemInfo","uniformClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "") then {
        diag_log format ["[A3XAI] Removing invalid uniform classname from A3XAI_uniformTypes3 array: %1.",_x];
        A3XAI_uniformTypes3 deleteAt _forEachIndex;
    };
} forEach A3XAI_uniformTypes3;

{
    if !(([configFile >> "CfgWeapons" >> _x,"type",-1] call BIS_fnc_returnConfigEntry) isEqualTo 2) then {
        diag_log format ["[A3XAI] Removing invalid pistol classname from A3XAI_pistolList array: %1.",_x];
        A3XAI_pistolList deleteAt _forEachIndex;
    };
} forEach A3XAI_pistolList;

{
    if !(([configFile >> "CfgWeapons" >> _x,"type",-1] call BIS_fnc_returnConfigEntry) isEqualTo 1) then {
        diag_log format ["[A3XAI] Removing invalid rifle classname from A3XAI_rifleList array: %1.",_x];
        A3XAI_rifleList deleteAt _forEachIndex;
    };
} forEach A3XAI_rifleList;

{
    if !(([configFile >> "CfgWeapons" >> _x,"type",-1] call BIS_fnc_returnConfigEntry) isEqualTo 1) then {
        diag_log format ["[A3XAI] Removing invalid machine gun classname from A3XAI_machinegunList array: %1.",_x];
        A3XAI_machinegunList deleteAt _forEachIndex;
    };
} forEach A3XAI_machinegunList;

{
    if !(([configFile >> "CfgWeapons" >> _x,"type",-1] call BIS_fnc_returnConfigEntry) isEqualTo 1) then {
        diag_log format ["[A3XAI] Removing invalid sniper classname from A3XAI_sniperList array: %1.",_x];
        A3XAI_sniperList deleteAt _forEachIndex;
    };
} forEach A3XAI_sniperList;

{
    if !(([configFile >> "CfgWeapons" >> _x,"type",-1] call BIS_fnc_returnConfigEntry) isEqualTo 4) then {
        diag_log format ["[A3XAI] Removing invalid launcher classname from A3XAI_launcherTypes array: %1.",_x];
        A3XAI_launcherTypes deleteAt _forEachIndex;
    };
} forEach A3XAI_launcherTypes;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo","mountAction",""] call BIS_fnc_returnConfigEntry) isEqualTo "MountOptic") then {
        diag_log format ["[A3XAI] Removing invalid optics classname from A3XAI_weaponOpticsList array: %1.",_x];
        A3XAI_weaponOpticsList deleteAt _forEachIndex;
    };
} forEach A3XAI_weaponOpticsList;

{
    if !(([configFile >> "CfgVehicles" >> _x,"vehicleClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "Backpacks") then {
        diag_log format ["[A3XAI] Removing invalid backpack classname from A3XAI_backpackTypes0 array: %1.",_x];
        A3XAI_backpackTypes0 deleteAt _forEachIndex;
    };
} forEach A3XAI_backpackTypes0;
if ("" in A3XAI_backpackTypes0) then {A3XAI_backpackTypes0 = A3XAI_backpackTypes0 - [""];};

{
    if !(([configFile >> "CfgVehicles" >> _x,"vehicleClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "Backpacks") then {
        diag_log format ["[A3XAI] Removing invalid backpack classname from A3XAI_backpackTypes1 array: %1.",_x];
        A3XAI_backpackTypes1 deleteAt _forEachIndex;
    };
} forEach A3XAI_backpackTypes1;

{
    if !(([configFile >> "CfgVehicles" >> _x,"vehicleClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "Backpacks") then {
        diag_log format ["[A3XAI] Removing invalid backpack classname from A3XAI_backpackTypes2 array: %1.",_x];
        A3XAI_backpackTypes2 deleteAt _forEachIndex;
    };
} forEach A3XAI_backpackTypes2;

{
    if !(([configFile >> "CfgVehicles" >> _x,"vehicleClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "Backpacks") then {
        diag_log format ["[A3XAI] Removing invalid backpack classname from A3XAI_backpackTypes3 array: %1.",_x];
        A3XAI_backpackTypes3 deleteAt _forEachIndex;
    };
} forEach A3XAI_backpackTypes3;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Body","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitBody") then {
        diag_log format ["[A3XAI] Removing invalid vest classname from A3XAI_vestTypes0 array: %1.",_x];
        A3XAI_vestTypes0 deleteAt _forEachIndex;
    };
} forEach A3XAI_vestTypes0;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Body","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitBody") then {
        diag_log format ["[A3XAI] Removing invalid vest classname from A3XAI_vestTypes1 array: %1.",_x];
        A3XAI_vestTypes1 deleteAt _forEachIndex;
    };
} forEach A3XAI_vestTypes1;
if ("" in A3XAI_vestTypes1) then {A3XAI_vestTypes1 = A3XAI_vestTypes1 - [""];};

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Body","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitBody") then {
        diag_log format ["[A3XAI] Removing invalid vest classname from A3XAI_vestTypes2 array: %1.",_x];
        A3XAI_vestTypes2 deleteAt _forEachIndex;
    };
} forEach A3XAI_vestTypes2;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Body","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitBody") then {
        diag_log format ["[A3XAI] Removing invalid vest classname from A3XAI_vestTypes3 array: %1.",_x];
        A3XAI_vestTypes3 deleteAt _forEachIndex;
    };
} forEach A3XAI_vestTypes3;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Head","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitHead") then {
        diag_log format ["[A3XAI] Removing invalid headgear classname from A3XAI_headgearTypes0 array: %1.",_x];
        A3XAI_headgearTypes0 deleteAt _forEachIndex;
    };
} forEach A3XAI_headgearTypes0;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Head","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitHead") then {
        diag_log format ["[A3XAI] Removing invalid headgear classname from A3XAI_headgearTypes1 array: %1.",_x];
        A3XAI_headgearTypes1 deleteAt _forEachIndex;
    };
} forEach A3XAI_headgearTypes1;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Head","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitHead") then {
        diag_log format ["[CfgWeapons] Removing invalid headgear classname from A3XAI_headgearTypes2 array: %1.",_x];
        A3XAI_headgearTypes2 deleteAt _forEachIndex;
    };
} forEach A3XAI_headgearTypes2;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Head","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitHead") then {
        diag_log format ["[A3XAI] Removing invalid headgear classname from A3XAI_headgearTypes3 array: %1.",_x];
        A3XAI_headgearTypes3 deleteAt _forEachIndex;
    };
} forEach A3XAI_headgearTypes3;

//Anticipate cases where all elements of an array are invalid
if (A3XAI_pistolList isEqualTo []) then {A3XAI_pistolList = ["hgun_ACPC2_F","hgun_P07_F","hgun_Pistol_heavy_01_F","hgun_Pistol_heavy_02_F","hgun_Rook40_F"]};
if (A3XAI_rifleList isEqualTo []) then {A3XAI_rifleList = ["arifle_Katiba_C_F","arifle_Katiba_F","arifle_Katiba_GL_F","arifle_Mk20_F","arifle_Mk20_GL_F","arifle_Mk20_GL_plain_F","arifle_Mk20_plain_F","arifle_Mk20C_F","arifle_Mk20C_plain_F","arifle_MX_Black_F","arifle_MX_F","arifle_MX_GL_Black_F","arifle_MX_GL_F","arifle_MXC_Black_F","arifle_MXC_F","arifle_SDAR_F","arifle_TRG20_F","arifle_TRG21_F","arifle_TRG21_GL_F"]};
if (A3XAI_machinegunList isEqualTo []) then {A3XAI_machinegunList = ["arifle_MX_SW_Black_F","arifle_MX_SW_F","LMG_Mk200_F","LMG_Zafir_F","MMG_01_hex_F","MMG_01_tan_F","MMG_02_black_F","MMG_02_camo_F","MMG_02_sand_F"]};
if (A3XAI_sniperList isEqualTo []) then {A3XAI_sniperList = ["arifle_MXM_Black_F","arifle_MXM_F","srifle_DMR_01_F","srifle_DMR_02_camo_F","srifle_DMR_02_F","srifle_DMR_02_sniper_F","srifle_DMR_03_F","srifle_DMR_03_khaki_F","srifle_DMR_03_multicam_F","srifle_DMR_03_tan_F","srifle_DMR_03_woodland_F","srifle_DMR_04_F","srifle_DMR_04_Tan_F","srifle_DMR_05_blk_F","srifle_DMR_05_hex_F","srifle_DMR_05_tan_f","srifle_DMR_06_camo_F","srifle_DMR_06_olive_F","srifle_EBR_F","srifle_GM6_camo_F","srifle_GM6_F","srifle_LRR_camo_F","srifle_LRR_F"]};
if (A3XAI_foodLoot isEqualTo []) then {A3XAI_foodLootCount = 0};
if (A3XAI_MiscLoot isEqualTo []) then {A3XAI_miscLootCount = 0};
if (A3XAI_airReinforcementVehicles isEqualTo []) then {A3XAI_maxAirReinforcements = 0; A3XAI_airReinforcementSpawnChance1 = 0; A3XAI_airReinforcementSpawnChance2 = 0; A3XAI_airReinforcementSpawnChance3 = 0;};

diag_log format ["[A3XAI] Verified %1 unique classnames in %2 seconds.",(count _verified),(diag_tickTime - _startTime)];

 

 

  • Like 1

Share this post


Link to post
Share on other sites
On 1/21/2016 at 4:14 AM, exilerist said:

Hello.

 

If you want to get rid of these, you need to edit @A3XAI\Addons\a3xai\scripts\verifyClassnames.sqf.

  Reveal hidden contents

20:51:12 "[A3XAI] Removing invalid vest classname from A3XAI_vestTypes0 array: V_Press_F."

 

verifyClassnames.sqf should looks like this.

  Reveal hidden contents

private["_verified","_errorFound","_startTime"];

_startTime = diag_tickTime;

_verified = [];

{
    _array = missionNamespace getVariable [_x,[]];
    _errorFound = false;
    {
        if !(_x in _verified) then {
            call {
                if ((isNil {_x}) or {!((typeName _x) isEqualTo "STRING")}) exitWith {
                    diag_log format ["A3XAI] Removing non-string item %1 from classname table.",_x];
                    _array deleteAt _forEachIndex;
                };
                if (isClass (configFile >> "CfgWeapons" >> _x)) exitWith {
                    if (((configName (inheritsFrom (configFile >> "CfgWeapons" >> _x))) isEqualTo "FakeWeapon") or {(getNumber (configFile >> "CfgWeapons" >> _x >> "scope")) isEqualTo 0}) then {
                        diag_log format ["[A3XAI] Removing invalid classname: %1.",_x];
                        _array deleteAt _forEachIndex;
                    } else {
                        _verified pushBack _x;
                    };
                };
                if (isClass (configFile >> "CfgMagazines" >> _x)) exitWith {
                    if (((configName (inheritsFrom (configFile >> "CfgMagazines" >> _x))) isEqualTo "FakeMagazine") or {(getNumber (configFile >> "CfgMagazines" >> _x >> "scope")) isEqualTo 0}) then {
                        diag_log format ["[A3XAI] Removing invalid classname: %1.",_x];
                        _array deleteAt _forEachIndex;
                    } else {
                        _verified pushBack _x;
                    };
                };
                if (isClass (configFile >> "CfgVehicles" >> _x)) exitWith {
                    if (((configName (inheritsFrom (configFile >> "CfgVehicles" >> _x))) isEqualTo "Banned") or {(getNumber (configFile >> "CfgVehicles" >> _x >> "scope")) isEqualTo 0}) then {
                        diag_log format ["[A3XAI] Removing invalid classname: %1.",_x];
                        _array deleteAt _forEachIndex;
                    } else {
                        _verified pushBack _x;
                    };
                };
                diag_log format ["[A3XAI] Removing invalid classname: %1.",_x];    //Default case - if classname doesn't exist at all
                _array deleteAt _forEachIndex;
            };
        };
    } forEach _array;
} forEach A3XAI_tableChecklist;

if (A3XAI_maxAirPatrols > 0) then {
    {
        try {
            if ((typeName _x) != "ARRAY") then {
                throw format ["[A3XAI] Removing non-array type element from A3XAI_airVehicleList array: %1.",_x];
            };
            if ((count _x) < 2) then {
                throw format ["[A3XAI] Array in A3XAI_airVehicleList has only one element: %1. 2 expected: {Classname, Amount}.",_x];
            };
            if (!((_x select 0) isKindOf "Air")) then {
                throw format ["[A3XAI] Removing non-Air type vehicle from A3XAI_airVehicleList array: %1.",(_x select 0)];
            };
        } catch {
            diag_log _exception;
            A3XAI_airVehicleList deleteAt _forEachIndex;
        };
    } forEach A3XAI_airVehicleList;
};

if (A3XAI_maxLandPatrols > 0) then {
    {
        try {
            if ((typeName _x) != "ARRAY") then {
                throw format ["[A3XAI] Removing non-array type element from A3XAI_landVehicleList array: %1.",_x];
            };
            if ((count _x) < 2) then {
                throw format ["[A3XAI] Array in A3XAI_landVehicleList has only one element: %1. 2 expected: {Classname, Amount}.",_x];
            };
            if (!((_x select 0) isKindOf "LandVehicle")) then {
                throw format ["[A3XAI] Removing non-LandVehicle type vehicle from A3XAI_landVehicleList array: %1.",(_x select 0)];
            };
            if (((_x select 0) isKindOf "StaticWeapon")) then {
                throw format ["[A3XAI] Removing StaticWeapon type vehicle from A3XAI_landVehicleList array: %1.",(_x select 0)];
            };
        } catch {
            diag_log _exception;
            A3XAI_landVehicleList deleteAt _forEachIndex;
        };
    } forEach A3XAI_landVehicleList;
};

if (A3XAI_maxAirReinforcements > 0) then {
    {
        try {
            if (!(_x isKindOf "Air")) then {
                throw format ["[A3XAI] Removing non-Air type vehicle from A3XAI_airReinforcementVehicles array: %1.",_x];
            };
        } catch {
            diag_log _exception;
            A3XAI_airReinforcementVehicles deleteAt _forEachIndex;
        };
    } forEach A3XAI_airReinforcementVehicles;
};

if (A3XAI_maxUAVPatrols > 0) then {
    {
        try {
            if ((typeName _x) != "ARRAY") then {
                throw format ["[A3XAI] Removing non-array type element from A3XAI_UAVList array: %1.",_x];
            };
            if ((count _x) < 2) then {
                throw format ["[A3XAI] Array in A3XAI_UAVList has only one element: %1. 2 expected: {Classname, Amount}.",_x];
            };
            if (!((_x select 0) isKindOf "Air")) then {
                throw format ["[A3XAI] Removing non-Air type vehicle from A3XAI_UAVList array: %1.",(_x select 0)];
            };
        } catch {
            diag_log _exception;
            A3XAI_UAVList deleteAt _forEachIndex;
        };
    } forEach A3XAI_UAVList;
};

if (A3XAI_maxUGVPatrols > 0) then {
    {
        try {
            if ((typeName _x) != "ARRAY") then {
                throw format ["[A3XAI] Removing non-array type element from A3XAI_UGVList array: %1.",_x];
            };
            if ((count _x) < 2) then {
                throw format ["[A3XAI] Array in A3XAI_UGVList has only one element: %1. 2 expected: {Classname, Amount}.",_x];
            };
            if (!((_x select 0) isKindOf "LandVehicle")) then {
                throw format ["[A3XAI] Removing non-LandVehicle type vehicle from A3XAI_UGVList array: %1.",(_x select 0)];
            };
            if (((_x select 0) isKindOf "StaticWeapon")) then {
                throw format ["[A3XAI] Removing StaticWeapon type vehicle from A3XAI_UGVList array: %1.",(_x select 0)];
            };
        } catch {
            diag_log _exception;
            A3XAI_UGVList deleteAt _forEachIndex;
        };
    } forEach A3XAI_UGVList;
};

{
    if (([configFile >> "CfgWeapons" >> _x >> "ItemInfo","uniformClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "") then {
        diag_log format ["[A3XAI] Removing invalid uniform classname from A3XAI_uniformTypes0 array: %1.",_x];
        A3XAI_uniformTypes0 deleteAt _forEachIndex;
    };
} forEach A3XAI_uniformTypes0;

{
    if (([configFile >> "CfgWeapons" >> _x >> "ItemInfo","uniformClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "") then {
        diag_log format ["[A3XAI] Removing invalid uniform classname from A3XAI_uniformTypes1 array: %1.",_x];
        A3XAI_uniformTypes1 deleteAt _forEachIndex;
    };
} forEach A3XAI_uniformTypes1;

{
    if (([configFile >> "CfgWeapons" >> _x >> "ItemInfo","uniformClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "") then {
        diag_log format ["[A3XAI] Removing invalid uniform classname from A3XAI_uniformTypes2 array: %1.",_x];
        A3XAI_uniformTypes2 deleteAt _forEachIndex;
    };
} forEach A3XAI_uniformTypes2;

{
    if (([configFile >> "CfgWeapons" >> _x >> "ItemInfo","uniformClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "") then {
        diag_log format ["[A3XAI] Removing invalid uniform classname from A3XAI_uniformTypes3 array: %1.",_x];
        A3XAI_uniformTypes3 deleteAt _forEachIndex;
    };
} forEach A3XAI_uniformTypes3;

{
    if !(([configFile >> "CfgWeapons" >> _x,"type",-1] call BIS_fnc_returnConfigEntry) isEqualTo 2) then {
        diag_log format ["[A3XAI] Removing invalid pistol classname from A3XAI_pistolList array: %1.",_x];
        A3XAI_pistolList deleteAt _forEachIndex;
    };
} forEach A3XAI_pistolList;

{
    if !(([configFile >> "CfgWeapons" >> _x,"type",-1] call BIS_fnc_returnConfigEntry) isEqualTo 1) then {
        diag_log format ["[A3XAI] Removing invalid rifle classname from A3XAI_rifleList array: %1.",_x];
        A3XAI_rifleList deleteAt _forEachIndex;
    };
} forEach A3XAI_rifleList;

{
    if !(([configFile >> "CfgWeapons" >> _x,"type",-1] call BIS_fnc_returnConfigEntry) isEqualTo 1) then {
        diag_log format ["[A3XAI] Removing invalid machine gun classname from A3XAI_machinegunList array: %1.",_x];
        A3XAI_machinegunList deleteAt _forEachIndex;
    };
} forEach A3XAI_machinegunList;

{
    if !(([configFile >> "CfgWeapons" >> _x,"type",-1] call BIS_fnc_returnConfigEntry) isEqualTo 1) then {
        diag_log format ["[A3XAI] Removing invalid sniper classname from A3XAI_sniperList array: %1.",_x];
        A3XAI_sniperList deleteAt _forEachIndex;
    };
} forEach A3XAI_sniperList;

{
    if !(([configFile >> "CfgWeapons" >> _x,"type",-1] call BIS_fnc_returnConfigEntry) isEqualTo 4) then {
        diag_log format ["[A3XAI] Removing invalid launcher classname from A3XAI_launcherTypes array: %1.",_x];
        A3XAI_launcherTypes deleteAt _forEachIndex;
    };
} forEach A3XAI_launcherTypes;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo","mountAction",""] call BIS_fnc_returnConfigEntry) isEqualTo "MountOptic") then {
        diag_log format ["[A3XAI] Removing invalid optics classname from A3XAI_weaponOpticsList array: %1.",_x];
        A3XAI_weaponOpticsList deleteAt _forEachIndex;
    };
} forEach A3XAI_weaponOpticsList;

{
    if !(([configFile >> "CfgVehicles" >> _x,"vehicleClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "Backpacks") then {
        diag_log format ["[A3XAI] Removing invalid backpack classname from A3XAI_backpackTypes0 array: %1.",_x];
        A3XAI_backpackTypes0 deleteAt _forEachIndex;
    };
} forEach A3XAI_backpackTypes0;
if ("" in A3XAI_backpackTypes0) then {A3XAI_backpackTypes0 = A3XAI_backpackTypes0 - [""];};

{
    if !(([configFile >> "CfgVehicles" >> _x,"vehicleClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "Backpacks") then {
        diag_log format ["[A3XAI] Removing invalid backpack classname from A3XAI_backpackTypes1 array: %1.",_x];
        A3XAI_backpackTypes1 deleteAt _forEachIndex;
    };
} forEach A3XAI_backpackTypes1;

{
    if !(([configFile >> "CfgVehicles" >> _x,"vehicleClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "Backpacks") then {
        diag_log format ["[A3XAI] Removing invalid backpack classname from A3XAI_backpackTypes2 array: %1.",_x];
        A3XAI_backpackTypes2 deleteAt _forEachIndex;
    };
} forEach A3XAI_backpackTypes2;

{
    if !(([configFile >> "CfgVehicles" >> _x,"vehicleClass",""] call BIS_fnc_returnConfigEntry) isEqualTo "Backpacks") then {
        diag_log format ["[A3XAI] Removing invalid backpack classname from A3XAI_backpackTypes3 array: %1.",_x];
        A3XAI_backpackTypes3 deleteAt _forEachIndex;
    };
} forEach A3XAI_backpackTypes3;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Body","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitBody") then {
        diag_log format ["[A3XAI] Removing invalid vest classname from A3XAI_vestTypes0 array: %1.",_x];
        A3XAI_vestTypes0 deleteAt _forEachIndex;
    };
} forEach A3XAI_vestTypes0;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Body","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitBody") then {
        diag_log format ["[A3XAI] Removing invalid vest classname from A3XAI_vestTypes1 array: %1.",_x];
        A3XAI_vestTypes1 deleteAt _forEachIndex;
    };
} forEach A3XAI_vestTypes1;
if ("" in A3XAI_vestTypes1) then {A3XAI_vestTypes1 = A3XAI_vestTypes1 - [""];};

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Body","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitBody") then {
        diag_log format ["[A3XAI] Removing invalid vest classname from A3XAI_vestTypes2 array: %1.",_x];
        A3XAI_vestTypes2 deleteAt _forEachIndex;
    };
} forEach A3XAI_vestTypes2;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Body","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitBody") then {
        diag_log format ["[A3XAI] Removing invalid vest classname from A3XAI_vestTypes3 array: %1.",_x];
        A3XAI_vestTypes3 deleteAt _forEachIndex;
    };
} forEach A3XAI_vestTypes3;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Head","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitHead") then {
        diag_log format ["[A3XAI] Removing invalid headgear classname from A3XAI_headgearTypes0 array: %1.",_x];
        A3XAI_headgearTypes0 deleteAt _forEachIndex;
    };
} forEach A3XAI_headgearTypes0;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Head","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitHead") then {
        diag_log format ["[A3XAI] Removing invalid headgear classname from A3XAI_headgearTypes1 array: %1.",_x];
        A3XAI_headgearTypes1 deleteAt _forEachIndex;
    };
} forEach A3XAI_headgearTypes1;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Head","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitHead") then {
        diag_log format ["[CfgWeapons] Removing invalid headgear classname from A3XAI_headgearTypes2 array: %1.",_x];
        A3XAI_headgearTypes2 deleteAt _forEachIndex;
    };
} forEach A3XAI_headgearTypes2;

{
    if !(([configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "HitpointsProtectionInfo" >> "Head","hitpointName",""] call BIS_fnc_returnConfigEntry) isEqualTo "HitHead") then {
        diag_log format ["[A3XAI] Removing invalid headgear classname from A3XAI_headgearTypes3 array: %1.",_x];
        A3XAI_headgearTypes3 deleteAt _forEachIndex;
    };
} forEach A3XAI_headgearTypes3;

//Anticipate cases where all elements of an array are invalid
if (A3XAI_pistolList isEqualTo []) then {A3XAI_pistolList = ["hgun_ACPC2_F","hgun_P07_F","hgun_Pistol_heavy_01_F","hgun_Pistol_heavy_02_F","hgun_Rook40_F"]};
if (A3XAI_rifleList isEqualTo []) then {A3XAI_rifleList = ["arifle_Katiba_C_F","arifle_Katiba_F","arifle_Katiba_GL_F","arifle_Mk20_F","arifle_Mk20_GL_F","arifle_Mk20_GL_plain_F","arifle_Mk20_plain_F","arifle_Mk20C_F","arifle_Mk20C_plain_F","arifle_MX_Black_F","arifle_MX_F","arifle_MX_GL_Black_F","arifle_MX_GL_F","arifle_MXC_Black_F","arifle_MXC_F","arifle_SDAR_F","arifle_TRG20_F","arifle_TRG21_F","arifle_TRG21_GL_F"]};
if (A3XAI_machinegunList isEqualTo []) then {A3XAI_machinegunList = ["arifle_MX_SW_Black_F","arifle_MX_SW_F","LMG_Mk200_F","LMG_Zafir_F","MMG_01_hex_F","MMG_01_tan_F","MMG_02_black_F","MMG_02_camo_F","MMG_02_sand_F"]};
if (A3XAI_sniperList isEqualTo []) then {A3XAI_sniperList = ["arifle_MXM_Black_F","arifle_MXM_F","srifle_DMR_01_F","srifle_DMR_02_camo_F","srifle_DMR_02_F","srifle_DMR_02_sniper_F","srifle_DMR_03_F","srifle_DMR_03_khaki_F","srifle_DMR_03_multicam_F","srifle_DMR_03_tan_F","srifle_DMR_03_woodland_F","srifle_DMR_04_F","srifle_DMR_04_Tan_F","srifle_DMR_05_blk_F","srifle_DMR_05_hex_F","srifle_DMR_05_tan_f","srifle_DMR_06_camo_F","srifle_DMR_06_olive_F","srifle_EBR_F","srifle_GM6_camo_F","srifle_GM6_F","srifle_LRR_camo_F","srifle_LRR_F"]};
if (A3XAI_foodLoot isEqualTo []) then {A3XAI_foodLootCount = 0};
if (A3XAI_MiscLoot isEqualTo []) then {A3XAI_miscLootCount = 0};
if (A3XAI_airReinforcementVehicles isEqualTo []) then {A3XAI_maxAirReinforcements = 0; A3XAI_airReinforcementSpawnChance1 = 0; A3XAI_airReinforcementSpawnChance2 = 0; A3XAI_airReinforcementSpawnChance3 = 0;};

diag_log format ["[A3XAI] Verified %1 unique classnames in %2 seconds.",(count _verified),(diag_tickTime - _startTime)];

 

 

your file has fixed almost all those errors except for 2 of them.
"[A3XAI] Removing invalid headgear classname from A3XAI_headgearTypes0 array: Exile_Headgear_SafetyHelmet."
"[A3XAI] Removing invalid headgear classname from A3XAI_headgearTypes1 array: Exile_Headgear_SafetyHelmet."

i have looked through all the files and cant find "Exile_Headgear_SafetyHelmet".

Thank you 

Share this post


Link to post
Share on other sites
4 hours ago, digDoug said:

your file has fixed almost all those errors except for 2 of them.
"[A3XAI] Removing invalid headgear classname from A3XAI_headgearTypes0 array: Exile_Headgear_SafetyHelmet."
"[A3XAI] Removing invalid headgear classname from A3XAI_headgearTypes1 array: Exile_Headgear_SafetyHelmet."

i have looked through all the files and cant find "Exile_Headgear_SafetyHelmet".

Thank you 

Do your land vehicles move and your helos actually shoot? Mine do not do that. Do you have an updated file?

Share this post


Link to post
Share on other sites
Advertisement

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.