Jump to content
silola

DAC V3.1 (Dynamic-AI-Creator) released

Recommended Posts

I made a mission with the Script version, tested it and it worked.

Uploaded it to dedi server and it never spawned the waypoints or units... What am I missing?

Share this post


Link to post
Share on other sites

Did you have any information from DAC? Like waypoints can't be created in zoneX etc.

Share this post


Link to post
Share on other sites

I wasn't around when the mission was tested.

Unless there's nothing unique between listen and dedicated server, I'll take a look at the mission in about 9 hours and report back.

Share this post


Link to post
Share on other sites

So is there any chance that someone who has actually made a working DAC & Headless client mission would post their mission? I've spent 3 days now reading through everything I can on the topic and it always seems that either its a modified version of DAC which isn't linked by the mission creator, a Mod version of DAC (again not linked) or something else entirely. I'm pretty good at backwards engineering things, so if I had a working mission with the stuff in it, I'm pretty sure I could figure it out. My group has blown 2 months or so trying and finally succeeding in getting out HC to connect, now I want to use it to run DAC missions.

Thanks guys, any help on this greatly appreciated.

Share this post


Link to post
Share on other sites
So is there any chance that someone who has actually made a working DAC & Headless client mission would post their mission? I've spent 3 days now reading through everything I can on the topic and it always seems that either its a modified version of DAC which isn't linked by the mission creator, a Mod version of DAC (again not linked) or something else entirely. I'm pretty good at backwards engineering things, so if I had a working mission with the stuff in it, I'm pretty sure I could figure it out. My group has blown 2 months or so trying and finally succeeding in getting out HC to connect, now I want to use it to run DAC missions.

Thanks guys, any help on this greatly appreciated.

Here you go:

http://forums.bistudio.com/showthread.php?188710-Arma3-Headless-Client-Guide

That post includes the information and a modified version of DAC.

I'm myslef starting to maintian a modified version which uses an automatic script to detect HC existence, and spawns DAC AI on server or HC if it is avaliable. I'm also integrating some configs for camps and units that are in the github of Savage. https://github.com/SavageCDN/DAC_A3/tree/master/dac_configs

You can find it on my signature, though it is not updated with latests fixes and haven't had time to put it on test with a real Dedicated + HC, but in editor seems to be working. I will test and update the repo between today and tomorrow.

Obviusly I will not be releasing it in any other way, as it was built for internal use in our community, but I will be glad if Savage checks it out and thinks it is worth for including it in an official release.

Share this post


Link to post
Share on other sites

Zriel that is a great idea (HC auto-detect script) - I would be happy to host it on my Github.

Share this post


Link to post
Share on other sites
So is there any chance that someone who has actually made a working DAC & Headless client mission would post their mission? I've spent 3 days now reading through everything I can on the topic and it always seems that either its a modified version of DAC which isn't linked by the mission creator, a Mod version of DAC (again not linked) or something else entirely. I'm pretty good at backwards engineering things, so if I had a working mission with the stuff in it, I'm pretty sure I could figure it out. My group has blown 2 months or so trying and finally succeeding in getting out HC to connect, now I want to use it to run DAC missions.

Thanks guys, any help on this greatly appreciated.

I have DAC HC on my github, generaly there is one group I found that did it, and they allow to use their system. I will edit this post later and add links.

/*

* passToHCs.sqf

*

* In the mission editor, name the Headless Clients "HC", "HC2", "HC3" without the quotes

*

* In the mission init.sqf, call passToHCs.sqf with:

* execVM "passToHCs.sqf";

*

* It seems that the dedicated server and headless client processes never use more than 20-22% CPU each.

* With a dedicated server and 3 headless clients, that's about 88% CPU with 10-12% left over. Far more efficient use of your processing power.

*

*/

PassToHC_ReceiveMessage = compileFinal "

if (hasInterface && (serverCommandAvailable '#kick' || isServer)) then {

player globalChat (_this select 0);

};

";

if (!isServer) exitWith {};

private ["_HC_ID","_HC2_ID","_HC3_ID","_rebalanceTimer","_cleanUpThreshold","_maxWait","_loadBalance","_currentHC","_numTransfered","_swap","_rc","_numHC","_numHC2","_numHC3","_numDeleted"];

PassToHC_SendMessage = compileFinal "

diag_log text _this;

if (isServer && hasInterface) then {

[_this] call PassToHC_ReceiveMessage;

} else {

[[_this], 'PassToHC_ReceiveMessage', true, false] call BIS_fnc_MP;

};

";

"passToHCs: Started" call PassToHC_SendMessage;

waitUntil {!isNil "HC"};

waitUntil {!isNull HC};

_HC_ID = -1; // Will become the Client ID of HC

_HC2_ID = -1; // Will become the Client ID of HC2

_HC3_ID = -1; // Will become the Client ID of HC3

_rebalanceTimer = 60; // Rebalance sleep timer in seconds

_cleanUpThreshold = 50; // Threshold of number of dead bodies + destroyed vehicles before forcing a clean up

PassToHC_NumTransfered = 0;

"passToHCs: Waiting for init scripts to settle before starting first pass..." call PassToHC_SendMessage;

sleep 15;

// If DAC is initializing after start delay wait until it finishes or timeout

if (!isNil "DAC_Basic_Value") then {

_maxWait = time + 30;

waituntil {sleep 1; (DAC_Basic_Value > 0) || time > _maxWait};

};

// If UPSMON is initializing after start delay wait until it finishes or timeout

if (!isNil "UPSMON_INIT") then {

_maxWait = time + 30;

waituntil {sleep 1; (UPSMON_INIT > 0) || time > _maxWait};

};

// Wait a bit more just in-case they scripts have not settled/synced yet

sleep 3;

format["passToHCs: First pass beginning now..."] call PassToHC_SendMessage;

while {true} do {

// Do not enable load balancing unless more than one HC is present

// Leave this variable false, we'll enable it automatically under the right conditions

_loadBalance = false;

// Get HC Client ID else set variables to null

try {

_HC_ID = owner HC;

if (_HC_ID > 2) then {

diag_log format ["passToHCs: Found HC with Client ID %1", _HC_ID];

} else {

diag_log "passToHCs: [WARN] HC disconnected";

HC = objNull;

_HC_ID = -1;

};

} catch { diag_log format ["passToHCs: [ERROR] [HC] %1", _exception]; HC = objNull; _HC_ID = -1; };

// Get HC2 Client ID else set variables to null

if (!isNil "HC2") then {

try {

_HC2_ID = owner HC2;

if (_HC2_ID > 2) then {

diag_log format ["passToHCs: Found HC2 with Client ID %1", _HC2_ID];

} else {

diag_log "passToHCs: [WARN] HC2 disconnected";

HC2 = objNull;

_HC2_ID = -1;

};

} catch { diag_log format ["passToHCs: [ERROR] [HC2] %1", _exception]; HC2 = objNull; _HC2_ID = -1; };

};

// Get HC3 Client ID else set variables to null

if (!isNil "HC3") then {

try {

_HC3_ID = owner HC3;

if (_HC3_ID > 2) then {

diag_log format ["passToHCs: Found HC2 with Client ID %1", _HC3_ID];

} else {

diag_log "passToHCs: [WARN] HC3 disconnected";

HC3 = objNull;

_HC3_ID = -1;

};

} catch { diag_log format ["passToHCs: [ERROR] [HC3] %1", _exception]; HC3 = objNull; _HC3_ID = -1; };

};

// If no HCs present, wait for HC to rejoin

if ( (isNull HC) && (isNull HC2) && (isNull HC3) ) then { waitUntil {!isNull HC}; };

// Check to auto enable Round-Robin load balancing strategy

if ( (!isNull HC && !isNull HC2) || (!isNull HC && !isNull HC3) || (!isNull HC2 && !isNull HC3) ) then { _loadBalance = true; };

if ( _loadBalance ) then {

diag_log "passToHCs: Starting load-balanced transfer of AI groups to HCs";

} else {

// No load balancing

diag_log "passToHCs: Starting transfer of AI groups to HC";

};

// Determine first HC to start with

_currentHC = 0;

if (!isNull HC) then { _currentHC = 1; } else {

if (!isNull HC2) then { _currentHC = 2; } else { _currentHC = 3; };

};

// Pass the AI

_numTransfered = 0;

{

_syncGroup = _x;

_swap = true;

// Check if group has already been transfered

if (_syncGroup getVariable ["hc_transfered", false]) then {

_swap = false;

};

// Check if group is blacklisted

if (_syncGroup getVariable ["hc_blacklist", false]) then {

_swap = false;

};

if ( _swap ) then {

{

// If a player is in this group, don't swap to an HC

if (isPlayer _x) exitWith { _swap = false; };

// If a unit has 'hc_blacklist' set to true and is in this group, don't swap to an HC.

if (_x getVariable ["hc_blacklist", false]) exitWith { _swap = false; };

// If unit is in a vehicle check if vehicle or crew is blacklisted

if (vehicle _x != _x) then {

if ((vehicle _x) getVariable ["hc_blacklist", false]) exitWith { _swap = false; };

};

} forEach (units _syncGroup);

};

// Check if group has any waypoints synced to triggers and auto blacklist

if ( _swap ) then {

{

if (count (synchronizedTriggers _x) > 0) exitWith {

_syncGroup setVariable ["hc_blacklist", true];

_swap = false;

};

} forEach (waypoints _syncGroup);

};

// If load balance enabled, round robin between the HCs - else pass all to HC

if ( _swap ) then {

_rc = false;

_syncTrigArray = [];

_syncWayArray = [];

{

_wayNum = _forEachIndex;

_syncedTrigs = synchronizedTriggers _x;

_syncTrigArray set [_wayNum,_syncedTrigs];

_syncedWays = synchronizedWaypoints _x;

_syncWayArray set [_wayNum,_syncedWays];

} forEach waypoints _x;

if ( _loadBalance ) then {

_ownerID = switch (_currentHC) do {

case 1: { if (!isNull HC2) then { _currentHC = 2; } else { _currentHC = 3; }; _HC_ID };

case 2: { if (!isNull HC3) then { _currentHC = 3; } else { _currentHC = 1; }; _HC2_ID };

case 3: { if (!isNull HC) then { _currentHC = 1; } else { _currentHC = 2; }; _HC3_ID };

default {-1};

};

if (_ownerID >= 0) then {

_rc = _x setGroupOwner _ownerID;

} else {

diag_log format["passToHCs: [ERROR] No Valid HC to pass to. _currentHC = %1", _currentHC];

};

} else {

_ownerID = switch (_currentHC) do {

case 1: {_HC_ID};

case 2: {_HC2_ID};

case 3: {_HC3_ID};

default {-1};

};

if (_ownerID >= 0) then {

_rc = _x setGroupOwner _ownerID;

} else {

diag_log format["passToHCs: [ERROR] No Valid HC to pass to. _currentHC = %1", _currentHC];

};

};

// If the transfer was successful, count it for accounting and diagnostic information

if ( _rc ) then {

_x setVariable ["hc_transfered", true];

PassToHC_NumTransfered = PassToHC_NumTransfered + 1;

};

};

} forEach (allGroups);

if (PassToHC_NumTransfered > 0) then {

// More accounting and diagnostic information

diag_log format ["passToHCs: Transfered %1 AI groups to HC(s)", PassToHC_NumTransfered];

_numHC = 0;

_numHC2 = 0;

_numHC3 = 0;

{

switch (owner ((units _x) select 0)) do {

case _HC_ID: { _numHC = _numHC + 1; };

case _HC2_ID: { _numHC2 = _numHC2 + 1; };

case _HC3_ID: { _numHC3 = _numHC3+ 1; };

};

} forEach (allGroups);

diag_log if (_numHC > 0) then { format ["passToHCs: %1 AI groups currently on HC", _numHC]; };

diag_log if (_numHC2 > 0) then { format ["passToHCs: %1 AI groups currently on HC2", _numHC2]; };

diag_log if (_numHC3 > 0) then { format ["passToHCs: %1 AI groups currently on HC3", _numHC3]; };

diag_log format ["passToHCs: %1 AI groups total across all HC(s)", (_numHC + _numHC2 + _numHC3)];

} else {

diag_log "passToHCs: No rebalance or transfers required this round";

};

// Force clean up dead bodies and destroyed vehicles

if (count allDead > _cleanUpThreshold) then {

_numDeleted = 0;

{

deleteVehicle _x;

_numDeleted = _numDeleted + 1;

} forEach allDead;

diag_log format ["passToHCs: Cleaned up %1 dead bodies/destroyed vehicles", _numDeleted];

};

// Rebalance every rebalanceTimer seconds to avoid hammering the server

sleep _rebalanceTimer;

};

I use this to move all units to HC.

Edited by Przemro

Share this post


Link to post
Share on other sites
Zriel that is a great idea (HC auto-detect script) - I would be happy to host it on my Github.

Here it is, Addon and script versions, I have used the defaults from DAC. I have tested the addon with an HC mission and DAC and it is working properly.

You have to keep in mind that now DAC is working on the HC, so you should be looking for some variables in the HC instead of the server.

https://bitbucket.org/Zriel/arma-3-missions/src/cae3e885a9dacabd27cc0a7777c146de303eca80/DAC%20HC/?at=master

Share this post


Link to post
Share on other sites
I have DAC HC on my github, generaly there is one group I found that did it, and they allow to use their system. I will edit this post later and add links.

/*

* passToHCs.sqf

*

* In the mission editor, name the Headless Clients "HC", "HC2", "HC3" without the quotes

*

* In the mission init.sqf, call passToHCs.sqf with:

* execVM "passToHCs.sqf";

*

* It seems that the dedicated server and headless client processes never use more than 20-22% CPU each.

* With a dedicated server and 3 headless clients, that's about 88% CPU with 10-12% left over. Far more efficient use of your processing power.

*

*/

PassToHC_ReceiveMessage = compileFinal "

if (hasInterface && (serverCommandAvailable '#kick' || isServer)) then {

player globalChat (_this select 0);

};

";

if (!isServer) exitWith {};

private ["_HC_ID","_HC2_ID","_HC3_ID","_rebalanceTimer","_cleanUpThreshold","_maxWait","_loadBalance","_currentHC","_numTransfered","_swap","_rc","_numHC","_numHC2","_numHC3","_numDeleted"];

PassToHC_SendMessage = compileFinal "

diag_log text _this;

if (isServer && hasInterface) then {

[_this] call PassToHC_ReceiveMessage;

} else {

[[_this], 'PassToHC_ReceiveMessage', true, false] call BIS_fnc_MP;

};

";

"passToHCs: Started" call PassToHC_SendMessage;

waitUntil {!isNil "HC"};

waitUntil {!isNull HC};

_HC_ID = -1; // Will become the Client ID of HC

_HC2_ID = -1; // Will become the Client ID of HC2

_HC3_ID = -1; // Will become the Client ID of HC3

_rebalanceTimer = 60; // Rebalance sleep timer in seconds

_cleanUpThreshold = 50; // Threshold of number of dead bodies + destroyed vehicles before forcing a clean up

PassToHC_NumTransfered = 0;

"passToHCs: Waiting for init scripts to settle before starting first pass..." call PassToHC_SendMessage;

sleep 15;

// If DAC is initializing after start delay wait until it finishes or timeout

if (!isNil "DAC_Basic_Value") then {

_maxWait = time + 30;

waituntil {sleep 1; (DAC_Basic_Value > 0) || time > _maxWait};

};

// If UPSMON is initializing after start delay wait until it finishes or timeout

if (!isNil "UPSMON_INIT") then {

_maxWait = time + 30;

waituntil {sleep 1; (UPSMON_INIT > 0) || time > _maxWait};

};

// Wait a bit more just in-case they scripts have not settled/synced yet

sleep 3;

format["passToHCs: First pass beginning now..."] call PassToHC_SendMessage;

while {true} do {

// Do not enable load balancing unless more than one HC is present

// Leave this variable false, we'll enable it automatically under the right conditions

_loadBalance = false;

// Get HC Client ID else set variables to null

try {

_HC_ID = owner HC;

if (_HC_ID > 2) then {

diag_log format ["passToHCs: Found HC with Client ID %1", _HC_ID];

} else {

diag_log "passToHCs: [WARN] HC disconnected";

HC = objNull;

_HC_ID = -1;

};

} catch { diag_log format ["passToHCs: [ERROR] [HC] %1", _exception]; HC = objNull; _HC_ID = -1; };

// Get HC2 Client ID else set variables to null

if (!isNil "HC2") then {

try {

_HC2_ID = owner HC2;

if (_HC2_ID > 2) then {

diag_log format ["passToHCs: Found HC2 with Client ID %1", _HC2_ID];

} else {

diag_log "passToHCs: [WARN] HC2 disconnected";

HC2 = objNull;

_HC2_ID = -1;

};

} catch { diag_log format ["passToHCs: [ERROR] [HC2] %1", _exception]; HC2 = objNull; _HC2_ID = -1; };

};

// Get HC3 Client ID else set variables to null

if (!isNil "HC3") then {

try {

_HC3_ID = owner HC3;

if (_HC3_ID > 2) then {

diag_log format ["passToHCs: Found HC2 with Client ID %1", _HC3_ID];

} else {

diag_log "passToHCs: [WARN] HC3 disconnected";

HC3 = objNull;

_HC3_ID = -1;

};

} catch { diag_log format ["passToHCs: [ERROR] [HC3] %1", _exception]; HC3 = objNull; _HC3_ID = -1; };

};

// If no HCs present, wait for HC to rejoin

if ( (isNull HC) && (isNull HC2) && (isNull HC3) ) then { waitUntil {!isNull HC}; };

// Check to auto enable Round-Robin load balancing strategy

if ( (!isNull HC && !isNull HC2) || (!isNull HC && !isNull HC3) || (!isNull HC2 && !isNull HC3) ) then { _loadBalance = true; };

if ( _loadBalance ) then {

diag_log "passToHCs: Starting load-balanced transfer of AI groups to HCs";

} else {

// No load balancing

diag_log "passToHCs: Starting transfer of AI groups to HC";

};

// Determine first HC to start with

_currentHC = 0;

if (!isNull HC) then { _currentHC = 1; } else {

if (!isNull HC2) then { _currentHC = 2; } else { _currentHC = 3; };

};

// Pass the AI

_numTransfered = 0;

{

_syncGroup = _x;

_swap = true;

// Check if group has already been transfered

if (_syncGroup getVariable ["hc_transfered", false]) then {

_swap = false;

};

// Check if group is blacklisted

if (_syncGroup getVariable ["hc_blacklist", false]) then {

_swap = false;

};

if ( _swap ) then {

{

// If a player is in this group, don't swap to an HC

if (isPlayer _x) exitWith { _swap = false; };

// If a unit has 'hc_blacklist' set to true and is in this group, don't swap to an HC.

if (_x getVariable ["hc_blacklist", false]) exitWith { _swap = false; };

// If unit is in a vehicle check if vehicle or crew is blacklisted

if (vehicle _x != _x) then {

if ((vehicle _x) getVariable ["hc_blacklist", false]) exitWith { _swap = false; };

};

} forEach (units _syncGroup);

};

// Check if group has any waypoints synced to triggers and auto blacklist

if ( _swap ) then {

{

if (count (synchronizedTriggers _x) > 0) exitWith {

_syncGroup setVariable ["hc_blacklist", true];

_swap = false;

};

} forEach (waypoints _syncGroup);

};

// If load balance enabled, round robin between the HCs - else pass all to HC

if ( _swap ) then {

_rc = false;

_syncTrigArray = [];

_syncWayArray = [];

{

_wayNum = _forEachIndex;

_syncedTrigs = synchronizedTriggers _x;

_syncTrigArray set [_wayNum,_syncedTrigs];

_syncedWays = synchronizedWaypoints _x;

_syncWayArray set [_wayNum,_syncedWays];

} forEach waypoints _x;

if ( _loadBalance ) then {

_ownerID = switch (_currentHC) do {

case 1: { if (!isNull HC2) then { _currentHC = 2; } else { _currentHC = 3; }; _HC_ID };

case 2: { if (!isNull HC3) then { _currentHC = 3; } else { _currentHC = 1; }; _HC2_ID };

case 3: { if (!isNull HC) then { _currentHC = 1; } else { _currentHC = 2; }; _HC3_ID };

default {-1};

};

if (_ownerID >= 0) then {

_rc = _x setGroupOwner _ownerID;

} else {

diag_log format["passToHCs: [ERROR] No Valid HC to pass to. _currentHC = %1", _currentHC];

};

} else {

_ownerID = switch (_currentHC) do {

case 1: {_HC_ID};

case 2: {_HC2_ID};

case 3: {_HC3_ID};

default {-1};

};

if (_ownerID >= 0) then {

_rc = _x setGroupOwner _ownerID;

} else {

diag_log format["passToHCs: [ERROR] No Valid HC to pass to. _currentHC = %1", _currentHC];

};

};

// If the transfer was successful, count it for accounting and diagnostic information

if ( _rc ) then {

_x setVariable ["hc_transfered", true];

PassToHC_NumTransfered = PassToHC_NumTransfered + 1;

};

};

} forEach (allGroups);

if (PassToHC_NumTransfered > 0) then {

// More accounting and diagnostic information

diag_log format ["passToHCs: Transfered %1 AI groups to HC(s)", PassToHC_NumTransfered];

_numHC = 0;

_numHC2 = 0;

_numHC3 = 0;

{

switch (owner ((units _x) select 0)) do {

case _HC_ID: { _numHC = _numHC + 1; };

case _HC2_ID: { _numHC2 = _numHC2 + 1; };

case _HC3_ID: { _numHC3 = _numHC3+ 1; };

};

} forEach (allGroups);

diag_log if (_numHC > 0) then { format ["passToHCs: %1 AI groups currently on HC", _numHC]; };

diag_log if (_numHC2 > 0) then { format ["passToHCs: %1 AI groups currently on HC2", _numHC2]; };

diag_log if (_numHC3 > 0) then { format ["passToHCs: %1 AI groups currently on HC3", _numHC3]; };

diag_log format ["passToHCs: %1 AI groups total across all HC(s)", (_numHC + _numHC2 + _numHC3)];

} else {

diag_log "passToHCs: No rebalance or transfers required this round";

};

// Force clean up dead bodies and destroyed vehicles

if (count allDead > _cleanUpThreshold) then {

_numDeleted = 0;

{

deleteVehicle _x;

_numDeleted = _numDeleted + 1;

} forEach allDead;

diag_log format ["passToHCs: Cleaned up %1 dead bodies/destroyed vehicles", _numDeleted];

};

// Rebalance every rebalanceTimer seconds to avoid hammering the server

sleep _rebalanceTimer;

};

I use this to move all units to HC.

Does this transfer Waypoints? And the variables you are setting up¿ Cause I know that variables are local if not added a "public variable" switch in the setVariable command.

Edited by Zriel

Share this post


Link to post
Share on other sites
Well, watch this video

Hmmm interesting....still don't know if variables are migrated over. Suppose I will need to check myself. Still the template they are developing has some nice functions, will probably get some of them for my own template XD.

it would be nice if we could between all have a DAC release that suppports automatic HC/Sever detection and automatic spawn of units between HCs.

Also, first time realized...why we use an array of string for units in DAC, instead of a "switchableunits + playableunits" ? It should be the same, and we don't need to put names and define them in DAC for each mission.

Share this post


Link to post
Share on other sites

I am noob at scripts etc. so I can't help much. They use edited F3 framework, I also use it in my mission but I have diffrent changes made. As for HC and DAC, it looks like it work ok with DAC.

As for second, I have no idea how to change it but it would make DAC easier to use. I may be wrong, but when you name unit s1 AI is better 'reacting' to unit.

https://github.com/Przemro/Szablon-misji -here is my github with mission etc. most is in polish (as I am from pol, and my clan is polish only) but all scripts are universal since it is edited F3 and DAC. If you see anything intresting (like DAC units etc.) just copy it for yourself.

Edited by Przemro

Share this post


Link to post
Share on other sites
I am noob at scripts etc. so I can't help much. They use edited F3 framework, I also use it in my mission but I have diffrent changes made. As for HC and DAC, it looks like it work ok with DAC.

As for second, I have no idea how to change it but it would make DAC easier to use. I may be wrong, but when you name unit s1 AI is better 'reacting' to unit.

https://github.com/Przemro/Szablon-misji -here is my github with mission etc. most is in polish (as I am from pol, and my clan is polish only) but all scripts are universal since it is edited F3 and DAC. If you see anything intresting (like DAC units etc.) just copy it for yourself.

Thanks! i'm gonna stay with the fork made by the people of the video you passed, as it has some very interesting functions..and well, it is in English XD which I can understand.

https://github.com/Phantomsmedia/Wavelength

Also, reason we use the array of strings (I answer myself) playable units contains only an array of filled units. If the unit has not been spawned, it won't be there. So it won't work correctly for JIP players that didn't have an AI before connecting.

Share this post


Link to post
Share on other sites

Having issues with Resistance units not being built up. Spawn a simple DAC zone with infantry groups, side set to resistance and using vanilla AAF faction, the correct units spawn, and i get system messages that they are reduced when i am sufficiently far away, however when i get close enough, they are not built up, they stay as 1 man groups, i can still shoot at them and they behave as they should, maneuvering for cover and calling support, ect. But for some reason it doesn't want to build them back up. I have tested using OPFOR and BLUFOR, they both reduce and build up fine, anyone know of a cause and/or solution?

Share this post


Link to post
Share on other sites
Having issues with Resistance units not being built up. Spawn a simple DAC zone with infantry groups, side set to resistance and using vanilla AAF faction, the correct units spawn, and i get system messages that they are reduced when i am sufficiently far away, however when i get close enough, they are not built up, they stay as 1 man groups, i can still shoot at them and they behave as they should, maneuvering for cover and calling support, ect. But for some reason it doesn't want to build them back up. I have tested using OPFOR and BLUFOR, they both reduce and build up fine, anyone know of a cause and/or solution?

Do you use mod or script version of DAC? Also can you copy here your triger line (mean 'fun=...')?

Share this post


Link to post
Share on other sites
Do you use mod or script version of DAC? Also can you copy here your triger line (mean 'fun=...')?

Script version. The trigger line is: fun=["Z1",[1,0,0],[10,2,30,10],[],[],[],[2,2,0,0]] Spawn DAC_Zone;

Share this post


Link to post
Share on other sites

Hey.

So I am building a mission in which a convoy has to get from Southern Takistan Airfield to the Northern Airfield. The mission is using RHS units for the players and Leight's opfor for the enemies. I have placed a number of DAC zones to spawn civilians in each of the villages along the way and a number of enemy zones for ambush points along the route. I have used DAC numerous times and if I have any problems, the readme generally points out the errors in my ways. However this time, I can't seem to find the answer to my problem.

So I have about 16 Civ zones that start the mission all deactivated, with triggers to activate them when the players get near them. This works perfectly, however, when the players leave the trigger, the Zones are deactivating, but not deleting the unit's created by the zone. All the Ind zones activate and deactivate perfectly, just the Civ zones do not. I have gone through the Readme and either haven't looked at the right spot, or the information I am looking for is not there. Can anyone tell me where I should be looking to fix the Civ zones? Having them all active by the end of the mission is killing server FPS even with Headless client enabled. I am using Script version of DAC with the initzones.sqf to initialise the zones.

Any help would be greatly appreciated.

EDIT: So after some more investigating. I have concluded that it is the side Civilian that is having the issue. Doesn't matter what behaviour or unit pool I choose from. When I class the zones as Civ, they don't delete the units upon deactivating. They also don't delete the unit's when a zone is deleted. Hopefully this helps to get to the bottom of the issue.

Edited by MortiFied666

Share this post


Link to post
Share on other sites

DAC is amazing no doubt. But I am unable to make the spawned enemy groups patrol as "Safe" "Careless" and with "limited speed". In short, trying to make 'em unaware of my presence so that I can scare the butterflies out of them without a warning.

 

But no matter how much I play with "_setCombat", "_setSpeed", and "_setBehav",  those idiots keep running around since the mission start as if they spotted some thing. Unnerving. I use just the extern logic ( was using intern but the single config thing appears broken) and in the DAC folder inside mission folder, the case 1 of behaviour files (which I am using on spawned enemy) looks like this:

case 1:
	{
		
//_setSkill = ["aimingAccuracy","aimingShake","aimingSpeed","Endurance","spotDistance","spotTime","courage",
"reloadSpeed","commanding","general"];
		
_setSkill   = [[0.2,0.8],[0.2,0.8],[0.2,0.8],[0.2,0.8],[0.2,0.8],[0.2,0.8],[0.2,0.8],[0.2,0.8],[0.2,0.8],[0.2,0.8]];

		_setCombat  = ["blue"];
		_setBehav   = ["careless","safe"];

		_setSpeed   = ["limited"];
		
_setForm    = ["line","vee","column","wedge","stag column","ech left","ech right","file","diamond"];
		
_setFleeing = [0,200];
		_setHeliVal = [50,100,0.7,1];
		
_setPause   = [[5,10],[5,10],[5,10],[20,30,5,5],[1,3],[0,0]];
		
_setBldgBeh = [4,50,120,600,2];
		_setPatrol  = ["45 + (20 * (skill _leader))","(60 + (random 60)) + ((skill _leader) * 50)"];
		_setSearch  = ["40 + ((skill _leader) * 150)","50 + ((skill _leader) * 50)"];
		_setSupport = [1,2];//support for other zones //blufor arti
		_setJoin    = 2;
		_setEmpVeh  = [[150,100],[150,100]];
		_setSupTime = ["5 + ((skill _unit) * (5 * DAC_AI_Level))",2,5];
		_setHidTime = ["(((10 * DAC_AI_Level) + ((skill _leader) * 50)) / ((count units _group) + 1))"];
	};


//-------------------------------------------------------------------------------------------------------------------------

Please help man. What am I doing wrong?

Share this post


Link to post
Share on other sites

DAC is amazing no doubt. But I am unable to make the spawned enemy groups patrol as "Safe" "Careless" and with "limited speed". In short, trying to make 'em unaware of my presence so that I can scare the butterflies out of them without a warning.

 

But no matter how much I play with "_setCombat", "_setSpeed", and "_setBehav",  those idiots keep running around since the mission start as if they spotted some thing. Unnerving. I use just the extern logic ( was using intern but the single config thing appears broken) and in the DAC folder inside mission folder, the case 1 of behaviour files (which I am using on spawned enemy) looks like this:

case 1:
	{
		
//_setSkill = ["aimingAccuracy","aimingShake","aimingSpeed","Endurance","spotDistance","spotTime","courage",
"reloadSpeed","commanding","general"];
		
_setSkill   = [[0.2,0.8],[0.2,0.8],[0.2,0.8],[0.2,0.8],[0.2,0.8],[0.2,0.8],[0.2,0.8],[0.2,0.8],[0.2,0.8],[0.2,0.8]];

		_setCombat  = ["blue"];
		_setBehav   = ["careless","safe"];

		_setSpeed   = ["limited"];
		
_setForm    = ["line","vee","column","wedge","stag column","ech left","ech right","file","diamond"];
		
_setFleeing = [0,200];
		_setHeliVal = [50,100,0.7,1];
		
_setPause   = [[5,10],[5,10],[5,10],[20,30,5,5],[1,3],[0,0]];
		
_setBldgBeh = [4,50,120,600,2];
		_setPatrol  = ["45 + (20 * (skill _leader))","(60 + (random 60)) + ((skill _leader) * 50)"];
		_setSearch  = ["40 + ((skill _leader) * 150)","50 + ((skill _leader) * 50)"];
		_setSupport = [1,2];//support for other zones //blufor arti
		_setJoin    = 2;
		_setEmpVeh  = [[150,100],[150,100]];
		_setSupTime = ["5 + ((skill _unit) * (5 * DAC_AI_Level))",2,5];
		_setHidTime = ["(((10 * DAC_AI_Level) + ((skill _leader) * 50)) / ((count units _group) + 1))"];
	};


//-------------------------------------------------------------------------------------------------------------------------

Please help man. What am I doing wrong?

 

Are you running it alongside any other AI mods?

Share this post


Link to post
Share on other sites

Are you running it alongside any other AI mods?

No Sir. Its just a bunch of Maps and weapons/ units addons. Does the latest CBA cause conflicts? Coz I have to run that also for some mods.

Share this post


Link to post
Share on other sites

No Sir. Its just a bunch of Maps and weapons/ units addons. Does the latest CBA cause conflicts? Coz I have to run that also for some mods.

Hmm, I ran it alongside CBA and it did work as expected, both with vanilla and RHS units. However try to change set_combat= ["blue"] to either "white", "green" or "yellow" or any combination of the three.

  • Like 1

Share this post


Link to post
Share on other sites

Alright guys so I am setting up a large scale combat area using DAC. I have a few questions if ya dont mind,

 

1. If I use other AI mods such as FFIS, will they work well together?

 

2. I plan on using the SectorFight, but there isnt much doc on actually using it, will AI automatically go towards them, if not how would I get them to go there?

 

3. Will the AI be able to enter buildings on custom maps or do they only detect ones from vanilla Arma 3?

  • Like 1

Share this post


Link to post
Share on other sites

Alright guys so I am setting up a large scale combat area using DAC. I have a few questions if ya dont mind,

 

1. If I use other AI mods such as FFIS, will they work well together?

 

2. I plan on using the SectorFight, but there isnt much doc on actually using it, will AI automatically go towards them, if not how would I get them to go there?

 

3. Will the AI be able to enter buildings on custom maps or do they only detect ones from vanilla Arma 3?

Although DAC devs maybe able to better solve this, still I will try as I am a huge fan of DAC and use it quite often.

 

1. I do not believe DAC causes any conflict with the AI's behaviour while in combat. You should be ok with FFSI.

2. I was in your shoes some months back and spent a great amount of time make it to work. Now I am enjoying with HETMAN. Here try it. Best thing is I have combined DAC (to spawn stuff), HETMAN (to give orders to AI and yourself), and ASR AI3 to control AI's combat behaviour. A killer combo to be honest. Feel free to contact me if you need help setting this up. in sha Allah I will help.  :)

3. Yes I believe so. As all the buildings are classified under headings like Civil, Military etc (while you make maps). And DAC does have an option which allows its spawned units to patrol in nearby buildings (Go through the read me's "Chapter 20 The config files". One of the best tutorials ever, Masha Allah. And then manipulate "DAC_Config_Behaviour.sqf" file under the DAC Config folder. By default, it has building patrol turned on I guess). Through my limited technical knowledge, I am sure a fantastic piece of art like DAC automatically determines these buildings and takes care of it.

 

Hope this helps man.

 

Peace  :D

  • Like 1

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

×