Jump to content

Freeze Units, to help reduce server Last


Guest

Recommended Posts

Introduction

 

This script is meant to Freeze AI Units spawned by Missions such as WAI, in order to reduce the Server Last and increase Client and Server FPS. While there is no enemy near a Mission, the AI units will be disabled in Movement, targeting and animations etc., once a player enters the Radius, which you can define individually for yourself, the AI will be re-activated in Order to not defeat the purpose of fighting. This does not effect Single Units sitting on MG's or in Vehicles.

 

Note: It is NOT recommended to Freeze Zombies, AI Patrols or Players.

 

 

Setup

 

Now this script allows you an exact amount of 3 personal configurations. You can determine the Range in which the Player has to be to active the Mission with "_countRange". Also you can choose the Time, that has to pass before the AI will be frozen again, if Player left the Area (this is not triggered, if the player simply dies) - _timeTillFreeze. The third and last option is simply the debugging. This allows to see in your Logs, which Group is when frozen and unfrozen and by who (freeze_log).

The Default Values are:

  • _countRange    - 800
  • _timeTillFreeze  - 30
  • freeze_log         - true

 

 

Installation

 

I do not have EMS or DZMS Installed, so this Installation instructions is for WAI only. Note, that the script can be run with any Mission System.

In dayz_server.pbo\WAI\init.sqf add this Line within "if(isServer) then {"

cache_units				= compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\cache_units.sqf";

You can add that Line anywhere you want, inside the IF.

 

 

In dayz_server.pbo\WAI\compile\spawn_group.sqf add UNDER:

_unitGroup selectLeader ((units _unitGroup) select 0);

This:

[_unitGroup] spawn cache_units;

Update

 

With the Updates comes new Features. Suggested from Halvhjearne was to Hide the AI, while nobody is near and Un-Hide them, when player get's within the Range that you can still set in the config variable. This feature comes with a new Variable: hide_ai. It's fairly easy to get, what this Variable is there for. Now RimBlock also suggested something very interesting: Randomize AI Position, after the un-freeze. This comes with 2 Variables: randomize_position - This determines to use the randomize or not. and randomize_distance, which will set the Maximum distance the ai can be away from their Original Position. It works random, so if you choose 100, it can happen, that the AI is 100m away, but it can also happen, that the AI is only 1m away. Now Gr8 posted out the Issue, that the Waypoint of the AI is being unassigned, when they are un-freezed. I personally don't mind that, but some might do, so i've made up a new configuration Variable for that to: unassign_waypoints.

 

- Pastebin

- Raw Paste

(cache_units.sqf)

/**

Please take my Special Thanks, 
- RimBlock ( http://epochmod.com/forum/index.php?/user/12612-rimblock/ ) ***
- MGM ( http://epochmod.com/forum/index.php?/user/16852-mgm/ )
- Gr8 ( http://epochmod.com/forum/index.php?/user/15884-gr8/ )
- halvhjearne ( http://epochmod.com/forum/index.php?/user/10011-halvhjearne/ ) PS: God sake, that name is hard to write! 


Author: Martin ( http://epochmod.com/forum/index.php?/user/30755-ukmartin/ )

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 1 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

**/
private ["_unitGroup","_countRange","_timeTillFreeze","_state","_stateFroze","_timeFroze","_matchingObjectsArray","_numberOfMatchingObjectsNumber","_playerCount"];

_unitGroup = _this select 0;

/**************************************/
/**Range for Re-Activation*************/
/****** Default: 800 ******************/
_countRange = 800;
/**************************************/
/**************************************/
/**Time untill units are Frozen again**/
/************* Default: 30 ************/
_timeTillFreeze = 30;
/**************************************/
/**************************************/
/****** Log Actions to RPT File? ******/
/*********** Default: true ************/
freeze_log = true;
/**************************************/
/**************************************/
/******** Unassign Waypoints?  ********/
/*********** Default: false ***********/
unassign_waypoints = false;
/**************************************/
/**************************************/
/******** Randomize Position?  ********/
/******** Distance to Randomize *******/
/*********** Default: true ************/
/*********** Distance: 20 *************/
randomize_position = true;
randomize_distance = 20;
/**************************************/
/**************************************/
/********** Hide un-used AI?  *********/
/*********** Default: true ************/
hide_ai = true;
/**************************************/
/**************************************/

/**
fnc_freeze: Used to Freeze the Units of the Group
Parameters: Unit Group (Type: Object / Group)
Behaviour: For Each Unit of the given Group the AI will be disabled (force them to freeze)
Addition: Set's a Variable with the time the AI is frozen and the state
**/
fnc_freeze = {
	private ["_unitGroup","_nic"];
	_unitGroup = _this select 0;
	
	if (freeze_log) then {
		diag_log(format["[DEBUG] Freezing Units of Group: %1", _unitGroup]);
	};
	
	{
		_x disableAI "TARGET";
		sleep 0.05;
		_x disableAI "AUTOTARGET";
		sleep 0.05;
		_x disableAI "MOVE";
		sleep 0.05;
		_x disableAI "ANIM";
		sleep 0.05;
		if (unassign_waypoints) then {
			_x disableAI "FSM";
			sleep 0.05;
		};
		
		if (hide_ai) then {
			//_x hideObjectGlobal true;
			_nic = [nil, _x, "per", rHideObject, true ] call RE;
		};
		
	} foreach units _unitGroup;
	
	_unitGroup setVariable["FrozenState",[time,true],true];
};

/**
fnc_unfreeze: Used to Unfreeze the Units of the Group
Parameters: Unit Group (Type: Object / Group)
Behaviour: For Each Unit of the given Group the AI will be enabled
Addition: Set's a Variable with the time the AI is Unfrozen and the state
**/
fnc_unfreeze = {
	private ["_unitGroup","_posX","_posY","_posZ","_pos","_nic"];
	_unitGroup = _this select 0;
	
	if (freeze_log) then {
		diag_log(format["[DEBUG] Un-Freezing Units of Group: %1", _unitGroup]);
	};
	
	{
		_x enableAI "TARGET";
		sleep 0.05;
		_x enableAI "AUTOTARGET";
		sleep 0.05;
		_x enableAI "MOVE";
		sleep 0.05;
		_x enableAI "ANIM";
		sleep 0.05;
		
		if (unassign_waypoints) then {
			_x enableAI "FSM";
			sleep 0.05;
		};
		
		if (randomize_position) then {
			_pos = getPos _x;
			_posX = _pos select 0;
			_posY = _pos select 1;
			_posZ = _pos select 2;
			_posX = _posX + round(random randomize_distance);
			_posY = _posY + round(random randomize_distance);
			sleep 0.05;
			_x setPos [_posX,_posY,_posZ];
			sleep 0.05;
		};
		
		if (hide_ai) then {
			//_x hideObjectGlobal false;
			_nic = [nil, _x, "per", rHideObject, false ] call RE;
		};
		
	} foreach units _unitGroup;
	
	_unitGroup setVariable["FrozenState",[time,false],true];
};

//Call the Freeze Function, in Order to make the Units freeze
[_unitGroup] spawn fnc_freeze;


/** 
While {true}: Infinite Loop, that runs every 15 Seconds
Parameters: None
Behaviour: Counts nearby Units, if it found a Unit it will check if the Unit is a Player
Behaviour: If the Unit is a Player, the Frozen Group will be defrosted.
Behaviour: If there is no Player near that Group for _timeTillFreeze the AI will be frozen again
Addition: None
**/
while {true} do {
	_matchingObjectsArray = ((units _unitGroup) select 0) nearEntities ["CAManBase",_countRange];
	_numberOfMatchingObjectsNumber = (count _matchingObjectsArray);
	
	if (_numberOfMatchingObjectsNumber >= 1) then {
		
		_state = _unitGroup getVariable["FrozenState",[time,true]];
		_timeFroze = _state select 0;
		_stateFroze = _state select 1;
		
		if (_stateFroze) then {
		
			{
				if (isPlayer _x) then {
					
					if (freeze_log) then {
						diag_log(format["[DEBUG] %1 Triggered Un-Freezing of Group: %2", _x, _unitGroup]);
					};
					[_unitGroup] spawn fnc_unfreeze;
					
				} else {
				
					if (!_stateFroze && ((time - _timeFroze) > _timeTillFreeze)) then {
			
						if (freeze_log) then {
							diag_log(format["[DEBUG] Re-Freezing Group: %1", _unitGroup]);
						};
						
						[_unitGroup] spawn fnc_freeze;
					
					};
				};
				
			} foreach _matchingObjectsArray;
			
		} else {
			
			if (!_stateFroze && ((time - _timeFroze) > _timeTillFreeze)) then {
			
				if (freeze_log) then {
					diag_log(format["[DEBUG] Re-Freezing Group: %1", _unitGroup]);
				};
				[_unitGroup] spawn fnc_freeze;
				
			};
			
		};
		
	};
	
	sleep 15;
	
};

 

PS: No, i will not Upload the whole .sqf File, because you're to lazy to save it. Why? Because i'm not even going to visit all those malware Upload sites :)

 

 

 

 

Old Version

 

- Pastebin

 

Raw Paste

/**

Please take my Special Thanks, 
- RimBlock ( http://epochmod.com/forum/index.php?/user/12612-rimblock/ ) ***
- MGM ( http://epochmod.com/forum/index.php?/user/16852-mgm/ )

Author: Martin ( http://epochmod.com/forum/index.php?/user/30755-ukmartin/ )

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 1 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

**/
private ["_unitGroup","_countRange","_timeTillFreeze","_state","_stateFroze","_timeFroze","_matchingObjectsArray","_numberOfMatchingObjectsNumber","_playerCount"];

_unitGroup = _this select 0;

/**************************************/
/**Range for Re-Activation*************/
/****** Default: 800 ******************/
_countRange = 800;
/**************************************/
/**************************************/
/**Time untill units are Frozen again**/
/************* Default: 30 ************/
_timeTillFreeze = 30;
/**************************************/
/**************************************/
/****** Log Actions to RPT File? ******/
/*********** Default: true ************/
freeze_log = true;
/**************************************/
/**************************************/


/**
fnc_freeze: Used to Freeze the Units of the Group
Parameters: Unit Group (Type: Object / Group)
Behaviour: For Each Unit of the given Group the AI will be disabled (force them to freeze)
Addition: Set's a Variable with the time the AI is frozen and the state
**/
fnc_freeze = {
	private ["_unitGroup"];
	_unitGroup = _this select 0;
	
	if (freeze_log) then {
		diag_log(format["[DEBUG] Freezing Units of Group: %1", _unitGroup]);
	};
	
	{
		_x disableAI "TARGET";
		sleep 0.05;
		_x disableAI "AUTOTARGET";
		sleep 0.05;
		_x disableAI "MOVE";
		sleep 0.05;
		_x disableAI "ANIM";
		sleep 0.05;
		_x disableAI "FSM";
		sleep 0.05;
	} foreach units _unitGroup;
	
	_unitGroup setVariable["FrozenState",[time,true],true];
};

/**
fnc_unfreeze: Used to Unfreeze the Units of the Group
Parameters: Unit Group (Type: Object / Group)
Behaviour: For Each Unit of the given Group the AI will be enabled
Addition: Set's a Variable with the time the AI is Unfrozen and the state
**/
fnc_unfreeze = {
	private ["_unitGroup"];
	_unitGroup = _this select 0;
	
	if (freeze_log) then {
		diag_log(format["[DEBUG] Un-Freezing Units of Group: %1", _unitGroup]);
	};
	
	{
		_x enableAI "TARGET";
		sleep 0.05;
		_x enableAI "AUTOTARGET";
		sleep 0.05;
		_x enableAI "MOVE";
		sleep 0.05;
		_x enableAI "ANIM";
		sleep 0.05;
		_x enableAI "FSM";
		sleep 0.05;
	} foreach units _unitGroup;
	
	_unitGroup setVariable["FrozenState",[time,false],true];
};

//Call the Freeze Function, in Order to make the Units freeze
[_unitGroup] spawn fnc_freeze;


/** 
While {true}: Infinite Loop, that runs every 15 Seconds
Parameters: None
Behaviour: Counts nearby Units, if it found a Unit it will check if the Unit is a Player
Behaviour: If the Unit is a Player, the Frozen Group will be defrosted.
Behaviour: If there is no Player near that Group for _timeTillFreeze the AI will be frozen again
Addition: None
**/
while {true} do {
	_matchingObjectsArray = ((units _unitGroup) select 0) nearEntities ["CAManBase",_countRange];
	_numberOfMatchingObjectsNumber = (count _matchingObjectsArray);
	
	if (_numberOfMatchingObjectsNumber >= 1) then {
		
		_state = _unitGroup getVariable["FrozenState",[time,true]];
		_timeFroze = _state select 0;
		_stateFroze = _state select 1;
		
		if (_stateFroze) then {
		
			{
				if (isPlayer _x) then {
					
					if (freeze_log) then {
						diag_log(format["[DEBUG] %1 Triggered Un-Freezing of Group: %2", _x, _unitGroup]);
					};
					[_unitGroup] spawn fnc_unfreeze;
					
				} else {
				
					if (!_stateFroze && ((time - _timeFroze) > _timeTillFreeze)) then {
			
						if (freeze_log) then {
							diag_log(format["[DEBUG] Re-Freezing Group: %1", _unitGroup]);
						};
						
						[_unitGroup] spawn fnc_freeze;
					
					};
				};
				
			} foreach _matchingObjectsArray;
			
		} else {
			
			if (!_stateFroze && ((time - _timeFroze) > _timeTillFreeze)) then {
			
				if (freeze_log) then {
					diag_log(format["[DEBUG] Re-Freezing Group: %1", _unitGroup]);
				};
				[_unitGroup] spawn fnc_freeze;
				
			};
			
		};
		
	};
	
	sleep 15;
	
};

 

Please let me know, if you encounter any errors and with that please provide your RPT Log and if you modified this code please provide that to.

 

 

 

Link to comment
Share on other sites

its a good idea, however i dont think it will actually help as much as you think unless you have quite a lot of ai spawned and alive always on your map.

what you could do was hide or delete them them when players are out of range and then respawn or make them visible again once players are near, that will defenatly make a diffrence in server fps, but not so much with this (not to mention this will stop any patrols or convoys you might have moving across the map).

 

you should rather look into hideobject instead of this and just make sure players makes them visible again when they are near.

Link to comment
Share on other sites

its a good idea, however i dont think it will actually help as much as you think unless you have quite a lot of ai spawned and alive always on your map.

what you could do was hide or delete them them when players are out of range and then respawn or make them visible again once players are near, that will defenatly make a diffrence in server fps, but not so much with this (not to mention this will stop any patrols or convoys you might have moving across the map).

 

you should rather look into hideobject instead of this and just make sure players makes them visible again when they are near.

 

Thanks for that suggestions. This script does not effect AI Patrols, as the Patrols are created differently and the Script is not getting all Groups, just that one group that triggered the script. You can ofc add this to AI Patrols, but as mentioned that is not recommended.

Link to comment
Share on other sites

Freeing AIs stops them to getting assigned way points around the mission. Thats about it.

 

It would help alot more if the AIs only spawned in when a player was near the mission.

 

 

 

Try comment out the following:

//_x disableAI "FSM";
Link to comment
Share on other sites

I've gotta ask. What do you mean by "to reduce the Server Last" What is "Server Last"?

 

That's the FPS of the Server, i.e. the Memory Usage. You see, when the AI is running around the Server has lot's of stuff to calculate and check etc, that allocates Memory and also slows down the server. It somewhat effects Clients to, but this Script only does little for the Client. By "boosting" the Server, you grant it the ability to do stuff faster, like for example Update the Objects or the Hitpoints of Vehicles, actually that effects anything, that is handled by Server. Also writing to the Database.

Note, that this does not "permanently" helps the server, it only "takes away" a bit of last, while the Missions are active. For a real boost consider using Headless Client or wait for my next Project, which will hopefully be an upgrade for Clients FPS (Still want's testing and scripting).

Link to comment
Share on other sites

I installed the 1st version of this earlier and the RPT file was filled with this error:

 

if (_numberOfMa>
23:33:17   Error position: <_matchingObjectsArray);

if (_numberOfMa>
23:33:17   Error Undefined variable in expression: _matchingobjectsarray
23:33:17 File z\addons\dayz_server\WAI\compile\cache_units.sqf, line 119
23:33:17 Error in expression <_numberOfMatchingObjectsNumber = (count _matchingObjectsArray);

Link to comment
Share on other sites

I installed the 1st version of this earlier and the RPT file was filled with this error:

 

if (_numberOfMa>

23:33:17   Error position: <_matchingObjectsArray);

if (_numberOfMa>

23:33:17   Error Undefined variable in expression: _matchingobjectsarray

23:33:17 File z\addons\dayz_server\WAI\compile\cache_units.sqf, line 119

23:33:17 Error in expression <_numberOfMatchingObjectsNumber = (count _matchingObjectsArray);

I have change following to prevent this error:

Original:

while {true} do {
	_matchingObjectsArray = ((units _unitGroup) select 0) nearEntities ["CAManBase",_countRange];
	_numberOfMatchingObjectsNumber = (count _matchingObjectsArray);
	
	if (_numberOfMatchingObjectsNumber >= 1) then {
		
		_state = _unitGroup getVariable["FrozenState",[time,true]];
		_timeFroze = _state select 0;
		_stateFroze = _state select 1;
		
		if (_stateFroze) then {
		
			{
				if (isPlayer _x) then {
					
					if (freeze_log) then {
						diag_log(format["[DEBUG] %1 Triggered Un-Freezing of Group: %2", _x, _unitGroup]);
					};
					[_unitGroup] spawn fnc_unfreeze;
					
				} else {
				
					if (!_stateFroze && ((time - _timeFroze) > _timeTillFreeze)) then {
			
						if (freeze_log) then {
							diag_log(format["[DEBUG] Re-Freezing Group: %1", _unitGroup]);
						};
						
						[_unitGroup] spawn fnc_freeze;
					
					};
				};
				
			} foreach _matchingObjectsArray;
			
		} else {
			
			if (!_stateFroze && ((time - _timeFroze) > _timeTillFreeze)) then {
			
				if (freeze_log) then {
					diag_log(format["[DEBUG] Re-Freezing Group: %1", _unitGroup]);
				};
				[_unitGroup] spawn fnc_freeze;
				
			};
			
		};
		
	};
	
	sleep 15;
	
};

My Changes:

while {true} do {
	_matchingObjectsArray = ((units _unitGroup) select 0) nearEntities ["CAManBase",_countRange];
	if(!isnil "_matchingObjectsArray") then {
		_numberOfMatchingObjectsNumber = (count _matchingObjectsArray);
		
		if (_numberOfMatchingObjectsNumber >= 1) then {
			
			_state = _unitGroup getVariable["FrozenState",[time,true]];
			_timeFroze = _state select 0;
			_stateFroze = _state select 1;
			
			if (_stateFroze) then {
			
				{
					if (isPlayer _x) then {
						
						if (freeze_log) then {
							diag_log(format["[DEBUG] %1 Triggered Un-Freezing of Group: %2", _x, _unitGroup]);
						};
						[_unitGroup] spawn fnc_unfreeze;
						
					} else {
					
						if (!_stateFroze && ((time - _timeFroze) > _timeTillFreeze)) then {
				
							if (freeze_log) then {
								diag_log(format["[DEBUG] Re-Freezing Group: %1", _unitGroup]);
							};
							
							[_unitGroup] spawn fnc_freeze;
						
						};
					};
					
				} foreach _matchingObjectsArray;
				
			} else {
			
				if (!_stateFroze && ((time - _timeFroze) > _timeTillFreeze)) then {
				
					if (freeze_log) then {
						diag_log(format["[DEBUG] Re-Freezing Group: %1", _unitGroup]);
					};
					[_unitGroup] spawn fnc_freeze;
					
				};
				
			};
			
		};
	};
	
	sleep 15;
	
};

Greets

Rotzloch

Link to comment
Share on other sites

I have change following to prevent this error:

Original:

while {true} do {
	_matchingObjectsArray = ((units _unitGroup) select 0) nearEntities ["CAManBase",_countRange];
	_numberOfMatchingObjectsNumber = (count _matchingObjectsArray);
	
	if (_numberOfMatchingObjectsNumber >= 1) then {
		
		_state = _unitGroup getVariable["FrozenState",[time,true]];
		_timeFroze = _state select 0;
		_stateFroze = _state select 1;
		
		if (_stateFroze) then {
		
			{
				if (isPlayer _x) then {
					
					if (freeze_log) then {
						diag_log(format["[DEBUG] %1 Triggered Un-Freezing of Group: %2", _x, _unitGroup]);
					};
					[_unitGroup] spawn fnc_unfreeze;
					
				} else {
				
					if (!_stateFroze && ((time - _timeFroze) > _timeTillFreeze)) then {
			
						if (freeze_log) then {
							diag_log(format["[DEBUG] Re-Freezing Group: %1", _unitGroup]);
						};
						
						[_unitGroup] spawn fnc_freeze;
					
					};
				};
				
			} foreach _matchingObjectsArray;
			
		} else {
			
			if (!_stateFroze && ((time - _timeFroze) > _timeTillFreeze)) then {
			
				if (freeze_log) then {
					diag_log(format["[DEBUG] Re-Freezing Group: %1", _unitGroup]);
				};
				[_unitGroup] spawn fnc_freeze;
				
			};
			
		};
		
	};
	
	sleep 15;
	
};

My Changes:

while {true} do {
	_matchingObjectsArray = ((units _unitGroup) select 0) nearEntities ["CAManBase",_countRange];
	if(!isnil "_matchingObjectsArray") then {
		_numberOfMatchingObjectsNumber = (count _matchingObjectsArray);
		
		if (_numberOfMatchingObjectsNumber >= 1) then {
			
			_state = _unitGroup getVariable["FrozenState",[time,true]];
			_timeFroze = _state select 0;
			_stateFroze = _state select 1;
			
			if (_stateFroze) then {
			
				{
					if (isPlayer _x) then {
						
						if (freeze_log) then {
							diag_log(format["[DEBUG] %1 Triggered Un-Freezing of Group: %2", _x, _unitGroup]);
						};
						[_unitGroup] spawn fnc_unfreeze;
						
					} else {
					
						if (!_stateFroze && ((time - _timeFroze) > _timeTillFreeze)) then {
				
							if (freeze_log) then {
								diag_log(format["[DEBUG] Re-Freezing Group: %1", _unitGroup]);
							};
							
							[_unitGroup] spawn fnc_freeze;
						
						};
					};
					
				} foreach _matchingObjectsArray;
				
			} else {
			
				if (!_stateFroze && ((time - _timeFroze) > _timeTillFreeze)) then {
				
					if (freeze_log) then {
						diag_log(format["[DEBUG] Re-Freezing Group: %1", _unitGroup]);
					};
					[_unitGroup] spawn fnc_freeze;
					
				};
				
			};
			
		};
	};
	
	sleep 15;
	
};

Greets

Rotzloch

 

Thank you very much and learn something new everyday! ;)

 

-CJ-

Link to comment
Share on other sites

That's the FPS of the Server, i.e. the Memory Usage. You see, when the AI is running around the Server has lot's of stuff to calculate and check etc, that allocates Memory and also slows down the server. It somewhat effects Clients to, but this Script only does little for the Client. By "boosting" the Server, you grant it the ability to do stuff faster, like for example Update the Objects or the Hitpoints of Vehicles, actually that effects anything, that is handled by Server. Also writing to the Database.

Note, that this does not "permanently" helps the server, it only "takes away" a bit of last, while the Missions are active. For a real boost consider using Headless Client or wait for my next Project, which will hopefully be an upgrade for Clients FPS (Still want's testing and scripting).

 

Ah ok, I thought maybe it was a typo and was supposed to be "reduce server lag". Never heard of "server last" before. Looks good. I might try it out when I have some time.

Link to comment
Share on other sites

CJ did you have DZAI installed as that error was occuring?

Rotzloch thanks for that Update!

I only just thought about: last is not an english word or is it? It is someehat simular to burdons i think :s sorry i only started learning half a year ago

Link to comment
Share on other sites

CJ did you have DZAI installed as that error was occuring?

Rotzloch thanks for that Update!

I only just thought about: last is not an english word or is it? It is someehat simular to burdons i think :s sorry i only started learning half a year ago

Yes, DZAI is installed. I've been editing files and have had the server up and down last night, but the error has not shown in the RPT since I applied the suggested change.

 

-CJ-

Link to comment
Share on other sites

works like a charm, thx

 

edit::

 

i assume theres no issue applying the same fix to static wai spawns?

 

Hi, if you want to add this to static Spawns you can open the dayz_server.pbo\WAi\compiles\static_spawn.sqf and add it on the bottom, just as mentioned in the first Post. :)

 

 

And -CJ-, yes Rotzloch fixed that issue, but you might wanna check, if the DZAI are shooting at the WAI, as that's what caused the issue. If DZAI killes the WAI you might sometimes have problems with missions not clearing from map etc.

Link to comment
Share on other sites

Hi, if you want to add this to static Spawns you can open the dayz_server.pbo\WAi\compiles\static_spawn.sqf and add it on the bottom, just as mentioned in the first Post. :)

 

 

And -CJ-, yes Rotzloch fixed that issue, but you might wanna check, if the DZAI are shooting at the WAI, as that's what caused the issue. If DZAI killes the WAI you might sometimes have problems with missions not clearing from map etc.

Ok... every now and then, some of the hero WAI mix it up with the other AI on the server... the convoy script created some interesting situations with the hero WAI ai missions... Good to know whats causing the error.  We have had some instances where there were only a few ai on a mission and it wouldn't clear so now we know the reason. Thanks again.

 

-CJ-

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Advertisement
  • Discord

×
×
  • Create New...