DMS_Exile/@ExileServer/addons/a3_dms/missions/static/slums.sqf
eraser1 70fae7bc44 Merry Xmas :D
* **NEW CONFIG VALUES:**

DMS_SpawnFlareOnReinforcements
DMS_MissionMarkerWinDot_Type
DMS_MissionMarkerLoseDot_Type
DMS_EnableBoxMoving
DMS_BasesToImportOnServerStart
DMS_AI_Classname
DMS_AI_AimCoef_easy
DMS_AI_AimCoef_moderate
DMS_AI_AimCoef_difficult
DMS_AI_AimCoef_hardcore
DMS_AI_EnableStamina_easy
DMS_AI_EnableStamina_moderate
DMS_AI_EnableStamina_difficult
DMS_AI_EnableStamina_hardcore
DMS_AI_destroyStaticWeapon
DMS_AI_destroyStaticWeapon_chance
DMS_ai_SupportedRandomClasses
DMS_random_non_assault_AI
DMS_random_non_MG_AI
DMS_random_non_sniper_AI
* Please check out the new config values in config.sqf to see what they
do :)
* Fixed issue with "thieves" mission (and DMS-spawned persistent
vehicles in general). Big thank you to [JamieKG from Eternal
Gamer](http://eternal-gamer.com/) and Torndeco.
* **New static mission: "slums"**
* Credit for the base goes to [William from Refugees of the
Fallen](http://refugeesofthefallen.enjin.com/)
* Spawns 2 crates at 2 different locations from a list of 5 locations.
* No AI vehicles, only infantry (introduces Close Quarters Combat)
* Added to Altis by default.
* Static bases can now be imported on server startup instead of mission
spawns. Enabled by default for saltflats and slums.
* Increased "DMS_MissionTimeoutResetRange" from 1000 to 1500.
* Removed the Navid from config (MG AI and box weapons).
* Edited panthera3_config to reduce SpawnZoneNear and TraderZoneNear
blacklists.
* Edited "blackhawkdown" and "donthasslethehoff" missions to use a
slightly different heli wreck classname.
* Increased marker circle diameter for saltflats mission to 750 meters.
* Moved "DMS_Version" variable assignment to pre-init.
* Moved Map Center and Map Radius assignments to post-init.
* Added support for 2 new optional parameters: _onMonitorStart and
_onMonitorEnd, run before and after the Mission Monitor checks the
mission, but AFTER "Mission Success State" is checked.
* Mines should now be deleted when a mission fails.
* Script optimizations for almost all functions using new command(s)
introduced in ArmA v1.54, as well as improved technique(s).
* "ExileServer_system_garbageCollector_deleteObject" is now used to
actually delete items by DMS_fnc_CleanUp.
* AI and vehicle cleanup should now be completely handled by Exile.
* Added support for mARMA logging.
* **You can now disable the movement/lifting of loot crates after the
mission is complete using "DMS_EnableBoxMoving".**
* Added some debug code to DMS_fnc_FindSafePos and
DMS_fnc_IsValidPosition (commented out by default)
* New group reinforcement type "increasing_difficulty".
* DMS_fnc_IsNearWater now checks for invalid parameter(s).
* DMS_fnc_PlayerAwardOnAIKill now checks for roadkill values AFTER
unit-defined respect/tabs.
* You can now define different marker types for mission
completion/failure using "DMS_MissionMarkerWinDot_Type" and
"DMS_MissionMarkerLoseDot_Type" respectively.
* "DMS_fnc_SetGroupBehavior" can now take a unit as parameter as well.
It will also now return true if behavior was changed, false otherwise.
* "DMS_fnc_SpawnAIGroup" and "DMS_fnc_SpawnAIGroup_MultiPos" now
supports the definition of custom gear sets.
* Improved function documentation for "DMS_fnc_SpawnAIGroup",
"DMS_fnc_SpawnAIGroup_MultiPos", and "DMS_fnc_SpawnAISoldier".
* "DMS_fnc_SpawnAISoldier" now supports multiple different random AI
class presets. This means that you can define a certain "random" class
preset, but have it select from a specially defined list that excludes
classes that you don't want.
* Added default values to certain "missionNameSpace getVariable"s in
DMS_fnc_SpawnAISoldier to prevent script errors in the event of invalid
definitions.
* Slight logic tweak/fix to DMS_fnc_TargetsKilled (it shouldn't throw
errors when there aren't any).
2015-12-24 13:45:20 -06:00

253 lines
5.7 KiB
Plaintext

/*
"slums" static mission for Altis.
Created by eraser1
Credits to "William" for creating the base.
*/
// For logging purposes
_num = DMS_MissionCount;
// Set mission side (only "bandit" is supported for now)
_side = "bandit";
_pos = [15981.6,16253.2,0];
if ([_pos,DMS_StaticMinPlayerDistance] call DMS_fnc_IsPlayerNearby) exitWith {"delay"};
// Set general mission difficulty
_difficulty = "hardcore";
// Define spawn locations for AI Soldiers. These will be used for the initial spawning of AI as well as reinforcements.
// The center spawn location is added 3 times so at least 3 AI will spawn initially at the center location, and so that future reinforcements are more likely to spawn at the center.
_AISoldierSpawnLocations =
[
[16082.4,16192,0.79],
[16072.2,16191.5,0],
[16076.5,16189.9,0],
[15941,16289.9,0.33],
[16021.3,16241.4,0.31],
[16040.2,16254.3,0.17],
[16046,16253.5,0.09],
[16065.6,16250.7,0],
[16080.2,16248.5,0],
[16098.5,16242.6,0],
[16069.4,16206.7,3.6],
[16058,16207.3,4]
];
// Create AI
_AICount = 20 + (round (random 5));
_group =
[
_AISoldierSpawnLocations+[_pos,_pos,_pos], // Pass the regular spawn locations as well as the center pos 3x
_AICount,
_difficulty,
"random",
_side
] call DMS_fnc_SpawnAIGroup_MultiPos;
_staticGuns =
[
[
[15914.6,16284.2,0],
[15919.9,16271.2,0],
[16087.8,16229.4,1.4],
[16088.7,16192.4,0.15],
[16100.4,16225.1,0],
[16019.2,16216.5,2.93]
],
_group,
"assault",
_difficulty,
"bandit",
"random"
] call DMS_fnc_SpawnAIStaticMG;
// Define the classnames and locations where the crates can spawn (at least 2, since we're spawning 2 crates)
_crateClasses_and_Positions =
[
[[16018,16210,0.61],"I_CargoNet_01_ammo_F"],
[[15916,16262,0],"I_CargoNet_01_ammo_F"],
[[15975,16223.5,0.2],"I_CargoNet_01_ammo_F"],
[[16014,16242.5,4.5],"I_CargoNet_01_ammo_F"],
[[16026,16226.5,0.72],"I_CargoNet_01_ammo_F"]
];
{
deleteVehicle (nearestObject _x); // Make sure to remove any previous crates.
} forEach _crateClasses_and_Positions;
// Shuffle the list
_crateClasses_and_Positions = _crateClasses_and_Positions call ExileClient_util_array_shuffle;
// Create Crates
_crate0 = [_crateClasses_and_Positions select 0 select 1, _crateClasses_and_Positions select 0 select 0] call DMS_fnc_SpawnCrate;
_crate1 = [_crateClasses_and_Positions select 1 select 1, _crateClasses_and_Positions select 1 select 0] call DMS_fnc_SpawnCrate;
// Disable smoke on the crates so that the players have to search for them >:D
{
_x setVariable ["DMS_AllowSmoke", false];
} forEach [_crate0,_crate1];
/*
// Don't think an armed AI vehicle fit the idea behind the mission. You're welcome to uncomment this if you want.
_veh =
[
[
[_pos,100,random 360] call DMS_fnc_SelectOffsetPos,
_pos
],
_group,
"assault",
_difficulty,
_side
] call DMS_fnc_SpawnAIVehicle;
*/
// Define mission-spawned AI Units
_missionAIUnits =
[
_group // We only spawned the single group for this mission
];
// Define the group reinforcements
_groupReinforcementsInfo =
[
[
_group, // pass the group
[
[
0, // Let's limit number of units instead...
0
],
[
100, // Maximum 100 units can be given as reinforcements.
0
]
],
[
240, // About a 4 minute delay between reinforcements.
diag_tickTime
],
_AISoldierSpawnLocations,
"random",
_difficulty,
_side,
"reinforce",
[
10, // Reinforcements will only trigger if there's fewer than 10 members left in the group
7 // 7 reinforcement units per wave.
]
]
];
// Define mission-spawned objects and loot values
_missionObjs =
[
_staticGuns, // static gun(s). Note, we don't add the base itself because it already spawns on server start.
[],
[[_crate0,[50,100,2]],[_crate1,[3,150,15]]]
];
// Define Mission Start message
_msgStart = ['#FFFF00', "A large group of mercenaries are trying to hide in some slums! They were seen stockpiling multiple crates..."];
// Define Mission Win message
_msgWIN = ['#0080ff',"Convicts have successfully rooted out the mercenaries and claimed the caches for themselves!"];
// Define Mission Lose message
_msgLOSE = ['#FF0000',"The mercenaries got spooked and left..."];
// Define mission name (for map marker and logging)
_missionName = "Slums Base";
// Create Markers
_markers =
[
_pos,
_missionName,
_difficulty
] call DMS_fnc_CreateMarker;
_circle = _markers select 1;
_circle setMarkerDir 20;
_circle setMarkerSize [150,50];
_time = diag_tickTime;
// Parse and add mission info to missions monitor
_added =
[
_pos,
[
[
"kill",
_group
],
[
"playerNear",
[_pos,100]
]
],
_groupReinforcementsInfo,
[
_time,
DMS_StaticMissionTimeOut call DMS_fnc_SelectRandomVal
],
_missionAIUnits,
_missionObjs,
[_missionName,_msgWIN,_msgLOSE],
_markers,
_side,
_difficulty,
[[],[]]
] call DMS_fnc_AddMissionToMonitor_Static;
// Check to see if it was added correctly, otherwise delete the stuff
if !(_added) exitWith
{
diag_log format ["DMS ERROR :: Attempt to set up mission %1 with invalid parameters for DMS_fnc_AddMissionToMonitor_Static! Deleting mission objects and resetting DMS_MissionCount.",_missionName];
_cleanup = [];
{
_cleanup pushBack _x;
} forEach _missionAIUnits;
_cleanup pushBack ((_missionObjs select 0)+(_missionObjs select 1));
{
_cleanup pushBack (_x select 0);
} foreach (_missionObjs select 2);
_cleanup call DMS_fnc_CleanUp;
// Delete the markers directly
{deleteMarker _x;} forEach _markers;
// Reset the mission count
DMS_MissionCount = DMS_MissionCount - 1;
};
// Notify players
[_missionName,_msgStart] call DMS_fnc_BroadcastMissionStatus;
if (DMS_DEBUG) then
{
(format ["MISSION: (%1) :: Mission #%2 started at %3 with %4 AI units and %5 difficulty at time %6",_missionName,_num,_pos,_AICount,_difficulty,_time]) call DMS_fnc_DebugLog;
};