DMS_Exile/@ExileServer/addons/a3_dms/scripts/FillCrate.sqf
eraser1 0b0c290495 Function Changes + Fixes + Comments + Logs
Added configurable distance to when cleanup will be aborted for an
object with a player nearby.

Created TargetsKilled function

Rewrite BroadCastMissionStatus (the function was doing the same thing
for each switch case except one, so I just put that in a select
statement)

Created function information for CleanUp.

CleanUp was using "_this" instead of "_x"

Created more/better debug info for CleanUp

Changed calling parameters for FillCrate.

Increased robustness of FillCrate.

Made FillCrate prettier

Created function information for FindSafePos

Created function information for IsPlayerNearByARRAY (deprecated)

Tweaks to MissionStatusCheck:
Created debug log for empty "DMS_Mission_Arr"
Fixed placement of index increase (otherwise deleteAt would remove
incorrect element if it existed)

Created MissionSuccessState

Created logs for RemoveMarkers

Created function information for RemoveMarkers + made it prettier

Created function information for SelectMagazine

Created TargetsKilled
2015-08-28 16:52:56 -05:00

127 lines
2.5 KiB
Plaintext

/*
DMS_FillCrate
Original credit goes to WAI: https://github.com/nerdalertdk/WICKED-AI
Edited by eraser1
Usage:
[
_crate,
[
_weapons,
_items,
_backpacks
]
] call DMS_FillCrate;
Each loot argument can be an explicitly defined array of weapons with a number to spawn, or simply a number and weapons defined in the config.sqf are used
*/
if (isNil "_this") exitWith
{
diag_log "DMS ERROR :: Calling DMS_FillCrate with nil argument!";
};
private ["_box","_lootValues","_wepCount","_weps","_itemCount","_items","_backpackCount","_backpacks","_weapon","_ammo","_item","_backpack"];
params
[
["_box",objNull,[objNull]],
["_lootValues",[0,0,0],[[]],[3]];
];
if (isNull _box) exitWith
{
diag_log format ["DMS ERROR :: Calling DMS_FillCrate with null _box | _this: %1",_this];
};
// Weapons
if(typeName (_lootValues select 0) == "ARRAY") then
{
_wepCount = (_lootValues select 0) select 0;
_weps = (_lootValues select 0) select 1;
}
else
{
_wepCount = _lootValues select 0;
_weps = DMS_boxWeapons;
};
// Items
if(typeName (_lootValues select 1) == "ARRAY") then
{
_itemCount = (_lootValues select 1) select 0;
_items = (_lootValues select 1) select 1;
}
else
{
_itemCount = _lootValues select 1;
_items = DMS_boxItems;
};
// Backpacks
if(typeName (_lootValues select 2) == "ARRAY") then
{
_backpackCount = (_lootValues select 2) select 0;
_backpacks = (_lootValues select 2) select 1;
}
else
{
_backpackCount = _lootValues select 2;
_backpacks = DMS_boxBackpacks;
};
if(DMS_DEBUG) then
{
diag_log format["DMS_DEBUG FillCrate :: Filling %4 with %1 guns, %2 items and %3 backpacks",_wepCount,_itemCount,_backpackCount,_box];
};
if ((_wepCount>0) && {count _weps>0}) then
{
// Add weapons + mags
for "_i" from 1 to _wepCount do
{
_weapon = _weps call BIS_fnc_selectRandom;
_ammo = _weapon call DMS_selectMagazine;
_box addWeaponCargoGlobal _weapon;
_box addMagazineCargoGlobal [_ammo, (2 + floor(random 3))];
};
};
if ((_itemCount > 0) && {count _items>0}) then
{
// Add items
for "_i" from 1 to _itemCount do
{
_item = _items call BIS_fnc_selectRandom;
_box addItemCargoGlobal _item;
};
};
if ((_backpackCount > 0) && {count _backpacks>0}) then
{
// Add backpacks
for "_i" from 1 to _backpackCount do
{
_backpack = _backpacks call BIS_fnc_selectRandom;
_box addBackpackCargoGlobal _backpack;
};
};
if(DMS_RareLoot && {count DMS_RareLoot>0}) then
{
// (Maybe) Add rare loot
if(random 100 < DMS_RareLootChance) then
{
_item = DMS_RareLoot call BIS_fnc_selectRandom;
_box addItemCargoGlobal _item;
};
};