//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.

Change editing modes using the scroll-wheel options.

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

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 '; }; };