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:
commit
230ea2b038
BIN
@ExileServer/addons/a3_dms.pbo
Normal file
BIN
@ExileServer/addons/a3_dms.pbo
Normal file
Binary file not shown.
BIN
@ExileServer/addons/a3_exile_occupation.pbo
Normal file
BIN
@ExileServer/addons/a3_exile_occupation.pbo
Normal file
Binary file not shown.
1
@ExileServer/addons/a3_exile_occupation/$PBOPREFIX$
Normal file
1
@ExileServer/addons/a3_exile_occupation/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
|||||||
|
x\addons\a3_exile_occupation
|
1
@ExileServer/addons/a3_exile_occupation/$PREFIX$
Normal file
1
@ExileServer/addons/a3_exile_occupation/$PREFIX$
Normal file
@ -0,0 +1 @@
|
|||||||
|
x\addons\a3_exile_occupation
|
1
@ExileServer/addons/a3_exile_occupation/PboPrefix.txt
Normal file
1
@ExileServer/addons/a3_exile_occupation/PboPrefix.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
x\addons\a3_exile_occupation
|
251
@ExileServer/addons/a3_exile_occupation/changeLog.txt
Normal file
251
@ExileServer/addons/a3_exile_occupation/changeLog.txt
Normal 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.
|
27
@ExileServer/addons/a3_exile_occupation/config.cpp
Normal file
27
@ExileServer/addons/a3_exile_occupation/config.cpp
Normal 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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
985
@ExileServer/addons/a3_exile_occupation/config.sqf
Normal file
985
@ExileServer/addons/a3_exile_occupation/config.sqf
Normal 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;
|
80
@ExileServer/addons/a3_exile_occupation/initServer.sqf
Normal file
80
@ExileServer/addons/a3_exile_occupation/initServer.sqf
Normal 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";
|
||||||
|
};
|
@ -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;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
@ -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;
|
||||||
|
};
|
@ -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];
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
@ -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";
|
||||||
|
};
|
@ -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;
|
@ -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;
|
||||||
|
};
|
@ -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;"];
|
||||||
|
};
|
@ -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;
|
@ -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;"];
|
@ -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;
|
||||||
|
|
||||||
|
};
|
@ -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;
|
||||||
|
};
|
@ -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];
|
||||||
|
};
|
||||||
|
};
|
@ -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;
|
||||||
|
};
|
||||||
|
};
|
@ -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);
|
||||||
|
};
|
@ -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;
|
||||||
|
};
|
@ -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;
|
@ -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;
|
||||||
|
|
||||||
|
|
@ -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;"];
|
@ -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
|
@ -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
|
@ -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
|
@ -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;
|
@ -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
|
@ -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
|
||||||
|
};
|
@ -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;
|
@ -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;
|
||||||
|
};
|
||||||
|
|
@ -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;
|
@ -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)];
|
||||||
|
};
|
||||||
|
};
|
@ -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;
|
||||||
|
};
|
@ -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;
|
||||||
|
};
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
||||||
|
|
||||||
|
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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
|
||||||
|
};
|
@ -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;
|
@ -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;
|
103
@ExileServer/addons/a3_exile_occupation/trader/trader1.sqf
Normal file
103
@ExileServer/addons/a3_exile_occupation/trader/trader1.sqf
Normal 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;
|
BIN
@ExileServer/addons/exile_server.pbo
Normal file
BIN
@ExileServer/addons/exile_server.pbo
Normal file
Binary file not shown.
BIN
@ExileServer/addons/exile_server_config.pbo
Normal file
BIN
@ExileServer/addons/exile_server_config.pbo
Normal file
Binary file not shown.
1
@ExileServer/addons/exile_server_config/$PREFIX$
Normal file
1
@ExileServer/addons/exile_server_config/$PREFIX$
Normal file
@ -0,0 +1 @@
|
|||||||
|
exile_server_config
|
4897
@ExileServer/addons/exile_server_config/config.cpp
Normal file
4897
@ExileServer/addons/exile_server_config/config.cpp
Normal file
File diff suppressed because it is too large
Load Diff
45
@ExileServer/basic.cfg
Normal file
45
@ExileServer/basic.cfg
Normal 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
44
@ExileServer/config.cfg
Normal 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";
|
||||||
|
};
|
||||||
|
};
|
696
@ExileServer/extDB/sql_custom_v2/exile.ini
Normal file
696
@ExileServer/extDB/sql_custom_v2/exile.ini
Normal 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
BIN
@ExileServer/extDB2.dll
Normal file
Binary file not shown.
93
@ExileServer/extdb-conf.ini
Normal file
93
@ExileServer/extdb-conf.ini
Normal 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
BIN
@asm/addons/asm.pbo
Normal file
Binary file not shown.
BIN
@asm/addons/asm.pbo.Z_Key.bisign
Normal file
BIN
@asm/addons/asm.pbo.Z_Key.bisign
Normal file
Binary file not shown.
BIN
@marma/addons/marmadebug.pbo
Normal file
BIN
@marma/addons/marmadebug.pbo
Normal file
Binary file not shown.
1
@marma/code/sqf.json
Normal file
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
14
@marma/marma-conf.ini
Normal 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
BIN
@marma/marma-debug.dll
Normal file
Binary file not shown.
BIN
@marma/marma-debug_x64.dll
Normal file
BIN
@marma/marma-debug_x64.dll
Normal file
Binary file not shown.
BIN
@marma/marma-updater.dll
Normal file
BIN
@marma/marma-updater.dll
Normal file
Binary file not shown.
BIN
@marma/marma-updater_x64.dll
Normal file
BIN
@marma/marma-updater_x64.dll
Normal file
Binary file not shown.
BIN
ASMdll.dll
Normal file
BIN
ASMdll.dll
Normal file
Binary file not shown.
BIN
ArmaServerMonitor.exe
Normal file
BIN
ArmaServerMonitor.exe
Normal file
Binary file not shown.
18
Exile Auto Start.bat
Normal file
18
Exile Auto Start.bat
Normal 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
3
OpenRecentLog.bat
Normal 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
16
Re-PBO.bat
Normal 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
BIN
arma3server_HC.exe
Normal file
Binary file not shown.
BIN
arma3server_SC.exe
Normal file
BIN
arma3server_SC.exe
Normal file
Binary file not shown.
10
asm.ini
Normal file
10
asm.ini
Normal 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
6
backupDB.bat
Normal 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
BIN
keys/a3.bikey
Normal file
Binary file not shown.
BIN
keys/exile.bikey
Normal file
BIN
keys/exile.bikey
Normal file
Binary file not shown.
BIN
mpmissions/Exile.Altis.pbo
Normal file
BIN
mpmissions/Exile.Altis.pbo
Normal file
Binary file not shown.
1
mpmissions/Exile.Altis/$PREFIX$
Normal file
1
mpmissions/Exile.Altis/$PREFIX$
Normal file
@ -0,0 +1 @@
|
|||||||
|
Exile.Altis
|
54
mpmissions/Exile.Altis/CfgExileCustomCode.cpp
Normal file
54
mpmissions/Exile.Altis/CfgExileCustomCode.cpp
Normal 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";
|
38
mpmissions/Exile.Altis/CfgRemoteExec.hpp
Normal file
38
mpmissions/Exile.Altis/CfgRemoteExec.hpp
Normal 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;
|
||||||
|
};
|
||||||
|
};
|
6330
mpmissions/Exile.Altis/config.cpp
Normal file
6330
mpmissions/Exile.Altis/config.cpp
Normal file
File diff suppressed because it is too large
Load Diff
@ -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
|
90
mpmissions/Exile.Altis/description.ext
Normal file
90
mpmissions/Exile.Altis/description.ext
Normal 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;
|
||||||
|
};
|
||||||
|
};
|
508
mpmissions/Exile.Altis/initPlayerLocal.sqf
Normal file
508
mpmissions/Exile.Altis/initPlayerLocal.sqf
Normal 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;
|
442
mpmissions/Exile.Altis/initServer.sqf
Normal file
442
mpmissions/Exile.Altis/initServer.sqf
Normal 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;
|
245
mpmissions/Exile.Altis/intro.sqf
Normal file
245
mpmissions/Exile.Altis/intro.sqf
Normal 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
|
1422
mpmissions/Exile.Altis/mission.sqm
Normal file
1422
mpmissions/Exile.Altis/mission.sqm
Normal file
File diff suppressed because it is too large
Load Diff
13
mpmissions/Exile.Altis/xm8_server_info.html
Normal file
13
mpmissions/Exile.Altis/xm8_server_info.html
Normal 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
49
restartserver.bat
Normal 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
29
servermonitor.bat
Normal 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
BIN
tbbmalloc.dll
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user