diff --git a/SQF/dayz_code/actions/halo_jump.sqf b/SQF/dayz_code/actions/halo_jump.sqf new file mode 100644 index 000000000..b12198f5f --- /dev/null +++ b/SQF/dayz_code/actions/halo_jump.sqf @@ -0,0 +1,8 @@ +DZE_myHaloVehicle removeAction s_halo_action; +s_halo_action = -1; + +player action [ "eject", (vehicle player)]; +sleep 1; +player spawn BIS_fnc_halo; +player setvelocity [0,120*0.8,0]; +player setdir 0; \ No newline at end of file diff --git a/SQF/dayz_code/compile/BIS_fnc/fn_halo.sqf b/SQF/dayz_code/compile/BIS_fnc/fn_halo.sqf new file mode 100644 index 000000000..5244dc915 --- /dev/null +++ b/SQF/dayz_code/compile/BIS_fnc/fn_halo.sqf @@ -0,0 +1,355 @@ +scriptName "modules_e\Functions\objects\fn_HALO.sqf"; +sleep 0.01; + +//--- HALO ------------------------------------------------------------------------------------------------------------------------------------- +if (typename _this == typename objnull) then { + + _unit = _this; + + //--- Eject! + waituntil {(vehicle _unit) iskindof "ParachuteBase" || !isnil {_unit getvariable "bis_fnc_halo_now"}}; + if (!local _unit) exitwith {}; + + //--- Delete parachute + _parachute = vehicle _unit; + if (_parachute != _unit) then { + deletevehicle _parachute; + }; + + //--- Init + _dir = ([[0,0,0],velocity _unit] call bis_fnc_dirto); + _unit setdir _dir; + [objNull, player, rSwitchMove,"HaloFreeFall_non"] call RE; + player switchmove "HaloFreeFall_non"; + + //--- Key controls + if (_unit == player) then { + //--- PLAYER ------------------------------------------------ + + _brightness = 0.99; + _pos = position player; + _parray = [ + /* 00 */ ["\Ca\Data\ParticleEffects\Universal\Universal", 16, 12, 13, 0], + /* 01 */ "", + /* 02 */ "Billboard", + /* 03 */ 1, + /* 04 */ 3, + /* 05 */ [0,0,-200], + /* 06 */ wind, + /* 07 */ 0, + /* 08 */ 1.275, + /* 09 */ 1, + /* 10 */ 0, + /* 11 */ [100], + /* 12 */ [ + [_brightness,_brightness,_brightness,0], + [_brightness,_brightness,_brightness,0.01], + [_brightness,_brightness,_brightness,0.10], + [_brightness,_brightness,_brightness,0] + ], + /* 13 */ [1000], + /* 14 */ 0, + /* 15 */ 0, + /* 16 */ "", + /* 17 */ "", + /* 18 */ player + ]; + bis_fnc_halo_clouds = "#particlesource" createVehicleLocal _pos; + bis_fnc_halo_clouds setParticleParams _parray; + bis_fnc_halo_clouds setParticleRandom [0, [100, 100, 0], [0, 0, 0], 0, 0, [0, 0, 0, 0], 0, 1]; + bis_fnc_halo_clouds setParticleCircle [00, [00, 00, 00]]; + bis_fnc_halo_clouds setDropInterval (0.4 - (0.3 * overcast)); + + + //--- Effects + bis_fnc_halo_ppRadialBlur = ppeffectcreate ["RadialBlur",464]; + bis_fnc_halo_ppRadialBlur ppEffectAdjust [0.01,0.01,0.3,0.3]; + bis_fnc_halo_ppRadialBlur ppEffectCommit 0.01; + bis_fnc_halo_ppRadialBlur ppEffectEnable true ; + bis_fnc_halo_soundLoop = time; + playsound "BIS_HALO_Flapping"; + + bis_fnc_halo_action = _unit addaction [localize "STR_HALO_OPEN_CHUTE","ZabnMods\compile\fn_halo.sqf",[],1,true,true,"Eject"]; + + bis_fnc_halo_keydown = { + _key = _this select 1; + + //--- Forward + //if (_key in (actionkeys 'HeliForward')) then { + if (_key in (actionkeys 'MoveForward')) then { + if (bis_fnc_halo_vel < +bis_fnc_halo_velLimit) then {bis_fnc_halo_vel = bis_fnc_halo_vel + bis_fnc_halo_velAdd}; + }; + + //--- Backward + //if (_key in (actionkeys 'HeliBack')) then { + if (_key in (actionkeys 'MoveBack')) then { + if (bis_fnc_halo_vel > -bis_fnc_halo_velLimit) then {bis_fnc_halo_vel = bis_fnc_halo_vel - bis_fnc_halo_velAdd}; + }; + + //--- Left + //if (_key in (actionkeys 'HeliCyclicLeft')) then { + if (_key in (actionkeys 'TurnLeft')) then { + if (bis_fnc_halo_dir > -bis_fnc_halo_dirLimit) then {bis_fnc_halo_dir = bis_fnc_halo_dir - bis_fnc_halo_dirAdd}; + }; + + //--- Right + //if (_key in (actionkeys 'HeliCyclicRight')) then { + if (_key in (actionkeys 'TurnRight')) then { + if (bis_fnc_halo_dir < +bis_fnc_halo_dirLimit) then {bis_fnc_halo_dir = bis_fnc_halo_dir + bis_fnc_halo_dirAdd}; + }; + }; + bis_fnc_halo_keydown_eh = (finddisplay 46) displayaddeventhandler ["keydown","_this call bis_fnc_halo_keydown;"]; + + //--- Loop + bis_fnc_halo_vel = 0; + bis_fnc_halo_velLimit = 0.2; + bis_fnc_halo_velAdd = 0.03; + bis_fnc_halo_dir = 0; + bis_fnc_halo_dirLimit = 1; + bis_fnc_halo_dirAdd = 0.06; + + [] spawn { + _time = time - 0.1; + while {alive player && vehicle player == player && isnil {player getvariable "bis_fnc_halo_terminate"}} do { + + //--- FPS counter + _fpsCoef = ((time - _time) * 60) / acctime; //Script is optimized for 60 FPS + _time = time; + + bis_fnc_halo_velLimit = 0.2 * _fpsCoef; + bis_fnc_halo_velAdd = 0.03 * _fpsCoef; + bis_fnc_halo_dirLimit = 1 * _fpsCoef; + bis_fnc_halo_dirAdd = 0.06 * _fpsCoef; + + //--- Dir + bis_fnc_halo_dir = bis_fnc_halo_dir * 0.98; + _dir = direction player + bis_fnc_halo_dir; + player setdir _dir; + + //--- Velocity + _vel = velocity player; + bis_fnc_halo_vel = bis_fnc_halo_vel * 0.96; + player setvelocity [ + (_vel select 0) + (sin _dir * bis_fnc_halo_vel), + (_vel select 1) + (cos _dir * bis_fnc_halo_vel), + (_vel select 2) + ]; + + //--- Animation system + _anim = "HaloFreeFall_non"; + _v = bis_fnc_halo_vel; + _h = bis_fnc_halo_dir; + + _vLimit = 0.1; + _hLimit = 0.3; + if ((abs _v) > _vLimit || (abs _h) > _hLimit) then { + _vAnim = ""; + if (_v > +_vLimit) then {_vAnim = "F"}; + if (_v < -_vLimit) then {_vAnim = "B"}; + _hAnim = ""; + if (_h > +_hLimit) then {_hAnim = "R"}; + if (_h < -_hLimit) then {_hAnim = "L"}; + _anim = "HaloFreeFall_" + _vAnim + _hAnim; + }; + + player playmovenow _anim; + + //--- Sound + if ((time - bis_fnc_halo_soundLoop) > 4.5) then { + playsound "BIS_HALO_Flapping"; + bis_fnc_halo_soundLoop = time; + }; + + //--- Effects + bis_fnc_halo_ppRadialBlur ppEffectAdjust [0.02,0.02,0.3 - (bis_fnc_halo_vel/7)/_fpsCoef,0.3 - (bis_fnc_halo_vel/7)/_fpsCoef]; + bis_fnc_halo_ppRadialBlur ppEffectCommit 0.01; + sleep 0.01; + }; + //--- End + player removeaction bis_fnc_halo_action; + (finddisplay 46) displayremoveeventhandler ["keydown",bis_fnc_halo_keydown_eh]; + ppeffectdestroy bis_fnc_halo_ppRadialBlur; + deletevehicle bis_fnc_halo_clouds; + + bis_fnc_halo_clouds = nil; + bis_fnc_halo_vel = nil; + bis_fnc_halo_velLimit = nil; + bis_fnc_halo_velAdd = nil; + bis_fnc_halo_dir = nil; + bis_fnc_halo_dirLimit = nil; + bis_fnc_halo_dirAdd = nil; + bis_fnc_halo_action = nil; + bis_fnc_halo_keydown = nil; + bis_fnc_halo_keydown_eh = nil; + + if (!alive player) then { + [objNull, player, rSwitchMove,"adthppnemstpsraswrfldnon_1"] call RE; + player switchmove "adthppnemstpsraswrfldnon_1"; + player setvelocity [0,0,0]; + }; + }; + } else { + //--- AI ------------------------------------------------ + while {(position _unit select 2) > 100} do { + _destination = expecteddestination _unit select 0; + if (_destination distance [position _unit select 0,position _unit select 1,0] > 10) then { + _vel = velocity _unit; + _dirTo = [_unit,_destination] call bis_fnc_dirto; + if (player distance _unit > 500) then { + _unit setdir _dirTo; + }; + _unit setvelocity [ + (_vel select 0) + (sin _dirTo * 0.2), + (_vel select 1) + (cos _dirTo * 0.2), + (_vel select 2) + ]; + }; + sleep 0.01; + }; + + //--- Open + [_unit] spawn bis_fnc_halo; + }; +}; + +//--- PARA ------------------------------------------------------------------------------------------------------------------------------------- +if (typename _this == typename []) then { + + _unit = _this select 0; + if (!local _unit) exitwith {}; + + //--- Free fall + if (count _this == 2) exitwith { + _alt = _this select 1; + _unit setpos [position _unit select 0,position _unit select 1,_alt]; + _unit setvariable ["bis_fnc_halo_now",true]; + _unit spawn bis_fnc_halo; + }; + //------------- + + _para = objnull; + _vel = []; + _para = "ParachuteWest" createVehicle position _unit; + //_para = "BIS_Steerable_Parachute" createVehicle position _unit; + _para setpos position _unit; + _para setdir direction _unit; + _vel = velocity _unit; + _unit moveindriver _para; + //_unit moveingunner _para; + _para lock false; + + bis_fnc_halo_para_dirAbs = direction _para; + + //--- Key controls + if (_unit == player) then { + _para setvelocity [(_vel select 0),(_vel select 1),(_vel select 2)*1]; + + bis_fnc_halo_DynamicBlur = ppeffectcreate ["DynamicBlur",464]; + bis_fnc_halo_DynamicBlur ppEffectEnable true; + bis_fnc_halo_DynamicBlur ppEffectAdjust [8.0]; + bis_fnc_halo_DynamicBlur ppEffectCommit 0; + bis_fnc_halo_DynamicBlur ppEffectAdjust [0.0]; + bis_fnc_halo_DynamicBlur ppEffectCommit 1; + + bis_fnc_halo_para_vel = 0; + bis_fnc_halo_para_velLimit = 0.5; + bis_fnc_halo_para_velAdd = 0.01; + bis_fnc_halo_para_dir = 0; + bis_fnc_halo_para_dirLimit = 1.5; + bis_fnc_halo_para_dirAdd = 0.03; + + bis_fnc_halo_para_keydown = { + _key = _this select 1; + + //--- Forward + if (_key in (actionkeys 'MoveForward')) then { + if (bis_fnc_halo_para_vel < +bis_fnc_halo_para_velLimit) then {bis_fnc_halo_para_vel = bis_fnc_halo_para_vel + bis_fnc_halo_para_velAdd}; + }; + + //--- Backward + if (_key in (actionkeys 'MoveBack')) then { + if (bis_fnc_halo_para_vel > -bis_fnc_halo_para_velLimit*0) then {bis_fnc_halo_para_vel = bis_fnc_halo_para_vel - bis_fnc_halo_para_velAdd}; + }; + + //--- Left + if (_key in (actionkeys 'TurnLeft')) then { + if (bis_fnc_halo_para_dir > -bis_fnc_halo_para_dirLimit) then {bis_fnc_halo_para_dir = bis_fnc_halo_para_dir - bis_fnc_halo_para_dirAdd}; + }; + + //--- Right + if (_key in (actionkeys 'TurnRight')) then { + if (bis_fnc_halo_para_dir < +bis_fnc_halo_para_dirLimit) then {bis_fnc_halo_para_dir = bis_fnc_halo_para_dir + bis_fnc_halo_para_dirAdd}; + }; + }; + bis_fnc_halo_para_loop_time = time - 0.1; + bis_fnc_halo_para_velZ = velocity _para select 2; + bis_fnc_halo_para_loop = { + if (!isnil {player getvariable "bis_fnc_halo_terminate"}) exitwith {}; + if (time == bis_fnc_halo_para_loop_time) exitwith {}; //--- FPS too high + + _para = vehicle player; + + //--- FPS counter + _fpsCoef = ((time - bis_fnc_halo_para_loop_time) * 20) / acctime; //Script is optimized for 20 FPS + bis_fnc_halo_para_loop_time = time; + + //_fpsCoef = _fpsCoef / 3; + bis_fnc_halo_para_velLimit = 0.3 * _fpsCoef; + bis_fnc_halo_para_velAdd = 0.002 * _fpsCoef; + bis_fnc_halo_para_dirLimit = 1.5 * _fpsCoef; + bis_fnc_halo_para_dirAdd = 0.03 * _fpsCoef; + + //--- Dir + bis_fnc_halo_para_dir = bis_fnc_halo_para_dir * 0.98; + bis_fnc_halo_para_dirAbs = bis_fnc_halo_para_dirAbs + bis_fnc_halo_para_dir; + _para setdir bis_fnc_halo_para_dirAbs; + _dir = direction _para; + + //--- Crash + _velZ = velocity _para select 2; + if ((_velZ - bis_fnc_halo_para_velZ) > 7 && (getposatl _para select 2) < 100) then {player setdamage 1;debuglog ["Log::::::::::::::",(_velZ - bis_fnc_halo_para_velZ)];}; + bis_fnc_halo_para_velZ = _velZ; + + //--- Pos + _para setposasl [ + (getposasl _para select 0) + (sin _dir * (0.1 + bis_fnc_halo_para_vel)), + (getposasl _para select 1) + (cos _dir * (0.1 + bis_fnc_halo_para_vel)), + (getposasl _para select 2) - 0.01 - 0.1 * abs bis_fnc_halo_para_vel + ]; + + [ + _para, + (-bis_fnc_halo_para_vel * 75) + 0.5*(sin (time * 180)), + (+bis_fnc_halo_para_dir * 25) + 0.5*(cos (time * 180)) + ] call bis_fnc_setpitchbank; + }; + + bis_fnc_halo_para_mousemoving_eh = (finddisplay 46) displayaddeventhandler ["mousemoving","_this call bis_fnc_halo_para_loop;"]; + bis_fnc_halo_para_mouseholding_eh = (finddisplay 46) displayaddeventhandler ["mouseholding","_this call bis_fnc_halo_para_loop;"]; + + sleep 4; + + ppeffectdestroy bis_fnc_halo_DynamicBlur; + bis_fnc_halo_para_keydown_eh = (finddisplay 46) displayaddeventhandler ["keydown","_this call bis_fnc_halo_para_keydown;"]; + + //--- End + //waituntil {vehicle player == player}; + player setvariable ["bis_fnc_halo_terminate",nil]; + waituntil {(position vehicle player select 2) < 2 || !isnil {player getvariable "bis_fnc_halo_terminate"}}; + (finddisplay 46) displayremoveeventhandler ["keydown",bis_fnc_halo_para_keydown_eh]; + (finddisplay 46) displayremoveeventhandler ["mousemoving",bis_fnc_halo_para_mousemoving_eh]; + (finddisplay 46) displayremoveeventhandler ["mouseholding",bis_fnc_halo_para_mouseholding_eh]; + + bis_fnc_halo_para_vel = nil; + bis_fnc_halo_para_velLimit = nil; + bis_fnc_halo_para_velAdd = nil; + bis_fnc_halo_para_dir = nil; + bis_fnc_halo_para_dirLimit = nil; + bis_fnc_halo_para_dirAdd = nil; + bis_fnc_halo_para_keydown = nil; + bis_fnc_halo_para_loop = nil; + bis_fnc_halo_para_keydown_eh = nil; + bis_fnc_halo_para_mousemoving_eh = nil; + bis_fnc_halo_para_mouseholding_eh = nil; + }; +}; \ No newline at end of file diff --git a/SQF/dayz_code/compile/fn_selfActions.sqf b/SQF/dayz_code/compile/fn_selfActions.sqf index 86d18c644..efd77f963 100644 --- a/SQF/dayz_code/compile/fn_selfActions.sqf +++ b/SQF/dayz_code/compile/fn_selfActions.sqf @@ -37,6 +37,18 @@ if (_canPickLight and !dayz_hasLight and !_isPZombie) then { s_player_removeflare = -1; }; +if(DZE_HaloJump) then { + if(_inVehicle and (_vehicle isKindOf "Air") and ((getPos _vehicle select 2) > 400)) then { + if (s_halo_action < 0) then { + DZE_myHaloVehicle = _vehicle; + s_halo_action = DZE_myHaloVehicle addAction ["HALO Jump","\z\addons\dayz_code\actions\halo_jump.sqf",[],2,false,true,"",""]; + }; + } else { + DZE_myHaloVehicle removeAction s_halo_action; + s_halo_action = -1; + }; +}; + if (!DZE_ForceNameTagsOff) then { if (s_player_showname < 0 and !_isPZombie) then { if (DZE_ForceNameTags) then { diff --git a/SQF/dayz_code/init/compiles.sqf b/SQF/dayz_code/init/compiles.sqf index d1056f71b..ac810a9dc 100644 --- a/SQF/dayz_code/init/compiles.sqf +++ b/SQF/dayz_code/init/compiles.sqf @@ -765,7 +765,8 @@ if (!isDedicated) then { //Both BIS_fnc_selectRandom = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_selectRandom.sqf"; //Checks which actions for nearby casualty - BIS_fnc_vectorAdd = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_vectorAdd.sqf"; //Checks which actions for nearby casualty + BIS_fnc_vectorAdd = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_vectorAdd.sqf"; + BIS_fnc_halo = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_halo.sqf"; fnc_buildWeightedArray = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_buildWeightedArray.sqf"; //Checks which actions for nearby casualty fnc_usec_damageVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandlerVehicle.sqf"; //Event handler run on damage zombie_initialize = compile preprocessFileLineNumbers "\z\addons\dayz_code\init\zombie_init.sqf"; diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf index 994de6e58..98e148ca8 100644 --- a/SQF/dayz_code/init/variables.sqf +++ b/SQF/dayz_code/init/variables.sqf @@ -243,6 +243,7 @@ dayz_resetSelfActions = { s_player_maint_build = -1; s_player_downgrade_build = -1; s_player_towing = -1; + s_halo_action = -1; }; call dayz_resetSelfActions; @@ -632,6 +633,11 @@ if(!isDedicated) then { if(isNil "DZE_ForceNameTagsOff") then { DZE_ForceNameTagsOff = false; }; + if(isNil "DZE_HaloJump") then { + DZE_HaloJump = true; + }; + + DZE_myHaloVehicle = objNull; DZE_Friends = []; diff --git a/SQF/dayz_epoch_b/stringtable.xml b/SQF/dayz_epoch_b/stringtable.xml index 5c30ab7b2..84c571db8 100644 --- a/SQF/dayz_epoch_b/stringtable.xml +++ b/SQF/dayz_epoch_b/stringtable.xml @@ -2527,7 +2527,7 @@ Magazine %1 / %2 - Weapons %3 / %4 - Backpacks %5 / %6 Magazine %1 / %2 - Weapons %3 / %4 - Backpacks %5 / %6 - + Magazine %1 / %2 - Waffen %3 / %4 - Rucksäcke %5 / %6 @@ -2537,7 +2537,7 @@ %1 wants to tag you as friendly. To accept, tag %1 as friendly. %1 wants to tag you as friendly. To accept, tag %1 as friendly. - + %1 will markieren Sie so freundlich. Zu akzeptieren, Tag %1 als freundlich. @@ -2547,7 +2547,7 @@ Pulse is extremely weak Pulse is extremely weak - + Pulse ist extrem schwach @@ -2557,7 +2557,7 @@ Pulse is weak Pulse is weak - + Puls ist schwach @@ -2567,7 +2567,7 @@ Pulse is strong Pulse is strong - + Pulse ist stark @@ -2577,7 +2577,7 @@ Trading canceled. Trading canceled. - + Handel abgebrochen. @@ -2587,7 +2587,7 @@ Cannot access gear in a locked vehicle. Cannot access gear in a locked vehicle. - + Kann nicht auf Gang in einem verschlossenen Fahrzeug. @@ -2597,7 +2597,7 @@ No camo nets found nearby. No camo nets found nearby. - + Keine camo Netze in der Nähe gefunden. @@ -2607,7 +2607,7 @@ You have been crushed between two objects. You have been crushed between two objects. - + Sie haben zwischen zwei Objekten zerquetscht worden. @@ -2617,7 +2617,7 @@ Lock already in progress. Lock already in progress. - + Sie haben zwischen zwei Objekten zerquetscht worden. @@ -2627,7 +2627,7 @@ Cannot lock while another player is nearby. Cannot lock while another player is nearby. - + Kann nicht gesperrt werden, während ein anderer Spieler in der Nähe ist. @@ -2637,7 +2637,7 @@ Cannot Abort while in a trader city! Cannot Abort while in a trader city! - + Kann nicht abbrechen, während in einem Gewerbetreibenden Stadt! @@ -2647,7 +2647,7 @@ Pack tent already in progress. Pack tent already in progress. - + Packen Zelt bereits im Gange. @@ -2657,7 +2657,7 @@ Tent not setup yet. Tent not setup yet. - + Zelt noch nicht einrichten. @@ -2667,7 +2667,7 @@ That is already being packed. That is already being packed. - + Das ist schon gepackt.