288 lines
7.9 KiB
Plaintext
Executable File
288 lines
7.9 KiB
Plaintext
Executable File
find_suitable_ammunition = {
|
|
|
|
private["_weapon","_result","_ammoArray"];
|
|
|
|
_result = false;
|
|
_weapon = _this;
|
|
_ammoArray = getArray (configFile >> "cfgWeapons" >> _weapon >> "magazines");
|
|
|
|
if (count _ammoArray > 0) then {_result = _ammoArray select 0;};
|
|
if (typeName _result == "BOOL") then {diag_log format["WAI: Cannot find magazine for weapon - %1.",_weapon];};
|
|
_result
|
|
};
|
|
|
|
wai_spawnCrate = {
|
|
private ["_pos","_crate","_mission","_offset","_type","_loot","_position","_crates"];
|
|
_crates = _this select 0;
|
|
_pos = _this select 1;
|
|
if (count _this > 2) then {
|
|
_mission = _this select 2;
|
|
};
|
|
|
|
{
|
|
_loot = _x select 0;
|
|
_type = _x select 1;
|
|
_offset = _x select 2;
|
|
|
|
_position = [(_pos select 0) + (_offset select 0), (_pos select 1) + (_offset select 1), 0];
|
|
|
|
if (count _offset > 2) then {
|
|
_position set [2, (_offset select 2)];
|
|
};
|
|
|
|
if (typeName _type == "ARRAY") then {
|
|
_type = _type call BIS_fnc_selectRandom;
|
|
};
|
|
|
|
_crate = _type createVehicle [0,0,0];
|
|
|
|
if (count _x > 3) then {
|
|
_crate setDir (_x select 3);
|
|
};
|
|
|
|
if (surfaceIsWater _position) then {
|
|
_crate setPosASL _position;
|
|
} else {
|
|
_crate setPos _position;
|
|
};
|
|
|
|
_crate setVariable ["permaLoot",true];
|
|
clearWeaponCargoGlobal _crate;
|
|
clearMagazineCargoGlobal _crate;
|
|
_crate addEventHandler ["HandleDamage", {0}];
|
|
_crate enableSimulation false;
|
|
if (!isNil "_mission") then {
|
|
((wai_mission_data select _mission) select 3) set [count ((wai_mission_data select _mission) select 3), [_crate,_loot]];
|
|
} else {
|
|
(wai_static_data select 3) set [count (wai_static_data select 3), [_crate,_loot]];
|
|
};
|
|
} count _crates;
|
|
};
|
|
|
|
wai_server_message = {
|
|
private ["_color","_params","_type"];
|
|
_type = _this select 0;
|
|
_message = _this select 1;
|
|
|
|
call {
|
|
if (wai_mission_announce == "Radio") exitWith {
|
|
RemoteMessage = ["radio",_message];
|
|
};
|
|
if (wai_mission_announce == "DynamicText") exitWith {
|
|
_color = call {
|
|
if(_type == "Easy") exitWith {"#00cc00"};
|
|
if(_type == "Medium") exitWith {"#ffff66"};
|
|
if(_type == "Hard") exitWith {"#990000"};
|
|
if(_type == "Extreme") exitWith {"#33334d"};
|
|
};
|
|
_params = ["0.40","#FFFFFF","0.60",_color,0,-.35,10,0.5];
|
|
RemoteMessage = ["dynamic_text", ["STR_CL_MISSION_ANNOUNCE",_message],_params];
|
|
};
|
|
if (wai_mission_announce == "titleText") exitWith {
|
|
RemoteMessage = ["titleText",_message];
|
|
};
|
|
};
|
|
publicVariable "RemoteMessage";
|
|
};
|
|
|
|
wai_minefield_warning = {
|
|
private ["_owner","_params"];
|
|
_owner = (owner _this);
|
|
_params = ["0","#FFFFFF","0.50","#ff3300",0,.3,10,0.5];
|
|
RemoteMessage = ["dynamic_text",["","STR_CL_MINEFIELD_WARNING"],_params];
|
|
(_owner) publicVariableClient "RemoteMessage";
|
|
};
|
|
|
|
wai_AutoClaimAlert = {
|
|
private ["_unit","_owner","_mission","_type","_message","_name"];
|
|
_unit = _this select 0;
|
|
_mission = _this select 1;
|
|
_type = _this select 2;
|
|
if (typeName _unit == "ARRAY") then {
|
|
_name = _unit select 1;
|
|
} else {
|
|
_owner = owner _unit;
|
|
_name = name _unit;
|
|
};
|
|
|
|
_message = call {
|
|
if (_type == "Start") exitWith {["STR_CL_AUTOCLAIM_ANNOUNCE",_mission,ac_delay_time];};
|
|
if (_type == "Stop") exitWith {["STR_CL_AUTOCLAIM_NOCLAIM",_mission];};
|
|
if (_type == "Return") exitWith {["STR_CL_AUTOCLAIM_RETURN",ac_timeout];};
|
|
if (_type == "Reclaim") exitWith {"STR_CL_AUTOCLAIM_RECLAIM";};
|
|
if (_type == "Claimed") exitWith {["STR_CL_AUTOCLAIM_CLAIM",_name,_mission];};
|
|
if (_type == "Unclaim") exitWith {["STR_CL_AUTOCLAIM_ABANDON",_name,_mission];};
|
|
};
|
|
|
|
if (_type == "Claimed" || _type == "Unclaim") exitWith {
|
|
RemoteMessage = ["IWAC",_message];
|
|
publicVariable "RemoteMessage";
|
|
};
|
|
|
|
RemoteMessage = ["IWAC",_message];
|
|
(_owner) publicVariableClient "RemoteMessage";
|
|
};
|
|
|
|
wai_monitor_ai_vehicles = {
|
|
private "_vehicle";
|
|
{
|
|
_vehicle = _x;
|
|
if (alive _vehicle && ({alive _x} count crew _vehicle > 0)) then {
|
|
_vehicle setVehicleAmmo 1;
|
|
_vehicle setFuel 1;
|
|
} else {
|
|
_vehicle setDamage 1;
|
|
};
|
|
} count _this;
|
|
};
|
|
|
|
wai_fnc_remove = {
|
|
{
|
|
deleteVehicle _x;
|
|
} count _this;
|
|
};
|
|
|
|
wai_remove_vehicles = {
|
|
private ["_mission","_vehicles"];
|
|
_mission = _this select 0;
|
|
_vehicles = _this select 1;
|
|
|
|
{
|
|
if (_x getVariable ["mission" + dayz_serverKey, nil] == _mission) then {
|
|
deleteVehicle _x;
|
|
};
|
|
} count _vehicles;
|
|
};
|
|
|
|
wai_remove_ai = {
|
|
{
|
|
if (_x getVariable ["mission" + dayz_serverKey, nil] == _this) then {
|
|
deleteVehicle _x;
|
|
};
|
|
} count allUnits;
|
|
};
|
|
|
|
wai_generate_vehicle_key = {
|
|
private ["_isKeyOK","_crates","_keyColor","_keyNumber","_vehicle","_crate","_keySelected","_mission","_unit","_ailist","_characterID"];
|
|
|
|
_vehicle = _this select 0;
|
|
_mission = _this select 1;
|
|
_crates = _this select 2;
|
|
|
|
if (wai_vehicle_keys == "NoVehicleKey") exitWith {
|
|
_vehicle setVariable ["CharacterID","0",true];
|
|
_vehicle setVehicleLock "unlocked";
|
|
};
|
|
|
|
_keyColor = ["Green","Red","Blue","Yellow","Black"] call BIS_fnc_selectRandom;
|
|
_keyNumber = (ceil(random 2500)) + 1;
|
|
_keySelected = format["ItemKey%1%2",_keyColor,_keyNumber];
|
|
_isKeyOK = isClass(configFile >> "CfgWeapons" >> _keySelected);
|
|
_characterID = str(getNumber(configFile >> "CfgWeapons" >> _keySelected >> "keyid"));
|
|
|
|
if !(_isKeyOK) exitWith {
|
|
_vehicle setVariable ["CharacterID","0",true];
|
|
_vehicle setVehicleLock "unlocked";
|
|
diag_log format["WAI: Failed to generate a key for vehicle %1 at mission %2",_vehicle,_mission];
|
|
};
|
|
|
|
_vehicle setVariable ["CharacterID",_characterID,true];
|
|
|
|
if (wai_vehicle_keys == "KeyinVehicle") exitWith {
|
|
_vehicle addWeaponCargoGlobal [_keySelected,1];
|
|
_vehicle setVehicleLock "unlocked";
|
|
};
|
|
if (wai_vehicle_keys == "KeyinCrate") exitWith {
|
|
_crate = (_crates select 0) select 0;
|
|
_crate addWeaponCargoGlobal [_keySelected, 1];
|
|
};
|
|
if (wai_vehicle_keys == "KeyonAI") exitWith {
|
|
_ailist = [];
|
|
{
|
|
if ((_x getVariable ["mission" + dayz_serverKey,nil] == _mission) && (_x getVariable ["bodyName",nil] == "mission_ai") && !(_x getVariable ["noKey", false])) then {
|
|
_ailist set [count _ailist, _x];
|
|
};
|
|
} count allDead;
|
|
|
|
_unit = _ailist call BIS_fnc_selectRandom;
|
|
_unit addWeapon _keySelected;
|
|
|
|
if(wai_debug_mode) then {
|
|
diag_log format["There are %1 Dead AI for mission %2 vehicle key",_ailist,_mission];
|
|
diag_log format["Key added to %1 for vehicle %2",_unit,_vehicle];
|
|
};
|
|
};
|
|
};
|
|
|
|
wai_completion_check = {
|
|
private ["_completionType","_complete","_position","_mission","_killpercent","_objectivetarget"];
|
|
|
|
_mission = _this select 0;
|
|
_completionType = _this select 1;
|
|
_killpercent = _this select 2;
|
|
_position = _this select 3;
|
|
_complete = false;
|
|
|
|
call
|
|
{
|
|
if (_completionType select 0 == "crate") exitWith {
|
|
|
|
if(wai_kill_percent == 0) then {
|
|
_complete = [_position,20] call isNearPlayer;
|
|
} else {
|
|
if(((wai_mission_data select _mission) select 0) <= _killpercent) then {
|
|
_complete = [_position,20] call isNearPlayer;
|
|
};
|
|
};
|
|
};
|
|
|
|
if (_completionType select 0 == "kill") exitWith {
|
|
if(((wai_mission_data select _mission) select 0) == 0) then {
|
|
_complete = true;
|
|
};
|
|
};
|
|
|
|
if (_completionType select 0 == "assassinate") exitWith {
|
|
_objectivetarget = _completionType select 1;
|
|
{
|
|
if !(alive _x) exitWith {_complete = true;};
|
|
} count units _objectivetarget;
|
|
};
|
|
|
|
/* no missions are using this function at the moment
|
|
if (_completionType == "resource") exitWith {
|
|
_node = _completionType select 1;
|
|
_resource = _node getVariable ["Resource", 0];
|
|
if (_resource == 0) then {
|
|
if ([_position,80] call isNearPlayer) then {
|
|
_complete = true;
|
|
} else {
|
|
_timeout = true;
|
|
};
|
|
};
|
|
}; */
|
|
};
|
|
_complete
|
|
};
|
|
|
|
wai_clean_aircraft = {
|
|
private ["_veh","_position","_group"];
|
|
_veh = _this select 0;
|
|
_position = _this select 1;
|
|
_group = _this select 2;
|
|
|
|
uiSleep 60;
|
|
deleteVehicle _veh;
|
|
|
|
while {(count (wayPoints _group)) > 0} do {
|
|
deleteWaypoint ((wayPoints _group) select 0);
|
|
};
|
|
|
|
{
|
|
deleteVehicle _x;
|
|
} count (units _group);
|
|
uiSleep 5;
|
|
deleteGroup _group;
|
|
if(wai_debug_mode) then {diag_log "WAI: Aircraft Cleaned";};
|
|
};
|