Add reliable workaround for swimming in ground and air issue

Fixes #1913
This commit is contained in:
ebayShopper
2017-03-23 15:58:14 -04:00
parent 665ecd9146
commit 6a711deccc
7 changed files with 17 additions and 21 deletions

View File

@@ -239,14 +239,8 @@ if (typename _this == typename []) then {
//--- Free fall
if (count _this == 2) exitwith { //Fresh spawn calling from player_monitor.fsm
_alt = _this select 1;
_unit allowDamage false;
_paraPosition = [_unit] call FNC_GetPos;
//_paraPosition set [2,_alt];
_para = createVehicle ["ParachuteWest", _paraPosition, [], 0, "CAN_COLLIDE"];
_para setpos _paraPosition;
_unit moveindriver _para; //Workaround for stuck swimming in air on maps with respawn_west in water. Can't setPos to ground first because antiTP blocks it.
_unit call fn_exitSwim;
_unit setvariable ["bis_fnc_halo_now",true];
_unit allowDamage true;
_unit spawn bis_fnc_halo;
};
//-------------

View File

@@ -0,0 +1,11 @@
//This workaround reliably exits swimming after a setPos directly from water to land or air.
//"Getting out while IsMoveOutInProgress" prints to client RPT, but it's needed to complete quickly and should be harmless.
_unit = _this;
_unit allowDamage false;
_paraPosition = [_unit] call FNC_GetPos;
_para = "ParachuteWest" createVehicleLocal [0,0,0];
_para setPos _paraPosition;
_unit moveInDriver _para;
deleteVehicle _para;
_unit allowDamage true;

View File

@@ -113,6 +113,7 @@ _switchUnit = {
_rndy = floor(random 100);
_oldUnit setPosATL [(respawn_west_original select 0) + _rndx, (respawn_west_original select 1) + _rndy, 0];
_newUnit setPosATL _position;
if (surfaceIsWater respawn_west_original) then {_newUnit call fn_exitSwim;};
removeAllWeapons _oldUnit;
{_oldUnit removeMagazine _x;} count magazines _oldUnit;
if !(isNull _oldUnit) then {deleteVehicle _oldUnit;};

View File

@@ -18,6 +18,7 @@ if (!isDedicated) then {
fn_dropItem = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_dropItem.sqf";
fn_dynamicTool = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_dynamicTool.sqf";
fn_exitSwim = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_exitSwim.sqf";
fn_nearWaterHole = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_nearWaterHole.sqf";
player_zombieCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieCheck.sqf"; //Run on a players computer, checks if the player is near a zombie
player_zombieAttack = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieAttack.sqf"; //Run on a players computer, causes a nearby zombie to attack them

View File

@@ -995,6 +995,7 @@ class FSM
" player setPosATL [_setPos select 0,_setPos select 1,DZE_HaloSpawnHeight];" \n
"} else {" \n
" player setPosATL _setPos;" \n
" if (surfaceIsWater respawn_west_original) then {player call fn_exitSwim;};" \n
"};" \n
"" \n
"player setVelocity [0,0,0.5];" \n