diff --git a/changeLog.txt b/changeLog.txt index d4bde48..c6ec3ac 100644 --- a/changeLog.txt +++ b/changeLog.txt @@ -1,3 +1,16 @@ +================================================================================= +V52 (16-07-2016) +================================================================================= +Trsders now use the new Exile format +Various tweaks and bug fixes + + +================================================================================= +V51 (27-06-2016) +================================================================================= +Added the option to specify fixed loot crate locations + + ================================================================================= V50 (24-06-2016) ================================================================================= @@ -153,4 +166,4 @@ Added the option to set the maximum crew (crew count will be a random number bet the max and min). The applies for all AI vehicles. Added a separate SC_VehicleClassToUseRare list of vehicles which spawn 10% of the -time in place of the standard SC_VehicleClassToUse list. +time in place of the standard SC_VehicleClassToUse list. \ No newline at end of file diff --git a/config.cpp b/config.cpp index 5bd15e8..41f1bcf 100644 --- a/config.cpp +++ b/config.cpp @@ -4,7 +4,7 @@ class CfgPatches units[] = {}; weapons[] = {}; requiredVersion = 0.1; - a3_exile_occupation_version = "v50 (24-06-2016)"; + a3_exile_occupation_version = "v52 (19-07-2016)"; requiredAddons[] = {"a3_dms"}; author[]= {"second_coming"}; }; diff --git a/config.sqf b/config.sqf index 43d02d2..65b01ee 100644 --- a/config.sqf +++ b/config.sqf @@ -14,114 +14,114 @@ // Shared Config for each occupation monitor -SC_debug = false; // set to true to turn on debug features (not for live servers) -SC_useApexClasses = false; // 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_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_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_minFPS = 5; // any lower than minFPS on the server and additional AI won't spawn -SC_scaleAI = 10; // any more than _scaleAI players on the server and _maxAIcount is reduced for each extra player +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_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_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_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_minFPS = 5; // any lower than minFPS on the server and additional AI won't spawn +SC_scaleAI = 10; // any more than _scaleAI players on the server and _maxAIcount is reduced for each extra player -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_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) +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 -SC_minDistanceToSpawnZones = 500; // Minimum distance in metres to the nearest spawn zone -SC_minDistanceToTraders = 500; // Minimum distance in metres to the nearest trader zone -SC_minDistanceToTerritory = 500; // Minimum distance in metres to the nearest player territory -SC_minDistanceToPlayer = 250; // Minimum distance in metres to the nearest player + // Distance limits for selecting safe places to spawn AI +SC_minDistanceToSpawnZones = 500; // Minimum distance in metres to the nearest spawn zone +SC_minDistanceToTraders = 500; // Minimum distance in metres to the nearest trader zone +SC_minDistanceToTerritory = 500; // Minimum distance in metres to the nearest player territory +SC_minDistanceToPlayer = 250; // Minimum distance in metres to the nearest player -SC_occupyRandomSpawn = false; // (WORK IN PROGRESS, NOT WORKING YET) true if you want random spawning AI that hunt for nearby players -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_randomSpawnIgnoreCount = true; // true if you want spawn random AI groups regardless of overall AI count (they still count towards the total though) +SC_occupyRandomSpawn = false; // (WORK IN PROGRESS, NOT WORKING YET) true if you want random spawning AI that hunt for nearby players +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_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 +SC_occupyPlaces = true; // true if you want villages,towns,cities patrolled by bandits -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_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, NOT WORKING YET) true if you want to create trader camps at positions specified in SC_occupyTraderDetails -SC_occupyTraderDetails = [ +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_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 +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_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 -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 = []; +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"]; +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"]; -SC_occupyStatic = false; // true if you want to add AI in specific locations -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] ]; -SC_occupySky = true; // true if you want to have roaming AI helis -SC_occupySea = false; // true if you want to have roaming AI boats +SC_occupySky = true; // true if you want to have roaming AI helis +SC_occupySea = false; // true if you want to have roaming AI boats -SC_occupyTransport = true; // true if you want pubic transport (travels between traders) -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_occupyTransportClass = ["Exile_Chopper_Mohawk_FIA"]; // to always use the same vehicle, specify one option only +SC_occupyTransport = true; // true if you want pubic transport (travels between traders) +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_occupyTransportClass = ["Exile_Chopper_Mohawk_FIA"]; // to always use the same vehicle, specify one option only -SC_occupyTransportStartPos = []; // if empty defaults to map centre +SC_occupyTransportStartPos = []; // if empty defaults to map centre -SC_TransportAirFixed = false; // true if you want to use fixed waypoints for air transport, false to autodetect where trader zones are -SC_TransportAirWaypoints = [ +SC_TransportAirFixed = false; // true if you want to use fixed waypoints for air transport, false to autodetect where trader zones are +SC_TransportAirWaypoints = [ [1000,1000,0], [2000,2000,0], [3000,3000,0], [4000,4000,0] ]; -SC_TransportLandFixed = false; // true if you want to use fixed waypoints for land transport, false to autodetect where trader zones are -SC_TransportLandWaypoints = [ +SC_TransportLandFixed = false; // true if you want to use fixed waypoints for land transport, false to autodetect where trader zones are +SC_TransportLandWaypoints = [ [1000,1000,0], [2000,2000,0], [3000,3000,0], @@ -129,18 +129,25 @@ SC_TransportLandWaypoints = [ ]; -SC_occupyLootCrates = true; // true if you want to have random loot crates with guards -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_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_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_occupyLootCratesLocations = [ + [1000,1000,0], + [2000,2000,0], + [3000,3000,0], + [4000,4000,0] + ]; +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_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_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) // Array of possible common items to go in loot crates ["classname",fixed amount,random amount] // ["Exile_Item_Matches",1,2] this example would add between 1 and 3 Exile_Item_Matches to the crate (1 + 0 to 2 more) // to add a fixed amount make the second number 0 -SC_LootCrateItems = [ +SC_LootCrateItems = [ ["Exile_Melee_Axe",1,0], ["Exile_Item_GloriousKnakworst",1,2], ["Exile_Item_PlasticBottleFreshWater",1,2], @@ -163,22 +170,24 @@ SC_LootCrateItems = [ ["Exile_Item_Sand",2,10] ]; -SC_blackListedAreas = [ +SC_blackListedAreas = [ [[3810,8887,0], 500, "Chernarus"], // Vybor Occupation DMS Static Mission [[12571,14337,0], 500, "Altis"], // Neochori Occupation DMS Static Mission [[3926,7523,0], 500, "Namalsk"], // Norinsk Occupation DMS Static Mission - [[3926,7523,0], 500, "Napf"] // Lenzburg Occupation DMS Static Mission + [[3926,7523,0], 500, "Napf"], // Lenzburg Occupation DMS Static Mission + [[11685,2666,0], 500, "Tanoa"], // Lijnhaven Occupation DMS Static Mission + [[11580,2051,0], 500, "Tanoa"] // Lijnhaven Traders ]; -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_numberofHeliCrashes = 5; // if SC_occupyHeliCrashes = true spawn this many loot crates +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_numberofHeliCrashes = 5; // if SC_occupyHeliCrashes = true spawn this many loot crates // 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) // to add a fixed amount make the second number 0 -SC_HeliCrashItems = [ +SC_HeliCrashItems = [ ["B_Parachute",1,1], ["H_CrewHelmetHeli_B",1,1], ["ItemGPS",0,1], @@ -187,37 +196,37 @@ SC_HeliCrashItems = [ ["Exile_Item_EMRE",2,2] ]; -SC_HeliCrashRareItems = [ +SC_HeliCrashRareItems = [ ["HandGrenade",0,2], ["APERSBoundingMine_Range_Mag",0,2] ]; -SC_HeliCrashRareItemChance = 10; // percentage chance to spawn each SC_HeliCrashRareItems +SC_HeliCrashRareItemChance = 10; // percentage chance to spawn each SC_HeliCrashRareItems // Array of possible weapons to place in the crate -SC_HeliCrashWeapons = [ +SC_HeliCrashWeapons = [ "srifle_DMR_02_camo_F", "srifle_DMR_03_woodland_F", "srifle_DMR_04_F", "srifle_DMR_05_hex_F" ]; -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_HeliCrashWeaponsAmount = [1,3]; // [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) +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) // (essential crew like drivers and gunners will always spawn regardless of these settings) // Settings for roaming ground vehicle AI SC_maxNumberofVehicles = 4; // 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 = [ ["Exile_Car_LandRover_Green",0], ["Exile_Bike_QuadBike_Black",2], ["Exile_Car_UAZ_Open_Green",2] ]; -SC_VehicleClassToUseRare = [ +SC_VehicleClassToUseRare = [ ["Exile_Car_Hunter",1], ["Exile_Car_HEMMT",1], ["Exile_Car_Zamak",1], @@ -243,19 +252,19 @@ SC_BoatClassToUse = [ ["Exile_Boat_MotorBoat_Police",1] ]; -SC_useRealNames = true; +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_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_occupyMilitary = false; // true if you want military buildings patrolled +SC_occupyMilitary = false; // true if you want military buildings patrolled // Array of buildings to add military patrols to -SC_buildings = [ "Land_TentHangar_V1_F","Land_Hangar_F", +SC_buildings = [ "Land_TentHangar_V1_F","Land_Hangar_F", "Land_Airport_Tower_F","Land_Cargo_House_V1_F", "Land_Cargo_House_V3_F","Land_Cargo_HQ_V1_F", "Land_Cargo_HQ_V2_F","Land_Cargo_HQ_V3_F", @@ -288,31 +297,37 @@ SC_buildings = [ "Land_TentHangar_V1_F","Land_Hangar_F", // namalsk specific settings (if you want to override settings for specific maps if you run multiple servers) if (worldName == 'Namalsk' AND SC_useMapOverrides) then { - SC_maxAIcount = 80; - SC_occupySky = false; - SC_maxNumberofVehicles = 2; - SC_numberofLootCrates = 3; - SC_numberofHeliCrashes = 2; - SC_maxNumberofBoats = 1; - SC_occupyTransportClass = "Exile_Car_LandRover_Urban"; // the ikarus bus gets stuck on Namalsk + SC_maxAIcount = 80; + SC_occupySky = false; + SC_maxNumberofVehicles = 2; + SC_numberofLootCrates = 3; + SC_numberofHeliCrashes = 2; + SC_maxNumberofBoats = 1; + SC_occupyTransportClass = "Exile_Car_LandRover_Urban"; // the ikarus bus gets stuck on Namalsk }; -// Tanoa specific settings (if you want to override settings for specific maps if you run multiple servers) +// Napf specific settings (if you want to override settings for specific maps if you run multiple servers) +if (worldName == 'Napf' AND SC_useMapOverrides) then +{ + +}; + +// Napf specific settings (if you want to override settings for specific maps if you run multiple servers) if (worldName == 'Tanoa' AND SC_useMapOverrides) then { - SC_useApexClasses = true; + SC_useApexClasses = true; }; // Overrides to use Apex weapons, gear and vehicles if SC_useApexClasses = true 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", "arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F", "arifle_SPAR_01_snd_F","arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F", "arifle_SPAR_03_blk_F","arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F"]; - SC_BanditUniforms = [ "U_I_C_Soldier_Para_1_F","U_I_C_Soldier_Para_2_F","U_I_C_Soldier_Para_3_F","U_I_C_Soldier_Para_4_F","U_I_C_Soldier_Para_5_F","U_I_C_Soldier_Bandit_1_F","U_I_C_Soldier_Bandit_2_F", + SC_BanditUniforms = [ "U_I_C_Soldier_Para_1_F","U_I_C_Soldier_Para_2_F","U_I_C_Soldier_Para_3_F","U_I_C_Soldier_Para_4_F","U_I_C_Soldier_Para_5_F","U_I_C_Soldier_Bandit_1_F","U_I_C_Soldier_Bandit_2_F", "U_I_C_Soldier_Bandit_3_F","U_I_C_Soldier_Bandit_4_F","U_I_C_Soldier_Bandit_5_F","U_I_C_Soldier_Camo_F","U_B_CTRG_Soldier_urb_1_F","U_B_CTRG_Soldier_urb_2_F","U_B_CTRG_Soldier_urb_3_F"]; - SC_VehicleClassToUse = [ + SC_VehicleClassToUse = [ ["B_GEN_Offroad_01_gen_F",0], ["C_Offroad_02_unarmed_F",0], ["I_C_Offroad_02_unarmed_F",0] @@ -322,29 +337,26 @@ if(SC_useApexClasses) then ["O_T_LSV_02_unarmed_black_F",1], ["O_T_Truck_03_device_ghex_F",1] ]; - SC_occupyTransportClass = ["Exile_Chopper_Mohawk_FIA","C_Offroad_02_unarmed_black_F","B_LSV_01_unarmed_black_F"]; }; if (SC_debug) then { - SC_extendedLogging = true; - SC_processReporter = true; + SC_extendedLogging = true; + SC_processReporter = true; SC_mapMarkers = true; SC_occupyPlaces = true; SC_occupyVehicle = true; - SC_occupyMilitary = true; - SC_occupyStatic = true; + SC_occupyMilitary = true; + SC_occupyStatic = true; SC_occupySky = true; SC_occupySea = true; SC_occupyTransport = true; - SC_occupyLootCrates = true; + SC_occupyLootCrates = true; SC_occupyHeliCrashes = true; - SC_maxNumberofVehicles = 4; - SC_maxNumberofBoats = 1; - SC_maxNumberofHelis = 1; - - + SC_maxNumberofVehicles = 4; + SC_maxNumberofBoats = 1; + SC_maxNumberofHelis = 1; }; // Don't alter anything below this point, unless you want your server to explode :) @@ -352,24 +364,24 @@ if(!SC_SurvivorsFriendly) then { CIVILIAN setFriend[RESISTANCE,0]; }; -CIVILIAN setFriend [EAST,0]; -CIVILIAN setFriend [WEST,0]; -EAST setFriend [CIVILIAN,0]; -WEST setFriend [CIVILIAN,0]; -EAST setFriend [WEST,0]; -WEST setFriend [EAST,0]; +CIVILIAN setFriend [EAST,0]; +CIVILIAN setFriend [WEST,0]; +EAST setFriend [CIVILIAN,0]; +WEST setFriend [CIVILIAN,0]; +EAST setFriend [WEST,0]; +WEST setFriend [EAST,0]; -SC_SurvivorSide = CIVILIAN; -SC_BanditSide = EAST; -SC_liveVehicles = 0; -SC_liveVehiclesArray = []; -SC_liveHelis = 0; -SC_liveHelisArray = []; -SC_liveBoats = 0; -SC_liveBoatsArray = []; -SC_liveStaticGroups = []; -SC_transportArray = []; +SC_SurvivorSide = CIVILIAN; +SC_BanditSide = EAST; +SC_liveVehicles = 0; +SC_liveVehiclesArray = []; +SC_liveHelis = 0; +SC_liveHelisArray = []; +SC_liveBoats = 0; +SC_liveBoatsArray = []; +SC_liveStaticGroups = []; +SC_transportArray = []; publicVariable "SC_liveVehicles"; publicVariable "SC_liveVehiclesArray"; @@ -383,4 +395,4 @@ publicVariable "SC_transportArray"; publicVariable "SC_SurvivorSide"; publicVariable "SC_BanditSide"; -SC_CompiledOkay = true; +SC_CompiledOkay = true; \ No newline at end of file diff --git a/initServer.sqf b/initServer.sqf index 3d8d9a9..e1876e7 100644 --- a/initServer.sqf +++ b/initServer.sqf @@ -74,5 +74,5 @@ SC_occupationVersion = getText (configFile >> "CfgPatches" >> "a3_exile_occupati [_logDetail] call SC_fnc_log; // Start Occupation - [] execVM "\x\addons\a3_exile_occupation\scripts\startOccupation.sqf"; + []execVM "\x\addons\a3_exile_occupation\scripts\startOccupation.sqf"; }; \ No newline at end of file diff --git a/scripts/deleteMapMarkers.sqf b/scripts/deleteMapMarkers.sqf index 7f030d2..15f2f23 100644 --- a/scripts/deleteMapMarkers.sqf +++ b/scripts/deleteMapMarkers.sqf @@ -20,4 +20,4 @@ if (SC_occupyLootCratesMarkers) then }; }; -}; +}; \ No newline at end of file diff --git a/scripts/eventHandlers/hitAir.sqf b/scripts/eventHandlers/hitAir.sqf index 7f4c35e..0c1a171 100644 --- a/scripts/eventHandlers/hitAir.sqf +++ b/scripts/eventHandlers/hitAir.sqf @@ -40,7 +40,7 @@ _damagedEssentials = 0; } forEach _essentials; -if(_heliDamage > 0.2 && _damagedEssentials > 0 && !_crewEjected && _ejectChance > 100) then +if((_heliDamage > 0.2 OR _damagedEssentials) > 0 && !_crewEjected && _ejectChance > 100) then { _target = _this select 1; [_heli, _target] spawn diff --git a/scripts/functions/fnc_isSafePos.sqf b/scripts/functions/fnc_isSafePos.sqf index a224af7..f0aaf33 100644 --- a/scripts/functions/fnc_isSafePos.sqf +++ b/scripts/functions/fnc_isSafePos.sqf @@ -14,11 +14,14 @@ private _validspot = true; }; if (worldName == _blacklistMap) then { - if(_position distance _blacklistPos < _blacklistRadius) exitWith + + _distance = _position distance2D _blacklistPos; + if(_distance < _blacklistRadius) exitWith { - _validspot = false; + _validspot = false; + diag_log format["%1 is %2m from blacklisted position %3 (blacklisted)",_position,_distance,_blacklistPos]; }; - }; + }; }forEach SC_blackListedAreas; //Check if near player territory diff --git a/scripts/occupationLootCrates.sqf b/scripts/occupationLootCrates.sqf index f1378d7..55c0f09 100644 --- a/scripts/occupationLootCrates.sqf +++ b/scripts/occupationLootCrates.sqf @@ -13,7 +13,23 @@ for "_i" from 1 to SC_numberofLootCrates do while{!_validspot} do { sleep 0.2; - _position = [ false, false ] call SC_fnc_findsafePos; + if(SC_occupyLootCratesStatic) then + { + _tempPosition = SC_occupyLootCratesLocations select 0; + _position = [_tempPosition select 0, _tempPosition select 1, _tempPosition select 2]; + + SC_occupyLootCratesLocations = SC_occupyLootCratesLocations deleteAt 0; + diag_log format["_tempPosition: %1 _position: %2",_tempPosition,_position]; + if(isNil "_position") then + { + _position = [ false, false ] call SC_fnc_findsafePos; + }; + } + else + { + _position = [ false, false ] call SC_fnc_findsafePos; + }; + _validspot = true; //Check if near another crate site @@ -24,8 +40,7 @@ for "_i" from 1 to SC_numberofLootCrates do _mapMarkerName = format ["SC_loot_marker_%1", _i]; if (SC_occupyLootCratesMarkers) then - { - + { _event_marker = createMarker [ format ["SC_loot_marker_%1", _i], _position]; _event_marker setMarkerColor "ColorGreen"; _event_marker setMarkerAlpha 1; diff --git a/scripts/occupationTraders.sqf b/scripts/occupationTraders.sqf index 3cf3360..0f774c1 100644 --- a/scripts/occupationTraders.sqf +++ b/scripts/occupationTraders.sqf @@ -15,13 +15,10 @@ _logDetail = format['[OCCUPATION:Traders] starting @ %1',time]; _traderName setmarkeralpha 0; private _marker = createMarker [ format [" %1 ", _traderName], _traderPos]; - _marker setMarkerText format ["%1", _traderName]; - _marker setMarkerSize [3,3]; - _marker setMarkerShape "ICON"; - _marker setMarkerType "loc_Tree"; - _marker setMarkerColor "ColorBlack"; - _marker setMarkerBrush "Vertical"; - + _marker setMarkerText ""; + _marker setMarkerShape "ICON"; + _marker setMarkerType "ExileTraderZoneIcon"; + if(_createSafezone) then { ExileTraderZoneMarkerPositions pushBack _traderPos; @@ -36,18 +33,19 @@ _logDetail = format['[OCCUPATION:Traders] starting @ %1',time]; // Place the traders randomly private _traders = [ - ["Exile_Trader_AircraftCustoms", "Exile_Sign_AircraftCustoms", "GreekHead_A3_08", "HubStandingUC_idle1"], - ["Exile_Trader_Aircraft", "Exile_Sign_Aircraft", "WhiteHead_10", "HubStandingUC_idle2"], - ["Exile_Trader_Armory", "Exile_Sign_Armory", "WhiteHead_01", "HubStandingUC_idle3"], - ["Exile_Trader_Hardware", "Exile_Sign_Hardware", "WhiteHead_14", "HubStandingUC_idle1"], - ["Exile_Trader_Vehicle", "Exile_Sign_Vehicles", "AfricanHead_03", "HubStandingUC_idle2"], - ["Exile_Trader_VehicleCustoms", "Exile_Sign_VehicleCustoms", "GreekHead_A3_05", "HubStandingUC_idle3"], - ["Exile_Trader_WasteDump", "Exile_Sign_WasteDump", "WhiteHead_07", "HubStandingUC_idle2"], - ["Exile_Trader_Food", "Exile_Sign_Food", "WhiteHead_15", "HubStandingUC_idle3"], - ["Exile_Trader_SpecialOperations", "Exile_Sign_SpecialOperations", "WhiteHead_06", "HubStandingUC_idle1"], - ["Exile_Trader_Equipment", "Exile_Sign_Equipment", "WhiteHead_15", "HubStandingUC_idle2"], - ["Exile_Trader_Office", "Exile_Sign_Office", "WhiteHead_10", "HubStandingUC_idle1"] + ["Exile_Trader_AircraftCustoms", "Exile_Sign_AircraftCustoms", "GreekHead_A3_08", ["HubBriefing_loop","HubBriefing_scratch","HubBriefing_stretch","HubBriefing_think"]], + ["Exile_Trader_Aircraft", "Exile_Sign_Aircraft", "WhiteHead_10", ["LHD_krajPaluby"]], + ["Exile_Trader_Armory", "Exile_Sign_Armory", "WhiteHead_01", ["InBaseMoves_HandsBehindBack1","InBaseMoves_HandsBehindBack2"]], + ["Exile_Trader_Hardware", "Exile_Sign_Hardware", "WhiteHead_14", ["HubStandingUC_idle1"]], + ["Exile_Trader_Vehicle", "Exile_Sign_Vehicles", "AfricanHead_03", ["HubStandingUC_idle2"]], + ["Exile_Trader_VehicleCustoms", "Exile_Sign_VehicleCustoms", "GreekHead_A3_05", ["HubBriefing_loop","HubBriefing_scratch","HubBriefing_stretch","HubBriefing_think"]], + ["Exile_Trader_WasteDump", "Exile_Sign_WasteDump", "WhiteHead_07", ["c4coming2cDf_genericstani1","c4coming2cDf_genericstani2","c4coming2cDf_genericstani3"]], + ["Exile_Trader_Food", "Exile_Sign_Food", "WhiteHead_15", ["HubStandingUC_idle3"]], + ["Exile_Trader_SpecialOperations", "Exile_Sign_SpecialOperations", "WhiteHead_06", ["HubStandingUC_idle1"]], + ["Exile_Trader_Equipment", "Exile_Sign_Equipment", "WhiteHead_15", ["HubStandingUC_idle2"]], + ["Exile_Trader_Office", "Exile_Sign_Office", "WhiteHead_10", ["HubBriefing_loop","HubBriefing_scratch","HubBriefing_stretch","HubBriefing_think"]] ]; + private _group = createGroup SC_SurvivorSide; _group setCombatMode "BLUE"; _group setVariable ["DMS_AllowFreezing",false,true]; @@ -57,7 +55,8 @@ _logDetail = format['[OCCUPATION:Traders] starting @ %1',time]; enableSentences false; - enableRadio false; + enableRadio false; + { private _traderType = _x select 0; private _traderSign = _x select 1; @@ -70,15 +69,9 @@ _logDetail = format['[OCCUPATION:Traders] starting @ %1',time]; private _signDir = getDir _nearestSign; _nearestSign setDir _signDir; private _traderPosition = position _nearestSign; - + _traderType createUnit [_traderPosition, _group, "trader = this;"]; - trader disableAI "FSM"; - trader disableAI "MOVE"; - trader disableAI "TARGET"; - trader disableAI "AUTOTARGET"; - trader disableAI "AUTOCOMBAT"; - trader disableAI "COVER"; - trader disableAI "SUPPRESSION"; + trader reveal _nearestSign; _nearestSign disableCollisionWith trader; trader disableCollisionWith _nearestSign; @@ -87,8 +80,19 @@ _logDetail = format['[OCCUPATION:Traders] starting @ %1',time]; private _traderDirection = _signDir-180; trader setDir _traderDirection; - trader setVariable ["ExileTraderType", _traderType,true]; - trader allowDamage false; + trader setVariable ["BIS_enableRandomization", false]; + trader setVariable ["BIS_fnc_animalBehaviour_disable", true]; + trader setVariable ["ExileAnimations", _traderAnimation]; + trader setVariable ["ExileTraderType", _traderType,true]; + trader disableAI "ANIM"; + trader disableAI "MOVE"; + trader disableAI "FSM"; + trader disableAI "AUTOTARGET"; + trader disableAI "TARGET"; + trader disableAI "CHECKVISIBLE"; + trader allowDamage false; + trader setFace _traderFace; + removeGoggles trader; removeBackpack trader; removeVest trader; @@ -98,8 +102,10 @@ _logDetail = format['[OCCUPATION:Traders] starting @ %1',time]; trader addVest (_loadOut select 9); trader addBackpack (_loadOut select 10); trader addHeadgear "H_Cap_blk"; - //trader setCaptive true; - //trader switchMove _traderAnimation; + + trader switchMove (_traderAnimation select 0); + trader addEventHandler ["AnimDone", {_this call ExileClient_object_trader_event_onAnimationDone}]; + sleep 0.2; diag_log format["[OCCUPATION:Traders] Created %1 with head %2 at %3 facing %4", _x select 0, _x select 2, _traderPosition, _traderDirection]; } forEach _traders; diff --git a/scripts/occupationTransport.sqf b/scripts/occupationTransport.sqf index 5d110bb..a6a2cd6 100644 --- a/scripts/occupationTransport.sqf +++ b/scripts/occupationTransport.sqf @@ -144,8 +144,9 @@ while {true} do if( _transportType == "land" && SC_colourTransport) then { //_transport setObjectTextureGlobal [0,"#(argb,8,8,3)color(0.518,0.519,0.7,0.2)"]; - } - else + }; + + if( _transportType == "air" && SC_colourTransport) then { _transport setObjectTextureGlobal [0,"#(argb,8,8,3)color(0.518,0.519,0.7,0.2)"]; _transport setObjectTextureGlobal [1,"#(argb,8,8,3)color(0.518,0.519,0.7,0.2)"]; @@ -303,7 +304,7 @@ while {true} do }; deleteMarker _mk; _transport setDamage 1; - _logDetail = format ["[OCCUPATION:transport]:: Transport destroyed @ %1 (%2)",_pos,time]; + _logDetail = format ["[OCCUPATION:transport]:: Transport destroyed @ %1",time]; [_logDetail] call SC_fnc_log; }; if(_markerCount < 2) exitWith {};