This commit is contained in:
second_coming 2016-08-05 15:23:45 +01:00
parent ed4fb7a8d9
commit 022b1f885b
14 changed files with 443 additions and 155 deletions

View File

@ -7,7 +7,7 @@ An AI spawner and monitor to be used in conjunction with DMS and will not work w
http://www.exilemod.com/topic/61-dms-defents-mission-system/ http://www.exilemod.com/topic/61-dms-defents-mission-system/
Download the pbo version here: Download the pbo version here:
https://www.dropbox.com/sh/00y7gqw0da9ugfj/AAD0sKAhupupaAjuPF2T7UIwa?dl=0 https://www.dropbox.com/s/4c2dwwa6v86qhx9/a3_exile_occupation.pbo?dl=0
To install place the pbo into the @ExileServer/addons folder To install place the pbo into the @ExileServer/addons folder

View File

@ -1,3 +1,12 @@
=================================================================================
V56 (05-08-2016)
=================================================================================
config.sqf tidied up
Added the option to specify patrol locations and radius for roaming ai (land/sky/sea)
Updated the DMS anti freeze setting to work with the latest DMS version to stop
roaming vehicles from freezing
Added more info to the process reporter log entries
================================================================================= =================================================================================
V55 (27-07-2016) V55 (27-07-2016)
================================================================================= =================================================================================

View File

@ -4,7 +4,7 @@ class CfgPatches
units[] = {}; units[] = {};
weapons[] = {}; weapons[] = {};
requiredVersion = 0.1; requiredVersion = 0.1;
a3_exile_occupation_version = "v55 (27-07-2016)"; a3_exile_occupation_version = "V56 (05-08-2016)";
requiredAddons[] = {"a3_dms"}; requiredAddons[] = {"a3_dms"};
author[]= {"second_coming"}; author[]= {"second_coming"};
}; };

View File

@ -13,12 +13,11 @@
// Shared Config for each occupation monitor // Shared Config for each occupation monitor
SC_debug = false; // set to true to turn on debug features (not recommended for live servers)
SC_debug = false; // set to true to turn on debug features (not for live servers)
SC_useApexClasses = true; // true if you want to use the Apex class list over rides, false to use vanilla Arma gear SC_useApexClasses = true; // true if you want to use the Apex class list over rides, false to use vanilla Arma gear
SC_useMapOverrides = true; // set to true to enable over riding options per map (see the bottom of this file for examples) SC_useMapOverrides = true; // set to true to enable over riding options per map (see the bottom of this file for examples)
SC_extendedLogging = false; // set to true for additional logging SC_extendedLogging = false; // set to true for additional logging
SC_processReporter = true; // log the a list of active server processes every 60 seconds (useful for debugging server problems)
SC_infiSTAR_log = true; // true Use infiSTAR logging, false logs to server rpt SC_infiSTAR_log = true; // true Use infiSTAR logging, false logs to server rpt
SC_maxAIcount = 100; // the maximum amount of AI, if the AI count is above this then additional AI won't spawn SC_maxAIcount = 100; // the maximum amount of AI, if the AI count is above this then additional AI won't spawn
SC_mapMarkers = false; // Place map markers at the occupied areas (occupyPlaces and occupyMilitary only) true/false SC_mapMarkers = false; // Place map markers at the occupied areas (occupyPlaces and occupyMilitary only) true/false
@ -27,86 +26,79 @@ SC_scaleAI = 10; // any more than _scaleAI players on the server and _
SC_removeUserMapMarkers = true; // true to delete map markers placed by players every 10 seconds SC_removeUserMapMarkers = true; // true to delete map markers placed by players every 10 seconds
SC_fastNights = true; // true if you want night time to go faster than daytime
SC_fastNightsStarts = 18; // Start fast nights at this hour (24 hour clock) eg. 18 for 6pm
SC_fastNightsMultiplierNight = 24; // the time multiplier to use at night (12 = 12x speed)
SC_fastNightsEnds = 6; // End fast nights at this hour (24 hour clock) eg. 6 for 6am
SC_fastNightsMultiplierDay = 4; // the time multiplier to use during daylight hours (4 = 4x speed)
SC_useWaypoints = true; // When spawning AI create waypoints to make them enter buildings (can affect performance when the AI is spawned and the waypoints are calculated)
// Distance limits for selecting safe places to spawn AI // Distance limits for selecting safe places to spawn AI
SC_minDistanceToSpawnZones = 1000; // Minimum distance in metres to the nearest spawn zone SC_minDistanceToSpawnZones = 1000; // Minimum distance in metres to the nearest spawn zone
SC_minDistanceToTraders = 1000; // Minimum distance in metres to the nearest trader zone SC_minDistanceToTraders = 1000; // Minimum distance in metres to the nearest trader zone
SC_minDistanceToTerritory = 500; // Minimum distance in metres to the nearest player territory SC_minDistanceToTerritory = 500; // Minimum distance in metres to the nearest player territory
SC_minDistanceToPlayer = 400; // Minimum distance in metres to the nearest player SC_minDistanceToPlayer = 400; // Minimum distance in metres to the nearest player
SC_useWaypoints = true; // When spawning AI create waypoints to make them enter buildings (can affect performance when the AI is spawned and the waypoints are calculated)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Turn Modules On or Off (can be overridden in the map overrides section)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_processReporter = true; // log the a list of active server processes every 60 seconds (useful for debugging server problems)
SC_fastNights = true; // true if you want night time to go faster than daytime
SC_occupyPlaces = true; // true if you want villages,towns,cities patrolled by bandits
SC_occupyTraders = true; // true if you want to create trader camps at positions specified in SC_occupyTraderDetails
SC_occupyStatic = false; // true if you want to add AI in specific locations
SC_occupyTransport = true; // true if you want pubic transport (travels between traders)
SC_occupyLootCrates = true; // true if you want to have random loot crates with guards
SC_occupyRandomSpawn = false; // (WORK IN PROGRESS, NOT WORKING YET) true if you want random spawning AI that hunt for nearby players SC_occupyRandomSpawn = false; // (WORK IN PROGRESS, NOT WORKING YET) true if you want random spawning AI that hunt for nearby players
SC_occupyMilitary = false; // true if you want military buildings patrolled
SC_occupyVehicle = true; // true if you want to have roaming AI land vehicles
SC_occupySky = true; // true if you want to have roaming AI helis
SC_occupySea = false; // true if you want to have roaming AI boats
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Fast nights Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_fastNightsStarts = 18; // Start fast nights at this hour (24 hour clock) eg. 18 for 6pm
SC_fastNightsMultiplierNight = 24; // the time multiplier to use at night (12 = 12x speed)
SC_fastNightsEnds = 6; // End fast nights at this hour (24 hour clock) eg. 6 for 6am
SC_fastNightsMultiplierDay = 4; // the time multiplier to use during daylight hours (4 = 4x speed)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Random Spawn Setup (not working yet)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_randomSpawnMinPlayers = 1; // Minimum number of players to be online before random spawning AI can spawn SC_randomSpawnMinPlayers = 1; // Minimum number of players to be online before random spawning AI can spawn
SC_randomSpawnMaxAI = 5; // Maximum amount of random AI groups allowed at any time SC_randomSpawnMaxAI = 5; // Maximum amount of random AI groups allowed at any time
SC_randomSpawnIgnoreCount = true; // true if you want spawn random AI groups regardless of overall AI count (they still count towards the total though) SC_randomSpawnIgnoreCount = true; // true if you want spawn random AI groups regardless of overall AI count (they still count towards the total though)
SC_occupyPlaces = true; // true if you want villages,towns,cities patrolled by bandits /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Occupy Places Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_occupyVehicle = true; // true if you want to have roaming AI vehicles
SC_occupyVehicleIgnoreCount = true; // true if you want spawn vehicles regardless of overall AI count
SC_occupyVehiclesLocked = false; // true if AI vehicles to stay locked until all the linked AI are dead
SC_occupyTraders = true; // (WORK IN PROGRESS) true if you want to create trader camps at positions specified in SC_occupyTraderDetails
SC_occupyTraderDetails = [
//["Tanoa","Lifou Traders",[7317,7217,0],"trader1.sqf",true],
//["Tanoa","Lijnhaven Traders",[11580,2051,0],"trader1.sqf",true],
["Napf","Hafen Traders",[9286,17606,0],"trader1.sqf",true]
]; //["mapname","Name",[x,y,z],"filename",true] trader name, location, safezone true/false
SC_SurvivorsChance = 20; // chance in % to spawn survivors instead of bandits (for places and land vehicles)
SC_occupyPlacesSurvivors = true; // true if you want a chance to spawn survivor AI as well as bandits (SC_occupyPlaces must be true to use this option) SC_occupyPlacesSurvivors = true; // true if you want a chance to spawn survivor AI as well as bandits (SC_occupyPlaces must be true to use this option)
SC_occupyVehicleSurvivors = false; // true if you want a chance to spawn survivor AI as well as bandits (SC_occupyVehicle must be true to use this option)
SC_SurvivorsFriendly = true; // true if you want survivors to be friendly to players (until they are attacked by players)
// false if you want survivors to be aggressive to players
// Possible equipment for survivor AI to spawn with /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// spawning survivors without vests or backpacks will result in them having no ammunition // Trader Base Setup
SC_SurvivorUniforms = ["Exile_Uniform_BambiOverall"]; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_SurvivorVests = ["V_BandollierB_blk","V_BandollierB_cbr","V_BandollierB_khk","V_BandollierB_oli"];
SC_SurvivorHeadgear = [];
SC_SurvivorWeapon = ["arifle_MXC_F","arifle_TRG20_F"];
SC_SurvivorWeaponAttachments = [];
SC_SurvivorMagazines = ["Exile_Item_Vishpirin","Exile_Item_Bandage"];
SC_SurvivorPistol = ["hgun_Rook40_F"];
SC_SurvivorPistolAttachments = [];
SC_SurvivorAssignedItems = ["ItemMap","ItemCompass","ItemRadio","ItemWatch","Exile_Item_XM8"]; // all these items will be added
SC_SurvivorLauncher = [];
SC_SurvivorBackpack = [];
// Possible equipment for bandit AI to spawn with SC_occupyTraderDetails = [
// spawning bandits without vests or backpacks will result in them having no ammunition //["Tanoa","Lifou Traders",[7317,7217,0],"trader1.sqf",true],
SC_BanditUniforms = ["U_IG_Guerilla1_1","U_IG_Guerilla2_1","U_IG_Guerilla2_2","U_IG_Guerilla2_3","U_IG_Guerilla3_1","U_BG_Guerilla2_1","U_IG_Guerilla3_2","U_BG_Guerrilla_6_1","U_BG_Guerilla1_1","U_BG_Guerilla2_2","U_BG_Guerilla2_3","U_BG_Guerilla3_1"]; //["Tanoa","Lijnhaven Traders",[11580,2051,0],"trader1.sqf",true],
SC_BanditVests = ["V_BandollierB_blk","V_BandollierB_cbr","V_BandollierB_khk","V_BandollierB_oli"]; ["Napf","Hafen Traders",[9286,17606,0],"trader1.sqf",true]
SC_BanditHeadgear = ["H_Shemag_khk","H_Shemag_olive","H_Shemag_olive_hs","H_Shemag_tan","H_ShemagOpen_khk","H_ShemagOpen_tan"]; ]; //["mapname","Name",[x,y,z],"filename",true] trader name, location, safezone true/false
SC_BanditWeapon = ["LMG_Zafir_F","arifle_Katiba_C_F","arifle_Katiba_F","arifle_Katiba_GL_F","arifle_MXC_Black_F","arifle_MXC_F","arifle_TRG20_F","arifle_TRG21_F","arifle_TRG21_GL_F"];
SC_BanditWeaponAttachments = []; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_BanditMagazines = ["Exile_Item_InstaDoc","Exile_Item_Vishpirin","Exile_Item_Bandage","Exile_Item_DuctTape","Exile_Item_PlasticBottleFreshWater","Exile_Item_Energydrink","Exile_Item_EMRE","Exile_Item_Cheathas","Exile_Item_Noodles","Exile_Item_BBQSandwich","Exile_Item_Catfood"]; // Occupy Static Setup
SC_BanditPistol = ["hgun_ACPC2_F","hgun_P07_F","hgun_Pistol_heavy_01_F","hgun_Pistol_heavy_02_F","hgun_Rook40_F"]; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_BanditPistolAttachments = [];
SC_BanditAssignedItems = ["ItemMap","ItemCompass","ItemRadio","ItemWatch"]; // all these items will be added
SC_BanditLauncher = [];
SC_BanditBackpack = ["B_HuntingBackpack","B_Kitbag_cbr","B_Kitbag_mcamo","B_Kitbag_sgg","B_OutdoorPack_blk","B_OutdoorPack_blu","B_OutdoorPack_tan","B_TacticalPack_blk","B_TacticalPack_mcamo","B_TacticalPack_ocamo","B_TacticalPack_oli","B_TacticalPack_rgr"];
SC_staticBandits = [ //[[pos],ai count,radius,search buildings]
SC_occupyStatic = false; // true if you want to add AI in specific locations
SC_staticBandits = [ //[[pos],ai count,radius,search buildings]
]; ];
SC_staticSurvivors = [ //[[pos],ai count,radius,search buildings] SC_staticSurvivors = [ //[[pos],ai count,radius,search buildings]
//[[3770,8791,0],8,250,true] //[[3770,8791,0],8,250,true]
]; ];
SC_occupySky = true; // true if you want to have roaming AI helis /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_occupySea = false; // true if you want to have roaming AI boats // Public Transport Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_occupyTransport = true; // true if you want pubic transport (travels between traders)
SC_colourTransport = true; // true if you want the public transport coloured SC_colourTransport = true; // true if you want the public transport coloured
SC_secureTransport = true; // true if you want the public transport and pilot to be indestructible SC_secureTransport = true; // true if you want the public transport and pilot to be indestructible
SC_occupyTransportClass = ["Exile_Chopper_Hummingbird_Green"]; // to always use the same vehicle, specify one option only SC_occupyTransportClass = ["Exile_Chopper_Hummingbird_Green"]; // to always use the same vehicle, specify one option only
@ -128,8 +120,11 @@ SC_TransportLandWaypoints = [
[4000,4000,0] [4000,4000,0]
]; ];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Loot Crate Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_occupyLootCrates = true; // true if you want to have random loot crates with guards
SC_occupyLootCratesStatic = false; // true if you want to have random loot crates spawn in pre-defined locations set in SC_occupyLootCratesLocations SC_occupyLootCratesStatic = false; // true if you want to have random loot crates spawn in pre-defined locations set in SC_occupyLootCratesLocations
SC_occupyLootCratesLocations = [ SC_occupyLootCratesLocations = [
[1000,1000,0], [1000,1000,0],
@ -140,7 +135,7 @@ SC_occupyLootCratesLocations = [
SC_numberofLootCrates = 6; // if SC_occupyLootCrates = true spawn this many loot crates (overrided below for Namalsk) SC_numberofLootCrates = 6; // if SC_occupyLootCrates = true spawn this many loot crates (overrided below for Namalsk)
SC_LootCrateGuards = 3; // number of AI to spawn at each crate SC_LootCrateGuards = 3; // number of AI to spawn at each crate
SC_LootCrateGuardsRandomize = true; // Use a random number of guards up to a maximum = SC_LootCrateGuards (so between 1 and SC_LootCrateGuards) SC_LootCrateGuardsRandomize = true; // Use a random number of guards up to a maximum = SC_LootCrateGuards (so between 1 and SC_LootCrateGuards)
SC_occupyLootCratesMarkers = true; // true if you want to have markers on the loot crate spawns SC_occupyLootCratesMarkers = true; // true if you want to have markers on the loot crate spawns
SC_ropeAttach = false; // Allow lootcrates to be airlifted (for SC_occupyLootCrates and SC_occupyHeliCrashes) SC_ropeAttach = false; // Allow lootcrates to be airlifted (for SC_occupyLootCrates and SC_occupyHeliCrashes)
@ -174,6 +169,10 @@ SC_LootCrateItems = [
["Exile_Item_MetalScrews",0,5] ["Exile_Item_MetalScrews",0,5]
]; ];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Blacklisted Zones
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_blackListedAreas = [ SC_blackListedAreas = [
[[3810,8887,0], 500, "Chernarus"], // Vybor Occupation DMS Static Mission [[3810,8887,0], 500, "Chernarus"], // Vybor Occupation DMS Static Mission
[[12571,14337,0], 500, "Altis"], // Neochori Occupation DMS Static Mission [[12571,14337,0], 500, "Altis"], // Neochori Occupation DMS Static Mission
@ -184,6 +183,9 @@ SC_blackListedAreas = [
[[7228,6986,0], 250, "Tanoa"] // Tanoa Airport [[7228,6986,0], 250, "Tanoa"] // Tanoa Airport
]; ];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Heli Crash Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_occupyHeliCrashes = true; // true if you want to have Dayz style helicrashes SC_occupyHeliCrashes = true; // true if you want to have Dayz style helicrashes
SC_numberofHeliCrashesFire = true; // true if you want the crash on fire, false if you just want smoke SC_numberofHeliCrashesFire = true; // true if you want the crash on fire, false if you just want smoke
@ -192,6 +194,7 @@ SC_numberofHeliCrashes = 5; // if SC_occupyHeliCrashes
// Array of possible common items to go in heli crash crates ["classname",fixed amount,random amount] NOT INCLUDING WEAPONS // Array of possible common items to go in heli crash crates ["classname",fixed amount,random amount] NOT INCLUDING WEAPONS
// ["HandGrenade",0,2] this example would add between 0 and 2 HandGrenade to the crate (fixed 0 plus 0-2 random) // ["HandGrenade",0,2] this example would add between 0 and 2 HandGrenade to the crate (fixed 0 plus 0-2 random)
// to add a fixed amount make the second number 0 // to add a fixed amount make the second number 0
SC_HeliCrashItems = [ SC_HeliCrashItems = [
["B_Parachute",1,1], ["B_Parachute",1,1],
["H_CrewHelmetHeli_B",1,1], ["H_CrewHelmetHeli_B",1,1],
@ -215,15 +218,36 @@ SC_HeliCrashWeapons = [
"srifle_DMR_05_hex_F" "srifle_DMR_05_hex_F"
]; ];
SC_HeliCrashWeaponsAmount = [1,3]; // [fixed amount to add, random amount to add] SC_HeliCrashWeaponsAmount = [1,3]; // [fixed amount to add, random amount to add]
SC_HeliCrashMagazinesAmount = [2,2]; // [fixed amount to add, random amount to add] SC_HeliCrashMagazinesAmount = [2,2]; // [fixed amount to add, random amount to add]
SC_minimumCrewAmount = 2; // Maximum amount of AI allowed in a vehicle (applies to ground, air and sea vehicles) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_maximumCrewAmount = 6; // Maximum amount of AI allowed in a vehicle (applies to ground, air and sea vehicles) // Roaming Vehicle Setup - (applies to ground, air and sea vehicles)
// (essential crew like drivers and gunners will always spawn regardless of these settings) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Settings for roaming ground vehicle AI SC_minimumCrewAmount = 2; // Maximum amount of AI allowed in a vehicle
SC_maxNumberofVehicles = 4; SC_maximumCrewAmount = 6; // Maximum amount of AI allowed in a vehicle
// (essential crew like drivers and gunners will always spawn regardless of these settings)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Roaming Land Vehicle Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_maxNumberofVehicles = 4; // How many roaming vehicles to spawn
SC_occupyVehicleIgnoreCount = true; // true if you want spawn vehicles regardless of overall AI count
SC_occupyVehiclesLocked = false; // true if AI vehicles to stay locked until all the linked AI are dead
SC_occupyVehicleSurvivors = false; // true if you want a chance to spawn survivor AI as well as bandits (SC_occupyVehicle must be true to use this option)
SC_occupyVehicleUseFixedPos = false; // True if you want to specify the patrol positions and radius of the area to patrol / false for random
// if you set SC_maxNumberofVehicles higher than the number of static positions, the remainder will be random
// they will also ignore any blacklisted areas
SC_occupyVehicleFixedPositions = [
[[4434,2892,0],2000,"Tanoa"], // [[x,y,z],radius,"mapname"] leave no spaces between
[[2238,6717,0],2000,"Tanoa"],
[[8197,9081,0],3000,"Tanoa"],
[[13074,11817,0],3000,"Tanoa"]
];
// Array of arrays of ground vehicles which can be used by AI patrols (the number next to next vehicle is the maximum amount of that class allowed, 0 for no limit) // Array of arrays of ground vehicles which can be used by AI patrols (the number next to next vehicle is the maximum amount of that class allowed, 0 for no limit)
SC_VehicleClassToUse = [ SC_VehicleClassToUse = [
@ -240,11 +264,30 @@ SC_VehicleClassToUseRare = [
["Exile_Car_Tempest",1] ["Exile_Car_Tempest",1]
]; ];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Roaming Aircraft Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Settings for roaming airborne AI (non armed helis will just fly around) // Settings for roaming airborne AI (non armed helis will just fly around)
SC_maxNumberofHelis = 1; SC_maxNumberofHelis = 1;
// Array of aircraft which can be used by AI patrols (the number next to next vehicle is the maximum amount of that class allowed, 0 for no limit) // Array of aircraft which can be used by AI patrols (the number next to next vehicle is the maximum amount of that class allowed, 0 for no limit)
SC_HeliClassToUse = [ ["Exile_Chopper_Huey_Armed_Green",0] ]; SC_HeliClassToUse = [ ["Exile_Chopper_Huey_Armed_Green",0] ];
SC_occupyHeliUseFixedPos = false; // True if you want to specify the patrol positions and radius of the area to patrol / false for random
// if you set SC_maxNumberofHelis higher than the number of static positions, the remainder will be random
// they will also ignore any blacklisted areas
SC_occupyHeliFixedPositions = [
[[4434,2892,400],2000,"Tanoa"], // [[x,y,z],radius,"mapname"] leave no spaces between
[[2238,6717,400],2000,"Tanoa"],
[[8197,9081,400],3000,"Tanoa"],
[[13074,11817,400],3000,"Tanoa"]
];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Roaming Boats Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Settings for roaming seaborne AI (non armed boats will just sail around) // Settings for roaming seaborne AI (non armed boats will just sail around)
SC_maxNumberofBoats = 1; SC_maxNumberofBoats = 1;
@ -256,17 +299,21 @@ SC_BoatClassToUse = [
["O_Boat_Transport_01_F",0], ["O_Boat_Transport_01_F",0],
["Exile_Boat_MotorBoat_Police",1] ["Exile_Boat_MotorBoat_Police",1]
]; ];
SC_useRealNames = true; SC_occupyBoatUseFixedPos = false; // True if you want to specify the patrol positions and radius of the area to patrol / false for random
// Arrays of names used to generate names for AI
SC_SurvivorFirstNames = ["John","Dave","Steve","Rob","Richard","Bob","Andrew","Nick","Adrian","Mark","Adam","Will","Graham"];
SC_SurvivorLastNames = ["Smith","Jones","Davids","Johnson","Jobs","Andrews","White","Brown","Taylor","Walker","Williams","Clarke","Jackson","Woods"];
SC_BanditFirstNames = ["Alex","Nikita","George","Daniel","Adam","Alexander","Sasha","Sergey","Dmitry","Anton","Jakub","Vlad","Maxim","Oleg","Denis","Wojtek"];
SC_BanditLastNames = ["Dimitrov","Petrov","Horvat","Novak","Dvorak","Vesely","Horak","Hansen","Larsen","Tamm","Ivanov","Pavlov","Virtanen"];
// if you set SC_maxNumberofHelis higher than the number of static positions, the remainder will be random
// they will also ignore any blacklisted areas
SC_occupyBoatFixedPositions = [
[[200,200,0],2000,"Tanoa"], // [[x,y,z],radius,"mapname"] leave no spaces between
[[400,400,0],2000,"Tanoa"],
[[14000,5000,0],3000,"Tanoa"],
[[16000,16000,0],3000,"Tanoa"]
];
SC_occupyMilitary = true; // true if you want military buildings patrolled /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Occupy Military Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Array of buildings to add military patrols to // Array of buildings to add military patrols to
SC_buildings = [ "Land_TentHangar_V1_F","Land_Hangar_F","Land_Airport_Tower_F","Land_Cargo_House_V1_F", SC_buildings = [ "Land_TentHangar_V1_F","Land_Hangar_F","Land_Airport_Tower_F","Land_Cargo_House_V1_F",
@ -291,7 +338,56 @@ SC_buildings = [ "Land_TentHangar_V1_F","Land_Hangar_F","Land_Ai
"Land_Cargo_Tower_V4_F" "Land_Cargo_Tower_V4_F"
]; ];
// namalsk specific settings (if you want to override settings for specific maps if you run multiple servers) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// AI Setup (used in multiple modules)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_useRealNames = true;
// Arrays of names used to generate names for AI
SC_SurvivorFirstNames = ["John","Dave","Steve","Rob","Richard","Bob","Andrew","Nick","Adrian","Mark","Adam","Will","Graham"];
SC_SurvivorLastNames = ["Smith","Jones","Davids","Johnson","Jobs","Andrews","White","Brown","Taylor","Walker","Williams","Clarke","Jackson","Woods"];
SC_BanditFirstNames = ["Alex","Nikita","George","Daniel","Adam","Alexander","Sasha","Sergey","Dmitry","Anton","Jakub","Vlad","Maxim","Oleg","Denis","Wojtek"];
SC_BanditLastNames = ["Dimitrov","Petrov","Horvat","Novak","Dvorak","Vesely","Horak","Hansen","Larsen","Tamm","Ivanov","Pavlov","Virtanen"];
SC_SurvivorsChance = 20; // chance in % to spawn survivors instead of bandits (for places and land vehicles)
SC_SurvivorsFriendly = true; // true if you want survivors to be friendly to players (until they are attacked by players)
// false if you want survivors to be aggressive to players
// Possible equipment for survivor AI to spawn with
// spawning survivors without vests or backpacks will result in them having no ammunition
SC_SurvivorUniforms = ["Exile_Uniform_BambiOverall"];
SC_SurvivorVests = ["V_BandollierB_blk","V_BandollierB_cbr","V_BandollierB_khk","V_BandollierB_oli"];
SC_SurvivorHeadgear = [];
SC_SurvivorWeapon = ["arifle_MXC_F","arifle_TRG20_F"];
SC_SurvivorWeaponAttachments = [];
SC_SurvivorMagazines = ["Exile_Item_Vishpirin","Exile_Item_Bandage"];
SC_SurvivorPistol = ["hgun_Rook40_F"];
SC_SurvivorPistolAttachments = [];
SC_SurvivorAssignedItems = ["ItemMap","ItemCompass","ItemRadio","ItemWatch","Exile_Item_XM8"]; // all these items will be added
SC_SurvivorLauncher = [];
SC_SurvivorBackpack = [];
// Possible equipment for bandit AI to spawn with
// spawning bandits without vests or backpacks will result in them having no ammunition
SC_BanditUniforms = ["U_IG_Guerilla1_1","U_IG_Guerilla2_1","U_IG_Guerilla2_2","U_IG_Guerilla2_3","U_IG_Guerilla3_1","U_BG_Guerilla2_1","U_IG_Guerilla3_2","U_BG_Guerrilla_6_1","U_BG_Guerilla1_1","U_BG_Guerilla2_2","U_BG_Guerilla2_3","U_BG_Guerilla3_1"];
SC_BanditVests = ["V_BandollierB_blk","V_BandollierB_cbr","V_BandollierB_khk","V_BandollierB_oli"];
SC_BanditHeadgear = ["H_Shemag_khk","H_Shemag_olive","H_Shemag_olive_hs","H_Shemag_tan","H_ShemagOpen_khk","H_ShemagOpen_tan"];
SC_BanditWeapon = ["LMG_Zafir_F","arifle_Katiba_C_F","arifle_Katiba_F","arifle_Katiba_GL_F","arifle_MXC_Black_F","arifle_MXC_F","arifle_TRG20_F","arifle_TRG21_F","arifle_TRG21_GL_F"];
SC_BanditWeaponAttachments = [];
SC_BanditMagazines = ["Exile_Item_InstaDoc","Exile_Item_Vishpirin","Exile_Item_Bandage","Exile_Item_DuctTape","Exile_Item_PlasticBottleFreshWater","Exile_Item_Energydrink","Exile_Item_EMRE","Exile_Item_Cheathas","Exile_Item_Noodles","Exile_Item_BBQSandwich","Exile_Item_Catfood"];
SC_BanditPistol = ["hgun_ACPC2_F","hgun_P07_F","hgun_Pistol_heavy_01_F","hgun_Pistol_heavy_02_F","hgun_Rook40_F"];
SC_BanditPistolAttachments = [];
SC_BanditAssignedItems = ["ItemMap","ItemCompass","ItemRadio","ItemWatch"]; // all these items will be added
SC_BanditLauncher = [];
SC_BanditBackpack = ["B_HuntingBackpack","B_Kitbag_cbr","B_Kitbag_mcamo","B_Kitbag_sgg","B_OutdoorPack_blk","B_OutdoorPack_blu","B_OutdoorPack_tan","B_TacticalPack_blk","B_TacticalPack_mcamo","B_TacticalPack_ocamo","B_TacticalPack_oli","B_TacticalPack_rgr"];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Map Specific Overrides
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (worldName == 'Namalsk' AND SC_useMapOverrides) then if (worldName == 'Namalsk' AND SC_useMapOverrides) then
{ {
SC_maxAIcount = 80; SC_maxAIcount = 80;
@ -303,20 +399,28 @@ if (worldName == 'Namalsk' AND SC_useMapOverrides) then
SC_occupyTransportClass = "Exile_Car_LandRover_Urban"; // the ikarus bus gets stuck on Namalsk SC_occupyTransportClass = "Exile_Car_LandRover_Urban"; // the ikarus bus gets stuck on Namalsk
}; };
// Napf specific settings (if you want to override settings for specific maps if you run multiple servers)
if (worldName == 'Napf' AND SC_useMapOverrides) then if (worldName == 'Napf' AND SC_useMapOverrides) then
{ {
//SC_maxAIcount = 160;
//SC_maxNumberofVehicles = 5;
};
if (worldName == 'Chernarus' AND SC_useMapOverrides) then
{
//SC_maxAIcount = 160;
//SC_maxNumberofVehicles = 5;
}; };
// Napf specific settings (if you want to override settings for specific maps if you run multiple servers)
if (worldName == 'Tanoa' AND SC_useMapOverrides) then if (worldName == 'Tanoa' AND SC_useMapOverrides) then
{ {
SC_useApexClasses = true; SC_useApexClasses = true;
SC_maxAIcount = 80; SC_maxAIcount = 80;
}; };
// Overrides to use Apex weapons, gear and vehicles if SC_useApexClasses = true /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Apex Specific Settings (only used if SC_useApexClasses = true)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(SC_useApexClasses) then if(SC_useApexClasses) then
{ {
SC_BanditWeapon = [ "arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MX_SW_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F","arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F", SC_BanditWeapon = [ "arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MX_SW_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F","arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F",
@ -337,27 +441,34 @@ if(SC_useApexClasses) then
]; ];
}; };
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Debug Settings (only used if SC_debug = true)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (SC_debug) then if (SC_debug) then
{ {
SC_extendedLogging = true; SC_extendedLogging = true;
SC_processReporter = true; SC_processReporter = true;
SC_mapMarkers = true; SC_mapMarkers = false;
SC_occupyPlaces = true; SC_occupyPlaces = false;
SC_occupyVehicle = true; SC_occupyVehicle = true;
SC_occupyMilitary = true; SC_occupyMilitary = false;
SC_occupyStatic = true; SC_occupyStatic = false;
SC_occupySky = true; SC_occupySky = true;
SC_occupySea = false; SC_occupySea = true;
SC_occupyTransport = true; SC_occupyTransport = false;
SC_occupyLootCrates = true; SC_occupyLootCrates = false;
SC_occupyHeliCrashes = true; SC_occupyHeliCrashes = false;
SC_maxNumberofVehicles = 4; SC_maxAIcount = 160;
SC_maxNumberofBoats = 1; SC_maxNumberofVehicles = 5;
SC_maxNumberofHelis = 1; SC_maxNumberofBoats = 5;
SC_maxNumberofHelis = 5;
}; };
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Don't alter anything below this point, unless you want your server to explode :) // Don't alter anything below this point, unless you want your server to explode :)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(!SC_SurvivorsFriendly) then if(!SC_SurvivorsFriendly) then
{ {
CIVILIAN setFriend[RESISTANCE,0]; CIVILIAN setFriend[RESISTANCE,0];
@ -381,6 +492,17 @@ SC_liveBoatsArray = [];
SC_liveStaticGroups = []; SC_liveStaticGroups = [];
SC_transportArray = []; SC_transportArray = [];
// Remove spawn locations for roaming vehicles that aren't for this map
_occupyVehicleFixedPositions = [];
{
_currentWorld = _x select 2;
if(worldName == _currentWorld) then
{
_occupyVehicleFixedPositions pushback _x;
};
}forEach SC_occupyVehicleFixedPositions;
SC_occupyVehicleFixedPositions = _occupyVehicleFixedPositions;
publicVariable "SC_liveVehicles"; publicVariable "SC_liveVehicles";
publicVariable "SC_liveVehiclesArray"; publicVariable "SC_liveVehiclesArray";
publicVariable "SC_liveHelis"; publicVariable "SC_liveHelis";

View File

@ -11,7 +11,7 @@ if (SC_occupyLootCratesMarkers) then
if(!isNil "_pos") then if(!isNil "_pos") then
{ {
if([_pos, 15] call ExileClient_util_world_isAlivePlayerInRange) then if([_pos, 5] call ExileClient_util_world_isAlivePlayerInRange) then
{ {
deleteMarker _markerName; deleteMarker _markerName;
_logDetail = format ["[OCCUPATION:LootCrates]:: marker %1 removed at %2",_markerName,time]; _logDetail = format ["[OCCUPATION:LootCrates]:: marker %1 removed at %2",_markerName,time];

View File

@ -95,7 +95,7 @@ if(_heliDamage > 0.7 && _damagedEssentials > 0) then
_heli setVehicleLock "UNLOCKED"; _heli setVehicleLock "UNLOCKED";
_target = _this select 1; _target = _this select 1;
_group = group _heli; _group = group _heli;
_group reveal [_target,2.5];
_destination = position _target; _destination = position _target;
_heli land "LAND"; _heli land "LAND";
@ -105,6 +105,7 @@ if(_heliDamage > 0.7 && _damagedEssentials > 0) then
} forEach (fullCrew _heli); } forEach (fullCrew _heli);
_group2 allowFleeing 0; _group2 allowFleeing 0;
_group2 reveal [_target,2.5];
_wp = _group2 addWaypoint [_destination, 0] ; _wp = _group2 addWaypoint [_destination, 0] ;
_wp setWaypointBehaviour "COMBAT"; _wp setWaypointBehaviour "COMBAT";
_wp setWaypointCombatMode "RED"; _wp setWaypointCombatMode "RED";
@ -117,4 +118,7 @@ if(_heliDamage > 0.7 && _damagedEssentials > 0) then
_group2 setCombatMode "RED"; _group2 setCombatMode "RED";
}; };
_heli addMPEventHandler ["mphit", "_this call SC_fnc_hitAir;"]; if(_heliDamage <= 0.2 && _damagedEssentials == 0) then
{
_heli addMPEventHandler ["mphit", "_this call SC_fnc_hitAir;"];
};

View File

@ -122,10 +122,12 @@ if(_wheelDamage OR _engineDamage OR _fueltankDamage) then
_wp setWaypointCompletionRadius 1; _wp setWaypointCompletionRadius 1;
_wp setWaypointType "GETIN"; _wp setWaypointType "GETIN";
sleep 5; sleep 5;
_spawnLocation = _vehicle getVariable "SC_vehicleSpawnLocation"; _tempLocation = _vehicle getVariable "SC_vehicleSpawnLocation";
_originalSpawnLocation = _tempLocation select 0;
_radius = _tempLocation select 1;
_driver action ["movetodriver", _vehicle]; _driver action ["movetodriver", _vehicle];
_vehicle forceSpeed -1; _vehicle forceSpeed -1;
[_group, _spawnLocation, 2000] call bis_fnc_taskPatrol; [_group, _originalSpawnLocation, _radius] call bis_fnc_taskPatrol;
_group setBehaviour "SAFE"; _group setBehaviour "SAFE";
_group setCombatMode "RED"; _group setCombatMode "RED";
_driver enableAI "MOVE"; _driver enableAI "MOVE";

View File

@ -1,9 +1,10 @@
_boat = _this select 0; _boat = _this select 0;
_boat removeAllMPEventHandlers "mphit"; _boat removeAllMPEventHandlers "mphit";
_boatDamage = getDammage _boat;
_boatPosition = getPosATL _boat; _boatDamage = damage _boat;
_boatHeight = getPosATL _boat select 2; _boatPosition = getPosATL _boat;
_crewEjected = _boat getVariable "SC_crewEjected"; _boatHeight = getPosATL _boat select 2;
_crewEjected = _boat getVariable "SC_crewEjected";
_damageLimit = 0.2; _damageLimit = 0.2;
_engineDamage = false; _engineDamage = false;
@ -47,7 +48,7 @@ if(_boatDamage > 0.2 && _damagedEssentials > 0 && !_crewEjected && _ejectChance
if(SC_extendedLogging) then if(SC_extendedLogging) then
{ {
_boatPosition = getPosATL _veh; _boatPosition = getPosATL _veh;
_logDetail = format ["[OCCUPATION:Sky]:: Air unit %2 ejecting passengers at %3 (time: %1)",time,_veh,_boatPosition]; _logDetail = format ["[OCCUPATION:Sky]:: Sea unit %2 ejecting passengers at %3 (time: %1)",time,_veh,_boatPosition];
[_logDetail] call SC_fnc_log; [_logDetail] call SC_fnc_log;
}; };
_cargo = assignedCargo _veh; _cargo = assignedCargo _veh;

View File

@ -6,6 +6,15 @@ _logDetail = "==================================================================
_logDetail = "======================================================================================================="; _logDetail = "=======================================================================================================";
[_logDetail,'A3_EXILE_PROCESSREPORTER'] call SC_fnc_log; [_logDetail,'A3_EXILE_PROCESSREPORTER'] call SC_fnc_log;
_activeProcesses = diag_activeScripts;
_spawnedCount = _activeProcesses select 0;
_execVMCount = _activeProcesses select 1;
_execCount = _activeProcesses select 2;
_execFSMCount = _activeProcesses select 3;
_logDetail = format ["[processReporter] Process Counts: spawn-ed: %1 execVM-ed: %2 exec-ed: %3 execFSM-ed: %4",_spawnedCount,_execVMCount,_execCount,_execFSMCount];
[_logDetail,'A3_EXILE_PROCESSREPORTER'] call SC_fnc_log;
{ {
_logDetail = format ["[processReporter] %1 @ %2",_x,time]; _logDetail = format ["[processReporter] %1 @ %2",_x,time];
[_logDetail,'A3_EXILE_PROCESSREPORTER'] call SC_fnc_log; [_logDetail,'A3_EXILE_PROCESSREPORTER'] call SC_fnc_log;
@ -18,4 +27,6 @@ _logDetail = "==================================================================
_logDetail = format ["[processReporter] Ended @ %1",time]; _logDetail = format ["[processReporter] Ended @ %1",time];
[_logDetail,'A3_EXILE_PROCESSREPORTER'] call SC_fnc_log; [_logDetail,'A3_EXILE_PROCESSREPORTER'] call SC_fnc_log;

View File

@ -10,6 +10,7 @@ if(isNil "_vehicle") exitWith{};
if(count(crew _vehicle) > 0)then if(count(crew _vehicle) > 0)then
{ {
_vehicleType = TypeOf _vehicle; _vehicleType = TypeOf _vehicle;
_vehicleName = getText (configFile >> "CfgVehicles" >> _vehicleType >> "displayName");
_curPos = position _vehicle; _curPos = position _vehicle;
_newPos = _curPos; _newPos = _curPos;
_oldvehPos = _vehicle getVariable["vehPos",[0,0,0]]; _oldvehPos = _vehicle getVariable["vehPos",[0,0,0]];
@ -26,7 +27,7 @@ if(count(crew _vehicle) > 0)then
if(time - _engineTime > 10)then if(time - _engineTime > 10)then
{ {
_logDetail = format ["[OCCUPATION:Unstuck]:: %1 is stuck,attempting to unstick from %2 @ %3",_vehicleType,_curPos,time]; _logDetail = format ["[OCCUPATION:Unstuck]:: %4 (%1) is stuck,attempting to unstick from %2 @ %3",_vehicleType,_curPos,time,_vehicleName];
[_logDetail] call SC_fnc_log; [_logDetail] call SC_fnc_log;
_vehicle setVariable["engineTime",-1]; _vehicle setVariable["engineTime",-1];
@ -34,38 +35,47 @@ if(count(crew _vehicle) > 0)then
_vehicle setVectorUp [0,0,1]; _vehicle setVectorUp [0,0,1];
_originalSpawnLocation = _vehicle getVariable "SC_vehicleSpawnLocation"; _originalSpawnLocation = _vehicle getVariable "SC_vehicleSpawnLocation";
_radius = 2000;
_group = group _vehicle; _group = group _vehicle;
_vehClass = typeOf _vehicle; _vehClass = typeOf _vehicle;
if(_vehicle isKindOf "LandVehicle") then if(_vehicle isKindOf "LandVehicle") then
{ {
_tempPos = _curPos findEmptyPosition [0,150,_vehClass]; _tempLocation = _vehicle getVariable "SC_vehicleSpawnLocation";
_originalSpawnLocation = _tempLocation select 0;
_radius = _tempLocation select 1;
_tempPos = _curPos findEmptyPosition [0,150,_vehClass];
_newPos = [_tempPos select 0, _tempPos select 1, 0]; _newPos = [_tempPos select 0, _tempPos select 1, 0];
}; };
if(_vehicle isKindOf "Ship") then if(_vehicle isKindOf "Ship") then
{ {
_newPos = [_curPos, 5, 100, 3, 2, 20, 0] call BIS_fnc_findSafePos; _tempLocation = _vehicle getVariable "SC_vehicleSpawnLocation";
_newPos = _curPos; _originalSpawnLocation = _tempLocation select 0;
_vehicle setDamage 0.2; _radius = _tempLocation select 1;
_newPos = _curPos;
}; };
if(_vehicle isKindOf "Air") then if(_vehicle isKindOf "Air") then
{ {
_newPos = _curPos; _tempLocation = _vehicle getVariable "SC_vehicleSpawnLocation";
_originalSpawnLocation = _tempLocation select 0;
_radius = _tempLocation select 1;
_newPos = _curPos;
}; };
_side = side _group; _side = side _group;
_group2 = createGroup _side; _group2 = createGroup _side;
_group2 setVariable ["DMS_AllowFreezing",false,true]; _group2 setVariable ["DMS_AllowFreezing",false];
_group2 setVariable ["DMS_LockLocality",nil]; [_group2,false] call DMS_fnc_FreezeToggle;
_group2 setVariable ["DMS_LockLocality",true];
_group2 setVariable ["DMS_SpawnedGroup",true]; _group2 setVariable ["DMS_SpawnedGroup",true];
_group2 setVariable ["DMS_Group_Side", _side]; _group2 setVariable ["DMS_Group_Side", _side];
[_vehicle] joinSilent _group2; [_vehicle] joinSilent _group2;
{ {
_unit = _x; _unit = _x;
[_unit] joinSilent grpNull; //[_unit] joinSilent grpNull;
[_unit] joinSilent _group2; [_unit] joinSilent _group2;
_unit enableAI "FSM"; _unit enableAI "FSM";
_unit enableAI "MOVE"; _unit enableAI "MOVE";
@ -75,11 +85,10 @@ if(count(crew _vehicle) > 0)then
_GroupLeader = leader (group _vehicle); _GroupLeader = leader (group _vehicle);
_GroupLeader doMove _originalSpawnLocation; _GroupLeader doMove _originalSpawnLocation;
[_group2, _originalSpawnLocation, 2000] call bis_fnc_taskPatrol; [_group2, _originalSpawnLocation, _radius] call bis_fnc_taskPatrol;
_group2 setBehaviour "AWARE"; _group2 setBehaviour "AWARE";
_group2 setCombatMode "RED"; _group2 setCombatMode "RED";
_logDetail = format ["[OCCUPATION:Unstuck]:: %6 (%1) was stuck and was moved from %2 to %3 resetting patrol around point %5 @ %4",_vehicleType,_curPos,_newPos, time,_originalSpawnLocation,_vehicleName];
_logDetail = format ["[OCCUPATION:Unstuck]:: %1 was stuck and was moved from %2 to %3 resetting patrol around point %5 @ %4",_vehicleType,_curPos,_newPos, time,_originalSpawnLocation];
[_logDetail] call SC_fnc_log; [_logDetail] call SC_fnc_log;
}; };

View File

@ -7,23 +7,36 @@ _logDetail = format ["[OCCUPATION:Unstick]:: Initialised at %1",time];
[_logDetail] call SC_fnc_log; [_logDetail] call SC_fnc_log;
_x setFuel 1; _x setFuel 1;
sleep 2; sleep 2;
_originalSpawnLocation = _x getVariable "SC_vehicleSpawnLocation"; _tempLocation = _x getVariable "SC_vehicleSpawnLocation";
_originalSpawnLocation = _tempLocation select 0;
_radius = _tempLocation select 1;
_pos = position _x; _pos = position _x;
_nearestMarker = [allMapMarkers, _pos] call BIS_fnc_nearestPosition; // Nearest Marker to the Location _nearestMarker = [allMapMarkers, _pos] call BIS_fnc_nearestPosition; // Nearest Marker to the Location
_posNearestMarker = getMarkerPos _nearestMarker; _posNearestMarker = getMarkerPos _nearestMarker;
_group = group _x; _group = group _x;
_isFrozen = _group getVariable["DMS_isGroupFrozen",false]; _isFrozen = _group getVariable["DMS_isGroupFrozen",false];
if (!_isFrozen && (_pos distance _posNearestMarker < 750)) then if (!_isFrozen) then
{ {
_GroupLeader = leader (group _x); _GroupLeader = leader (group _x);
_GroupLeader doMove _originalSpawnLocation; _GroupLeader doMove _originalSpawnLocation;
} }
else else
{ {
_logDetail = format ["[OCCUPATION:Unstick]:: Air: %1 is currently frozen",_x]; _logDetail = format ["[OCCUPATION:Unstick]:: Air: %1 is currently frozen, resetting DMS_AllowFreezing variable and forcing unfreeze",_x];
[_logDetail] call SC_fnc_log; [_logDetail] call SC_fnc_log;
}; _group setVariable ["DMS_AllowFreezing",false];
[_group,false] call DMS_fnc_FreezeToggle;
};
if (_pos distance _posNearestMarker < 750) then
{
_logDetail = format ["[OCCUPATION:Unstick]:: Air: %1 is too close to a map marker, redirecting destination",_x];
[_logDetail] call SC_fnc_log;
_GroupLeader = leader (group _x);
_GroupLeader doMove _originalSpawnLocation;
}
}forEach SC_liveHelisArray; }forEach SC_liveHelisArray;
{ {
@ -39,8 +52,10 @@ _logDetail = format ["[OCCUPATION:Unstick]:: Initialised at %1",time];
} }
else else
{ {
_logDetail = format ["[OCCUPATION:Unstick]:: Land: %1 is currently frozen",_x]; _logDetail = format ["[OCCUPATION:Unstick]:: Land: %1 is currently frozen, resetting DMS_AllowFreezing variable and forcing unfreeze",_x];
[_logDetail] call SC_fnc_log; [_logDetail] call SC_fnc_log;
_group setVariable ["DMS_AllowFreezing",false];
[_group,false] call DMS_fnc_FreezeToggle;
}; };
sleep 2; sleep 2;
}forEach SC_liveVehiclesArray; }forEach SC_liveVehiclesArray;
@ -58,8 +73,10 @@ _logDetail = format ["[OCCUPATION:Unstick]:: Initialised at %1",time];
} }
else else
{ {
_logDetail = format ["[OCCUPATION:Unstick]:: Sea: %1 is currently frozen",_x]; _logDetail = format ["[OCCUPATION:Unstick]:: Sea: %1 is currently frozen, resetting DMS_AllowFreezing variable and forcing unfreeze",_x];
[_logDetail] call SC_fnc_log; [_logDetail] call SC_fnc_log;
_group setVariable ["DMS_AllowFreezing",false];
[_group,false] call DMS_fnc_FreezeToggle;
}; };
sleep 2; sleep 2;
}forEach SC_liveBoatsArray; }forEach SC_liveBoatsArray;

View File

@ -7,6 +7,7 @@ _logDetail = format['[OCCUPATION:Sea] Started'];
_currentPlayerCount = count playableUnits; _currentPlayerCount = count playableUnits;
_maxAIcount = SC_maxAIcount; _maxAIcount = SC_maxAIcount;
if(_currentPlayerCount > SC_scaleAI) then if(_currentPlayerCount > SC_scaleAI) then
{ {
_maxAIcount = _maxAIcount - (_currentPlayerCount - SC_scaleAI) ; _maxAIcount = _maxAIcount - (_currentPlayerCount - SC_scaleAI) ;
@ -43,11 +44,49 @@ _maxDistance = _middle;
for "_i" from 1 to _vehiclesToSpawn do for "_i" from 1 to _vehiclesToSpawn do
{ {
private["_group"]; private["_group"];
_potentialspawnLocation = [ _spawnCenter, 0, _maxDistance + 500, 25, 2, 1, 1] call BIS_fnc_findSafePos;
_spawnLocation = [_potentialspawnLocation select 0, _potentialspawnLocation select 1,0]; _locationArray = SC_occupyBoatFixedPositions;
// Select the spawn position
_spawnLocation = [0,0,0];
_radius = 4000;
if(SC_occupyBoatUseFixedPos) then
{
{
_vehLocation = _x getVariable "SC_vehicleSpawnLocation";
_locationArray = _locationArray - _vehLocation;
}forEach SC_liveBoatsArray;
if(count _locationArray > 0) then
{
_randomLocation = _locationArray call BIS_fnc_selectRandom;
diag_log format["_randomLocation: %1",_randomLocation];
_tempLocation = _randomLocation select 0;
_spawnLocation = [_tempLocation select 0, _tempLocation select 1, _tempLocation select 2];
_radius = _randomLocation select 1;
_locationArray = _locationArray - _randomLocation;
}
else
{
_potentialspawnLocation = [ _spawnCenter, 0, _maxDistance + 500, 25, 2, 1, 1] call BIS_fnc_findSafePos;
_spawnLocation = [_potentialspawnLocation select 0, _potentialspawnLocation select 1,0];
_radius = 4000;
};
}
else
{
_potentialspawnLocation = [ _spawnCenter, 0, _maxDistance + 500, 25, 2, 1, 1] call BIS_fnc_findSafePos;
_spawnLocation = [_potentialspawnLocation select 0, _potentialspawnLocation select 1,0];
_radius = 4000;
};
diag_log format["[OCCUPATION:Sea] found position %1",_spawnLocation];
_group = createGroup SC_BanditSide; _group = createGroup SC_BanditSide;
_group setVariable ["DMS_AllowFreezing",false,true]; _group setVariable ["DMS_AllowFreezing",false];
[_group,false] call DMS_fnc_FreezeToggle;
_group setVariable ["DMS_LockLocality",true];
_group setVariable ["DMS_SpawnedGroup",true];
_group setVariable ["DMS_Group_Side", SC_BanditSide];
_VehicleClass = SC_BoatClassToUse call BIS_fnc_selectRandom; _VehicleClass = SC_BoatClassToUse call BIS_fnc_selectRandom;
_VehicleClassToUse = _VehicleClass select 0; _VehicleClassToUse = _VehicleClass select 0;
@ -71,7 +110,7 @@ for "_i" from 1 to _vehiclesToSpawn do
_vehicle setPosASL _spawnLocation; _vehicle setPosASL _spawnLocation;
_vehicle setVariable["vehPos",_spawnLocation,true]; _vehicle setVariable["vehPos",_spawnLocation,true];
_vehicle setVariable["vehClass",_VehicleClassToUse,true]; _vehicle setVariable["vehClass",_VehicleClassToUse,true];
_vehicle setVariable ["SC_vehicleSpawnLocation", _spawnLocation,true]; _vehicle setVariable ["SC_vehicleSpawnLocation", [_spawnLocation,_radius,worldName],true];
// Remove the overpowered weapons from boats // Remove the overpowered weapons from boats
_vehicle removeWeaponTurret ["HMG_01",[0]]; _vehicle removeWeaponTurret ["HMG_01",[0]];
@ -204,7 +243,7 @@ for "_i" from 1 to _vehiclesToSpawn do
}; };
[_group, _spawnLocation, 4000] call bis_fnc_taskPatrol; [_group, _spawnLocation, _radius] call bis_fnc_taskPatrol;
_group setBehaviour "AWARE"; _group setBehaviour "AWARE";
_group setCombatMode "RED"; _group setCombatMode "RED";
_vehicle addEventHandler ["getin", "_this call SC_fnc_claimVehicle;"]; _vehicle addEventHandler ["getin", "_this call SC_fnc_claimVehicle;"];

View File

@ -59,18 +59,61 @@ _i = 0;
} forEach _locations; } forEach _locations;
for "_i" from 1 to _vehiclesToSpawn do for "_i" from 1 to _vehiclesToSpawn do
{ {
private["_group"]; private["_group"];
_Location = _locations call BIS_fnc_selectRandom;
_pos = position _Location;
_position = [_pos select 0, _pos select 1, 300];
_safePos = [_position,10,100,5,0,20,0] call BIS_fnc_findSafePos;
_height = 350 + (round (random 200)); _height = 350 + (round (random 200));
_spawnLocation = [_safePos select 0, _safePos select 1, _height]; _locationArray = SC_occupyHeliFixedPositions;
// Select the spawn position
_spawnLocation = [0,0,0];
_radius = 2000;
if(SC_occupyHeliUseFixedPos) then
{
{
_vehLocation = _x getVariable "SC_vehicleSpawnLocation";
_locationArray = _locationArray - _vehLocation;
}forEach SC_liveHelisArray;
if(count _locationArray > 0) then
{
_randomLocation = _locationArray call BIS_fnc_selectRandom;
diag_log format["_randomLocation: %1",_randomLocation];
_tempLocation = _randomLocation select 0;
_spawnLocation = [_tempLocation select 0, _tempLocation select 1, _tempLocation select 2];
_radius = _randomLocation select 1;
}
else
{
_Location = _locations call BIS_fnc_selectRandom;
_pos = position _Location;
_position = [_pos select 0, _pos select 1, 300];
_safePos = [_position,10,100,5,0,20,0] call BIS_fnc_findSafePos;
_spawnLocation = [_safePos select 0, _safePos select 1, _height];
_spawnLocation = [_safePos select 0, _safePos select 1, _height];
_radius = 2000;
};
}
else
{
_Location = _locations call BIS_fnc_selectRandom;
_pos = position _Location;
_position = [_pos select 0, _pos select 1, 300];
_safePos = [_position,10,100,5,0,20,0] call BIS_fnc_findSafePos;
_spawnLocation = [_safePos select 0, _safePos select 1, _height];
_spawnLocation = [_safePos select 0, _safePos select 1, _height];
_radius = 2000;
};
diag_log format["[OCCUPATION:Sky] found position %1",_spawnLocation];
_group = createGroup SC_BanditSide; _group = createGroup SC_BanditSide;
_group setVariable ["DMS_AllowFreezing",false,true]; _group setVariable ["DMS_AllowFreezing",false];
[_group,false] call DMS_fnc_FreezeToggle;
_group setVariable ["DMS_LockLocality",true];
_group setVariable ["DMS_SpawnedGroup",true];
_group setVariable ["DMS_Group_Side", SC_BanditSide];
_VehicleClass = SC_HeliClassToUse call BIS_fnc_selectRandom; _VehicleClass = SC_HeliClassToUse call BIS_fnc_selectRandom;
_VehicleClassToUse = _VehicleClass select 0; _VehicleClassToUse = _VehicleClass select 0;
@ -95,7 +138,7 @@ for "_i" from 1 to _vehiclesToSpawn do
_group addVehicle _vehicle; _group addVehicle _vehicle;
_vehicle setVariable["vehPos",_spawnLocation,true]; _vehicle setVariable["vehPos",_spawnLocation,true];
_vehicle setVariable["vehClass",_VehicleClassToUse,true]; _vehicle setVariable["vehClass",_VehicleClassToUse,true];
_vehicle setVariable ["SC_vehicleSpawnLocation", _spawnLocation,true]; _vehicle setVariable ["SC_vehicleSpawnLocation", [_spawnLocation,_radius,worldName],true];
SC_liveHelis = SC_liveHelis + 1; SC_liveHelis = SC_liveHelis + 1;
SC_liveHelisArray = SC_liveHelisArray + [_vehicle]; SC_liveHelisArray = SC_liveHelisArray + [_vehicle];
@ -176,8 +219,6 @@ for "_i" from 1 to _vehiclesToSpawn do
[_unit] joinSilent _group; [_unit] joinSilent _group;
}foreach units _group; }foreach units _group;
_group setVariable ["DMS_AllowFreezing",false,true];
if(SC_extendedLogging && _unitPlaced) then if(SC_extendedLogging && _unitPlaced) then
{ {
_logDetail = format['[OCCUPATION:Sky] %1 spawned @ %2',_VehicleClassToUse,_spawnLocation]; _logDetail = format['[OCCUPATION:Sky] %1 spawned @ %2',_VehicleClassToUse,_spawnLocation];
@ -233,7 +274,7 @@ for "_i" from 1 to _vehiclesToSpawn do
}; };
[_group, _spawnLocation, 2000] call bis_fnc_taskPatrol; [_group, _spawnLocation, _radius] call bis_fnc_taskPatrol;
_group setBehaviour "AWARE"; _group setBehaviour "AWARE";
_group setCombatMode "RED"; _group setCombatMode "RED";
_vehicle addEventHandler ["getin", "_this call SC_fnc_claimVehicle;"]; _vehicle addEventHandler ["getin", "_this call SC_fnc_claimVehicle;"];

View File

@ -79,7 +79,39 @@ if(_vehiclesToSpawn >= 1) then
for "_j" from 1 to _vehiclesToSpawn do for "_j" from 1 to _vehiclesToSpawn do
{ {
private["_group"]; private["_group"];
_spawnLocation = [ true, false ] call SC_fnc_findsafePos;
_locationArray = SC_occupyVehicleFixedPositions;
// Select the spawn position
_spawnLocation = [0,0,0];
_radius = 2000;
if(SC_occupyVehicleUseFixedPos) then
{
{
_vehLocation = _x getVariable "SC_vehicleSpawnLocation";
_locationArray = _locationArray - _vehLocation;
}forEach SC_liveVehiclesArray;
if(count _locationArray > 0) then
{
_randomLocation = _locationArray call BIS_fnc_selectRandom;
diag_log format["_randomLocation: %1",_randomLocation];
_spawnLocation = _randomLocation select 0;
_radius = _randomLocation select 1;
_locationArray = _locationArray - _randomLocation;
}
else
{
_spawnLocation = [ true, false ] call SC_fnc_findsafePos;
_radius = 2000;
};
}
else
{
_spawnLocation = [ true, false ] call SC_fnc_findsafePos;
_radius = 2000;
};
diag_log format["[OCCUPATION:Vehicle] found position %1",_spawnLocation]; diag_log format["[OCCUPATION:Vehicle] found position %1",_spawnLocation];
_group = createGroup SC_BanditSide; _group = createGroup SC_BanditSide;
if(_side == "survivor") then if(_side == "survivor") then
@ -87,8 +119,8 @@ if(_vehiclesToSpawn >= 1) then
deleteGroup _group; deleteGroup _group;
_group = createGroup SC_SurvivorSide; _group = createGroup SC_SurvivorSide;
}; };
_group setVariable ["DMS_AllowFreezing",false,true]; _group setVariable ["DMS_AllowFreezing",false];
_group setVariable ["DMS_LockLocality",nil]; _group setVariable ["DMS_LockLocality",true];
_group setVariable ["DMS_SpawnedGroup",true]; _group setVariable ["DMS_SpawnedGroup",true];
_group setVariable ["DMS_Group_Side", _side]; _group setVariable ["DMS_Group_Side", _side];
@ -140,7 +172,7 @@ if(_vehiclesToSpawn >= 1) then
_vehicle setVariable["vehPos",_spawnLocation,true]; _vehicle setVariable["vehPos",_spawnLocation,true];
_vehicle setVariable["vehClass",_VehicleClassToUse,true]; _vehicle setVariable["vehClass",_VehicleClassToUse,true];
_vehicle setVariable ["SC_vehicleSpawnLocation", _spawnLocation,true]; _vehicle setVariable ["SC_vehicleSpawnLocation", [_spawnLocation,_radius,worldName],true];
_vehicle setFuel 1; _vehicle setFuel 1;
_vehicle engineOn true; _vehicle engineOn true;
@ -252,6 +284,7 @@ if(_vehiclesToSpawn >= 1) then
_unitName = [_side] call SC_fnc_selectName; _unitName = [_side] call SC_fnc_selectName;
if(!isNil "_unitName") then { _unit setName _unitName; }; if(!isNil "_unitName") then { _unit setName _unitName; };
}forEach units _group; }forEach units _group;
[_group,false] call DMS_fnc_FreezeToggle;
[units _group] orderGetIn true; [units _group] orderGetIn true;
sleep 10; sleep 10;