Jump to content
Zenophon

Zenophon's ArmA 3 Co-op Mission Making Framework

Recommended Posts

Popped in to say my many thanks to Zen for this framework. Been having a blast making missions with this lately, oh the possibilities  :D Keep up the great work man and enjoy the new digs!

Share this post


Link to post
Share on other sites

Hey Zenophon! I haven't been here in a while, mainly because your framework has been working great for me! But I did run into something you might want to look at. I don't fully understand your code but here's what I found regarding the function Zen_OrderVehicleDrop!

 

Description:

 

Zen_OrderVehicleDrop

Orders (1) to fly over (2.1) and drop (3).  (1) then lands at (2.2) or stops forever
at an undefined location.  Stops executing when (1) stops.  Works for all aircraft.
(3) can be an ammo boxes or any vehicle.  (3) will be teleported to the aircraft.
Usage : Spawn
Params: 1. Object, helicopter
    AND
        2. Array, the positions
            1. Array, group, object, string, the point to drop
     (opt.) 2. Array, group, object, string, the point to land
    OR
        2. Array, group, object, string, the point to drop

    AND
        3. Object or string, the object or the classname of the object to drop
 (opt.) 4. String, speed of (1), 'limited' 'normal' 'full', (default: 'normal')
 (opt.) 5. Scalar, the height to fly at, (default: 80)
 (opt.) 6. Boolean, true to cleanup (1) if it crashes enroute, (default: false)
Return: Void

 

So the way I read that is an array of two positions or just a position Array or group or object or string so I put in :

_drop = [_plane, _object, _box, "normal", 150, true] spawn Zen_OrderVehicleDrop;

but it returned this error:

19:38:08 Error in expression <, ([_x] call Zen_ConvertToPosition)];
} forEach _posArray;

_dropPoint = _posArr>
19:38:08   Error position: <forEach _posArray;

_dropPoint = _posArr>
19:38:08   Error foreach: Type Object, expected Array
19:38:08 File C:\Users\I7-950\Documents\Arma 3 - Other Profiles\CDN_BiggDogg\mpmissions\ravaged.Tanoa\Zen_FrameworkFunctions\Zen_OrdersFunctions\Zen_OrderVehicleDrop.sqf, line 34

So I thought it has to be an array so I changed it to:

_drop = [_plane, [_object], _box, "normal", 150, true] spawn Zen_OrderVehicleDrop;

Now the drop worked but returned this error:

19:25:02 "-- Zen_CheckArguments Error --"
19:25:02 "Argument 2 is void"
19:25:02 286.317
19:25:02 [vehicle_38,<null>,"normal",150,false,true]
19:25:02 ["Zen_CheckArguments",[vehicle_38,<null>,"normal",150,false,true],286.317]
19:25:02 ["Zen_OrderHelicopterLand",[vehicle_38,<null>,"normal",150,false,true],286.317]

So the function still works this way but throws an error so I thought you'd want to look into it. I assume that the second param isn't being checked to see what type it is and then acting accordingly.

 

By the way I'm not using a helicopter but the BIS version of the V22 osprey so I don't need it to land. Just fly away then delete!

 

As always thanks for this awesome framework!

Share this post


Link to post
Share on other sites

Looking at Zen_OrderVehicleDrop, the second position isn't really optional; the function just uses the second position without checking if it exists (hence the null array passed to Zen_OrderHelicopterLand). Thus, the positions to drop and move away to must be in an array; I will change the argument check to enforce that.

The documentation that is correct for the currently released version of the function is:

Orders (1) to fly over (2.1) and drop (3).  (1) then lands at (2.2).  Stops
executing when (1) stops.  Works for all aircraft. (3) can be an ammo boxes
or any vehicle.  (3) will be teleported to the aircraft.
Usage : Spawn
Params: 1. Object, helicopter
        2. Array, the positions
            1. Array, group, object, string, the point to drop
            2. Array, group, object, string, the point to land
        3. Object or string, the object or the classname of the object to drop
 (opt.) 4. String, speed of (1), 'limited' 'normal' 'full', (default: 'normal')
 (opt.) 5. Scalar, the height to fly at, (default: 80)
 (opt.) 6. Boolean, true to cleanup (1) if it crashes enroute, (default: false)
Return: Void

For example, this is from a test script:

0 = [_testHeli2, [player, "mkTestInsertion"], _box, "normal", 80, true] spawn Zen_OrderVehicleDrop;
As for making the osprey fly away and be deleted, you must give a position for it to head toward and manually delete it at some point.

_endPos = [_object, [2000, 3000], [], 0] call Zen_FindGroundPosition;
_drop = [_plane, [_object, _endPos], _box, "normal", 150, true] spawn Zen_OrderVehicleDrop;

ZEN_FMW_Code_WaitDistanceLess(_plane, _object, 500)
ZEN_FMW_Code_WaitDistanceGreater(_plane, _object, 2000)
terminate _drop;
ZEN_STD_OBJ_DeleteVehCrew(_plane)

On a slightly related note, I am planning to investigate using vehicle-in-vehicle transport with Zen_OrderVehicleDrop to see if it works better than just teleporting the object.

Share this post


Link to post
Share on other sites

Looking at Zen_OrderVehicleDrop, the second position isn't really optional; the function just uses the second position without checking if it exists (hence the null array passed to Zen_OrderHelicopterLand). Thus, the positions to drop and move away to must be in an array; I will change the argument check to enforce that.

The documentation that is correct for the currently released version of the function is:

Orders (1) to fly over (2.1) and drop (3).  (1) then lands at (2.2).  Stops
executing when (1) stops.  Works for all aircraft. (3) can be an ammo boxes
or any vehicle.  (3) will be teleported to the aircraft.
Usage : Spawn
Params: 1. Object, helicopter
        2. Array, the positions
            1. Array, group, object, string, the point to drop
            2. Array, group, object, string, the point to land
        3. Object or string, the object or the classname of the object to drop
 (opt.) 4. String, speed of (1), 'limited' 'normal' 'full', (default: 'normal')
 (opt.) 5. Scalar, the height to fly at, (default: 80)
 (opt.) 6. Boolean, true to cleanup (1) if it crashes enroute, (default: false)
Return: Void

For example, this is from a test script:

0 = [_testHeli2, [player, "mkTestInsertion"], _box, "normal", 80, true] spawn Zen_OrderVehicleDrop;
As for making the osprey fly away and be deleted, you must give a position for it to head toward and manually delete it at some point.

_endPos = [_object, [2000, 3000], [], 0] call Zen_FindGroundPosition;
_drop = [_plane, [_object, _endPos], _box, "normal", 150, true] spawn Zen_OrderVehicleDrop;

ZEN_FMW_Code_WaitDistanceLess(_plane, _object, 500)
ZEN_FMW_Code_WaitDistanceGreater(_plane, _object, 2000)
terminate _drop;
ZEN_STD_OBJ_DeleteVehCrew(_plane)

On a slightly related note, I am planning to investigate using vehicle-in-vehicle transport with Zen_OrderVehicleDrop to see if it works better than just teleporting the object.

 

 

 Can you add the ability to make it delete (same as what's used in the Zen_OrderVehicleMove) instead of landing? So either land or delete so it can be truly used on all aircraft?

Share this post


Link to post
Share on other sites

Hi.

 

Is there a possibility to task ai group to defend spawn position?

 

What i am doing wrong here that spawned heli does not fly to the insertion  destination?

It just stay on the ground with crew and cargo group inside.

No errors are displayed

 

@ EDIT found some documentation and examples which gives me information how to use others functions from this great framework.

Unfortunately the  problem remains.

 

fnc_reinforcment = {

    params ["_oa", "_hspawnPos", "_insertionPos", "_heli", "_ispawnPos", "_reinf_grp"]; 
    
    #define AI_SKILL "infantry"
    
    hint format ["Reinforcement on the way to OA %1", markerText _oa];
    missionNamespace setVariable ["reiforcmnt",true];
    
    _hspawnPos = ["mkReinfSpawn", 0, [], 1, [1, 200]] call Zen_FindGroundPosition;
    _insertionPos = [_oa, 0, [], 1, [1, 100]] call Zen_FindGroundPosition;
    
    _heli = [_hspawnPos,[
    
        "B_Heli_Transport_03_unarmed_F",
        "B_Heli_Transport_01_F",
        "B_Heli_Transport_01_camo_F"
        
    ],0,90] call Zen_SpawnHelicopter;
    
    _ispawnPos = ["mkReinfSpawn", 0, [], 1, [1, 200]] call Zen_FindGroundPosition;
    _reinf_grp = [_ispawnPos, west, AI_SKILL, [6,8]] call Zen_SpawnInfantry;
    
    0 = [_reinf_grp, _heli] call Zen_MoveInVehicle;
    0 = [_heli, _insertionPos, _reinf_grp] spawn Zen_OrderInsertion;
        
    waitUntil {sleep 5; ([_reinf_grp, _heli] call Zen_AreNotInVehicle)};
    
    [_reinf_grp, (getMarkerPos _oa), 70, 1, false] call fnc_taskDefend;//3rd party function , need to find Zen one. 
    
    sleep 5;
    
    missionNamespace setVariable ["reiforcmnt",false];

};

 

There  two markers _oa and "mkReinfSpawn".

Function is called by

_marker spawn fnc_reinforcment;

Share this post


Link to post
Share on other sites

Can you add the ability to make it delete (same as what's used in the Zen_OrderVehicleMove) instead of landing? So either land or delete so it can be truly used on all aircraft?

Yes, I can make that an extra parameter; when enabled, Zen_OrderVehicleDrop will use Zen_OrderVehicleMove instead of Zen_OrderHelicopterLand.

 

Hi.

Is there a possibility to task ai group to defend spawn position?

What i am doing wrong here that spawned heli does not fly to the insertion destination?

It just stay on the ground with crew and cargo group inside.

@ EDIT found some documentation and examples which give me information how to use others functions with that great framework.

Unfortunately the problem remains.

fnc_reinforcment = {
    params ["_oa", "_hspawnPos", "_insertionPos", "_heli", "_ispawnPos", "_reinf_grp"];

    #define AI_SKILL "infantry"

    hint format ["Reinforcement on the way to OA %1", markerText _oa];
    missionNamespace setVariable ["reiforcmnt",true];

    _hspawnPos = ["mkReinfSpawn", 0, [], 1, [1, 200]] call Zen_FindGroundPosition;
    _insertionPos = [_oa, 0, [], 1, [1, 100]] call Zen_FindGroundPosition;

    _heli = [_hspawnPos,[

        "B_Heli_Transport_03_unarmed_F",
        "B_Heli_Transport_01_F",
        "B_Heli_Transport_01_camo_F"

    ],0,90] call Zen_SpawnHelicopter;

    _ispawnPos = ["mkReinfSpawn", 0, [], 1, [1, 200]] call Zen_FindGroundPosition;
    _reinf_grp = [_ispawnPos, west, AI_SKILL, [6,8]] call Zen_SpawnInfantry;

    0 = [_reinf_grp, _heli] call Zen_MoveInVehicle;
    0 = [_heli, _insertionPos, _reinf_grp] spawn Zen_OrderInsertion;

    waitUntil {sleep 5; ([_reinf_grp, _heli] call Zen_AreNotInVehicle)};

    [_reinf_grp, (getMarkerPos _oa), 70, 1, false] call fnc_taskDefend;//3rd party function , need to find Zen one.

    sleep 5;

    missionNamespace setVariable ["reiforcmnt",false];
};

On the first line, 'params' should be 'private' (assuming you don't want to read all of those variables as arguments). Only _ao appears to be an argument, so

private ["_hspawnPos", "_insertionPos", "_heli", "_ispawnPos", "_reinf_grp"];
params ["_ao"];
I don't see anything wrong with the usage of Zen_OrderInsertion; if the helicopter never starts its engines, the AI is likely confused about the move order (i.e. they think it's completed or impossible). You could try spawning the helicopter in the air and observing its behavior. If it thinks it's done with the move order, it should land; if it doesn't get the order, it will just hover there.

 

_heli = [_hspawnPos, ["B_Heli_Transport_03_unarmed_F", "B_Heli_Transport_01_F", "B_Heli_Transport_01_camo_F"], 40, 90] call Zen_SpawnHelicopter;
You could also try using Zen_OrderHelicopterLand or Zen_OrderVehicleMove to see if the helicopter responds to anything. That will determine if the issue is with Zen_OrderInsertion specifically.

There is no dedicated 'order defend' function in the framework that will make AI take cover, man static weapons, watch all directions, etc; framework function avoid micro-managing the AI whenever possible to maximize compatibility with AI mods that do that. However, if you just want them to walk around and engage enemies that attack them, giving Zen_OrderInfantryPatrol a very small patrol area works.

  • Like 1

Share this post


Link to post
Share on other sites

Thanks for advices and reply.
 

fnc_reinforcment = {

    private ["_oapos", "_hspawnPos", "_insertionPos", "_heli", "_reinf_grp"];
    params ["_oa"];

    missionNamespace setVariable ["reiforcmnt",true];
    
    _oapos = getMarkerPos _oa;
    
    //this is awesome and insane function! Spend 3 hrs for study its capabilities :-)
    _hspawnPos = [(getMarkerPos "mkReinfSpawn"), [0, 200], [], 1] call Zen_FindGroundPosition;
    _insertionPos = [_oapos, [20, 100], [], 1, [2,100],[250,370,'compass']] call Zen_FindGroundPosition;

    
    _heli = [_hspawnPos,[
    
        "B_Heli_Transport_03_unarmed_F",
        "B_Heli_Transport_01_F",
        "B_Heli_Transport_01_camo_F"
        
    ],40,90] call Zen_SpawnHelicopter;
    
    _reinf_grp = [_hspawnPos, west, "infantry", [6,8]] call Zen_SpawnInfantry;
    
    0 = [_reinf_grp, _heli] call Zen_MoveInVehicle;
/*    
     0 = [_heli, _insertionPos, _reinf_grp] spawn Zen_OrderInsertion;
    // sometimes is not working - helicopter hover for ever at spawn
    
    0 = [_heli, _insertionPos, _reinf_grp, 'normal', 40, 'land', true] spawn Zen_OrderInsertion;
    // sometimes is not working - helicopter hover for ever at spawn
    
    0 = [_heli, _insertionPos, 'normal', 40, false, true] spawn Zen_OrderHelicopterLand;
    //sometimes is not working - helicopter hover for ever at spawn
*/
    _reinf_arrived = [_heli, _insertionPos, 'normal', 40, false, true] spawn Zen_OrderVehicleMove;
    //sometimes is not working - helicopter hover for ever at spawn

    waitUntil {sleep 5; scriptDone _reinf_arrived};
    
    if (alive _heli) then {
    
    
        0 = [_heli, _reinf_grp] spawn Zen_OrderFastRope;
        //sometimes firs AI stack in the ground and only his head is visible, other ais are not roped, helicopter hover for ever
        //stacked AI are invulnerable
    
    };
    
    waitUntil {sleep 10; ([_reinf_grp, _heli]) call Zen_AreNotInVehicle};
    
    if (({alive _x} count (units _reinf_grp)) > 0) then {
        
        hint format ["Task defend %1 added to group %2", markerText _oa, _reinf_grp]; //test to define timing
        [_reinf_grp, _oapos, 70, 1, false] call fnc_taskDefend;
        
    };
        
    if (alive _heli) then {
        
        0 = [_heli, _hspawnPos, 'normal', 40, true, true] spawn Zen_OrderVehicleMove;
        //sometimes is not working, after successfuly done vehicle + crew are removed
        
    };
    
    sleep 5;
    missionNamespace setVariable ["reiforcmnt",false];

};


 
Like you said he just hovering there.
Make more calls/restart and once he just do what it should.
 
The same happen with  Zen_OrderHelicopterLand and Zen_OrderVehicleMove.
Looks like sometimes works but more times is not.
Are there any possibility to track down why?

Share this post


Link to post
Share on other sites

Due to that inconsistency  i had to make it in more traditional way, but still using this amazing framework.

I cant even imagine how many work has this required from you. Really big thing.

I have found here almost all  what i needed so far so big thanks for that.

Now i need go deeply into this to find how  to use ZEN tasking system

 

 

    fnc_reinforcment = {

    params ["_oa"];

        missionNamespace setVariable ["reiforcmnt",true];
            
        private _hspawnPos = ["mkReinfSpawn", [0, 200], [], 1] call Zen_FindGroundPosition;
        private _insertionPos = [_oa, [40, 120], [], 1, [2,100],[250,370,'compass']] call Zen_FindGroundPosition;

        private _heli = [_hspawnPos,[
        
            "B_Heli_Transport_03_unarmed_F",
            "B_Heli_Transport_01_F",
            "B_Heli_Transport_01_camo_F",
            "B_CTRG_Heli_Transport_01_sand_F",
            "B_CTRG_Heli_Transport_01_tropic_F"
            
        ],40,90] call Zen_SpawnHelicopter;
        
            null = _heli spawn {

                waitUntil {sleep 10; !(alive _this) || !(missionNamespace getVariable "reiforcmnt")};
                missionNamespace setVariable ["reiforcmnt",false];
                
            };
        
        private _gsits = [_heli, ['All']] call Zen_GetFreeSeats;
        private _sitscnt = count (_gsits select 2);
        
        private _reinf_grp = [_hspawnPos, WEST, "Infantry", _sitscnt, "Men", "BLU_F", [
        
            //blacklisted
            "B_soldier_UAV_F","B_soldier_PG_F","B_soldier_AA_F","B_soldier_AT_F","B_soldier_LAT_F","B_CTRG_soldier_GL_LAT_F","B_diver_F","B_diver_TL_F",
            "B_diver_exp_F","B_spotter_F","B_sniper_F","B_ghillie_sard_F","B_ghillie_ard_F","B_ghillie_lsh_F","B_recon_LAT_F","B_Protagonist_VR_F","B_Soldier_VR_F"

        ],"All"] call Zen_SpawnInfantry;
        
        sleep 2;
        
        null = [_reinf_grp, _heli] call Zen_MoveInVehicle;
        
        sleep 2;
            
        null = [_heli, _insertionPos, 10, "MOVE", "CARELESS", "GREEN", "FULL", "COLUMN",
            "
                (vehicle this) land 'LAND'

            "
        ] call CBA_fnc_addWaypoint;
        
        private _heliPad = "Land_HelipadEmpty_F" createVehicle _insertionPos;

        waitUntil {sleep 5; ((getPos _heli) select 2) < 2};
        
        if (alive _heli) then {

            _reinf_grp leaveVehicle _heli;
            
        };
        
        waitUntil {sleep 5; ([_reinf_grp, _heli]) call Zen_AreNotInVehicle};
        
        if (({alive _x} count (units _reinf_grp)) > 0) then {
                    
            null = [_reinf_grp, _oa, 10, "MOVE", "AWARE", "YELLOW", "FULL", "COLUMN",
            "
                private _marker = ([allMapMarkers, {((getMarkerPos _this) distance this) > 200}] call Zen_ArrayFilterCondition) select 0;
                null = [this, _marker, 70, 1, false] call CBA_fnc_taskDefend

            ",[0,0,0],5] call CBA_fnc_addWaypoint;
        };
            
        sleep 5;
        
        if (alive _heli) then {
        
            null = [_heli, _hspawnPos, 10, "MOVE", "CARELESS", "GREEN", "FULL", "COLUMN",
            "

                deleteVehicle (vehicle this);
                {deleteVehicle _x;} forEach thislist

            "
            ] call CBA_fnc_addWaypoint;

            
        };
        
        deleteVehicle _heliPad;
        missionNamespace setVariable ["reiforcmnt",false];

    };

 

VIDEO

  • Like 1

Share this post


Link to post
Share on other sites

@ davidoss Zen's scripting is amazing, I was editing an old school RTS mission (with the help of Zen) and his framework, its well documented and written..

dont know what point im trying to say , just a big  :ok: on this framework and Zenophone  

Share this post


Link to post
Share on other sites

Due to that inconsistency  i had to make it in more traditional way, but still using this amazing framework.

I cant even imagine how many work has this required from you. Really big thing.

I have found here almost all  what i needed so far so big thanks for that.

Now i need go deeply into this to find how  to use ZEN tasking system

 

 

fnc_reinforcment = {

params ["_oa"];

	missionNamespace setVariable ["reiforcmnt",true];
		
	private _hspawnPos = ["mkReinfSpawn", [0, 200], [], 1] call Zen_FindGroundPosition;
	private _insertionPos = [_oa, [20, 100], [], 1, [2,100],[250,370,'compass']] call Zen_FindGroundPosition; 

	private _heli = [_hspawnPos,[
	
		"B_Heli_Transport_03_unarmed_F",
		"B_Heli_Transport_01_F",
		"B_Heli_Transport_01_camo_F",
		"B_CTRG_Heli_Transport_01_sand_F",
		"B_CTRG_Heli_Transport_01_tropic_F"
		
	],40,90] call Zen_SpawnHelicopter;
	
	private _gsits = [_heli, ['All']] call Zen_GetFreeSeats;
	private _sitscnt = count (_gsits select 2);
	
	private _reinf_grp = [_hspawnPos, WEST, "Infantry", _sitscnt, "Men", "BLU_F", [
		//blacklisted
		"B_soldier_UAV_F",
		"B_soldier_PG_F",
		"B_soldier_AA_F",
		"B_soldier_AT_F",
		"B_soldier_LAT_F",
		"B_CTRG_soldier_GL_LAT_F",
		"B_diver_F",
		"B_diver_TL_F",
		"B_diver_exp_F",
		"B_spotter_F",
		"B_sniper_F",
		"B_ghillie_sard_F",
		"B_ghillie_ard_F",
		"B_ghillie_lsh_F",
		"B_recon_LAT_F",
		"B_Protagonist_VR_F",
		"B_Soldier_VR_F"

	],"All"] call Zen_SpawnInfantry;
	
	sleep 2;
	
	null = [_reinf_grp, _heli] call Zen_MoveInVehicle;
	
	sleep 2;
/*	
 	null = [_heli, _insertionPos, _reinf_grp] spawn Zen_OrderInsertion; 
	sometimes is not working - helicopter hover for ever at spawn
	
	null = [_heli, _insertionPos, _reinf_grp, 'normal', 40, 'land', true] spawn Zen_OrderInsertion; 
	sometimes is not working - helicopter hover for ever at spawn
	
	null = [_heli,_insertionPos, "full", 40, false, true] spawn Zen_OrderHelicopterLand;
	sometimes is not working - helicopter hover for ever at spawn
	
	null = [_heli, _insertionPos, 'normal', 40, false, true] spawn Zen_OrderVehicleMove; 
	//sometimes is not working - helicopter hover for ever at spawn
*/	
		
	null = [_heli, _insertionPos, 10, "MOVE", "CARELESS", "YELLOW", "FULL", "COLUMN",
		"
			(vehicle this) land 'LAND'

		"
	] call CBA_fnc_addWaypoint;
	
	private _heliPad = "Land_HelipadEmpty_F" createVehicle _insertionPos;

	waitUntil {sleep 5; ((getPos _heli) select 2) < 2};
	
	if (alive _heli) then {
/*	
		null = [_heli, _reinf_grp] spawn Zen_OrderFastRope;
		sometimes firs AI stack in the ground and only his head is visible, other ais are not roped, helicopter hover for ever
		stacked AI are invulnerable
*/	
		_reinf_grp leaveVehicle _heli;
		
	};
	
	waitUntil {sleep 5; ([_reinf_grp, _heli]) call Zen_AreNotInVehicle};
	
	if (({alive _x} count (units _reinf_grp)) > 0) then {
				
		null = [_reinf_grp, _oa, 10, "MOVE", "AWARE", "YELLOW", "FULL", "COLUMN",
		"
			private _marker = ([allMapMarkers, {((getMarkerPos _this) distance this) > 200}] call Zen_ArrayFilterCondition) select 0;
			null = [this, _marker, 70, 1, false] call fnc_taskDefend

		",[0,0,0],5] call CBA_fnc_addWaypoint;
	};
		
	sleep 5;
	
	if (alive _heli) then {
	
/*	
		null = [_heli, _hspawnPos, 'normal', 40, true, true] spawn Zen_OrderVehicleMove; 
		sometimes is not working, after successfuly done vehicle + crew are removed
*/	

		null = [_heli, _hspawnPos, 10, "MOVE", "AWARE", "YELLOW", "FULL", "COLUMN",
		"

			deleteVehicle (vehicle this);
			{deleteVehicle _x;} forEach thislist

		"
		] call CBA_fnc_addWaypoint;

		
	};
	
	deleteVehicle _heliPad;
	missionNamespace setVariable ["reiforcmnt",false];

};


fnc_set_mrkalpha = {

	private ["_players", "_defence", "_units", "_statics", "_units_cnt"];
	params ["_marker"];
	
		_players = playableUnits + switchableUnits;
	
		while {!defenced} do {
	
			sleep 10;
			
			_defence = [];
			_units = (getMarkerPos _marker) nearEntities ["Man", 150];
			_statics = (getMarkerPos _marker) nearEntities ["StaticWeapon", 150];

			{
				
				if ((side _x) isEqualTo WEST && !(_x in _players) && !(isPlayer _x)) then {
				
				
					_defence pushback _x;
				
				};
			
			
			} forEach _units; 
			
			sleep 3;
			
			_statics = _statics select {(_x emptyPositions "Gunner") == 0};
			_units_cnt = {alive _x} count (_defence + _statics);
		
				switch (true) do {
			
					case (_units_cnt isEqualTo 10): {
					
						_marker setMarkerColor "colorBLUFOR";
						_marker setMarkerAlpha ((_units_cnt*0.1) min 1);
						
					};
					
					case (!(_units_cnt isEqualTo 10) && _units_cnt > 4): { 
					
						_marker setMarkerColor "colorBLUFOR";
						_marker setMarkerAlpha ((_units_cnt*0.1) min 1); 
					
					};
					
					case (!(_units_cnt isEqualTo 10) && _units_cnt <= 4 && !(_units_cnt isEqualTo 0)): {
					
						_marker setMarkerColor "colorBLUFOR";
						_marker setMarkerAlpha ((_units_cnt*0.1) min 1);
					};
					
					case (_units_cnt isEqualTo 0): {

						_marker setMarkerColor "colorOPFOR";
						_marker setMarkerAlpha 1;
					
					};		
					
					default { _marker setMarkerAlpha ((_units_cnt*0.1) min 1);};
				};
				
			
				if (
				
					_units_cnt <= 4 &&
					{alive _x && (_x distance (getMarkerPos _marker)) < 200 } count _players > 0 &&
					!(missionNamespace getVariable "reiforcmnt")
					
					) then {
					
						null = _marker spawn fnc_reinforcment;
			
					};
		};

}; 

fnc_spawn_guard = {

	params ["_mrk"];
	
	private _arrayofUnits = [
	
		"B_Soldier_F",
		"B_Soldier_lite_F",
		"B_Soldier_GL_F",
		"B_soldier_AR_F",
		"B_Soldier_SL_F",
		"B_Soldier_TL_F",
		"B_soldier_M_F",
		"B_medic_F",
		"B_soldier_repair_F",
		"B_soldier_exp_F",
		"B_Soldier_A_F",
		"B_engineer_F",
		"B_officer_F",
		"B_Sharpshooter_F",
		"B_HeavyGunner_F"
		
	];

	waitUntil {
	
		sleep 5;
		{alive _x && (_x distance (getMarkerPos _mrk)) < 300 } count (playableUnits + switchableUnits) > 0
		
	};

	private _defence_count = floor random [3,8,(count _arrayofUnits)];
 
	private _toSpawn = [_arrayofUnits, _defence_count, false] call Zen_ArrayGetRandomSequence;

	private _outpost_grp = [_mrk, _toSpawn] call Zen_SpawnGroup;

	sleep 2;

	null = [_outpost_grp, _mrk, 70, 1, false] call fnc_taskDefend;
	null = _mrk spawn fnc_set_mrkalpha;

};

 

VIDEO

 

I ran into this exact same problem a while back and even set up test missions to demonstrate what was happening with the AI drivers and pilots not responding to commands. I made missions for both helo's and tanks as both were prone to getting "stuck". Unfortunately we (I sent the missions to Zenophon for him to look at) weren't able to determine the cause!

Share this post


Link to post
Share on other sites

@ davidoss Zen's scripting is amazing, I was editing an old school RTS mission (with the help of Zen) and his framework, its well documented and written..

dont know what point im trying to say , just a big :ok: on this framework and Zenophone

 

Yes saw that.

I have maybe 5 times tried  to get into this in the past but without success.

This time for sure :)

 

 

 

 

I ran into this exact same problem a while back and even set up test missions to demonstrate what was happening with the AI drivers and pilots not responding to commands. I made missions for both helo's and tanks as both were prone to getting "stuck". Unfortunately we (I sent the missions to Zenophon for him to look at) weren't able to determine the cause!

 

Oh thats bad. Means no chance for any fix... :wacko:

Share this post


Link to post
Share on other sites

from my recent tests I found that 'paradrop' was having issues, but other insertion types seemed to be OK. With paradrop, the helo simply sits on the runway. Not so long ago this was never an issue. 

 

Also I found that if I were to move a group of 6 units into the cargo of an Mi8, two of these units get left outside, despite having empty slots in the vehicle. But if I move them using 'all', noone is left behind, yet throws up an error with the driver, which is expected. This seems to happen regardless of the size of the unit group.

Share this post


Link to post
Share on other sites

Also I found that if I were to move a group of 6 units into the cargo of an Mi8, two of these units get left outside, despite having empty slots in the vehicle. But if I move them using 'all', noone is left behind, yet throws up an error with the driver, which is expected. This seems to happen regardless of the size of the unit group.

 

I've also seen this when using Zen_MoveInVehicle with the 'cargo' setting on a troop transport Blackfish.

Share this post


Link to post
Share on other sites

I have tried all of them multiple times and here are the results:

    null = [_heli, _insertionPos, _reinf_grp] spawn Zen_OrderInsertion;
//    sometimes is not working - helicopter hover for ever at spawn
    
    null = [_heli, _insertionPos, _reinf_grp, 'normal', 40, 'land', true] spawn Zen_OrderInsertion;
//    sometimes is not working - helicopter hover for ever at spawn
    
    null = [_heli,_insertionPos, "full", 40, false, true] spawn Zen_OrderHelicopterLand;
//    sometimes is not working - helicopter hover for ever at spawn
    
    null = [_heli, _insertionPos, 'normal', 40, false, true] spawn Zen_OrderVehicleMove;
//    sometimes is not working - helicopter hover for ever at spawn

    null = [_heli, _reinf_grp] spawn Zen_OrderFastRope;
//    sometimes first AI stack in the ground and only his head is visible, other ais are not being roped, helicopter hover for ever
//    stacked AI are invulnerable

 

Anyway, could someone please show me how to use Zen cache system properly?

Need to cache units when no players/enemy near and un-cache if players/enemy nearby.

I have read the documentation but i do not understand fully how it works.

Share this post


Link to post
Share on other sites

Hey Zen,

you might want to update your functions to utilize some of the new script commands. There is quite a bit of performance to be gained there.

 

especially with the new

"array select expression"

and the "inArea" command.

Share this post


Link to post
Share on other sites

After making more test i am 99% sure that the whole problem with hovering choppers are in Zen_MoveInVehicle.

 

I have more questions for example about loadout system in MP.

 

i have setup this as fallow

_data = [] call fnc_crate_loadout;

if (isServer) then {

	{

		null = [_x, _data, -1, true] call Zen_AddLoadoutDialog;

	} forEach (allMissionObjects "B_supplyCrate_F");

};

fnc_crate_loadout

fnc_crate_loadout = {

	//recon rifleman

	_loadout1 = [
	[["uniform","U_B_CombatUniform_mcam"],["vest","V_Chestrig_rgr"],["headgear","H_Booniehat_mcamo"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","ItemGPS","NVGoggles"]],["weapons",["arifle_MXM_DMS_LP_BI_snds_F","hgun_P07_snds_F","Rangefinder"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["MiniGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["muzzle_snds_H","acc_pointer_IR","optic_DMS","bipod_01_F_snd"]],["handgunAttachments",["muzzle_snds_L"]]],
	"RECON RIFLEMAN"
	] call Zen_CreateLoadout;


	//recon medic

	_loadout2 = [
	[["uniform","U_B_CombatUniform_mcam_tshirt"],["vest","V_Chestrig_rgr"],["backpack","B_AssaultPack_rgr_ReconMedic"],["headgear","H_HelmetB_light"],["goggles","G_Tactical_Clear"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","ItemGPS","NVGoggles"]],["weapons",["arifle_MXC_ACO_pointer_snds_F","hgun_P07_snds_F"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["MiniGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["SmokeShellRed",1],["SmokeShellBlue",1],["SmokeShellOrange",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",6],["Medikit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["muzzle_snds_H","acc_pointer_IR","optic_Aco"]],["handgunAttachments",["muzzle_snds_L"]]],
	"RECON MEDIC"
	] call Zen_CreateLoadout;
	//recon

	_loadout3 = [
	[["uniform","U_B_CombatUniform_mcam_vest"],["vest","V_Chestrig_rgr"],["headgear","H_Watchcap_camo"],["goggles","G_Tactical_Black"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","ItemGPS","NVGoggles"]],["weapons",["arifle_MX_ACO_pointer_snds_F","hgun_P07_snds_F","Binocular"]],["magazines",[["30Rnd_65x39_caseless_mag",9],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["MiniGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["muzzle_snds_H","acc_pointer_IR","optic_Aco"]],["handgunAttachments",["muzzle_snds_L"]]],
	"RECON"
	] call Zen_CreateLoadout;

	//recon miner

	_loadout4 = [
	[["uniform","U_B_CombatUniform_mcam_tshirt"],["vest","V_Chestrig_rgr"],["backpack","B_AssaultPack_rgr_ReconExp"],["headgear","H_Booniehat_mcamo"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","ItemGPS","NVGoggles"]],["weapons",["arifle_MX_ACO_pointer_snds_F","hgun_P07_snds_F"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["APERSMine_Range_Mag",3],["MiniGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["ClaymoreDirectionalMine_Remote_Mag",2],["APERSBoundingMine_Range_Mag",3],["DemoCharge_Remote_Mag",1],["SLAMDirectionalMine_Wire_Mag",2],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["MineDetector",1],["ToolKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["muzzle_snds_H","acc_pointer_IR","optic_Aco"]],["handgunAttachments",["muzzle_snds_L"]]],
	"RECON MINER"
	] call Zen_CreateLoadout;

	//rifleman sniper

	_loadout5 = [
	[["uniform","U_B_CombatUniform_mcam"],["vest","V_PlateCarrier1_rgr"],["headgear","H_HelmetB_grass"],["goggles","G_Combat"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MXM_Hamr_LP_BI_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",7],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["HandGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR","optic_Hamr","bipod_01_F_snd"]]],
	"SHARPSHOTER"
	] call Zen_CreateLoadout;


	//rifleman light

	_loadout6 = [
	[["uniform","U_B_CombatUniform_mcam_vest"],["vest","V_BandollierB_rgr"],["headgear","H_MilCap_mcamo"],["goggles","G_Combat"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_ACO_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["SmokeShell",1],["SmokeShellGreen",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["optic_Aco"]]],
	"RIFLEMAN LIGHT"
	] call Zen_CreateLoadout;

	//miner

	_loadout7 = [
	[["uniform","U_B_CombatUniform_mcam"],["vest","V_PlateCarrierGL_rgr"],["backpack","B_Kitbag_rgr_Exp"],["headgear","H_HelmetSpecB"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MXC_Holo_pointer_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["APERSMine_Range_Mag",3],["HandGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["APERSBoundingMine_Range_Mag",3],["ClaymoreDirectionalMine_Remote_Mag",2],["SLAMDirectionalMine_Wire_Mag",2],["DemoCharge_Remote_Mag",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["ToolKit",1],["MineDetector",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR","optic_Holosight"]]],
	"MINER"
	] call Zen_CreateLoadout;

	//mechanic

	_loadout8 = [
	[["uniform","U_B_CombatUniform_mcam"],["vest","V_PlateCarrier1_rgr"],["backpack","B_AssaultPack_rgr_Repair"],["headgear","H_HelmetB_light_sand"],["goggles","G_Tactical_Black"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_Holo_pointer_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["HandGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["SmokeShellBlue",1],["SmokeShellOrange",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["ToolKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR","optic_Holosight"]]],
	"MECHANIC"
	] call Zen_CreateLoadout;

	//ammo rkm

	_loadout9 = [
	[["uniform","U_B_CombatUniform_mcam_tshirt"],["vest","V_Chestrig_rgr"],["backpack","B_Kitbag_rgr_AAR"],["headgear","H_HelmetB_light"],["goggles","G_Tactical_Clear"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_ACO_pointer_F","hgun_P07_F","Rangefinder"]],["magazines",[["30Rnd_65x39_caseless_mag",7],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["HandGrenade",2],["B_IR_Grenade",2],["SmokeShell",1],["SmokeShellGreen",1],["100Rnd_65x39_caseless_mag",2],["100Rnd_65x39_caseless_mag_Tracer",2],["130Rnd_338_Mag",2],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["optic_tws_mg",1],["bipod_01_F_snd",1],["muzzle_snds_338_sand",1],["muzzle_snds_H_SW",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR","optic_Aco"]]],
	"AMMOBEARER RKM"
	] call Zen_CreateLoadout;

	//rifleman rkm

	_loadout10 = [
	[["uniform","U_B_CombatUniform_mcam_tshirt"],["vest","V_Chestrig_rgr"],["backpack","B_Kitbag_rgr_AAR"],["headgear","H_HelmetB_light"],["goggles","G_Tactical_Clear"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_ACO_pointer_F","hgun_P07_F","Rangefinder"]],["magazines",[["30Rnd_65x39_caseless_mag",7],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["HandGrenade",2],["B_IR_Grenade",2],["SmokeShell",1],["SmokeShellGreen",1],["100Rnd_65x39_caseless_mag",2],["100Rnd_65x39_caseless_mag_Tracer",2],["130Rnd_338_Mag",2],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["optic_tws_mg",1],["bipod_01_F_snd",1],["muzzle_snds_338_sand",1],["muzzle_snds_H_SW",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR","optic_Aco"]]],
	"RIFLEMAN RKM"
	] call Zen_CreateLoadout;

	//ammo

	_loadout11 = [
	[["uniform","U_B_CombatUniform_mcam"],["vest","V_PlateCarrier1_rgr"],["backpack","B_AssaultPack_mcamo_Ammo"],["headgear","H_HelmetB_grass"],["goggles","G_Aviator"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_ACO_pointer_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",17],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["HandGrenade",4],["SmokeShell",1],["SmokeShellGreen",1],["100Rnd_65x39_caseless_mag",1],["NLAW_F",1],["MiniGrenade",2],["1Rnd_HE_Grenade_shell",3],["3Rnd_HE_Grenade_shell",1],["10Rnd_338_Mag",2],["20Rnd_762x51_Mag",2],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",5],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR","optic_Aco"]]],
	"AMMOBEARER"
	] call Zen_CreateLoadout;

	//grenadier

	_loadout12 = [
	[["uniform","U_B_CombatUniform_mcam"],["vest","V_PlateCarrierGL_rgr"],["headgear","H_HelmetSpecB_blk"],["goggles","G_Combat"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_GL_ACO_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["1Rnd_HE_Grenade_shell",5],["HandGrenade",2],["MiniGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["1Rnd_Smoke_Grenade_shell",2],["1Rnd_SmokeBlue_Grenade_shell",1],["1Rnd_SmokeGreen_Grenade_shell",1],["1Rnd_SmokeOrange_Grenade_shell",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["optic_Aco"]]],
	"GRENADIER"
	] call Zen_CreateLoadout;

	//medic

	_loadout13 = [
	[["uniform","U_B_CombatUniform_mcam_tshirt"],["vest","V_PlateCarrierSpec_rgr"],["backpack","B_AssaultPack_rgr_Medic"],["headgear","H_HelmetB_light_desert"],["goggles","G_Combat"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_pointer_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["SmokeShell",1],["SmokeShellGreen",1],["SmokeShellBlue",1],["SmokeShellOrange",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",11],["Medikit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR"]]],
	"MEDIC"
	] call Zen_CreateLoadout;

	//rifleman

	_loadout14 = [
	[["uniform","U_B_CombatUniform_mcam"],["vest","V_PlateCarrier1_rgr"],["headgear","H_HelmetB"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_ACO_pointer_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",9],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["SmokeShell",1],["SmokeShellGreen",1],["HandGrenade",2],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR","optic_Aco"]]],
	"RIFLEMAN"
	] call Zen_CreateLoadout;


	//sniper

	_loadout15 = [
	[["uniform","U_B_GhillieSuit"],["vest","V_Chestrig_rgr"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","ItemGPS","NVGoggles"]],["weapons",["srifle_LRR_camo_LRPS_F","hgun_P07_snds_F","Rangefinder"]],["magazines",[["7Rnd_408_Mag",5],["SmokeShell",1],["16Rnd_9x21_Mag",2],["ClaymoreDirectionalMine_Remote_Mag",1],["APERSTripMine_Wire_Mag",1],["SmokeShellGreen",1],["SmokeShellBlue",1],["SmokeShellOrange",1],["Chemlight_green",2],["7Rnd_408_Mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["optic_LRPS"]],["handgunAttachments",["muzzle_snds_L"]]],"SNIPER"
	] call Zen_CreateLoadout;

	([_loadout1, _loadout2, _loadout3,_loadout4, _loadout5, _loadout6,_loadout7, _loadout8, _loadout9,_loadout10, _loadout11, _loadout12,_loadout13, _loadout14, _loadout15])
	
};

 

Will that be ok in MP?

Why while all loadouts are visible  only half of the list are selectable by mause click?

Player need to scroll the page down to get the others.

Looks like only half of the displayed dialog detect the mouse click

Share this post


Link to post
Share on other sites

I have tried all of them multiple times and here are the results:

    null = [_heli, _insertionPos, _reinf_grp] spawn Zen_OrderInsertion;
//    sometimes is not working - helicopter hover for ever at spawn

    null = [_heli, _insertionPos, _reinf_grp, 'normal', 40, 'land', true] spawn Zen_OrderInsertion;
//    sometimes is not working - helicopter hover for ever at spawn

    null = [_heli,_insertionPos, "full", 40, false, true] spawn Zen_OrderHelicopterLand;
//    sometimes is not working - helicopter hover for ever at spawn

    null = [_heli, _insertionPos, 'normal', 40, false, true] spawn Zen_OrderVehicleMove;
//    sometimes is not working - helicopter hover for ever at spawn

    null = [_heli, _reinf_grp] spawn Zen_OrderFastRope;
//    sometimes first AI stack in the ground and only his head is visible, other ais are not being roped, helicopter hover for ever
//    stacked AI are invulnerable

 

For everyone having issues with getting the AI to move, remember that the Zen_Orders functions just boil down to using 'addWaypoint' and/or 'move' in order to actually get the AI to do things. I am aware that using addWaypoint is noticeably less reliable that 'move'; however, I changed the orders functions so that they are compatible with the caching system ('move' doesn't create a valid cacheable waypoint).

The quickest fix to the AI not moving is to reinforce the Zen_Order command with your own move command; e.g.

0 = [_heli, _waypoint] spawn Zen_OrderVehicleMove;
_heli move _waypoint;

As long as the move command you give manually is the same as the one the function gives, there will be no conflict. For next release, I will put that duplicate 'move' into all the functions as a failsafe (such a thing seems impossible when dealing with this AI).

 

Anyway, could someone please show me how to use Zen cache system properly?

Need to cache units when no players/enemy near and un-cache if players/enemy nearby.

I have read the documentation but i do not understand fully how it works.

I'll give an example assuming that you have at least one of units which cache/uncache independently (a set being an arbitrary list of groups); this should maintain generality and let you decide what granularity you need. Keep in mind I can't test this (still don't have my computer set up and running ArmA, ETA about 1 week), so beware a few typos, but the general pattern is clear. I didn't include patrolling of any kind, as that is covered in the caching demonstration.

_cacheArray = [];

// define _unitSets in whatever way works for you
// I've left out any spawning in this example
{
    // we can start with the units either cached or uncached
    // for clarity I will cache them all at once
    _cacheArray pushBack ([_x] call Zen_Cache);
} forEach _unitSets;

while {true} do {
    sleep 10;

    _indexesToRemove = [];
    {
        // check if this set is dead
        if (({alive _x} count ([[_x] call Zen_GetCachedUnits] call Zen_ConvertToObjectArray)) == 0) then {
            _indexesToRemove pushBack _forEachIndex;
        } else {
            // this is the easiest way to get a position of the cached units to compare to
            _cachedPos = [([[_x] call Zen_GetCachedUnits] call Zen_ConvertToObjectArray)] call Zen_FindCenterPosition;

            // you must provide another position to check against based upon the players
            // _playerPos = ...

            _cached = [_x] call Zen_IsCached;
            // tweak the distance your liking
            if (_playerPos distance2D _cachedPos < 500) then {
                if (_cached) then {
                    0 = [_x] call Zen_UnCache;
                };
            } else {
                if !(_cached) then {
                    0 = [_x] call Zen_Cache;
                };
            };
        };
    } forEach _cacheArray;

    ZEN_FMW_Array_RemoveIndexes(_cacheArray, _indexesToRemove)
    if (count _cacheArray == 0) exitWith {};
}

 

Hey Zen,

you might want to update your functions to utilize some of the new script commands. There is quite a bit of performance to be gained there.

especially with the new

"array select expression"

and the "inArea" command.

Thanks, I try to keep up with the new scripting commands, but I am likely to miss a few. The inArea command will improve the performance of Zen_FindGroundPosition. If new BIS commands are significantly better (either in offering new functionality or speed), I generally replace the body of a function with them while keeping its parameters (e.g. nearestTerrainObjects for Zen_GetAmbientClutterCount).

 

After making more test i am 99% sure that the whole problem with hovering choppers are in Zen_MoveInVehicle.

I have more questions for example about loadout system in MP.

i have setup this as fallow

_data = [] call fnc_crate_loadout;

if (isServer) then {

	{

		null = [_x, _data, -1, true] call Zen_AddLoadoutDialog;

	} forEach (allMissionObjects "B_supplyCrate_F");

};
fnc_crate_loadout

fnc_crate_loadout = {

	//recon rifleman

	_loadout1 = [
	[["uniform","U_B_CombatUniform_mcam"],["vest","V_Chestrig_rgr"],["headgear","H_Booniehat_mcamo"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","ItemGPS","NVGoggles"]],["weapons",["arifle_MXM_DMS_LP_BI_snds_F","hgun_P07_snds_F","Rangefinder"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["MiniGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["muzzle_snds_H","acc_pointer_IR","optic_DMS","bipod_01_F_snd"]],["handgunAttachments",["muzzle_snds_L"]]],
	"RECON RIFLEMAN"
	] call Zen_CreateLoadout;


	//recon medic

	_loadout2 = [
	[["uniform","U_B_CombatUniform_mcam_tshirt"],["vest","V_Chestrig_rgr"],["backpack","B_AssaultPack_rgr_ReconMedic"],["headgear","H_HelmetB_light"],["goggles","G_Tactical_Clear"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","ItemGPS","NVGoggles"]],["weapons",["arifle_MXC_ACO_pointer_snds_F","hgun_P07_snds_F"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["MiniGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["SmokeShellRed",1],["SmokeShellBlue",1],["SmokeShellOrange",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",6],["Medikit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["muzzle_snds_H","acc_pointer_IR","optic_Aco"]],["handgunAttachments",["muzzle_snds_L"]]],
	"RECON MEDIC"
	] call Zen_CreateLoadout;
	//recon

	_loadout3 = [
	[["uniform","U_B_CombatUniform_mcam_vest"],["vest","V_Chestrig_rgr"],["headgear","H_Watchcap_camo"],["goggles","G_Tactical_Black"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","ItemGPS","NVGoggles"]],["weapons",["arifle_MX_ACO_pointer_snds_F","hgun_P07_snds_F","Binocular"]],["magazines",[["30Rnd_65x39_caseless_mag",9],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["MiniGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["muzzle_snds_H","acc_pointer_IR","optic_Aco"]],["handgunAttachments",["muzzle_snds_L"]]],
	"RECON"
	] call Zen_CreateLoadout;

	//recon miner

	_loadout4 = [
	[["uniform","U_B_CombatUniform_mcam_tshirt"],["vest","V_Chestrig_rgr"],["backpack","B_AssaultPack_rgr_ReconExp"],["headgear","H_Booniehat_mcamo"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","ItemGPS","NVGoggles"]],["weapons",["arifle_MX_ACO_pointer_snds_F","hgun_P07_snds_F"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["APERSMine_Range_Mag",3],["MiniGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["ClaymoreDirectionalMine_Remote_Mag",2],["APERSBoundingMine_Range_Mag",3],["DemoCharge_Remote_Mag",1],["SLAMDirectionalMine_Wire_Mag",2],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["MineDetector",1],["ToolKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["muzzle_snds_H","acc_pointer_IR","optic_Aco"]],["handgunAttachments",["muzzle_snds_L"]]],
	"RECON MINER"
	] call Zen_CreateLoadout;

	//rifleman sniper

	_loadout5 = [
	[["uniform","U_B_CombatUniform_mcam"],["vest","V_PlateCarrier1_rgr"],["headgear","H_HelmetB_grass"],["goggles","G_Combat"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MXM_Hamr_LP_BI_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",7],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["HandGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR","optic_Hamr","bipod_01_F_snd"]]],
	"SHARPSHOTER"
	] call Zen_CreateLoadout;


	//rifleman light

	_loadout6 = [
	[["uniform","U_B_CombatUniform_mcam_vest"],["vest","V_BandollierB_rgr"],["headgear","H_MilCap_mcamo"],["goggles","G_Combat"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_ACO_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["SmokeShell",1],["SmokeShellGreen",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["optic_Aco"]]],
	"RIFLEMAN LIGHT"
	] call Zen_CreateLoadout;

	//miner

	_loadout7 = [
	[["uniform","U_B_CombatUniform_mcam"],["vest","V_PlateCarrierGL_rgr"],["backpack","B_Kitbag_rgr_Exp"],["headgear","H_HelmetSpecB"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MXC_Holo_pointer_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["APERSMine_Range_Mag",3],["HandGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["APERSBoundingMine_Range_Mag",3],["ClaymoreDirectionalMine_Remote_Mag",2],["SLAMDirectionalMine_Wire_Mag",2],["DemoCharge_Remote_Mag",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["ToolKit",1],["MineDetector",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR","optic_Holosight"]]],
	"MINER"
	] call Zen_CreateLoadout;

	//mechanic

	_loadout8 = [
	[["uniform","U_B_CombatUniform_mcam"],["vest","V_PlateCarrier1_rgr"],["backpack","B_AssaultPack_rgr_Repair"],["headgear","H_HelmetB_light_sand"],["goggles","G_Tactical_Black"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_Holo_pointer_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["HandGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["SmokeShellBlue",1],["SmokeShellOrange",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["ToolKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR","optic_Holosight"]]],
	"MECHANIC"
	] call Zen_CreateLoadout;

	//ammo rkm

	_loadout9 = [
	[["uniform","U_B_CombatUniform_mcam_tshirt"],["vest","V_Chestrig_rgr"],["backpack","B_Kitbag_rgr_AAR"],["headgear","H_HelmetB_light"],["goggles","G_Tactical_Clear"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_ACO_pointer_F","hgun_P07_F","Rangefinder"]],["magazines",[["30Rnd_65x39_caseless_mag",7],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["HandGrenade",2],["B_IR_Grenade",2],["SmokeShell",1],["SmokeShellGreen",1],["100Rnd_65x39_caseless_mag",2],["100Rnd_65x39_caseless_mag_Tracer",2],["130Rnd_338_Mag",2],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["optic_tws_mg",1],["bipod_01_F_snd",1],["muzzle_snds_338_sand",1],["muzzle_snds_H_SW",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR","optic_Aco"]]],
	"AMMOBEARER RKM"
	] call Zen_CreateLoadout;

	//rifleman rkm

	_loadout10 = [
	[["uniform","U_B_CombatUniform_mcam_tshirt"],["vest","V_Chestrig_rgr"],["backpack","B_Kitbag_rgr_AAR"],["headgear","H_HelmetB_light"],["goggles","G_Tactical_Clear"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_ACO_pointer_F","hgun_P07_F","Rangefinder"]],["magazines",[["30Rnd_65x39_caseless_mag",7],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["HandGrenade",2],["B_IR_Grenade",2],["SmokeShell",1],["SmokeShellGreen",1],["100Rnd_65x39_caseless_mag",2],["100Rnd_65x39_caseless_mag_Tracer",2],["130Rnd_338_Mag",2],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["optic_tws_mg",1],["bipod_01_F_snd",1],["muzzle_snds_338_sand",1],["muzzle_snds_H_SW",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR","optic_Aco"]]],
	"RIFLEMAN RKM"
	] call Zen_CreateLoadout;

	//ammo

	_loadout11 = [
	[["uniform","U_B_CombatUniform_mcam"],["vest","V_PlateCarrier1_rgr"],["backpack","B_AssaultPack_mcamo_Ammo"],["headgear","H_HelmetB_grass"],["goggles","G_Aviator"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_ACO_pointer_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",17],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["HandGrenade",4],["SmokeShell",1],["SmokeShellGreen",1],["100Rnd_65x39_caseless_mag",1],["NLAW_F",1],["MiniGrenade",2],["1Rnd_HE_Grenade_shell",3],["3Rnd_HE_Grenade_shell",1],["10Rnd_338_Mag",2],["20Rnd_762x51_Mag",2],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",5],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR","optic_Aco"]]],
	"AMMOBEARER"
	] call Zen_CreateLoadout;

	//grenadier

	_loadout12 = [
	[["uniform","U_B_CombatUniform_mcam"],["vest","V_PlateCarrierGL_rgr"],["headgear","H_HelmetSpecB_blk"],["goggles","G_Combat"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_GL_ACO_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["1Rnd_HE_Grenade_shell",5],["HandGrenade",2],["MiniGrenade",2],["SmokeShell",1],["SmokeShellGreen",1],["1Rnd_Smoke_Grenade_shell",2],["1Rnd_SmokeBlue_Grenade_shell",1],["1Rnd_SmokeGreen_Grenade_shell",1],["1Rnd_SmokeOrange_Grenade_shell",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["optic_Aco"]]],
	"GRENADIER"
	] call Zen_CreateLoadout;

	//medic

	_loadout13 = [
	[["uniform","U_B_CombatUniform_mcam_tshirt"],["vest","V_PlateCarrierSpec_rgr"],["backpack","B_AssaultPack_rgr_Medic"],["headgear","H_HelmetB_light_desert"],["goggles","G_Combat"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_pointer_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",5],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["SmokeShell",1],["SmokeShellGreen",1],["SmokeShellBlue",1],["SmokeShellOrange",1],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",11],["Medikit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR"]]],
	"MEDIC"
	] call Zen_CreateLoadout;

	//rifleman

	_loadout14 = [
	[["uniform","U_B_CombatUniform_mcam"],["vest","V_PlateCarrier1_rgr"],["headgear","H_HelmetB"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","NVGoggles"]],["weapons",["arifle_MX_ACO_pointer_F","hgun_P07_F"]],["magazines",[["30Rnd_65x39_caseless_mag",9],["Chemlight_green",2],["16Rnd_9x21_Mag",2],["SmokeShell",1],["SmokeShellGreen",1],["HandGrenade",2],["30Rnd_65x39_caseless_mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["acc_pointer_IR","optic_Aco"]]],
	"RIFLEMAN"
	] call Zen_CreateLoadout;


	//sniper

	_loadout15 = [
	[["uniform","U_B_GhillieSuit"],["vest","V_Chestrig_rgr"],["assignedItems",["ItemMap","ItemCompass","ItemWatch","ItemRadio","ItemGPS","NVGoggles"]],["weapons",["srifle_LRR_camo_LRPS_F","hgun_P07_snds_F","Rangefinder"]],["magazines",[["7Rnd_408_Mag",5],["SmokeShell",1],["16Rnd_9x21_Mag",2],["ClaymoreDirectionalMine_Remote_Mag",1],["APERSTripMine_Wire_Mag",1],["SmokeShellGreen",1],["SmokeShellBlue",1],["SmokeShellOrange",1],["Chemlight_green",2],["7Rnd_408_Mag",1],["16Rnd_9x21_Mag",1]]],["items",[["FirstAidKit",1],["RyanZombiesAntiVirusCure_Item",3],["RyanZombiesAntiVirusTemporary_Item",3]]],["primaryAttachments",["optic_LRPS"]],["handgunAttachments",["muzzle_snds_L"]]],"SNIPER"
	] call Zen_CreateLoadout;

	([_loadout1, _loadout2, _loadout3,_loadout4, _loadout5, _loadout6,_loadout7, _loadout8, _loadout9,_loadout10, _loadout11, _loadout12,_loadout13, _loadout14, _loadout15])

};

Will that be ok in MP?

Why while all loadouts are visible only half of the list are selectable by mause click?

Player need to scroll the page down to get the others.

Looks like only half of the displayed dialog detect the mouse click

 

Zen_AddLoadoutDialog will propagate in MP, so clients will see the loadouts on the menu. The loadouts will work for any machine since Zen_CreateLoadout also propagates data, as long as it is run after the 'sleep' command in the init (same for any MP synch'ing).

I am aware of the dialog list issue and it's one of the two known issues that I cannot fix (nor do I see a fix being possible any time in the future). It it a result of the dialog being created dynamically and without a config class; there is no scripting command to control the expected length of a list. I agree that it's annoying, but it doesn't hinder functionality.

Share this post


Link to post
Share on other sites

Yes dialog  is not big problem.

About the caching system this is really great but driving me crazy because

the units in operation area dynamically changes and i need to define it at each run.

 

Here is  how i do that:

 

fnc_cache_loop = {
	
		params ["_marker"];
		private ["_players", "_westNear", "_guard", "_group", "_id"];
				
		while {true} do {


			waitUntil {
			
				sleep 10;
				_players = (playableUnits + switchableUnits);
				private _zedsarray = [allUnits, {!((faction _this) == "Ryanzombiesfactionopfor")}] call Zen_ArrayFilterCondition;
				private _playersarray = [allUnits, {!(_this in _players)}] call Zen_ArrayFilterCondition;
				private _triggersarray = _zedsarray + _playersarray;
				([_triggersarray, (getMarkerPos _marker), [300,300], 360, "ellipse"] call Zen_AreNotInArea)
				
			};
			
			//no players in range
			_westNear = [_marker, [200,200],360,"ellipse",[],WEST] call Zen_GetAllInArea;		
			_guard = [_westNear,{_this in _players || 0 != {isplayer _x} count (units (group _this))}] call Zen_ArrayFilterCondition;
			sleep 2;
			_group = createGroup WEST;
			_guard joinSilent _group;			
			_id = [_group] call Zen_Cache;
			
			//player commandChat str ([_id] call Zen_IsCached);
			//player commandChat str ([_id] call Zen_GetCachedUnits);

			waitUntil {
			
				sleep 10;
				_players = (playableUnits + switchableUnits);
				private _zedsarray = [allUnits, {!((faction _this) == "Ryanzombiesfactionopfor")}] call Zen_ArrayFilterCondition;
				private _playersarray = [allUnits, {!(_this in _players)}] call Zen_ArrayFilterCondition;
				private _triggersarray = _zedsarray + _playersarray;
				!([_triggersarray, (getMarkerPos _marker), [300,300], 360, "ellipse"] call Zen_AreNotInArea)
			};
			

			//players in range
			null = [_id] call Zen_UnCache;
			
			//player commandChat str ([_id] call Zen_IsCached);
			//player commandChat str ([_id] call Zen_GetCachedUnits);

			sleep 2;
			_westNear = [_marker, [200,200],360,"ellipse",[],WEST] call Zen_GetAllInArea;		
			_guard = [_westNear,{_this in _players || 0 != {isplayer _x} count (units (group _this))}] call Zen_ArrayFilterCondition;
			_group = createGroup WEST;
			_guard joinSilent _group;
			sleep 2;
			null = [_group, _marker, 50, 2, false] call CBA_fnc_taskDefend;

	
		};
	
	};

 

This works somehow but there are at least one problem.

 

If the player die and all enemies , player respawn on the base and  on the same time a reinforcement group comes  there

they will never get cached because there are no such condition to break the waituntil. Someone need  go

 there un-cache the cached (if any) and when go away they all get cached again.

 

We have tried to rewrite this  here  but this is given others problems.

 

Anyway i am really grateful for this framework because i have found there almost all i can handle.

 

Thanks

Share this post


Link to post
Share on other sites

I think your issue arises in part from your script looking from the perspective of the player; you are looping through checks for the players and then looking for units to cache. My code is looping through units to cache and checking if each one is near the players.

The second part of your issue is that the waitUntil loops prevent you from generalizing the script to deal with multiple sets of cached units and multiple areas that the players could be in. You could try keeping the perspective of the players, but instead of waiting for them to fulfill a condition, loop through the conditions (i.e. areas) that players can meet without waitUntil's and cache/uncache according to what the code finds. In that case, the script can cache/uncache in a timed cycle without getting stuck.

In the part of my code where I say to get a position for the players (lines 23 and 24), you can replace the logic that compares two positions with code that checks for all players being in an area, as you already use in your waitUntil loops.

            _cachedPos = [([[_x] call Zen_GetCachedUnits] call Zen_ConvertToObjectArray)] call Zen_FindCenterPosition;

            // instead provide a list of players
            // _playerArray = ...

            _cached = [_x] call Zen_IsCached;
            // or use an area marker that's either placed or spawned            
            if !([_playerArray, _cachedPos, [500, 500], 0, "ellipse"] call Zen_AreNotInArea) then {
            // ...

Now you are left with determining how accurate _cachedPos really is depending upon how many units you've cached under each identifier. The more sets of units you cache seperately, the more accuracy you will have with caching/uncaching them, but you lose performance because the script must cycle through many identifiers.

In the case of respawn, you can supply the list of players as a global array, which you can update as players die/respawn using EH's.

Share this post


Link to post
Share on other sites

Thank you Zenophon.

 

Unfortunately i am unable to use your code as it overrun my knowledge.

 

The circumstances of such switch are unpredictable and complicated.

 

The situation is as fallows:

 

there is a marker
couple of blufor units around
there will enemy opfor attack 3 times.

there also players objective as well
the fight begin if any player arrives

defenders are all blufor units in range 200m controlled by server

if count of defenders units < 4 they will call for reinforcement
bunch of blufor units comes with a chopper
joining  the fight

and what i need here is

 cache the defenders in some circumstances as fallows

  no any unit from players groups near (this include players as well)
  no enemy near

and un-cache if

enemy near
any unit from players groups near (including players)
other friendlies in area  (not from players groups) more as at last run

Because there is a catch, if in battle result all players die and all enemy die and reinforce on the way,

the defenders left get cached.

 

But this should  wait somehow until reinforce chopper ends his route then cache all blue in range 200 from marker

 

Such places/markers are 4.

 

There also others problems like if there is line-of-see between outpost (about 460m), sometimes cached units prefer to run between

instead of stay on place where cached or something else causing this ()

and i am sure that there also more fail situations which i do not have predicted so far

 

I tried many different code to achieve this  and for now I use this:

 

	fnc_cache_loop = {
		
	params ["_marker"];
	private ["_fnc_check", "_tocache", "_defgroup"];

		_fnc_check = {

			private ["_playerGroups", "_players", "_allinside", "_enemyinside", "_guardinside", "_playersinside"];
			
			_playerGroups = [];
			_players = playableUnits + switchableUnits; 
			{_playerGroups pushBackUnique (group _x)} forEach _players;
			_allinside = allUnits select {alive _x && _x inArea [getMarkerPos _marker, 350, 350, 0, false]};
			_enemyinside = _allinside select {side _x == EAST};
			_guardinside = _allinside select {side _x == WEST && !(group _x in _playerGroups)};
			_playersinside = _allinside select {(group _x in _playerGroups)};

			([((count _enemyinside) isEqualTo 0 && (count _playersinside) isEqualTo 0 && (count _guardinside) > 0), _guardinside])
		};


		while {true} do {


			waitUntil {sleep 10; (call _fnc_check) select 0  && !(missionNamespace getVariable format ["reinforce_%1",markerText _marker])}; // no enemy/players near && no reinforce

			_tocache = (call _fnc_check) select 1;
			_defgroup = group (selectRandom _tocache);
			_tocache joinSilent _defgroup;
			{_x disableAI "MOVE"} forEach _tocache;
			_id = [_defgroup] call Zen_Cache;
//		player commandChat format ["%1: %2",str (markerText _marker),str ([_id] call Zen_IsCached)];
//		player commandChat str ([_id] call Zen_GetCachedUnits);


			waitUntil {sleep 10; !((call _fnc_check) select 0) || (missionNamespace getVariable format ["reinforce_%1",markerText _marker])}; // enemy/players near || reinforce

			null = [_id] call Zen_UnCache;
//		player commandChat format ["%1: %2",str (markerText _marker),str ([_id] call Zen_IsCached)];
//		player commandChat str ([_id] call Zen_GetCachedUnits);

			sleep 2;
			{_x enableAI "MOVE"} forEach _tocache;
			_tocache = (call _fnc_check) select 1;
			_defgroup = group (selectRandom _tocache);
			_tocache joinSilent _defgroup;
			sleep 2;
			null = [_defgroup, _marker, 50, 2, false] call CBA_fnc_taskDefend;
		};
		
	};

i knew,  not perfect but works.

Share this post


Link to post
Share on other sites

Hi Zen.
 
Two problems:
 
1:
Have the tasks not persistent for JIP.  Are i am doing something wrong or it is supposed to works like that?

		if (isServer) then {

                     _taskname = format ["reach_%1", markerText _oa];

                       if !([_taskname] call BIS_fnc_taskExists) then {
		
			_task = [

						WEST,
						format ["Outpost %1 are under attack. Reach the outpost and hold the area for any cost", markerText _oa],
						format ["Hold the outpost %1", markerText _oa],
						_oa,
						false,
						"",	
						_taskname
			 
					] call Zen_InvokeTask;
			sleep 2;		
			null = [_task, "created"] call  Zen_UpdateTask;			
		};
               //after task goal reached
               null = [_task, "succeeded"] call  Zen_UpdateTask;

             };

Player can see the task only if  connected to the server while  task being  created. If after player disconnect and come back the task is gone.
The same for join in progress players.

2:
 

Zen_AddLoadoutDialog will propagate in MP, so clients will see the loadouts on the menu.
The loadouts will work for any machine since Zen_CreateLoadout also propagates data,
as long as it is run after the 'sleep' command in the init (same for any MP synch'ing).


Part of init.sqf

private _data = [] call fnc_crate_loadout;


if (isServer) then {

	{

		null = [_x, _data, -1, true] call Zen_AddLoadoutDialog;

	} forEach (allMissionObjects "B_supplyCrate_F");

};

The Loadout actions are visible only in SP.

Share this post


Link to post
Share on other sites

Thank you Zenophon.

Unfortunately i am unable to use your code as it overrun my knowledge.

The circumstances of such switch are unpredictable and complicated.

The situation is as fallows:

there is a marker

couple of blufor units around

there will enemy opfor attack 3 times.

there also players objective as well

the fight begin if any player arrives

defenders are all blufor units in range 200m controlled by server

if count of defenders units < 4 they will call for reinforcement

bunch of blufor units comes with a chopper

joining the fight

and what i need here is

cache the defenders in some circumstances as fallows

no any unit from players groups near (this include players as well)

no enemy near

and un-cache if

enemy near

any unit from players groups near (including players)

other friendlies in area (not from players groups) more as at last run

Because there is a catch, if in battle result all players die and all enemy die and reinforce on the way,

the defenders left get cached.

But this should wait somehow until reinforce chopper ends his route then cache all blue in range 200 from marker

Such places/markers are 4.

There also others problems like if there is line-of-see between outpost (about 460m), sometimes cached units prefer to run between

instead of stay on place where cached or something else causing this ()

and i am sure that there also more fail situations which i do not have predicted so far

I tried many different code to achieve this and for now I use this:

	fnc_cache_loop = {
    params ["_marker"];
    private ["_fnc_check", "_tocache", "_defgroup"];

        _fnc_check = {

            private ["_playerGroups", "_players", "_allinside", "_enemyinside", "_guardinside", "_playersinside"];

            _playerGroups = [];
            _players = playableUnits + switchableUnits;
            {_playerGroups pushBackUnique (group _x)} forEach _players;,
            _allinside = allUnits select {alive _x && _x inArea [getMarkerPos _marker, 350, 350, 0, false]};
            _enemyinside = _allinside select {side _x == EAST};
            _guardinside = _allinside select {side _x == WEST && !(group _x in _playerGroups)};
            _playersinside = _allinside select {(group _x in _playerGroups)};

            ([((count _enemyinside) isEqualTo 0 && (count _playersinside) isEqualTo 0 && (count _guardinside) > 0), _guardinside])
        };

        while {true} do {
            waitUntil {sleep 10; (call _fnc_check) select 0  && !(missionNamespace getVariable format ["reinforce_%1",markerText _marker])}; // no enemy/players near && no reinforce

            _tocache = (call _fnc_check) select 1;
            _defgroup = group (selectRandom _tocache);
            _tocache joinSilent _defgroup;
            {_x disableAI "MOVE"} forEach _tocache;
            _id = [_defgroup] call Zen_Cache;
//		player commandChat format ["%1: %2",str (markerText _marker),str ([_id] call Zen_IsCached)];
//		player commandChat str ([_id] call Zen_GetCachedUnits);


            waitUntil {sleep 10; !((call _fnc_check) select 0) || (missionNamespace getVariable format ["reinforce_%1",markerText _marker])}; // enemy/players near || reinforce

            null = [_id] call Zen_UnCache;
//		player commandChat format ["%1: %2",str (markerText _marker),str ([_id] call Zen_IsCached)];
//		player commandChat str ([_id] call Zen_GetCachedUnits);

            sleep 2;
            {_x enableAI "MOVE"} forEach _tocache;
            _tocache = (call _fnc_check) select 1;
            _defgroup = group (selectRandom _tocache);
            _tocache joinSilent _defgroup;
            sleep 2;
            null = [_defgroup, _marker, 50, 2, false] call CBA_fnc_taskDefend;
        };

    };

i knew, not perfect but works.

Cached units should not be moving on their own; using enableSimulationGlobal freezes them very completely. I don't know the specifics of CBA_fnc_taskDefend, but I would advise against using any patrol function if you are not manually terminating its thread when you cache the units this is more than likely how the units seem to be moving. Also, enableAI/disableAI are unnecessary, as the caching system doesn't alter those settings. The joining of groups and the distinction between _tocache and _defgroup seem strange to me; I'm not sure what the purpose is.

Another thing to note about the caching system is that calling Zen_Cache with the units as arguments will create a new cached identifier. Thus, although the variable in the script is reassigned, the caching system retains the data for the identifier internally; because the identifiers are just strings, the caching system cannot determine that no more variables hold the value and garbage collect the internal data. It is more efficient to use '[_id] call Zen_Cache' to recache the units.

The function you posted is operating on one marker, which is fine for just a few markers. As an example for you or anyone else reading this, I'll post how I would code the logic you describe for multiple markers. As always there may be a few typos, but I labeled each part of the logic so that the intent is clear.

_cacheIds = [];
_reinforcementFlags = [];
_reinforcementGroups = [];
_patrolThreads = [];

// Put all the markers into an array
_markers = [...];

// For brevity, assume there exists a function that sends
// reinforcements to a given marker and returns the group it spawns
F_SendReinforcements = {...};

// Init the cache id's and other arrays
_blufor = [west] call Zen_ConvertToObjectArray;
{
    _defenders = [_blufor, compile format ["!(_this in %1)", _x]] call Zen_ArrayFilterCondition;
    _cacheIds pushBack ([_defenders] call Zen_Cache);
    _reinforcementFlags pushBack false;
    _reinforcementGroups pushBack grpNull;
    _patrolThreads pushBack scriptNull;
} forEach _markers;

// the main loop begins with all defenders cached
while {true} do {
    {
        // divide the sleep commands between markers, to split the computations more evenly over a cycle
        // this helps prevent sudden performance drops if there were e.g. 50 markers
        // it also automatically increases the check frequency when there are fewer markers, providing better response time
        sleep 2;
        _index = _forEachIndex;

        // if reinforcements are enroute, the units cannot be cached
        if (_reinforcementFlags select _forEachIndex) then {

            // instead check for those reinforcements arriving
            if (({_x inArea (_markers select _index)} count units (_reinforcementGroups select _forEachIndex)) == (count units (_reinforcementGroups select _forEachIndex))) then {
                _reinforcementFlags set [_forEachIndex, false];
            };
        } else {

            // if the units are already cached, they cannot have suffered casualties since the last check
            // thus, we only need to determine if they must be uncached
            if ([_x] call Zen_IsCached) then {
                _players = ([getMarkerPos (_markers select _forEachIndex), [350, 350], 0, "ellipse", [], east] call Zen_GetAllInArea) select {isPlayer _x};
                _opfor = [getMarkerPos (_markers select _forEachIndex), [350, 350], 0, "ellipse", [], east] call Zen_GetAllInArea;

                if (count _players > 0 || {count _opfor > 0}) then {
                    0 = [_id] call Zen_UnCache;

                    // a slight misnomer, as this works for uncached units as well
                    _units = [_x] call Zen_GetCachedUnits;

                    // here you can apply any orders to the uncached AI
                    _patrolThreads set [_forEachIndex, ([_units, _markers select _forEachIndex, [], 0, "normal", "aware", false] spawn Zen_OrderInfantryPatrol)];
                };
            } else {

                // if the units are uncached, check for the need of reinforcements
                _defenders = [(_markers select _forEachIndex), [], west] call Zen_GetAllInArea;

                if (count _defenders < 4) then {
                    // assign the reinforcements to the arrays
                    _reinforcementGroups set [_forEachIndex, ([_markers select _forEachIndex] call F_SendReinforcements)];
                    _reinforcementFlags set [_forEachIndex, true];
                } else {

                    // if no reinforcements are enroute, check if the units should be cached
                    if !(_reinforcementFlags select _forEachIndex) then {
                        _opfor = [getMarkerPos (_markers select _forEachIndex), [350, 350], 0, "ellipse", [], east] call Zen_GetAllInArea;

                        if (count _opfor == 0) then {

                            // nest this for a small performance gain
                            _players = ([getMarkerPos (_markers select _forEachIndex), [350, 350], 0, "ellipse", [], east] call Zen_GetAllInArea) select {isPlayer _x};

                            if (count _players == 0) then {

                                // end the patrol and cache the units
                                terminate (_patrolThreads select _forEachIndex);
                                0 = [_x] call Zen_Cache;
                            };
                        };
                    };
                };
            };
        };
    } forEach _cacheIds;
};

Share this post


Link to post
Share on other sites

Oh many thanks looks beautiful.

The reinforce function is being called from different function but it can be move here.

In that case need to find a way to allow only one reinforce at the time

 

Tried this but bad stuff happen.

 

	fnc_cache_loop = {
		
		_cacheIds = [];
		_reinforcementFlags = [];
		_reinforcementGroups = [];
		_patrolThreads = [];
		 
		// Put all the markers into an array
		_markers = ["outpost1_1","outpost1_2","outpost1_3","outpost1_4"];
		 
		// For brevity, assume there exists a function that sends
		// reinforcements to a given marker and returns the group it spawns
		
			_F_SendReinforcements = {	
				
				params ["_ao"];
				
				missionNamespace setVariable [format ["reinforce_%1",markerText _ao], true, false];
				
				private _hspawnPos = ["mkReinfSpawn", [0, 200], [], 1] call Zen_FindGroundPosition;
				private _insertionPos = [_ao, [40, 120], [], 1, [2,100],[250,370,'compass']] call Zen_FindGroundPosition; 

				private _heli = [_hspawnPos,[
						
					"B_Heli_Transport_03_unarmed_F",
					"B_Heli_Transport_01_F",
					"B_Heli_Transport_01_camo_F",
					"B_CTRG_Heli_Transport_01_sand_F",
					"B_CTRG_Heli_Transport_01_tropic_F"
							
				],40,90] call Zen_SpawnHelicopter;
				
				null = [_heli, _ao] spawn {
				
					waitUntil {sleep 10; !(alive (_this select 0)) || (isNull (_this select 0))};
					missionNamespace setVariable [format ["reinforce_%1",markerText (_this select 1)], false, false];

				};				
												
				private _gsits = [_heli, ['All']] call Zen_GetFreeSeats;
				private _sitscnt = count (_gsits select 2);
						
				private _reinf_grp = [_hspawnPos, WEST, "Infantry", _sitscnt, "Men", "BLU_F", [
						
							//blacklisted
							"B_soldier_UAV_F","B_soldier_PG_F","B_soldier_AA_F","B_soldier_AT_F","B_soldier_LAT_F","B_CTRG_soldier_GL_LAT_F","B_diver_F","B_diver_TL_F",
							"B_diver_exp_F","B_spotter_F","B_sniper_F","B_ghillie_sard_F","B_ghillie_ard_F","B_ghillie_lsh_F","B_recon_LAT_F","B_Protagonist_VR_F","B_Soldier_VR_F"

				],"All"] call Zen_SpawnInfantry;
						
				sleep 2;

				{
							_x assignAsCargo _heli;
							_x moveInCargo _heli;
							
				} foreach (units _reinf_grp);
						
				sleep 2;
							
				null = [_heli, _insertionPos, 10, "MOVE", "CARELESS", "GREEN", "FULL", "COLUMN",
				
					"
						(vehicle this) land 'LAND'

					"
					
				] call CBA_fnc_addWaypoint;
						
						
				private _heliPad = "Land_HelipadEmpty_F" createVehicle _insertionPos;

				waitUntil {sleep 5; ((getPos _heli) select 2) < 2};
						
					if (alive _heli) then {

						_reinf_grp leaveVehicle _heli;
							
						waitUntil {sleep 5; ([_reinf_grp, _heli]) call Zen_AreNotInVehicle};
						
							if (({alive _x} count (units _reinf_grp)) > 0) then {
										
								_wp = [_reinf_grp, _ao, 10, "MOVE", "AWARE", "WHITE", "FULL", "COLUMN",
								"",[0,0,0],5] call CBA_fnc_addWaypoint;
							};
							
						sleep 5;
						
						null = [_heli, _hspawnPos, 10, "MOVE", "CARELESS", "GREEN", "FULL", "COLUMN",
						
							"

								deleteVehicle (vehicle this);
								{deleteVehicle _x;} forEach thislist

							"
						] call CBA_fnc_addWaypoint;

					};
						
				deleteVehicle _heliPad;
				
				(_reinf_grp)
			};
		 
		// Init the cache id's and other arrays
		_blufor = [west] call Zen_ConvertToObjectArray;
		{
			_defenders = [_blufor, compile format ["!(_this in %1)", _x]] call Zen_ArrayFilterCondition;
			_cacheIds pushBack ([_defenders] call Zen_Cache);
			_reinforcementFlags pushBack false;
			_reinforcementGroups pushBack grpNull;
			_patrolThreads pushBack scriptNull;
		} forEach _markers;
		 
		// the main loop begins with all defenders cached
		while {true} do {
			{
				// divide the sleep commands between markers, to split the computations more evenly over a cycle
				// this helps prevent sudden performance drops if there were e.g. 50 markers
				// it also automatically increases the check frequency when there are fewer markers, providing better response time
				sleep 2;
				_index = _forEachIndex;
		 
				// if reinforcements are enroute, the units cannot be cached
				if (_reinforcementFlags select _forEachIndex) then {
		 
					// instead check for those reinforcements arriving
					if (({_x inArea (_markers select _index)} count units (_reinforcementGroups select _forEachIndex)) == (count units (_reinforcementGroups select _forEachIndex))) then {
						_reinforcementFlags set [_forEachIndex, false];
					};
				} else {
		 
					// if the units are already cached, they cannot have suffered casualties since the last check
					// thus, we only need to determine if they must be uncached
					if ([_x] call Zen_IsCached) then {
						_players = ([getMarkerPos (_markers select _forEachIndex), [350, 350], 0, "ellipse", [], west] call Zen_GetAllInArea) select {isPlayer _x};
						_opfor = [getMarkerPos (_markers select _forEachIndex), [350, 350], 0, "ellipse", [], east] call Zen_GetAllInArea;
		 
						if (count _players > 0 || {count _opfor > 0}) then {
							0 = [_id] call Zen_UnCache;
		 
							// a slight misnomer, as this works for uncached units as well
							_units = [_x] call Zen_GetCachedUnits;
		 
							// here you can apply any orders to the uncached AI
							_patrolThreads set [_forEachIndex, ([_units, _markers select _forEachIndex, [], 0, "normal", "aware", false] spawn Zen_OrderInfantryPatrol)];
						};
					} else {
		 
						// if the units are uncached, check for the need of reinforcements
						_defenders = [(_markers select _forEachIndex), [], west] call Zen_GetAllInArea;
		 
						if (count _defenders < 4) then {
							// assign the reinforcements to the arrays
							_reinforcementGroups set [_forEachIndex, ([_markers select _forEachIndex] call _F_SendReinforcements)];
							_reinforcementFlags set [_forEachIndex, true];
						} else {
		 
							// if no reinforcements are enroute, check if the units should be cached
							if !(_reinforcementFlags select _forEachIndex) then {
								_opfor = [getMarkerPos (_markers select _forEachIndex), [350, 350], 0, "ellipse", [], east] call Zen_GetAllInArea;
		 
								if (count _opfor == 0) then {
		 
									// nest this for a small performance gain
									_players = ([getMarkerPos (_markers select _forEachIndex), [350, 350], 0, "ellipse", [], west] call Zen_GetAllInArea) select {isPlayer _x};
		 
									if (count _players == 0) then {
		 
										// end the patrol and cache the units
										terminate (_patrolThreads select _forEachIndex);
										0 = [_x] call Zen_Cache;
									};
								};
							};
						};
					};
				};
			} forEach _cacheIds;
		};	
	};

 

14:22:07  Mission directory: C:\Users\DaVidoSS\Documents\Arma 3\missions\contamination_zone2.Altis\
14:22:07 EPE manager release (66|155|0)
14:22:07 Number of actors in scene after release: 66
14:22:07 EPE manager release (0|66|0)
14:22:10 Attempt to override final function - bis_functions_list
14:22:10 Attempt to override final function - bis_functions_listpreinit
14:22:10 Attempt to override final function - bis_functions_listpostinit
14:22:10 Attempt to override final function - bis_functions_listrecompile
14:22:10 Attempt to override final function - bis_fnc_missiontaskslocal
14:22:10 Attempt to override final function - bis_fnc_missionconversationslocal
14:22:10 Attempt to override final function - bis_fnc_missionflow
14:22:10 [139737,3521.7,0,"XEH: PreInit started. v3.0.0.160713"]
14:22:10 [139737,3521.99,0,"XEH: PreInit finished."]
14:22:13 soldier[B_soldier_AR_F]:Some of magazines weren't stored in soldier Vest or Uniform?
14:22:13 soldier[B_soldier_AR_F]:Some of magazines weren't stored in soldier Vest or Uniform?
14:22:14 Save game type
14:22:16  Mission id: ecbbd42d556de8d3534729f4c258448278778874
14:22:18 [139781,3529.58,0,"XEH: PostInit started. MISSIONINIT: missionName=contamination_zone2, missionVersion=52, worldName=Altis, isMultiplayer=false, isServer=true, isDedicated=false, CBA_isHeadlessClient=false, hasInterface=true, didJIP=false isLinux=false"]
14:22:18 [139781,3529.62,0,"CBA_VERSIONING: cba=3.0.0.160713, "]
14:22:18 [139781,3529.63,0,"XEH: PostInit finished."]
14:22:22 soldier[B_soldier_AR_F]:Some of magazines weren't stored in soldier Vest or Uniform?
14:22:22 soldier[B_soldier_AR_F]:Some of magazines weren't stored in soldier Vest or Uniform?
14:22:23 soldier[B_HeavyGunner_F]:Some of magazines weren't stored in soldier Vest or Uniform?
14:22:23 soldier[B_HeavyGunner_F]:Some of magazines weren't stored in soldier Vest or Uniform?
14:22:23 soldier[B_soldier_AR_F]:Some of magazines weren't stored in soldier Vest or Uniform?
14:22:29 Error in expression <!(_this in outpost1_1)>
14:22:29   Error position: <outpost1_1)>
14:22:29   Error Undefined variable in expression: outpost1_1
14:22:29 "-- Zen_ArrayFilterCondition Error --"
14:22:29 "Given condition does not resolve to a boolean"
14:22:29 5.918
14:22:29 [[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_1)}]
14:22:29 ["Zen_ArrayFilterCondition",[[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_1)}],5.918]
14:22:30 Error in expression <!(_this in outpost1_1)>
14:22:30   Error position: <outpost1_1)>
14:22:30   Error Undefined variable in expression: outpost1_1
14:22:30 "-- Zen_ArrayFilterCondition Error --"
14:22:30 "Given condition does not resolve to a boolean"
14:22:30 6.693
14:22:30 [[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_1)}]
14:22:30 ["Zen_ArrayFilterCondition",[[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_1)}],6.693]
14:22:30 "-- Zen_Cache Error --"
14:22:30 "No cacheable units given"
14:22:30 6.693
14:22:30 [[]]
14:22:30 ["Zen_Cache",[[]],6.693]
14:22:30 Error in expression <!(_this in outpost1_2)>
14:22:30   Error position: <outpost1_2)>
14:22:30   Error Undefined variable in expression: outpost1_2
14:22:30 "-- Zen_ArrayFilterCondition Error --"
14:22:30 "Given condition does not resolve to a boolean"
14:22:30 6.693
14:22:30 [[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_2)}]
14:22:30 Error in expression <!(_this in outpost1_1)>
14:22:30   Error position: <outpost1_1)>
14:22:30   Error Undefined variable in expression: outpost1_1
14:22:30 "-- Zen_ArrayFilterCondition Error --"
14:22:30 "Given condition does not resolve to a boolean"
14:22:30 6.714
14:22:30 Error in expression <!(_this in outpost1_1)>
14:22:30   Error position: <outpost1_1)>
14:22:30   Error Undefined variable in expression: outpost1_1
14:22:30 "-- Zen_ArrayFilterCondition Error --"
14:22:30 "Given condition does not resolve to a boolean"
14:22:30 6.734
14:22:30 [[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_1)}]
14:22:30 ["Zen_ArrayFilterCondition",[[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_1)}],6.631]
14:22:30 "-- Zen_Cache Error --"
14:22:30 "No cacheable units given"
14:22:30 6.734
14:22:30 ["Zen_ArrayFilterCondition",[[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_2)}],6.693]
14:22:30 "-- Zen_Cache Error --"
14:22:30 "No cacheable units given"
14:22:30 6.803
14:22:30 [[]]
14:22:30 ["Zen_Cache",[[]],6.803]
14:22:30 Error in expression <!(_this in outpost1_3)>
14:22:30   Error position: <outpost1_3)>
14:22:30   Error Undefined variable in expression: outpost1_3
14:22:30 "-- Zen_ArrayFilterCondition Error --"
14:22:30 "Given condition does not resolve to a boolean"
14:22:30 6.803
14:22:30 [[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_3)}]
14:22:30 ["Zen_ArrayFilterCondition",[[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_3)}],6.803]
14:22:30 [[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_1)}]
14:22:30 ["Zen_ArrayFilterCondition",[[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_1)}],6.714]
14:22:30 "-- Zen_Cache Error --"
14:22:30 "No cacheable units given"
14:22:30 6.823
14:22:30 [[]]
14:22:30 ["Zen_Cache",[[]],6.823]
14:22:30 Error in expression <!(_this in outpost1_2)>
14:22:30   Error position: <outpost1_2)>
14:22:30   Error Undefined variable in expression: outpost1_2
14:22:30 "-- Zen_ArrayFilterCondition Error --"
14:22:30 "Given condition does not resolve to a boolean"
14:22:30 6.823
14:22:30 [[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_2)}]
14:22:30 [[]]
14:22:30 ["Zen_Cache",[[]],6.734]
14:22:30 Error in expression <!(_this in outpost1_2)>
14:22:30   Error position: <outpost1_2)>
14:22:30   Error Undefined variable in expression: outpost1_2
14:22:30 "-- Zen_ArrayFilterCondition Error --"
14:22:30 "Given condition does not resolve to a boolean"
14:22:30 6.843
14:22:30 [[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_2)}]
14:22:30 ["Zen_ArrayFilterCondition",[[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_2)}],6.843]
14:22:30 "-- Zen_Cache Error --"
14:22:30 "No cacheable units given"
14:22:30 6.843
14:22:30 [[]]
14:22:30 ["Zen_Cache",[[]],6.843]
14:22:30 Error in expression <!(_this in outpost1_3)>
14:22:30   Error position: <outpost1_3)>
14:22:30   Error Undefined variable in expression: outpost1_3
14:22:30 "-- Zen_ArrayFilterCondition Error --"
14:22:30 "Given condition does not resolve to a boolean"
14:22:30 6.843
14:22:30 [[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_3)}]
14:22:30 "-- Zen_Cache Error --"
14:22:30 "No cacheable units given"
14:22:30 6.903
14:22:30 [[]]
14:22:30 ["Zen_Cache",[[]],6.803]
14:22:30 Error in expression <!(_this in outpost1_4)>
14:22:30   Error position: <outpost1_4)>
14:22:30   Error Undefined variable in expression: outpost1_4
14:22:30 "-- Zen_ArrayFilterCondition Error --"
14:22:30 "Given condition does not resolve to a boolean"
14:22:30 6.903
14:22:30 [[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_4)}]
14:22:30 ["Zen_ArrayFilterCondition",[[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_4)}],6.903]
14:22:30 ["Zen_ArrayFilterCondition",[[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_2)}],6.823]
14:22:30 "-- Zen_Cache Error --"
14:22:30 "No cacheable units given"
14:22:30 6.922
14:22:30 [[]]
14:22:30 ["Zen_Cache",[[]],6.922]
14:22:30 Error in expression <!(_this in outpost1_3)>
14:22:30   Error position: <outpost1_3)>
14:22:30   Error Undefined variable in expression: outpost1_3
14:22:30 "-- Zen_ArrayFilterCondition Error --"
14:22:30 "Given condition does not resolve to a boolean"
14:22:30 6.922
14:22:30 [[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_3)}]
14:22:30 ["Zen_ArrayFilterCondition",[[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_3)}],6.922]
14:22:30 ["Zen_ArrayFilterCondition",[[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_3)}],6.843]
14:22:30 "-- Zen_Cache Error --"
14:22:30 "No cacheable units given"
14:22:30 6.942
14:22:30 [[]]
14:22:30 ["Zen_Cache",[[]],6.942]
14:22:30 Error in expression <!(_this in outpost1_4)>
14:22:30   Error position: <outpost1_4)>
14:22:30   Error Undefined variable in expression: outpost1_4
14:22:30 "-- Zen_ArrayFilterCondition Error --"
14:22:30 "Given condition does not resolve to a boolean"
14:22:30 6.942
14:22:30 [[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_4)}]
14:22:31 "-- Zen_Cache Error --"
14:22:31 "No cacheable units given"
14:22:31 7.007
14:22:31 [[]]
14:22:31 ["Zen_Cache",[[]],6.903]
14:22:31 "-- Zen_Cache Error --"
14:22:31 "No cacheable units given"
14:22:31 7.007
14:22:31 [[]]
14:22:31 ["Zen_Cache",[[]],6.922]
14:22:31 Error in expression <!(_this in outpost1_4)>
14:22:31   Error position: <outpost1_4)>
14:22:31   Error Undefined variable in expression: outpost1_4
14:22:31 "-- Zen_ArrayFilterCondition Error --"
14:22:31 "Given condition does not resolve to a boolean"
14:22:31 7.007
14:22:31 [[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_4)}]
14:22:31 ["Zen_ArrayFilterCondition",[[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_4)}],7.007]
14:22:31 ["Zen_ArrayFilterCondition",[[B Alpha 1-1:1 (DaVidoSS),B Alpha 1-1:2,B Alpha 1-1:3,B Alpha 1-1:4,B Alpha 1-1:5,B Alpha 1-1:6,B Alpha 1-1:7,B Alpha 1-2:1,B Alpha 1-2:2,B Alpha 1-2:3,B Alpha 1-2:4,B Alpha 1-2:5,B Alpha 1-2:6,B Alpha 1-2:7,B Alpha 1-3:1,B Alpha 1-3:2,B Alpha 1-3:3,B Alpha 1-3:4,B Alpha 1-3:5,B Alpha 1-3:6,B Alpha 2-1:1,B Alpha 2-1:2,B Alpha 2-1:3,B Alpha 2-1:4,B Alpha 2-1:5,B Alpha 2-1:6,B Alpha 2-1:7,B Alpha 2-2:1,B Alpha 2-2:2,B Alpha 2-2:3,B Alpha 2-2:4,B Alpha 2-2:5,B Alpha 2-2:6,B Alpha 2-2:7,B Alpha 2-2:8,B Alpha 2-3:1,B Alpha 2-3:2,B Alpha 2-3:3,B Alpha 2-3:5,B Alpha 2-3:7],{!(_this in outpost1_4)}],6.942]
14:22:31 "-- Zen_Cache Error --"
14:22:31 "No cacheable units given"
14:22:31 7.029
14:22:31 [[]]
14:22:31 ["Zen_Cache",[[]],7.029]
14:22:31 "-- Zen_Cache Error --"
14:22:31 "No cacheable units given"
14:22:31 7.072
14:22:31 [[]]
14:22:31 ["Zen_Cache",[[]],7.007]
14:22:31 No speaker given for Hasan Madaki
14:22:33 "-- Zen_IsCached Error --"
14:22:33 "Invalid cache identifier given."
14:22:33 9.014
14:22:33 [""]
14:22:33 ["Zen_IsCached",[""],9.014]
14:22:33 Error in expression < [_forEachIndex, false];
};
} else {



if ([_x] call Zen_IsCached) then {
_play>
14:22:33   Error position: <if ([_x] call Zen_IsCached) then {
_play>
14:22:33   Error if: Type Array, expected Bool
14:22:33 File C:\Users\DaVidoSS\Documents\Arma 3\missions\contamination_zone2.Altis\functions\server_fnc.sqf, line 163
14:22:33 "-- Zen_IsCached Error --"
14:22:33 "Invalid cache identifier given."
14:22:33 9.052
14:22:33 [""]
14:22:33 ["Zen_IsCached",[""],9.052]
14:22:33 Error in expression < [_forEachIndex, false];
};
} else {



if ([_x] call Zen_IsCached) then {
_play>
14:22:33   Error position: <if ([_x] call Zen_IsCached) then {
_play>
14:22:33   Error if: Type Array, expected Bool
14:22:33 File C:\Users\DaVidoSS\Documents\Arma 3\missions\contamination_zone2.Altis\functions\server_fnc.sqf, line 163
14:22:33 "-- Zen_IsCached Error --"
14:22:33 "Invalid cache identifier given."
14:22:33 9.109
14:22:33 [""]
14:22:33 ["Zen_IsCached",[""],9.109]
14:22:33 Error in expression < [_forEachIndex, false];
};
} else {



if ([_x] call Zen_IsCached) then {
_play>
14:22:33   Error position: <if ([_x] call Zen_IsCached) then {
_play>
14:22:33   Error if: Type Array, expected Bool
14:22:33 File C:\Users\DaVidoSS\Documents\Arma 3\missions\contamination_zone2.Altis\functions\server_fnc.sqf, line 163

Something wrong with "marker" > marker?

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×