141 lines
5.6 KiB
Plaintext
141 lines
5.6 KiB
Plaintext
params ["_convoy"];
|
|
|
|
if (KP_liberation_asymmetric_debug > 0) then {[format ["Logistic convoy %1: spawning ambush", (_convoy select 0)], "ASYMMETRIC"] call KPLIB_fnc_log;};
|
|
|
|
private _pos = [0,0,0];
|
|
|
|
switch ((_convoy select 7)) do {
|
|
case 2: {_pos = (_convoy select 3) getPos [(_convoy select 8) * 400, (_convoy select 3) getDir (_convoy select 2)]};
|
|
case 4: {_pos = (_convoy select 2) getPos [(_convoy select 8) * 400, (_convoy select 2) getDir (_convoy select 3)]};
|
|
default {[format ["Logistic convoy %1 ambush: convoy is not travelling", (_convoy select 0)], "ERROR"] call KPLIB_fnc_log;};
|
|
};
|
|
|
|
if (_pos isEqualTo [0,0,0]) exitWith {[format ["Logistic convoy %1 ambush: no position", (_convoy select 0)], "ERROR"] call KPLIB_fnc_log;};
|
|
|
|
private _roadObj = [_pos, 400, []] call BIS_fnc_nearestRoad;
|
|
if (isNull _roadObj) exitWith {
|
|
if (KP_liberation_asymmetric_debug > 0) then {[format ["Logistic convoy %1 ambush: no road near current convoy position", (_convoy select 0)], "ASYMMETRIC"] call KPLIB_fnc_log;};
|
|
KP_liberation_convoy_ambush_check = 1;
|
|
};
|
|
|
|
KP_liberation_convoy_ambush_check = 2;
|
|
KP_liberation_convoy_ambush_inProgress = true;
|
|
[0, getPos _roadObj] remoteExec ["asymm_notifications"];
|
|
|
|
private _vehicleArray = [];
|
|
for "_i" from 1 to (_convoy select 1) do {
|
|
private _veh = createVehicle [KP_liberation_truck_classname, getPos _roadObj, [], 50, "NONE"];
|
|
_veh setDir (getDir _roadObj);
|
|
{
|
|
private _damage = random 0.6;
|
|
if ((_x find "Wheel") != -1) then {
|
|
_damage = _damage + 0.6;
|
|
} else {
|
|
_damage = _damage + 0.3;
|
|
};
|
|
if (_damage > 1) then {_damage = 1.0};
|
|
_veh setHitPointDamage [_x, _damage];
|
|
} forEach ((getAllHitPointsDamage _veh) select 0);
|
|
_vehicleArray pushBack _veh;
|
|
|
|
private _driver = createVehicle [crewman_classname, getPos _veh, [], 12, "NONE"];
|
|
_driver setDamage 1;
|
|
};
|
|
if (KP_liberation_asymmetric_debug > 0) then {[format ["Logistic convoy %1 ambush: truck spawning done", (_convoy select 0)], "ASYMMETRIC"] call KPLIB_fnc_log;};
|
|
|
|
private _supplies = (_convoy select 6) select 0;
|
|
private _ammo = (_convoy select 6) select 1;
|
|
private _fuel = (_convoy select 6) select 2;
|
|
private _crateArray = [];
|
|
|
|
while {_supplies > 0} do {
|
|
private _amount = 100;
|
|
if ((_supplies / 100) < 1) then {
|
|
_amount = _supplies;
|
|
};
|
|
_supplies = _supplies - _amount;
|
|
private _crate = [KP_liberation_supply_crate, _amount, getPos _roadObj] call KPLIB_fnc_createCrate;
|
|
_crate setPos (_crate getPos [random 60, random 360]);
|
|
_crateArray pushBack [_crate];
|
|
};
|
|
|
|
while {_ammo > 0} do {
|
|
private _amount = 100;
|
|
if ((_ammo / 100) < 1) then {
|
|
_amount = _ammo;
|
|
};
|
|
_ammo = _ammo - _amount;
|
|
private _crate = [KP_liberation_ammo_crate, _amount, getPos _roadObj] call KPLIB_fnc_createCrate;
|
|
_crate setPos (_crate getPos [random 60, random 360]);
|
|
_crateArray pushBack [_crate];
|
|
};
|
|
|
|
while {_fuel > 0} do {
|
|
private _amount = 100;
|
|
if ((_fuel / 100) < 1) then {
|
|
_amount = _fuel;
|
|
};
|
|
_fuel = _fuel - _amount;
|
|
private _crate = [KP_liberation_fuel_crate, _amount, getPos _roadObj] call KPLIB_fnc_createCrate;
|
|
_crate setPos (_crate getPos [random 60, random 360]);
|
|
_crateArray pushBack [_crate];
|
|
};
|
|
if (KP_liberation_asymmetric_debug > 0) then {[format ["Logistic convoy %1 ambush: resource spawning done", (_convoy select 0)], "ASYMMETRIC"] call KPLIB_fnc_log;};
|
|
|
|
private _grp = [getPos _roadObj] call KPLIB_fnc_spawnGuerillaGroup;
|
|
|
|
private _waypoint = _grp addWaypoint [getPos _roadObj, 150];
|
|
_waypoint setWaypointType "SAD";
|
|
_waypoint setWaypointCompletionRadius 10;
|
|
_waypoint = _grp addWaypoint [getPos _roadObj, 150];
|
|
_waypoint setWaypointType "SAD";
|
|
_waypoint setWaypointCompletionRadius 10;
|
|
_waypoint = _grp addWaypoint [getPos _roadObj, 150];
|
|
_waypoint setWaypointType "SAD";
|
|
_waypoint setWaypointCompletionRadius 10;
|
|
_waypoint = _grp addWaypoint [getPos _roadObj, 150];
|
|
_waypoint setWaypointType "CYCLE";
|
|
_waypoint setWaypointCompletionRadius 10;
|
|
if (KP_liberation_asymmetric_debug > 0) then {[format ["Logistic convoy %1 ambush: guerillas spawning done", (_convoy select 0)], "ASYMMETRIC"] call KPLIB_fnc_log;};
|
|
|
|
private _waitingTime = KP_liberation_convoy_ambush_duration;
|
|
|
|
while {(({alive _x} count (units _grp)) > 0) && (_waitingTime > 0)} do {
|
|
uiSleep 1;
|
|
private _player_near = false;
|
|
{
|
|
if (((_x distance _roadObj) < 250) && (alive _x)) exitWith {_player_near = true};
|
|
} foreach allPlayers;
|
|
|
|
if !(_player_near) then {
|
|
_waitingTime = _waitingTime - 1;
|
|
};
|
|
};
|
|
if (KP_liberation_asymmetric_debug > 0) then {[format ["Logistic convoy %1 ambush: ambush finished", (_convoy select 0)], "ASYMMETRIC"] call KPLIB_fnc_log;};
|
|
|
|
KP_liberation_convoy_ambush_inProgress = false;
|
|
|
|
if ((_waitingTime <= 0) && (({alive _x} count (units _grp)) > 0)) then {
|
|
[2] remoteExec ["asymm_notifications"];
|
|
private _gain = 0;
|
|
{
|
|
if (alive _x) then {
|
|
deleteVehicle _x;
|
|
_gain = _gain + 2;
|
|
};
|
|
} forEach (units _grp);
|
|
{
|
|
if ((typeOf (_x select 0)) == KP_liberation_ammo_crate) then {
|
|
_gain = _gain + 3;
|
|
} else {
|
|
_gain = _gain + 2;
|
|
};
|
|
deleteVehicle (_x select 0);
|
|
} forEach _crateArray;
|
|
KP_liberation_guerilla_strength = KP_liberation_guerilla_strength + _gain;
|
|
if (KP_liberation_asymmetric_debug > 0) then {[format ["Logistic convoy %1 ambush: guerillas escaped", (_convoy select 0)], "ASYMMETRIC"] call KPLIB_fnc_log;};
|
|
} else {
|
|
[1] remoteExec ["asymm_notifications"];
|
|
if (KP_liberation_asymmetric_debug > 0) then {[format ["Logistic convoy %1 ambush: guerillas defeated", (_convoy select 0)], "ASYMMETRIC"] call KPLIB_fnc_log;};
|
|
};
|