Initial Arma Exile setup. Current Mods: a3_dms, a3_exile_occupation, arma server monitor, marma, modified

ExileServer_system_rcon_thread_check.sqf added debug line to track server uptime and server restart countdown
This commit is contained in:
Zepheris 2018-03-01 19:51:54 -07:00
commit 230ea2b038
95 changed files with 21316 additions and 0 deletions

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
x\addons\a3_exile_occupation

View File

@ -0,0 +1 @@
x\addons\a3_exile_occupation

View File

@ -0,0 +1 @@
x\addons\a3_exile_occupation

View File

@ -0,0 +1,251 @@
=================================================================================
V65 (30-08-2016)
=================================================================================
Tweaks to the randomspawn AI to try to get them to search buildings if you hide
from them :)
Get well soon Bastian/Eichi, we're all thinking of you XX
=================================================================================
V64 (27-08-2016)
=================================================================================
Another bug fixed in the repair vehicle eventhandler
=================================================================================
V63 (26-08-2016)
=================================================================================
Major bug fix in the random spawn module
=================================================================================
V62 (25-08-2016)
=================================================================================
Couple of tweaks to the random spawn positioning to fix a performance issue
=================================================================================
V61 (24-08-2016)
=================================================================================
Fixes for the eventhandler on ground vehicles that were causing server freezing
other additional tweaks (can't remember exactly what :o )
=================================================================================
V60 (15-08-2016)
=================================================================================
Bug fixes and tweaks
=================================================================================
V59 (12-08-2016)
=================================================================================
Random spawn tweaks and a few other optimisations
=================================================================================
V58 (10-08-2016)
=================================================================================
Initial version of random spawn module added
=================================================================================
V57 (09-08-2016)
=================================================================================
OccupationPlaces module fixed when the location found can't find a safeposition to
spawn the AI
=================================================================================
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)
=================================================================================
Tweaked military AI
Added _vehicleObject setVariable ["ExileIsPersistent", false]; to vehicle spawns
to allow them to be claimed using:
http://www.exilemod.com/topic/13283-updated-claim-non-persistent-vehicles/
=================================================================================
V54 (26-07-2016)
=================================================================================
Reworked military spawning to include the entire map rather than a small area
(including the new military buildings on Tanoa). Tweaked the spawning of AI in an
attempt to stop groups of AI randomly murdering each other when spawning
(thanks to Zupa for the pointers)
=================================================================================
V53 (20-07-2016)
=================================================================================
Added checks to stop vehicles spawning on dirt tracks on Tanoa
Added blacklist area for Tanoa Airport
Fixed typo in heli eventhandler
=================================================================================
V52 (19-07-2016)
=================================================================================
Traders 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)
=================================================================================
Added the option to specify fixed waypoints for the public transport
=================================================================================
V49 (22-06-2016)
=================================================================================
Changed the map marker names for loot crates to stop clashing with a previously
released loot crate script
Fixed a bug in the unstick script which was resulting in the patrol order being
wiped after the vehicle was unstuck
Added SC_useApexClasses to config (allow or disallow use of Apex items in Occupation)
Added SC_colourTransport to config (allow or disallow the changing of the colour
of the public transport)
Added SC_secureTransport to config (allow or disallow damage to the public transport
and its driver, set to false to allow damage). If the driver dies then the vehicle
will explode.
=================================================================================
V48 (16-06-2016)
=================================================================================
Added the setting SC_useMapOverrides, setting to true activates the map specific
overrides at the bottom of the config.sqf, false ignores the settings
Removed the over write for DMS_Enable_RankChange
Added in checks for the transport module to only spawn the public transport if there
are more than 1 destination map markers (in the dev branch map markers are not
displaying correctly intermittently which is causing issues). Check the server rpt
if your transport is not spawning and you have activated it.
=================================================================================
V47 (13-06-2016)
=================================================================================
Fixed a bug in Occupation places modules
=================================================================================
V46 (10-06-2016)
=================================================================================
Dynamic Traders are now working (placement of the base can be temperamental)
If you want to design your own trader base, traders are automatically placed in front
of the large trader signs. Look in the example trader1.sqf to see how it works. The
example file was exported from Eden using M3Editor.
=================================================================================
V45 (05-06-2016)
=================================================================================
Helicrash rare loot option added
Fixed the number of Loot crates spawning
Fixed the random public transport selection
Improved vehicle AI (they shouldn't stop patrolling now)
=================================================================================
V44 (31-05-2016)
=================================================================================
Fixed error when real names were disabled
Added a process reporter module which logs server processes every 60 seconds to
the rpt or dedicated log file if using infiSTAR logging (useful for diagnosing
poor server performance)
=================================================================================
V43 (26-05-2016)
=================================================================================
Added the option to specify multiple class names to potentially be used for the
public transport option. Tweaked Icon for Occupation Airlines
Added an option (SC_numberofHeliCrashesFire) in the config that allows you to turn
off the fire at heli crashes
AI units should attempt to take ammo from dead players/dead AI and loot spawns if
they run out of ammo and there is suitable ammo available
=================================================================================
V42 (22-05-2016)
=================================================================================
Forced reload after spawning AI to make sure they are ready to fire when they spot
an enemy
Added in compatibility with the new DMS feature AI freezing
=================================================================================
V41 (17-05-2016)
=================================================================================
Dead AI should be ejected from any captured land vehicle when you get in them
=================================================================================
V40 (12-05-2016)
=================================================================================
Added SC_ropeAttach variable to the config.sqf to allow/disallow airlifting of lootcrates
Renamed and altered folder structure for functions and some eventhandlers
Map markers on occupationPlaces and now get removed when the AI are all killed
Tweaked the land vehicle repair event handler
Added SC_blackListedAreas to allow blacklisting of areas of the map
=================================================================================
V39 (08-05-2016)
=================================================================================
Added a check to make sure the array of vehicles checked in the unstick routine exist
before trying to unstick them
Removed the use dependency on DMS_fnc_findSafePos as the format is changing in the
test version of DMS, I will switch back to using it once it has been rolled out and
everyone is using it
=================================================================================
V38 (08-05-2016)
=================================================================================
Added a check to the transport module to check the transport vehicle class name
is valid and to to make sure there are valid map markers to use for stopping points
=================================================================================
V37 (06-05-2016)
=================================================================================
Added limit checks for the amount of each class of vehicle in Sky, Sea and Vehicle modules
=================================================================================
V36 (05-05-2016)
=================================================================================
Fixed the checks for valid vehicles in Sky, Sea and Vehicle modules
=================================================================================
V35 (05-05-2016)
=================================================================================
Added checks for valid vehicles in Sky, Sea and Vehicle modules
Added the ability to add names to be used for AI
Altered eventhandlers triggered to repair land vehicles that were getting stuck in a loop
Added the option to ignore AI count when spawning land vehicles (set SC_occupyVehicleIgnoreCount = true)
=================================================================================
V28-V31 (27-04-2016)
=================================================================================
Altereed a few eventhandlers
Fixed multiple static spawns so they are independent of each other
=================================================================================
V27 (26-04-2016)
=================================================================================
Added the option fully control the gear assigned to bandit and survivor units
Added the option for helicopters as public transport, the heli travels between traders
and lands for about 60 seconds. Setting SC_occupyTransportClass to a helicopter classname
will switch it over to using a helicopter, if you want to continue using the land vehicle
set SC_occupyTransportClass to a land vehicle.
Added the option to set the maximum crew (crew count will be a random number between
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.

View File

@ -0,0 +1,27 @@
class CfgPatches
{
class a3_exile_occupation
{
units[] = {};
weapons[] = {};
requiredVersion = 0.1;
a3_exile_occupation_version = "V69 (21-07-2017)";
requiredAddons[] = {"a3_dms"};
author[]= {"second_coming - updated/modified by [FPS]kuplion"};
};
};
class CfgFunctions
{
class yorkshire
{
class main
{
class YORKS_init
{
postInit = 1;
file = "\x\addons\a3_exile_occupation\initServer.sqf";
};
};
};
};

View File

@ -0,0 +1,985 @@
////////////////////////////////////////////////////////////////////////
//
// Exile Occupation by second_coming
// http://www.exilemod.com/profile/60-second_coming/
//
// For support, visit:
// http://www.exilemod.com/topic/12517-release-exile-occupation-roaming-ai-more/
//
// This script uses the fantastic DMS by Defent and eraser1:
// http://www.exilemod.com/topic/61-dms-defents-mission-system/
//
////////////////////////////////////////////////////////////////////////
// Shared Config for each occupation monitor
SC_debug = false; // set to true to turn on debug features (not recommended for live servers)
SC_extendedLogging = false; // set to true for additional
SC_infiSTAR_log = false; // true Use infiSTAR logging, false logs to server rpt
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_maxAIcount = 200; // 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 = 20; // 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_minDistanceToSpawnZones = 750; // Minimum distance in metres to the nearest spawn zone
SC_minDistanceToTraders = 750; // Minimum distance in metres to the nearest trader zone
SC_minDistanceToTerritory = 350; // Minimum distance in metres to the nearest player territory
SC_minDistanceToPlayer = 250; // 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 = false; // 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 = false; // 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) true if you want random spawning AI that hunt for nearby players
SC_occupyMilitary = true; // 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
SC_occupyHeliCrashes = true; // true if you want to have Dayz style helicrashes
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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 (Work in progress)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_randomSpawnMinPlayers = 1; // Minimum number of players to be online before random spawning AI can spawn
SC_randomSpawnMaxGroups = 20; // Maximum amount of random AI groups allowed at any time
SC_randomSpawnMinGroupSize = 1; // Minimum amount of random AI groups allowed per group
SC_randomSpawnMaxGroupSize = 5; // Maximum amount of random AI groups allowed per group
SC_randomSpawnChance = 30; // Percentage chance of spawning if suitable player found
SC_randomSpawnIgnoreCount = true; // true if you want spawn random AI groups regardless of overall AI count (they still count towards the total though)
SC_randomSpawnFrequency = 600; // time in seconds between the possibility of random AI hunting the same player (1800 for 30 minutes)
SC_randomSpawnNearBases = true; // true if you want to allow random spawns in range of territories
SC_randomSpawnNearSpawns = true; // true if you want to allow random spawns in range of spawn zones
SC_randomSpawnTargetBambis = true; // true if you want to allow random spawns to target bambis
SC_randomSpawnAnnounce = true; // true if you want a warning toast issued to all players when AI spawns
SC_randomSpawnNameTarget = true; // true if you want to name the targeted player
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Occupy Places Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
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)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Trader Base Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
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
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Occupy Static Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_staticIgnoreNearbyPlayers = false;// Spawn even if players are nearby
SC_staticIgnoreAICount = true;// Ignore the AI count for Static AI Spawns
SC_staticBandits = [ //[[pos],ai count,radius,search buildings]
];
SC_staticSurvivors = [ //[[pos],ai count,radius,search buildings]
//[[3770,8791,0],8,250,true]
];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Public Transport Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_colourTransport = false; // 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_Orca_BlackCustom"]; // to always use the same vehicle, specify one option only
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 = [
[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 = [
[1000,1000,0],
[2000,2000,0],
[3000,3000,0],
[4000,4000,0]
];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Loot Crate Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
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_SpawnLootCrateGuards = true; // true if you want to enable AI guards
SC_numberofLootCrates = 6; // if SC_occupyLootCrates = true spawn this many loot crates (overrided below for Namalsk)
SC_LootCrateGuards = 5; // 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 = true; // 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 = [
["Exile_Melee_Axe",0,1],
["Exile_Item_GloriousKnakworst",0,2],
["Exile_Item_PlasticBottleFreshWater",0,2],
["Exile_Item_Beer",0,1],
["Exile_Item_BaseCameraKit",0,2],
["Exile_Item_InstaDoc",0,1],
["Exile_Item_Matches",0,1],
["Exile_Item_CookingPot",0,1],
["Exile_Item_MetalPole",0,1],
["Exile_Item_LightBulb",0,1],
["Exile_Item_FuelCanisterEmpty",0,1],
["Exile_Item_WoodPlank",0,8],
["Exile_Item_woodFloorKit",0,2],
["Exile_Item_WoodWindowKit",0,1],
["Exile_Item_WoodDoorwayKit",0,1],
["Exile_Item_WoodFloorPortKit",0,2],
["Exile_Item_Laptop",0,1],
["Exile_Item_CodeLock",0,1],
["Exile_Item_Cement",0,10],
["Exile_Item_Sand",0,10],
["Exile_Item_MetalWire",0,5],
["Exile_Item_WaterCanisterEmpty",0,2],
["Exile_Item_Shovel",0,1],
["Exile_Item_MetalScrews",0,5],
//Added by Z
["Exile_Item_WorkBenchKit",0,1],
["Exile_Item_WoodWindowKit",0,2],
["Exile_Item_WoodWallKit",0,5],
["Exile_Item_WoodWallHalfKit",0,5],
["Exile_Item_WoodSupportKit",0,5],
["Exile_Item_WoodStairsKit",0,2],
["Exile_Item_WoodGateKit",0,1],
["Exile_Item_WoodDoorKit",0,2],
["Exile_Item_MetalHedgehogKit",0,1],
["Land_ChairWood_F_Kit",0,1],
["Land_CargoBox_V1_F_Kit",0,1],
["Land_Sun_chair_F_Kit",0,1],
["Land_Sunshade_04_F_Kit",0,1],
["Land_LampShabby_F_Kit",0,1],
["Exile_Plant_GreenBush_Kit",0,1],
["Land_CampingChair_V2_F_Kit",0,1],
["Land_CampingChair_V1_F_Kit",0,1],
["Land_CampingTable_F_Kit",0,1],
["Land_FlatTV_01_F_Kit",0,1],
["Land_ChairPlastic_F_Kit",0,1],
["Land_GymBench_01_F_Kit",0,1],
["Land_GymRack_03_F_Kit",0,1],
["Land_OfficeCabinet_01_F_Kit",0,1],
["Land_OfficeChair_01_F_Kit",0,1],
["Land_RattanChair_01_F_Kit",0,1],
["Land_RattanTable_01_F_Kit",0,1],
["Land_Sun_chair_green_F_Kit",0,1],
["Land_Sunshade_01_F_Kit",0,1],
["Land_Sunshade_02_F_Kit",0,1],
["Land_Sunshade_03_F_Kit",0,1],
["Land_Sunshade_F_Kit",0,1],
["Land_TablePlastic_01_F_Kit",0,1],
["Land_WoodenTable_large_F_Kit",0,1],
["Land_WoodenTable_small_F_Kit",0,1],
["Land_DieselGroundPowerUnit_01_F_Kit",0,1],
["Land_Workbench_01_F_Kit",0,1],
["RoadCone_F_Kit",0,1],
["RoadCone_L_F_Kit",0,1],
["Fridge_01_closed_F_Kit",0,1],
["Exile_Item_DuctTape",0,3],
["Exile_Item_ExtensionCord",0,3],
["Exile_Item_JunkMetal",0,3],
["Exile_Item_BBQSandwich",0,2],
["Exile_Item_Can_Empty",0,3],
["Exile_Item_Cheathas",0,2],
["Exile_Item_ChristmasTinner",0,2],
["Exile_Item_EMRE",0,2],
["Exile_Item_InstantCoffee",0,2],
["Exile_Item_MacasCheese",0,2],
["Exile_Item_Moobar",0,2],
["Exile_Item_Noodles",0,2],
["Exile_Item_Raisins",0,2],
["Exile_Item_Surstromming",0,2],
["Exile_Item_ChocolateMilk",0,2],
["Exile_Item_EnergyDrink",0,2],
["Exile_Item_MountainDupe",0,2],
["Exile_Item_PlasticBottleCoffee",0,2],
["Exile_Item_PowerDrink",0,2],
["Exile_Item_CanOpener",0,1],
["Exile_Item_Grinder",0,1],
["Exile_Item_Handsaw",0,1],
["Exile_Item_Pliers",0,1],
["Exile_Melee_SledgeHammmer",0,1]
];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Blacklisted Zones
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
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
[[11685,2666,0], 500, "Tanoa"], // Lijnhaven Occupation DMS Static Mission
[[11580,2051,0], 500, "Tanoa"], // Lijnhaven Traders
[[7228,6986,0], 250, "Tanoa"] // Tanoa Airport
];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Heli Crash Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_occupyHeliCrashesStatic = false; // true if you want to have random Heli Crash spawn in pre-defined locations set in SC_occupyHeliCrashesLocations
SC_occupyHeliCrashesLocations = [
[1000,1000,0],
[2000,2000,0],
[3000,3000,0],
[4000,4000,0]
];
SC_HeliCrashesOnFire = true; // true if you want the crash on fire, false if you just want smoke
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)
// to add a fixed amount make the second number 0
SC_HeliCrashItems = [
["B_Parachute",1,1],
["H_CrewHelmetHeli_B",1,1],
["ItemGPS",0,1],
["Exile_Item_InstaDoc",0,1],
["Exile_Item_PlasticBottleFreshWater",2,2],
["Exile_Item_EMRE",2,2]
];
SC_HeliCrashRareItems = [
["HandGrenade",0,2],
["APERSBoundingMine_Range_Mag",0,2]
];
SC_HeliCrashRareItemChance = 10; // percentage chance to spawn each SC_HeliCrashRareItems
// Array of possible weapons to place in the crate
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]
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Roaming Vehicle Setup - (applies to ground, air and sea vehicles)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SC_minimumCrewAmount = 2; // Minimum amount of AI allowed in a vehicle
SC_maximumCrewAmount = 5; // 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 = 15; // How many roaming vehicles to spawn
SC_occupyLandVehicleIgnoreCount = 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)
SC_VehicleClassToUse = [["Exile_Car_Hatchback_Rusty1",1],["Exile_Car_Hatchback_Rusty2",1]];
/*["Exile_Car_Hatchback_Rusty3",1],
["Exile_Car_Hatchback_Sport_Red",1],
["Exile_Car_SUV_Red",1],
["Exile_Car_Offroad_Rusty1",1],
["Exile_Car_Offroad_Rusty2",1],
["Exile_Car_Offroad_Rusty3",1],
["Exile_Car_Offroad_Repair_Civillian",1],
["Exile_Car_Offroad_Armed_Guerilla01",1],
["Exile_Car_Strider",1],
["Exile_Car_Hunter",1],
["Exile_Car_Ifrit",1],
["Exile_Car_Van_Black",1],
["Exile_Car_Van_Box_Black",1],
["Exile_Car_Van_Fuel_Black",1],
["Exile_Car_Zamak",1],
["Exile_Car_Tempest",1],
["Exile_Car_HEMMT",1],
["Exile_Bike_QuadBike_Black",1],
["Exile_Bike_QuadBike_Blue",1],
["Exile_Bike_QuadBike_Csat",1],
["Exile_Bike_QuadBike_Fie",1],
["Exile_Bike_QuadBike_Guerilla01",1],
["Exile_Bike_QuadBike_Guerilla01",1],
["Exile_Bike_QuadBike_Nato",1],
["Exile_Bike_QuadBike_Red",1],
["Exile_Bike_QuadBike_White",1],
["Exile_Car_UAZ_Open_Green",1],
// Additional Vehicles
["B_GEN_Offroad_01_gen_F",1],
["C_Offroad_02_unarmed_F",1],
["I_C_Offroad_02_unarmed_F",1],
["Exile_Car_LandRover_Green",1],
["Exile_Car_LandRover_Red",1],
["Exile_Car_LandRover_Urban",1],
["Exile_Car_LandRover_Desert",1],
["Exile_Bike_QuadBike_Black",1],
["Exile_Car_UAZ_Open_Green",1],
["Exile_Car_SUV_Black",1],
["Exile_Car_SUV_Grey",1],
["Exile_Car_SUV_Orange",1],
["Exile_Car_SUV_Red",1],
["Exile_Car_SUV_Rusty1",1],
["Exile_Car_SUV_Rusty2",1],
["Exile_Car_SUV_Rusty3",1],
["Exile_Car_SUV_Armed_Black",1],
["Exile_Car_Offroad_Guerilla01",1],
["Exile_Car_Offroad_Guerilla02",1],
["Exile_Car_Offroad_Guerilla03",1],
["Exile_Car_Offroad_Guerilla04",1],
["Exile_Car_Offroad_Guerilla01",1],
["Exile_Car_Offroad_Guerilla06",1],
["Exile_Car_Offroad_Guerilla07",1],
["Exile_Car_Offroad_Guerilla08",1],
["Exile_Car_Offroad_Guerilla09",1],
["Exile_Car_Offroad_Guerilla10",1],
["Exile_Car_Offroad_Guerilla11",1],
["Exile_Car_Offroad_Guerilla12",1],
["B_LSV_01_unarmed_black_F",1],
["O_T_LSV_02_unarmed_black_F",1],
["O_T_Truck_03_device_ghex_F",1],
["Exile_Car_Offroad_Armed_Guerilla01",1],
["Exile_Car_Offroad_Armed_Guerilla02",1],
["Exile_Car_Offroad_Armed_Guerilla03",1],
["Exile_Car_Offroad_Armed_Guerilla04",1],
["Exile_Car_Offroad_Armed_Guerilla01",1],
["Exile_Car_Offroad_Armed_Guerilla06",1],
["Exile_Car_Offroad_Armed_Guerilla07",1],
["Exile_Car_Offroad_Armed_Guerilla08",1],
["Exile_Car_Offroad_Armed_Guerilla09",1],
["Exile_Car_Offroad_Armed_Guerilla10",1],
["Exile_Car_Offroad_Armed_Guerilla11",1],
["Exile_Car_Offroad_Armed_Guerilla12",1],
["B_T_LSV_01_armed_F",1],
["B_T_LSV_01_unarmed_F",1],
["O_T_LSV_02_armed_F",1],
["B_LSV_01_armed_black_F",1],
["B_LSV_01_unarmed_olive_F",1],
["B_LSV_01_unarmed_sand_F",1],
["B_T_LSV_01_armed_CTRG_F",1],
["B_T_LSV_01_armed_black_F",1],
["B_T_LSV_01_armed_olive_F",1],
["B_T_LSV_01_armed_sand_F",1],
["O_LSV_02_armed_F",1],
["O_LSV_02_armed_arid_F",1],
["O_LSV_02_armed_black_F",1],
["O_LSV_02_armed_ghex_F",1],
["O_LSV_02_armed_viper_F",1],
["O_T_LSV_02_armed_arid_F",1],
["O_T_LSV_02_armed_black_F",1],
["O_T_LSV_02_armed_ghex_F",1],
["O_T_LSV_02_armed_viper_F",1],
["O_LSV_02_unarmed_F",1],
["O_LSV_02_unarmed_arid_F",1],
["O_LSV_02_unarmed_black_F",1],
["O_LSV_02_unarmed_ghex_F",1],
["O_LSV_02_unarmed_viper_F",1],
["O_T_LSV_02_unarmed_arid_F",1],
["O_T_LSV_02_unarmed_ghex_F",1],
["O_T_LSV_02_unarmed_viper_F",1],
["Exile_Car_Lada_Green",1],
["Exile_Car_Lada_Hipster",1],
["Exile_Car_Lada_Red",1],
["Exile_Car_Lada_Taxi",1],
["Exile_Car_Lada_White",1],
["Exile_Car_Volha_Black",1],
["Exile_Car_Volha_Blue",1],
["Exile_Car_Volha_White",1],
["Exile_Car_Hatchback_Sport_Beige",1],
["Exile_Car_Hatchback_Sport_Blue",1],
["Exile_Car_Hatchback_Sport_Green",1],
["Exile_Car_Hatchback_Sport_Orange",1],
["Exile_Car_Hatchback_Sport_Red",1],
["Exile_Car_Hatchback_Sport_White",1],
["Exile_Car_Offroad_Beige",1],
["Exile_Car_Offroad_Blue",1],
["Exile_Car_Offroad_BlueCustom",1],
["Exile_Car_Offroad_DarkRed",1],
["Exile_Car_Offroad_Red",1],
["Exile_Car_Offroad_White",1],
["Exile_Car_HMMWV_M134_Desert",1],
["Exile_Car_HMMWV_M134_Green",1],
["Exile_Car_HMMWV_M2_Desert",1],
["Exile_Car_HMMWV_M2_Green",1],
["Exile_Car_HMMWV_MEV_Desert",1],
["Exile_Car_HMMWV_MEV_Green",1],
["Exile_Car_HMMWV_UNA_Green",1],
["Exile_Car_HMMWV_UNA_Desert",1],
["Exile_Car_Van_Guerilla01",1],
["Exile_Car_Van_Guerilla02",1],
["Exile_Car_Van_Guerilla03",1],
["Exile_Car_Van_Guerilla04",1],
["Exile_Car_Van_Guerilla01",1],
["Exile_Car_Van_Guerilla06",1],
["Exile_Car_Van_Guerilla07",1],
["Exile_Car_Van_Guerilla08",1],
["Exile_Car_Van_Red",1],
["Exile_Car_Van_White",1],
["Exile_Car_Van_Box_Guerilla01",1],
["Exile_Car_Van_Box_Guerilla02",1],
["Exile_Car_Van_Box_Guerilla03",1],
["Exile_Car_Van_Box_Guerilla04",1],
["Exile_Car_Van_Box_Guerilla01",1],
["Exile_Car_Van_Box_Guerilla06",1],
["Exile_Car_Van_Box_Guerilla07",1],
["Exile_Car_Van_Box_Guerilla08",1],
["Exile_Car_Van_Box_Red",1],
["Exile_Car_Van_Box_White",1],
["Exile_Car_Van_Fuel_Guerilla01",1],
["Exile_Car_Van_Fuel_Guerilla02",1],
["Exile_Car_Van_Fuel_Guerilla02",1],
["Exile_Car_Van_Fuel_Red",1],
["Exile_Car_Van_Fuel_White",1],
["Exile_Car_MB4WD",1],
["Exile_Car_MB4WDOpen",1]*/
//];
SC_VehicleClassToUseRare = [["Exile_Car_Hatchback_Rusty2",1],["Exile_Car_Hatchback_Rusty3",1]];
//["Exile_Car_Hatchback_Rusty1",1],
/*["Exile_Car_Hatchback_Sport_Red",1],
["Exile_Car_SUV_Red",1],
["Exile_Car_Offroad_Rusty1",1],
["Exile_Car_Offroad_Rusty2",1],
["Exile_Car_Offroad_Rusty3",1],
["Exile_Car_Offroad_Repair_Civillian",1],
["Exile_Car_Offroad_Armed_Guerilla01",1],
["Exile_Car_Strider",1],
["Exile_Car_Hunter",1],
["Exile_Car_Ifrit",1],
["Exile_Car_Van_Black",1],
["Exile_Car_Van_Box_Black",1],
["Exile_Car_Van_Fuel_Black",1],
["Exile_Car_Zamak",1],
["Exile_Car_Tempest",1],
["Exile_Car_HEMMT",1],
["Exile_Bike_QuadBike_Black",1],
["Exile_Bike_QuadBike_Blue",1],
["Exile_Bike_QuadBike_Csat",1],
["Exile_Bike_QuadBike_Fie",1],
["Exile_Bike_QuadBike_Guerilla01",1],
["Exile_Bike_QuadBike_Guerilla01",1],
["Exile_Bike_QuadBike_Nato",1],
["Exile_Bike_QuadBike_Red",1],
["Exile_Bike_QuadBike_White",1],
["Exile_Car_UAZ_Open_Green",1],
// Additional Vehicles
["B_GEN_Offroad_01_gen_F",1],
["C_Offroad_02_unarmed_F",1],
["I_C_Offroad_02_unarmed_F",1],
["Exile_Car_LandRover_Green",1],
["Exile_Car_LandRover_Red",1],
["Exile_Car_LandRover_Urban",1],
["Exile_Car_LandRover_Desert",1],
["Exile_Bike_QuadBike_Black",1],
["Exile_Car_UAZ_Open_Green",1],
["Exile_Car_SUV_Black",1],
["Exile_Car_SUV_Grey",1],
["Exile_Car_SUV_Orange",1],
["Exile_Car_SUV_Red",1],
["Exile_Car_SUV_Rusty1",1],
["Exile_Car_SUV_Rusty2",1],
["Exile_Car_SUV_Rusty3",1],
["Exile_Car_SUV_Armed_Black",1],
["Exile_Car_Offroad_Guerilla01",1],
["Exile_Car_Offroad_Guerilla02",1],
["Exile_Car_Offroad_Guerilla03",1],
["Exile_Car_Offroad_Guerilla04",1],
["Exile_Car_Offroad_Guerilla01",1],
["Exile_Car_Offroad_Guerilla06",1],
["Exile_Car_Offroad_Guerilla07",1],
["Exile_Car_Offroad_Guerilla08",1],
["Exile_Car_Offroad_Guerilla09",1],
["Exile_Car_Offroad_Guerilla10",1],
["Exile_Car_Offroad_Guerilla11",1],
["Exile_Car_Offroad_Guerilla12",1],
["B_LSV_01_unarmed_black_F",1],
["O_T_LSV_02_unarmed_black_F",1],
["O_T_Truck_03_device_ghex_F",1],
["Exile_Car_Offroad_Armed_Guerilla01",1],
["Exile_Car_Offroad_Armed_Guerilla02",1],
["Exile_Car_Offroad_Armed_Guerilla03",1],
["Exile_Car_Offroad_Armed_Guerilla04",1],
["Exile_Car_Offroad_Armed_Guerilla01",1],
["Exile_Car_Offroad_Armed_Guerilla06",1],
["Exile_Car_Offroad_Armed_Guerilla07",1],
["Exile_Car_Offroad_Armed_Guerilla08",1],
["Exile_Car_Offroad_Armed_Guerilla09",1],
["Exile_Car_Offroad_Armed_Guerilla10",1],
["Exile_Car_Offroad_Armed_Guerilla11",1],
["Exile_Car_Offroad_Armed_Guerilla12",1],
["B_T_LSV_01_armed_F",1],
["B_T_LSV_01_unarmed_F",1],
["O_T_LSV_02_armed_F",1],
["B_LSV_01_armed_black_F",1],
["B_LSV_01_unarmed_olive_F",1],
["B_LSV_01_unarmed_sand_F",1],
["B_T_LSV_01_armed_CTRG_F",1],
["B_T_LSV_01_armed_black_F",1],
["B_T_LSV_01_armed_olive_F",1],
["B_T_LSV_01_armed_sand_F",1],
["O_LSV_02_armed_F",1],
["O_LSV_02_armed_arid_F",1],
["O_LSV_02_armed_black_F",1],
["O_LSV_02_armed_ghex_F",1],
["O_LSV_02_armed_viper_F",1],
["O_T_LSV_02_armed_arid_F",1],
["O_T_LSV_02_armed_black_F",1],
["O_T_LSV_02_armed_ghex_F",1],
["O_T_LSV_02_armed_viper_F",1],
["O_LSV_02_unarmed_F",1],
["O_LSV_02_unarmed_arid_F",1],
["O_LSV_02_unarmed_black_F",1],
["O_LSV_02_unarmed_ghex_F",1],
["O_LSV_02_unarmed_viper_F",1],
["O_T_LSV_02_unarmed_arid_F",1],
["O_T_LSV_02_unarmed_ghex_F",1],
["O_T_LSV_02_unarmed_viper_F",1],
["Exile_Car_Lada_Green",1],
["Exile_Car_Lada_Hipster",1],
["Exile_Car_Lada_Red",1],
["Exile_Car_Lada_Taxi",1],
["Exile_Car_Lada_White",1],
["Exile_Car_Volha_Black",1],
["Exile_Car_Volha_Blue",1],
["Exile_Car_Volha_White",1],
["Exile_Car_Hatchback_Sport_Beige",1],
["Exile_Car_Hatchback_Sport_Blue",1],
["Exile_Car_Hatchback_Sport_Green",1],
["Exile_Car_Hatchback_Sport_Orange",1],
["Exile_Car_Hatchback_Sport_Red",1],
["Exile_Car_Hatchback_Sport_White",1],
["Exile_Car_Offroad_Beige",1],
["Exile_Car_Offroad_Blue",1],
["Exile_Car_Offroad_BlueCustom",1],
["Exile_Car_Offroad_DarkRed",1],
["Exile_Car_Offroad_Red",1],
["Exile_Car_Offroad_White",1],
["Exile_Car_HMMWV_M134_Desert",1],
["Exile_Car_HMMWV_M134_Green",1],
["Exile_Car_HMMWV_M2_Desert",1],
["Exile_Car_HMMWV_M2_Green",1],
["Exile_Car_HMMWV_MEV_Desert",1],
["Exile_Car_HMMWV_MEV_Green",1],
["Exile_Car_HMMWV_UNA_Green",1],
["Exile_Car_HMMWV_UNA_Desert",1],
["Exile_Car_Van_Guerilla01",1],
["Exile_Car_Van_Guerilla02",1],
["Exile_Car_Van_Guerilla03",1],
["Exile_Car_Van_Guerilla04",1],
["Exile_Car_Van_Guerilla01",1],
["Exile_Car_Van_Guerilla06",1],
["Exile_Car_Van_Guerilla07",1],
["Exile_Car_Van_Guerilla08",1],
["Exile_Car_Van_Red",1],
["Exile_Car_Van_White",1],
["Exile_Car_Van_Box_Guerilla01",1],
["Exile_Car_Van_Box_Guerilla02",1],
["Exile_Car_Van_Box_Guerilla03",1],
["Exile_Car_Van_Box_Guerilla04",1],
["Exile_Car_Van_Box_Guerilla01",1],
["Exile_Car_Van_Box_Guerilla06",1],
["Exile_Car_Van_Box_Guerilla07",1],
["Exile_Car_Van_Box_Guerilla08",1],
["Exile_Car_Van_Box_Red",1],
["Exile_Car_Van_Box_White",1],
["Exile_Car_Van_Fuel_Guerilla01",1],
["Exile_Car_Van_Fuel_Guerilla02",1],
["Exile_Car_Van_Fuel_Guerilla02",1],
["Exile_Car_Van_Fuel_Red",1],
["Exile_Car_Van_Fuel_White",1],
["Exile_Car_MB4WD",1],
["Exile_Car_MB4WDOpen",1]*/
//];
// Array of arrays of ground vehicles which can be used by Survivor AI patrols (the number next to next vehicle is the maximum amount of that class allowed, 0 for no limit)
SC_SurvivorVehicleClassToUse = [
["Exile_Car_LandRover_Green",0],
["Exile_Bike_QuadBike_Black",2],
["Exile_Car_UAZ_Open_Green",2]
];
SC_SurvivorVehicleClassToUseRare = [
["Exile_Car_Hunter",1],
["Exile_Car_HEMMT",1],
["Exile_Car_Zamak",1],
["Exile_Car_Offroad_Armed_Guerilla12",1],
["Exile_Car_Offroad_Armed_Guerilla03",1],
["Exile_Car_Tempest",1]
];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Roaming Aircraft Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Settings for roaming airborne AI (non armed helis will just fly around)
SC_maxNumberofHelis = 2;
SC_occupySkyVehicleIgnoreCount = true; // true if you want spawn vehicles regardless of overall AI count
// 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_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)
SC_maxNumberofBoats = 0;
SC_occupySeaVehicleIgnoreCount = false; // true if you want spawn vehicles regardless of overall AI count
// Array of boats 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_BoatClassToUse = [
["B_Boat_Armed_01_minigun_F",1],
["I_Boat_Armed_01_minigun_F",1],
["O_Boat_Transport_01_F",0],
["Exile_Boat_MotorBoat_Police",1]
];
SC_occupyBoatUseFixedPos = false; // True if you want to specify the patrol positions and radius of the area to patrol / false for random
// if you set SC_maxNumberofBoats 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"]
];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Occupy Military Setup
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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",
"Land_Cargo_House_V3_F","Land_Cargo_HQ_V1_F","Land_Cargo_HQ_V2_F","Land_Cargo_HQ_V3_F",
"Land_u_Barracks_V2_F","Land_i_Barracks_V2_F","Land_i_Barracks_V1_F","Land_Cargo_Patrol_V1_F",
"Land_Cargo_Patrol_V2_F","Land_Cargo_Tower_V1_F","Land_Cargo_Tower_V1_No1_F","Land_Cargo_Tower_V1_No2_F",
"Land_Cargo_Tower_V1_No3_F","Land_Cargo_Tower_V1_No4_F","Land_Cargo_Tower_V1_No5_F","Land_Cargo_Tower_V1_No6_F",
"Land_Cargo_Tower_V1_No7_F","Land_Cargo_Tower_V2_F","Land_Cargo_Tower_V3_F","Land_MilOffices_V1_F",
"Land_Radar_F","Land_budova4_winter","land_hlaska","Land_Vysilac_FM","land_st_vez","Land_ns_Jbad_Mil_Barracks",
"Land_ns_Jbad_Mil_ControlTower","Land_ns_Jbad_Mil_House","land_pozorovatelna","Land_vys_budova_p1",
"Land_Vez","Land_Mil_Barracks_i","Land_Mil_Barracks_L","Land_Mil_Barracks",
"Land_Hlidac_budka","Land_Ss_hangar","Land_Mil_ControlTower","Land_a_stationhouse",
"Land_Farm_WTower","Land_Mil_Guardhouse","Land_A_statue01","Land_A_Castle_Gate",
"Land_A_Castle_Donjon","Land_A_Castle_Wall2_30","Land_A_Castle_Stairs_A",
"Land_i_Barracks_V1_dam_F","Land_Cargo_Patrol_V3_F","Land_Radar_Small_F","Land_Dome_Big_F",
"Land_Dome_Small_F","Land_Army_hut3_long_int","Land_Army_hut_int","Land_Army_hut2_int",
// Additional Buildings
"Land_Barracks_01_camo_F","Land_Barracks_01_grey_F","land_AII_last_floor","land_AII_middle_floor",
"land_AII_upper_part","Land_Ind_IlluminantTower","Land_Misc_deerstand","Land_ns_Jbad_A_Stationhouse",
"Land_Airport_01_controlTower_F","Land_Airport_01_terminal_F","Land_Airport_02_controlTower_F",
"Land_Airport_02_terminal_F","Land_Cargo_House_V4_F","Land_Cargo_HQ_V4_F","Land_Cargo_Patrol_V4_F",
"Land_Cargo_Tower_V4_F"
];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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"];
// Possible equipment for random ai to spawn with
// spawning random ai without vests or backpacks will result in them having no ammunition
SC_RandomUniforms = ["U_B_GEN_Soldier_F"];
SC_RandomVests = ["V_TacVest_gen_F"];
SC_RandomHeadgear = ["H_Cap_police"];
SC_RandomWeapon = ["SMG_05_F"];
SC_RandomWeaponAttachments = ["muzzle_snds_L"];
SC_RandomMagazines = ["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_RandomPistol = ["hgun_Rook40_F"];
SC_RandomPistolAttachments = ["muzzle_snds_L"];
SC_RandomAssignedItems = ["ItemMap","ItemCompass","ItemRadio","ItemWatch"]; // all these items will be added
SC_RandomLauncher = [];
SC_RandomBackpack = ["B_AssaultPack_blk"];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Map Specific Overrides
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (worldName == 'Napf' AND SC_useMapOverrides) then
{
SC_maxAIcount = 120;
SC_useApexClasses = false;
};
if (worldName == 'Chernarus' AND SC_useMapOverrides) then
{
SC_maxAIcount = 120;
SC_useApexClasses = false;
};
if (worldName == 'Tanoa' AND SC_useMapOverrides) then
{
SC_maxAIcount = 80;
SC_useApexClasses = true;
};
if (worldName == 'Malden' AND SC_useMapOverrides) then
{
SC_maxAIcount = 150;
SC_useApexClasses = false;
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Apex Specific Settings (only used 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",
"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",
"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 = [
["B_GEN_Offroad_01_gen_F",0],
["C_Offroad_02_unarmed_F",0],
["I_C_Offroad_02_unarmed_F",0]
];
SC_VehicleClassToUseRare = [
["B_LSV_01_unarmed_black_F",1],
["O_T_LSV_02_unarmed_black_F",1],
["O_T_Truck_03_device_ghex_F",1]
];*/
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Debug Settings (only used if SC_debug = true)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (SC_debug) then
{
SC_extendedLogging = true;
SC_processReporter = true;
SC_mapMarkers = true;
SC_occupyPlaces = false;
SC_occupyVehicle = true;
SC_occupyMilitary = false;
SC_occupyRandomSpawn = true;
SC_occupyStatic = false;
SC_occupySky = false;
SC_occupySea = false;
SC_occupyTraders = false;
SC_occupyTransport = true;
SC_occupyLootCrates = false;
SC_occupyHeliCrashes = false;
SC_maxAIcount = 150;
SC_maxNumberofVehicles = 10;
SC_maxNumberofBoats = 5;
SC_maxNumberofHelis = 1;
SC_randomSpawnChance = 100;
SC_randomSpawnIgnoreCount = true;
SC_randomSpawnFrequency = 120;
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Don't alter anything below this point, unless you want your server to explode :)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
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];
SC_SurvivorSide = CIVILIAN;
SC_BanditSide = EAST;
SC_liveVehicles = 0;
SC_liveVehiclesArray = [];
SC_liveHelis = 0;
SC_liveHelisArray = [];
SC_liveBoats = 0;
SC_liveBoatsArray = [];
SC_liveStaticGroups = [];
SC_liveRandomGroups = [];
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_liveVehiclesArray";
publicVariable "SC_liveHelis";
publicVariable "SC_liveHelisArray";
publicVariable "SC_liveBoats";
publicVariable "SC_liveBoatsArray";
publicVariable "SC_liveStaticGroups";
publicVariable "SC_liveRandomGroups";
publicVariable "SC_numberofLootCrates";
publicVariable "SC_transportArray";
publicVariable "SC_SurvivorSide";
publicVariable "SC_BanditSide";
SC_CompiledOkay = true;

View File

@ -0,0 +1,80 @@
////////////////////////////////////////////////////////////////////////////////////////////
//
// Server Occupation script by second_coming
//
//
// http://www.exilemod.com/profile/60-second_coming/
//
// This script uses the fantastic DMS by Defent and eraser1
//
// http://www.exilemod.com/topic/61-dms-defents-mission-system/
// special thanks to eichi for pointers on this script :)
//
////////////////////////////////////////////////////////////////////////////////////////////
//
// I do not give permission for anyone to sell (or charge for the installation of)
// any part of this set of scripts.
//
// second_coming 2016
//
////////////////////////////////////////////////////////////////////////////////////////////
SC_occupationVersion = getText (configFile >> "CfgPatches" >> "a3_exile_occupation" >> "a3_exile_occupation_version");
[] spawn
{
diag_log format ["[OCCUPATION]:: Occupation %2 Giving the server time to start before starting [OCCUPATION] (%1)",time,SC_occupationVersion];
waitUntil { !(isNil "DMS_MinMax_Y_Coords") };
sleep 10;
diag_log format ["[OCCUPATION MOD]:: Occupation %2 Loading Config at %1",time,SC_occupationVersion];
// Get the config for Occupation
call compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\config.sqf";
if(isNil "SC_CompiledOkay") exitWith { diag_log format ["[OCCUPATION]:: Occupation failed to read config.sqf, check for typos (time: %1)",time]; };
// Select the log style depending on config settings
SC_fnc_log = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\occupationLog.sqf";
// EventHandlers for AI reactions & player interactions
SC_fnc_hitAir = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\hitAir.sqf";
SC_fnc_hitLand = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\hitLand.sqf";
SC_fnc_hitSea = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\hitSea.sqf";
SC_fnc_driverKilled = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\driverKilled.sqf";
SC_fnc_vehicleDestroyed = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\vehicleDestroyed.sqf";
SC_fnc_getIn = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\getIn.sqf";
SC_fnc_getOut = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\getOut.sqf";
SC_fnc_getOffBus = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\getOffBus.sqf";
SC_fnc_getOnBus = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\getOnBus.sqf";
SC_fnc_locationUnitMPKilled = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\locationUnitMPKilled.sqf";
SC_fnc_staticUnitMPKilled = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\staticUnitMPKilled.sqf";
SC_fnc_randomUnitMPKilled = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\randomUnitMPKilled.sqf";
SC_fnc_unitMPHit = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\unitMPHit.sqf";
SC_fnc_unitMPKilled = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\unitMPKilled.sqf";
SC_fnc_unitFired = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\eventHandlers\unitFired.sqf";
SC_fnc_addMarker = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\functions\fnc_addMarker.sqf";
SC_fnc_findsafePos = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\functions\fnc_findsafePos.sqf";
SC_fnc_isSafePos = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\functions\fnc_isSafePos.sqf";
SC_fnc_isSafePosRandom = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\functions\fnc_isSafePosRandom.sqf";
SC_fnc_selectGear = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\functions\fnc_selectGear.sqf";
SC_fnc_selectName = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\functions\fnc_selectName.sqf";
SC_fnc_spawnstatics = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\functions\fnc_spawnStatics.sqf";
SC_fnc_unstick = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\functions\fnc_unstick.sqf";
_logDetail = "=============================================================================================================";
[_logDetail] call SC_fnc_log;
_logDetail = format ["[OCCUPATION MOD]:: Occupation %2 Initialised at %1",time,SC_occupationVersion];
[_logDetail] call SC_fnc_log;
_logDetail = "=============================================================================================================";
[_logDetail] call SC_fnc_log;
// Start Occupation
[]execVM "\x\addons\a3_exile_occupation\scripts\startOccupation.sqf";
};

View File

@ -0,0 +1,23 @@
if (SC_occupyLootCratesMarkers) then
{
// Delete the map marker on a loot crate when a player gets in range
for "_i" from 1 to SC_numberofLootCrates do
{
_markerName = format ["SC_loot_marker_%1", _i];
_pos = getMarkerPos _markerName;
if(!isNil "_pos") then
{
if([_pos, 5] call ExileClient_util_world_isAlivePlayerInRange) then
{
deleteMarker _markerName;
_logDetail = format ["[OCCUPATION:LootCrates]:: marker %1 removed at %2",_markerName,time];
[_logDetail] call SC_fnc_log;
};
};
};
};

View File

@ -0,0 +1,73 @@
// Triggered when the designated driver for a vehicle is killed
// Attempts to select a new driver from the same group
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Vehicle]:: Unit %2 (driver) killed at %1",time,_this select 0];
[_logDetail] call SC_fnc_log;
};
_deadDriver = _this select 0;
_vehicle = _deadDriver getVariable "SC_drivenVehicle";
_vehicle removeAllMPEventHandlers "mphit";
_vehicle setVariable ["SC_repairStatus",false,true];
if(SC_debug) then
{
{ detach _x; deleteVehicle _x; } forEach attachedObjects _deadDriver;
};
// Select a replacement driver
_group = group _vehicle;
// Remove dead units from the group
{
if(!alive _x) then { [_x] join grpNull; };
}forEach units _group;
if(count units _group > 0) then
{
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Vehicle]:: vehicle: %1 group: %2 units left:%3",_vehicle,_group,count units _group];
[_logDetail] call SC_fnc_log;
};
_groupMembers = units _group;
_driver = _groupMembers call BIS_fnc_selectRandom;
if(_deadDriver == _driver) exitWith { [_vehicle] call SC_fnc_vehicleDestroyed; };
_driver assignAsDriver _vehicle;
_driver setVariable ["DMS_AssignedVeh",_vehicle];
_driver setVariable ["SC_drivenVehicle", _vehicle,true];
_vehicle setVariable ["SC_assignedDriver", _driver,true];
_vehicle addMPEventHandler ["mphit", "_this call SC_fnc_hitLand;"];
_driver removeAllMPEventHandlers "mphit";
_driver addMPEventHandler ["mpkilled", "_this call SC_fnc_driverKilled;"];
if(SC_debug) then
{
_tag = createVehicle ["Sign_Arrow_Yellow_F", position _driver, [], 0, "CAN_COLLIDE"];
_tag attachTo [_driver,[0,0,0.6],"Head"];
};
_driver doMove (position _vehicle);
_driver action ["movetodriver", _vehicle];
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Vehicle]:: Replacement Driver found (%1) for vehicle %2",_driver,_vehicle];
[_logDetail] call SC_fnc_log;
};
}
else
{
_logDetail = format ["[OCCUPATION:Vehicle]:: No replacement Driver found for vehicle %1",_vehicle];
[_logDetail] call SC_fnc_log;
_vehicle lock 0;
_vehicle setVehicleLock "UNLOCKED";
_vehicle setVariable ["ExileIsLocked", 0, true];
[_vehicle] call SC_fnc_vehicleDestroyed;
};

View File

@ -0,0 +1,54 @@
// Triggered if a player gets in a captured AI vehicle
// Marks the vehicle as claimed by a player and frees up a slot to spawn another AI controlled vehicle
_vehicle = _this select 0;
_unit = _this select 2;
if(isPlayer _unit) then
{
_group = group _vehicle;
{
if(!alive _x) then { _x action ["EJECT", _vehicle]; };
}forEach units _group;
_vehicle setVariable ["SC_vehicleSpawnLocation", nil,true];
[_vehicle] call SC_fnc_vehicleDestroyed;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:claimVehicle]:: Unit %3 has claimed vehicle %2 at %1",time,_vehicle,_unit];
[_logDetail] call SC_fnc_log;
};
}
else
{
if(SC_debug) then { { deleteVehicle _x; } forEach attachedObjects _unit; };
_assignedDriver = _vehicle getVariable "SC_assignedDriver";
if(isNil "_assignedDriver" OR !alive _assignedDriver) then
{
_group = group _vehicle;
// Remove dead units from the group
{
if(!alive _x) then { [_x] join grpNull; };
}forEach units _group;
_groupMembers = units _group;
_assignedDriver = _groupMembers call BIS_fnc_selectRandom;
_assignedDriver removeAllMPEventHandlers "mphit";
_assignedDriver disableAI "TARGET";
_assignedDriver disableAI "AUTOTARGET";
_assignedDriver disableAI "AUTOCOMBAT";
_assignedDriver disableAI "COVER";
_assignedDriver disableAI "SUPPRESSION";
_assignedDriver assignAsDriver _vehicle;
_assignedDriver moveInDriver _vehicle;
_assignedDriver setVariable ["DMS_AssignedVeh",_vehicle];
_assignedDriver setVariable ["SC_drivenVehicle", _vehicle,true];
_assignedDriver addMPEventHandler ["mpkilled", "_this call SC_fnc_driverKilled;"];
_vehicle setVariable ["SC_assignedDriver", _assignedDriver,true];
};
};

View File

@ -0,0 +1,14 @@
// Triggered if a player gets off the public transport
_transport = _this select 0;
_unit = _this select 2;
_driver = driver _transport;
//_driver vehiclechat SC_occupyTransportGetOut;
if(_transport isKindOf "LandVehicle") then
{
_transport setFuel 0;
_transportDriver = driver _transport;
_transportDriver disableAI "MOVE";
};

View File

@ -0,0 +1,7 @@
// Triggered if a player gets on the public transport
_transport = _this select 0;
_unit = _this select 2;
_driver = driver _transport;
//_driver vehiclechat SC_occupyTransportGetIn;

View File

@ -0,0 +1,32 @@
// Triggered if an AI unit leaves an AI vehicle
_unit = _this select 0;
_vehicle = _this select 2;
_driver = _vehicle getVariable "SC_assignedDriver";
_arrowClass = "Sign_Arrow_F";
if(!alive _unit) exitWith {};
if(side _unit == SC_SurvivorSide) then
{
_arrowClass = "Sign_Arrow_Green_F";
}
else
{
_arrowClass = "Sign_Arrow_F";
};
if(_unit == _driver) then
{
_arrowClass = "Sign_Arrow_Yellow_F";
};
if(SC_debug && alive _unit && vehicle _unit != _unit) then
{
_tag = createVehicle [_arrowClass, position _unit, [], 0, "CAN_COLLIDE"];
_tag attachTo [_unit,[0,0,0.6],"Head"];
}
else
{
{ deleteVehicle _x; } forEach attachedObjects _unit;
};

View File

@ -0,0 +1,124 @@
_heli = _this select 0;
_heli removeAllMPEventHandlers "mphit";
_heliDamage = getDammage _heli;
_heliPosition = getPosATL _heli;
_heliHeight = getPosATL _heli select 2;
_crewEjected = _heli getVariable "SC_crewEjected";
_damageLimit = 0.2;
_engineDamage = false;
_fueltankDamage = false;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Sky]:: Air unit %2 hit by %3 at %1 (damage: %4)",time,_this select 0,_this select 1,_heliDamage];
[_logDetail] call SC_fnc_log;
};
_ejectChance = round (random 100) + (_heliDamage * 100);
_essentials = [ "HitAvionics","HitEngine1","HitEngine2","HitEngine","HitHRotor","HitVRotor","HitTransmission",
"HitHydraulics","HitGear","HitHStabilizerL1","HitHStabilizerR1","HitVStabilizer1","HitFuel"];
_damagedEssentials = 0;
{
if ((_heli getHitPointDamage _x) > 0) then
{
if(_x == "HitFuel" && _heliDamage < 1) then
{
_heli setHitPointDamage ["HitFuel", 0];
_heli setFuel 1;
};
_damage = _heli getHitPointDamage _x;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Sky]:: Heli %1 checking part %2 (damage: %4) @ %3",_heli, _x, time,_damage];
[_logDetail] call SC_fnc_log;
};
if(_damage > 0) then { _damagedEssentials = _damagedEssentials + 1; };
};
} forEach _essentials;
if((_heliDamage > 0.2 OR _damagedEssentials > 0) && !_crewEjected && _ejectChance > 100) then
{
_target = _this select 1;
[_heli, _target] spawn
{
_veh = _this select 0;
_group2 = createGroup east;
if(SC_extendedLogging) then
{
_heliPosition = getPosATL _veh;
_logDetail = format ["[OCCUPATION:Sky]:: Air unit %2 ejecting passengers at %3 (time: %1)",time,_veh,_heliPosition];
[_logDetail] call SC_fnc_log;
};
_cargo = assignedCargo _veh;
{
_x joinSilent _group2;
_x action ["EJECT", _veh];
} forEach _cargo;
_target = _this select 1;
_group2 reveal [_target,1.5];
_destination = getPos _target;
_group2 allowFleeing 0;
_wp = _group2 addWaypoint [_destination, 0] ;
_wp setWaypointFormation "Column";
_wp setWaypointBehaviour "COMBAT";
_wp setWaypointCombatMode "RED";
_wp setWaypointCompletionRadius 1;
_wp setWaypointType "SAD";
[_group2, _destination, 500] call bis_fnc_taskPatrol;
_group2 allowFleeing 0;
_group2 setBehaviour "AWARE";
_group2 setCombatMode "RED";
};
_heli setVariable ["SC_crewEjected", true,true];
};
if(_heliDamage > 0.7 && _damagedEssentials > 0) then
{
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Sky]:: Air unit %2 damaged and force landing at %3 (time: %1)",time,_this select 0,_this select 1,_heliPosition];
[_logDetail] call SC_fnc_log;
};
[_heli] call SC_fnc_vehicleDestroyed;
_currentHeliPos = getPos _heli;
_destination = [_currentHeliPos, 1, 150, 10, 0, 20, 0] call BIS_fnc_findSafePos;
_heli setVehicleLock "UNLOCKED";
_target = _this select 1;
_group = group _heli;
_destination = position _target;
_heli land "LAND";
_group2 = createGroup east;
{
_x join _group2;
} forEach (fullCrew _heli);
_group2 allowFleeing 0;
_group2 reveal [_target,2.5];
_wp = _group2 addWaypoint [_destination, 0] ;
_wp setWaypointBehaviour "COMBAT";
_wp setWaypointCombatMode "RED";
_wp setWaypointCompletionRadius 10;
//_wp setWaypointType "GETOUT";
_wp setWaypointType "TR Unload";
[_group2, _destination, 250] call bis_fnc_taskPatrol;
_group2 setBehaviour "COMBAT";
_group2 setCombatMode "RED";
};
if(_heliDamage <= 0.2 && _damagedEssentials == 0) then
{
_heli addMPEventHandler ["mphit", "_this call SC_fnc_hitAir;"];
};

View File

@ -0,0 +1,166 @@
// Triggered when a ground vehicle takes damage
// Attempts to get the current vehicle driver to repair the vehicle
_vehicle = _this select 0;
_repairStatus = _vehicle getVariable "SC_repairStatus";
_logDetail = format ["[OCCUPATION:repairVehicle]:: Vehicle %1 _repairStatus %2",_vehicle, _repairStatus];
[_logDetail] call SC_fnc_log;
if(_repairStatus) exitWith {};
// Mark the vehicle as currently being repaired
_vehicle setVariable ["SC_repairStatus",true,true];
_vehicle removeAllMPEventHandlers "mphit";
_logDetail = format ["[OCCUPATION:repairVehicle]:: Starting repair check Vehicle %1 _repairStatus %2",_vehicle, _repairStatus];
[_logDetail] call SC_fnc_log;
_vehicleDamage = damage _vehicle;
_damagedWheels = 0;
_damageLimit = 0.2;
_engineDamage = false;
_fueltankDamage = false;
_wheelDamage = false;
_assignedDriver = _vehicle getVariable "SC_assignedDriver";
_group = group _vehicle;
// Remove dead units from the group
{
if(!alive _x) then { [_x] join grpNull; };
}forEach units _group;
if(count(units _group) == 0) exitWith { [_vehicle] call SC_fnc_vehicleDestroyed; };
if(isNil "_assignedDriver") then
{
_groupMembers = units _group;
_assignedDriver = _groupMembers call BIS_fnc_selectRandom;
_logDetail = format ["[OCCUPATION:repairVehicle]:: Selected replacement driver for %1 _repairStatus %2",_vehicle, _assignedDriver];
[_logDetail] call SC_fnc_log;
_assignedDriver removeAllMPEventHandlers "mphit";
_assignedDriver disableAI "TARGET";
_assignedDriver disableAI "AUTOTARGET";
_assignedDriver disableAI "AUTOCOMBAT";
_assignedDriver disableAI "COVER";
_assignedDriver disableAI "SUPPRESSION";
_assignedDriver assignAsDriver _vehicle;
_assignedDriver moveInDriver _vehicle;
_assignedDriver setVariable ["DMS_AssignedVeh",_vehicle];
_assignedDriver setVariable ["SC_drivenVehicle", _vehicle,true];
_assignedDriver addMPEventHandler ["mpkilled", "_this call SC_fnc_driverKilled;"];
_vehicle setVariable ["SC_assignedDriver", _assignedDriver,true];
};
if(!alive _assignedDriver) exitWith
{
[_assignedDriver] call SC_fnc_driverKilled;
};
_wheels = ["HitLFWheel","HitLF2Wheel","HitRFWheel","HitRF2Wheel","HitLBWheel","HitLMWheel","HitRBWheel","HitRMWheel"];
{
if ((_vehicle getHitPointDamage _x) > 0) then
{
_partDamage = _vehicle getHitPointDamage _x;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:repairVehicle]:: Vehicle %1 checking wheel %2 (damage: %4) @ %3",_vehicle, _x, time,_partDamage];
[_logDetail] call SC_fnc_log;
};
if(_partDamage == 1) then { _wheelDamage = true; };
};
} forEach _wheels;
// Check Engine
if ((_vehicle getHitPointDamage "HitEngine") == 1) then { _engineDamage = true; };
// Check Fuel Tank
if ((_vehicle getHitPointDamage "HitFuel") > 0) then { _fueltankDamage = true; };
if(_wheelDamage OR _engineDamage OR _fueltankDamage) then
{
[_vehicle,_assignedDriver ] spawn
{
_vehicle = _this select 0;
_driver = _this select 1;
_vehicle setVariable ["SC_repairStatus",true,true];
_repairStatus = _vehicle getVariable "SC_repairStatus";
_logDetail = format ["[OCCUPATION:repairVehicle]:: Unit %2 repairing(%3) vehicle at %1",time,_driver,_repairStatus];
[_logDetail] call SC_fnc_log;
_vehicle forceSpeed 0;
sleep 0.2;
_group = group _vehicle;
_driver disableAI "MOVE";
_driver disableAI "TARGET";
_driver disableAI "AUTOTARGET";
_driver disableAI "AUTOCOMBAT";
_driver disableAI "COVER";
_driver disableAI "SUPPRESSION";
_driver disableAI "FSM";
sleep 0.3;
_driver action ["getOut", _vehicle];
_driver doMove (position _vehicle);
sleep 0.3;
_driverDir = _driver getDir _vehicle;
_driver setDir _driverDir;
_driver setUnitPos "MIDDLE";
sleep 0.1;
_driver playMoveNow "Acts_carFixingWheel";
sleep 4;
_driver switchMove "";
if(alive _driver) then
{
_vehicle setDamage 0;
_driver playMoveNow "Acts_carFixingWheel";
sleep 2;
_driver switchMove "";
_driver assignAsDriver _vehicle;
_driver moveInDriver _vehicle;
_driver action ["movetodriver", _vehicle];
_logDetail = format ["[OCCUPATION:repairVehicle]:: Unit %2 finished repairing vehicle %3 at %1",time,_driver,_vehicle];
[_logDetail] call SC_fnc_log;
};
_wp = _group addWaypoint [position _vehicle, 0] ;
_wp setWaypointFormation "Column";
_wp setWaypointCompletionRadius 1;
_wp setWaypointType "GETIN";
sleep 5;
_tempLocation = _vehicle getVariable "SC_vehicleSpawnLocation";
if(!isNil "_tempLocation") then
{
_originalSpawnLocation = _tempLocation select 0;
_radius = _tempLocation select 1;
[_group, _originalSpawnLocation, _radius] call bis_fnc_taskPatrol;
};
_driver action ["movetodriver", _vehicle];
_group setBehaviour "SAFE";
_group setCombatMode "RED";
_driver enableAI "MOVE";
_driver enableAI "FSM";
// Mark the vehicle as not currently being repaired and reapply the mphit eventhandler
_vehicle setVariable ["SC_repairStatus",false,true];
_vehicle addMPEventHandler ["mphit", "_this call SC_fnc_hitLand;"];
};
}
else
{
// Mark the vehicle as not currently being repaired
_vehicle setVariable ["SC_repairStatus",false,true];
_logDetail = format ["[OCCUPATION:repairVehicle]:: Not enough damage to disable %2, driver is %3 at %1",time,_vehicle,_assignedDriver];
[_logDetail] call SC_fnc_log;
//_vehicle addMPEventHandler ["mphit", "_this call SC_fnc_hitLand;"];
};
_repairStatus = _vehicle getVariable "SC_repairStatus";
_logDetail = format ["[OCCUPATION:repairVehicle]:: Finished mphit eventhandler for Vehicle %1 _repairStatus %2",_vehicle, _repairStatus];
[_logDetail] call SC_fnc_log;

View File

@ -0,0 +1,83 @@
_boat = _this select 0;
_boat removeAllMPEventHandlers "mphit";
_boatDamage = damage _boat;
_boatPosition = getPosATL _boat;
_boatHeight = getPosATL _boat select 2;
_crewEjected = _boat getVariable "SC_crewEjected";
_damageLimit = 0.2;
_engineDamage = false;
_fueltankDamage = false;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Sea]:: Sea unit %2 hit by %3 at %1 (damage: %4)",time,_this select 0,_this select 1,_boatDamage];
[_logDetail] call SC_fnc_log;
};
_ejectChance = round (random 100) + (_boatDamage * 100);
_essentials = ["HitBody","HitEngine","HitTurret","HitGun","HitFuel"];
_damagedEssentials = 0;
{
if ((_boat getHitPointDamage _x) > 0) then
{
if(_x == "HitFuel" && _boatDamage < 1) then
{
_boat setHitPointDamage ["HitFuel", 0];
_boat setFuel 1;
};
_damage = _boat getHitPointDamage _x;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Sea]:: Boat %1 checking part %2 (damage: %4) @ %3",_boat, _x, time,_damage];
[_logDetail] call SC_fnc_log;
};
if(_damage > 0) then { _damagedEssentials = _damagedEssentials + 1; };
};
} forEach _essentials;
if(_boatDamage > 0.2 && _damagedEssentials > 0 && !_crewEjected && _ejectChance > 100) then
{
_target = _this select 1;
[_boat, _target] spawn
{
_veh = _this select 0;
_group2 = createGroup east;
if(SC_extendedLogging) then
{
_boatPosition = getPosATL _veh;
_logDetail = format ["[OCCUPATION:Sky]:: Sea unit %2 ejecting passengers at %3 (time: %1)",time,_veh,_boatPosition];
[_logDetail] call SC_fnc_log;
};
_cargo = assignedCargo _veh;
{
_x joinSilent _group2;
_x action ["EJECT", _veh];
} forEach _cargo;
_target = _this select 1;
_group2 reveal [_target,1.5];
_destination = getPos _target;
_group2 allowFleeing 0;
_wp = _group2 addWaypoint [_destination, 0] ;
_wp setWaypointFormation "Column";
_wp setWaypointBehaviour "COMBAT";
_wp setWaypointCombatMode "RED";
_wp setWaypointCompletionRadius 1;
_wp setWaypointType "SAD";
[_group2, _destination, 500] call bis_fnc_taskPatrol;
_group2 allowFleeing 0;
_group2 setBehaviour "AWARE";
_group2 setCombatMode "RED";
};
_boat setVariable ["SC_crewEjected", true,true];
};
_boat addMPEventHandler ["mphit", "_this call SC_fnc_boatHit;"];

View File

@ -0,0 +1,43 @@
// Get the variables from the event handler
_unit = _this select 0;
_side = _unit getVariable "SC_unitSide";
_locationName = _unit getVariable "SC_unitLocationName";
_pos = _unit getVariable "SC_unitLocationPosition";
_unit removeAllMPEventHandlers "mphit";
if(SC_mapMarkers) then
{
deleteMarker format ["%1", _locationName];
_nearBanditAI = { side _x == SC_BanditSide AND (_x getVariable "SC_unitLocationName" == _locationName) AND alive _x } count allUnits;
_nearSurvivorAI = { side _x == SC_SurvivorSide AND (_x getVariable "SC_unitLocationName" == _locationName) AND alive _x } count allUnits;
_logDetail = format ["[OCCUPATION:locationUnitMPKilled]:: unit: %1 side: %2 location: %3 nearbandits: %4 nearsurvivors: %5",_unit,_side,_locationName,_nearBanditAI,_nearSurvivorAI];
[_logDetail] call SC_fnc_log;
_markerName = "Bandits";
_markerColour = "ColorRed";
if(_nearBanditAI == 0 && _nearSurvivorAI == 0) exitWith {};
if(_nearBanditAI > 0 && _nearSurvivorAI > 0) then
{
_markerName = "Survivors and Bandits";
_markerColour = "ColorOrange";
};
if(_nearBanditAI == 0 && _nearSurvivorAI > 0) then
{
_markerName = "Survivors";
_markerColour = "ColorGreen";
};
_marker = createMarker [format ["%1", _locationName],_pos];
_marker setMarkerShape "Icon";
_marker setMarkerSize [3,3];
_marker setMarkerType "mil_dot";
_marker setMarkerBrush "Solid";
_marker setMarkerText _markerName;
_marker setMarkerColor _markerColour;
_marker setMarkerAlpha 0.5;
};

View File

@ -0,0 +1,11 @@
// Get the variables from the event handler
_unit = _this select 0;
_group = group _unit;
_selectedPlayer = _group getVariable "SC_huntedPlayer";
if((count (units _group)) == 0) then
{
// Remove the group
SC_liveRandomGroups = SC_liveRandomGroups - _group;
};

View File

@ -0,0 +1,17 @@
// Get the variables from the event handler
_unit = _this select 0;
_staticUID = _unit getVariable "SC_staticUID";
_spawnPosition = _unit getVariable "SC_staticSpawnPos";
_unit removeAllMPEventHandlers "mphit";
_group = group _unit;
if((count (units _group)) == 0) then
{
SC_liveStaticGroups = SC_liveStaticGroups - [_staticUID,_spawnPosition];
if(SC_mapMarkers) then
{
deleteMarker format ["%1", _staticUID];
};
};

View File

@ -0,0 +1,50 @@
// Get the variables from the event handler
_unit = _this select 0;
_weapon = _this select 1;
_ammoType = _this select 4;
_count = _unit ammo _weapon;
if(_count < 1) then
{
diag_log format ["[OCCUPATION:unitFired]:: unit: %1 out of ammo for weapon %2",_unit,_weapon];
_weaponHolder = nearestObjects [_unit, ["WeaponHolder"], 75];
_weapons = weapons _unit;
_magazinesCompatible = [];
{
_weaponCurrent = _x;
_magazinesCompatible = _magazinesCompatible + getArray (configFile >> "CfgWeapons" >> _weaponCurrent >> "magazines");
}forEach _weapons;
_magazinesToAdd = [];
for "_i" from 0 to (count _weaponHolder)-1 do
{
_item = _weaponHolder select _i;
_content = getMagazineCargo _item;
{
_ammo = _x select 0;
if(_ammo in _magazinesCompatible) then
{
_magazinesToAdd = _magazinesToAdd + [_ammo];
};
}forEach _content;
_unit doMove (position _item);
{
_unit action ["TakeMagazine", _item, _x];
diag_log format ["[OCCUPATION:unitFired]:: unit: %1 took ammo %2",_unit,_x];
}forEach _magazinesToAdd;
{
diag_log format ["[processReporter] %1 @ %2",_x,time];
} forEach diag_activeSQFScripts;
{
diag_log format ["[processReporter] %1 @ %2",_x,time];
} forEach diag_activeSQSScripts;
};
};

View File

@ -0,0 +1,23 @@
// Get the variables from the event handler
_unit = _this select 0;
_aggressor = _this select 1;
_damage = _this select 2;
// remove the eventhandler to stop it triggering multiple times simultaneously
_unit removeAllMPEventHandlers "mphit";
if (side _aggressor == RESISTANCE) then
{
// Make victim and his group aggressive to players
_initialGroup = group _unit;
_group = createGroup WEST;
{
_unit = _x;
//[_unit] joinSilent grpNull;
[_unit] joinSilent _group;
_unit removeAllMPEventHandlers "mphit";
}foreach units _initialGroup;
_group reveal [_aggressor, 2.5];
_group move (position _aggressor);
};

View File

@ -0,0 +1,13 @@
// Get the variables from the event handler
_unit = _this select 0;
_killer = _this select 1;
// remove all eventhandlers from the dead unit
_unit removeAllMPEventHandlers "mphit";
_unit removeAllEventHandlers "fired";
[_unit] join grpNull;
if(SC_debug) then
{
{ deleteVehicle _x; } forEach attachedObjects _unit;
};

View File

@ -0,0 +1,37 @@
_vehicle = _this select 0;
_vehicle setVariable ["SC_vehicleSpawnLocation", nil,true];
if((damage _vehicle) < 1) then
{
_vehicle removeAllMPEventHandlers "mphit";
};
SC_liveVehiclesArray = [];
SC_liveHelisArray = [];
SC_liveBoatsArray = [];
{
_vehicle = _x;
_vehLocation = _x getVariable "SC_vehicleSpawnLocation";
_transport = _x getVariable "SC_transport";
if(!isNil "_vehLocation") then
{
if(_vehicle isKindOf "LandVehicle") then
{
SC_liveVehiclesArray pushBack _vehicle;
SC_liveVehicles = count(SC_liveVehiclesArray);
};
if(_vehicle isKindOf "Air" && isNil "_transport") then
{
SC_liveHelisArray pushBack _vehicle;
SC_liveHelis = count(SC_liveHelisArray);
};
if(_vehicle isKindOf "Ship") then
{
SC_liveBoatsArray pushBack _vehicle;
SC_liveBoatss = count(SC_liveBoatsArray);
};
};
}forEach vehicles;

View File

@ -0,0 +1,42 @@
_aiActive = { !isPlayer _x } count allunits;
_logDetail = "=======================================================================================================";
[_logDetail,'A3_EXILE_PROCESSREPORTER'] call SC_fnc_log;
_logDetail = format['[processReporter] Started @ %4 : [FPS: %1|PLAYERS: %2|AI: %5:THREADS: %3]',diag_fps,count allplayers,count diag_activeSQFScripts,time,_aiActive];
[_logDetail,'A3_EXILE_PROCESSREPORTER'] call SC_fnc_log;
_logDetail = "=======================================================================================================";
[_logDetail,'A3_EXILE_PROCESSREPORTER'] call SC_fnc_log;
_armaBuild = productVersion select 3;
if(_armaBuild > 137494) then
{
_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] Active SQF: %1 @ %2",_x,time];
[_logDetail,'A3_EXILE_PROCESSREPORTER'] call SC_fnc_log;
} forEach diag_activeSQFScripts;
{
_logDetail = format ["[processReporter] Active SQS: %1 @ %2",_x,time];
[_logDetail,'A3_EXILE_PROCESSREPORTER'] call SC_fnc_log;
} forEach diag_activeSQSScripts;
{
_logDetail = format ["[processReporter] Active FSM: %1 @ %2",_x,time];
[_logDetail,'A3_EXILE_PROCESSREPORTER'] call SC_fnc_log;
} forEach diag_activeMissionFSMs;
_logDetail = format ["[processReporter] Ended @ %1",time];
[_logDetail,'A3_EXILE_PROCESSREPORTER'] call SC_fnc_log;

View File

@ -0,0 +1,29 @@
private["_newUniform","_newVest","_newHeadgear","_arrowClass"];
_side = _this select 0;
_unit = _this select 1;
_unit removeAllMPEventHandlers "mphit";
switch (_side) do
{
case "survivor":
{
_arrowClass = "Sign_Arrow_Green_F";
_unit addMPEventHandler ["mphit", "_this call SC_fnc_unitMPHit;"];
};
case "bandit":
{
_arrowClass = "Sign_Arrow_F";
};
};
if((vehicle _unit != _unit) && SC_debug) then
{
_tag = createVehicle [_arrowClass, position _unit, [], 0, "CAN_COLLIDE"];
_tag attachTo [_unit,[0,0,0.6],"Head"];
};
_unit addMPEventHandler ["mpkilled", "_this call SC_fnc_unitMPKilled;"];
//_unit addEventHandler ["Fired", "_this call SC_fnc_unitFired;"];

View File

@ -0,0 +1,82 @@
private _roadSpawn = _this select 0;
private _waterSpawn = _this select 1;
private _inWater = 0;
private _position = [0,0,0];
private _nearestRoad = [0,0,0];
private _middle = worldSize/2;
private _pos = [_middle,_middle,0];
private _maxDist = _middle - 100;
if (worldName == 'Esseker') then
{
_pos = [6502,6217,0];
_maxDist = 5000;
};
if (worldName == 'Chernarus') then
{
_maxDist = _middle - 1500;;
};
if(_roadSpawn) then
{
_maxDist = _maxDist - 1400;
};
if(_waterSpawn) then
{
_inWater = 2;
}
else
{
_inWater = 0;
};
_validspot = false;
while{!_validspot} do
{
sleep 1;
_tempPosition = [_pos,0,_maxDist,15,_inWater,20,0] call BIS_fnc_findSafePos;
_position = [_tempPosition select 0, _tempPosition select 1, 0];
_validspot = true;
if(_roadSpawn) then
{
// Get position of nearest roads
_nearRoads = _position nearRoads 500;
if (isNil "_nearRoads" OR count _nearRoads == 0) then
{
_validspot = false;
}
else
{
_nearestRoad = _nearRoads select 0;
_position = position _nearestRoad;
_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;
};
};
};
_isOverWater = surfaceIsWater _position;
if(!_waterSpawn && _isOverWater) then
{
_validspot = false;
};
if(_validspot) then
{
_validspot = [ _position ] call SC_fnc_isSafePos;
};
if (isNil "_validspot") then { _validspot = false; };
};
_position

View File

@ -0,0 +1,53 @@
private _position = _this select 0;
private _validspot = true;
// Check if position is near a blacklisted area
{
private _blacklistPos = _x select 0;
private _blacklistRadius = _x select 1;
private _blacklistMap = _x select 2;
if(isNil "_blacklistPos" OR isNil "_blacklistRadius" OR isNil "_blacklistMap") exitWith
{
_logDetail = format["[OCCUPATION]:: Invalid blacklist position supplied check SC_blackListedAreas in your config.sqf"];
[_logDetail] call SC_fnc_log;
};
if (worldName == _blacklistMap) then
{
_distance = _position distance2D _blacklistPos;
if(_distance < _blacklistRadius) then
{
_validspot = false;
diag_log format["[OCCUPATION]:: %1 is %2m from blacklisted position %3 (blacklisted)",_position,_distance,_blacklistPos];
};
};
}forEach SC_blackListedAreas;
if(_validspot) then
{
//Check if near player territory
private _nearBase = (nearestObjects [_position,["Exile_Construction_Flag_Static"],SC_minDistanceToTerritory]) select 0;
if (!isNil "_nearBase") then { _validspot = false; };
// is position in range of a territory?
if([_position, SC_minDistanceToTerritory] call ExileClient_util_world_isTerritoryInRange) exitwith { _validspot = false; };
// is position in range of a trader zone?
if([_position, SC_minDistanceToTraders] call ExileClient_util_world_isTraderZoneInRange) exitwith { _validspot = false; };
// is position in range of a spawn zone?
if([_position, SC_minDistanceToSpawnZones] call ExileClient_util_world_isSpawnZoneInRange) exitwith { _validspot = false; };
// is position in range of a player?
if([_position, SC_minDistanceToPlayer] call ExileClient_util_world_isAlivePlayerInRange) exitwith { _validspot = false; };
// is position in range of a map marker?
{
_markerPos = getMarkerPos _x;
if ((_markerPos distance2D _position) < 350) exitWith { _validspot = false; };
}
forEach allMapMarkers;
};
_validspot

View File

@ -0,0 +1,47 @@
private _position = _this select 0;
private _validspot = true;
// Check if position is near a blacklisted area
{
private _blacklistPos = _x select 0;
private _blacklistRadius = _x select 1;
private _blacklistMap = _x select 2;
if(isNil "_blacklistPos" OR isNil "_blacklistRadius" OR isNil "_blacklistMap") exitWith
{
_logDetail = format["[OCCUPATION]:: Invalid blacklist position supplied check SC_blackListedAreas in your config.sqf"];
[_logDetail] call SC_fnc_log;
};
if (worldName == _blacklistMap) then
{
_distance = _position distance2D _blacklistPos;
if(_distance < _blacklistRadius) then
{
_validspot = false;
diag_log format["%1 is %2m from blacklisted position %3 (blacklisted)",_position,_distance,_blacklistPos];
};
};
}forEach SC_blackListedAreas;
if(_validspot) then
{
// is position in range of a trader zone?
if([_position, SC_minDistanceToTraders] call ExileClient_util_world_isTraderZoneInRange) exitwith { _validspot = false; };
if(!SC_randomSpawnNearSpawns) then
{
// is position in range of a spawn zone?
if([_position, SC_minDistanceToSpawnZones] call ExileClient_util_world_isSpawnZoneInRange) exitwith { _validspot = false; };
};
if(!SC_randomSpawnNearBases) then
{
// is position in range of a territory?
if([_position, SC_minDistanceToTerritory] call ExileClient_util_world_isTerritoryInRange) exitwith { _validspot = false; };
};
};
_validspot

View File

@ -0,0 +1,25 @@
private["_newUniform","_newVest","_newHeadgear","_arrowClass"];
_traderPosition = _this select 0;
_traderDirection = _this select 1;
_traderType = _this select 2;
"Exile_Trader_CommunityCustoms" createUnit [_traderPosition, _group, "trader = this;"];
trader setVariable ["ExileTraderType", "Exile_Trader_CommunityCustoms",true];
trader allowDamage false;
trader disableAI 'AUTOTARGET';
trader disableAI 'TARGET';
trader disableAI 'SUPPRESSION';
removeGoggles trader;
trader forceAddUniform "U_IG_Guerilla3_1";
trader addWeapon "srifle_DMR_06_olive_F";
trader addVest "V_TacVest_blk_POLICE";
trader addBackpack "B_FieldPack_oli";
trader addHeadgear "H_Cap_blk";
trader addGoggles "TRYK_TAC_SET_OD";
trader setCaptive true;
_traderDir = trader getDir _traderPos;
trader setDir _traderDir;
[trader,"WATCH1-2"] call BIS_fnc_ambientAnim;

View File

@ -0,0 +1,139 @@
private["_uniform","_vest","_headgear","_weapon","_weaponAttachments","_magazines","_pistol","_pistolAttachments","_assignedItems","_launcher","_backpack"];
_side = _this select 0;
switch (_side) do
{
case "survivor":
{
if(count SC_SurvivorUniforms == 0) then { _uniform = ""; } else { _uniform = SC_SurvivorUniforms call BIS_fnc_selectRandom; };
if(count SC_SurvivorVests == 0) then { _vest = ""; } else { _vest = SC_SurvivorVests call BIS_fnc_selectRandom; };
if(count SC_SurvivorHeadgear == 0) then { _headgear = ""; } else { _headgear = SC_SurvivorHeadgear call BIS_fnc_selectRandom; };
if(count SC_SurvivorWeapon == 0) then { _weapon = ""; } else { _weapon = SC_SurvivorWeapon call BIS_fnc_selectRandom; };
if(count SC_SurvivorWeaponAttachments == 0) then { _weaponAttachments = []; } else { _weaponAttachments = [SC_SurvivorWeaponAttachments call BIS_fnc_selectRandom]; };
if(count SC_SurvivorPistol == 0) then { _pistol = ""; } else { _pistol = SC_SurvivorPistol call BIS_fnc_selectRandom; };
if(count SC_SurvivorPistolAttachments == 0) then { _pistolAttachments = []; } else { _pistolAttachments = [SC_SurvivorPistolAttachments call BIS_fnc_selectRandom]; };
if(count SC_SurvivorLauncher == 0) then { _launcher = ""; } else { _launcher = SC_SurvivorLauncher call BIS_fnc_selectRandom; };
if(count SC_SurvivorBackpack == 0) then { _backpack = ""; } else { _backpack = SC_SurvivorBackpack call BIS_fnc_selectRandom; };
_assignedItems = SC_SurvivorAssignedItems;
_magazines = [];
if(count SC_SurvivorMagazines > 0) then
{
_amountOfMagazines = 1 + round random (2);
for "_i" from 1 to _amountOfMagazines do
{
_newMagazine = SC_SurvivorMagazines call BIS_fnc_selectRandom;
_quantity = 1 + round random (2);
_magazines pushBack [_newMagazine,_quantity];
};
};
};
case "bandit":
{
if(count SC_BanditUniforms == 0) then { _uniform = ""; } else { _uniform = SC_BanditUniforms call BIS_fnc_selectRandom; };
if(count SC_BanditVests == 0) then { _vest = ""; } else { _vest = SC_BanditVests call BIS_fnc_selectRandom; };
if(count SC_BanditHeadgear == 0) then { _headgear = ""; } else { _headgear = SC_BanditHeadgear call BIS_fnc_selectRandom; };
if(count SC_BanditWeapon == 0) then { _weapon = ""; } else { _weapon = SC_BanditWeapon call BIS_fnc_selectRandom; };
if(count SC_BanditWeaponAttachments == 0) then { _weaponAttachments = [""]; } else { _weaponAttachments = [SC_BanditWeaponAttachments call BIS_fnc_selectRandom]; };
if(count SC_BanditPistol == 0) then { _pistol = ""; } else { _pistol = SC_BanditPistol call BIS_fnc_selectRandom; };
if(count SC_BanditPistolAttachments == 0) then { _pistolAttachments = [""]; } else { _pistolAttachments = [SC_BanditPistolAttachments call BIS_fnc_selectRandom]; };
if(count SC_BanditLauncher == 0) then { _launcher = ""; } else { _launcher = SC_BanditLauncher call BIS_fnc_selectRandom; };
if(count SC_BanditBackpack == 0) then { _backpack = ""; } else { _backpack = SC_BanditBackpack call BIS_fnc_selectRandom; };
_assignedItems = SC_BanditAssignedItems;
_magazines = [];
if(count SC_BanditMagazines > 0) then
{
_amountOfMagazines = 1 + round random (2);
for "_i" from 1 to _amountOfMagazines do
{
_newMagazine = SC_BanditMagazines call BIS_fnc_selectRandom;
_quantity = 1 + round random (2);
_magazines pushBack [_newMagazine,_quantity];
};
};
};
case "cops":
{
if(count SC_RandomUniforms == 0) then { _uniform = ""; } else { _uniform = SC_RandomUniforms call BIS_fnc_selectRandom; };
if(count SC_RandomVests == 0) then { _vest = ""; } else { _vest = SC_RandomVests call BIS_fnc_selectRandom; };
if(count SC_RandomHeadgear == 0) then { _headgear = ""; } else { _headgear = SC_RandomHeadgear call BIS_fnc_selectRandom; };
if(count SC_RandomWeapon == 0) then { _weapon = ""; } else { _weapon = SC_RandomWeapon call BIS_fnc_selectRandom; };
if(count SC_RandomWeaponAttachments == 0) then { _weaponAttachments = [""]; } else { _weaponAttachments = [SC_RandomWeaponAttachments call BIS_fnc_selectRandom]; };
if(count SC_RandomPistol == 0) then { _pistol = ""; } else { _pistol = SC_RandomPistol call BIS_fnc_selectRandom; };
if(count SC_RandomPistolAttachments == 0) then { _pistolAttachments = [""]; } else { _pistolAttachments = [SC_RandomPistolAttachments call BIS_fnc_selectRandom]; };
if(count SC_RandomLauncher == 0) then { _launcher = ""; } else { _launcher = SC_RandomLauncher call BIS_fnc_selectRandom; };
if(count SC_RandomBackpack == 0) then { _backpack = ""; } else { _backpack = SC_RandomBackpack call BIS_fnc_selectRandom; };
_assignedItems = SC_RandomAssignedItems;
_magazines = [];
if(count SC_RandomMagazines > 0) then
{
_amountOfMagazines = 1 + round random (2);
for "_i" from 1 to _amountOfMagazines do
{
_newMagazine = SC_RandomMagazines call BIS_fnc_selectRandom;
_quantity = 1 + round random (2);
_magazines pushBack [_newMagazine,_quantity];
};
};
};
};
_weaponAttachmentsChance = round (random 100);
if(_weaponAttachmentsChance < 50) then { _weaponAttachments = [""]; };
_pistolAttachmentsChance = round (random 100);
if(_pistolAttachmentsChance < 50) then { _pistolAttachments = [""]; };
_backpackChance = round (random 100);
if(_backpackChance < 30) then { _backpack = ""; };
_launcherChance = round (random 100);
if(_launcherChance < 40 OR isNil "_launcher") then { _launcher = ""; };
// add ammo for selected main weapon
if(_weapon != "") then
{
_weaponMagazinesToAdd = getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines");
_weaponMagazineAmount = 2 + round random (1);
_magazines pushBack [_weaponMagazinesToAdd select 0,_weaponMagazineAmount];
};
// add ammo for selected pistol
if(_pistol != "") then
{
_pistolMagazinesToAdd = getArray (configFile >> "CfgWeapons" >> _pistol >> "magazines");
_pistolMagazineAmount = 2 + round random (1);
_magazines pushBack [_pistolMagazinesToAdd select 0,_pistolMagazineAmount];
};
// add ammo for selected launcher
if(_launcher != "") then
{
_launcherMagazinesToAdd = getArray (configFile >> "CfgWeapons" >> _launcher >> "magazines");
_launcherMagazineAmount = 1;
_magazines pushBack [_launcherMagazinesToAdd select 0,_launcherMagazineAmount];
};
_loadout = [
_weapon, // String | EG: "LMG_Zafir_F"
_weaponAttachments, // Array of strings | EG: ["optic_dms","bipod_03_F_blk"]
_magazines, // Array of arrays | EG: [["150Rnd_762x54_Box",2],["16Rnd_9x21_Mag",3],["Exile_Item_InstaDoc",3]]
_pistol, // String | EG: "hgun_Pistol_heavy_01_snds_F"
_pistolAttachments, // Array of strings | EG: ["optic_MRD","muzzle_snds_acp"]
_assignedItems, // Array of strings | EG: ["Rangefinder","ItemGPS","NVGoggles"]
_launcher, // String | EG: "launch_RPG32_F"
_headgear, // String | EG: "H_HelmetLeaderO_ocamo"
_uniform, // String | EG: "U_O_GhillieSuit"
_vest, // String | EG: "V_PlateCarrierGL_blk"
_backpack // String | EG: "B_Carryall_oli"
];
if(SC_extendedLogging) then
{
_logDetail = format["[OCCUPATION]:: %2 loadout created: %1",_loadout,_side];
[_logDetail] call SC_fnc_log;
};
_loadout

View File

@ -0,0 +1,23 @@
// Select names for AI based on the side
_side = _this select 0;
_firstName = "Tyler";
_lastName = "Durden";
if(SC_useRealNames) then
{
switch (_side) do
{
case "survivor":
{
_firstName = selectRandom SC_SurvivorFirstNames;
_lastName = selectRandom SC_SurvivorLastNames;
};
case "bandit":
{
_firstName = selectRandom SC_BanditFirstNames;
_lastName = selectRandom SC_BanditLastNames;
};
};
_name = format["%1 %2",_firstName,_lastName];
_name
};

View File

@ -0,0 +1,181 @@
_statics = _this select 0;
_side = _this select 1;
_static = [];
_currentSide = SC_BanditSide;
_debug = SC_debug;
_useLaunchers = DMS_ai_use_launchers;
_scaleAI = SC_scaleAI;
_staticUID = 1;
if(_side == "survivor") then { _currentSide = SC_SurvivorSide };
{
_currentStatic = _x;
_spawnPosition = _currentStatic select 0;
_aiCount = _currentStatic select 1;
_radius = _currentStatic select 2;
_staticSearch = _currentStatic select 3;
_logDetail = format ["[OCCUPATION Static]:: Checking static spawn @ %1 for existing %2 AI",_spawnPosition,_currentSide];
[_logDetail] call SC_fnc_log;
_okToSpawn = true;
Sleep 0.1;
while{_okToSpawn} do
{
// Don't spawn if a previous round of AI are already in place
_newStatic = [_staticUID,_spawnPosition];
if(_staticUID in SC_liveStaticGroups) exitwith
{
_okToSpawn = false;
if(_debug) then
{
_logDetail = format ["[OCCUPATION Static]:: %1 already has active AI patrolling",_spawnPosition];
[_logDetail] call SC_fnc_log;
};
};
// Don't spawn additional AI if there are players in range
if(!(SC_staticIgnoreNearbyPlayers) && ([_spawnPosition, 250] call ExileClient_util_world_isAlivePlayerInRange)) exitwith
{
_okToSpawn = false;
if(_debug) then
{
_logDetail = format ["[OCCUPATION Static]:: %1 has players too close",_spawnPosition];
[_logDetail] call SC_fnc_log;
};
};
if(_okToSpawn) then
{
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Get AI to patrol the area
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
_groupRadius = _radius;
_difficulty = "random";
_initialGroup = createGroup _currentSide;
DMS_ai_use_launchers = false;
for "_i" from 1 to _aiCount do
{
_loadOut = [_side] call SC_fnc_selectGear;
_unit = [_initialGroup,_spawnPosition,"custom","random",_side,"soldier",_loadOut] call DMS_fnc_SpawnAISoldier;
_unit allowFleeing 0;
_unit allowDamage false;
_unit disableAI "AUTOTARGET";
_unit disableAI "TARGET";
_unit disableAI "MOVE";
_unitName = [_side] call SC_fnc_selectName;
if(!isNil "_unitName") then { _unit setName _unitName; };
_unit setVariable ["SC_staticUID",_staticUID];
_unit setVariable ["SC_staticSpawnPos",_spawnPosition];
_unit addMPEventHandler ["mpkilled", "_this call SC_fnc_staticUnitMPKilled;"];
};
DMS_ai_use_launchers = _useLaunchers;
_initialGroup setCombatMode "BLUE";
_initialGroup setBehaviour "SAFE";
_group = createGroup _currentSide;
_group setVariable ["DMS_LockLocality",nil];
_group setVariable ["DMS_SpawnedGroup",true];
_group setVariable ["DMS_Group_Side", _side];
SC_liveStaticGroups = SC_liveStaticGroups + [_staticUID,_spawnPosition];
{
_unit = _x;
[_unit] joinSilent grpNull;
[_unit] joinSilent _group;
_unit allowDamage true;
_unit enableAI "AUTOTARGET";
_unit enableAI "TARGET";
_unit enableAI "MOVE";
[_side,_unit] call SC_fnc_addMarker;
_unit setCaptive false;
}foreach units _initialGroup;
// Get the AI to shut the fuck up :)
enableSentences false;
enableRadio false;
if(!_staticSearch) then
{
[_group, _spawnPosition, _groupRadius] call bis_fnc_taskPatrol;
_group setBehaviour "AWARE";
_group setCombatMode "RED";
}
else
{
_group setBehaviour "AWARE";
_group setCombatMode "RED";
_buildings = _spawnPosition nearObjects ["building", _groupRadius];
{
_isEnterable = [_x] call BIS_fnc_isBuildingEnterable;
if(_isEnterable) then
{
_buildingPositions = [_x, 10] call BIS_fnc_buildingPositions;
_y = _x;
// Find Highest Point
_highest = [0,0,0];
{
if(_x select 2 > _highest select 2) then
{
_highest = _x;
};
} foreach _buildingPositions;
_wpPosition = _highest;
diag_log format ["Static Patrol %3 waypoint added - building: %1 position: %2",_y,_highest,_group];
_i = _buildingPositions find _wpPosition;
_wp = _group addWaypoint [_wpPosition, 5] ;
_wp setWaypointBehaviour "AWARE";
_wp setWaypointSpeed "NORMAL";
_wp setWaypointCombatMode "RED";
_wp setWaypointCompletionRadius 1;
_wp waypointAttachObject _y;
_wp setwaypointHousePosition _i;
_wp setWaypointType "SAD";
};
} foreach _buildings;
if(count _buildings > 1 && !isNil "_wp") then
{
_wp setWaypointType "CYCLE";
}
else
{
_group setBehaviour "AWARE";
_group setCombatMode "RED";
};
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
_logDetail = format ["[OCCUPATION Static]:: Spawning %1 AI in at %2 to patrol",_aiCount,_spawnPosition];
[_logDetail] call SC_fnc_log;
if(SC_mapMarkers && !isNil "_foundBuilding") then
{
_marker = createMarker [format ["%1", _staticUID],_spawnPosition];
_marker setMarkerShape "Icon";
_marker setMarkerSize [3,3];
_marker setMarkerType "mil_dot";
_marker setMarkerBrush "Solid";
_marker setMarkerAlpha 0.5;
_marker setMarkerColor "ColorRed";
_marker setMarkerText "Occupied Area (static)";
};
_okToSpawn = false;
};
};
_staticUID = _staticUID + 1;
}forEach _statics;

View File

@ -0,0 +1,113 @@
// Unstuck based on a function written by Chris (infiSTAR)
// http://pastebin.com/73pjvXPw
private["_vehicle","_curPos","_oldvehPos","_engineTime","_newPos"];
_vehicle = _this select 0;
if(isNil "_vehicle") exitWith{};
if(count(crew _vehicle) > 0)then
{
_vehicleType = TypeOf _vehicle;
_vehicleName = getText (configFile >> "CfgVehicles" >> _vehicleType >> "displayName");
_curPos = position _vehicle;
_newPos = _curPos;
_oldvehPos = _vehicle getVariable["vehPos",[0,0,0]];
if(isNil "_oldvehPos") then { _oldvehPos = [0,0,0]; };
if(str _oldvehPos != "[0,0,0]")then
{
if(_curPos distance _oldvehPos < 2)then
{
_engineTime = _vehicle getVariable["engineTime",-1];
if(_engineTime < 0)then
{
_vehicle setVariable["engineTime",time];
};
if(time - _engineTime > 10)then
{
_logDetail = format ["[OCCUPATION:Unstuck]:: %4 (%1) is stuck,attempting to unstick from %2 @ %3",_vehicleType,_curPos,time,_vehicleName];
[_logDetail] call SC_fnc_log;
_vehicle setVariable["engineTime",-1];
_vehicle setVectorUp [0,0,1];
_originalSpawnLocation = _vehicle getVariable "SC_vehicleSpawnLocation";
_radius = 2000;
_group = group _vehicle;
// Remove dead units from the group
{
if(!alive _x) then { [_x] join grpNull; };
}forEach units _group;
_vehClass = typeOf _vehicle;
if(_vehicle isKindOf "LandVehicle") then
{
_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];
};
if(_vehicle isKindOf "Ship") then
{
_tempLocation = _vehicle getVariable "SC_vehicleSpawnLocation";
_originalSpawnLocation = _tempLocation select 0;
_radius = _tempLocation select 1;
_newPos = _curPos;
};
if(_vehicle isKindOf "Air") then
{
_tempLocation = _vehicle getVariable "SC_vehicleSpawnLocation";
_originalSpawnLocation = _tempLocation select 0;
_radius = _tempLocation select 1;
_newPos = _curPos;
};
_side = side _group;
_group2 = createGroup _side;
_group2 setVariable ["DMS_AllowFreezing",false];
[_group2,false] call DMS_fnc_FreezeToggle;
_group2 setVariable ["DMS_LockLocality",false];
_group2 setVariable ["DMS_SpawnedGroup",true];
_group2 setVariable ["DMS_Group_Side", _side];
[_vehicle] joinSilent _group2;
{
_unit = _x;
//[_unit] joinSilent grpNull;
[_unit] joinSilent _group2;
_unit enableAI "FSM";
_unit enableAI "MOVE";
reload _unit;
}foreach units _group;
deleteGroup _group;
_GroupLeader = leader (group _vehicle);
_GroupLeader doMove _originalSpawnLocation;
[_group2, _originalSpawnLocation, _radius] call bis_fnc_taskPatrol;
_group2 setBehaviour "AWARE";
_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] call SC_fnc_log;
};
};
};
_vehicle setVariable["vehPos",_newPos];
};
if(count units _group == 0) then
{
_vehicle lock 0;
_vehicle setVehicleLock "UNLOCKED";
_vehicle setVariable ["ExileIsLocked", 0, true];
[_vehicle] call SC_fnc_vehicleDestroyed;
};

View File

@ -0,0 +1,18 @@
private["_timeMultiplier"];
if (daytime > SC_fastNightsStarts || daytime < SC_fastNightsEnds) then
{
_timeMultiplier = SC_fastNightsMultiplierNight;
}
else
{
_timeMultiplier = SC_fastNightsMultiplierDay;
};
if(timeMultiplier != _timeMultiplier) then { setTimeMultiplier _timeMultiplier; };
_hour = floor daytime;
_minute = floor ((daytime - _hour) * 60);
_time24 = text format ["%1:%2",_hour,_minute];
_logDetail = format ["[OCCUPATION:FastNights]:: Current in game time is %1 multipler is %2",_time24,_timeMultiplier];
[_logDetail] call SC_fnc_log;

View File

@ -0,0 +1,260 @@
if (!isServer) exitWith {};
_displayMarkers = SC_debug; // only use for debug, no need for actual gameplay
private['_position'];
_logDetail = format ["[OCCUPATION:HeliCrashes]:: Initialised at %1",time];
[_logDetail] call SC_fnc_log;
_logDetail = format['[OCCUPATION:HeliCrashes]:: worldname: %1 crashes to spawn: %2',worldName,SC_numberofHeliCrashes];
[_logDetail] call SC_fnc_log;
for "_i" from 1 to SC_numberofHeliCrashes do
{
_validspot = false;
while{!_validspot} do
{
sleep 0.2;
if(SC_occupyHeliCrashesStatic) then
{
_tempPosition = SC_occupyHeliCrashesLocations call BIS_fnc_selectRandom;
SC_occupyHeliCrashesLocations = SC_occupyHeliCrashesLocations - _tempPosition;
_position = [_tempPosition select 0, _tempPosition select 1, _tempPosition select 2];
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 heli crash site
_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,["Exile_Container_SupplyBox"],500]) select 0;
if (!isNil "_nearOtherCrate") then { _validspot = false; };
};
_logDetail = format['[OCCUPATION:HeliCrashes] Crash %1 : Location %2',_i,_position];
[_logDetail] call SC_fnc_log;
_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";
if(SC_HeliCrashesOnFire) then
{
_effect = "test_EmptyObjectForFireBig";
};
_heliFire = _effect createVehicle (position _vehHeli);
_heliFire attachto [_vehHeli, [0,0,-1]];
_vehHeli setPos _position;
_vehHeli setVectorUp surfaceNormal position _vehHeli;
if (SC_SpawnHeliCrashGuards) then
{
//Infantry spawn using DMS
_AICount = SC_HeliCrashGuards;
if(SC_HeliCrashGuardsRandomize) then
{
_AICount = 1 + (round (random (SC_HeliCrashGuards-1)));
};
if(_AICount > 0) then
{
_spawnPosition = [_position select 0, _position select 1, 0];
_initialGroup = createGroup SC_BanditSide;
_initialGroup setCombatMode "BLUE";
_initialGroup setBehaviour "SAFE";
for "_i" from 1 to _AICount do
{
_loadOut = ["bandit"] call SC_fnc_selectGear;
_unit = [_initialGroup,_spawnPosition,"custom","random","bandit","soldier",_loadOut] call DMS_fnc_SpawnAISoldier;
_unitName = ["bandit"] call SC_fnc_selectName;
if(!isNil "_unitName") then { _unit setName _unitName; };
reload _unit;
};
// Get the AI to shut the fuck up :)
enableSentences false;
enableRadio false;
_group = createGroup SC_BanditSide;
_group setVariable ["DMS_LockLocality",nil];
_group setVariable ["DMS_SpawnedGroup",true];
_group setVariable ["DMS_Group_Side", SC_BanditSide];
{
_unit = _x;
[_unit] joinSilent grpNull;
[_unit] joinSilent _group;
_unit setCaptive false;
}foreach units _initialGroup;
deleteGroup _initialGroup;
[_group, _spawnPosition, 25] call bis_fnc_taskPatrol;
_group setBehaviour "STEALTH";
_group setCombatMode "RED";
_logDetail = format ["[OCCUPATION:HeliCrash]:: Creating HeliCrash %3 at %1 with %2 guards",_position,_AICount,_i];
[_logDetail] call SC_fnc_log;
};
}
else
{
_logDetail = format ["[OCCUPATION:HeliCrash]:: Creating HeliCrash %2 at %1 with no guards",_position,_i];
[_logDetail] call SC_fnc_log;
};
_mapMarkerName = format ["SC_helicrash_marker_%1", _i];
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 "Heli Crash";
_heli_marker setMarkerType "c_air";
_heli_marker setMarkerBrush "Vertical";
_heli_marker setMarkerSize [(1), (1)];
};
_positionOfBox = [_position,3,10,1,0,10,0] call BIS_fnc_findSafePos;
_box = "Box_NATO_Ammo_F" createvehicle _positionOfBox;
clearMagazineCargoGlobal _box;
clearWeaponCargoGlobal _box;
clearItemCargoGlobal _box;
_box enableRopeAttach SC_ropeAttach;
_box setVariable ["permaLoot",true];
_box allowDamage false;
{
_item = _x select 0;
_amount = _x select 1;
_randomAmount = _x select 2;
_amount = _amount + (random _randomAmount);
_itemType = _x call BIS_fnc_itemType;
if((_itemType select 0) == "Weapon") then
{
_box addWeaponCargoGlobal [_item, _amount];
};
if((_itemType select 0) == "Magazine") then
{
_box addMagazineCargoGlobal [_item, _amount];
};
if((_itemType select 0) == "Item") then
{
_box addItemCargoGlobal [_item, _amount];
};
if((_itemType select 0) == "Equipment") then
{
_box addItemCargoGlobal [_item, _amount];
};
if((_itemType select 0) == "Backpack") then
{
_box addBackpackCargoGlobal [_item, _amount];
};
}forEach SC_HeliCrashItems;
{
_spawnChance = round (random 100);
if(_spawnChance <= SC_HeliCrashRareItemChance) then
{
_item = _x select 0;
_amount = _x select 1;
_randomAmount = _x select 2;
_amount = _amount + (random _randomAmount);
_itemType = _x call BIS_fnc_itemType;
if((_itemType select 0) == "Weapon") then
{
_box addWeaponCargoGlobal [_item, _amount];
};
if((_itemType select 0) == "Magazine") then
{
_box addMagazineCargoGlobal [_item, _amount];
};
if((_itemType select 0) == "Item") then
{
_box addItemCargoGlobal [_item, _amount];
};
if((_itemType select 0) == "Equipment") then
{
_box addItemCargoGlobal [_item, _amount];
};
if((_itemType select 0) == "Backpack") then
{
_box addBackpackCargoGlobal [_item, _amount];
};
};
}forEach SC_HeliCrashRareItems;
// Add weapons with ammo to the Box
_possibleWeapons = SC_HeliCrashWeapons;
_amountOfWeapons = (SC_HeliCrashWeaponsAmount select 0) + round random (SC_HeliCrashWeaponsAmount select 1);
for "_i" from 1 to _amountOfWeapons do
{
_weaponToAdd = _possibleWeapons call BIS_fnc_selectRandom;
_box addWeaponCargoGlobal [_weaponToAdd,1];
_magazinesToAdd = getArray (configFile >> "CfgWeapons" >> _weaponToAdd >> "magazines");
_magazineAmount = (SC_HeliCrashMagazinesAmount select 0) + round random (SC_HeliCrashMagazinesAmount select 1);
_box addMagazineCargoGlobal [(_magazinesToAdd select 0),round random 5];
};
if(_displayMarkers) then
{
_event_marker = createMarker [ format ["helicrash_marker_%1", _i], _position];
_event_marker setMarkerColor "ColorRed";
_event_marker setMarkerAlpha 1;
_event_marker setMarkerText "Heli Crash";
_event_marker setMarkerType "loc_Tree";
_event_marker setMarkerBrush "Vertical";
_event_marker setMarkerSize [(3), (3)];
};
};

View File

@ -0,0 +1,15 @@
// Logging function to use either infiSTAR logging function or server RPT
_logDetail = format["%1 %2",SC_occupationVersion,_this select 0];
_fileName = _this select 1;
if(isNil "_fileName") then { _fileName = "OCCUPATION"; };
if(SC_infiSTAR_log && !(isNil "INFISTARVERSION")) then
{
[_fileName,_logDetail] call FNC_A3_CUSTOMLOG;
}
else
{
diag_log _logDetail;
};

View File

@ -0,0 +1,182 @@
if (!isServer) exitWith {};
_logDetail = format ["[OCCUPATION:LootCrates]:: Starting Occupation Loot Crates"];
[_logDetail] call SC_fnc_log;
_logDetail = format["[OCCUPATION:LootCrates]:: worldname: %1 crates to spawn: %2",worldName,SC_numberofLootCrates];
[_logDetail] call SC_fnc_log;
private _position = [0,0,0];
for "_i" from 1 to SC_numberofLootCrates do
{
_validspot = false;
while{!_validspot} do
{
sleep 0.2;
if(SC_occupyLootCratesStatic) then
{
_tempPosition = SC_occupyLootCratesLocations call BIS_fnc_selectRandom;
SC_occupyLootCratesLocations = SC_occupyLootCratesLocations - _tempPosition;
_position = [_tempPosition select 0, _tempPosition select 1, _tempPosition select 2];
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
_nearOtherCrate = (nearestObjects [_position,["Exile_Container_SupplyBox"],500]) select 0;
if (!isNil "_nearOtherCrate") then { _validspot = false; };
};
_mapMarkerName = format ["SC_loot_marker_%1", _i];
if (SC_occupyLootCratesMarkers) then
{
_event_marker = createMarker [ format ["SC_loot_marker_%1", _i], _position];
_event_marker setMarkerColor "ColorWhite";
_event_marker setMarkerAlpha 1;
_event_marker setMarkerText "Gear Crate";
_event_marker setMarkerType "ExileMissionStrongholdIcon";
};
if (SC_SpawnLootCrateGuards) then
{
//Infantry spawn using DMS
_AICount = SC_LootCrateGuards;
if(SC_LootCrateGuardsRandomize) then
{
_AICount = 1 + (round (random (SC_LootCrateGuards-1)));
};
if(_AICount > 0) then
{
_spawnPosition = [_position select 0, _position select 1, 0];
_initialGroup = createGroup SC_BanditSide;
_initialGroup setCombatMode "BLUE";
_initialGroup setBehaviour "SAFE";
for "_i" from 1 to _AICount do
{
_loadOut = ["bandit"] call SC_fnc_selectGear;
_unit = [_initialGroup,_spawnPosition,"custom","random","bandit","soldier",_loadOut] call DMS_fnc_SpawnAISoldier;
_unitName = ["bandit"] call SC_fnc_selectName;
if(!isNil "_unitName") then { _unit setName _unitName; };
reload _unit;
};
// Get the AI to shut the fuck up :)
enableSentences false;
enableRadio false;
_group = createGroup SC_BanditSide;
_group setVariable ["DMS_LockLocality",nil];
_group setVariable ["DMS_SpawnedGroup",true];
_group setVariable ["DMS_Group_Side", SC_BanditSide];
{
_unit = _x;
[_unit] joinSilent grpNull;
[_unit] joinSilent _group;
_unit setCaptive false;
}foreach units _initialGroup;
deleteGroup _initialGroup;
[_group, _spawnPosition, 25] call bis_fnc_taskPatrol;
_group setBehaviour "STEALTH";
_group setCombatMode "RED";
_logDetail = format ["[OCCUPATION:LootCrates]:: Creating crate %3 at drop zone %1 with %2 guards",_position,_AICount,_i];
[_logDetail] call SC_fnc_log;
};
}
else
{
_logDetail = format ["[OCCUPATION:LootCrates]:: Creating crate %2 at drop zone %1 with no guards",_position,_i];
[_logDetail] call SC_fnc_log;
};
_box = "Exile_Container_SupplyBox" createvehicle _position;
clearMagazineCargoGlobal _box;
clearWeaponCargoGlobal _box;
clearItemCargoGlobal _box;
_box enableRopeAttach SC_ropeAttach; // Stop people airlifting the crate
_box setVariable ["permaLoot",true]; // Crate stays until next server restart
_box allowDamage false; // Stop crates taking damage
{
_item = _x select 0;
_amount = _x select 1;
_randomAmount = _x select 2;
_amount = _amount + (random _randomAmount);
_itemType = _x call BIS_fnc_itemType;
if((_itemType select 0) == "Weapon") then
{
_box addWeaponCargoGlobal [_item, _amount];
};
if((_itemType select 0) == "Magazine") then
{
_box addMagazineCargoGlobal [_item, _amount];
};
if((_itemType select 0) == "Item") then
{
_box addItemCargoGlobal [_item, _amount];
};
if((_itemType select 0) == "Equipment") then
{
_box addItemCargoGlobal [_item, _amount];
};
if((_itemType select 0) == "Backpack") then
{
_box addBackpackCargoGlobal [_item, _amount];
};
}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;
};

View File

@ -0,0 +1,222 @@
if (!isServer) exitWith {};
private["_wp","_wp2","_wp3"];
_logDetail = format ["[OCCUPATION Military]:: Starting Monitor"];
[_logDetail] call SC_fnc_log;
_maxDistance = 500; // Max radius to scan
_maxAIcount = SC_maxAIcount;
_minFPS = SC_minFPS;
_useLaunchers = DMS_ai_use_launchers;
_scaleAI = SC_scaleAI;
_buildings = SC_buildings; // Class names for the military buildings to patrol
_building = [];
_currentPlayerCount = count playableUnits;
if(_currentPlayerCount > _scaleAI) then
{
_maxAIcount = _maxAIcount - (_currentPlayerCount - _scaleAI) ;
};
// Don't spawn additional AI if the server fps is below _minFPS
if(diag_fps < _minFPS) exitWith
{
_logDetail = format ["[OCCUPATION Military]:: Held off spawning more AI as the server FPS is only %1",diag_fps];
[_logDetail] call SC_fnc_log;
};
_aiActive = { !isPlayer _x } count allunits;
if(_aiActive > _maxAIcount) exitWith
{
_logDetail = format ["[OCCUPATION Military]:: %1 active AI, so not spawning AI this time",_aiActive];
[_logDetail] call SC_fnc_log;
};
{
_okToSpawn = true;
Sleep 0.1;
_foundBuilding = _x select 0;
_location = getPos _foundBuilding;
_pos = [_location select 0, _location select 1, 0];
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION Military]:: Testing position: %1",_pos];
[_logDetail] call SC_fnc_log;
};
while{_okToSpawn && !isNil "_pos"} do
{
// Percentage chance to spawn (roll 80 or more to spawn AI)
_spawnChance = round (random 100);
if(_spawnChance < 80) exitWith
{
_okToSpawn = false;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION Military]:: Rolled %1 so not spawning AI this time",_spawnChance];
[_logDetail] call SC_fnc_log;
};
};
_safePos = [ _pos ] call SC_fnc_isSafePos;
if(!_safePos OR isNil "_safePos") then
{
_okToSpawn = false;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION Military]:: %1 determined as an unsafe position to spawn AI",_pos];
[_logDetail] call SC_fnc_log;
};
};
// Don't spawn additional AI if there are already AI in range
_aiNear = count(_pos nearEntities [DMS_AI_Classname, 500]);
if(_aiNear > 0) exitwith
{
_okToSpawn = false;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION Military]:: %1 already has %2 active AI patrolling",_pos,_aiNear];
[_logDetail] call SC_fnc_log;
};
};
if(_okToSpawn) then
{
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Get AI to patrol the area
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
_aiCount = 1 + (round (random 2));
_groupRadius = 500;
_difficulty = "random";
_side = SC_BanditSide;
_spawnPosition = _pos;
// Get the AI to shut the fuck up :)
enableSentences false;
enableRadio false;
if(!SC_useWaypoints) then
{
DMS_ai_use_launchers = false;
_groupInitial = [_spawnPosition, _aiCount, _difficulty, "random", "bandit"] call DMS_fnc_SpawnAIGroup;
DMS_ai_use_launchers = _useLaunchers;
_group = createGroup SC_BanditSide;
_group setVariable ["DMS_AllowFreezing",true];
_group setVariable ["DMS_LockLocality",false];
_group setVariable ["DMS_SpawnedGroup",true];
_group setVariable ["DMS_Group_Side", "bandit"];
{
_unit = _x;
[_unit] joinSilent grpNull;
[_unit] joinSilent _group;
_unitName = ["bandit"] call SC_fnc_selectName;
if(!isNil "_unitName") then { _unit setName _unitName; };
reload _unit;
if(SC_debug) then
{
_tag = createVehicle ["Sign_Arrow_Blue_F", position _unit, [], 0, "CAN_COLLIDE"];
_tag attachTo [_unit,[0,0,0.6],"Head"];
};
}foreach units _group;
[_group, _pos, _groupRadius] call bis_fnc_taskPatrol;
_group setBehaviour "STEALTH";
_group setCombatMode "RED";
}
else
{
DMS_ai_use_launchers = false;
_groupInitial = [_spawnPosition, _aiCount, _difficulty, "random", "bandit"] call DMS_fnc_SpawnAIGroup;
DMS_ai_use_launchers = _useLaunchers;
_group = createGroup SC_BanditSide;
_group setVariable ["DMS_AllowFreezing",true];
_group setVariable ["DMS_LockLocality",false];
_group setVariable ["DMS_SpawnedGroup",true];
_group setVariable ["DMS_Group_Side", "bandit"];
{
_unit = _x;
[_unit] joinSilent grpNull;
[_unit] joinSilent _group;
_unitName = ["bandit"] call SC_fnc_selectName;
if(!isNil "_unitName") then { _unit setName _unitName; };
if(SC_debug) then
{
_tag = createVehicle ["Sign_Arrow_Blue_F", position _unit, [], 0, "CAN_COLLIDE"];
_tag attachTo [_unit,[0,0,0.6],"Head"];
};
}foreach units _groupInitial;
deleteGroup _groupInitial;
[ _group,_pos,_difficulty,"STEALTH" ] call DMS_fnc_SetGroupBehavior;
_buildings = _pos nearObjects ["house", _groupRadius];
{
_buildingPositions = [_x, 10] call BIS_fnc_buildingPositions;
if(count _buildingPositions > 0) then
{
_y = _x;
// Find Highest Point
_highest = [0,0,0];
{
if(_x select 2 > _highest select 2) then
{
_highest = _x;
};
} foreach _buildingPositions;
_spawnPosition = _highest;
_i = _buildingPositions find _spawnPosition;
_wp = _group addWaypoint [_spawnPosition, 0] ;
_wp setWaypointBehaviour "AWARE";
_wp setWaypointCombatMode "RED";
_wp setWaypointCompletionRadius 1;
_wp waypointAttachObject _y;
_wp setwaypointHousePosition _i;
_wp setWaypointType "MOVE";
};
} foreach _buildings;
if(count _buildings > 0 ) then
{
_wp setWaypointType "CYCLE";
};
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
_logDetail = format ["[OCCUPATION Military]:: Spawning %1 AI in at %2 to patrol",_aiCount,_spawnPosition];
[_logDetail] call SC_fnc_log;
if(SC_mapMarkers) then
{
_marker = createMarker [format ["%1", _foundBuilding],_pos];
_marker setMarkerShape "Icon";
_marker setMarkerSize [3,3];
_marker setMarkerType "mil_dot";
_marker setMarkerBrush "Solid";
_marker setMarkerAlpha 0.5;
_marker setMarkerColor "ColorRed";
_marker setMarkerText "Occupied Military Area";
};
_okToSpawn = false;
};
};
}foreach SC_completeMilitaryList;
_logDetail = "[OCCUPATION Military]: Ended";
[_logDetail] call SC_fnc_log;

View File

@ -0,0 +1,121 @@
_logDetail = format ["[OCCUPATION:Unstick]:: Initialised at %1",time];
[_logDetail] call SC_fnc_log;
SC_liveVehiclesArray = [];
SC_liveHelisArray = [];
SC_liveBoatsArray = [];
{
_vehicle = _x;
_vehLocation = _x getVariable "SC_vehicleSpawnLocation";
_transport = _x getVariable "SC_transport";
if(!isNil "_vehLocation") then
{
if(_vehicle isKindOf "LandVehicle") then
{
SC_liveVehiclesArray pushBack _vehicle;
SC_liveVehicles = count(SC_liveVehiclesArray);
};
if(_vehicle isKindOf "Air" && isNil "_transport") then
{
SC_liveHelisArray pushBack _vehicle;
SC_liveHelis = count(SC_liveHelisArray);
};
if(_vehicle isKindOf "Ship") then
{
SC_liveBoatsArray pushBack _vehicle;
SC_liveBoatss = count(SC_liveBoatsArray);
};
};
}forEach vehicles;
SC_liveHelis = count(SC_liveHelisArray);
{
if(isNull _x) exitWith { SC_liveHelisArray = SC_liveHelisArray - [_x]; };
_logDetail = format ["[OCCUPATION:Unstick]:: Air: %1 is active",_x];
[_logDetail] call SC_fnc_log;
_x setFuel 1;
sleep 2;
_tempLocation = _x getVariable "SC_vehicleSpawnLocation";
_originalSpawnLocation = _tempLocation select 0;
diag_log format ["[occupationMonitor] _tempLocation: %1 _originalSpawnLocation: %2",_tempLocation,_originalSpawnLocation];
_radius = _tempLocation select 1;
_pos = position _x;
_nearestMarker = [allMapMarkers, _pos] call BIS_fnc_nearestPosition; // Nearest Marker to the Location
_posNearestMarker = getMarkerPos _nearestMarker;
_group = group _x;
_isFrozen = _group getVariable["DMS_isGroupFrozen",false];
if (!_isFrozen) then
{
_GroupLeader = leader (group _x);
_GroupLeader doMove _originalSpawnLocation;
}
else
{
_logDetail = format ["[OCCUPATION:Unstick]:: Air: %1 is currently frozen, resetting DMS_AllowFreezing variable and forcing unfreeze",_x];
[_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;
SC_liveVehicles = count(SC_liveVehiclesArray);
{
if(isNull _x) exitWith { SC_liveVehiclesArray = SC_liveVehiclesArray - [_x]; };
_logDetail = format ["[OCCUPATION:Unstick]:: Land: %1 is active",_x];
[_logDetail] call SC_fnc_log;
_x setFuel 1;
_group = group _x;
_isFrozen = _group getVariable["DMS_isGroupFrozen",false];
if (!_isFrozen) then
{
[_x] call SC_fnc_unstick;
}
else
{
_logDetail = format ["[OCCUPATION:Unstick]:: Land: %1 is currently frozen, resetting DMS_AllowFreezing variable and forcing unfreeze",_x];
[_logDetail] call SC_fnc_log;
_group setVariable ["DMS_AllowFreezing",false];
[_group,false] call DMS_fnc_FreezeToggle;
};
sleep 2;
}forEach SC_liveVehiclesArray;
SC_liveBoats = count(SC_liveBoatsArray);
{
if(isNull _x) exitWith { SC_liveBoatsArray = SC_liveBoatsArray - [_x]; };
_logDetail = format ["[OCCUPATION:Unstick]:: Sea: %1 is active",_x];
[_logDetail] call SC_fnc_log;
_x setFuel 1;
_group = group _x;
_isFrozen = _group getVariable["DMS_isGroupFrozen",false];
if (!_isFrozen) then
{
[_x] call SC_fnc_unstick;
}
else
{
_logDetail = format ["[OCCUPATION:Unstick]:: Sea: %1 is currently frozen, resetting DMS_AllowFreezing variable and forcing unfreeze",_x];
[_logDetail] call SC_fnc_log;
_group setVariable ["DMS_AllowFreezing",false];
[_group,false] call DMS_fnc_FreezeToggle;
};
sleep 2;
}forEach SC_liveBoatsArray;
_logDetail = format ["[OCCUPATION:Unstick]:: Finished at %1",time];
[_logDetail] call SC_fnc_log;

View File

@ -0,0 +1,361 @@
if (!isServer) exitWith {};
private["_wp","_wp2","_wp3"];
_logDetail = format ["[OCCUPATION:Places]:: Starting Occupation Monitor @ %1",time];
[_logDetail] call SC_fnc_log;
_middle = worldSize/2;
_spawnCenter = [_middle,_middle,0]; // Centre point for the map
_maxDistance = _middle; // Max radius for the map
_maxAIcount = SC_maxAIcount;
_minFPS = SC_minFPS;
_useLaunchers = DMS_ai_use_launchers;
_scaleAI = SC_scaleAI;
_side = "bandit";
_okToSpawn = true;
// more than _scaleAI players on the server and the max AI count drops per additional player
_currentPlayerCount = count playableUnits;
if(_currentPlayerCount > _scaleAI) then
{
_maxAIcount = _maxAIcount - (_currentPlayerCount - _scaleAI) ;
};
// Don't spawn additional AI if the server fps is below _minFPS
if(diag_fps < _minFPS) exitWith
{
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Places]:: Held off spawning more AI as the server FPS is only %1",diag_fps];
[_logDetail] call SC_fnc_log;
};
};
_aiActive = { !isPlayer _x } count allunits;
if(_aiActive > _maxAIcount) exitWith
{
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Places]:: %1 active AI, so not spawning AI this time",_aiActive];
[_logDetail] call SC_fnc_log;
};
};
_locations = (nearestLocations [_spawnCenter, ["NameVillage","NameCity", "NameCityCapital"], _maxDistance]);
{
_okToSpawn = true;
_temppos = position _x;
_locationName = text _x;
_locationType = type _x;
_pos = [_temppos select 0, _temppos select 1, _temppos select 2];
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Places]:: Testing location name: %1 position: %2",_locationName,_pos];
[_logDetail] call SC_fnc_log;
};
// Percentage chance to spawn (roll 80 or more to spawn AI)
_spawnChance = round (random 100);
if(_spawnChance < 80) then
{
_okToSpawn = false;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Places]:: Rolled %1 so not spawning AI this time",_spawnChance,_locationName];
[_logDetail] call SC_fnc_log;
};
}
else
{
_okToSpawn = [ _pos ] call SC_fnc_isSafePos;
if(isNil "_okToSpawn" OR !_okToSpawn) exitWith
{
_okToSpawn = false;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Places]:: (%2) %1 is not a safe place to spawn",_pos,_locationName];
[_logDetail] call SC_fnc_log;
};
};
// Don't spawn additional AI if there are already AI in range
_nearBanditAI = { side _x == SC_BanditSide AND _x distance _pos < 500 } count allUnits;
_nearSurvivorAI = { side _x == SC_SurvivorSide AND _x distance _pos < 500 } count allUnits;
if(_nearBanditAI > 0 AND _nearSurvivorAI > 0) exitWith
{
_okToSpawn = false;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Places]:: %1 already has active AI patrolling",_locationName];
[_logDetail] call SC_fnc_log;
};
};
if(_okToSpawn) then
{
if(_nearSurvivorAI == 0) then
{
_sideToSpawn = random 100;
if(_sideToSpawn <= SC_SurvivorsChance) then
{
_side = "survivor";
}
else
{
_side = "bandit";
};
}
else
{
_side = "bandit";
};
if(!SC_occupyPlacesSurvivors) then { _side = "bandit"; };
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Get AI to patrol the town
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
_aiCount = 1;
_groupRadius = 100;
if(_locationType isEqualTo "NameCityCapital") then { _aiCount = 5; _groupRadius = 300; };
if(_locationType isEqualTo "NameCity") then { _aiCount = 2 + (round (random 3)); _groupRadius = 200; };
if(_locationType isEqualTo "NameVillage") then { _aiCount = 1 + (round (random 2)); _groupRadius = 100; };
if(_aiCount < 1) then { _aiCount = 1; };
_difficulty = "random";
//_safeSpawnPosition = [_pos,10,100,5,0,20,0] call BIS_fnc_findSafePos;
_safeSpawnPosition = _pos findEmptyPosition [0,50,"B_T_MRAP_01_F"];
if(count _safeSpawnPosition == 0) exitWith
{
_okToSpawn = false;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:Places]:: Couldn't find safe position at %1",_locationName,_safeSpawnPosition];
[_logDetail] call SC_fnc_log;
};
};
_spawnPosition = [_safeSpawnPosition select 0, _safeSpawnPosition select 1, 0];
_group = createGroup SC_BanditSide;
if(_side == "survivor") then
{
deleteGroup _group;
_group = createGroup SC_SurvivorSide;
};
_group setVariable ["DMS_LockLocality",nil];
_group setVariable ["DMS_SpawnedGroup",true];
_group setVariable ["DMS_Group_Side", _side];
_group setVariable ["DMS_AllowFreezing",true];
DMS_ai_use_launchers = false;
for "_i" from 1 to _aiCount do
{
_loadOut = [_side] call SC_fnc_selectGear;
_unit = [_group,_spawnPosition,"custom","random",_side,"soldier",_loadOut] call DMS_fnc_SpawnAISoldier;
_unit allowFleeing 0;
_unit allowDamage false;
_unit disableAI "AUTOTARGET";
_unit disableAI "TARGET";
_unit disableAI "MOVE";
_unit setVariable ["SC_unitLocationName", _locationName,true];
_unit setVariable ["SC_unitLocationPosition", _spawnPosition,true];
_unit setVariable ["SC_unitSide", _side,true];
_unit addMPEventHandler ["mpkilled", "_this call SC_fnc_locationUnitMPKilled;"];
};
DMS_ai_use_launchers = _useLaunchers;
{
_unit = _x;
[_unit] joinSilent grpNull;
[_unit] joinSilent _group;
_unit allowDamage true;
_unit enableAI "AUTOTARGET";
_unit enableAI "TARGET";
_unit enableAI "MOVE";
_unitName = [_side] call SC_fnc_selectName;
if(!isNil "_unitName") then { _unit setName _unitName; };
[_side,_unit] call SC_fnc_addMarker;
reload _unit;
}foreach units _group;
// Get the AI to shut the fuck up :)
enableSentences false;
enableRadio false;
if(!SC_useWaypoints) then
{
[_group, _spawnPosition, _groupRadius] call bis_fnc_taskPatrol;
_group setBehaviour "COMBAT";
_group setCombatMode "RED";
}
else
{
[ _group,_spawnPosition,_difficulty,"COMBAT" ] call DMS_fnc_SetGroupBehavior;
_buildings = _spawnPosition nearObjects ["building", _groupRadius];
{
_isEnterable = [_x] call BIS_fnc_isBuildingEnterable;
if(_isEnterable) then
{
_buildingPositions = [_x, 10] call BIS_fnc_buildingPositions;
_y = _x;
// Find Highest Point
_highest = [0,0,0];
{
if(_x select 2 > _highest select 2) then
{
_highest = _x;
};
} foreach _buildingPositions;
_wpPosition = _highest;
_i = _buildingPositions find _wpPosition;
_wp = _group addWaypoint [_wpPosition, 0] ;
_wp setWaypointBehaviour "AWARE";
_wp setWaypointCombatMode "RED";
_wp setWaypointCompletionRadius 1;
_wp waypointAttachObject _y;
_wp setwaypointHousePosition _i;
_wp setWaypointType "SAD";
};
} foreach _buildings;
if(count _buildings > 0 && !isNil "_wp") then
{
_wp setWaypointType "CYCLE";
};
};
if(_locationType isEqualTo "NameCityCapital") then
{
_group2 = createGroup SC_BanditSide;
if(_side == "survivor") then
{
deleteGroup _group2;
_group2 = createGroup SC_SurvivorSide;
};
_group2 setVariable ["DMS_AllowFreezing",false];
DMS_ai_use_launchers = false;
for "_i" from 1 to 5 do
{
_loadOut = ["bandit"] call SC_fnc_selectGear;
_unit = [_group2,_spawnPosition,"custom","random",_side,"soldier",_loadOut] call DMS_fnc_SpawnAISoldier;
_unit allowFleeing 0;
_unit allowDamage false;
_unit disableAI "AUTOTARGET";
_unit disableAI "TARGET";
_unit disableAI "MOVE";
_unit setVariable ["SC_unitLocationName", _locationName,true];
_unit setVariable ["SC_unitLocationPosition", _spawnPosition,true];
_unit setVariable ["SC_unitSide", _side,true];
_unit addMPEventHandler ["mpkilled", "_this call SC_fnc_locationUnitMPKilled;"];
};
DMS_ai_use_launchers = _useLaunchers;
_group2 setVariable ["DMS_LockLocality",nil];
_group2 setVariable ["DMS_SpawnedGroup",true];
_group2 setVariable ["DMS_Group_Side", _side];
// Get the AI to shut the fuck up :)
enableSentences false;
enableRadio false;
{
_unit = _x;
[_unit] joinSilent grpNull;
[_unit] joinSilent _group2;
_unit allowDamage true;
_unit enableAI "AUTOTARGET";
_unit enableAI "TARGET";
_unit enableAI "MOVE";
[_side,_unit] call SC_fnc_addMarker;
_unitName = [_side] call SC_fnc_selectName;
if(!isNil "_unitName") then { _unit setName _unitName; };
reload _unit;
}foreach units _group2;
_group2 setVariable ["DMS_AllowFreezing",true];
[_group2, _spawnPosition, _groupRadius] call bis_fnc_taskPatrol;
_group2 setBehaviour "AWARE";
_group2 setCombatMode "RED";
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
_markerName = "Occupation Area";
_markerColour = "ColorOrange";
if(SC_mapMarkers) then
{
deleteMarker format ["%1", _locationName];
_nearBanditAI = { side _x == SC_BanditSide AND _x distance _spawnPosition < 500 } count allUnits;
_nearSurvivorAI = { side _x == SC_SurvivorSide AND _x distance _spawnPosition < 500 } count allUnits;
if(_nearBanditAI > 0 && _nearSurvivorAI > 0) then
{
_markerName = "Survivors and Bandits";
_markerColour = "ColorOrange";
};
if(_nearBanditAI == 0 && _nearSurvivorAI > 0) then
{
_markerName = "Survivors";
_markerColour = "ColorGreen";
};
if(_nearBanditAI > 0 && _nearSurvivorAI == 0) then
{
_markerName = "Bandits";
_markerColour = "ColorRed";
};
_marker = createMarker [format ["%1", _locationName],_spawnPosition];
_marker setMarkerShape "Icon";
_marker setMarkerSize [3,3];
_marker setMarkerType "mil_dot";
_marker setMarkerBrush "Solid";
_marker setMarkerText _markerName;
_marker setMarkerColor _markerColour;
_marker setMarkerAlpha 0.5;
if(_side == "survivor") then
{
_logDetail = format ["[OCCUPATION:Places]:: Spawning %2 survivor AI in at %3 to patrol %1",_locationName,_aiCount,_spawnPosition];
}
else
{
_logDetail = format ["[OCCUPATION:Places]:: Spawning %2 bandit AI in at %3 to patrol %1",_locationName,_aiCount,_spawnPosition];
};
[_logDetail] call SC_fnc_log;
_logDetail = format ["[OCCUPATION:Places]:: %1 Bandits:%2 Survivors:%3 Marker Colour:%4 Marker Name:%5",_locationName,_nearBanditAI,_nearSurvivorAI,_markerColour,_markerName];
[_logDetail] call SC_fnc_log;
};
};
};
sleep 0.2;
} forEach _locations;

View File

@ -0,0 +1,496 @@
if (!isServer) exitWith {};
private["_wp","_wp2","_wp3"];
_logDetail = format ["[OCCUPATION:RandomSpawn]:: Starting Occupation Monitor @ %1",time];
[_logDetail] call SC_fnc_log;
_middle = worldSize/2;
_spawnCenter = [_middle,_middle,0]; // Centre point for the map
_maxDistance = _middle; // Max radius for the map
_maxAIcount = SC_maxAIcount;
_minFPS = SC_minFPS;
_useLaunchers = DMS_ai_use_launchers;
_scaleAI = SC_scaleAI;
_side = "bandit";
_delay = 300;
if(SC_debug) then { _delay = 30; };
// Don't run for the first 5 minutes after restart
if(time < _delay) exitWith
{
if(SC_extendedLogging) then
{
_logDetail = format['[OCCUPATION:RandomSpawn] Waiting until the server has been up at least 5 minutes (it has currently been up for %1 seconds)',time];
[_logDetail] call SC_fnc_log;
};
};
// Control Existing Random Spawns
{
_group = _x;
if((count (units _group)) == 0) then
{
// Remove the group
SC_liveRandomGroups = SC_liveRandomGroups - [_group];
if(SC_extendedLogging) then
{
_logDetail = format['[OCCUPATION:RandomSpawn] group %1 removed (killed by players)',_group];
[_logDetail] call SC_fnc_log;
};
}
else
{
_groupLeader = leader _group;
if(isNil "_groupLeader" OR !alive _groupLeader) then
{
_groupMembers = units _group;
_groupLeader = _groupMembers call BIS_fnc_selectRandom;
};
_distanceFromSelectedPlayer = 500;
_selectedPlayer = _group getVariable "SC_huntedPlayer";
if(alive _selectedPlayer && !isNil "_selectedPlayer") then
{
_distanceFromSelectedPlayer = _selectedPlayer distance _groupLeader;
_logDetail = format['[OCCUPATION:RandomSpawn] group %1 is now %2m away from the target (%3)',_group,_distanceFromSelectedPlayer,_selectedPlayer];
[_logDetail] call SC_fnc_log;
};
_suitableTargets = [];
if(!alive _selectedPlayer OR _distanceFromSelectedPlayer >= 500) then
{
// Select a new target or despawn if no target nearby
_nearPlayers = _groupLeader nearEntities ["Exile_Unit_Player", 500];
{
_selectedPlayer = _x;
_playersPosition = position _selectedPlayer;
_suitablePlayer = [ _playersPosition ] call SC_fnc_isSafePosRandom;
_suitablePlayerisBambi = _selectedPlayer getVariable "ExileIsBambi";
if(_suitablePlayer && (!_suitablePlayerisBambi OR SC_randomSpawnTargetBambis) && alive _selectedPlayer) then
{
_suitableTargets pushBack _selectedPlayer;
};
}forEach _nearPlayers;
if(count(_suitableTargets) > 0) then
{
_selectedPlayer = _suitableTargets call BIS_fnc_selectRandom;
_group setVariable ["SC_huntedPlayer",_selectedPlayer];
// Hunt the selected player
_destination = getPos _selectedPlayer;
if(!isNil "_destination") then
{
_group reveal [_selectedPlayer,1.5];
_group allowFleeing 0;
_wp = _group addWaypoint [_destination, 0] ;
_wp setWaypointFormation "Column";
_wp setWaypointBehaviour "AWARE";
_wp setWaypointCombatMode "YELLOW";
_wp setWaypointCompletionRadius 5;
[_group, _destination, 350] call bis_fnc_taskPatrol;
_group allowFleeing 0;
_group setBehaviour "AWARE";
_group setCombatMode "YELLOW";
}
else
{
// Remove the group
SC_liveRandomGroups = SC_liveRandomGroups - [_group];
_groupToClean = _group;
_cleanup = [];
{
_cleanup pushBack _x;
} forEach units _group;
_cleanup call DMS_fnc_CleanUp;
_logDetail = format['[OCCUPATION:RandomSpawn] group %1 had no target, so was deleted',_groupToClean];
[_logDetail] call SC_fnc_log;
};
}
else
{
// Remove the group
SC_liveRandomGroups = SC_liveRandomGroups - [_group];
_groupToClean = _group;
_cleanup = [];
{
_cleanup pushBack _x;
} forEach units _group;
_cleanup call DMS_fnc_CleanUp;
_logDetail = format['[OCCUPATION:RandomSpawn] group %1 had no target, so was deleted',_groupToClean];
[_logDetail] call SC_fnc_log;
};
}
else
{
// Remove existing waypoints
while {(count (waypoints _group)) > 0} do
{
deleteWaypoint ((waypoints _group) select 0);
};
_groupLeader = leader _group;
if(isNil "_groupLeader" OR !alive _groupLeader) then
{
_groupMembers = units _group;
_groupLeader = _groupMembers call BIS_fnc_selectRandom;
};
_searchSet = false;
if(!isNil "_selectedPlayer" && alive _selectedPlayer && !isNil "_groupLeader" && alive _groupLeader) then
{
_distanceFromSelectedPlayer = _selectedPlayer distance _groupLeader;
_destination = getPos _selectedPlayer;
_group reveal [_selectedPlayer,1.5];
_destination = getPos _selectedPlayer;
_group allowFleeing 0;
_group move _destination;
_group setBehaviour "AWARE";
_group setCombatMode "YELLOW";
if(_distanceFromSelectedPlayer < 200) then
{
_buildings = _selectedPlayer nearObjects ["building", 20];
{
_isEnterable = [_x] call BIS_fnc_isBuildingEnterable;
diag_log format ["[OCCUPATION:RandomSpawn] %1 is enterable",_x];
if(_isEnterable) then
{
_buildingPositions = [_x, 30] call BIS_fnc_buildingPositions;
_y = _x;
// Find nearest building position to the players position
_nearest = [0,0,0];
{
_distance = _nearest distance _selectedPlayer;
_distanceToCheck = _x distance _selectedPlayer;
diag_log format ["[OCCUPATION:RandomSpawn] Checking if %1(%3m) is closer to the target than %2(%4m)",_x,_nearest,_distanceToCheck,_distance];
if(_distanceToCheck < _distance) then
{
_nearest = _x;
};
} foreach _buildingPositions;
diag_log format ["[OCCUPATION:RandomSpawn] Setting waypoint to nearest position to target %1 (%2m from target)",_nearest,_distance];
_i = _buildingPositions find _nearest;
_wp = _group addWaypoint [_nearest, 0] ;
_wp setWaypointBehaviour "AWARE";
_wp setWaypointCombatMode "RED";
_wp setWaypointCompletionRadius 5;
_wp waypointAttachObject _y;
_wp setwaypointHousePosition _i;
_logDetail = format['[OCCUPATION:RandomSpawn] group %1 are searching the buildings near player %2 @ location %3',_group,_selectedPlayer,_nearest];
[_logDetail] call SC_fnc_log;
}
else
{
diag_log format ["[OCCUPATION:RandomSpawn] %1 is not enterable",_x];
};
} foreach _buildings;
if(isNil "_wp") then
{
_group reveal [_selectedPlayer,1.5];
_destination = getPos _selectedPlayer;
_group allowFleeing 0;
_group move _destination;
[_group, _destination, 50] call bis_fnc_taskPatrol;
_group allowFleeing 0;
_group setBehaviour "AWARE";
_group setCombatMode "RED";
};
_searchSet = true;
_logDetail = format['[OCCUPATION:RandomSpawn] group %1 are searching the buildings near player %2 @ location %3',_group,_selectedPlayer,_destination];
[_logDetail] call SC_fnc_log;
};
};
if(!_searchSet OR isNil "_searchSet") then
{
// Make sure the target is being hunted
_group reveal [_selectedPlayer,1.5];
_destination = getPos _selectedPlayer;
_group allowFleeing 0;
_group move _destination;
[_group, _destination, 100] call bis_fnc_taskPatrol;
_group allowFleeing 0;
_group setBehaviour "AWARE";
_group setCombatMode "YELLOW";
_logDetail = format['[OCCUPATION:RandomSpawn] group %1 is hunting player %2 @ location %3',_group,_selectedPlayer,_destination];
[_logDetail] call SC_fnc_log;
};
};
};
}forEach SC_liveRandomGroups;
if(count(SC_liveRandomGroups) >= SC_randomSpawnMaxGroups) exitWith
{
if(SC_extendedLogging) then
{
_logDetail = format['[OCCUPATION:RandomSpawn] End check %1 groups active (max %2) @ %3',count(SC_liveRandomGroups),SC_randomSpawnMaxGroups,time];
[_logDetail] call SC_fnc_log;
};
};
// more than _scaleAI players on the server and the max AI count drops per additional player
_currentPlayerCount = count playableUnits;
if(_currentPlayerCount < SC_randomSPawnMinPlayers OR _currentPlayerCount < count(SC_liveRandomGroups)) exitWith
{
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:RandomSpawn]:: Held off spawning random AI, not enough players online"];
[_logDetail] call SC_fnc_log;
};
};
if(_currentPlayerCount > _scaleAI) then
{
_maxAIcount = _maxAIcount - (_currentPlayerCount - _scaleAI) ;
};
// Don't spawn additional AI if the server fps is below _minFPS
if(diag_fps < _minFPS) exitWith
{
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:RandomSpawn]:: Held off spawning more AI as the server FPS is only %1",diag_fps];
[_logDetail] call SC_fnc_log;
};
};
_aiActive = { !isPlayer _x } count allunits;
if(!SC_randomSpawnIgnoreCount) then
{
if(_aiActive > _maxAIcount) exitWith
{
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:RandomSpawn]:: %1 active AI, so not spawning AI this time",_aiActive];
[_logDetail] call SC_fnc_log;
};
};
};
// Get current targets
_huntedPlayers = [];
{
_group = _x;
_huntedPlayer = _group getVariable "SC_huntedPlayer";
_huntedPlayers pushback _huntedPlayer;
}forEach SC_liveRandomGroups;
_livePlayers = [];
{
if(alive _x) then
{
_livePlayers pushBack _x;
};
}forEach playableUnits;
//_livePlayers call BIS_fnc_arrayShuffle; //Apparently this is broken in Arma..
_livePlayers = _livePlayers call ExileClient_util_array_shuffle; // But Exile can still work it's magic!!
// Find a player to hunt
{
_selectedPlayer = _x;
_suitablePlayer = true;
_suitablePlayerisBambi = _selectedPlayer getVariable "ExileIsBambi";
if(isNil "_suitablePlayerisBambi") then { _suitablePlayerisBambi = false; };
if(_suitablePlayerisBambi && !SC_randomSpawnTargetBambis) exitWith
{
_suitablePlayer = false;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:RandomSpawn]:: %1 is still a bambi, awww!",_selectedPlayer];
[_logDetail] call SC_fnc_log;
};
};
if(_selectedPlayer in _huntedPlayers) exitWith
{
_suitablePlayer = false;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:RandomSpawn]:: %1 is already being hunted",_selectedPlayer];
[_logDetail] call SC_fnc_log;
};
};
_lastHunted = _x getVariable "SC_lastHunted";
if(isNil "_lastHunted") then
{
//_lastHunted = -5000;
_lastHunted = time;
_selectedPlayer setVariable ["SC_lastHunted",time];
};
if((time - _lastHunted) < SC_randomSpawnFrequency) exitWith
{
_suitablePlayer = false;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:RandomSpawn]:: %1 has been hunted recently, not spawning another group yet",_selectedPlayer];
[_logDetail] call SC_fnc_log;
};
};
if(vehicle _selectedPlayer != _selectedPlayer) exitWith
{
_suitablePlayer = false;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:RandomSpawn]:: selected player %1 is in a vehicle, so not spawning AI this round",_selectedPlayer,_diceRoll,(100 - SC_randomSpawnChance)];
[_logDetail] call SC_fnc_log;
};
};
_diceRoll = random(100);
if(_diceRoll <= (100 - SC_randomSpawnChance)) exitWith
{
_suitablePlayer = false;
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:RandomSpawn]:: %1 rolled %2 (%3+ required) so not spawning another group yet",_selectedPlayer,_diceRoll,(100 - SC_randomSpawnChance)];
[_logDetail] call SC_fnc_log;
};
};
// rolled more than the needed amount and not spawned hunters recently
_playersPosition = position _selectedPlayer;
// Is the player in a suitable place?
if(_suitablePlayer) then
{
_suitablePlayer = [ _playersPosition ] call SC_fnc_isSafePosRandom;
};
_spawnLocation = [0,0,0];
// Suitable player and location found
if(_suitablePlayer) then
{
// Find a safe position to spawn
_suitableLocation = false;
_attempts = 1;
while{!_suitableLocation && _attempts < 5} do
{
_spawnLocation = [_playersPosition,250,350,15,0,20,0] call BIS_fnc_findSafePos;
_suitableLocation = [ _spawnLocation ] call SC_fnc_isSafePosRandom;
_attempts = _attempts + 1;
sleep 1;
};
if(!_suitableLocation) then
{
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:RandomSpawn]:: unable to find safe place near %1",_suitablePlayer];
[_logDetail] call SC_fnc_log;
};
}
else
{
_group = createGroup SC_BanditSide;
_group setVariable ["DMS_AllowFreezing",false];
_group setVariable ["DMS_LockLocality",true];
_group setVariable ["DMS_SpawnedGroup",true];
_group setVariable ["DMS_Group_Side", "bandit"];
_group setVariable ["SC_huntedPlayer",_selectedPlayer];
_selectedPlayer setVariable ["SC_lastHunted",time];
SC_liveRandomGroups = SC_liveRandomGroups + [_group];
_groupSize = random [SC_randomSpawnMinGroupSize, SC_randomSpawnMinGroupSize+(SC_randomSpawnMaxGroupSize-SC_randomSpawnMinGroupSize)/2, SC_randomSpawnMaxGroupSize];
for "_i" from 1 to _groupSize do
{
_loadOut = ["cops"] call SC_fnc_selectGear;
_unit = [_group,_spawnLocation,"custom","random","bandit","soldier",_loadOut] call DMS_fnc_SpawnAISoldier;
_unit allowFleeing 0;
_unit allowDamage false;
_unit disableAI "AUTOTARGET";
_unit disableAI "TARGET";
_unit disableAI "MOVE";
//_unit disableAI "FSM";
_unitName = ["survivor"] call SC_fnc_selectName;
if(!isNil "_unitName") then { _unit setName _unitName; };
_unit addMPEventHandler ["mpkilled", "_this call SC_fnc_randomUnitMPKilled;"];
_unit addeventhandler ["Fired", {(vehicle (_this select 0)) setvehicleammo 1;}];
};
{
_unit = _x;
_unit allowDamage true;
_unit enableAI "AUTOTARGET";
_unit enableAI "TARGET";
_unit enableAI "MOVE";
_unit setCaptive false;
_unit setCombatMode "YELLOW"
}foreach units _group;
if(SC_randomSpawnAnnounce) then
{
if (SC_randomSpawnNameTarget) then
{
["toastRequest", ["InfoTitleAndText", ["Raid group Incoming!", format["A squad of Police have been despatched to take out %1!",name _selectedPlayer]]]] call ExileServer_system_network_send_broadcast;
}
else
{
["toastRequest", ["InfoTitleAndText", ["Raid group Incoming!", "A squad of Police have been despatched to take out a trouble prisoner."]]] call ExileServer_system_network_send_broadcast;
};
};
_logDetail = format ["[OCCUPATION:RandomSpawn]:: Spawning a group of AI @ %2 to hunt player %1",_selectedPlayer,_spawnLocation];
[_logDetail] call SC_fnc_log;
// Hunt the selected player
_group reveal [_selectedPlayer,1.5];
_destination = getPos _selectedPlayer;
_group allowFleeing 0;
_wp = _group addWaypoint [_destination, 0] ;
_wp setWaypointFormation "Column";
_wp setWaypointBehaviour "AWARE";
_wp setWaypointCombatMode "YELLOW";
_wp setWaypointCompletionRadius 10;
_wp setWaypointType "MOVE";
[_group, _destination, 50] call bis_fnc_taskPatrol;
_group allowFleeing 0;
_group setBehaviour "AWARE";
_group setCombatMode "YELLOW";
};
}
else
{
if(SC_extendedLogging) then
{
_logDetail = format ["[OCCUPATION:RandomSpawn]:: %1 is not in a safe place to spawn AI",_selectedPlayer];
[_logDetail] call SC_fnc_log;
};
};
}forEach _livePlayers;

View File

@ -0,0 +1,277 @@
if (!isServer) exitWith {};
_logDetail = format['[OCCUPATION:Sea] Started'];
[_logDetail] call SC_fnc_log;
// more than _scaleAI players on the server and the max AI count drops per additional player
_currentPlayerCount = count playableUnits;
_maxAIcount = SC_maxAIcount;
if(_currentPlayerCount > SC_scaleAI) then
{
_maxAIcount = _maxAIcount - (_currentPlayerCount - SC_scaleAI) ;
};
// Don't spawn additional AI if the server fps is below _minFPS
if(diag_fps < SC_minFPS) exitWith
{
_logDetail = format ["[OCCUPATION:Sea]:: Held off spawning more AI as the server FPS is only %1",diag_fps];
[_logDetail] call SC_fnc_log;
};
//_aiActive = {alive _x && (side _x == SC_BanditSide OR side _x == SC_SurvivorSide)} count allUnits;
_aiActive = { !isPlayer _x } count allunits;
if((_aiActive > _maxAIcount) && !SC_occupySeaVehicleIgnoreCount) exitWith
{
_logDetail = format ["[OCCUPATION:Sea]:: %1 active AI, so not spawning AI this time",_aiActive];
[_logDetail] call SC_fnc_log;
};
SC_liveBoats = count(SC_liveBoatsArray);
if(SC_liveBoats >= SC_maxNumberofBoats) exitWith
{
if(SC_extendedLogging) then
{
_logDetail = format['[OCCUPATION:Sea] End check %1 currently active (max %2) @ %3',SC_liveBoats,SC_maxNumberofBoats,time];
[_logDetail] call SC_fnc_log;
};
};
_vehiclesToSpawn = (SC_maxNumberofBoats - SC_liveBoats);
_middle = worldSize/2;
_spawnCenter = [_middle,_middle,0];
_maxDistance = _middle;
for "_i" from 1 to _vehiclesToSpawn do
{
if (_vehiclesToSpawn > 0) then
{
private["_group"];
_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 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;
_VehicleClassToUse = _VehicleClass select 0;
boatOkToSpawn = false;
while{!boatOkToSpawn} do
{
_VehicleClass = SC_BoatClassToUse call BIS_fnc_selectRandom;
_VehicleClassToUse = _VehicleClass select 0;
_VehicleClassAllowedCount = _VehicleClass select 1;
_vehicleCount = 0;
{
if(_VehicleClassToUse == typeOf _x) then { _vehicleCount = _vehicleCount + 1; };
}forEach SC_liveHelisArray;
if(_vehicleCount < _VehicleClassAllowedCount OR _VehicleClassAllowedCount == 0) then { boatOkToSpawn = true; };
};
_vehicle = createVehicle [_VehicleClassToUse, _spawnLocation, [], 0, "NONE"];
if(!isNull _vehicle) then
{
_vehicle setPosASL _spawnLocation;
_vehicle setVariable["vehPos",_spawnLocation,true];
_vehicle setVariable["vehClass",_VehicleClassToUse,true];
_SC_vehicleSpawnLocation = [_spawnLocation,_radius,worldName];
_vehicle setVariable ["SC_vehicleSpawnLocation", _SC_vehicleSpawnLocation,true];
// Remove the overpowered weapons from boats
_vehicle removeWeaponTurret ["HMG_01",[0]];
_vehicle removeWeaponTurret ["GMG_40mm",[0]];
SC_liveBoats = SC_liveBoats + 1;
SC_liveBoatsArray = SC_liveBoatsArray + [_vehicle];
_vehicle setVehiclePosition [_spawnLocation, [], 0, "NONE"];
_vehicle setVariable ["vehicleID", _spawnLocation, true];
_vehicle setFuel 1;
_vehicle setDamage 0;
_vehicle engineOn true;
_vehicle lock 0;
_vehicle setVehicleLock "UNLOCKED";
_vehicle setVariable ["ExileIsLocked", 0, true];
_vehicle setVariable ["ExileIsPersistent", false];
_vehicle action ["LightOn", _vehicle];
// Limit boat speed to help stop beaching
_vehicle setSpeedMode "LIMITED";
_vehicle limitSpeed 60;
sleep 0.2;
_group addVehicle _vehicle;
// Calculate the number of seats in the vehicle and fill the required amount
_crewRequired = SC_minimumCrewAmount;
if(SC_maximumCrewAmount > SC_minimumCrewAmount) then
{
_crewRequired = floor(random[SC_minimumCrewAmount,SC_maximumCrewAmount-SC_minimumCrewAmount,SC_maximumCrewAmount]);
};
_amountOfCrew = 0;
_unitPlaced = false;
_vehicleRoles = (typeOf _vehicle) call bis_fnc_vehicleRoles;
{
_unitPlaced = false;
_vehicleRole = _x select 0;
_vehicleSeat = _x select 1;
if(_vehicleRole == "Driver") then
{
_unit = [_group,_spawnLocation,"assault","random","bandit","Vehicle"] call DMS_fnc_SpawnAISoldier;
_amountOfCrew = _amountOfCrew + 1;
_unit assignAsDriver _vehicle;
_unit moveInDriver _vehicle;
_unit setVariable ["DMS_AssignedVeh",_vehicle];
_unitPlaced = true;
};
if(_vehicleRole == "Turret") then
{
_unit = [_group,_spawnLocation,"assault","random","bandit","Vehicle"] call DMS_fnc_SpawnAISoldier;
_amountOfCrew = _amountOfCrew + 1;
_unit moveInTurret [_vehicle, _vehicleSeat];
_unit setVariable ["DMS_AssignedVeh",_vehicle];
_unitPlaced = true;
};
if(_vehicleRole == "CARGO" && _amountOfCrew < _crewRequired) then
{
_unit = [_group,_spawnLocation,"assault","random","bandit","Vehicle"] call DMS_fnc_SpawnAISoldier;
_amountOfCrew = _amountOfCrew + 1;
_unit assignAsCargo _vehicle;
_unit moveInCargo _vehicle;
_unit setVariable ["DMS_AssignedVeh",_vehicle];
_unitPlaced = true;
};
if(SC_extendedLogging && _unitPlaced) then
{
_logDetail = format['[OCCUPATION:Sky] %1 added to %2',_vehicleRole,_vehicle];
[_logDetail] call SC_fnc_log;
};
} forEach _vehicleRoles;
{
_unit = _x;
_unitName = ["bandit"] call SC_fnc_selectName;
if(!isNil "_unitName") then { _unit setName _unitName; };
[_unit] joinSilent grpNull;
[_unit] joinSilent _group;
}foreach units _group;
if(SC_infiSTAR_log) then
{
_logDetail = format['[OCCUPATION:Sea] %1 spawned @ %2',_VehicleClassToUse,_spawnLocation];
[_logDetail] call SC_fnc_log;
};
clearMagazineCargoGlobal _vehicle;
clearWeaponCargoGlobal _vehicle;
clearItemCargoGlobal _vehicle;
_vehicle addMagazineCargoGlobal ["HandGrenade", (random 2)];
_vehicle addItemCargoGlobal ["ItemGPS", (random 1)];
_vehicle addItemCargoGlobal ["Exile_Item_InstaDoc", (random 1)];
_vehicle addItemCargoGlobal ["Exile_Item_PlasticBottleFreshWater", 2 + (random 2)];
_vehicle addItemCargoGlobal ["Exile_Item_EMRE", 2 + (random 2)];
// Add weapons with ammo to the vehicle
_possibleWeapons =
[
"arifle_MXM_Black_F",
"arifle_MXM_F",
"srifle_DMR_01_F",
"srifle_DMR_02_camo_F",
"srifle_DMR_02_F",
"srifle_DMR_02_sniper_F",
"srifle_DMR_03_F",
"srifle_DMR_03_khaki_F",
"srifle_DMR_03_multicam_F",
"srifle_DMR_03_tan_F",
"srifle_DMR_03_woodland_F",
"srifle_DMR_04_F",
"srifle_DMR_04_Tan_F",
"srifle_DMR_05_blk_F",
"srifle_DMR_05_hex_F",
"srifle_DMR_05_tan_f",
"srifle_DMR_06_camo_F",
"srifle_DMR_06_olive_F",
"srifle_EBR_F",
"srifle_GM6_camo_F",
"srifle_GM6_F",
"srifle_LRR_camo_F",
"srifle_LRR_F"
];
_amountOfWeapons = 1 + (random 3);
for "_i" from 1 to _amountOfWeapons do
{
_weaponToAdd = _possibleWeapons call BIS_fnc_selectRandom;
_vehicle addWeaponCargoGlobal [_weaponToAdd,1];
_magazinesToAdd = getArray (configFile >> "CfgWeapons" >> _weaponToAdd >> "magazines");
_vehicle addMagazineCargoGlobal [(_magazinesToAdd select 0),round random 3];
};
[_group, _spawnLocation, _radius] call bis_fnc_taskPatrol;
_group setBehaviour "AWARE";
_group setCombatMode "RED";
_vehicle addEventHandler ["getin", "_this call SC_fnc_claimVehicle;"];
_vehicle addMPEventHandler ["mpkilled", "_this call SC_fnc_vehicleDestroyed;"];
_vehicle addMPEventHandler ["mphit", "_this call SC_fnc_hitSea;"];
_vehicle setVariable ["SC_crewEjected", false,true];
sleep 0.2;
}
else
{
_logDetail = format['[OCCUPATION:Sea] vehicle %1 failed to spawn (check classname is correct)',_VehicleClassToUse];
[_logDetail] call SC_fnc_log;
};
};
};
_logDetail = format['[OCCUPATION:Sea] Running'];
[_logDetail] call SC_fnc_log;

View File

@ -0,0 +1,304 @@
if (!isServer) exitWith {};
_logDetail = format['[OCCUPATION:Sky] Started'];
[_logDetail] call SC_fnc_log;
// more than _scaleAI players on the server and the max AI count drops per additional player
_currentPlayerCount = count playableUnits;
_maxAIcount = SC_maxAIcount;
_side = "bandit";
if(_currentPlayerCount > SC_scaleAI) then
{
_maxAIcount = _maxAIcount - (_currentPlayerCount - SC_scaleAI) ;
};
// Don't spawn additional AI if the server fps is below _minFPS
if(diag_fps < SC_minFPS) exitWith
{
_logDetail = format ["[OCCUPATION:Sky]:: Held off spawning more AI as the server FPS is only %1",diag_fps];
[_logDetail] call SC_fnc_log;
};
_aiActive = { !isPlayer _x } count allunits;
if((_aiActive > _maxAIcount) && !SC_occupySkyVehicleIgnoreCount) exitWith
{
_logDetail = format ["[OCCUPATION:Sky]:: %1 active AI, so not spawning AI this time",_aiActive];
[_logDetail] call SC_fnc_log;
};
SC_liveHelis = count(SC_liveHelisArray);
if(SC_liveHelis >= SC_maxNumberofHelis) exitWith
{
if(SC_extendedLogging) then
{
_logDetail = format['[OCCUPATION:Sky] End check %1 currently active (max %2) @ %3',SC_liveHelis,SC_maxNumberofHelis,time];
[_logDetail] call SC_fnc_log;
};
};
_vehiclesToSpawn = (SC_maxNumberofHelis - SC_liveHelis);
_middle = worldSize/2;
_spawnCenter = [_middle,_middle,0];
_maxDistance = _middle;
_locations = (nearestLocations [_spawnCenter, ["NameVillage","NameCity", "NameCityCapital"], _maxDistance]);
_i = 0;
{
_okToUse = true;
_pos = position _x;
_nearestMarker = [allMapMarkers, _pos] call BIS_fnc_nearestPosition; // Nearest Marker to the Location
_posNearestMarker = getMarkerPos _nearestMarker;
if(_pos distance _posNearestMarker < 2500) exitwith { _okToUse = false; };
if(!_okToUse) then
{
_locations deleteAt _i;
};
_i = _i + 1;
sleep 0.2;
} forEach _locations;
for "_i" from 1 to _vehiclesToSpawn do
{
if (_vehiclesToSpawn > 0) then
{
private["_group"];
_height = 350 + (round (random 200));
_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 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;
_VehicleClassToUse = _VehicleClass select 0;
heliOkToSpawn = false;
while{!heliOkToSpawn} do
{
_VehicleClass = SC_HeliClassToUse call BIS_fnc_selectRandom;
_VehicleClassToUse = _VehicleClass select 0;
_VehicleClassAllowedCount = _VehicleClass select 1;
_vehicleCount = 0;
{
if(_VehicleClassToUse == typeOf _x) then { _vehicleCount = _vehicleCount + 1; };
}forEach SC_liveHelisArray;
if(_vehicleCount < _VehicleClassAllowedCount OR _VehicleClassAllowedCount == 0) then { heliOkToSpawn = true; };
};
_vehicle = createVehicle [_VehicleClassToUse, _spawnLocation, [], 0, "NONE"];
if(!isNull _vehicle) then
{
_group addVehicle _vehicle;
_vehicle setVariable["vehPos",_spawnLocation,true];
_vehicle setVariable["vehClass",_VehicleClassToUse,true];
_SC_vehicleSpawnLocation = [_spawnLocation,_radius,worldName];
diag_log format ["[occupationSky] _SC_vehicleSpawnLocation: %1",_SC_vehicleSpawnLocation];
_vehicle setVariable ["SC_vehicleSpawnLocation", _SC_vehicleSpawnLocation,true];
SC_liveHelis = SC_liveHelis + 1;
SC_liveHelisArray = SC_liveHelisArray + [_vehicle];
_vehicle setVehiclePosition [_spawnLocation, [], 0, "FLY"];
_vehicle setVariable ["vehicleID", _spawnLocation, true];
_vehicle setFuel 1;
_vehicle setDamage 0;
_vehicle engineOn true;
_vehicle flyInHeight 150;
_vehicle lock 0;
_vehicle setVehicleLock "UNLOCKED";
_vehicle setVariable ["ExileIsLocked", 0, true];
_vehicle setVariable ["ExileIsPersistent", false];
_vehicle action ["LightOn", _vehicle];
// Calculate the number of seats in the vehicle and fill the required amount
_crewRequired = SC_minimumCrewAmount;
if(SC_maximumCrewAmount > SC_minimumCrewAmount) then
{
_crewRequired = floor(random[SC_minimumCrewAmount,SC_maximumCrewAmount-SC_minimumCrewAmount,SC_maximumCrewAmount]);
};
_amountOfCrew = 0;
_unitPlaced = false;
_vehicleRoles = (typeOf _vehicle) call bis_fnc_vehicleRoles;
{
_unitPlaced = false;
_vehicleRole = _x select 0;
_vehicleSeat = _x select 1;
if(_vehicleRole == "Driver") then
{
_loadOut = ["bandit"] call SC_fnc_selectGear;
_unit = [_group,_spawnLocation,"custom","random","bandit","Vehicle",_loadOut] call DMS_fnc_SpawnAISoldier;
_amountOfCrew = _amountOfCrew + 1;
_unit assignAsDriver _vehicle;
_unit moveInDriver _vehicle;
//_vehicle lockDriver true;
_unit setVariable ["DMS_AssignedVeh",_vehicle];
removeBackpackGlobal _unit;
_unit addBackpackGlobal "B_Parachute";
_unitPlaced = true;
};
if(_vehicleRole == "Turret") then
{
_loadOut = ["bandit"] call SC_fnc_selectGear;
_unit = [_group,_spawnLocation,"custom","random","bandit","Vehicle",_loadOut] call DMS_fnc_SpawnAISoldier;
_amountOfCrew = _amountOfCrew + 1;
_unit moveInTurret [_vehicle, _vehicleSeat];
_unit setVariable ["DMS_AssignedVeh",_vehicle];
removeBackpackGlobal _unit;
_unit addBackpackGlobal "B_Parachute";
_unitPlaced = true;
};
if(_vehicleRole == "CARGO" && _amountOfCrew < _crewRequired) then
{
_loadOut = ["bandit"] call SC_fnc_selectGear;
_unit = [_group,_spawnLocation,"custom","random","bandit","Vehicle",_loadOut] call DMS_fnc_SpawnAISoldier;
_amountOfCrew = _amountOfCrew + 1;
_unit assignAsCargo _vehicle;
_unit moveInCargo _vehicle;
_unit setVariable ["DMS_AssignedVeh",_vehicle];
removeBackpackGlobal _unit;
_unit addBackpackGlobal "B_Parachute";
_unitPlaced = true;
};
if(SC_extendedLogging) then
{
_logDetail = format['[OCCUPATION:Sky] %1 added to %2',_vehicleRole,_vehicle];
[_logDetail] call SC_fnc_log;
};
} forEach _vehicleRoles;
{
_unit = _x;
_unitName = ["bandit"] call SC_fnc_selectName;
if(!isNil "_unitName") then { _unit setName _unitName; };
[_unit] joinSilent grpNull;
[_unit] joinSilent _group;
}foreach units _group;
if(SC_extendedLogging && _unitPlaced) then
{
_logDetail = format['[OCCUPATION:Sky] %1 spawned @ %2',_VehicleClassToUse,_spawnLocation];
[_logDetail] call SC_fnc_log;
};
clearMagazineCargoGlobal _vehicle;
clearWeaponCargoGlobal _vehicle;
clearItemCargoGlobal _vehicle;
_vehicle addMagazineCargoGlobal ["HandGrenade", (random 2)];
_vehicle addItemCargoGlobal ["ItemGPS", (random 1)];
_vehicle addItemCargoGlobal ["Exile_Item_InstaDoc", (random 1)];
_vehicle addItemCargoGlobal ["Exile_Item_PlasticBottleFreshWater", 2 + (random 2)];
_vehicle addItemCargoGlobal ["Exile_Item_EMRE", 2 + (random 2)];
// Add weapons with ammo to the vehicle
_possibleWeapons =
[
"arifle_MXM_Black_F",
"arifle_MXM_F",
"srifle_DMR_01_F",
"srifle_DMR_02_camo_F",
"srifle_DMR_02_F",
"srifle_DMR_02_sniper_F",
"srifle_DMR_03_F",
"srifle_DMR_03_khaki_F",
"srifle_DMR_03_multicam_F",
"srifle_DMR_03_tan_F",
"srifle_DMR_03_woodland_F",
"srifle_DMR_04_F",
"srifle_DMR_04_Tan_F",
"srifle_DMR_05_blk_F",
"srifle_DMR_05_hex_F",
"srifle_DMR_05_tan_f",
"srifle_DMR_06_camo_F",
"srifle_DMR_06_olive_F",
"srifle_EBR_F",
"srifle_GM6_camo_F",
"srifle_GM6_F",
"srifle_LRR_camo_F",
"srifle_LRR_F"
];
_amountOfWeapons = 1 + (random 3);
for "_i" from 1 to _amountOfWeapons do
{
_weaponToAdd = _possibleWeapons call BIS_fnc_selectRandom;
_vehicle addWeaponCargoGlobal [_weaponToAdd,1];
_magazinesToAdd = getArray (configFile >> "CfgWeapons" >> _weaponToAdd >> "magazines");
_vehicle addMagazineCargoGlobal [(_magazinesToAdd select 0),round random 3];
};
[_group, _spawnLocation, _radius] call bis_fnc_taskPatrol;
_group setBehaviour "AWARE";
_group setCombatMode "RED";
_vehicle addEventHandler ["getin", "_this call SC_fnc_claimVehicle;"];
_vehicle addMPEventHandler ["mpkilled", "_this call SC_fnc_vehicleDestroyed;"];
_vehicle addMPEventHandler ["mphit", "_this call SC_fnc_hitAir;"];
_vehicle setVariable ["SC_crewEjected", false,true];
sleep 0.2;
}
else
{
_logDetail = format['[OCCUPATION:Sky] aircraft %1 failed to spawn (check classname is correct)',_VehicleClassToUse];
[_logDetail] call SC_fnc_log;
};
};
};
_logDetail = format['[OCCUPATION:Sky] Running'];
[_logDetail] call SC_fnc_log;

View File

@ -0,0 +1,43 @@
if (!isServer) exitWith {};
_logDetail = format ["[OCCUPATION Static]:: Starting Monitor"];
[_logDetail] call SC_fnc_log;
private["_wp","_wp2","_wp3"];
_middle = worldSize/2;
_spawnCenter = [_middle,_middle,0]; // Centre point for the map
_maxDistance = _middle; // Max radius for the map
_maxAIcount = SC_maxAIcount;
_minFPS = SC_minFPS;
_scaleAI = SC_scaleAI;
_currentPlayerCount = count playableUnits;
if(_currentPlayerCount > _scaleAI) then
{
_maxAIcount = _maxAIcount - (_currentPlayerCount - _scaleAI) ;
};
// Don't spawn additional AI if the server fps is below _minFPS
if(diag_fps < _minFPS) exitWith
{
_logDetail = format ["[OCCUPATION Static]:: Held off spawning more AI as the server FPS is only %1",diag_fps];
[_logDetail] call SC_fnc_log;
};
_aiActive = { !isPlayer _x } count allunits;
if(!(SC_staticIgnoreAICount) && (_aiActive > _maxAIcount)) exitWith
{
_logDetail = format ["[OCCUPATION Static]:: %1 active AI, so not spawning AI this time",_aiActive];
[_logDetail] call SC_fnc_log;
};
// Create the static AI
if(!isNil "SC_staticBandits") then { [SC_staticBandits,"bandit"] call SC_fnc_spawnStatics; };
if(!isNil "SC_staticSurvivors") then { [SC_staticSurvivors,"survivor"] call SC_fnc_spawnStatics; };
_logDetail = "[OCCUPATION Static]: Ended";
[_logDetail] call SC_fnc_log;

View File

@ -0,0 +1,122 @@
_logDetail = format['[OCCUPATION:Traders] starting @ %1',time];
[_logDetail] call SC_fnc_log;
{
private _world = _x select 0;
if (worldName == _world) then
{
private _traderName = _x select 1;
private _traderPos = _x select 2;
private _fileName = _x select 3;
private _createSafezone = _x select 4;
private _file = format ["x\addons\a3_exile_occupation\trader\%1",_fileName];
SC_fnc_createTraders = compile preprocessFileLineNumbers _file;
[_traderPos] call SC_fnc_createTraders;
_traderName setmarkeralpha 0;
private _marker = createMarker [ format [" %1 ", _traderName], _traderPos];
_marker setMarkerText "";
_marker setMarkerShape "ICON";
_marker setMarkerType "ExileTraderZoneIcon";
private _marker1 = createMarker [ format [" %1_1 ", _traderName], _traderPos];
_marker1 setMarkerText "";
_marker1 setMarkerType "ExileTraderZone";
_marker1 setmarkeralpha 0;
if(_createSafezone) then
{
ExileTraderZoneMarkerPositions pushBack _traderPos;
ExileTraderZoneMarkerPositionsAndSize pushBack [_traderPos, 175];
publicVariable "ExileTraderZoneMarkerPositions";
publicVariable "ExileTraderZoneMarkerPositionsAndSize";
};
_logDetail = format['[OCCUPATION:Traders] Created trader base %1 @ %2',_traderName,_traderPos];
[_logDetail] call SC_fnc_log;
// Place the traders randomly
private _traders = [
["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","HubStandingUC_idle3"]],
["Exile_Trader_Vehicle", "Exile_Sign_Vehicles", "AfricanHead_03", ["HubStandingUC_idle2","HubStandingUC_idle1"]],
["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","HubStandingUC_idle2"]],
["Exile_Trader_SpecialOperations", "Exile_Sign_SpecialOperations", "WhiteHead_06", ["HubStandingUC_idle1","HubStandingUC_idle3"]],
["Exile_Trader_Equipment", "Exile_Sign_Equipment", "WhiteHead_15", ["HubStandingUC_idle2","HubStandingUC_idle1"]],
["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];
_group setVariable ["DMS_LockLocality",true];
_group setVariable ["DMS_SpawnedGroup",false];
_group setVariable ["DMS_Group_Side", "survivor"];
enableSentences false;
enableRadio false;
{
private _traderType = _x select 0;
private _traderSign = _x select 1;
private _traderFace = _x select 2;
private _traderAnimation = _x select 3;
// Find nearest relevant sign for the trader
private _nearestSign = nearestObject [_traderPos, _traderSign];
private _signDir = getDir _nearestSign;
_nearestSign setDir _signDir;
private _traderPosition = position _nearestSign;
_traderType createUnit [_traderPosition, _group, "trader = this;"];
trader reveal _nearestSign;
_nearestSign disableCollisionWith trader;
trader disableCollisionWith _nearestSign;
trader attachTo [_nearestSign, [0, -2, -0.6]];
detach trader;
private _traderDirection = _signDir-180;
trader setDir _traderDirection;
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;
removeAllItemsWithMagazines trader;
removeHeadgear trader;
removeUniform trader;
removeVest trader;
removeBackpackGlobal trader;
private _loadOut = ["bandit"] call SC_fnc_selectGear;
trader addWeapon (_loadOut select 0);
trader forceAddUniform (_loadOut select 8);
trader addVest (_loadOut select 9);
trader addBackpack (_loadOut select 10);
trader addHeadgear "H_Cap_blk";
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;
};
} foreach SC_occupyTraderDetails;

View File

@ -0,0 +1,317 @@
if (!isServer) exitWith {};
while {true} do
{
_logDetail = format ["[OCCUPATION:transport]:: Starting @ %1",time];
[_logDetail] call SC_fnc_log;
private["_spawnLocation","_transport","_transportSpeed","_transportType","_wp","_transportBehaviour","_transportWaitingTime","_transportGunner"];
if( count SC_occupyTransportStartPos == 0) then
{
_middle = worldSize/2;
_spawnCenter = [_middle,_middle,0];
SC_occupyTransportStartPos = _spawnCenter;
};
SC_occupyTransportClassToUse = SC_occupyTransportClass call BIS_fnc_selectRandom;
if!(SC_occupyTransportClassToUse isKindOf "LandVehicle" OR SC_occupyTransportClassToUse isKindOf "Air") exitWith
{
_logDetail = format ["[OCCUPATION:transport]:: Only land vehicles or helicopters can be used as public transport"];
[_logDetail] call SC_fnc_log;
};
if(SC_occupyTransportClassToUse isKindOf "LandVehicle") then
{
_transportType = "land";
_logDetail = format ["[OCCUPATION:transport]:: Spawning near map centre %1 @ %2",SC_occupyTransportStartPos,time];
[_logDetail] call SC_fnc_log;
_positionOftransport = [SC_occupyTransportStartPos,0,500,25,0,10,0] call BIS_fnc_findSafePos;
// Get position of nearest roads
_nearRoads = _positionOftransport nearRoads 2000;
_nearestRoad = _nearRoads select 0;
_nearestRoadPos = position (_nearRoads select 0);
_spawnLocation = [_nearestRoadPos select 0, _nearestRoadPos select 1, 0];
_transportSpeed = "LIMITED";
_transportBehaviour = "SAFE";
_transportWaitingTime = 20;
}
else
{
_transportType = "heli";
_spawnLocation = [SC_occupyTransportStartPos select 0, SC_occupyTransportStartPos select 1, 200];
_transportSpeed = "NORMAL";
_transportBehaviour = "CARELESS";
_transportWaitingTime = 120;
};
// Check there are enough waypoints to use
_markerCount = 0;
_fixedWaypoints = [];
SC_occupyTransportFixed = false;
if(_transportType == "heli" && SC_TransportAirFixed) then
{
SC_occupyTransportFixed = true;
_fixedWaypoints = SC_TransportAirWaypoints;
};
if(_transportType == "land" && SC_TransportLandFixed) then
{
SC_occupyTransportFixed = true;
_fixedWaypoints = SC_TransportLandWaypoints;
};
if(SC_occupyTransportFixed) then
{
if(_transportType == "heli") then
{
_markerCount = count SC_TransportAirWaypoints;
}
else
{
_markerCount = count SC_TransportLandWaypoints;
};
}
else
{
{
_markerName = _x;
_markerPos = getMarkerPos _markerName;
if (markerType _markerName == "ExileTraderZone" OR markerType _markerName == "o_unknown") then
{
_markerCount = _markerCount + 1;
};
} forEach allMapMarkers;
};
if(_markerCount < 2) then
{
_logDetail = format ["[OCCUPATION:transport]:: failed to find more than 1 suitable waypoint @ %1",time];
[_logDetail] call SC_fnc_log;
}
else
{
// Create the driver/pilot and ensure he doest react to gunfire or being shot at.
_group = createGroup resistance;
_group setCombatMode "BLUE";
_group setVariable ["DMS_AllowFreezing",false,true];
// Spawn Vehicle
if(_transportType == "heli") then
{
_transport = createVehicle [SC_occupyTransportClassToUse, _spawnLocation, [], 0, "NONE"];
_transport setVehiclePosition [_spawnLocation, [], 0, "FLY"];
_transport setVariable ["vehicleID", _spawnLocation, true];
_transport setFuel 1;
_transport setDamage 0;
_transport engineOn true;
_transport flyInHeight 500;
}
else
{
_transport = createVehicle [SC_occupyTransportClassToUse, _spawnLocation, [], 0, "CAN_COLLIDE"];
};
sleep 0.2;
if(isNull _transport) exitWith
{
_logDetail = format ["[OCCUPATION:transport]:: %1 failed to spawn, check it is a valid vehicle class name",SC_occupyTransportClassToUse];
[_logDetail] call SC_fnc_log;
};
if(SC_secureTransport) then
{
_transport addEventHandler ["handleDamage", { false }];
_transport allowdamage false;
};
if( _transportType == "land" && SC_colourTransport) then
{
//_transport setObjectTextureGlobal [0,"#(argb,8,8,3)color(0.518,0.519,0.7,0.2)"];
};
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)"];
_transport setObjectTextureGlobal [2,"#(argb,8,8,3)color(0.518,0.519,0.7,0.2)"];
};
_group addVehicle _transport;
_transport enableCopilot false;
_transportDriver = _group createUnit [DMS_AI_Classname, _spawnLocation, [], 0,"FORM"];
removeGoggles _transportDriver;
_transportDriver forceAddUniform "U_IG_Guerilla3_1";
_transportDriver addVest "V_TacVest_blk_POLICE";
_transportDriver addHeadgear "H_Cap_blk";
removeBackpackGlobal _transportDriver;
_transportDriver addBackpackGlobal "B_Parachute";
_transportDriver disableAI 'AUTOTARGET';
_transportDriver disableAI 'TARGET';
_transportDriver disableAI 'SUPPRESSION';
_transportDriver setCaptive true;
_transportDriver assignasdriver _transport;
_transportDriver moveInDriver _transport;
[_transportDriver] orderGetin true;
_transport lockDriver true;
_transport lockTurret [[0],true];
if(SC_secureTransport) then
{
_transportDriver allowDamage false;
};
SC_transportArray = SC_transportArray + [_transport];
_transport setVariable ["SC_assignedDriver", _transportDriver,true];
_transport setVariable ["SC_transport", true,true];
_transport setVariable ["SC_vehicleSpawnLocation", _spawnLocation,true];
_SC_vehicleSpawnLocation = [_spawnLocation,2000,worldName];
_transport setVariable ["SC_vehicleSpawnLocation", _SC_vehicleSpawnLocation,true];
_transportDriver setVariable ["DMS_AssignedVeh",_transport];
_transportDriver setVariable ["SC_lastSpoke", time, true];
_transport addEventHandler ["getin", "_this call SC_fnc_getOnBus;"];
_transport addEventHandler ["getout", "_this call SC_fnc_getOffBus;"];
clearBackpackCargoGlobal _transport;
clearItemCargoGlobal _transport;
clearMagazineCargoGlobal _transport;
clearWeaponCargoGlobal _transport;
_transport setVariable ["ExileIsPersistent", false];
_transport setVariable["vehPos",_spawnLocation,true];
_transport setFuel 1;
_logDetail = format['[OCCUPATION:transport] Vehicle %1 spawned @ %2',SC_occupyTransportClassToUse,_spawnLocation];
[_logDetail] call SC_fnc_log;
_logDetail = format ["[OCCUPATION:transport]:: Found %1 markers to use as pickup points @ %2",_markerCount,time];
[_logDetail] call SC_fnc_log;
_textures = getObjectTextures _transport;
_logDetail = format ["[OCCUPATION:transport]:: textures for vehicle are: %1",_textures];
[_logDetail] call SC_fnc_log;
_markerCount = 0;
if(SC_occupyTransportFixed) then
{
{
_markerPos = _x;
_wp = _group addWaypoint [_markerPos, 100];
_wp setWaypointType "MOVE";
_wp setWaypointBehaviour _transportBehaviour;
_wp setWaypointspeed _transportSpeed;
_wp = _group addWaypoint [_markerPos, 25];
_wp setWaypointType "TR UNLOAD";
_wp setWaypointBehaviour "SAFE";
_wp setWaypointspeed "LIMITED";
_wp setWaypointTimeout [_transportWaitingTime,_transportWaitingTime,_transportWaitingTime];
_markerCount = _markerCount + 1;
} forEach _fixedWaypoints;
}
else
{
{
_markerName = _x;
_markerPos = getMarkerPos _markerName;
if (markerType _markerName == "ExileTraderZone" OR markerType _markerName == "o_unknown") then
{
_wp = _group addWaypoint [_markerPos, 100];
_wp setWaypointType "MOVE";
_wp setWaypointBehaviour _transportBehaviour;
_wp setWaypointspeed _transportSpeed;
_wp = _group addWaypoint [_markerPos, 25];
_wp setWaypointType "TR UNLOAD";
_wp setWaypointBehaviour "SAFE";
_wp setWaypointspeed "LIMITED";
_wp setWaypointTimeout [_transportWaitingTime,_transportWaitingTime,_transportWaitingTime];
_markerCount = _markerCount + 1;
};
} forEach allMapMarkers;
};
// Add a final CYCLE
_wp = _group addWaypoint [_spawnLocation, 25];
_wp setWaypointType "CYCLE";
_wp setWaypointBehaviour _transportBehaviour;
_wp setWaypointspeed _transportSpeed;
_wp setWaypointTimeout [_transportWaitingTime,_transportWaitingTime,_transportWaitingTime];
_transportPos = position _transport;
_mk = createMarker ["transportLocation",_transportPos];
if(_transportType == "land") then
{
"transportLocation" setMarkerType "loc_BusStop";
"transportLocation" setMarkerText "Occupation Public Bus";
}
else
{
"transportLocation" setMarkerType "c_air";
"transportLocation" setMarkerText "Occupation Airlines";
"transportLocation" setMarkerColor "ColorBLUFOR";
};
diag_log format['[OCCUPATION:transport] Running'];
_transportDriver = _transport getVariable "SC_assignedDriver";
// Make _transportDriver stop when players near him.
while {true} do
{
_pos = position _transport;
_mk setMarkerPos _pos;
_nearPlayers = (count (_pos nearEntities [['Exile_Unit_Player'],25]));
if (_nearPlayers >= 1 && _transportType == "land") then
{
uiSleep 0.5;
_transport setFuel 1;
_transport setVehicleAmmo 1;
_transportDriver disableAI "MOVE";
uiSleep 3;
}
else
{
_transport setFuel 1;
_transport setVehicleAmmo 1;
uiSleep 3;
_transportDriver enableAI "MOVE";
};
if(!Alive _transportDriver) exitWith {};
uiSleep 5;
};
deleteMarker _mk;
_transport setDamage 1;
_logDetail = format ["[OCCUPATION:transport]:: Transport destroyed @ %1",time];
[_logDetail] call SC_fnc_log;
};
if(_markerCount < 2) exitWith {};
// Spawn another heli
uiSleep 15; // delay the start
};

View File

@ -0,0 +1,352 @@
if (!isServer) exitWith {};
_logDetail = format['[OCCUPATION:Vehicle] Started'];
[_logDetail] call SC_fnc_log;
// set the default side for bandit AI
_side = "bandit";
// more than _scaleAI players on the server and the max AI count drops per additional player
_currentPlayerCount = count playableUnits;
_maxAIcount = SC_maxAIcount;
if(_currentPlayerCount > SC_scaleAI) then
{
_maxAIcount = _maxAIcount - (_currentPlayerCount - SC_scaleAI) ;
};
// Don't spawn additional AI if the server fps is below _minFPS
if(diag_fps < SC_minFPS) exitWith
{
_logDetail = format ["[OCCUPATION:Vehicle]:: Held off spawning more AI as the server FPS is only %1",diag_fps];
[_logDetail] call SC_fnc_log;
};
_aiActive = { !isPlayer _x } count allunits;
if((_aiActive > _maxAIcount) && !SC_occupyLandVehicleIgnoreCount) exitWith
{
_logDetail = format ["[OCCUPATION:Vehicle]:: %1 active AI, so not spawning AI this time",_aiActive];
[_logDetail] call SC_fnc_log;
};
SC_liveVehicles = count(SC_liveVehiclesArray);
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;
};
_vehiclesToSpawn = (SC_maxNumberofVehicles - SC_liveVehicles);
_middle = worldSize/2;
_spawnCenter = [_middle,_middle,0];
_maxDistance = _middle;
if(_vehiclesToSpawn > 0) then
{
if(SC_occupyVehicleSurvivors) then
{
// decide which side to spawn
_sideToSpawn = random 100;
if(_sideToSpawn <= SC_SurvivorsChance) then
{
_side = "survivor";
};
};
_useLaunchers = DMS_ai_use_launchers;
for "_i" from 1 to _vehiclesToSpawn do
{
if (_vehiclesToSpawn > 0) then
{
private["_group"];
_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;
_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];
_group = createGroup SC_BanditSide;
if(_side == "survivor") then
{
deleteGroup _group;
_group = createGroup SC_SurvivorSide;
};
_group setVariable ["DMS_AllowFreezing",false];
_group setVariable ["DMS_LockLocality",false];
_group setVariable ["DMS_SpawnedGroup",true];
_group setVariable ["DMS_Group_Side", _side];
_VehicleClass = SC_VehicleClassToUse call BIS_fnc_selectRandom;
_VehicleClassToUse = _VehicleClass select 0;
vehicleOkToSpawn = false;
// Percentage chance to spawn a rare vehicle
_rareChance = round (random 100);
if(_rareChance >= 90) then
{
while{!vehicleOkToSpawn} do
{
if (_side == "survivor") then {
_VehicleClass = SC_SurvivorVehicleClassToUseRare call BIS_fnc_selectRandom;
_VehicleClassToUse = _VehicleClass select 0;
_VehicleClassAllowedCount = _VehicleClass select 1;
_vehicleCount = 0;
{
if(_VehicleClassToUse == typeOf _x) then { _vehicleCount = _vehicleCount + 1; };
}forEach SC_liveVehiclesArray;
if(_vehicleCount < _VehicleClassAllowedCount OR _VehicleClassAllowedCount == 0) then { vehicleOkToSpawn = true; };
} else {
_VehicleClass = SC_VehicleClassToUseRare call BIS_fnc_selectRandom;
_VehicleClassToUse = _VehicleClass select 0;
_VehicleClassAllowedCount = _VehicleClass select 1;
_vehicleCount = 0;
{
if(_VehicleClassToUse == typeOf _x) then { _vehicleCount = _vehicleCount + 1; };
}forEach SC_liveVehiclesArray;
if(_vehicleCount < _VehicleClassAllowedCount OR _VehicleClassAllowedCount == 0) then { vehicleOkToSpawn = true; };
};
};
}
else
{
while{!vehicleOkToSpawn} do
{
if (_side == "survivor") then {
_VehicleClass = SC_SurvivorVehicleClassToUse call BIS_fnc_selectRandom;
_VehicleClassToUse = _VehicleClass select 0;
_VehicleClassAllowedCount = _VehicleClass select 1;
_vehicleCount = 0;
{
if(_VehicleClassToUse == typeOf _x) then { _vehicleCount = _vehicleCount + 1; };
}forEach SC_liveVehiclesArray;
if(_vehicleCount < _VehicleClassAllowedCount OR _VehicleClassAllowedCount == 0) then { vehicleOkToSpawn = true; };
} else {
_VehicleClass = SC_VehicleClassToUse call BIS_fnc_selectRandom;
_VehicleClassToUse = _VehicleClass select 0;
_VehicleClassAllowedCount = _VehicleClass select 1;
_vehicleCount = 0;
{
if(_VehicleClassToUse == typeOf _x) then { _vehicleCount = _vehicleCount + 1; };
}forEach SC_liveVehiclesArray;
if(_vehicleCount < _VehicleClassAllowedCount OR _VehicleClassAllowedCount == 0) then { vehicleOkToSpawn = true; };
};
};
};
_vehicle = createVehicle [_VehicleClassToUse, _spawnLocation, [], 0, "NONE"];
if(!isNull _vehicle) then
{
_group addVehicle _vehicle;
SC_liveVehiclesArray = SC_liveVehiclesArray + [_vehicle];
_vehicle setVariable ["SC_repairStatus",false,true];
_vehicle setVariable ["vehPos",_spawnLocation,true];
_vehicle setVariable ["vehClass",_VehicleClassToUse,true];
_SC_vehicleSpawnLocation = [_spawnLocation,_radius,worldName];
_vehicle setVariable ["SC_vehicleSpawnLocation", _SC_vehicleSpawnLocation,true];
_vehicle setFuel 1;
_vehicle engineOn true;
if(SC_occupyVehiclesLocked) then
{
_vehicle lock 3;
_vehicle setVehicleLock "LOCKED";
_vehicle setVariable ["ExileIsLocked", 1, true];
}
else
{
_vehicle lock 0;
_vehicle setVehicleLock "UNLOCKED";
_vehicle setVariable ["ExileIsLocked", 0, true];
};
_vehicle setVariable ["ExileIsPersistent", false];
_vehicle setSpeedMode "LIMITED";
_vehicle limitSpeed 60;
_vehicle action ["LightOn", _vehicle];
_vehicle addEventHandler ["getin", "_this call SC_fnc_getIn;"];
_vehicle addEventHandler ["getout", "_this call SC_fnc_getOut;"];
_vehicle addMPEventHandler ["mpkilled", "_this call SC_fnc_vehicleDestroyed;"];
_vehicle addMPEventHandler ["mphit", "_this call SC_fnc_hitLand;"];
// Calculate the number of seats in the vehicle and fill the required amount
_crewRequired = SC_minimumCrewAmount;
if(SC_maximumCrewAmount > SC_minimumCrewAmount) then
{
_crewRequired = ceil(random[SC_minimumCrewAmount,SC_maximumCrewAmount-SC_minimumCrewAmount,SC_maximumCrewAmount]);
};
_amountOfCrew = 0;
_unitPlaced = false;
_vehicleRoles = (typeOf _vehicle) call bis_fnc_vehicleRoles;
{
_unitPlaced = false;
_vehicleRole = _x select 0;
_vehicleSeat = _x select 1;
if(_vehicleRole == "Driver") then
{
_loadOut = [_side] call SC_fnc_selectGear;
_unit = [_group,_spawnLocation,"custom","random",_side,"Vehicle",_loadOut] call DMS_fnc_SpawnAISoldier;
_amountOfCrew = _amountOfCrew + 1;
_unit disableAI "FSM";
_unit disableAI "MOVE";
[_side,_unit] call SC_fnc_addMarker;
_unit removeAllMPEventHandlers "mphit";
_unit removeAllMPEventHandlers "mpkilled";
_unit disableAI "TARGET";
_unit disableAI "AUTOTARGET";
_unit disableAI "AUTOCOMBAT";
_unit disableAI "COVER";
_unit disableAI "SUPPRESSION";
_unit assignAsDriver _vehicle;
_unit moveInDriver _vehicle;
_unit setVariable ["DMS_AssignedVeh",_vehicle];
_unit setVariable ["SC_drivenVehicle", _vehicle,true];
_unit addMPEventHandler ["mpkilled", "_this call SC_fnc_driverKilled;"];
_vehicle setVariable ["SC_assignedDriver", _unit,true];
};
if(_vehicleRole == "Turret" && _amountOfCrew < _crewRequired) then
{
_loadOut = [_side] call SC_fnc_selectGear;
_unit = [_group,_spawnLocation,"custom","random",_side,"Vehicle",_loadOut] call DMS_fnc_SpawnAISoldier;
_amountOfCrew = _amountOfCrew + 1;
[_side,_unit] call SC_fnc_addMarker;
_unit moveInTurret [_vehicle, _vehicleSeat];
_unit setVariable ["DMS_AssignedVeh",_vehicle];
_unit addMPEventHandler ["mpkilled", "_this call SC_fnc_unitMPKilled;"];
_unitPlaced = true;
};
if(_vehicleRole == "CARGO" && _amountOfCrew < _crewRequired) then
{
_loadOut = [_side] call SC_fnc_selectGear;
_unit = [_group,_spawnLocation,"custom","random",_side,"Vehicle",_loadOut] call DMS_fnc_SpawnAISoldier;
_amountOfCrew = _amountOfCrew + 1;
[_side,_unit] call SC_fnc_addMarker;
_unit assignAsCargo _vehicle;
_unit moveInCargo _vehicle;
_unit setVariable ["DMS_AssignedVeh",_vehicle];
_unit addMPEventHandler ["mpkilled", "_this call SC_fnc_unitMPKilled;"];
_unitPlaced = true;
};
if(SC_extendedLogging && _unitPlaced) then
{
_logDetail = format['[OCCUPATION:Vehicle] %1 %2 added to vehicle %3',_side,_vehicleRole,_vehicle];
[_logDetail] call SC_fnc_log;
};
if(_amountOfCrew == _crewRequired) exitWith{};
} forEach _vehicleRoles;
// Get the AI to shut the fuck up :)
enableSentences false;
enableRadio false;
_logDetail = format['[OCCUPATION:Vehicle] %3 vehicle %1 spawned @ %2',_VehicleClassToUse,_spawnLocation,_side];
[_logDetail] call SC_fnc_log;
sleep 2;
{
_unit = _x;
_unit enableAI "FSM";
_unit enableAI "MOVE";
_unit enableAI "TARGET";
_unit enableAI "AUTOTARGET";
_unit enableAI "AUTOCOMBAT";
_unit allowCrewInImmobile false;
reload _unit;
_unitName = [_side] call SC_fnc_selectName;
if(!isNil "_unitName") then { _unit setName _unitName; };
}forEach units _group;
[_group,false] call DMS_fnc_FreezeToggle;
[units _group] orderGetIn true;
sleep 10;
[_group, _spawnLocation, 2000] call bis_fnc_taskPatrol;
_group setBehaviour "AWARE";
_group setCombatMode "RED";
sleep 0.2;
clearMagazineCargoGlobal _vehicle;
clearWeaponCargoGlobal _vehicle;
clearItemCargoGlobal _vehicle;
_vehicle addMagazineCargoGlobal ["HandGrenade", (random 2)];
_vehicle addItemCargoGlobal ["ItemGPS", (random 1)];
_vehicle addItemCargoGlobal ["Exile_Item_InstaDoc", (random 1)];
_vehicle addItemCargoGlobal ["Exile_Item_PlasticBottleFreshWater", 2 + (random 2)];
_vehicle addItemCargoGlobal ["Exile_Item_EMRE", 2 + (random 2)];
// Add weapons with ammo to the vehicle
_possibleWeapons =
[
"arifle_MXM_Black_F",
"arifle_MXM_F",
"arifle_MX_SW_Black_F",
"arifle_MX_SW_F",
"LMG_Mk200_F",
"LMG_Zafir_F"
];
_amountOfWeapons = 1 + (random 3);
for "_i" from 1 to _amountOfWeapons do
{
_weaponToAdd = _possibleWeapons call BIS_fnc_selectRandom;
_vehicle addWeaponCargoGlobal [_weaponToAdd,1];
_magazinesToAdd = getArray (configFile >> "CfgWeapons" >> _weaponToAdd >> "magazines");
_vehicle addMagazineCargoGlobal [(_magazinesToAdd select 0),round random 3];
};
}
else
{
_logDetail = format['[OCCUPATION:Vehicle] vehicle %1 failed to spawn (check classname is correct)',_VehicleClassToUse];
[_logDetail] call SC_fnc_log;
};
};
};
};
SC_liveVehicles = count(SC_liveVehiclesArray);
_logDetail = format['[OCCUPATION:Vehicle] End check %1 currently active (max %2) @ %3',SC_liveVehicles,SC_maxNumberofVehicles,time];
[_logDetail] call SC_fnc_log;

View File

@ -0,0 +1,135 @@
if (!isServer) exitWith {};
if(SC_occupyTraders) then
{
call compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\occupationTraders.sqf";
};
if(SC_processReporter) then
{
_logDetail = format ["[processReporter]:: Initialised at %1",time];
[_logDetail] call SC_fnc_log;
fnc_processReporter = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\extras\processReporter.sqf";
[60, fnc_processReporter, [], true] call ExileServer_system_thread_addTask;
};
_logDetail = format ["[OCCUPATION]:: Detected DMS version %1",DMS_Version];
[_logDetail] call SC_fnc_log;
_logDetail = format ["[OCCUPATION]:: Occupation %2 Adding modules to Exile system thread manager at %1",time,SC_occupationVersion];
[_logDetail] call SC_fnc_log;
if(SC_occupyLootCratesMarkers) then
{
uiSleep 15; // delay the start
fnc_occupationDeleteMapMarker = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\deleteMapMarkers.sqf";
[10, fnc_occupationDeleteMapMarker, [], true] call ExileServer_system_thread_addTask;
};
if(SC_debug) then { SC_refreshTime = 60; }else{ SC_refreshTime = 300; };
// Add selected occupation scripts to Exile Threading System
if (SC_fastNights) then
{
fnc_checkMultiplier = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\occupationFastNights.sqf";
[60, fnc_checkMultiplier, [], true] call ExileServer_system_thread_addTask;
};
if(SC_occupyMilitary) then
{
uiSleep 15; // delay the start
// Create a static list of military buildings rather than scanning every time we want to spawn military guards
_logDetail = format ["[OCCUPATION Military]:: Starting building scan @ ",time];
[_logDetail] call SC_fnc_log;
_middle = worldSize/2;
_areaToScan = [_middle,_middle,0]; // Centre point for the map
_maxDistance = 20000; // Max radius for the map
SC_completeMilitaryList = [];
{
_currentBuilding = _x;
_foundBuilding = _areaToScan nearObjects [_currentBuilding, _maxDistance];
{
_pos = position _x;
SC_completeMilitaryList pushBack _foundBuilding;
_logDetail = format ["[OCCUPATION Military]:: Added building: %1 (object: %3) found at location: %2 @ ",_currentBuilding,_pos,_x];
[_logDetail] call SC_fnc_log;
}forEach _foundBuilding;
}forEach SC_buildings;
_logDetail = format ["[OCCUPATION Military]:: Ended building scan @ ",time];
[_logDetail] call SC_fnc_log;
fnc_occupationMilitary = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\occupationMilitary.sqf";
[SC_refreshTime, fnc_occupationMilitary, [], true] call ExileServer_system_thread_addTask;
};
if(SC_occupyVehicle) then
{
uiSleep 15; // delay the start
fnc_occupationVehicle = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\occupationVehicle.sqf";
[SC_refreshTime, fnc_occupationVehicle, [], true] call ExileServer_system_thread_addTask;
};
if(SC_occupyRandomSpawn) then
{
uiSleep 15; // delay the start
fnc_occupyRandomSpawn = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\occupationRandomSpawn.sqf";
[60, fnc_occupyRandomSpawn, [], true] call ExileServer_system_thread_addTask;
};
if(SC_occupyLootCrates) then
{
uiSleep 15; // delay the start
call compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\occupationLootCrates.sqf";
};
if(SC_occupyHeliCrashes) then
{
uiSleep 15; // delay the start
call compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\occupationHeliCrashes.sqf";
};
if(SC_occupyStatic) then
{
uiSleep 15; // delay the start
fnc_occupationStatic = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\occupationStatic.sqf";
[SC_refreshTime, fnc_occupationStatic, [], true] call ExileServer_system_thread_addTask;
};
if(SC_occupySky) then
{
uiSleep 15; // delay the start
fnc_occupationSky = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\occupationSky.sqf";
[SC_refreshTime, fnc_occupationSky, [], true] call ExileServer_system_thread_addTask;
};
if(SC_occupySea) then
{
uiSleep 15; // delay the start
fnc_occupationSea = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\occupationSea.sqf";
[SC_refreshTime, fnc_occupationSea, [], true] call ExileServer_system_thread_addTask;
};
if(SC_occupyPlaces) then
{
uiSleep 15; // delay the start
fnc_occupationPlaces = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\occupationPlaces.sqf";
[SC_refreshTime, fnc_occupationPlaces, [], true] call ExileServer_system_thread_addTask;
};
if(SC_occupyTransport) then
{
uiSleep 15; // delay the start
[] execVM "\x\addons\a3_exile_occupation\scripts\occupationTransport.sqf";
};
uiSleep 15; // delay the start
fnc_occupationMonitor = compile preprocessFileLineNumbers "\x\addons\a3_exile_occupation\scripts\occupationMonitor.sqf";
[SC_refreshTime, fnc_occupationMonitor, [], true] call ExileServer_system_thread_addTask;
_logDetail = format ["[OCCUPATION]:: threads added at %1",time];
[_logDetail] call SC_fnc_log;

View File

@ -0,0 +1,103 @@
private _traderPosition = _this select 0;
private _objects = [
["Land_ToiletBox_F",[7.94287,-11.9932,0],269.387,[false,false]],
["Land_Cargo_Patrol_V3_F",[-11.478,14.2637,0],314.038,[false,false]],
["Land_HBarrier_5_F",[1.7666,-12.8599,0],180.593,[false,false]],
["Land_HBarrier_5_F",[6.42578,-14.8511,0],230.768,[false,false]],
["Land_HBarrier_5_F",[-15.542,-12.896,0],231.635,[false,false]],
["Land_HBarrier_5_F",[-18.415,-2.6499,0],240.934,[false,false]],
["Land_HBarrier_5_F",[-18.5845,2.50732,0],109.927,[false,false]],
["Land_HBarrier_5_F",[-10.5596,20.0483,0],1.98476,[false,false]],
["Land_HBarrier_5_F",[13.9531,16.1758,0],21.7147,[false,false]],
["Land_HBarrier_5_F",[19.2212,15.5854,0],354.618,[false,false]],
["Land_HBarrier_5_F",[-17.2637,13.5308,0],93.7194,[false,false]],
["Land_HBarrier_5_F",[-17.4771,7.89014,0],91.2719,[false,false]],
["Land_HBarrier_5_F",[-15.1694,18.2041,0],133.912,[false,false]],
["Land_HBarrier_5_F",[-5.84326,18.0454,0],43.2557,[false,false]],
["Land_HBarrier_5_F",[22.5625,1.1167,0],88.7307,[false,false]],
["Land_HBarrier_5_F",[24.1938,-3.44141,0],50.8217,[false,false]],
["Land_HBarrier_5_F",[26.0176,-8.41504,0],88.1428,[false,false]],
["Land_HBarrier_5_F",[25.3989,-13.9629,0],108.365,[false,false]],
["Land_HBarrier_5_F",[9.27393,15.4619,0],324.922,[false,false]],
["Land_HBarrier_5_F",[-0.294922,-9.28955,0],271.403,[false,false]],
["Land_HBarrier_5_F",[-1.34229,-4.09619,0],242.879,[false,false]],
["Land_HBarrier_5_F",[10.7861,-17.0801,0],177.693,[false,false]],
["Land_HBarrier_5_F",[16.2275,-16.793,0],177.693,[false,false]],
["Land_HBarrier_5_F",[21.8232,-16.5684,0],177.693,[false,false]],
["Land_HBarrier_5_F",[23.7451,13.627,0],48.1373,[false,false]],
["Land_HBarrier_5_F",[30.6641,-0.37793,0],231.211,[false,false]],
["Land_HBarrier_5_F",[29.1577,4.16553,0],271.273,[false,false]],
["Land_HBarrier_5_F",[29.2173,9.62793,0],270.843,[false,false]],
["Land_HBarrier_5_F",[-1.12988,15.0679,0],23.8596,[false,false]],
["Land_HBarrier_5_F",[4.00098,14.042,0],179.263,[false,false]],
["Land_HBarrier_5_F",[-2.38965,0.879395,0],273.522,[false,false]],
["Land_PortableLight_double_F",[-14.084,16.8789,0],311.55,[false,false]],
["Land_Pallets_stack_F",[-11.4922,-14.6489,0],107.837,[false,false]],
["Land_WaterTank_F",[1.14648,3.10059,0],139.599,[false,false]],
["Land_HBarrier_5_F",[-17.1592,-7.78418,0],270.637,[false,false]],
["Land_PaperBox_closed_F",[-8.60693,9.21143,0],20.4457,[false,false]],
["Land_ToiletBox_F",[7.92529,-10.52,0],265.835,[false,false]],
["Land_HBarrier_5_F",[20.46,5.09814,0.00541687],36.5701,[false,false]],
["Land_HBarrier_5_F",[0.0288086,5.08154,-0.00163269],329.047,[false,false]],
["Land_HBarrier_5_F",[5.16797,6.6377,0],357.498,[false,false]],
["Land_HBarrier_5_F",[29.4736,-8.73291,0],177.704,[false,false]],
["Land_PaperBox_open_empty_F",[-6.71045,10.3428,0],166.944,[false,false]],
["Land_HBarrier_3_F",[26.8101,11.7979,0],180.593,[false,false]],
["Land_GarbageBags_F",[18.8657,-20.061,0],158.176,[false,false]],
["Land_BarrelSand_grey_F",[2.88428,4.87354,0],200.404,[false,false]],
["Land_BarrelEmpty_F",[2.84131,4.04346,0],143.945,[false,false]],
["Land_HBarrier_5_F",[-12.1118,-17.1772,0],231.635,[false,false]],
["Land_HBarrier_5_F",[-2.86719,-14.9609,0],143.23,[false,false]],
["Exile_Sign_Aircraft",[-19.5864,-8.28271,0],268.147+180,[false,false]],
["Exile_Sign_AircraftCustoms",[-20.5908,-3.13135,0],238.791+180,[false,false]],
["Land_Wreck_UAZ_F",[13.4033,-20.8965,0],0,[false,false]],
["Land_Wreck_Van_F",[1.69043,-16.3159,0],280.694,[false,false]],
["Exile_Sign_WasteDump",[1.48242,-18.835,0],194.44+180,[false,false]],
["Land_MobileScafolding_01_F",[-14.3579,-9.49219,0],266.613,[false,false]],
["Land_Bricks_V3_F",[-13.8857,-10.3193,0],0,[false,false]],
["Land_Bricks_V2_F",[-13.8774,-8.83252,0],251.086,[false,false]],
["Land_Pipes_large_F",[-13.0952,-5.57764,0],142.9,[false,false]],
["Land_CinderBlocks_F",[-11.8711,-6.85889,0],0,[false,false]],
["Exile_Sign_Equipment",[0.791992,-3.45117,0],60.8907+180,[false,false]],
["Exile_Sign_Food",[11.686,14.8994,0],169.855+180,[false,false]],
["Land_Sacks_goods_F",[14.4482,13.4688,0],0,[false,false]],
["Land_Sacks_heap_F",[9.51367,13.4736,0],0,[false,false]],
["Land_Sack_F",[10.1323,14.4917,0],0,[false,false]],
["Land_Sack_F",[13.2036,14.8828,0],0,[false,false]],
["Land_Sack_F",[11.6104,15.5171,-7.62939e-006],0,[false,false]],
["Land_CampingTable_small_F",[13.02,12.8506,0],151.583,[false,false]],
["Land_HelipadSquare_F",[-51.4351,-17.4492,0],254.508,[false,false]],
["Land_HelipadSquare_F",[-54.355,10.085,0],279.474,[false,false]],
["Exile_Sign_Vehicles",[-20.0254,13.8496,0],270.592+180,[false,false]],
["Exile_Sign_VehicleCustoms",[-20.4077,8.22119,0],269.223+180,[false,false]],
["Land_EngineCrane_01_F",[-21.2827,16.4844,0],229.319,[false,false]],
["Land_Wreck_CarDismantled_F",[-25.0684,16.6201,0],217.286,[false,false]],
["Fort_Crate_wood",[-14.8433,9.9502,0],165.397,[false,false]],
["Fort_Crate_wood",[-13.4341,9.94727,0],0,[false,false]],
["Fort_Crate_wood",[-15.4321,8.37939,0],186.337,[false,false]],
["AmmoCrates_NoInteractive_Medium",[-16.1963,2.87842,0],0,[false,false]],
["AmmoCrates_NoInteractive_Small",[-14.5718,2.41602,0],25.3138,[false,false]],
["AmmoCrates_NoInteractive_Large",[-16.1646,0.998047,0],0,[false,false]],
["Exile_Sign_Armory",[-15.979,-2.38965,0],62.2217+180,[false,false]],
["Exile_Sign_SpecialOperations",[-15.2148,5.38965,0],100.739+180,[false,false]],
["Exile_Sign_Hardware",[-13.0625,-12.6558,0],54.8824+180,[false,false]],
["Land_Misc_GContainer_Big",[8.04639,-21.145,0],178.924,[false,false]],
["Garbage_container",[-3.24854,-6.56543,0],176.687,[false,false]],
["Exile_Sign_Office",[18.5098,-8.38574,0],336.059+180,[false,false]],
["Land_WoodenTable_large_F",[15.7568,-9.04541,0],80.9305,[false,false]],
["Land_CampingChair_V1_F",[13.5264,-8.69238,0],35.5015,[false,false]],
["Land_CampingChair_V1_F",[15.3789,-7.51318,0],166.758,[false,false]]
];
private _center = _traderPosition;
{
private _object = createVehicle [(_x select 0), [0,0,0], [], 0, "CAN_COLLIDE"];
_object setDir (_x select 2);
_object setPos (_center vectorAdd (_x select 1));
_object enableSimulationGlobal false;
_object allowDamage false;
//private _newPos = getPos _object;
//_object setPos _newPos;
} forEach _objects;

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
exile_server_config

File diff suppressed because it is too large Load Diff

45
@ExileServer/basic.cfg Normal file
View File

@ -0,0 +1,45 @@
//
// Exile Mod basic.cfg Settings
//
// This file has been tuned for a box running only one Arma 3 server on a
// 1 GBit/s pipe with 100 slots
//
// See https://community.bistudio.com/wiki/basic.cfg
//
///////////////////////////////////////////////////////////////////////////////
// Default Options
///////////////////////////////////////////////////////////////////////////////
language = "English";
adapter = -1;
3D_Performance = 1.000000;
Resolution_W = 800;
Resolution_H = 600;
Resolution_Bpp = 32;
///////////////////////////////////////////////////////////////////////////////
// Bandwidth Tuning
//
// Be sure to adjust this to your server settings!
// This example is for 1GBit/s pipe
///////////////////////////////////////////////////////////////////////////////
// 100MB * 1024 * 1024 = 104857600
MinBandwidth = 104857600;
// Do NOT set this too high or your Arma server will simulate ego-ddos
// 600MB * 1024 * 1024 = 629145600
MaxBandwidth = 629145600;
///////////////////////////////////////////////////////////////////////////////
// Network Tuning
//
// Usually something we developers set. Only change these if you really know
// what you are doing. Do something wrong here and your sever will burn in hell
// and cause massive desych.
///////////////////////////////////////////////////////////////////////////////
MaxMsgSend = 256;
MaxSizeGuaranteed = 512;
MaxSizeNonguaranteed = 256;
MinErrorToSend = 0.004;
MinErrorToSendNear = 0.03;
MaxCustomFileSize = 0;

44
@ExileServer/config.cfg Normal file
View File

@ -0,0 +1,44 @@
hostname = "Z's Exile (1.0.3|1.70)";
password = "joejer";
passwordAdmin = "Ilovegina1";
serverCommandPassword = "Ilovegina";
logFile = "server.log";
verifySignatures = 1; // Do NOT use verifySignatures=2! It costs too many FPS
BattlEye = 1;
requiredBuild = 141764; // 1.70 stable
allowedLoadFileExtensions[] = {:};
allowedPreprocessFileExtensions[] = {"sqf"};
allowedHTMLLoadExtensions[] = {"html"};
motdInterval = 5;
maxPlayers = 100;
voteMissionPlayers = 200;
voteThreshold = 200;
allowedVoteCmds[] = {};
allowedVotedAdminCmds[] = {};
disableVoN = 0;
vonCodecQuality = 30;
persistent = 1;
kickDuplicate = 1;
equalModRequired = 0;
kickClientsOnSlowNetwork = 0;
timeStampFormat = "short";
onUserConnected = "";
onUserDisconnected = "";
doubleIdDetected = "";
onUnsignedData = "kick (_this select 0)";
onHackedData = "kick (_this select 0)";
onDifferentData = "kick (_this select 0)";
motd[] = {"Welcome to Z's Exile", "Enjoy your stay!" };
class Missions
{
class Exile
{
template = Exile.Altis; // Exile.Namalsk, Exile.Altis, Exile.Tanoa
// do NOT use custom difficulties!
// Use either ExileRegular or ExileHardcore
// or you will break Exile!
difficulty = "ExileRegular";
};
};

View File

@ -0,0 +1,696 @@
[Default]
Version = 12
Number of Inputs = 0
Sanitize Input Value Check = false
Sanitize Output Value Check = false
Prepared Statement Cache = true
Return InsertID = false
Strip = true
Strip Chars Action = STRIP
Strip Chars = \/\|;{}<>\'
Strip Custom Chars = \/\|;{}<>\'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Account related queries
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[isKnownAccount]
SQL1_1 = SELECT CASE WHEN EXISTS(SELECT uid FROM account WHERE uid = ?) THEN 'true' ELSE 'false' END
Number of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1
[createAccount]
SQL1_1 = INSERT INTO account SET uid = ?, name = ?
Number Of Inputs = 2
SQL1_INPUTS = 1,2
[startAccountSession]
SQL1_1 = UPDATE account SET name = ?, last_connect_at = NOW(), total_connections = total_connections + 1 WHERE uid = ?
Number Of Inputs = 2
SQL1_INPUTS = 2,1
[endAccountSession]
SQL1_1 = UPDATE account SET last_disconnect_at = NOW() WHERE uid = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
[getAccountStats]
SQL1_1 = SELECT score, kills, deaths, clan_id, locker FROM account WHERE uid = ?
Number of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1,2,3,4,5
[addAccountKill]
SQL1_1 = UPDATE account SET kills = kills + 1 WHERE uid = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
[addAccountDeath]
SQL1_1 = UPDATE account SET deaths = deaths + 1 WHERE uid = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
[getAccountScore]
SQL1_1 = SELECT score FROM account WHERE uid = ?
Number of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1
[setAccountScore]
SQL1_1 = UPDATE account SET score = ? WHERE uid = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
[modifyAccountScore]
SQL1_1 = UPDATE account SET score = score + ? WHERE uid = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
[updateLocker]
SQL1_1 = UPDATE account SET locker = ? WHERE uid = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
[getLocker]
SQL1_1 = SELECT locker FROM account WHERE uid = ?
Number of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Player related queries
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[hasAlivePlayer]
SQL1_1 = SELECT CASE WHEN EXISTS(SELECT account_uid FROM player WHERE account_uid = ? AND damage < 1) THEN 'true' ELSE 'false' END
Number of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1
[createPlayer]
SQL1_1 = INSERT INTO player SET account_uid = ?, name = ?
Number Of Inputs = 2
SQL1_INPUTS = 1,2
Return InsertID = true
[insertPlayerHistory]
SQL1_1 = INSERT INTO player_history SET account_uid = ?, name = ?, position_x = ?, position_y = ?, position_z = ?
Number Of Inputs = 5
SQL1_INPUTS = 1,2,3,4,5
[deletePlayer]
SQL1_1 = DELETE FROM player WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
[loadPlayer]
SQL1_1 = SELECT p.id,
SQL1_2 = p.name,
SQL1_3 = p.account_uid,
SQL1_4 = p.damage,
SQL1_5 = p.hunger,
SQL1_6 = p.thirst,
SQL1_7 = p.alcohol,
SQL1_8 = p.oxygen_remaining,
SQL1_9 = p.bleeding_remaining,
SQL1_10 = p.hitpoints,
SQL1_11 = p.direction,
SQL1_12 = p.position_x,
SQL1_13 = p.position_y,
SQL1_14 = p.position_z,
SQL1_15 = p.assigned_items,
SQL1_16 = p.backpack,
SQL1_17 = p.backpack_items,
SQL1_18 = p.backpack_magazines,
SQL1_19 = p.backpack_weapons,
SQL1_20 = p.current_weapon,
SQL1_21 = p.goggles,
SQL1_22 = p.handgun_items,
SQL1_23 = p.handgun_weapon,
SQL1_24 = p.headgear,
SQL1_25 = p.binocular,
SQL1_26 = p.loaded_magazines,
SQL1_27 = p.primary_weapon,
SQL1_28 = p.primary_weapon_items,
SQL1_29 = p.secondary_weapon,
SQL1_30 = p.secondary_weapon_items,
SQL1_31 = p.uniform,
SQL1_32 = p.uniform_items,
SQL1_33 = p.uniform_magazines,
SQL1_34 = p.uniform_weapons,
SQL1_35 = p.vest,
SQL1_36 = p.vest_items,
SQL1_37 = p.vest_magazines,
SQL1_38 = p.vest_weapons,
SQL1_39 = p.money,
SQL1_40 = a.score,
SQL1_41 = a.kills,
SQL1_42 = a.deaths,
SQL1_43 = c.id,
SQL1_44 = c.name,
SQL1_45 = p.temperature,
SQL1_46 = p.wetness,
SQL1_47 = a.locker
SQL1_48 = FROM player p
SQL1_49 = INNER JOIN account a
SQL1_50 = ON a.uid = p.account_uid
SQL1_51 = LEFT JOIN clan c
SQL1_52 = ON c.id = a.clan_id
SQL1_53 = WHERE p.account_uid = ?
Number of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1,2-STRING,3-STRING,4,5,6,7,8,9,10,11,12,13,14,15,16-STRING,17,18,19,20-STRING,21-STRING,22,23-STRING,24-STRING,25-STRING,26,27-STRING,28,29-STRING,30,31-STRING,32,33,34,35-STRING,36,37,38,39,40,41,42,43,44-STRING,45,46,47
[updatePlayer]
SQL1_1 = UPDATE player SET
SQL1_2 = name = ?,
SQL1_3 = damage = ?,
SQL1_4 = hunger = ?,
SQL1_5 = thirst = ?,
SQL1_6 = alcohol = ?,
SQL1_7 = oxygen_remaining = ?,
SQL1_8 = bleeding_remaining = ?,
SQL1_9 = hitpoints = ?,
SQL1_10 = direction = ?,
SQL1_11 = position_x = ?,
SQL1_12 = position_y = ?,
SQL1_13 = position_z = ?,
SQL1_14 = assigned_items = ?,
SQL1_15 = backpack = ?,
SQL1_16 = backpack_items = ?,
SQL1_17 = backpack_magazines = ?,
SQL1_18 = backpack_weapons = ?,
SQL1_19 = current_weapon = ?,
SQL1_20 = goggles = ?,
SQL1_21 = handgun_items = ?,
SQL1_22 = handgun_weapon = ?,
SQL1_23 = headgear = ?,
SQL1_24 = binocular = ?,
SQL1_25 = loaded_magazines = ?,
SQL1_26 = primary_weapon = ?,
SQL1_27 = primary_weapon_items = ?,
SQL1_28 = secondary_weapon = ?,
SQL1_29 = secondary_weapon_items = ?,
SQL1_30 = uniform = ?,
SQL1_31 = uniform_items = ?,
SQL1_32 = uniform_magazines = ?,
SQL1_33 = uniform_weapons = ?,
SQL1_34 = vest = ?,
SQL1_35 = vest_items = ?,
SQL1_36 = vest_magazines = ?,
SQL1_37 = vest_weapons = ?,
SQL1_38 = temperature = ?,
SQL1_39 = wetness = ?
SQL1_40 = WHERE id = ?
Number Of Inputs = 39
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Vehicle related queries
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[insertVehicle]
SQL1_1 = INSERT INTO vehicle SET
SQL1_2 = class = ?,
SQL1_3 = account_uid = ?,
SQL1_4 = is_locked = ?,
SQL1_5 = position_x = ?,
SQL1_6 = position_y = ?,
SQL1_7 = position_z = ?,
SQL1_8 = direction_x = ?,
SQL1_9 = direction_y = ?,
SQL1_10 = direction_z = ?,
SQL1_11 = up_x = ?,
SQL1_12 = up_y = ?,
SQL1_13 = up_z = ?,
SQL1_14 = pin_code = ?
Number of Inputs = 13
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11,12,13
Return InsertID = true
[deleteVehicle]
SQL1_1 = DELETE FROM vehicle WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
[loadVehicleIdPage]
SQL1_1 = SELECT id FROM vehicle WHERE deleted_at IS NULL LIMIT ?,?
Number Of Inputs = 2
SQL1_INPUTS = 1,2
OUTPUT = 1
[loadVehicle]
SQL1_1 = SELECT id,class,spawned_at,account_uid,is_locked,fuel,damage,hitpoints,position_x,position_y,position_z,direction_x,direction_y,direction_z,up_x,up_y,up_z,cargo_items,cargo_magazines,cargo_weapons,pin_code,vehicle_texture,deleted_at,money FROM vehicle WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1,2-STRING,3-STRING,4-STRING,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21-STRING,22,23,24
[loadVehicleContainer]
SQL1_1 = SELECT cargo_container FROM vehicle WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1
[updateVehicle]
SQL1_1 = UPDATE vehicle SET
SQL1_2 = is_locked = ?,
SQL1_3 = fuel = ?,
SQL1_4 = damage = ?,
SQL1_5 = hitpoints = ?,
SQL1_6 = position_x = ?,
SQL1_7 = position_y = ?,
SQL1_8 = position_z = ?,
SQL1_9 = direction_x = ?,
SQL1_10 = direction_y = ?,
SQL1_11 = direction_z = ?,
SQL1_12 = up_x = ?,
SQL1_13 = up_y = ?,
SQL1_14 = up_z = ?,
SQL1_15 = cargo_items = ?,
SQL1_16 = cargo_magazines = ?,
SQL1_17 = cargo_weapons = ?,
SQL1_18 = cargo_container = ?,
SQL1_19 = money = ?,
SQL1_20 = last_updated_at = NOW()
SQL1_21 = WHERE id = ?
Number of Inputs = 19
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
[updateVehicleSkin]
SQL1_1 = UPDATE vehicle SET vehicle_texture = ?, last_updated_at = NOW() WHERE id = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
[vehicleSetPinCode]
SQL1_1 = UPDATE vehicle SET pin_code = ?, last_updated_at = NOW() WHERE id = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Construction related queries
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[insertConstruction]
SQL1_1 = INSERT INTO construction SET
SQL1_2 = class = ?,
SQL1_3 = account_uid = ?,
SQL1_4 = position_x = ?,
SQL1_5 = position_y = ?,
SQL1_6 = position_z = ?,
SQL1_7 = direction_x = ?,
SQL1_8 = direction_y = ?,
SQL1_9 = direction_z = ?,
SQL1_10 = up_x = ?,
SQL1_11 = up_y = ?,
SQL1_12 = up_z = ?,
SQL1_13 = territory_id = $CUSTOM_1$
Number of Inputs = 11
Number of Custom Inputs = 1
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11
Return InsertID = true
[deleteConstruction]
SQL1_1 = DELETE FROM construction WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
[loadConstructionIdPage]
SQL1_1 = SELECT id FROM construction WHERE deleted_at IS NULL LIMIT ?,?
Number Of Inputs = 2
SQL1_INPUTS = 1,2
OUTPUT = 1
[loadConstruction]
SQL1_1 = SELECT id,class,account_uid,spawned_at,position_x,position_y,position_z,direction_x,direction_y,direction_z,up_x,up_y,up_z,is_locked,pin_code,territory_id,deleted_at,damage FROM construction WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1,2-STRING,3-STRING,4-STRING,5,6,7,8,9,10,11,12,13,14,15-STRING,16,17,18
[countConstruction]
SQL1_1 = SELECT COUNT(*) FROM construction
Number Of Inputs = 0
OUTPUT = 1
[constructionSetPinCode]
SQL1_1 = UPDATE construction SET pin_code= ?, last_updated_at = NOW() WHERE id = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
[upgradeObject]
SQL1_1 = UPDATE construction SET class = ?, last_updated_at = NOW() WHERE id = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
[addDoorLock]
SQL1_1 = UPDATE construction SET pin_code = ?, is_locked = -1, last_updated_at = NOW() WHERE id = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
[updateLock]
SQL1_1 = UPDATE construction SET is_locked = ?, last_updated_at = NOW() WHERE id = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
[updateConstructionTerritoryIDs]
SQL1_1 = UPDATE construction SET territory_id = ? WHERE id IN(?)
Number of Inputs = 2
SQL1_INPUTS = 1,2
[updateDamage]
SQL1_1 = UPDATE construction SET damage = ?, last_updated_at = NOW() WHERE id = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Containers related queries
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[insertContainer]
SQL1_1 = INSERT INTO container SET
SQL1_2 = class = ?,
SQL1_3 = account_uid = ?,
SQL1_4 = position_x = ?,
SQL1_5 = position_y = ?,
SQL1_6 = position_z = ?,
SQL1_7 = direction_x = ?,
SQL1_8 = direction_y = ?,
SQL1_9 = direction_z = ?,
SQL1_10 = up_x = ?,
SQL1_11 = up_y = ?,
SQL1_12 = up_z = ?,
SQL1_13 = cargo_items = ?,
SQL1_14 = cargo_magazines = ?,
SQL1_15 = cargo_weapons = ?,
SQL1_16 = cargo_container = ?,
SQL1_17 = money = ?,
SQL1_18 = pin_code = ?,
SQL1_19 = territory_id = $CUSTOM_1$
Number of Inputs = 17
Number of Custom Inputs = 1
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
Return InsertID = true
[deleteContainer]
SQL1_1 = DELETE FROM container WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
[loadContainerIdPage]
SQL1_1 = SELECT id FROM container WHERE deleted_at IS NULL LIMIT ?,?
Number Of Inputs = 2
SQL1_INPUTS = 1,2
OUTPUT = 1
[loadContainer]
SQL1_1 = SELECT id,class,account_uid,is_locked,position_x,position_y,position_z,direction_x,direction_y,direction_z,up_x,up_y,up_z,cargo_items,cargo_magazines,cargo_weapons,pin_code,territory_id,abandoned,deleted_at,money FROM container WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1,2-STRING,3-STRING,4,5,6,7,8,9,10,11,12,13,14,15,16,17-STRING,18,19-STRING,20,21
[loadContainerCargo]
SQL1_1 = SELECT cargo_container FROM container WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1
[updateContainer]
SQL1_1 = UPDATE container SET
SQL1_2 = is_locked = ?,
SQL1_3 = position_x = ?,
SQL1_4 = position_y = ?,
SQL1_5 = position_z = ?,
SQL1_6 = direction_x = ?,
SQL1_7 = direction_y = ?,
SQL1_8 = direction_z = ?,
SQL1_9 = up_x = ?,
SQL1_10 = up_y = ?,
SQL1_11 = up_z = ?,
SQL1_12 = cargo_items = ?,
SQL1_13 = cargo_magazines = ?,
SQL1_14 = cargo_weapons = ?,
SQL1_15 = cargo_container = ?,
SQL1_16 = territory_id = $CUSTOM_1$,
SQL1_17 = money = ?,
SQL1_18 = last_updated_at = NOW()
SQL1_19 = WHERE id = ?
Number of Inputs = 16
Number of Custom Inputs = 1
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
[containerSetPinCode]
SQL1_1 = UPDATE container SET pin_code= ?, last_updated_at = NOW() WHERE id = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
[updateContainerTerritoryIDs]
SQL1_1 = UPDATE container SET territory_id = ? WHERE id IN(?)
Number of Inputs = 2
SQL1_INPUTS = 1,2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Clan related queries
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[createClan]
SQL1_1 = INSERT INTO clan SET leader_uid = ?, name = ?
Number Of Inputs = 2
SQL1_INPUTS = 1,2
Return InsertID = true
[setAccountClanLink]
SQL1_1 = UPDATE account SET clan_id = ? WHERE uid = ?
Number Of Inputs = 2
SQL1_INPUTS = 1,2
[unLinkClanLink]
SQL1_1 = UPDATE account SET clan_id = NULL WHERE uid = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
[updateClanLeader]
SQL1_1 = UPDATE clan SET leader_uid = ? WHERE id = ?
Number Of Inputs = 2
SQL1_INPUTS = 1,2
[deleteClan]
SQL1_1 = DELETE FROM clan WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
[loadClansIdPage]
SQL1_1 = SELECT id FROM clan LIMIT ?,?
Number Of Inputs = 2
SQL1_INPUTS = 1,2
OUTPUT = 1
[getClanInfo]
SQL1_1 = SELECT name,leader_uid FROM clan WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1-STRING,2-STRING
[getClanMembers]
SQL1_1 = SELECT uid,name FROM account WHERE clan_id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1-STRING,2-STRING
[getClanMarkers]
SQL1_1 = SELECT id,markerType,positionArr,color,icon,iconSize,label,labelSize FROM clan_map_marker WHERE clan_id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1,2,3,4,5-STRING,6,7-STRING,8
[addMarker]
SQL1_1 = INSERT INTO clan_map_marker SET clan_id = ?, markerType = 0, positionArr = ?, color = ?, icon = ?, iconSize = ?, label = ?, labelSize = ?
Number Of Inputs = 7
SQL1_INPUTS = 1,2,3,4,5,6,7
Return InsertID = true
[addPoly]
SQL1_1 = INSERT INTO clan_map_marker SET clan_id = ?, markerType = 1, positionArr = ?, color = ?
Number Of Inputs = 3
SQL1_INPUTS = 1,2,3
Return InsertID = true
[deleteMarker]
SQL1_1 = DELETE FROM clan_map_marker WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Territory related queries
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[createTerritory]
SQL1_1 = INSERT INTO territory SET owner_uid = ?, name = ?, position_x = ? , position_y = ? , position_z = ?, radius = ? , level = ? , flag_texture = ? , flag_stolen = ? , flag_stolen_by_uid =$CUSTOM_1$ , build_rights = ? , moderators = ?
Number Of Inputs = 11
Number Of Custom Inputs = 1
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11
Return InsertID = true
[loadTerriotryIdPage]
SQL1_1 = SELECT id FROM territory WHERE deleted_at IS NULL LIMIT ?,?
Number Of Inputs = 2
SQL1_INPUTS = 1,2
OUTPUT = 1
[loadTerritory]
SQL1_1 = SET @connector = ?;
SQL2_1 = SELECT id,owner_uid,name,position_x,position_y,position_z,radius, level,flag_texture,flag_stolen,flag_stolen_by_uid,last_paid_at,build_rights,moderators,deleted_at,(SELECT COUNT(*)FROM construction c WHERE c.territory_id = @connector) FROM territory WHERE id = @connector
Number Of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1,2-STRING,3-STRING,4,5,6,7,8,9-STRING,10,11-STRING,12-DateTime_ISO8601,13,14,15,16
[setTerritoryLevel]
SQL1_1 = UPDATE territory SET level = ? WHERE id = ?
Number Of Inputs = 2
SQL1_INPUTS = 1,2
[setTerritorySize]
SQL1_1 = UPDATE territory SET radius = ? WHERE id = ?
Number Of Inputs = 2
SQL1_INPUTS = 1,2
[updateTerritoryBuildRights]
SQL1_1 = UPDATE territory SET build_rights = ? WHERE id = ?
Number Of Inputs = 2
SQL1_INPUTS = 1,2
[updateTerritoryModerators]
SQL1_1 = UPDATE territory SET moderators = ? WHERE id = ?
Number Of Inputs = 2
SQL1_INPUTS = 1,2
[maintainTerritory]
SQL1_1 = UPDATE territory SET last_paid_at = NOW(),xm8_protectionmoney_notified = 0 WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
[deleteTerritory]
SQL1_1 = DELETE FROM territory WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
[flagStolen]
SQL1_1 = UPDATE territory SET flag_stolen = 1, flag_stolen_by_uid = ?, flag_stolen_at = NOW() WHERE id = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
[flagRestore]
SQL1_1 = UPDATE territory SET flag_stolen = 0, flag_stolen_by_uid = NULL, flag_stolen_at = NULL WHERE id = ?
Number of Inputs = 1
SQL1_INPUTS = 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Garbage Collector
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Marks for deletion containers outside territories that were not accessed within ? days
[markDeleteOldContainers]
SQL1_1 = UPDATE container SET deleted_at = NOW() WHERE last_updated_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND territory_id IS NULL AND deleted_at IS NULL
Number Of Inputs = 1
SQL1_INPUTS = 1
; Removes containers outside territories that were not accessed within ? days
[deleteOldContainers]
SQL1_1 = DELETE FROM container WHERE deleted_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND territory_id IS NULL
Number Of Inputs = 1
SQL1_INPUTS = 1
; Marks contructions outside territories deleted after ? days
[markDeleteOldConstructions]
SQL1_1 = UPDATE construction SET deleted_at = NOW() WHERE spawned_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND territory_id IS NULL AND deleted_at IS NULL
Number Of Inputs = 1
SQL1_INPUTS = 1
; Removes contructions outside territories after ? days
[deleteOldConstructions]
SQL1_1 = DELETE FROM construction WHERE deleted_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND territory_id IS NULL
Number Of Inputs = 1
SQL1_INPUTS = 1
; Marks for deletion vehicles that were not used within ? days
[markDeleteOldVehicles]
SQL1_1 = UPDATE vehicle SET deleted_at = NOW() WHERE last_updated_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND deleted_at IS NULL
Number Of Inputs = 1
SQL1_INPUTS = 1
; Removes vehicles that were not used within ? days
[deleteOldVehicles]
SQL1_1 = DELETE FROM vehicle WHERE deleted_at < DATE_SUB(NOW(), INTERVAL ? DAY)
Number Of Inputs = 1
SQL1_INPUTS = 1
; Marks territories (and all containers/constructions) that were not paid within ? days as deleted
[markDeleteUnpaidTerritories]
SQL1_1 = UPDATE territory SET deleted_at = NOW() WHERE last_paid_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND deleted_at IS NULL
SQl2_1 = UPDATE construction SET deleted_at = (SELECT deleted_at FROM territory WHERE territory.id = construction.territory_id AND territory.deleted_at IS NOT NULL) WHERE construction.territory_id IS NOT NULL
SQL3_1 = UPDATE container SET deleted_at = (SELECT deleted_at FROM territory WHERE territory.id = container.territory_id AND territory.deleted_at IS NOT NULL) WHERE container.territory_id IS NOT NULL
Number Of Inputs = 1
SQL1_INPUTS = 1
; Removes territories (and all containers/constructions) that were not paid within ? days
[deleteUnpaidTerritories]
SQL1_1 = DELETE FROM territory WHERE deleted_at < DATE_SUB(NOW(), INTERVAL ? DAY)
Number Of Inputs = 1
SQL1_INPUTS = 1
[addAbandonedSafes]
SQL1_1 = UPDATE container SET abandoned = NOW(), pin_code = '0000' WHERE last_updated_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND class = "Exile_Container_Safe" AND territory_id IS NULL
Number Of Inputs = 1
SQL1_INPUTS = 1
[deleteBaseFlagStolen]
SQL1_1 = DELETE FROM territory WHERE flag_stolen_at < DATE_SUB(NOW(), INTERVAL ? DAY)
Number Of Inputs = 1
SQL1_INPUTS = 1
; Unlock doors and mark safes as abandoned if flag stolen for X days
[setAbandonedUnlocked]
SQL1_1 = UPDATE container SET abandoned = NOW(), pin_code = '0000' WHERE (SELECT flag_stolen_at FROM territory WHERE territory.id = container.territory_id AND territory.flag_stolen_at < DATE_SUB(NOW(), INTERVAL ? DAY));
SQL2_1 = UPDATE construction SET pin_code = '0000' WHERE (SELECT flag_stolen_at FROM territory WHERE territory.id = construction.territory_id AND territory.flag_stolen_at < DATE_SUB(NOW(), INTERVAL ? DAY)) AND pin_code != '000000'
Number Of Inputs = 1
SQL1_INPUTS = 1
SQL2_INPUTS = 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Moneh moneh moneh
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[setPlayerMoney]
SQL1_1 = UPDATE player SET money = ? WHERE id = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
[getPlayerMoney]
SQL1_1 = SELECT money FROM player WHERE id = ?
Number of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1
[setContainerMoney]
SQL1_1 = UPDATE container SET money = ?, last_updated_at = NOW() WHERE id = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
[setVehicleMoney]
SQL1_1 = UPDATE vehicle SET money = ?, last_updated_at = NOW() WHERE id = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; XM8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[getAllNotifTerritory]
SQL1_1 = SELECT id FROM territory WHERE last_paid_at < DATE_SUB(NOW(), INTERVAL ? - 1 DAY) and xm8_protectionmoney_notified = 0
Number of Inputs = 1
SQL1_INPUTS = 1
[setTerritoryNotified]
SQL1_1 = UPDATE territory SET xm8_protectionmoney_notified = ? WHERE id = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2

BIN
@ExileServer/extDB2.dll Normal file

Binary file not shown.

View File

@ -0,0 +1,93 @@
[Main]
Version = 5
;Threads = 0
; Default Value is the number of CPU Cores Detected (max value is 6, min value is 2)
Randomize Config File = false
;This is a legacy option to randomize config file for Arma2 Servers. Only for Windows Builds
[Rcon]
;; This is functional, should be working fine. Just needs abit of testing on a $
;; Allow for changing Address for those running server in a VM environment.
IP = 127.0.0.1
Port = 2302
;; Rcon Password i.e Battleye/beserver.cfg
Password = password
;; Bad Player Name Checks
;; This will only work if your mission / mod has started extDB2 Rcon. i.e 9:START_RCON:RCON
Bad Playername Enable = true
Bad Playername Kick Message = Bad Player Name
;; By default : is a bad character (used as seperator for extDB2 Calls (this is hardcoded in)
Bad Playername Strings = (:):{:}
;;Bad Playername Regex_1 = [:alnum:]
;;Bad Playername Regex_2 = [:alnum:]
;;Bad Playername Regex_3 = [:alnum:]
;; Whitelisting / Reserve Slots
;; This will only work if your mission / mod has started extDB2 Rcon. i.e 9:START_RCON:RCON
Whitelist Enable = false
Whitelist Kick Message = Only Reserved Slots Left
Whitelist Public Slots = 999
;; Database settings to use (Optional)
Whitelist Database = MySQL_Example
Whitelist SQL Prepared Statement = SELECT CASE WHEN EXISTS(SELECT UID FROM PlayerInfo WHERE BattlEyeGUID=? AND Whitelisted=1) THEN 1 ELSE 0 END
Whitelist Kick on SQL Query Failed = false
;; Hardcoded BEGuids for whitelisted players
;Whitelist BEGuids = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
[Steam]
;; This is for VAC Protocol for VAC Bans + Steam Friends.
;; https://steamcommunity.com/dev/apikey
API Key = EE9979B4C00D357BD827E2DBD62EFB18
[VAC]
;; This feature requires Steam + Rcon to be enabled.
;; Also this feature is called via SQF Code atm, i.e it doesn't auto detect players joining server yet....
Auto Ban = false
;; For Player to get banned ( their total VAC Bans => NumberOfVACBans) AND ( Days Since their Last Ban was <= DaysSinceLastBan)
;; This is also used extDB Protocol VAC:VACBanned returned results
NumberOfVACBans = 1
DaysSinceLastBan = 999999999
BanDuration = 1
;; 0 = Forever, otherwise its x Minutes
BanMessage = Steam VAC Banned
[Log]
;; Flush Logs after each write, more work on Harddrive
Flush = true
[exile]
Type = MySQL
Name = exile
Username = exile
Password = Ilovegina
IP = 10.10.10.8
Port = 3306
minSessions = 2
idleTime = 60
; Really should only use this if MySQL server is external. Also only for MySQL
compress = false
; Recommend you turn this on http://dev.mysql.com/doc/refman/5.6/en/mysql-command-options.html#option_mysql_secure-auth
Secure Auth = true
[SQLite_Example]
Type = SQLite
Name = sqlite.db
minSessions = 1
; minSession Default Value = 1
;maxSessions = 4
; maxSession Default Value = number of Main->Threads
; You really should leave this value alone
idleTime = 60
; idleTime no Default Value yet, needs to be defined.
; idleTime is the time before a database session is stopped if not used.
; If Database Sessions are greater than minSessions

BIN
@asm/addons/asm.pbo Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

1
@marma/code/sqf.json Normal file

File diff suppressed because one or more lines are too long

14
@marma/marma-conf.ini Normal file
View File

@ -0,0 +1,14 @@
[Main]
serverID = e4e728caf4260390cede56f3b7429626
Randomize Config File = false
[Stats]
IO = true
Memory = true
[URI]
base = https://cp.marma.io
[Log]
Debug = false
Flush = true

BIN
@marma/marma-debug.dll Normal file

Binary file not shown.

BIN
@marma/marma-debug_x64.dll Normal file

Binary file not shown.

BIN
@marma/marma-updater.dll Normal file

Binary file not shown.

Binary file not shown.

BIN
ASMdll.dll Normal file

Binary file not shown.

BIN
ArmaServerMonitor.exe Normal file

Binary file not shown.

18
Exile Auto Start.bat Normal file
View File

@ -0,0 +1,18 @@
@echo off
SET ARMA=f:\Arma3\Arma3_Server
color 0a
title Exile Monitor
:Serverstart
echo Launching Server
F:
cd %ARMA%
echo Exile Server Monitor... Active !
start "Arma3" arma3server_SC.exe "-mod=@exile;Kart;Mark;Heli;" "-servermod=@exileserver;@asm;@marma;" -config=%ARMA%\@ExileServer\config.cfg -port=2302 -profiles=SC -cfg=%ARMA%\@ExileServer\basic.cfg -name=SC -autoinit -Loadmissiontomemory -hugepages
REM start "Arma3_HC" arma3server_HC.exe -client -connect=127.0.0.1 -password=joejer "-mod=@exile;Kart;Mark;Heli;@A3XAI_HC;@asm;" -profiles=HC -name=HC -hugepages
REM ping 127.0.0.1 -n 15 >NUL
REM echo Exile Server Shutdown ... Restarting!
REM ping 127.0.0.1 -n 5 >NUL
REM cls
REM goto Serverstart

3
OpenRecentLog.bat Normal file
View File

@ -0,0 +1,3 @@
@echo off
for /f "delims=" %%x in ('dir /od /a-d /b F:\Arma3\Arma3_Server\SC\*.rpt') do set recent=%%x
start "" "C:\Program Files (x86)\Notepad++\notepad++.exe" "F:\Arma3\Arma3_Server\SC\%recent%"

16
Re-PBO.bat Normal file
View File

@ -0,0 +1,16 @@
set path=%path%;C:\Program Files\PBO Manager v.1.4 beta
REM pboconsole -pack <folder to pack> <filename.pbo>
pboconsole -pack F:\Arma3\arma3_server\mpmissions\Exile.Altis F:\Arma3\arma3_server\mpmissions\Exile.Altis.pbo
pboconsole -pack F:\Arma3\arma3_server\@ExileServer\addons\exile_server_config F:\Arma3\arma3_server\@ExileServer\addons\exile_server_config.pbo
pboconsole -pack F:\Arma3\arma3_server\@ExileServer\addons\a3_dms F:\Arma3\arma3_server\@ExileServer\addons\a3_dms.pbo
pboconsole -pack F:\Arma3\arma3_server\@ExileServer\addons\a3_exile_occupation F:\Arma3\arma3_server\@ExileServer\addons\a3_exile_occupation.pbo
REM pboconsole -pack F:\Arma3\arma3_server\@ExileServer\addons\a3_iniSTAR_Exile F:\Arma3\arma3_server\@ExileServer\addons\a3_infiSTAR_Exile.pbo
REM pboconsole -pack F:\Arma3\arma3_server\@A3XAI\addons\a3xai_config F:\Arma3\arma3_server\@A3XAI\addons\a3xai_config.pbo
timeout 5

BIN
arma3server_HC.exe Normal file

Binary file not shown.

BIN
arma3server_SC.exe Normal file

Binary file not shown.

10
asm.ini Normal file
View File

@ -0,0 +1,10 @@
[ASM]
;enableAPImonitoring= 0: disable, 1: A3 mode, 2: A2 mode
enableAPImonitoring=1
enableProfilePrefixSlotSelection=1
objectcountinterval0=30
objectcountinterval1=60
objectcountinterval2=0
objectcountcommand0=count entities ""All"";
objectcountcommand1=count vehicles;
objectcountcommand2=count allMissionObjects ""All"";

6
backupDB.bat Normal file
View File

@ -0,0 +1,6 @@
@echo off
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set datetime=%%I
set datetime=%datetime:~0,4%-%datetime:~4,2%-%datetime:~6,2%_%datetime:~8,2%-%datetime:~10,2%-%datetime:~12,2%
"F:\MariaDB\bin\mysqldump.exe" -h10.10.10.8 -uexile -pIlovegina exile64 > "F:\Arma3\DBBackups\Exile64_%datetime%.sql"
REM "C:\Program Files\MariaDB 10.2\bin\mysqldump.exe" -h10.10.10.8 -uexile -pIlovegina exile > "F:\Arma3\DBBackups\Exile_%datetime%.sql"
exit

BIN
keys/a3.bikey Normal file

Binary file not shown.

BIN
keys/exile.bikey Normal file

Binary file not shown.

BIN
mpmissions/Exile.Altis.pbo Normal file

Binary file not shown.

View File

@ -0,0 +1 @@
Exile.Altis

View File

@ -0,0 +1,54 @@
/*
//Exile Loot Drop DLL
ExileServer_system_lootManager_dropItem = "\ExileLootDrop\ExileServer_system_lootManager_dropItem.sqf";
ExileServer_system_lootManager_spawnLootInBuilding = "\ExileLootDrop\ExileServer_system_lootManager_spawnLootInBuilding.sqf";
//ExAd
ExileClient_gui_xm8_slide = "ExAdClient\XM8\CustomCode\ExileClient_gui_xm8_slide.sqf";
ExileClient_gui_xm8_show = "ExAdClient\XM8\CustomCode\ExileClient_gui_xm8_show.sqf";
ExileServer_system_territory_database_load = "ExAdClient\VirtualGarage\CustomCode\ExileServer_system_territory_database_load.sqf";
//Extended Base Mod
ExileClient_system_lootmanager_thread_spawn = "EBM\exileclient_system_lootmanager_thread_spawn.sqf";
//Persistent Tree
ExileServer_object_tree_network_chopTreeRequest="Custom\persistantTree\ExileServer_object_tree_network_chopTreeRequest.sqf";
//Vector Building
ExileClient_object_construction_move = "eXpochVectorBldg\ExileClient_object_construction_move.sqf";
ExileClient_gui_hud_event_onKeyDown = "eXpochVectorBldg\ExileClient_gui_hud_event_onKeyDown.sqf";
ExileClient_gui_hud_event_onKeyUp = "eXpochVectorBldg\ExileClient_gui_hud_event_onKeyUp.sqf";
ExileClient_construction_beginExistingObject = "eXpochVectorBldg\ExileClient_construction_beginExistingObject.sqf";
ExileClient_construction_beginNewObject = "eXpochVectorBldg\ExileClient_construction_beginNewObject.sqf";
ExileClient_construction_thread = "eXpochVectorBldg\ExileClient_construction_thread.sqf";
ExileClient_gui_constructionMode_update = "eXpochVectorBldg\ExileClient_gui_constructionMode_update.sqf";
ExileClient_util_world_canBuildHere = "eXpochVectorBldg\ExileClient_util_world_canBuildHere.sqf";
//Exile Revive
ExileClient_object_player_death_startBleedingOut = "custom\EnigmaRevive\ExileClient_object_player_death_startBleedingOut.sqf"; //Happys Revive
ExileClient_object_player_event_onInventoryOpened = "custom\EnigmaRevive\ExileClient_object_player_event_onInventoryOpened.sqf"; //Happys Revive AntiDupe ---NEW with v0.65
//SellCrate
ExileClient_gui_traderDialog_updateInventoryDropdown = "custom\SellCrates\ExileClient_gui_traderDialog_updateInventoryDropdown.sqf";
ExileClient_gui_wasteDumpDialog_show = "custom\SellCrates\ExileClient_gui_wasteDumpDialog_show.sqf";
ExileServer_system_trading_network_wasteDumpRequest = "custom\SellCrates\ExileServer_system_trading_network_wasteDumpRequest.sqf";
//enhancedMovement
ExileClient_system_thread_initialize = "custom\enhancedMovement\ExileClient_system_thread_initialize.sqf";
//Fix for Error Foreign error: Unknown enum value: "MPKilled"
ExileServer_system_garbageCollector_deleteObject="custom\fixes\ExileServer_system_garbageCollector_deleteObject.sqf";
//Another fix for unknown enum value: PUBLIC
ExileServer_system_event_ambientFlyOver_start="custom\fixes\ExileServer_system_event_ambientFlyOver_start.sqf";
//Persistent Time and Weather System
ExileClient_object_player_stats_updateTemperature="custom\PTWS\ExileClient_object_player_stats_updateTemperature.sqf";
ExileClient_system_snow_thread_update="custom\PTWS\ExileClient_system_snow_thread_update.sqf";
ExileServer_system_weather_initialize="custom\PTWS\ExileServer_system_weather_initialize.sqf";
//Spawn Items in temporary vehicles
ExileServer_world_spawnVehicles="custom\addItemsToVehicles\ExileServer_world_spawnVehicles.sqf";
*/
//RCON FIX Logs server uptime and time till restart
ExileServer_system_rcon_thread_check="custom\fixes\ExileServer_system_rcon_thread_check.sqf";

View File

@ -0,0 +1,38 @@
class CfgRemoteExec
{
class Functions
{
mode = 1;
jip = 0;
class fnc_AdminReq { allowedTargets=2; };
class ExileServer_system_network_dispatchIncomingMessage { allowedTargets=2; };
//ExAd
class ExAdServer_fnc_clientRequest { allowedTargets=2; };
class ASL_Pickup_Ropes { allowedTargets=0; };
class ASL_Deploy_Ropes_Index { allowedTargets=0; };
class ASL_Rope_Set_Mass { allowedTargets=0; };
class ASL_Extend_Ropes { allowedTargets=0; };
class ASL_Shorten_Ropes { allowedTargets=0; };
class ASL_Release_Cargo { allowedTargets=0; };
class ASL_Retract_Ropes { allowedTargets=0; };
class ASL_Deploy_Ropes { allowedTargets=0; };
class ASL_Attach_Ropes { allowedTargets=0; };
class ASL_Drop_Ropes { allowedTargets=0; };
class ASL_Hint { allowedTargets=1; };
class ASL_Hide_Object_Global { allowedTargets=2; };
class SA_Simulate_Towing { allowedTargets=0; };
class SA_Attach_Tow_Ropes { allowedTargets=0; };
class SA_Take_Tow_Ropes { allowedTargets=0; };
class SA_Put_Away_Tow_Ropes { allowedTargets=0; };
class SA_Pickup_Tow_Ropes { allowedTargets=0; };
class SA_Drop_Tow_Ropes { allowedTargets=0; };
class SA_Set_Owner { allowedTargets=2; };
class SA_Hint { allowedTargets=1; };
class SA_Hide_Object_Global { allowedTargets=2; };
};
class Commands
{
mode=0;
jip=0;
};
};

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,73 @@
/**
* ExileServer_system_rcon_thread_check
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private["_restartTime", "_useAutoKick", "_kickTime", "_lockTime", "_uptime", "_timeTilRestart", "_time", "_i"];
_restartTime = _this select 0;
_useAutoKick = _this select 1;
_kickTime = _this select 2;
_lockTime = _this select 3;
_uptime = call ExileServer_util_time_uptime;
_timeTilRestart = _restartTime - _uptime;
diag_log format ["[EXILE_Z] Uptime: %2, Time Until Restart: %1",_timeTilRestart, _uptime];
if (typeName ExileServerRestartMessages isEqualTo "ARRAY") then
{
if !(ExileServerRestartMessages isEqualTo []) then
{
{
_time = _x;
if (_timeTilRestart < _time) then
{
if (count ExileSessionIDs > 0) then
{
["toastRequest", ["InfoTitleAndText", ["Restart incoming!", format["Server is going to restart in %1 min! Log out before the restart to prevent gear loss.", _time] ]]] call ExileServer_system_network_send_broadcast;
["baguetteRequest", [format["Server is going to restart in %1 min!",_time]]] call ExileServer_system_network_send_broadcast;
};
ExileServerRestartMessages deleteAt _forEachIndex;
format ["Restart Warnings for %1min sent",_time] call ExileServer_util_log;
};
}
forEach ExileServerRestartMessages;
};
};
if (_timeTilRestart < _lockTime) then
{
if !(ExileServerIsLocked) then
{
"#lock" call ExileServer_system_rcon_event_sendCommand;
"Server locked for restart" call ExileServer_util_log;
["toastRequest", ["ErrorTitleAndText", ["Server will restart now!", "You will be kicked off the server due to a restart."]]] call ExileServer_system_network_send_broadcast;
["baguetteRequest", ["Server will restart now!"]] call ExileServer_system_network_send_broadcast;
ExileServerIsLocked = true;
};
if (_timeTilRestart < _kickTime) then
{
if !(ExileServerRestartMode) then
{
call ExileServer_system_rcon_event_kickAllrestart;
"Everyone kicked for restart" call ExileServer_util_log;
ExileSystemSpawnThread = [];
call ExileServer_system_rcon_event_clearBuffers;
"Buffers cleared!" call ExileServer_util_log;
for "_i" from 0 to 49 do
{
"SERVER READY FOR RESTART!!" call ExileServer_util_log;
};
ExileServerRestartMode = true;
if(getNumber(configFile >> "CfgSettings" >> "RCON" >> "useShutdown") isEqualTo 1)then
{
'#shutdown' call ExileServer_system_rcon_event_sendCommand;
};
};
};
};
true

View File

@ -0,0 +1,90 @@
#define true 1
#define false 0
///////////////////////////////////////////////////////////////////////////////
// Server Settings - Modify at will
///////////////////////////////////////////////////////////////////////////////
author = "Exile Mod Team";
onLoadName = "Exile Mod";
onLoadMission= "www.exilemod.com";
loadScreen = "exile_assets\texture\mod\logo.paa";
disableChannels[] = {0, 2};
OnLoadIntro = "";
OnLoadIntroTime = false;
OnLoadMissionTime = false;
class Header
{
gameType = Survive; // Do NOT change this
minPlayers = 1;
maxPlayers = 100;
};
///////////////////////////////////////////////////////////////////////////////
// Exile Settings - Do not change these!
///////////////////////////////////////////////////////////////////////////////
forceRotorLibSimulation = 2;
skipLobby = 1;
joinUnassigned = 1;
respawn = "BASE";
respawnDelay = 120;
respawnDialog = 0;
respawnOnStart = 0;
respawnButton = 1;
respawnTemplates[] = {"Exile"};
corpseManagerMode = 0;
corpseLimit = 20;
corpseRemovalMinTime = 1800;
corpseRemovalMaxTime = 3600;
wreckManagerMode = 0;
wreckLimit = 2;
wreckRemovalMinTime = 60;
wreckRemovalMaxTime = 360;
scriptedPlayer = 1;
disabledAI = 1;
enableItemsDropping = 0;
briefing = 0;
debriefing = 0;
allowFunctionsLog = 1;
enableDebugConsole = 0;
allowFunctionsRecompile = 0;
showSquadRadar = 0;
showUAVFeed = 0;
reviveDelay = 6;
reviveForceRespawnDelay = 3;
reviveBleedOutDelay = 120;
showHUD[] =
{
true, // Scripted HUD (same as showHUD command)
true, // Vehicle + soldier info
true, // Vehicle radar
true, // Vehicle compass
true, // Tank direction indicator
false, // Commanding menu
false, // Group Bar
true, // HUD Weapon Cursors
false // Squad Radar
};
#include "config.cpp"
class CfgRemoteExec
{
class Functions
{
mode = 1;
jip = 0;
class ExileServer_system_network_dispatchIncomingMessage
{
allowedTargets = 2;
};
};
class Commands
{
mode = 0;
jip = 0;
};
};

View File

@ -0,0 +1,508 @@
///////////////////////////////////////////////////////////////////////////////
// Static Objects
///////////////////////////////////////////////////////////////////////////////
// Taken away for now
//#include "initServer.sqf"
if (!hasInterface || isServer) exitWith {};
///////////////////////////////////////////////////////////////////////////
// Hardware Trader
///////////////////////////////////////////////////////////////////////////
_workBench = "Land_Workbench_01_F" createVehicleLocal [0,0,0];
_workBench setDir 45.4546;
_workBench setPosATL [14587.8, 16758.7, 0.0938587];
_trader =
[
"Exile_Trader_Hardware",
"Exile_Trader_Hardware",
"WhiteHead_17",
["InBaseMoves_sitHighUp1"],
[0, 0, -0.5],
170,
_workBench
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Fast Food Trader
///////////////////////////////////////////////////////////////////////////
_cashDesk = "Land_CashDesk_F" createVehicleLocal [0,0,0];
_cashDesk setDir 131.818;
_cashDesk setPosATL [14589.8, 16778.2, -0.0701294];
_microwave = "Land_Microwave_01_F" createVehicleLocal [0,0,0];
_cashDesk disableCollisionWith _microwave;
_microwave disableCollisionWith _cashDesk;
_microwave attachTo [_cashDesk, [-0.6, 0.2, 1.1]];
_ketchup = "Land_Ketchup_01_F" createVehicleLocal [0,0,0];
_cashDesk disableCollisionWith _ketchup;
_ketchup disableCollisionWith _cashDesk;
_ketchup attachTo [_cashDesk, [-0.6, 0, 1.1]];
_mustard = "Land_Mustard_01_F" createVehicleLocal [0,0,0];
_cashDesk disableCollisionWith _mustard;
_mustard disableCollisionWith _cashDesk;
_mustard attachTo [_cashDesk, [-0.5, -0.05, 1.1]];
_trader =
[
"Exile_Trader_Food",
"Exile_Trader_Food",
"GreekHead_A3_01",
["InBaseMoves_table1"],
[0.1, 0.5, 0.2],
170,
_cashDesk
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Armory Trader
///////////////////////////////////////////////////////////////////////////
_chair = "Land_CampingChair_V2_F" createVehicleLocal [0,0,0];
_chair setDir 208.182;
_chair setPosATL [14568.1, 16764.3, 0.084837];
_trader =
[
"Exile_Trader_Armory",
"Exile_Trader_Armory",
"PersianHead_A3_02",
["InBaseMoves_SittingRifle1"],
[0, -0.15, -0.45],
180,
_chair
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Equipment Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Equipment",
"Exile_Trader_Equipment",
"WhiteHead_19",
["InBaseMoves_Lean1"],
[14571.5, 16759.1, 0.126438],
0
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Specops Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_SpecialOperations",
"Exile_Trader_SpecialOperations",
"AfricanHead_02",
["HubStanding_idle1", "HubStanding_idle2", "HubStanding_idle3"],
[14566.3, 16773.2, 0.126438],
140
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Office Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Office",
"Exile_Trader_Office",
"GreekHead_A3_04",
["HubBriefing_scratch", "HubBriefing_stretch", "HubBriefing_think", "HubBriefing_lookAround1", "HubBriefing_lookAround2"],
[14599.6, 16774.6, 5.12644],
220
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Waste Dump Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_WasteDump",
"Exile_Trader_WasteDump",
"GreekHead_A3_01",
["HubStandingUA_move1", "HubStandingUA_move2", "HubStandingUA_idle1", "HubStandingUA_idle2", "HubStandingUA_idle3"],
[14608.4, 16901.3, 0],
270
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Aircraft Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Aircraft",
"Exile_Trader_Aircraft",
"WhiteHead_17",
["LHD_krajPaluby"],
[14596.5, 16752.9, 0.12644],
133
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Aircraft Customs Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_AircraftCustoms",
"Exile_Trader_AircraftCustoms",
"GreekHead_A3_07",
["HubStandingUC_idle1", "HubStandingUC_idle2", "HubStandingUC_idle3", "HubStandingUC_move1", "HubStandingUC_move2"],
[14635, 16790.3, 0],
156.294
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Vehicle Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Vehicle",
"Exile_Trader_Vehicle",
"WhiteHead_11",
["InBaseMoves_repairVehicleKnl", "InBaseMoves_repairVehiclePne"],
[14603.7, 16877.3, 0.00143433],
90
]
call ExileClient_object_trader_create;
_carWreck = "Land_Wreck_CarDismantled_F" createVehicleLocal [0,0,0];
_carWreck setDir 355.455;
_carWreck setPosATL [14605.6, 16877.3, 0.0208359];
///////////////////////////////////////////////////////////////////////////
// Vehicle Customs Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_VehicleCustoms",
"Exile_Trader_VehicleCustoms",
"WhiteHead_11",
["AidlPercMstpSnonWnonDnon_G01", "AidlPercMstpSnonWnonDnon_G02", "AidlPercMstpSnonWnonDnon_G03", "AidlPercMstpSnonWnonDnon_G04", "AidlPercMstpSnonWnonDnon_G05", "AidlPercMstpSnonWnonDnon_G06"],
[14617.2, 16888.4, 0],
269.96
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Guard 01
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Guard_01",
"",
"WhiteHead_17",
["InBaseMoves_patrolling1"],
[14564.9,16923.4,0.00146294],
323.53
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Guard 02
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Guard_02",
"",
"WhiteHead_03",
["InBaseMoves_patrolling2"],
[14626.3,16834.6,4.72644],
326.455
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Guard 03
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Guard_03",
"",
"AfricanHead_03",
["InBaseMoves_patrolling1"],
[14577.1,16793.1,3.75118],
313.349
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Western Guard 01
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Guard_02",
"",
"WhiteHead_03",
["InBaseMoves_patrolling2"],
[2950.52,18195.3,4.93399],
179.092
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Western Boat Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Boat",
"Exile_Trader_Boat",
"WhiteHead_17",
["AidlPercMstpSnonWnonDnon_G01", "AidlPercMstpSnonWnonDnon_G02", "AidlPercMstpSnonWnonDnon_G03", "AidlPercMstpSnonWnonDnon_G04", "AidlPercMstpSnonWnonDnon_G05", "AidlPercMstpSnonWnonDnon_G06"],
[2914.35,18192.9,8.51858],
88.3346
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Western Vehicle Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Vehicle",
"Exile_Trader_Vehicle",
"WhiteHead_11",
["InBaseMoves_repairVehicleKnl", "InBaseMoves_repairVehiclePne"],
[2980.19,18146.2,1.06391],
222.352
]
call ExileClient_object_trader_create;
_carWreck = "Land_Wreck_CarDismantled_F" createVehicleLocal [0,0,0];
_carWreck setDir 130.966;
_carWreck setPosATL [2978.76,18144.5,1.13293];
///////////////////////////////////////////////////////////////////////////
// Western Waste Dump Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_WasteDump",
"Exile_Trader_WasteDump",
"GreekHead_A3_01",
["HubStandingUA_move1", "HubStandingUA_move2", "HubStandingUA_idle1", "HubStandingUA_idle2", "HubStandingUA_idle3"],
[2984.05,18133.4,0.00107765],
29.3856
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Western Fast Food Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Food",
"Exile_Trader_Food",
"GreekHead_A3_01",
["AidlPercMstpSnonWnonDnon_G01", "AidlPercMstpSnonWnonDnon_G02", "AidlPercMstpSnonWnonDnon_G03", "AidlPercMstpSnonWnonDnon_G04", "AidlPercMstpSnonWnonDnon_G05", "AidlPercMstpSnonWnonDnon_G06"],
[2979.87,18184.9,2.55185],
89.2952
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Western Equipment Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Equipment",
"Exile_Trader_Equipment",
"WhiteHead_19",
["HubStanding_idle1", "HubStanding_idle2", "HubStanding_idle3"],
[2980.7,18192.9,2.49853],
130.535
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Western Armory Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Armory",
"Exile_Trader_Armory",
"PersianHead_A3_02",
["HubStanding_idle1", "HubStanding_idle2", "HubStanding_idle3"],
[2986.43,18178.5,1.66267],
296.855
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Western Guard 02
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Guard_03",
"",
"AfricanHead_03",
["InBaseMoves_patrolling1"],
[2993.2,18167,0.353821],
109.888
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Eastern Fast Food Trader
///////////////////////////////////////////////////////////////////////////
_cashDesk = "Land_CashDesk_F" createVehicleLocal [0,0,0];
_cashDesk setDir 222.727;
_cashDesk setPosATL [23353.1, 24168, 0.16585];
_microwave = "Land_Microwave_01_F" createVehicleLocal [0,0,0];
_cashDesk disableCollisionWith _microwave;
_microwave disableCollisionWith _cashDesk;
_microwave attachTo [_cashDesk, [-0.6, 0.2, 1.1]];
_ketchup = "Land_Ketchup_01_F" createVehicleLocal [0,0,0];
_cashDesk disableCollisionWith _ketchup;
_ketchup disableCollisionWith _cashDesk;
_ketchup attachTo [_cashDesk, [-0.6, 0, 1.1]];
_mustard = "Land_Mustard_01_F" createVehicleLocal [0,0,0];
_cashDesk disableCollisionWith _mustard;
_mustard disableCollisionWith _cashDesk;
_mustard attachTo [_cashDesk, [-0.5, -0.05, 1.1]];
_trader =
[
"Exile_Trader_Food",
"Exile_Trader_Food",
"GreekHead_A3_01",
["InBaseMoves_table1"],
[0.1, 0.5, 0.2],
170,
_cashDesk
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Eastern Boat Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Boat",
"Exile_Trader_Boat",
"WhiteHead_17",
["AidlPercMstpSnonWnonDnon_G01", "AidlPercMstpSnonWnonDnon_G02", "AidlPercMstpSnonWnonDnon_G03", "AidlPercMstpSnonWnonDnon_G04", "AidlPercMstpSnonWnonDnon_G05", "AidlPercMstpSnonWnonDnon_G06"],
[23296.6,24189.8,5.61213],
96
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Eastern Vehicle Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Vehicle",
"Exile_Trader_Vehicle",
"WhiteHead_11",
["InBaseMoves_repairVehicleKnl", "InBaseMoves_repairVehiclePne"],
[23385.6,24191.6,0.00136566],
123
]
call ExileClient_object_trader_create;
_carWreck = "Land_Wreck_CarDismantled_F" createVehicleLocal [0,0,0];
_carWreck setDir 47.2728;
_carWreck setPosATL [23387.3, 24190.3, 0.05];
///////////////////////////////////////////////////////////////////////////
// Eastern Hardware Trader
///////////////////////////////////////////////////////////////////////////
_workBench = "Land_Workbench_01_F" createVehicleLocal [0,0,0];
_workBench setDir 279.545;
_workBench setPosATL [23371.6, 24188, 0.89873];
_trader =
[
"Exile_Trader_Hardware",
"Exile_Trader_Hardware",
"WhiteHead_17",
["InBaseMoves_sitHighUp1"],
[0, 0, -0.5],
170,
_workBench
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Eastern Equipment Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_Equipment",
"Exile_Trader_Equipment",
"WhiteHead_19",
["HubStanding_idle1", "HubStanding_idle2", "HubStanding_idle3"],
[23379.9, 24169.3, 0.199955],
206
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Eastern Armory Trader
///////////////////////////////////////////////////////////////////////////
_chair = "Land_CampingChair_V2_F" createVehicleLocal [0,0,0];
_chair setDir 12.7272;
_chair setPosATL [23379.6, 24169.3, 4.56662];
_trader =
[
"Exile_Trader_Armory",
"Exile_Trader_Armory",
"PersianHead_A3_02",
["InBaseMoves_SittingRifle1"],
[0, -0.15, -0.45],
180,
_chair
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Eastern Waste Dump Trader
///////////////////////////////////////////////////////////////////////////
_trader =
[
"Exile_Trader_WasteDump",
"Exile_Trader_WasteDump",
"GreekHead_A3_01",
["HubStandingUA_move1", "HubStandingUA_move2", "HubStandingUA_idle1", "HubStandingUA_idle2", "HubStandingUA_idle3"],
[23336.6,24214.4,0.00115061],
346
]
call ExileClient_object_trader_create;
///////////////////////////////////////////////////////////////////////////
// Russian Roulette
///////////////////////////////////////////////////////////////////////////
[
"Exile_Trader_RussianRoulette",
"",
"GreekHead_A3_01",
["HubStandingUA_move1", "HubStandingUA_move2", "HubStandingUA_idle1", "HubStandingUA_idle2", "HubStandingUA_idle3"],
[14622.6, 16820.1, 0.126],
187.428
]
call ExileClient_object_trader_create;

View File

@ -0,0 +1,442 @@
private _objects =
[
["Land_CarService_F", [14618.7,16877.4,18.7724], [[0.750538,-0.660827,0],[0,0,1]], [false, false]],
["Land_cargo_addon02_V2_F", [14563.7,16776.6,19.4699], [[0.723738,-0.690074,0],[0,0,1]], [false, false]],
["Land_cargo_addon02_V1_F", [14619.2,16831.5,19.1926], [[-0.707107,0.707107,0],[0,0,1]], [false, false]],
["Land_ScrapHeap_1_F", [14630.3,16882.7,17.7946], [[-8.74228e-008,-1,0],[0,0,1]], [false, false]],
["Land_ScrapHeap_2_F", [14616,16869,18.1088], [[0.978803,-0.204804,0],[0,0,1]], [false, false]],
["Land_PaperBox_open_full_F", [14569.5,16763.1,17.91], [[0.29692,0.954902,0],[0,0,1]], [false, false]],
["Land_PaperBox_open_empty_F", [14563.8,16770.5,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_PaperBox_closed_F", [14563.1,16768.8,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_Basket_F", [14583.6,16778.2,17.9318], [[0,1,0],[0,0,1]], [false, false]],
["Land_Cages_F", [14573.2,16797.4,17.9346], [[-0.73996,-0.672651,0],[0,0,1]], [false, false]],
["Land_CratesPlastic_F", [14588.4,16777.7,17.9915], [[0.0713395,0.997452,0],[0,0,1]], [false, false]],
["Land_CratesShabby_F", [14587.2,16789,17.9782], [[-0.701482,-0.712687,0],[0,0,1]], [false, false]],
["Land_CratesWooden_F", [14575.3,16773.2,17.9774], [[0.67851,0.734591,0],[0,0,1]], [false, false]],
["Land_Sack_F", [14583.1,16777.7,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_Sacks_goods_F", [14592.5,16779.1,17.91], [[-0.458231,0.888833,0],[0,0,1]], [false, false]],
["Land_Sacks_heap_F", [14590.7,16784.9,17.9559], [[0,1,0],[0,0,1]], [false, false]],
["Land_StallWater_F", [14640.4,16843,17.91], [[0,1,0],[0,0,1]], [false, false]],
["CargoNet_01_barrels_F", [14589.9,16759.6,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_Pallet_F", [14594.3,16763.7,18.004], [[-0.96384,0.266481,0],[0,0,1]], [false, false]],
["Land_Pallet_vertical_F", [14581.9,16765.9,17.91], [[0.712694,0.701475,0],[0,0,1]], [false, false]],
["Land_Pallets_F", [14580.6,16768.9,17.9838], [[0,1,0],[0,0,1]], [false, false]],
["Land_Pallets_stack_F", [14581.7,16767.2,17.91], [[0.228042,0.973651,0],[0,0,1]], [false, false]],
["Land_ToolTrolley_02_F", [14586.3,16760.1,17.9957], [[-0.5865,0.80995,0],[0,0,1]], [false, false]],
["Land_WeldingTrolley_01_F", [14587.8,16755.4,17.9847], [[-0.5,0.866025,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14581.9,16798.9,16.348], [[-0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14608,16825.5,16.3968], [[-0.506846,-0.862036,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14615.5,16772.5,17.91], [[0.7127,-0.701469,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14584.1,16880.5,17.8064], [[0.745264,0.666769,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14583.7,16745.7,17.8094], [[0.712694,0.701475,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14625.5,16880.5,17.8933], [[0.666768,0.745265,0],[0,0,1]], [false, false]],
["Land_HBarrier_3_F", [14574.1,16796.2,17.7873], [[-0.624384,0.781117,0],[0,0,1]], [false, false]],
["Land_HBarrier_3_F", [14601.2,16825.7,17.3493], [[-0.684318,0.729184,0],[0,0,1]], [false, false]],
["Land_HBarrier_5_F", [14647.4,16807.7,17.9078], [[-0.936953,-0.349455,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14570.6,16788,16.327], [[0.899488,0.436945,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14601.1,16818.8,16.4033], [[0.931287,0.364287,0],[0,0,1]], [false, false]],
["Exile_Sign_Aircraft", [14593.7,16753.7,17.8762], [[-0.690074,-0.723738,0],[0,0,1]], [false, false]],
["Exile_Sign_Armory", [14567,16763.8,17.91], [[-0.690074,-0.723738,0],[0,0,1]], [false, false]],
["Exile_Sign_Equipment", [14573.4,16758.3,17.8331], [[-0.0475771,-0.998868,0],[0,0,1]], [false, false]],
["Exile_Sign_Food", [14591.4,16777.4,17.91], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Exile_Sign_SpecialOperations", [14565.6,16774,17.6937], [[-0.750526,0.660841,0],[0,0,1]], [false, false]],
["Exile_Sign_Hardware", [14588.9,16756.8,17.8212], [[0.984808,-0.173646,0],[0,0,1]], [false, false]],
["Exile_Sign_Vehicles", [14610.1,16872.5,18.1622], [[0.745267,-0.666767,0],[0,0,1]], [false, false]],
["Land_CampingTable_F", [14567.6,16766.2,17.91], [[0.0554972,0.998459,0],[0,0,1]], [false, false]],
["Land_Icebox_F", [14589.6,16776.7,17.91], [[0.660837,0.75053,0],[0,0,1]], [false, false]],
["Land_Metal_rack_Tall_F", [14575.7,16759.5,17.9909], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Land_Metal_rack_F", [14564.1,16772.7,17.9716], [[-0.766044,0.642788,0],[0,0,1]], [false, false]],
["Fridge_01_closed_F", [14588.9,16775,17.9246], [[0.718236,-0.6958,0],[0,0,1]], [false, false]],
["Land_WaterCooler_01_new_F", [14584,16777.7,17.91], [[-0.66084,-0.750526,0],[0,0,1]], [false, false]],
["MapBoard_altis_F", [14569.3,16776.3,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_WoodenTable_large_F", [14567.5,16775.3,17.9819], [[-0.750538,-0.660827,0],[0,0,1]], [false, false]],
["Land_ShelvesMetal_F", [14593.7,16780.7,17.91], [[0.701469,-0.7127,0],[0,0,1]], [false, false]],
["Land_ShelvesMetal_F", [14592.3,16782.2,17.91], [[0.701469,-0.7127,0],[0,0,1]], [false, false]],
["Land_Pallet_MilBoxes_F", [14565.7,16767.3,17.91], [[0.605613,-0.795759,0],[0,0,1]], [false, false]],
["Land_OfficeChair_01_F", [14598.3,16776.1,22.9791], [[0.266473,0.963842,0],[0,0,1]], [false, false]],
["Land_OfficeCabinet_01_F", [14600.3,16776.2,22.9749], [[0.660835,0.750531,0],[0,0,1]], [false, false]],
["OfficeTable_01_new_F", [14597.7,16775.2,22.9468], [[-0.678506,-0.734595,0],[0,0,1]], [false, false]],
["MapBoard_seismic_F", [14602.1,16773.7,23.005], [[0.980397,0.197035,0],[0,0,1]], [false, false]],
["Land_Document_01_F", [14597.9,16775,23.8386], [[-0.755751,-0.654859,0],[0,0,1]], [false, false]],
["Land_FlatTV_01_F", [14594,16774,23.9797], [[-0.678506,0.734595,0],[0,0,1]], [false, false]],
["Land_GamingSet_01_controller_F", [14594.1,16773.7,23.9649], [[-0.857984,0.513676,0],[0,0,1]], [false, false]],
["Land_GamingSet_01_console_F", [14594,16773.9,23.6192], [[-0.745267,0.666767,0],[0,0,1]], [false, false]],
["Land_GamingSet_01_camera_F", [14594.2,16774,23.9755], [[-0.701469,0.7127,0],[0,0,1]], [false, false]],
["Land_Laptop_device_F", [14597.4,16775.3,23.8317], [[0.828149,0.560507,0],[0,0,1]], [false, false]],
["Land_ShelvesWooden_F", [14594.1,16773.9,22.9312], [[0.750531,0.660835,0],[0,0,1]], [false, false]],
["Target_PopUp3_Moving_90deg_Acc2_NoPop_F", [14575,16771.4,17.8809], [[0.274112,0.961698,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_04_F", [14573.5,16758.3,17.91], [[-0.65486,-0.755751,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_02_F", [14570.4,16760.9,17.91], [[-0.527223,0.849727,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_03_F", [14576,16760.6,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_01_F", [14570.7,16762.6,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_05_F", [14623.8,16912.5,18.1785], [[0,1,0],[0,0,1]], [false, false]],
["Land_DieselGroundPowerUnit_01_F", [14619.6,16885.6,17.8383], [[-0.243463,-0.96991,0],[0,0,1]], [false, false]],
["Land_JetEngineStarter_01_F", [14591.7,16755.2,17.834], [[-0.701469,-0.7127,0],[0,0,1]], [false, false]],
["CargoNet_01_barrels_F", [14612,16875.3,17.8549], [[0,1,0],[0,0,1]], [false, false]],
["Land_Shed_Small_F", [14601.9,16918.3,18.0289], [[0.7127,-0.701469,0],[0,0,1]], [false, false]],
["Land_Factory_Conv1_Main_F", [14615.2,16905.2,18.3696], [[-0.690074,-0.723738,0],[0,0,1]], [false, false]],
["Land_FishingGear_01_F", [14621.9,16912.1,17.9848], [[0,1,0],[0,0,1]], [false, false]],
["Land_FishingGear_02_F", [14622.3,16915.5,18.0652], [[-0.836936,-0.547301,0],[0,0,1]], [false, false]],
["Land_Garbage_square3_F", [14627.8,16914.7,18.1934], [[0,1,0],[0,0,1]], [false, false]],
["Land_GarbageBags_F", [14622.5,16909.9,17.979], [[0,1,0],[0,0,1]], [false, false]],
["Land_GarbagePallet_F", [14625.1,16910.1,18.1012], [[0,1,0],[0,0,1]], [false, false]],
["Land_GarbageWashingMachine_F", [14626.6,16912.8,18.2042], [[0,1,0],[0,0,1]], [false, false]],
["Land_JunkPile_F", [14619.5,16914.1,17.9703], [[-0.243463,-0.96991,0],[0,0,1]], [false, false]],
["Land_Tyres_F", [14625,16914.9,18.1344], [[-0.989821,0.142318,0],[0,0,1]], [false, false]],
["Land_GarbageContainer_open_F", [14611.5,16911.7,17.8476], [[-0.786051,0.618162,0],[0,0,1]], [false, false]],
["Land_GarbageContainer_closed_F", [14607.6,16908.4,17.8081], [[0,1,0],[0,0,1]], [false, false]],
["Land_Wreck_Car3_F", [14626.6,16904.6,18.0411], [[0,1,0],[0,0,1]], [false, false]],
["Land_Wreck_Offroad_F", [14632.2,16918.2,18.0913], [[-0.866025,0.5,0],[0,0,1]], [false, false]],
["Land_Wreck_Hunter_F", [14625,16923.2,18.2756], [[0,1,0],[0,0,1]], [false, false]],
["Land_Cargo_HQ_V2_F", [14531.5,16758.9,18.5278], [[0.6958,-0.718235,0],[0,0,1]], [false, false]],
["Land_Cargo_Patrol_V2_F", [14602.6,16702.8,18.07], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Exile_Sign_WasteDump", [14609.2,16898.9,18.0966], [[0.690079,0.723734,0],[0,0,1]], [false, false]],
["Exile_Sign_Office_Small", [14588.1,16772.5,17.3235], [[0.707107,0.707107,0],[0,0,1]], [false, false]],
["Exile_Sign_Office", [14596.3,16776.3,22.9992], [[-0.672664,0.739948,0],[0,0,1]], [false, false]],
["Exile_Sign_Office_Small", [14592.6,16773.2,21.9835], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Exile_Sign_Aircraft_Small", [14595.9,16765.1,17.303], [[0.745267,-0.666767,0],[0,0,1]], [false, false]],
["Exile_Cosmetic_MG", [14568,16774.8,18.0358], [[-0.999717,0.0238043,0],[0,0,1]], [false, false]],
["Exile_Cosmetic_UAV", [14567.2,16775,18.8145], [[0,1,0],[0,0,1]], [false, false]],
["Land_CampingChair_V2_F", [14567.2,16766.9,17.9948], [[-0.755751,0.654859,0],[0,0,1]], [false, false]],
["CargoNet_01_barrels_F", [14572.6,16773.2,17.91], [[-0.540637,0.841256,0],[0,0,1]], [false, false]],
["Land_PaperBox_closed_F", [14573.8,16772,17.91], [[-0.6958,0.718235,0],[0,0,1]], [false, false]],
["Land_PaperBox_open_full_F", [14579.8,16765.3,17.91], [[-0.776145,0.630554,0],[0,0,1]], [false, false]],
["Land_PaperBox_open_empty_F", [14578.4,16766.9,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_CanisterPlastic_F", [14578.4,16765.7,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_Suitcase_F", [14570.1,16763.9,18.0041], [[0.228042,0.973651,0],[0,0,1]], [false, false]],
["Land_Bricks_V1_F", [14583.1,16751.1,17.91], [[-0.739948,0.672664,0],[0,0,1]], [false, false]],
["Land_Bricks_V2_F", [14582.1,16752.1,17.91], [[0.666769,0.745264,0],[0,0,1]], [false, false]],
["Land_Bricks_V3_F", [14581.1,16753.2,17.91], [[-0.849727,0.527223,0],[0,0,1]], [false, false]],
["Land_Bricks_V4_F", [14580.1,16754.1,17.91], [[-0.776145,0.630554,0],[0,0,1]], [false, false]],
["Land_Pallets_stack_F", [14583.7,16753,17.91], [[0.436945,0.899488,0],[0,0,1]], [false, false]],
["Land_ToolTrolley_01_F", [14577.9,16756.1,18.0186], [[0.718236,-0.6958,0],[0,0,1]], [false, false]],
["Land_GasTank_02_F", [14579.1,16754.6,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_WheelCart_F", [14583.9,16761.7,18.0116], [[0.776145,-0.630554,0],[0,0,1]], [false, false]],
["Land_WoodenBox_F", [14581.8,16754.2,17.91], [[0.624376,0.781124,0],[0,0,1]], [false, false]],
["Land_MobileLandingPlatform_01_F", [14597.3,16744.1,17.91], [[0,1,0],[0,0,1]], [false, false]],
["Land_Tyre_F", [14604.2,16879.2,17.8345], [[0,1,0],[0,0,1]], [false, false]],
["Land_Tyre_F", [14604.3,16875.8,17.8348], [[0,1,0],[0,0,1]], [false, false]],
["Land_Tyre_F", [14607.1,16879,17.8408], [[0.408185,0.912899,0],[0,0,1]], [false, false]],
["Land_Tyre_F", [14607.2,16876.2,17.8425], [[0,1,0],[0,0,1]], [false, false]],
["Land_Tyres_F", [14610.8,16871.7,17.7035], [[0,1,0],[0,0,1]], [false, false]],
["Land_CanisterOil_F", [14604.4,16878.3,17.8351], [[-0.973651,0.228045,0],[0,0,1]], [false, false]],
["Land_CarBattery_02_F", [14603.8,16878.7,17.8335], [[-0.493107,0.869969,0],[0,0,1]], [false, false]],
["Exile_Sign_VehicleCustoms", [14619.4,16888.2,17.7657], [[0.999497,-0.0317282,0],[0,0,1]], [false, false]],
["Oil_Spill_F", [14616.5,16887.6,17.8505], [[0,1,0],[0,0,1]], [false, false]],
["Land_KartTrolly_01_F", [14620.2,16889.6,17.8613], [[0.599278,0.800541,0],[0,0,1]], [false, false]],
["Land_BucketNavy_F", [14619.1,16888.6,18.6619], [[-0.96991,0.243463,0],[0,0,1]], [false, false]],
["Land_Bucket_painted_F", [14619.1,16889.1,18.6544], [[0,1,0],[0,0,1]], [false, false]],
["Land_ButaneCanister_F", [14618.9,16889,18.6736], [[0.971813,-0.235753,0],[0,0,1]], [false, false]],
["Land_CanisterFuel_F", [14616.8,16887.3,17.8632], [[-0.853878,0.520473,0],[0,0,1]], [false, false]],
["Land_CanisterPlastic_F", [14619,16889.5,17.8661], [[0.0950563,0.995472,0],[0,0,1]], [false, false]],
["Land_CarBattery_02_F", [14618.8,16887.6,18.6544], [[-0.513676,0.857984,0],[0,0,1]], [false, false]],
["Land_CarBattery_01_F", [14619.1,16887.7,18.6718], [[0.975431,-0.220306,0],[0,0,1]], [false, false]],
["Land_CampingTable_F", [14618.9,16888.3,17.8579], [[0.997452,-0.071339,0],[0,0,1]], [false, false]],
["Land_CampingChair_V1_folded_F", [14618.8,16886.3,17.8601], [[0.76092,0.648845,0],[0,0,1]], [false, false]],
["Land_CampingChair_V1_F", [14617.8,16886.5,17.8559], [[0.281739,-0.959491,0],[0,0,1]], [false, false]],
["Land_GasTank_01_yellow_F", [14620.2,16889.6,17.9821], [[0,1,0],[0,0,1]], [false, false]],
["Land_Garbage_square5_F", [14607.2,16899.9,17.8199], [[0,1,0],[0,0,1]], [false, false]],
["Land_GarbageBarrel_01_F", [14610,16902.2,17.83], [[0,1,0],[0,0,1]], [false, false]],
["Land_WheelieBin_01_F", [14608.6,16899.1,17.8244], [[0.766044,0.642788,0],[0,0,1]], [false, false]],
["Land_cargo_house_slum_ruins_F", [14629.2,16910.5,18.1699], [[-0.866025,0.5,0],[0,0,1]], [false, false]],
["Exile_Sign_TraderCity", [14554.8,16906.4,17.6393], [[0.739948,-0.672664,0],[0,0,1]], [false, false]],
["Land_FuelStation_Build_F", [14624.3,16894.8,17.8827], [[0.952516,0.304487,0],[0,0,1]], [false, false]],
["Land_FuelStation_Sign_F", [14621.4,16898.1,17.8708], [[0,1,0],[0,0,1]], [false, false]],
["Land_FuelStation_Feed_F", [14619.2,16895.9,17.8569], [[-0.96991,-0.243463,0],[0,0,1]], [false, false]],
["Exile_Sign_SpecialOperations_Small", [14573,16774.7,17.3007], [[-0.729183,-0.684318,0],[0,0,1]], [false, false]],
["Exile_Sign_Equipment_Small", [14579.5,16768.1,17.3113], [[-0.701469,-0.7127,0],[0,0,1]], [false, false]],
["Exile_Sign_Armory_Small", [14576.5,16771.2,17.3145], [[-0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Exile_Sign_Hardware_Small", [14584.4,16763.2,17.3163], [[-0.684318,-0.729184,0],[0,0,1]], [false, false]],
["Land_HBarrier_3_F", [14564.3,16928.2,16.9611], [[-0.0792423,0.996855,0],[0,0,1]], [false, false]],
["Land_HBarrier_5_F", [14569.5,16924.4,17.0527], [[-0.881452,-0.472274,0],[0,0,1]], [false, false]],
["Land_HBarrier_Big_F", [14561.6,16922.1,16.1608], [[0.695799,0.718237,0],[0,0,1]], [false, false]],
["Land_HBarrier_1_F", [14560.4,16927.6,16.7264], [[0.684316,0.729186,0],[0,0,1]], [false, false]],
["Land_BagFence_Round_F", [14567.3,16928,17.4047], [[-0.422618,-0.906308,0],[0,0,1]], [false, false]],
["Land_BagFence_Short_F", [14561.8,16928.2,17.1708], [[0.258819,-0.965926,0],[0,0,1]], [false, false]],
["Land_BagFence_Long_F", [14568.6,16921.7,17.3641], [[0.5473,-0.836936,0],[0,0,1]], [false, false]],
["Land_CampingTable_small_F", [14567.9,16923.5,17.4895], [[0,1,0],[0,0,1]], [false, false]],
["Land_CampingChair_V1_F", [14567.8,16925,17.458], [[0,1,0],[0,0,1]], [false, false]],
["Land_CampingChair_V1_folded_F", [14567.4,16922.3,17.5057], [[0,1,0],[0,0,1]], [false, false]],
["Land_TentDome_F", [14562.4,16925.7,17.279], [[0,1,0],[0,0,1]], [false, false]],
["Land_Sleeping_bag_F", [14566.6,16925.9,17.4279], [[0.444066,0.895994,0],[0,0,1]], [false, false]],
["Land_WoodPile_F", [14562.7,16923.1,17.3408], [[-0.712699,0.701469,0],[0,0,1]], [false, false]],
["Land_Sleeping_bag_folded_F", [14567.1,16926.9,17.414], [[0,1,0],[0,0,1]], [false, false]],
["Exile_Sign_AircraftCustoms", [14634.8,16792.4,17.7303], [[-0.712699,0.701469,0],[0,0,1]], [false, false]],
["Exile_Sign_AircraftCustoms_Small", [14633.2,16800.4,17.2345], [[0.599275,-0.800543,0],[0,0,1]], [false, false]],
["Exile_Sign_AircraftCustoms_Small", [14614.6,16799.5,17.3016], [[0.718238,0.695798,0],[0,0,1]], [false, false]],
["Land_DischargeStick_01_F", [14636,16792.6,18.786], [[0.809949,0.586501,0],[0,0,1]], [false, false]],
["Land_RotorCoversBag_01_F", [14635.5,16792.5,17.9643], [[-0.37902,0.925388,0],[0,0,1]], [false, false]],
["Land_Bucket_clean_F", [14635.3,16792.2,18.8025], [[0.047582,0.998867,0],[0,0,1]], [false, false]],
["Land_Bucket_painted_F", [14635.5,16792.6,18.7872], [[0,1,0],[0,0,1]], [false, false]],
["Land_FireExtinguisher_F", [14634.8,16792,18.0244], [[0,1,0],[0,0,1]], [false, false]],
["Land_FoodContainer_01_F", [14636.3,16793.2,18.0186], [[0,1,0],[0,0,1]], [false, false]],
["Land_SatellitePhone_F", [14636.3,16793.1,18.7921], [[0,1,0],[0,0,1]], [false, false]],
["Land_CampingChair_V1_F", [14634.3,16791.2,18.0009], [[-0.472274,0.881452,0],[0,0,1]], [false, false]],
["Land_CampingTable_F", [14635.8,16792.6,17.9868], [[0.65486,-0.755751,0],[0,0,1]], [false, false]],
["Land_AirIntakePlug_01_F", [14633.9,16790.4,18.015], [[-0.592913,0.805266,0],[0,0,1]], [false, false]],
["Land_CncBarrier_stripes_F", [14576.7,16799.3,17.8796], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Land_CncBarrier_stripes_F", [14570.7,16794.1,17.8947], [[0.750526,-0.66084,0],[0,0,1]], [false, false]],
["Land_HBarrier_5_F", [14643.4,16803.9,17.4603], [[-0.00792382,0.999969,0],[0,0,1]], [false, false]],
["Land_CncBarrier_stripes_F", [14629.2,16793,17.8947], [[0.7127,-0.701469,0],[0,0,1]], [false, false]],
["Land_CncBarrier_stripes_F", [14602.7,16766.3,17.8947], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Land_CncBarrier_stripes_F", [14588.2,16750.6,17.8947], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Land_Pier_Box_F", [14673.6,16798.4,22.6626], [[0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Land_Pier_Box_F", [14577.1,16723.9,22.6626], [[-0.707107,-0.707107,0],[0,0,1]], [false, false]],
["Land_Bunker_F", [14665.2,16788.9,18.5132], [[0.707107,0.707107,0],[0,0,1]], [false, false]],
["Land_Cargo40_military_green_F", [14584.4,16715.4,17.8215], [[-0.701469,0.7127,0],[0,0,1]], [false, false]],
["Land_Cargo20_grey_F", [14582.7,16707.1,17.8627], [[0,1,0],[0,0,1]], [false, false]],
["Land_Cargo10_grey_F", [14576,16704.8,17.8678], [[-0.952518,0.304482,0],[0,0,1]], [false, false]],
["Land_CampingTable_F", [2987.45,18180.5,1.21957], [[0.909632,0.415416,0],[0,0,1]], [false, false]],
["Land_ToolTrolley_01_F", [2980.77,18144.4,1.13856], [[-0.781129,0.62437,0],[0,0,1]], [false, false]],
["CargoNet_01_barrels_F", [2987.87,18182.6,1.26298], [[0,1,0],[0,0,1]], [false, false]],
["Land_ShelvesMetal_F", [2979.66,18187.6,1.2162], [[-0.997987,-0.0634173,0],[0,0,1]], [false, false]],
["Land_FishingGear_02_F", [2980.34,18124.5,1.2076], [[0,1,0],[0,0,1]], [false, false]],
["Land_Basket_F", [2979.97,18184,1.26116], [[0,1,0],[0,0,1]], [false, false]],
["Land_CratesWooden_F", [2992.38,18156.2,1.11772], [[-0.371659,0.928369,0],[0,0,1]], [false, false]],
["Land_Sacks_goods_F", [2979.18,18186,1.15971], [[0.999213,-0.0396557,0],[0,0,1]], [false, false]],
["Land_Sacks_heap_F", [2985.09,18169.8,1.16568], [[-0.055508,0.998458,0],[0,0,1]], [false, false]],
["Land_Cages_F", [2989.92,18190.5,1.14397], [[-0.0634176,0.997987,0],[0,0,1]], [false, false]],
["Land_GarbageContainer_closed_F", [2997.02,18195.1,1.12749], [[-0.999477,0.0323354,0],[0,0,1]], [false, false]],
["Land_CratesPlastic_F", [2979.2,18176.3,1.27247], [[0.690079,0.723734,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_04_F", [2980.07,18194.2,1.24447], [[-0.65486,-0.755751,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_02_F", [2979.48,18192.2,1.35571], [[-0.527223,0.849727,0],[0,0,1]], [false, false]],
["Land_GarbagePallet_F", [2978.46,18135.3,1.14171], [[0.356886,0.934148,0],[0,0,1]], [false, false]],
["Land_Cargo10_orange_F", [2997.76,18202,1.13367], [[0.356886,0.934148,0],[0,0,1]], [false, false]],
["Land_LampHarbour_F", [2972.09,18193.3,1.14308], [[0.997987,-0.0634245,0],[0,0,1]], [false, false]],
["MapBoard_altis_F", [2988.21,18186.6,1.23654], [[0.869969,-0.493107,0],[0,0,1]], [false, false]],
["Land_GarbageContainer_closed_F", [2980.93,18135.9,1.13155], [[0.996195,0.0871558,0],[0,0,1]], [false, false]],
["Land_Tyres_F", [2982.2,18127.5,1.54287], [[0.805271,0.592907,0],[0,0,1]], [false, false]],
["Land_JunkPile_F", [2994.1,18132.6,2.20519], [[-0.0317247,-0.999497,0],[0,0,1]], [false, false]],
["Land_GarbageWashingMachine_F", [2988.89,18127,2.03828], [[0,1,0],[0,0,1]], [false, false]],
["Land_Wreck_Car_F", [2987.36,18132.2,1.48652], [[0.998458,-0.0555043,0],[0,0,1]], [false, false]],
["Land_Pier_F", [2993.46,18185.8,-1.13638], [[0.999641,-0.0267981,0],[0,0,1]], [false, false]],
["Land_Pier_F", [2994.03,18144.2,-1.15465], [[0.999641,-0.0267981,0],[0,0,1]], [false, false]],
["Land_Pier_wall_F", [2952.43,18207.7,-1.17864], [[0.00793015,0.999969,0],[0,0,1]], [false, false]],
["Land_i_Shed_Ind_F", [2987.11,18179.7,1.23635], [[-0.999968,-0.00794115,0],[0,0,1]], [false, false]],
["Land_Pier_F", [2980.88,18182.9,-1.1319], [[0.999641,-0.0267981,0],[0,0,1]], [false, false]],
["Land_Pier_F", [2979.73,18141.3,-1.14254], [[0.999641,-0.0267981,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [2981.36,18148.3,1.14752], [[0.047593,0.998867,0],[0,0,1]], [false, false]],
["Land_ToolTrolley_02_F", [2983.3,18147.4,1.12305], [[-0.936947,0.349472,0],[0,0,1]], [false, false]],
["Land_Box_AmmoOld_F", [2988.01,18178.4,1.22718], [[0.479248,0.87768,0],[0,0,1]], [false, false]],
["Land_Cargo20_red_F", [2985.06,18150.5,1.04326], [[-0.916104,0.400941,0],[0,0,1]], [false, false]],
["Land_ShelvesMetal_F", [2979.71,18182.9,1.24149], [[-0.999968,0.0079407,0],[0,0,1]], [false, false]],
["Land_WaterCooler_01_new_F", [2979.31,18177.4,1.27611], [[-0.999497,0.0317244,0],[0,0,1]], [false, false]],
["Land_CrabCages_F", [2981.58,18197.4,1.18942], [[0.023804,-0.999717,0],[0,0,1]], [false, false]],
["Land_FishingGear_01_F", [2973.53,18184.7,1.18309], [[0,1,0],[0,0,1]], [false, false]],
["Land_FishingGear_02_F", [2981.87,18133,1.12165], [[-0.965926,0.258819,0],[0,0,1]], [false, false]],
["Land_CratesShabby_F", [2986.12,18166.7,1.16942], [[0.479243,-0.877682,0],[0,0,1]], [false, false]],
["Land_PaperBox_open_full_F", [2988.17,18176.8,1.2596], [[0,1,0],[0,0,1]], [false, false]],
["Land_Pallet_MilBoxes_F", [2986.39,18176.6,1.24124], [[0,1,0],[0,0,1]], [false, false]],
["Land_CratesWooden_F", [2990,18166.8,1.09873], [[-0.922356,-0.386341,0],[0,0,1]], [false, false]],
["Land_FishingGear_01_F", [2959.63,18196.6,1.11124], [[0.928369,-0.371659,0],[0,0,1]], [false, false]],
["Land_Sack_F", [2980.24,18186.9,1.13722], [[0,1,0],[0,0,1]], [false, false]],
["Land_CratesShabby_F", [2979.79,18181.2,1.07005], [[0.624375,0.781125,0],[0,0,1]], [false, false]],
["Land_Sacks_heap_F", [2979.31,18178.9,1.26949], [[-0.6958,0.718235,0],[0,0,1]], [false, false]],
["Land_GarbageBarrel_01_F", [2983.95,18128.1,1.58736], [[0.729186,0.684316,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_03_F", [2982.09,18194.6,1.21513], [[0.922356,-0.386341,0],[0,0,1]], [false, false]],
["Land_LampHarbour_F", [2989.9,18173.4,1.20945], [[0.999213,0.0396556,0],[0,0,1]], [false, false]],
["Land_LampHarbour_F", [2971.13,18156.8,1.29263], [[0.999969,-0.00793239,0],[0,0,1]], [false, false]],
["Land_LampHarbour_F", [2994.19,18129,2.5332], [[-0.0396613,0.999213,0],[0,0,1]], [false, false]],
["Land_LampHalogen_F", [2984.64,18196.4,1.03341], [[0.999213,-0.0396574,0],[0,0,1]], [false, false]],
["Land_Metal_wooden_rack_F", [2987.86,18188.8,1.19516], [[-0.999874,0.0158642,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [2986.77,18185.7,1.21864], [[-0.899489,0.436943,0],[0,0,1]], [false, false]],
["Land_Wreck_Car_F", [23338.3,24207.2,3.82129], [[-0.888833,-0.458231,0],[0,0,1]], [false, false]],
["Land_GarbageContainer_closed_F", [23340.2,24212.2,4.38752], [[-0.989821,0.142318,0],[0,0,1]], [false, false]],
["Land_Tyres_F", [23335.2,24203.3,4.14816], [[0.999717,-0.0237988,0],[0,0,1]], [false, false]],
["Land_JunkPile_F", [23338.1,24210.1,4.12724], [[-0.995471,0.0950635,0],[0,0,1]], [false, false]],
["Land_PortableLight_single_F", [23374.3,24181.1,4.86591], [[0.928369,-0.371659,0],[0,0,1]], [false, false]],
["Land_WeldingTrolley_01_F", [23380.5,24185.4,4.86897], [[-0.988662,0.150156,0],[0,0,1]], [false, false]],
["Land_Workbench_01_F", [23375.1,24185.9,4.84018], [[0.983398,-0.181463,0],[0,0,1]], [false, false]],
["Land_i_Shop_01_V1_F", [23377.8,24167.7,3.79129], [[0.885175,-0.465259,0],[0,0,1]], [false, false]],
["Land_City_4m_F", [23362.5,24196,4.09203], [[-0.479243,-0.877682,0],[0,0,1]], [false, false]],
["Land_City_4m_F", [23369.7,24192.3,3.98921], [[0.465264,0.885172,0],[0,0,1]], [false, false]],
["Land_City_Gate_F", [23366.1,24194.1,4.07551], [[0.453482,0.891266,0],[0,0,1]], [false, false]],
["Land_City_8m_F", [23378.9,24175.8,3.83947], [[0.936953,-0.349455,0],[0,0,1]], [false, false]],
["Land_Kiosk_redburger_F", [23353.2,24168.5,4.4989], [[0.666767,0.745267,0],[0,0,1]], [false, false]],
["Land_RattanTable_01_F", [23345.2,24166.1,4.31775], [[-0.134453,0.99092,0],[0,0,1]], [false, false]],
["Land_RattanTable_01_F", [23358.7,24163.5,4.26188], [[0.654861,0.755749,0],[0,0,1]], [false, false]],
["Land_RattanTable_01_F", [23345.9,24160.5,4.37509], [[0.654861,0.755749,0],[0,0,1]], [false, false]],
["Land_RattanTable_01_F", [23350.9,24161.3,4.46815], [[0.444066,0.895994,0],[0,0,1]], [false, false]],
["Land_RattanTable_01_F", [23353.3,24157.2,4.54655], [[0.197035,0.980397,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23343.4,24158.5,4.24294], [[0,1,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23360.9,24162.5,4.01765], [[0,1,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23357.6,24163.8,4.33318], [[0.415416,0.909632,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23345.1,24161.3,4.33882], [[0.371663,0.928368,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23346.4,24166.2,4.35115], [[0.181463,-0.983398,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23346.7,24159.8,4.4097], [[-0.553915,-0.832573,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23354.3,24158.9,4.57206], [[0.729184,-0.684318,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23349.9,24161.8,4.44282], [[0.319561,0.947566,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23350.5,24158.9,4.39606], [[-0.922356,0.386341,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23353,24156.2,4.46134], [[-0.999968,0.0079407,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23344.2,24166.5,4.30126], [[0.349463,0.93695,0],[0,0,1]], [false, false]],
["Land_Sunshade_04_F", [23345.3,24165.6,4.30477], [[0,1,0],[0,0,1]], [false, false]],
["Land_Sunshade_04_F", [23354.2,24157.4,4.57845], [[-0,1,0],[0,0,1]], [false, false]],
["Land_Sunshade_04_F", [23345.2,24160.1,4.36116], [[0,1,0],[0,0,1]], [false, false]],
["Land_CarService_F", [23376.2,24188.7,4.36585], [[-0.165822,-0.986156,0],[0,0,1]], [false, false]],
["Land_RattanTable_01_F", [23366.3,24170.3,4.11357], [[0.654861,0.755749,0],[0,0,1]], [false, false]],
["Land_RattanTable_01_F", [23362,24173.5,4.2566], [[0.654861,0.755749,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23364.9,24168.6,3.98596], [[0.415416,0.909632,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23362.8,24173.7,4.08876], [[0.415416,0.909632,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23361,24173.6,4.28424], [[0.415416,0.909632,0],[0,0,1]], [false, false]],
["Land_ChairPlastic_F", [23367.3,24169.5,4.07351], [[-0.895991,-0.444072,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23368,24174.1,4.19138], [[-0.952359,0.30498,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23342.6,24215.3,4.57967], [[0.800849,0.598866,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23382.2,24190.8,4.00731], [[0.259315,0.965793,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23341.3,24184.7,4.59291], [[0.000515055,1,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23361.5,24197.5,4.18664], [[0.750871,0.660449,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23306.9,24188.8,2.65756], [[0.0718536,0.997415,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23396.1,24199.9,5.02106], [[-0.50641,0.862293,0],[0,0,1]], [false, false]],
["Land_LampStreet_small_F", [23320.3,24187,2.64213], [[0.0243121,0.999704,0],[0,0,1]], [false, false]],
["Land_Wreck_Offroad2_F", [23368.4,24185.1,3.95543], [[-0.220306,-0.975431,0],[0,0,1]], [false, false]],
["Land_WoodenCart_F", [23342.5,24200.2,4.45953], [[0.0475834,0.998867,0],[0,0,1]], [false, false]],
["Land_FieldToilet_F", [23341.8,24174.2,4.34077], [[-0.64885,0.760916,0],[0,0,1]], [false, false]],
["Land_ToolTrolley_02_F", [23379.4,24180.5,4.85657], [[0.892443,0.451161,0],[0,0,1]], [false, false]],
["Land_Pallet_MilBoxes_F", [23378.9,24166.1,7.93425], [[0.605609,0.795762,0],[0,0,1]], [false, false]],
["Land_PaperBox_open_full_F", [23376.9,24167.2,7.94106], [[0.547297,0.836938,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [23369.5,24192,3.95235], [[0.458228,0.888835,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [23365.1,24192.5,4.03231], [[0.479248,0.87768,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [23362.8,24195.4,4.0013], [[0.486197,0.873849,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [23378.9,24177.3,3.77195], [[0.939693,-0.34202,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [23377.8,24174.1,3.79705], [[0.934148,-0.356885,0],[0,0,1]], [false, false]],
["Land_WaterCooler_01_new_F", [23356,24169.5,4.60965], [[-0.642788,-0.766044,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_03_F", [23378.9,24165.8,4.03437], [[-0.486198,0.873849,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_04_F", [23380.8,24165.3,4.05406], [[-0.65486,-0.755751,0],[0,0,1]], [false, false]],
["Land_LuggageHeap_02_F", [23378,24171.1,4.04114], [[-0.472274,0.881452,0],[0,0,1]], [false, false]],
["Land_Cargo20_military_green_F", [23347.6,24199.7,4.29847], [[0.0158654,0.999874,0],[0,0,1]], [false, false]],
["Exile_Sign_TraderCity", [2989.89,18177.6,2.61365], [[-0.999874,-0.0158642,0],[0,0,1]], [false, false]],
["Land_Factory_Conv1_Main_F", [2986.77,18130.1,2.21669], [[0.999874,0.0158662,0],[0,0,1]], [false, false]],
["Land_cmp_Shed_F", [2974.8,18129.5,1.13956], [[0.998867,-0.0475825,0],[0,0,1]], [false, false]],
["Land_cmp_Hopper_F", [2963.39,18129.7,0.0900025], [[0.0237981,0.999717,0],[0,0,1]], [false, false]],
["Land_Tank_rust_F", [2976.74,18173.8,1.16096], [[-0.999717,0.0238043,0],[0,0,1]], [false, false]],
["Land_Wreck_Traw_F", [2888.95,18107.6,-6.03909], [[-0.723738,-0.690074,0],[0,0,1]], [false, false]],
["Land_Wreck_Traw2_F", [2912.17,18124,-4.86378], [[-0.981929,-0.189249,0],[0,0,1]], [false, false]],
["Land_Cargo40_grey_F", [2999.03,18191.5,1.14093], [[0.999969,0.00793242,0],[0,0,1]], [false, false]],
["Land_Cargo40_military_green_F", [2999.4,18179.2,1.1606], [[0.997987,-0.0634245,0],[0,0,1]], [false, false]],
["Land_Cargo40_white_F", [2989.6,18163,1.04851], [[0.909632,0.415416,0],[0,0,1]], [false, false]],
["Land_Cargo20_grey_F", [2994.85,18186.4,1.14158], [[-0.952518,0.304482,0],[0,0,1]], [false, false]],
["Land_Cargo20_military_green_F", [2990.53,18177.6,1.07952], [[-0.999968,-0.00794115,0],[0,0,1]], [false, false]],
["Land_Cargo20_red_F", [2986.75,18155.3,1.11224], [[-0.00794125,-0.999968,0],[0,0,1]], [false, false]],
["Land_Cargo10_grey_F", [2997.12,18187.6,3.70366], [[0.173648,0.984808,0],[0,0,1]], [false, false]],
["Land_Pier_Box_F", [2921.94,18197.2,1.15006], [[0.0158659,0.999874,0],[0,0,1]], [false, false]],
["Land_Sea_Wall_F", [2989.66,18207.7,-1.04307], [[0.0158643,-0.999874,0],[0,0,1]], [false, false]],
["Land_PierLadder_F", [2969.61,18152.9,-1.73874], [[0.998867,0.0475807,0],[0,0,1]], [false, false]],
["Exile_Sign_WasteDump", [2983.77,18132.1,1.31246], [[-0.197041,-0.980395,0],[0,0,1]], [false, false]],
["Exile_Sign_Vehicles", [2981.34,18148.4,1.77985], [[0.0475819,0.998867,0],[0,0,1]], [false, false]],
["Land_Lighthouse_small_F", [2916.05,18200.4,1.12379], [[-0.999874,0.0158642,0],[0,0,1]], [false, false]],
["Exile_Sign_Boat", [2912.81,18194.8,0.945447], [[-0.999717,0.0238043,0],[0,0,1]], [false, false]],
["Exile_Sign_Boat_Small", [2971.94,18194.1,0.204013], [[-0.936953,-0.349455,0],[0,0,1]], [false, false]],
["Exile_Sign_Armory", [2988.82,18179.1,1.02696], [[0.999717,-0.0237971,0],[0,0,1]], [false, false]],
["Exile_Sign_Equipment", [2980.48,18195.6,0.997162], [[0,1,0],[0,0,1]], [false, false]],
["Exile_Sign_Food", [2978.52,18178.6,1.16662], [[-1,1.19249e-008,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [2977.99,18148.5,1.14459], [[0.047593,0.998867,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [2974.63,18148.7,1.14333], [[0.047593,0.998867,0],[0,0,1]], [false, false]],
["Land_CncBarrier_F", [2971.26,18148.8,1.14587], [[0.047593,0.998867,0],[0,0,1]], [false, false]],
["Land_BagFence_Round_F", [2994.5,18166,1.1572], [[-0.877682,0.479243,0],[0,0,1]], [false, false]],
["Land_HBarrier_1_F", [2992.75,18164.9,1.06276], [[0.980397,0.197035,0],[0,0,1]], [false, false]],
["Land_HBarrier_1_F", [2995.03,18167.9,1.06746], [[0,1,0],[0,0,1]], [false, false]],
["Land_HBarrier_3_F", [2998.5,18169.9,1.13225], [[-0.931285,0.364292,0],[0,0,1]], [false, false]],
["Land_LifeguardTower_01_F", [23338.1,24153.7,4.49763], [[-0.165822,0.986156,0],[0,0,1]], [false, false]],
["Land_i_Addon_04_V1_F", [23376.6,24160.4,2.46928], [[0.436945,0.899488,0],[0,0,1]], [false, false]],
["Land_Pier_small_F", [23389,24147.6,-0.137567], [[-0.251141,0.967951,0],[0,0,1]], [false, false]],
["Land_GH_House_2_F", [23333.5,24196.3,3.91706], [[0.998867,-0.0475825,0],[0,0,1]], [false, false]],
["Exile_Sign_TraderCity", [23329.3,24201.1,3.09842], [[-0.0475771,-0.998868,0],[0,0,1]], [false, false]],
["Exile_Sign_Equipment", [23381.4,24170,3.95674], [[0.47925,0.877679,0],[0,0,1]], [false, false]],
["Exile_Sign_Armory", [23378.2,24165.2,8.24169], [[-0.458231,-0.888833,0],[0,0,1]], [false, false]],
["Exile_Sign_Armory_Small", [23373.2,24165,3.11934], [[0.895991,-0.444072,0],[0,0,1]], [false, false]],
["Exile_Sign_Equipment_Small", [23376.4,24172.4,3.04409], [[0.997452,-0.071339,0],[0,0,1]], [false, false]],
["Exile_Sign_Hardware_Small", [23370.2,24180.7,3.57548], [[0.158002,0.987439,0],[0,0,1]], [false, false]],
["Exile_Sign_Hardware", [23370.9,24187.1,4.57432], [[-0.987439,0.158003,0],[0,0,1]], [false, false]],
["Exile_Sign_Vehicles", [23389.4,24185.3,4.46844], [[-0.312037,-0.95007,0],[0,0,1]], [false, false]],
["Exile_Sign_WasteDump", [23340.4,24209.8,4.49615], [[0.997987,-0.0634245,0],[0,0,1]], [false, false]],
["Exile_Sign_WasteDump_Small", [23341.3,24194.2,4.44642], [[-0.5,0.866025,0],[0,0,1]], [false, false]],
["Exile_Sign_Food_Small", [23353.6,24171.1,3.37786], [[-0.678506,-0.734595,0],[0,0,1]], [false, false]],
["Exile_Sign_Boat_Small", [23333.4,24189.1,3.19471], [[-0.916111,0.400924,0],[0,0,1]], [false, false]],
["Exile_Locker", [14618.4,16804.2,17.9974], [[0.69225,-0.721658,0],[0,0,1]], [false, false]],
["Exile_Sign_Locker", [14620,16805.8,17.91], [[0.711919,-0.702261,0],[0,0,1]], [false, false]],
["Exile_Locker", [23328.7,24200.8,4.52368], [[0,1,0],[0,0,1]], [false, false]],
["Exile_Sign_Locker", [23336.1,24199.7,4.37551], [[-1,1.19249e-008,0],[0,0,1]], [false, false]],
["Exile_Locker",[2988.82,18173.9,1.35244],[[0.999929,0.011945,0],[0,0,1]],[false,false]],
["Exile_Sign_Locker",[2984.21,18173.6,1.35244],[[0.999929,0.0118953,0],[0,0,1]],[false,false]]
];
{
private _object = (_x select 0) createVehicle [0,0,0];
_object setPosASL (_x select 1);
_object setVectorDirAndUp (_x select 2);
_object enableSimulationGlobal ((_x select 3) select 0);
_object allowDamage ((_x select 3) select 1);
} forEach _objects;
///////////////////////////////////////////////////////////////////////////////////////////////////
// Russian Roulette
///////////////////////////////////////////////////////////////////////////////////////////////////
_objects =
[
["Land_WoodenTable_large_F", [14628.171,16826.014,18.467293], 0, false],
["Exile_Sign_RussianRoulette", [14623.898,16820.336, 18.950966], 0.77240193, false],
["Land_HumanSkull_F", [14621.056, 16821.572, 18.476805], 2.0025947, false],
["Land_WheelCart_F", [14621.334,16821.477, 18.355867], 4.9935374, false],
["Land_Camping_Light_F", [14628.075,16825.77, 19.00408], 0, true]
//["Land_SportGround_fence_F", [14625.692, 16818.945, 18.791378], 0.79693103, false],
//["Land_SportGround_fence_F", [14633.911, 16816.904, 17.9177], 5.4953084, false],
//["Land_CargoBox_V1_F", [14619.726, 16823.613, 18.75972], 5.4931207, false],
];
{
private ["_object"];
_object = (_x select 0) createVehicle [0,0,0];
_object setDir (deg (_x select 2));
_object setPosWorld (_x select 1);
_object allowDamage false;
_object enableSimulation (_x select 3);
_object enableSimulationGlobal (_x select 3);; // :)
}
forEach _objects;
ExileRouletteChairs = [];
ExileRouletteChairPositions =
[
[[14627.052, 16826.611, 18.004343], 4.9010592],
[[14629.161, 16826.707, 18.004343], 1.3332222],
[[14628.180, 16824.557, 18.004343], 3.1448042],
[[14628.123, 16827.488, 18.004343], 0],
[[14629.184, 16825.537, 18.034342], 1.7944603],
[[14627.175, 16825.453, 18.004343], 4.4050193]
];
{
private ["_chair"];
_chair = "Exile_RussianRouletteChair" createVehicle [0, 0, 0];
_chair setDir (deg (_x select 1));
_chair setPosWorld (_x select 0);
_chair allowDamage false;
_chair enableSimulationGlobal true;
ExileRouletteChairs pushBack _chair;
}
forEach ExileRouletteChairPositions;
///////////////////////////////////////////////////////////////////////////////////////////////////
// Concrete Mixers
///////////////////////////////////////////////////////////////////////////////////////////////////
_concreteMixers =
[
[[14354.0, 18960.1, 36.9597], 35], // athira
[[18309.4, 15575.0, 48.8194], 90], // charkia
[[11391.2, 14259.5, 21.2141], -40] // alikampos
];
{
_concreteMixer = "Exile_ConcreteMixer" createVehicle (_x select 0);
_concreteMixer setDir (_x select 1);
_concreteMixer setPosASL (_x select 0);
_concreteMixer allowDamage false;
_concreteMixer enableSimulationGlobal true;
}
forEach _concreteMixers;

View File

@ -0,0 +1,245 @@
/**
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
*/
private ["_objectStorage", "_staticObjectTemplates"];
/*
// Preload camery settings
waitUntil { preloadCamera [29549.7,1508.77,189.029] };
// Remember what we have instanciated, so we can clean up a bit
_objectStorage = [];
// Static objects for the scene
_staticObjectTemplates =
[
["Land_Pier_F",[29566.7,1512.72,186.76],182.273,0,0,false],
["Land_Pier_wall_F",[29566.6,1560.03,186.705],1.36361,0,0,false],
["Land_Pier_Box_F",[29539.6,1550.11,192.115],0,0,0,false],
["Land_Pier_F",[29596.6,1533.61,186.95],91.8181,0,0,false],
["Land_Bunker_F",[29580.4,1509.79,189.09],95.4545,0,0,false],
["Land_MilOffices_V1_F",[29600.1,1534.35,189.543],90.909,0,0,false],
["Land_Pier_Box_F",[29591.6,1507.34,200.259],95.0001,0,0,false],
["Land_Pier_F",[29562.8,1502.29,186.759],2.27276,0,0,false],
["Land_Airport_Tower_F",[29540.2,1549.9,192.079],0,0,0,false],
["Land_JetEngineStarter_01_F",[29579.3,1496.5,189.031],18.6364,0,0,false],
["Land_Radar_F",[29598.7,1561.89,191.255],8.18185,0,0,false],
["Exile_Sign_TraderCity",[29546.8,1517.4,189.039],272,0,0,false],
["Land_TTowerBig_1_F",[29592,1507.42,201.014],3.18181,0,0,false],
["Submarine_01_F",[29524.1,1476.42,176.398],147.273,0,0,false],
["C_Boat_Civil_04_F",[29562.7,1535.25,179.236],271.364,0,0,false]
];
{
private ["_staticObject"];
_staticObject = (_x select 0) createVehicleLocal [0,0,0];
_staticObject setDir (_x select 2);
_staticObject setPosATL (_x select 1);
_staticObject enableSimulation false;
_objectStorage pushBack _staticObject;
}
forEach _staticObjectTemplates;
// Create the chopper and close all doors
_chopper = "O_Heli_Transport_04_covered_F" createVehicleLocal [0,0,0];
_chopper setDir 326.364;
_chopper setPosATL [29549.7,1508.77,189.029];
_chopper enableSimulation true;
_chopper animateDoor ['Door_1_source', 0, true];
_chopper animateDoor ['Door_2_source', 0, true];
_chopper animateDoor ['Door_3_source', 0, true];
_chopper animateDoor ['Door_4_source', 0, true];
_chopper animateDoor ['Door_5_source', 0, true];
_chopper animateDoor ['Door_6_source', 0, true];
_objectStorage pushBack _chopper;
// Prisoner 1
_prisoner01 =
[
"Exile_Cutscene_Prisoner01",
"AfricanHead_01",
["Acts_AidlPsitMstpSsurWnonDnon01"],
[29552.5,1510.03,189.027],
341.323
]
call ExileClient_object_trader_create;
_objectStorage pushBack _prisoner01;
// Prisoner 2
_prisoner02 =
[
"Exile_Cutscene_Prisoner02",
"WhiteHead_03",
["InBaseMoves_HandsBehindBack1"],
[29550.4,1509.77,189.026],
45.1028
]
call ExileClient_object_trader_create;
_objectStorage pushBack _prisoner02;
// Pilot, just statnding there
_pilot =
[
"Exile_Cutscene_Pilot",
"PersianHead_A3_02",
["passendger_flatground_1_Idle_Unarmed"],
[29549.5,1512.48,189.031],
82.2734
]
call ExileClient_object_trader_create;
_objectStorage pushBack _pilot;
// Boss, treating us
_boss =
[
"Exile_Cutscene_Police01",
"GreekHead_A3_08",
["Acts_Abuse_abusing"],
[29556.3,1513.86,189.033],
88.0126
]
call ExileClient_object_trader_create;
_objectStorage pushBack _boss;
// Guard 1
_police01 =
[
"Exile_Cutscene_Police02",
"GreekHead_A3_08",
["HubStanding_idle1", "HubStanding_idle2", "HubStanding_idle3"],
[29549.4,1518,189.04],
139.341
]
call ExileClient_object_trader_create;
_objectStorage pushBack _police01;
// Guard 2
_police02 =
[
"Exile_Cutscene_Police01",
"GreekHead_A3_08",
["InBaseMoves_patrolling1"],
[29555.1,1516.7,189.038],
205.865
]
call ExileClient_object_trader_create;
_objectStorage pushBack _police02;
// And our small player fale
_player =
[
"Exile_Cutscene_Player",
"WhiteHead_01",
["Acts_Abuse_abuser"],
[29556.3,1513.86,189.033],
88.0126
]
call ExileClient_object_trader_create;
_objectStorage pushBack _player;
_player allowDamage false; // It can bleed thou
*/
// End the loading screen
endLoadingScreen;
/*
// Fade in sound
3 fadeSound 1;
cutText ["", "BLACK IN", 3];
// GOGO ! :)
_camera = "camera" camCreate (_player modelToWorld [0, 0, 10]);
_camera camSetTarget _player;
_camera cameraEffect ["EXTERNAL", "BACK TOP"];
_camera camSetRelPos [0, 0.7, 1.5];
_camera camCommand "inertia on";
_camera camCommit 1;
uiSleep 1;
_boss say ["ExileIntro01", 5];
uiSleep 3;
_boss say ["ExileIntro02", 5];
uiSleep 5;
[300] call BIS_fnc_bloodEffect;
_player setdamage 0.5;
_player setBleedingRemaining 3;
_player say ["ExileIntro10", 5];
uiSleep 1;
_boss say ["ExileIntro03", 5];
uiSleep 3;
_boss say ["ExileIntro04", 5];
uisleep 6;
_boss say ["ExileIntro05", 5];
uisleep 5;
_boss say ["ExileIntro07", 5];
_chopper engineOn true;
uisleep 3;
_boss say ["ExileIntro08", 5];
_chopper animateDoor ['Door_1_source', 1, false];
_chopper animateDoor ['Door_2_source', 1, false];
uiSleep 10;
_boss say ["ExileIntro09", 5];
// Open chopper doors
_chopper animateDoor ['Door_3_source', 1, false];
_chopper animateDoor ['Door_4_source', 1, false];
_chopper animateDoor ['Door_5_source', 1, false];
_chopper animateDoor ['Door_6_source', 1, false];
uisleep 15;
// Fade out sound and screen to black/silent
5 fadeSound 0;
titleText ["", "BLACK OUT", 5];
// Cleanup after 5 seconds
uiSleep 5;
_camera cameraEffect ["terminate","back"];
camDestroy _camera;
{
deleteVehicle _x;
}
forEach _objectStorage;
*/
ExileClientIntroIsPlaying = false;
true

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
<html>
<head>
<title>Server</title>
</head>
<body>
<h1>Dem Server Rulz</h1>
<p>Do not talk about Exile.</p>
<p>Do not talk about Exile.</p>
<p>Do not kill dem bambies.</p>
<p>Do not be a dickhead.</p>
<p>Teamspeak blah</p>
</body>
</html>

49
restartserver.bat Normal file
View File

@ -0,0 +1,49 @@
@echo off
F:
SET ARMA=f:\Arma3\Arma3_Server
::MAKE SURE ALL TASKS ARE REALLY STOPPED
echo Making sure all instances of this server have stopped
taskkill /f /fi "Windowtitle eq Administrator: ServerMonitor"
taskkill /f /fi "status eq not responding" /im bec.exe /t
taskkill /f /im bec.exe /t
taskkill /f /fi "status eq not responding" /im arma3server_SC.exe /t
taskkill /f /fi "status eq not responding" /im arma3server_HC.exe /t
taskkill /f /im arma3server_SC /t
taskkill /f /im arma3server_HC.exe /t
timeout 5
echo.
::Backing up Exile64 Database
echo Backing up Exile64 Database...
start /min "" .\backupDB64.bat
echo.
::Updating Mods and Server
echo Updating Arma and Mods
rem Start /wait /min "" ..\Arma3_Update.bat
echo.
::RESTARTING THE ARMA 3 SERVER
echo Starting ARMA 3 Server...
start "Arma3" arma3server_SC.exe "-mod=@exile;Kart;Mark;Heli;" "-servermod=@exileserver;@asm;@marma;@A3XAI;" -config=%ARMA%\@ExileServer\config.cfg -port=2302 -profiles=SC -cfg=%ARMA%\@ExileServer\basic.cfg -name=SC -autoinit -Loadmissiontomemory -hugepages
start "Arma3_HC" arma3server_HC.exe -client -connect=127.0.0.1 -password=joejer "-mod=@exile;Kart;Mark;Heli;@A3XAI_HC;@asm;" -profiles=HC -name=HC -hugepages
echo ARMA 3 Server is started
timeout 25
echo.
:: THIS RUNS THE SERVER MONITOR FOR YOU SO YOU DON'T FORGET
echo Starting Server Monitor Loop
cd /d %ARMA%
start /min "ServerMonitor" "servermonitor.bat"
echo Server Monitor has started. Have Fun
timeout 10
::FINISHED
timeout 2
@exit

29
servermonitor.bat Normal file
View File

@ -0,0 +1,29 @@
@echo off
::IMPORTANT TO NAME IT SO WE CAN KILL IT
title ServerMonitor
SET ARMA=f:\Arma3\Arma3_Server
F:
CD /d %ARMA%
:start
C:\Windows\System32\tasklist /FI "IMAGENAME eq arma3server_SC.exe" 2>NUL | C:\Windows\System32\find /I /N "arma3server_SC">NUL
if "%ERRORLEVEL%"=="0" goto loop
echo Server is not running, will be started now
timeout 10
start "" %ARMA%\restartserver.bat
echo Server started succesfully
timeout 10
exit
goto started
:loop
cls
echo Server is already running, running monitoring loop
:started
::THE 80 REFERS TO SECONDS AND HOW OFTEN IT WILL CHECK,YOU CAN SET IT TO WHATEVER YOU WANT. I JUST DONT WANT MY SERVER DOWN FOR MUCH LONGER THAN THAT!
::New error fault kill, will check for err fault and clear it and hopefully restart, a little more promise but no guarantee :)
taskkill /f /im WerFault.exe /fi "WINDOWTITLE eq Arma 3"
C:\Windows\System32\timeout /t 150
C:\Windows\System32\tasklist /FI "IMAGENAME eq arma3server_SC.exe" 2>NUL | C:\Windows\System32\find /I /N "arma3server_SC">NUL
if "%ERRORLEVEL%"=="0" goto loop
goto start

BIN
tbbmalloc.dll Normal file

Binary file not shown.