diff --git a/README.md b/README.md index 5301356..83e6896 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Exile Occupation (a3_exile_occupation) -![v68 New Features](https://img.shields.io/badge/v68-New%20Features-red.svg) ![Arma 1.70](https://img.shields.io/badge/Arma-1.70-blue.svg) ![Exile 1.0.2 Kohlrabi](https://img.shields.io/badge/Exile-1.0.2%20Kohlrabi-C72651.svg) +![v69 New Features](https://img.shields.io/badge/v69-New%20Features-red.svg) ![Arma 1.72](https://img.shields.io/badge/Arma-1.72-blue.svg) ![Exile 1.0.3 Lemon](https://img.shields.io/badge/Exile-1.0.3%20Lemon-C72651.svg) WTF is Occupation? An AI spawner and monitor to be used in conjunction with DMS and will not work without it: @@ -16,13 +16,13 @@ http://www.armaholic.com/page.php?id=16369 - (Please note, only use the x64 vers For more info: http://www.exilemod.com/topic/12517-release-exile-occupation-roaming-ai -###License Overview: +## License Overview: This work is protected by [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)](http://creativecommons.org/licenses/by-nc-sa/4.0/). By using, downloading, or copying any of the work contained, you agree to the license included. Creative Commons License
Exile Occupation by second_coming is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. -### Donations: +## Donations: Anyone wishing to donate can do so here http://exileyorkshire.co.uk/ All donations go towards coffee to keep me awake :) -###Updated and modified by [FPS]kuplion \ No newline at end of file +### Updated and modified by [FPS]kuplion \ No newline at end of file diff --git a/pre-packaged pbo/a3_exile_occupation.pbo b/pre-packaged pbo/a3_exile_occupation.pbo index 790fbc3..306c75e 100644 Binary files a/pre-packaged pbo/a3_exile_occupation.pbo and b/pre-packaged pbo/a3_exile_occupation.pbo differ diff --git a/source/a3_exile_occupation/config.cpp b/source/a3_exile_occupation/config.cpp index f08916b..9d41155 100644 --- a/source/a3_exile_occupation/config.cpp +++ b/source/a3_exile_occupation/config.cpp @@ -5,7 +5,7 @@ class CfgPatches units[] = {}; weapons[] = {}; requiredVersion = 0.1; - a3_exile_occupation_version = "V68 (16-05-2017)"; + a3_exile_occupation_version = "V69 (21-07-2017)"; requiredAddons[] = {"a3_dms"}; author[]= {"second_coming - updated/modified by [FPS]kuplion"}; }; diff --git a/source/a3_exile_occupation/config.sqf b/source/a3_exile_occupation/config.sqf index bc392eb..473a6d0 100644 --- a/source/a3_exile_occupation/config.sqf +++ b/source/a3_exile_occupation/config.sqf @@ -210,6 +210,7 @@ SC_SpawnHeliCrashGuards = true; // true if you want to enable AI guards SC_numberofHeliCrashes = 5; // if SC_occupyHeliCrashes = true spawn this many Heli Crashes SC_HeliCrashGuards = 6; // number of AI to spawn at each crate SC_HeliCrashGuardsRandomize = true; // Use a random number of guards up to a maximum = SC_HeliCrashGuards (so between 1 and SC_HeliCrashGuards) +SC_HeliCrashMarkers = true; // true if you want to have markers on the Heli Crashes // 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) @@ -455,11 +456,18 @@ if (worldName == 'Chernarus' AND SC_useMapOverrides) then if (worldName == 'Tanoa' AND SC_useMapOverrides) then { - SC_useApexClasses = true; - SC_maxAIcount = 80; + SC_maxAIcount = 80; + SC_useApexClasses = true; }; +if (worldName == 'Malden' AND SC_useMapOverrides) then +{ + SC_maxAIcount = 70; + SC_useApexClasses = false; + +}; + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Apex Specific Settings (only used if SC_useApexClasses = true) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/source/a3_exile_occupation/scripts/functions/fnc_findsafePos.sqf b/source/a3_exile_occupation/scripts/functions/fnc_findsafePos.sqf index 8b8e6aa..debe2e2 100644 --- a/source/a3_exile_occupation/scripts/functions/fnc_findsafePos.sqf +++ b/source/a3_exile_occupation/scripts/functions/fnc_findsafePos.sqf @@ -57,7 +57,7 @@ while{!_validspot} do { _nearestRoad = _nearRoads select 0; _position = position _nearestRoad; - _isEmpty = !(_position isFlatEmpty [15, -1, -1, -1, -1, false, player] isEqualTo []); // Check if there is 15m space around the road position to try and stop vehicles spawning on dirt tracks on Tanoa + _isEmpty = !(_position isFlatEmpty [10, -1, -1, -1, -1, false, player] isEqualTo []); // Check if there is 15m space around the road position to try and stop vehicles spawning on dirt tracks on Tanoa if(!_isEmpty) then { _validspot = false; diff --git a/source/a3_exile_occupation/scripts/functions/fnc_selectName.sqf b/source/a3_exile_occupation/scripts/functions/fnc_selectName.sqf index 607045c..b9b7b01 100644 --- a/source/a3_exile_occupation/scripts/functions/fnc_selectName.sqf +++ b/source/a3_exile_occupation/scripts/functions/fnc_selectName.sqf @@ -9,13 +9,13 @@ if(SC_useRealNames) then { case "survivor": { - _firstName = SC_SurvivorFirstNames call BIS_fnc_selectRandom; - _lastName = SC_SurvivorLastNames call BIS_fnc_selectRandom; + _firstName = selectRandom SC_SurvivorFirstNames; + _lastName = selectRandom SC_SurvivorLastNames; }; case "bandit": { - _firstName = SC_BanditFirstNames call BIS_fnc_selectRandom; - _lastName = SC_BanditLastNames call BIS_fnc_selectRandom; + _firstName = selectRandom SC_BanditFirstNames; + _lastName = selectRandom SC_BanditLastNames; }; }; _name = format["%1 %2",_firstName,_lastName]; diff --git a/source/a3_exile_occupation/scripts/occupationHeliCrashes.sqf b/source/a3_exile_occupation/scripts/occupationHeliCrashes.sqf index 8109c34..5503442 100644 --- a/source/a3_exile_occupation/scripts/occupationHeliCrashes.sqf +++ b/source/a3_exile_occupation/scripts/occupationHeliCrashes.sqf @@ -35,11 +35,23 @@ for "_i" from 1 to SC_numberofHeliCrashes do _validspot = true; //Check if near another heli crash site - _nearOtherCrash = (nearestObjects [_position,["Land_UWreck_MV22_F"],750]) select 0; + _nearOtherCrash = (nearestObjects [_position,[ + // Trucks + "Land_Wreck_BMP2_F", + "Land_Wreck_HMMWV_F", + "Land_Wreck_BRDM2_F", + "Land_Wreck_Ural_F", + // Tanks + "Land_Wreck_Slammer_F", + // Helis + "Land_Wreck_Heli_Attack_02_F", + "Land_UWreck_Heli_Attack_02_F", + // VTOL + "Land_UWreck_MV22_F"],750]) select 0; if (!isNil "_nearOtherCrash") then { _validspot = false; }; //Check if near another loot crate site - _nearOtherCrate = (nearestObjects [_position,["CargoNet_01_box_F"],500]) select 0; + _nearOtherCrate = (nearestObjects [_position,["Exile_Container_SupplyBox"],500]) select 0; if (!isNil "_nearOtherCrate") then { _validspot = false; }; }; @@ -47,7 +59,20 @@ for "_i" from 1 to SC_numberofHeliCrashes do _logDetail = format['[OCCUPATION:HeliCrashes] Crash %1 : Location %2',_i,_position]; [_logDetail] call SC_fnc_log; - _helicopter = "Land_UWreck_MV22_F"; + _helicopter = selectRandom [ + // Trucks + "Land_Wreck_BMP2_F", + "Land_Wreck_HMMWV_F", + "Land_Wreck_BRDM2_F", + "Land_Wreck_Ural_F", + // Tanks + "Land_Wreck_Slammer_F", + // Helis + "Land_Wreck_Heli_Attack_02_F", + "Land_UWreck_Heli_Attack_02_F", + // VTOL + "Land_UWreck_MV22_F" + ]; _vehHeli = _helicopter createVehicle [0,0,0]; _effect = "test_EmptyObjectForSmoke"; @@ -60,6 +85,7 @@ for "_i" from 1 to SC_numberofHeliCrashes do _heliFire = _effect createVehicle (position _vehHeli); _heliFire attachto [_vehHeli, [0,0,-1]]; _vehHeli setPos _position; + _vehHeli setVectorUp surfaceNormal position _vehHeli; if (SC_SpawnHeliCrashGuards) then { @@ -106,7 +132,7 @@ for "_i" from 1 to SC_numberofHeliCrashes do }foreach units _initialGroup; deleteGroup _initialGroup; - [_group, _spawnPosition, 100] call bis_fnc_taskPatrol; + [_group, _spawnPosition, 25] call bis_fnc_taskPatrol; _group setBehaviour "STEALTH"; _group setCombatMode "RED"; @@ -122,12 +148,12 @@ for "_i" from 1 to SC_numberofHeliCrashes do _mapMarkerName = format ["SC_helicrash_marker_%1", _i]; - if (SC_occupyLootCratesMarkers) then + if (SC_HeliCrashMarkers) then { _heli_marker = createMarker [ format ["SC_helicrash_marker_%1", _i], _position]; _heli_marker setMarkerColor "ColorOrange"; _heli_marker setMarkerAlpha 1; - _heli_marker setMarkerText "Helicrash"; + _heli_marker setMarkerText "Heli Crash"; _heli_marker setMarkerType "c_air"; _heli_marker setMarkerBrush "Vertical"; _heli_marker setMarkerSize [(1), (1)]; diff --git a/source/a3_exile_occupation/scripts/occupationLootCrates.sqf b/source/a3_exile_occupation/scripts/occupationLootCrates.sqf index 83b80af..41743a0 100644 --- a/source/a3_exile_occupation/scripts/occupationLootCrates.sqf +++ b/source/a3_exile_occupation/scripts/occupationLootCrates.sqf @@ -32,7 +32,7 @@ for "_i" from 1 to SC_numberofLootCrates do _validspot = true; //Check if near another crate site - _nearOtherCrate = (nearestObjects [_position,["CargoNet_01_box_F"],500]) select 0; + _nearOtherCrate = (nearestObjects [_position,["Exile_Container_SupplyBox"],500]) select 0; if (!isNil "_nearOtherCrate") then { _validspot = false; }; }; @@ -41,12 +41,10 @@ for "_i" from 1 to SC_numberofLootCrates do if (SC_occupyLootCratesMarkers) then { _event_marker = createMarker [ format ["SC_loot_marker_%1", _i], _position]; - _event_marker setMarkerColor "ColorGreen"; + _event_marker setMarkerColor "ColorWhite"; _event_marker setMarkerAlpha 1; _event_marker setMarkerText "Gear Crate"; - _event_marker setMarkerType "loc_Tree"; - _event_marker setMarkerBrush "Vertical"; - _event_marker setMarkerSize [(3), (3)]; + _event_marker setMarkerType "ExileMissionStrongholdIcon"; }; if (SC_SpawnLootCrateGuards) then @@ -94,7 +92,7 @@ for "_i" from 1 to SC_numberofLootCrates do }foreach units _initialGroup; deleteGroup _initialGroup; - [_group, _spawnPosition, 100] call bis_fnc_taskPatrol; + [_group, _spawnPosition, 25] call bis_fnc_taskPatrol; _group setBehaviour "STEALTH"; _group setCombatMode "RED"; @@ -110,7 +108,7 @@ for "_i" from 1 to SC_numberofLootCrates do - _box = "CargoNet_01_box_F" createvehicle _position; + _box = "Exile_Container_SupplyBox" createvehicle _position; clearMagazineCargoGlobal _box; clearWeaponCargoGlobal _box; clearItemCargoGlobal _box; @@ -147,6 +145,38 @@ for "_i" from 1 to SC_numberofLootCrates do { _box addBackpackCargoGlobal [_item, _amount]; }; - }forEach SC_LootCrateItems; + }forEach SC_LootCrateItems; + // Add a wreck for defensive purposes + _wrecks = selectRandom [ + // Trucks + "Land_Wreck_BMP2_F", + "Land_Wreck_HMMWV_F", + "Land_Wreck_BRDM2_F", + "Land_Wreck_Ural_F", + // Tanks + "Land_Wreck_Slammer_F", + // Helis + "Land_Wreck_Heli_Attack_02_F", + "Land_UWreck_Heli_Attack_02_F", + // VTOL + "Land_UWreck_MV22_F" + ]; + + _vehWreck = _wrecks createVehicle [0,0,0]; + + /* + _effect = "test_EmptyObjectForSmoke"; + if(SC_HeliCrashesOnFire) then + { + _effect = "test_EmptyObjectForFireBig"; + }; + _wreckFire = _effect createVehicle (position _vehWreck); + _wreckFire attachto [_vehWreck, [0,0,-1]]; + */ + + _vehWreckRelPos = _box getRelPos [(10 + (ceil random 15)), (random 360)]; + _vehWreck setPos _vehWreckRelPos; + _vehWreck setDir (random 360); + _vehWreck setVectorUp surfaceNormal position _vehWreck; }; \ No newline at end of file diff --git a/source/a3_exile_occupation/scripts/occupationTransport.sqf b/source/a3_exile_occupation/scripts/occupationTransport.sqf index 8fd0424..6d0207a 100644 --- a/source/a3_exile_occupation/scripts/occupationTransport.sqf +++ b/source/a3_exile_occupation/scripts/occupationTransport.sqf @@ -119,7 +119,7 @@ while {true} do _transport setFuel 1; _transport setDamage 0; _transport engineOn true; - _transport flyInHeight 300; + _transport flyInHeight 500; } else { diff --git a/source/a3_exile_occupation/scripts/occupationVehicle.sqf b/source/a3_exile_occupation/scripts/occupationVehicle.sqf index a744ccc..49d9d99 100644 --- a/source/a3_exile_occupation/scripts/occupationVehicle.sqf +++ b/source/a3_exile_occupation/scripts/occupationVehicle.sqf @@ -30,7 +30,7 @@ if((_aiActive > _maxAIcount) && !SC_occupyLandVehicleIgnoreCount) exitWith SC_liveVehicles = count(SC_liveVehiclesArray); -if(SC_liveVehicles >= SC_maxNumberofVehicles) exitWith +if (SC_liveVehicles >= SC_maxNumberofVehicles) exitWith { _logDetail = format['[OCCUPATION:Vehicle] End check %1 currently active (max %2) @ %3',SC_liveVehicles,SC_maxNumberofVehicles,time]; [_logDetail] call SC_fnc_log; @@ -186,7 +186,7 @@ if(_vehiclesToSpawn > 0) then if(SC_occupyVehiclesLocked) then { - _vehicle lock 2; + _vehicle lock 3; _vehicle setVehicleLock "LOCKED"; _vehicle setVariable ["ExileIsLocked", 1, true]; }