Files
DayZ-Epoch/SQF/dayz_code/system/BIS_Effects/airdestruction.sqf
icomrade 0e0a1e340f Safezone whitelist for eject/destruction fixes
This commit prevents players who destroy their vehicle in god-mode
safezones to be spared by the fixes in #2411973 and #ec7351d

Configurable variable for this change is DZE_SafeZonePosArray = [];

Update suggestion to use the stable branch of A2 OA in the changelog
2016-04-27 00:17:54 -04:00

158 lines
5.6 KiB
Plaintext

private ["_fl","_sm","_expl","_dr","_tv","_i","_wave","_splash","_velz","_v","_int","_t","_pos"];
_v=_this select 0;
_int = (fuel _v)*(8+random 2);
_t=time;
if (!isDedicated) then { //dw, particle stuff don't need run on dedicated
if (player in (crew _v)) then {
[] spawn { //kill players when their vehicle explodes since this is too difficult for ArmA on its own
_cancel = false;
{
_SZPos = _x select 0;
_radius = _x select 1;
if ((isInTraderCity || !canbuild) && {(player distance _SZPos) < _radius}) then {_cancel = true;};
} count DZE_SafeZonePosArray;
if (!_cancel) then {
player action ["Eject",vehicle player]; //eject player so I can get their gear
sleep 0.01; //don't use uisleep here
[player, "explosion"] spawn player_death;
};
};
};
_fl = "#particlesource" createVehicleLocal getPosATL _v;
_fl attachto [_v,[0,0,0],"destructionEffect2"];
_fl setParticleRandom [0.3, [1, 1, 0], [0, 0, 0], 0, 0.3, [0, 0, 0, 0], 0, 0];
_fl setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 10, 32], "", "Billboard", 1, 2, "destructionEffect2",
[0, 0, 5], 0, 10, 7.9, 0.075, [4,7,9,10], [[1, 1, 1, -1], [1, 1, 1, -1],
[1, 1, 1, -1], [1, 1, 1, -0.5], [1, 1, 1, -0]], [1,0.5], 1, 0, "", "", _v];
_fl setDropInterval 1;
_sm = "#particlesource" createVehicleLocal getPosATL _v;
_sm attachto [_v,[0,0,0],"destructionEffect1"];
_sm setParticleRandom [2, [2, 2, 0], [0, 0, 0], 0, 0.3, [0, 0, 0, 0.1], 0, 0];
_sm setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 7, 48], "", "Billboard", 1, 5, "destructionEffect1",
[0, 0, 5], 0, 10, 7.9, 0.075, [4,8,12,14], [[0.3, 0.3, 0.3, 1],
[0.45, 0.45, 0.45, 1],[0.6, 0.6, 0.6, 0.6], [0.7, 0.7, 0.7, 0.25], [1, 1, 1, 0]], [0.8,0.3,0.25], 1, 0, "", "", _v];
_sm setDropInterval 1;
}; // end of dedicated check
_i=0;
_dr=0.2;
_tv=11;
//Remove weapons/ammo to prevent explosion. Script will create its own explosions (doesnt work?)
removeallweapons _v;
if (local _v) then {_expl=createVehicle ["HelicopterExploSmall", (getPosATL _v), [], 0, "CAN_COLLIDE"];};
if (!isDedicated) then { //dw, particle stuff don't need run on dedicated
while {_i <1200 && ((velocity _v select 2)<-20 || (getPosATL _v select 2)>8) && !(alive _v) && !(isnull _v) && (getPosATL _v select 2)>1} do
{
_tv=abs(velocity _v select 0)+abs(velocity _v select 1)+abs(velocity _v select 2);
if (_tv>2) then {_dr=1/_tv} else {_dr=1};
_fl setDropInterval _dr;
_sm setDropInterval _dr;
_i=_i+1;
sleep 0.2;
};
}; // end of dedicated check
_pos=getPosATL _v;
clearVehicleInit _v;
if (!isDedicated) then { //dw, particle stuff don't need run on dedicated
deletevehicle _fl;deletevehicle _sm;
}; // end of dedicated check
if (surfaceiswater(_pos) && (_pos select 2)<9 ) then
{
if (!isDedicated) then { //dw, particle stuff don't need run on dedicated
_wave = "#particlesource" createVehicleLocal getPosATL _v;
_wave attachto [_v,[0,0,0],"destructionEffect1"];
_wave setParticleRandom [0.3, [1, 1, 0], [0.5, 0.5, 0], 0, 0.3, [0, 0, 0, 0], 0, 0];
_wave setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 12, 13,0], "", "Billboard", 1, 1.6, "destructionEffect1",
[0, 0, 0], 0, 10, 7.9, 0.075, [3,8],
[[0.7,0.8,1,0.6],[0.85,0.9,1,0.0]], [1000], 1, 0, "", "", _v];
_wave setparticlecircle [2,[0,16,0]];
_wave setDropInterval 0.0015;
_splash = "#particlesource" createVehicleLocal getPosATL _v;
_splash attachto [_v,[0,0,0],"destructionEffect1"];
_splash setParticleRandom [2, [2, 2, 0], [2, 2, 7], 0, 0.5, [0, 0, 0, 0], 0, 0];
_splash setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 13, 6, 0], "", "Billboard", 1, 4, "destructionEffect1",
[0, 0, 0], 0, 30, 7.9, 0.075, [8,15],
[[0.7,0.7,0.7,1],[1,1,1,0]], [1000], 1, 0, "", "", _v];
_splash setparticlecircle [2,[0,3,15]];
_splash setDropInterval 0.002;
sleep 0.2;
deletevehicle _wave;deletevehicle _splash;
}; // end of dedicated check
/*
if (local _v) then
{
_wreck=GetText (configFile >> "CfgVehicles" >> (typeof _v) >> "wreck");
if (_wreck!="") then
{
_pos = getpos _v;
_dir = vectordir _v;
_vecUp = vectorup _v;
_vel = velocity _v;
clearvehicleinit _v;
_crw= crew _v;
clearvehicleinit _v;
deleteVehicle _v;
_v =(_wreck) createvehicle _pos;
{_x moveincargo _v} foreach _crw;
_v setVectorDirAndUp [_dir,_vecUp];
_v setFuel 0;
_v setdamage 0;
_v setvelocity _vel;
//Send to garbage collecter so wreck can be deleted later
[_v] call BIS_GC_trashItFunc;
};
}; */
}
else
{
if (local _v) then
{
//_velx = velocity _v select 0; _velx = _velx / 4;
//_vely = velocity _v select 1; _vely = _vely / 4;
_velz=velocity _v select 2;
if (_velz>1) then {_v setvelocity [velocity _v select 0,velocity _v select 1,0]};
_expl = createVehicle ["HelicopterExploBig", [_pos select 0,_pos select 1,(_pos select 2) + 1], [], 0, "CAN_COLLIDE"];
sleep 0.05;
/*
_wreck=GetText (configFile >> "CfgVehicles" >> (typeof _v) >> "wreck");
if (_wreck!="") then
{
_pos = getpos _v;
_dir = vectordir _v;
_vecUp = vectorup _v;
_vel = velocity _v;
_crw= crew _v;
clearvehicleinit _v;
deleteVehicle _v;
_v =(_wreck) createvehicle _pos;
{_x moveincargo _v} foreach _crw;
//sleep 0.05;
_v setvelocity _vel;
//_v setPos _pos;
_v setvectordir (_dir);
_v setvectorup _vecUp;
_v setFuel 0;
_v setdamage 0;
}; */
//_v setVehicleInit format ["[this, %1, %2]spawn BIS_Effects_AirDestructionStage2",_int, _t];
//processInitCommands; //ClearvehicleInit done at end of burn script
["AirDestructionStage2", _v, _int, _t] call BIS_Effects_globalEvent;
};
};