Add files via upload

This commit is contained in:
kuplion 2018-09-17 20:01:20 +01:00 committed by GitHub
parent 2121dd349b
commit 5c3eec93d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
46 changed files with 838 additions and 1 deletions

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,12 @@
IMPORTANT: After the A3XAI 0.2.0, the installation steps have changed. If you already have A3XAI installed (before version 0.2.0), you must remove all A3XAI files from @ExileServer.
To install A3XAI:
1. Copy @A3XAI from "1. Installation Package" into your server's Arma 3 directory.
2. Modify your server's startup parameters to include @A3XAI. For example: -serverMod=@ExileServer;@A3XAI;
To configure A3XAI:
1. Unpack A3XAI_config.pbo (Recommended to use PBO Manager: http://www.armaholic.com/page.php?id=16369)
2. Edit config.cpp with a text editor (Recommended to use Notepad++: https://notepad-plus-plus.org/). Make your configuration changes.
3. Repack A3XAI_config.pbo

View File

@ -0,0 +1,12 @@
_message = _this;
if ((typeName _message) isEqualTo "STRING") then {
systemChat _message;
if (A3XAIC_deathMessageSound) then {
playsound "AddItemOK";
};
} else {
diag_log format ["A3XAI Error: Kill message is non-string: %1",_message];
};
true

View File

@ -0,0 +1,32 @@
private ["_dialogueType", "_dialogueParams", "_paramCount", "_dialogueTextTemplate", "_dialogueTextFormat"];
_dialogueType = _this select 0;
_dialogueParams = _this select 1;
if (((diag_tickTime - (missionNamespace getVariable ["A3XAI_client_lastRadioMessage",-10])) > 10) or {_dialogueType in [20,30,31,32,33,34,35,41,42,43,44,45,51,52,53,54,55]}) then {
_paramCount = (count _dialogueParams);
_dialogueTextTemplate = missionNamespace getVariable [format ["A3XAI_client_radioMessage%1",_dialogueType],""];
_dialogueTextFormat = call {
if (_paramCount isEqualTo 0) exitWith {
_dialogueTextTemplate
};
if (_paramCount isEqualTo 1) exitWith {
format [_dialogueTextTemplate,_dialogueParams select 0]
};
if (_paramCount isEqualTo 2) exitWith {
format [_dialogueTextTemplate,_dialogueParams select 0,_dialogueParams select 1]
};
""
};
if !(_dialogueTextFormat isEqualTo "") then {
systemChat _dialogueTextFormat;
if (A3XAI_client_radioSounds) then {
playSound [format ["UAV_0%1",(floor (random 5) + 1)],false];
};
A3XAI_client_lastRadioMessage = diag_tickTime;
} else {
diag_log format ["A3XAI Error: %1 was given blank string. (%2)",__FILE__,_this];
};
};
true

View File

@ -0,0 +1,59 @@
/*
A3XAI Client-side Addon Configuration File
*/
/* A3XAI Client Addon Settings
--------------------------------------------------------------------------------------------------------------------*/
//Enables use of client-side radio functions. A3XAI_radioMsgs must be set 'true' in A3XAI_config.sqf.
A3XAI_client_radio = true;
//Enables sound notifications when displaying radio messages
A3XAI_client_radioSounds = true;
/* A3XAI Text String Settings
--------------------------------------------------------------------------------------------------------------------*/
//AI radio static message
A3XAI_client_radioMessage0 = "[RADIO] Your radio is picking up a signal nearby."; //Message displayed when radio sound transmitted without AI dialogue.
//AI radio messages (AI-killer dialogue)
A3XAI_client_radioMessage1 = "[RADIO] %1: %2 is in this area. Stay on alert!"; //%1: AI leader name, %2: Target player name
A3XAI_client_radioMessage2 = "[RADIO] %1: Target looks like a %2. Find them!"; //%1: AI leader name, %2: Target player type
A3XAI_client_radioMessage3 = "[RADIO] %1: Target's range is about %2 meters. Move in on that position!"; //%1: AI leader name, %2: Target player distance
A3XAI_client_radioMessage4 = "[RADIO] %1: Lost contact with target. Breaking off pursuit."; //%1: AI leader name
A3XAI_client_radioMessage5 = "[RADIO] %1: Target has been eliminated."; //%1: AI leader name
//AI radio messages (Dynamic AI hunter dialogue)
A3XAI_client_radioMessage11 = "[RADIO] %1: %2 is somewhere in this location. Search the area!"; //%1: AI leader name, %2: Target player name
A3XAI_client_radioMessage12 = "[RADIO] %1: Target is a %2. Stay on alert!"; //%1: AI leader name, %2: Target player type
A3XAI_client_radioMessage13 = "[RADIO] %1: Target's distance is %2 meters. Move in to intercept!"; //%1: AI leader name, %2: Target player distance
A3XAI_client_radioMessage14 = "[RADIO] %1: We've lost contact with the target. Let's move out."; //%1: AI leader name
A3XAI_client_radioMessage15 = "[RADIO] %1: The target has been killed."; //%1: AI leader name
//AI air patrol reinforcement warning message
A3XAI_client_radioMessage20 = "Warning: Hostile %1 inbound."; //%1: Air vehicle type
//AI air patrol dialogue. Displayed when player is detected by air patrol.
A3XAI_client_radioMessage31 = "[RADIO] %1: Target spotted below. Engaging."; //%1: AI leader name
A3XAI_client_radioMessage32 = "[RADIO] %1: We've arrived at the location. Moving in on the target."; //%1: AI leader name
A3XAI_client_radioMessage33 = "[RADIO] %1: Thats's the one we're looking for. Take him out."; //%1: AI leader name
A3XAI_client_radioMessage34 = "[RADIO] %1: Located the target. Let's take him out."; //%1: AI leader name
A3XAI_client_radioMessage35 = "[RADIO] %1: Priority target confirmed. Proceeding to engage."; //%1: AI leader name
//UAV patrol dialogue. Displayed when player is detected.
A3XAI_client_radioMessage41 = "[RADIO] %1 %2: Targets detected. Relaying position data."; //%1: UAV Group, %2: UAV Type
A3XAI_client_radioMessage42 = "[RADIO] %1 %2: Targets found at destination coordinates."; //%1: UAV Group, %2: UAV Type
A3XAI_client_radioMessage43 = "[RADIO] %1 %2: Movement detected. Targets selected."; //%1: UAV Group, %2: UAV Type
A3XAI_client_radioMessage44 = "[RADIO] %1 %2: Heat signatures confirmed. Designating targets."; //%1: UAV Group, %2: UAV Type
A3XAI_client_radioMessage45 = "[RADIO] %1 %2: Priority target located. Redirecting armed forces to target location."; //%1: UAV Group, %2: UAV Type
//UGV patrol dialogue. Displayed when player is detected.
A3XAI_client_radioMessage51 = "[RADIO] %1 %2: Targets detected. Relaying position data."; //%1: UGV Group, %2: UGV Type
A3XAI_client_radioMessage52 = "[RADIO] %1 %2: Targets found at destination coordinates."; //%1: UGV Group, %2: UGV Type
A3XAI_client_radioMessage53 = "[RADIO] %1 %2: Movement detected. Targets selected."; //%1: UGV Group, %2: UGV Type
A3XAI_client_radioMessage54 = "[RADIO] %1 %2: Heat signatures confirmed. Designating targets."; ///%1: UGV Group, %2: UGV Type
A3XAI_client_radioMessage55 = "[RADIO] %1 %2: Priority target located. Redirecting armed forces to target location."; //%1: UGV Group, %2: UGV Type

View File

@ -0,0 +1,2 @@
A3XAI_client_radioMessage = compileFinal preprocessFileLineNumbers "A3XAI_Client\A3XAI_client_code\A3XAI_client_radioMessage.sqf";
//A3XAI_client_killMessage = compileFinal preprocessFileLineNumbers "A3XAI_Client\A3XAI_client_code\A3XAI_client_killMessage.sqf";

View File

@ -0,0 +1,44 @@
_startTime = diag_tickTime;
//Check value types
{
_value = missionNamespace getVariable (_x select 0);
if ((isNil "_value") or {(typeName _value) != (typeName (_x select 1))}) then {
missionNamespace setVariable [(_x select 0),(_x select 1)];
diag_log format ["[A3XAI] Error found in variable %1, resetting to default value.",(_x select 0)];
};
} forEach [
["A3XAI_client_radio",true],
["A3XAI_client_radioSounds",true],
//["A3XAI_client_deathMessages",true],
//["A3XAI_client_deathMessageSound",true],
["A3XAI_client_radioMessage0","[RADIO] Your radio is picking up a signal nearby."],
["A3XAI_client_radioMessage1","[RADIO] %1: %2 is in this area. Stay on alert!"],
["A3XAI_client_radioMessage2","[RADIO] %1: Target looks like a %2. Find them!"],
["A3XAI_client_radioMessage3","[RADIO] %1: Target's range is about %2 meters. Move in on that position!"],
["A3XAI_client_radioMessage4","[RADIO] %1: Lost contact with target. Breaking off pursuit."],
["A3XAI_client_radioMessage5","[RADIO] %1: Target has been eliminated."],
["A3XAI_client_radioMessage11","[RADIO] %1: %2 is somewhere in this location. Search the area!"],
["A3XAI_client_radioMessage12","[RADIO] %1: Target is a %2. Stay on alert!"],
["A3XAI_client_radioMessage13","[RADIO] %1: Target's distance is %2 meters. Move in to intercept!"],
["A3XAI_client_radioMessage14","[RADIO] %1: We've lost contact with the target. Let's move out."],
["A3XAI_client_radioMessage15","[RADIO] %1: The target has been killed."],
["A3XAI_client_radioMessage20","Warning: Hostile %1 inbound."],
["A3XAI_client_radioMessage31","[RADIO] %1: Target spotted below. Engaging."],
["A3XAI_client_radioMessage32","[RADIO] %1: We've arrived at the location. Moving in on the target."],
["A3XAI_client_radioMessage33","[RADIO] %1: Thats's the one we're looking for. Take him out."],
["A3XAI_client_radioMessage34","[RADIO] %1: Located the target. Let's take him out."],
["A3XAI_client_radioMessage35","[RADIO] %1: Priority target confirmed. Proceeding to engage."],
["A3XAI_client_radioMessage41","[RADIO] %1 %2: Targets detected. Relaying position data."],
["A3XAI_client_radioMessage42","[RADIO] %1 %2: Targets found at destination coordinates."],
["A3XAI_client_radioMessage43","[RADIO] %1 %2: Movement detected. Targets selected."],
["A3XAI_client_radioMessage44","[RADIO] %1 %2: Heat signatures confirmed. Designating targets."],
["A3XAI_client_radioMessage45","[RADIO] %1 %2: Priority target located. Redirecting armed forces to target location."],
["A3XAI_client_radioMessage51","[RADIO] %1 %2: Targets detected. Relaying position data."],
["A3XAI_client_radioMessage52","[RADIO] %1 %2: Targets found at destination coordinates."],
["A3XAI_client_radioMessage53","[RADIO] %1 %2: Movement detected. Targets selected."],
["A3XAI_client_radioMessage54","[RADIO] %1 %2: Heat signatures confirmed. Designating targets."],
["A3XAI_client_radioMessage55","[RADIO] %1 %2: Priority target located. Redirecting armed forces to target location."]
];
diag_log format ["[A3XAI] Verified all A3XAI settings in %1 seconds.",(diag_tickTime - _startTime)];

View File

@ -0,0 +1,6 @@
/*
A3XAI Version Identifier File
*/
#define A3XAI_CLIENT_TYPE "A3XAI Client Addon"
#define A3XAI_CLIENT_VERSION "0.0.0"

View File

@ -0,0 +1,25 @@
if (hasInterface) then {
_nul = [] spawn {
waitUntil {uiSleep 1; alive player};
waitUntil {uiSleep 1; (typeOf player) isEqualTo "Exile_Unit_Player"};
#include "A3XAI_client_version.txt"
call compile preprocessFileLineNumbers "A3XAI_Client\A3XAI_client_config.sqf";
call compile preprocessFileLineNumbers "A3XAI_Client\A3XAI_client_verifySettings.sqf";
call compile preprocessFileLineNumbers "A3XAI_Client\A3XAI_client_functions.sqf";
if (A3XAI_client_radio) then {
"A3XAI_SMS" addPublicVariableEventHandler {(_this select 1) call A3XAI_client_radioMessage; diag_log _this;};
};
//No longer needed, A3XAI sends kill messages through Exile's messaging system nonglobally.
/*
if (A3XAI_client_deathMessages) then {
"A3XAI_killMSG" addPublicVariableEventHandler {(_this select 1) call A3XAI_client_killMessage; diag_log _this;};
};
*/
diag_log format ["[A3XAI] Initialized %1 version %2. Radio enabled: %3.",A3XAI_CLIENT_TYPE,A3XAI_CLIENT_VERSION,A3XAI_client_radio];
};
};

View File

@ -0,0 +1,25 @@
A3XAI Client Optional Addon
----------------------------
1. How to install
------------------
The A3XAI client optional addon is used by A3XAI to run client-side commands. To install:
1. Unpack your mission pbo file (example: Exile.Altis.pbo) and copy the A3XAI_Client folder into the extracted folder.
2. Edit your extracted mission folder's init.sqf (if no init.sqf exists - create one) and insert this at the end:
#include "A3XAI_Client\A3XAI_initclient.sqf";
3. Repack your mission pbo file.
4. Add the required BattlEye filters found in "Needed BE Exceptions for Client Addon.txt"
5. Start your server.
2. How to configure
------------------
Edit A3XAI_client_config.sqf to change settings and enable/disable features. By default, all features are enabled.
Brief summary of available settings:
A3XAI_radioMsgs: Enables text message warnings to players with radios when they are under pursuit by AI.
A3XAI_client_radioSounds: Enables audio notifications.
A3XAI_client_radioMessage<number>: Set radio text messages intercepted from AI communications.

View File

@ -0,0 +1,7 @@
7 compile !"call compile preprocessFileLineNumbers \"A3XAI_Client\A3XAI_client_config.sqf\""
7 Exile_unit_player !"waitUntil {uiSleep 1; (typeOf player) isEqualTo \"Exile_Unit_Player\"};"
7 eventHandler !"\"A3XAI_SMS\" addPublicVariableEventHandler {(_this select 1) call A3XAI_client_radioMessage; diag_log _this;};"
If using infistar, add this one as well:
7 addpublicvariableeventhandler !"\"A3XAI_SMS\" addPublicVariableEventHandler {(_this select 1) call A3XAI_client_radioMessage; diag_log _this;};"

View File

@ -0,0 +1,25 @@
A3XAI Client Optional Addon
----------------------------
1. How to install
------------------
The A3XAI client optional addon is used by A3XAI to run client-side commands. To install:
1. Unpack your mission pbo file (example: Exile.Altis.pbo) and copy the A3XAI_Client folder into the extracted folder.
2. Edit your extracted mission folder's init.sqf (if no init.sqf exists - create one) and insert this at the end:
#include "A3XAI_Client\A3XAI_initclient.sqf";
3. Repack your mission pbo file.
4. Add the required BattlEye filters found in "Needed BE Exceptions for Client Addon.txt"
5. Start your server.
2. How to configure
------------------
Edit A3XAI_client_config.sqf to change settings and enable/disable features. By default, all features are enabled.
Brief summary of available settings:
A3XAI_radioMsgs: Enables text message warnings to players with radios when they are under pursuit by AI.
A3XAI_client_radioSounds: Enables audio notifications.
A3XAI_client_radioMessage<number>: Set radio text messages intercepted from AI communications.

174
3. Editor Tool/init.sqf Normal file
View File

@ -0,0 +1,174 @@
//A3XAI Editor Tool Version 1.1.2
[] spawn {
waitUntil {player == player};
player allowDamage false;
player setCaptive true;
["Teleport", "onMapSingleClick" , {if (!(surfaceIsWater _pos) && {!_shift}) then {vehicle player setPos _pos; openMap false;}; true}] call BIS_fnc_addStackedEventHandler;
if !("ItemGPS" in assignedItems player) then {player addItem "ItemGPS"; player assignItem "ItemGPS";};
A3XAI_ruler50m = createMarker ["Ruler50m", getPosASL player];
A3XAI_ruler50m setMarkerShape "ELLIPSE";
A3XAI_ruler50m setMarkerType "Circle";
A3XAI_ruler50m setMarkerBrush "Border";
A3XAI_ruler50m setMarkerSize [50,50];
A3XAI_ruler100m = createMarker ["Ruler100m", getPosASL player];
A3XAI_ruler100m setMarkerShape "ELLIPSE";
A3XAI_ruler100m setMarkerType "Circle";
A3XAI_ruler100m setMarkerBrush "Border";
A3XAI_ruler100m setMarkerSize [100,100];
A3XAI_ruler200m = createMarker ["Ruler200m", getPosASL player];
A3XAI_ruler200m setMarkerShape "ELLIPSE";
A3XAI_ruler200m setMarkerType "Circle";
A3XAI_ruler200m setMarkerBrush "Border";
A3XAI_ruler200m setMarkerSize [200,200];
A3XAI_ruler300m = createMarker ["Ruler300m", getPosASL player];
A3XAI_ruler300m setMarkerShape "ELLIPSE";
A3XAI_ruler300m setMarkerType "Circle";
A3XAI_ruler300m setMarkerBrush "Border";
A3XAI_ruler300m setMarkerSize [300,300];
if (isNil "playerMarkerUpdate") then {
playerMarkerUpdate = true;
_nul = [] spawn {
while {true} do {
A3XAI_ruler50m setMarkerPos (getPosASL player);
A3XAI_ruler100m setMarkerPos (getPosASL player);
A3XAI_ruler200m setMarkerPos (getPosASL player);
A3XAI_ruler300m setMarkerPos (getPosASL player);
uiSleep 1;
};
};
};
//playerMarker setMarkerAlpha 0;
currentEditorMode = "Infantry";
generateUnitsStatement = format ["['AreaName1',%1,%2,%3,%4,%5] call A3XAI_generateArea;",100,2,1,true,600];
copyToClipboard generateUnitsStatement;
generateVehiclesStatement = format ["['AreaName1','VehicleType',%1,%2,%3,%4,%5] call A3XAI_generateArea;",100,[1,1],1,true,600];
generateBlacklistStatement = format ["['AreaName1',%1] call A3XAI_generateArea;",100];
editorHelpStatement = parseText format ["
To start creating custom spawns, use the A3XAI_generateArea function and the Debug Console. An example has been copied to your clipboard.
<br/>
<br/>Change editing modes using the scroll-wheel options.
<br/>
<br/>Single-click on the map to teleport to a new location.
"];
hintSilent editorHelpStatement;
if (isNil "A3XAI_customSpawnUnitAction") then {
A3XAI_customSpawnUnitAction = true;
player addAction ["Editor Mode: Custom Infantry",'
currentEditorMode = "Infantry";
copyToClipboard generateUnitsStatement;
titleText ["Changed Editor Mode: Custom Infantry Spawn. Template statement copied to clipboard.","plain down"];
'];
};
if (isNil "A3XAI_customVehiclesAction") then {
A3XAI_customVehiclesAction = true;
player addAction ["Editor Mode: Custom Vehicles",'
currentEditorMode = "Vehicles";
copyToClipboard generateVehiclesStatement;
titleText ["Changed Editor Mode: Custom Vehicle Spawn. Template statement copied to clipboard.","plain down"];
'];
};
if (isNil "A3XAI_areaBlacklistAction") then {
A3XAI_areaBlacklistAction = true;
player addAction ["Editor Mode: Area Blacklists",'
currentEditorMode = "Blacklists";
copyToClipboard generateBlacklistStatement;
titleText ["Changed Editor Mode: Area Blacklist. Template statement copied to clipboard.","plain down"];
'];
};
if (isNil "A3XAI_exportSpawns") then {
A3XAI_exportSpawns = true;
player addAction ["Export Spawn Configs",'
copyToClipboard A3XAI_spawnsGenerated;
titleText ["Successfully exported custom spawn configs to clipboard.","plain down"];
'];
};
if (isNil "A3XAI_getHelp") then {
A3XAI_getHelp = true;
player addAction ["Display Help",'
hintSilent editorHelpStatement;
'];
};
if (isNil "A3XAI_generateArea") then {
A3XAI_spawnsIndex = [];
A3XAI_spawnsGenerated = "";
A3XAI_lineBreak = toString [13,10];
A3XAI_generateArea = compileFinal '
_spawnName = str(_this select 0);
_spawnPos = getPosATL player;
_statement = "";
if !(_spawnName in A3XAI_spawnsIndex) then {
//playerMarker setMarkerPos _spawnPos;
call {
if (currentEditorMode == "Infantry") exitWith {
_patrolRadius = if ((count _this) > 1) then {if ((typeName (_this select 1)) == "SCALAR") then {_this select 1} else {100}} else {100};
_totalAI = if ((count _this) > 2) then {if ((typeName (_this select 2)) == "SCALAR") then {_this select 2} else {1}} else {1};
_unitLevel = if ((count _this) > 3) then {if ((typeName (_this select 3)) == "SCALAR") then {_this select 3} else {1}} else {1};
_respawn = if ((count _this) > 4) then {if ((typeName (_this select 4)) == "BOOL") then {_this select 4} else {true}} else {true};
_respawnTime = if ((count _this) > 5) then {if ((typeName (_this select 5)) == "SCALAR") then {_this select 5} else {0}} else {0};
if (_patrolRadius > 300) then {_patrolRadius = 300;};
_statement = format ["[%1,%2,%3,%4,%5,%6,%7] call A3XAI_createCustomInfantryQueue;",_spawnName,_spawnPos,_patrolRadius,_totalAI,_unitLevel,_respawn,_respawnTime];
};
if (currentEditorMode == "Vehicles") exitWith {
_vehicleType = str(_this select 1);
_patrolRadius = if ((count _this) > 2) then {_this select 2} else {100};
_maxUnits = if ((count _this) > 3) then {_this select 3} else {[1,1]};
_unitLevel = if ((count _this) > 4) then {_this select 4} else {1};
_respawn = if ((count _this) > 5) then {if ((typeName (_this select 5)) == "BOOL") then {_this select 5} else {false}} else {false};
_respawnTime = if ((count _this) > 6) then {if ((typeName (_this select 6)) == "SCALAR") then {_this select 6} else {0}} else {0};
//playerMarker setMarkerSize [_patrolRadius,_patrolRadius];
_statement = format ["[%1,%2,%3,%4,%5,%6,%7,%8] call A3XAI_createCustomVehicleQueue;",_spawnName,_spawnPos,_vehicleType,_patrolRadius,_maxUnits,_unitLevel,_respawn,_respawnTime];
};
if (currentEditorMode == "Blacklists") exitWith {
_areaRadius = _this select 1;
if (_areaRadius > 1499) then {_areaRadius = 1499;};
_statement = format ["[%1,%2,%3] call A3XAI_createBlacklistAreaQueue;",_spawnName,_spawnPos,_areaRadius];
};
};
A3XAI_spawnsIndex pushBack _spawnName;
A3XAI_spawnsGenerated = A3XAI_spawnsGenerated + _statement + A3XAI_lineBreak;
copyToClipboard A3XAI_spawnsGenerated;
hintSilent parseText format ["
Generated custom spawn with name %1
<br/>
<br/>To add your custom spawns to A3XAI, paste clipboard contents to @ExileServer\custom_spawn_defs.sqf
",_spawnName];
hintSilent format ["Total custom spawns generated and saved: %1.",(count A3XAI_spawnsIndex)];
diag_log format ["Custom spawn %1 generated and saved to clipboard: %2",_spawnName,_statement];
diag_log "To add your custom spawns to A3XAI, paste clipboard contents to @ExileServer\custom_spawn_defs.sqf";
} else {
hintSilent format ["Error: Custom spawn with name %1 already exists. Please use another name.",_spawnName];
diag_log format ["Error: Custom spawn with name %1 already exists. Please use another name.",_spawnName];
};
A3XAI_spawnsGenerated
';
};
};

25
3. Editor Tool/readme.txt Normal file
View File

@ -0,0 +1,25 @@
Installing the A3XAI Editor Tool
1. Open your ArmA 3 client and open the Editor.
2. Select the map you want to work with and press Continue.
3. Double-click anywhere on the map to place a unit. Do not change any settings. Press OK to place the unit.
4. Save this mission in the Editor by pressing CTRL+S.
5. Save your mission with a mission name of your choice. Remember this name.
6. Locate your downloaded A3XAI install package. Locate the init.sqf file contained within the Editor Tool folder. Right click on this file and select Copy.
7. Locate your ArmA 3 client mission folder.
Windows 7/8/10: C:\My Documents\Arma 3 - Other Profiles\[ArmA3 Profile Name]\missions
8. Find and open the folder that contains the name you assigned in Step 6.
9. Paste the init.sqf file inside this folder.
For more details on using the Editor Tool and adding custom spawns/blacklist areas to your server, visit the A3XAI Wikia site here: http://A3XAI.wikia.com/wiki/A3XAI_Editor_Tool

16
5. Changelogs/0.1.0.txt Normal file
View File

@ -0,0 +1,16 @@
A3XAI 0.1.0 (Initial public release build)
Note: This changelog is relevant only to Test Build users.
Files changed
A3EAI.pbo update required: Yes
A3EAI_config.sqf update required: Yes
Headless Client Files/Keys update required: Yes
A3EAI Client Addon update required: No
- Fixed documentation errors in A3XAI_config.sqf
- Removed Mad Passenger respect rewards
- Added new Respect bonus type ("Vehicle Weapon Kill") to reward AI kills using vehicle weapons (Default: +400 Respect)
- Removed Code Lock and Safe Kit from default AI loot tables
- AI from custom spawns created within blacklisted areas are now exempted from effects of blacklisted areas
- Added several missing default settings to list of verified settings.

12
5. Changelogs/0.1.1.txt Normal file
View File

@ -0,0 +1,12 @@
A3XAI 0.1.1
Files changed
A3EAI.pbo update required: Yes
A3EAI_config.sqf update required: Yes
Headless Client Files/Keys update required: N/A
A3EAI Client Addon update required: No
[Added] Added option to define side (faction) used for units spawned by A3XAI.
[Fixed] Group functions for custom AI were missing.
[Fixed] Collision kill is now properly communicated from HC to dedicated server.
[Fixed] No-hostility status did not apply damage immunity to AI units.

9
5. Changelogs/0.1.2.txt Normal file
View File

@ -0,0 +1,9 @@
A3XAI 0.1.2
Files changed
A3EAI.pbo update required: Yes
A3EAI_config.sqf update required: Required for 0.1.0 users
Headless Client Files/Keys update required: N/A
A3EAI Client Addon update required: No
[Fixed] Relocation for stuck infantry units did not check for nearby players.

11
5. Changelogs/0.1.3.txt Normal file
View File

@ -0,0 +1,11 @@
A3XAI 0.1.3
Files changed
A3EAI.pbo update required: Yes
A3EAI_config.sqf update required: Yes
Headless Client Files/Keys update required: N/A
A3EAI Client Addon update required: No
[Fixed] Fixed bug with manual weapon definitions.
[Changed] Bambi overalls no longer used as a possible uniform choice by A3XAI.
[Changed] Removal of A3XAI_addUniformChance0-3 settings from A3XAI_config.sqf.

12
5. Changelogs/0.1.4.txt Normal file
View File

@ -0,0 +1,12 @@
A3XAI 0.1.4
Files changed
A3EAI.pbo update required: Yes
A3EAI_config.sqf update required: Yes
Headless Client Files/Keys update required: N/A
A3EAI Client Addon update required: No
[Fixed] Fixed some documentation typos in A3EAI_config.sqf
[Fixed] Autonomous vehicles (UAVs/UGVs) should no longer be unlocked once disabled.
[Fixed] Fixed a startup error with HC.
[Added] A3XAI will now take back ownership of groups taken by other addons.

55
5. Changelogs/0.1.5.txt Normal file
View File

@ -0,0 +1,55 @@
A3XAI 0.1.5
Files changed
A3EAI.pbo update required: Yes
A3EAI_config.sqf update required: Yes
Headless Client Files/Keys update required: N/A, Strongly recommended to only use HC after Arma 3 1.52 update
A3EAI Client Addon update required: No
[Changed] Moved A3XAI_deathMessages to "Shared AI Unit Settings" section since AI death messages no longer use the Client Addon.
[Changed] Infantry AI patrol are now restricted to their defined patrol radius, with a 50m buffer zone.
[Changed] Infantry AI patrol now become non-hostile and damage-immune upon traveling near trader zones (same behavior as AI vehicle patrols).
[Changed] Re-standardized minimum spawn distances for all AI types. See end of changelog for more information.
[Changed] Improved classname verification script.
[Added] Added A3XAI_traderAreaLocations array in config file for admins to manually define trader areas. See end of changelog for more info on this setting.
[Removed] Removed A3XAI_chanceFoodLoot and A3XAI_chanceMiscLoot settings. AI will now always generate the maximum allowed amount of loot given enough time.
[Removed] Extra ammunition loot due to avoid confusion. Ammo loot is substitued with Flares and Smokes items.
[Fixed] Added MPKilled eventhandler to AI vehicles recovered by players to allow proper cleanup of destroyed recovered vehicles.
[Fixed] HC-controlled AI vehicles are now properly released for player access.
More info on A3XAI_traderAreaLocations:
Expected format: Array of positions (2D or 3D)
Example (Correct):
A3XAI_traderAreaLocations = [[14600,16797.2,0],[23334.6,24188.9,0],[2998.06,18175.5,0]];
Example (Incorrect):
A3XAI_traderAreaLocations = [14600,16797.2,0]; //Not an array of positions
A3XAI_traderAreaLocations = [[14600,16797.2,0],[23334.6,24188.9,0],[2998.06,18175.5,0],]; //Should be no comma after the last array
For performance reasons, limit use of this array to actual trader positions (Recommended maximum: 3-5 positions). This is because every spawned group checks whether they are within any of these areas every ~15 seconds.
For each defined position, an 900m radius "no aggro" zone is created where all AI that enter will become non-hostile and immune to damage. An 800m spawning blacklist will also be created where no AI can spawn.
Because positions are checked every ~15 seconds, there may be a small time window between the time the AI group enters the 900m zone and actually becoming non-hostile.
Note: If custom spawns are created within these zones, they will still spawn but will never become hostile or vulnerable to damage as long as they are within the "no aggro" zone.
Note: This array will only be read if no standard Exile trader markers are found. This is intended by design.
More info on re-standardized minimum spawn distances:
Minimum spawn distances between AI and players were all standardized and increased to prevent cases where AI spawn too close to players.
Static spawns (Standard and Custom):
Minimum distance between AI and any player (with LOS): 300m (Previously 200m).
Minimum distance between AI and any player (without LOS): 200m (Previously 125m, 30m for respawns and custom spawns).
Dynamic and Random spawns:
Minimum distance between AI and any player (with LOS): 400m (Previously 200m)
Minimum distance between AI and any player (without LOS): 300m (Previously 145m)

22
5. Changelogs/0.1.6.txt Normal file
View File

@ -0,0 +1,22 @@
A3XAI 0.1.6
Files changed
A3EAI.pbo update required: Yes
A3EAI_config.sqf update required: No, Last changed in 0.1.5
Headless Client Files/Keys update required: N/A, Strongly recommended to only use HC after Arma 3 1.52 update
A3EAI Client Addon update required: No
[Fixed] Static AI loot/player searching range now properly restricted to patrol area.
[Fixed] UAVs/UGVs under Detect Only status no longer become hostile within "no aggro" zones if hit by players.
[Fixed] AI units/vehicles under "no aggro" status no longer have their health reset to full upon taking damage.
[Fixed] AI vehicle gunner limit was not being applied properly. (Can now have zero gunners).
[Fixed] Fixed issue with custom spawns that failed to spawn AI due to player proximity.
[Fixed] Fixed error that occured when A3XAI attempted to find an alternate patrol area for AI vehicle groups disabled within a no-aggro zone.
[Fixed] Fixed bug where AI vehicles recovered by players were cleaned up by A3XAI.
[Fixed] Fixed bug where location-based spawn chances were not being applied to dynamic spawns properly.
[Fixed] Fixed bug where AI took unusually large amounts of damage to kill.
[Changed] AI unit/vehicle HandleDamage eventhandlers now only trigger if damage values actually increase per hit taken.
[Changed] AI spawned by A3XAI can now be damaged by non-players as long as attacker does not belong to the same side as the victim.
[Changed] Custom static spawns have reduced spawn distance requirements to reduce cases where spawns are canceled due to player proximity (200m from any player with LOS, 100m from any player without LOS).
[Added] All infantry AI spawns now have a "last second check" for players too close to AI spawn position.
[Added] Added small damage threshold requirement to allow UAVs/UGVs to return fire while under Detect Only status.

View File

@ -0,0 +1,9 @@
A3XAI 0.1.7
Files changed
A3EAI.pbo update required: Yes
A3EAI_config.sqf update required: No, Last changed in 0.1.5
Headless Client Files/Keys update required: N/A, Strongly recommended to only use HC after Arma 3 1.52 update
A3EAI Client Addon update required: No
[Fixed] Fixed error with Dynamic AI if target player logged out during pursuit stage.

11
5. Changelogs/0.1.7.2.txt Normal file
View File

@ -0,0 +1,11 @@
A3XAI 0.1.7.2
Files changed
A3EAI.pbo update required: Yes
A3EAI_config.sqf update required: N/A, Config files are inside the A3XAI.pbo in this version.
Headless Client Files/Keys update required: N/A Headless client currently not functional.
A3EAI Client Addon update required: No
Note: The above requirements assume you are upgrading between each released version. If you have skipped any versions, it is highly recommended to update all installed parts.
[Fixed] Temporary fix for issues caused by Arma 3 1.52 update. Note that config files are inside the A3XAI.pbo in this version.

12
5. Changelogs/0.1.7.txt Normal file
View File

@ -0,0 +1,12 @@
A3XAI 0.1.7
Files changed
A3EAI.pbo update required: Yes
A3EAI_config.sqf update required: No, Last changed in 0.1.5
Headless Client Files/Keys update required: N/A, Strongly recommended to only use HC after Arma 3 1.52 update
A3EAI Client Addon update required: No
[Fixed] Fixed some errors related to defining of patrol radius for random spawns and vehicle groups.
[Changed] Increased AI spawning blacklist area around trader zones from 800m to 1000m.
[Changed] If no Exile trader markers are found, A3XAI will now also attempt to find the safezone triggers to auto-detect trader zones before resorting to manually defined locations.
[Changed] Some minor tidy-up of AI damage handlers.

34
5. Changelogs/0.2.0.txt Normal file
View File

@ -0,0 +1,34 @@
A3XAI 0.2.0
Files changed:
A3XAI.pbo update required: Yes
A3XAI_config.pbo update required: Yes, last changed: 0.2.0
Headless Client Files/Keys update required: Yes (Please see HC install guide for updated install steps)
A3XAI Client Addon update required: No
NEW INSTALL PROCEDURE REQUIRED!
IMPORTANT: If you already have A3XAI installed (before version 0.2.0), you must remove all A3XAI files from @ExileServer.
To install A3XAI:
1. Copy @A3XAI from "1. Installation Package" into your server's Arma 3 directory.
2. Modify your server's startup parameters to include @A3XAI. For example: -serverMod=@ExileServer;@A3XAI;
To configure A3XAI:
1. Unpack A3XAI_config.pbo (Recommended to use PBO Manager: http://www.armaholic.com/page.php?id=16369)
2. Edit config.cpp with a text editor (Recommended to use Notepad++: https://notepad-plus-plus.org/). Make your configuration changes.
3. Repack A3XAI_config.pbo
[Changed] Reworked configuration system (see above).
[Changed] Main configuration file (config.cpp) is now located in @A3XAI/A3XAI_config.pbo
[Changed] A3XAI_custom_defs.sqf is now located in @A3XAI/A3XAI_config.pbo
[Changed] A3XAI will now first look for trader areas based on the presence of Exile safezone triggers before checking for markers.
[Info] A3XAI HC is now functional again. Please see the updated HC install instructions for details.
[Info] A3XAI_config.pbo now contains all user-configurable settings. A3XAI.pbo will contain the code core and will not contain configurable settings.
[Fixed] AI vehicle patrol respawns were using the maximum respawn time for every respawn.
[Fixed] Pistol weapons were not generated in AI inventory on death.
[Changed] Dynamic spawn manager startup delay changed from 120 seconds (from server start) to 60 seconds.
[Added] "Vehicle Weapon Kill" frag type renamed to "Let it Rain" to match Exile's version, respect bonus changed from +400 to +150.
[Added] Added Exile frag types "Big Bird", "Chute > Chopper" for AI kills (Default: +600 respect for each)

11
5. Changelogs/0.2.0a.txt Normal file
View File

@ -0,0 +1,11 @@
A3XAI 0.2.0a
Files changed:
A3XAI.pbo update required: Yes
A3XAI_config.pbo update required: No, last changed: 0.2.0
Headless Client Files/Keys update required: No
A3XAI Client Addon update required: No
IMPORTANT: If you already have A3XAI installed (before version 0.2.0), you must remove all A3XAI files from @ExileServer.
[Fixed] Corrected wrong array reference for weaponOpticsList.

13
5. Changelogs/0.2.0b.txt Normal file
View File

@ -0,0 +1,13 @@
A3XAI 0.2.0b
Files changed:
A3XAI.pbo update required: Yes
A3XAI_config.pbo update required: No, last changed: 0.2.0
Headless Client Files/Keys update required: Yes
A3XAI Client Addon update required: No
IMPORTANT: If you already have A3XAI installed (before version 0.2.0), you must remove all A3XAI files from @ExileServer.
[Fixed] Fixed scripting error with A3XAI_vehCrewRegroup.sqf.
[Fixed] AI hostile status is now properly synchronized between server and HC. (Important for HC users!)
[Changed] Vehicle anti-stuck no longer attempts to unflip vehicles.

14
5. Changelogs/0.2.0c.txt Normal file
View File

@ -0,0 +1,14 @@
A3XAI 0.2.0c
Files changed:
A3XAI.pbo update required: Yes
A3XAI_config.pbo update required: No, last changed: 0.2.0
Headless Client Files/Keys update required: Yes
A3XAI Client Addon update required: No
IMPORTANT: If you already have A3XAI installed (before version 0.2.0), you must remove all A3XAI files from @ExileServer.
[Changed] No-aggro area check for AI vehicle groups is now based on position of the AI group leader and not the group's vehicle.
[Changed] AI group no-aggro status is now synced once upon ownership change between server and HC.
[Changed] Changed case of A3XAI filenames to lower case for Linux compatibility.
[Fixed] Fixed scripting error with AI vehicle MPKilled eventhandler.

18
5. Changelogs/0.2.1.txt Normal file
View File

@ -0,0 +1,18 @@
A3XAI 0.2.1
Files changed:
A3XAI.pbo update required: Yes
A3XAI_config.pbo update required: No, last changed: 0.2.0
Headless Client Files/Keys update required: Yes
A3XAI Client Addon update required: No
IMPORTANT: If you already have A3XAI installed (before version 0.2.0), you must remove all A3XAI files from @ExileServer.
[Changed] AI infantry and land vehicles now have a smaller minimum distance from trader zones before no-hostility/no-damage is triggered (Before: 900m. After: 500m)
[Changed] UGVs no longer take wheel damage, and no longer self-repair. This is a temporary change.
[Added] No hostility/no-damage will also be triggered for all AI if their current target is within 300m of a safezone.
[Fixed] Fixed bug where UAVs and UGVs could have their detection loop activated multiple times per waypoint.
[Fixed] Fixed bug where AI NVGs were always removed on death. Classname used for temporary NVGs is now NVGoggles_OPFOR.
[Removed] Disabled patrol radius enforcement for AI infantry due to some issues.
[Removed] Removed staticBlacklistLocations config option. Standard blacklist areas now cancel out nearby static spawns if at least one spawn position within 250m of the location is within a blacklisted area.
[Added] Additional error-checking for AI vehicle definitions

View File

@ -0,0 +1,17 @@
Important: For test builds, always update all components of A3XAI used by your server
- Added price limit for items generated using Exile loot tables. Items with price beyond this limit will be ignored (currently: code lock and safe are ignored with the default limit)
- Each component of dynamic classname system now has its own blacklist array
- Added option to disable collision damage to AI units by players (A3XAI_noCollisionDamage)
- Added setting to define amount of time abandoned AI vehicles remain ingame before being cleaned up (A3XAI_vehicleDespawnTime)
- Added setting to allow abandoned AI vehicles to be used by players (A3XAI_vehiclesAllowedForPlayers). Once a player enters a previously AI-owned vehicle, it will not be cleaned up unless destroyed. These vehicles will not persist after server restart.
- Increased default UAV/UGV detection chance from 50% to 80%
- Fixed AI loot searching (was previously searching for weapon holder type used by Epoch)
- AI radio messages now show up for players if at least one group member has a Radio (instead of sharing with vehicle crew)
- Greatly reduced nearest enemy check for AI vehicles to allow anti-stuck function to work as intended
- AI under "no aggro" state now revert to "aggro possible" state if one group member has been killed
- Player killer hunting behavior now only activates if group is under "aggro possible" state
- Reworked A3XAI cleanup to only monitor units and objects that it has spawned, instead of all units/objects.
- AI no longer get deleted if abandoning their vehicle within a no-aggro zone (Looking for potential consequences)
- All AI equipment is now assigned according to their level (higher level = higher tendency to be assigned higher level equipment)

View File

@ -0,0 +1,4 @@
Important: For test builds, always update all components of A3XAI used by your server
[Fixed] Issue introduced in Arma 3 1.50 that caused some legitimate AI kills to be incorrectly detected as collision kills.
[Changed] Vehicle waypoint blacklists no longer cause vehicle AI to become non-hostile.

View File

@ -0,0 +1,10 @@
Important: For test builds, always update all components of A3XAI used by your server
- Loot/player/vehicle searching area for infantry AI now confined within patrol radius.
- Dynamic/Random AI player-pursuing stops if target player is inside a blacklisted area.
- A3XAI will now attempt to unflip "flipped" vehicles (may not work incredibly well).
- Infantry AI that stray into an area designated as "no aggro" will be ordered to move towards their spawn area center.
- Fixed no aggro zones for vehicle AI.
- Maximum patrol radius set to 300m for infantry AI (no limit previously).
- Increased no-aggro area radius for trader areas from 600m to 650m.
- Reduced static/dynamic/random spawn radius for trader areas from 800m to 600m.

View File

@ -0,0 +1,5 @@
Important: For test builds, always update all components of A3XAI used by your server
- Fixed AI collision damage immunity
- Fixed AI gear purge on lethal collision damage
- Collision damage immunity now enabled by default

View File

@ -0,0 +1,5 @@
Important: For test builds, always update all components of A3XAI used by your server
- Further fixes for heli damage handler
- Fixes for Exile-style kill feed
- Death message notifications now use Exile's messaging system (Client addon no longer required for death messages)

View File

@ -0,0 +1,7 @@
Important: For test builds, always update all components of A3XAI used by your server
- "Remote area" category AI amounts changed from 1 min/2 max to 1 min/3 max.
- Antistuck function will now trigger for AI even if enemies within range, if AI group is within a "no aggro" zone.
- Lower fly-in height for AI air reinforcements.
- AI land vehicle groups that have abandoned their vehicles within a "no aggro" zone will move to the nearest acceptable area to patrol. If no acceptable area is found, units and vehicle will be deleted.
- Expanded "no aggro" zones around trader areas from 650m to 700m.

View File

@ -0,0 +1,3 @@
Important: For test builds, always update all components of A3XAI used by your server
- Fixed bug where "no aggro" mode was stuck on until next AI waypoint was reached.

View File

@ -0,0 +1,8 @@
Important: For test builds, always update all components of A3XAI used by your server
- Waypoints for infantry AI now avoid no-aggro zones.
- AI under "no-aggro" status are now immune from damage.
- Air reinforcement vehicles can now be recovered by players if A3XAI_releaseVehicleAllow is enabled.
- Fixed bug where AI vehicles would not be cleaned up if A3XAI_releaseVehicleAllow was enabled and player-claim timer expires.
- Added missing function to calculate alternate patrol position for vehicle AI that abandon their vehicle within a no-aggro zone.
- Increased no-aggro area radius around trader areas from 700m to 900m, spawning blacklist radius from 600m to 800m.

View File

@ -0,0 +1,3 @@
Important: For test builds, always update all components of A3XAI used by your server
- Fix scripting error in A3XAI_forceBehavior.sqf

View File

@ -0,0 +1,6 @@
Important: For test builds, always update all components of A3XAI used by your server
- Updated client addon to remove death message options (since client addon is no longer used for death messages).
- Fixed bug where legit kills were counted as collision kills and vice-versa.
- Fix for respect/money being cleared from vehicle kills. (Credits: Hangender: http://www.exilemod.com/topic/1082-temp-fix-vehicle-weapon-poptabrespect-glitch-fix/?do=findComment&comment=7034)
- Fix bug where death messages were still being shared with player's vehicle crew instead of group units.

Binary file not shown.

Binary file not shown.

View File

@ -1 +1,48 @@
# A3XAI
A3XAI - Current Version: 0.2.1
=====
Introduction
---
A3XAI is a roaming/ambient AI spawning addon for ArmA 3 Exile mod (http://www.exilemod.com/).
Installing A3XAI
---
IMPORTANT: As of A3XAI 0.2.0, the installation steps have changed. If you already have A3XAI installed (before version 0.2.0), you must remove all A3XAI files from @ExileServer.
To install A3XAI:
1. Copy @A3XAI from "1. Installation Package" into your server's Arma 3 directory.
2. Modify your server's startup parameters to include @A3XAI. For example: -serverMod=@ExileServer;@A3XAI;
To configure A3XAI:
1. Unpack A3XAI_config.pbo (Recommended to use PBO Manager: http://www.armaholic.com/page.php?id=16369)
2. Edit config.cpp with a text editor (Recommended to use Notepad++: https://notepad-plus-plus.org/). Make your configuration changes.
3. Repack A3XAI_config.pbo
A3XAI Features
---
* Automatically-generated static AI spawns: A3XAI will spawn an AI group at various named locations on the map if players are nearby.
* Dynamic AI spawns: A3XAI will create ambient threat in the area for each player by periodically spawning AI to create unexpected ambush encounters. These AI may occasionally seek out and hunt a player.
* Random AI spawns: A3XAI will create spawns that are randomly placed around the map and are periodically relocated. These spawns are preferentially created in named locations, but may be also created anywhere in the world.
* Air and land vehicle AI patrols: AI patrol in vehicles around the map, looking for players to hunt down. Cars and trucks may roam the road, and helicopters (or jets) search the skies for players. Helicopters with available cargo space may also occasionally deploy an AI group by parachute.
* UAV and UGV patrols: Currently an experimental feature in testing. UAVs and UGVs patrol around the map, and if armed, will engage detected players. UAVs and UGVs may also call for AI reinforcements.
* Custom AI spawns: Users may also define custom infantry and vehicle AI spawns at specified locations.
* Exile-style Respect rewards: Players gain Respect rewards for killing AI, along with bonus points for "special" kills such as long-distance kills or kill-streaks.
* Adaptive classname system: A3XAI reads Exile's trader tables to find items that AI can use, such as weapons and equipment. Users may also choose to manually specify classnames to use instead.
* Error-checking ability: A3XAI checks config files for errors upon startup. If errors are found, A3XAI will use backup settings and continue operating as normal.
* Classname verification: A3XAI filters out invalid or banned classnames and prevents them from being used by AI.
* Universal map support: A3XAI supports any and every map for Arma 3 without changing any settings.
* Plug-and-play installation: Installing and upgrading A3XAI is a simple copy and paste job and does not require modifying any Exile files.
* Easy configuration: A single configuration file contains all settings for A3XAI. This config file is external to the A3XAI pbo, so configuration changes can be made without ever having to unpack or repack the pbo file.
* Headless Client support: Offload AI calculations from your dedicated server to a headless client to improve server performance. The A3XAI HC can be started/stopped/restarted any time without causing problems.
Support A3XAI
---
if you would like to support development of A3XAI, you can contribute to A3XAI with a donation by clicking on the Donate Icon below. Thank you for your support!
[![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9PESMPV4SQFDJ)
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

View File

@ -0,0 +1,15 @@
Listed in absolutely no particular order:
1. Prerelease Build Test Volunteers:
Darth Rogue
Dirty Sanchez
Tobias Solem
Dobrowney
Skare
2. Other works used:
BIN_taskPatrol: BIS, Binesi, Wolffy.au
SHK_Pos: Shuko
Code excerpts used to support Exile features: Exile Mod devs @ http://www.exilemod.com/
If you have contributed your effort or works towards development of A3XAI and were not credited, please notify me ASAP. Username on Exile mod forums: http://www.exilemod.com/profile/66-face/