diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml
index af85800ae6..5a2234da05 100644
--- a/addons/common/stringtable.xml
+++ b/addons/common/stringtable.xml
@@ -1661,5 +1661,21 @@
Разрядить оружие
Descargar arma
+
+ Load
+ Beladen
+ Załaduj
+ Carregar
+ Загрузить
+ Naložit
+ Cargar
+ Carica
+ Charger
+ 積み込む
+ 싣기
+ 裝載
+ 装载
+ Yükle
+
diff --git a/addons/dragging/XEH_postInit.sqf b/addons/dragging/XEH_postInit.sqf
index 6f7d6001c6..59fbc70517 100644
--- a/addons/dragging/XEH_postInit.sqf
+++ b/addons/dragging/XEH_postInit.sqf
@@ -2,8 +2,12 @@
#include "script_component.hpp"
if (isServer) then {
- // release object on hard disconnection. Function is identical to killed
- addMissionEventHandler ["HandleDisconnect", {_this call FUNC(handleKilled)}];
+ // 'HandleDisconnect' EH triggers too late
+ addMissionEventHandler ["PlayerDisconnected", {
+ private _unit = (getUserInfo (_this select 5)) select 10;
+
+ _unit call FUNC(handleKilled);
+ }];
};
if (!hasInterface) exitWith {};
diff --git a/addons/dragging/functions/fnc_canCarry.sqf b/addons/dragging/functions/fnc_canCarry.sqf
index dac874f6c0..b80a39ed55 100644
--- a/addons/dragging/functions/fnc_canCarry.sqf
+++ b/addons/dragging/functions/fnc_canCarry.sqf
@@ -31,10 +31,11 @@ if (_target isKindOf "StaticWeapon") exitWith {
crew _target findIf {getText (configOf _x >> "simulation") != "UAVPilot"} == -1
};
-// Units need to be unconscious or limping
+// Units need to be unconscious or limping; Units also need to not be in ragdoll, as that causes desync issues
if (_target isKindOf "CAManBase") exitWith {
- lifeState _target isEqualTo "INCAPACITATED"
- || {_target getHitPointDamage "HitLegs" >= 0.5}
+ !(alive _target != isAwake _target) &&
+ {lifeState _target isEqualTo "INCAPACITATED" ||
+ {_target getHitPointDamage "HitLegs" >= 0.5}}
};
// Check max items for WeaponHolders
diff --git a/addons/dragging/functions/fnc_canDrag.sqf b/addons/dragging/functions/fnc_canDrag.sqf
index 8336e20f2d..d5aac56693 100644
--- a/addons/dragging/functions/fnc_canDrag.sqf
+++ b/addons/dragging/functions/fnc_canDrag.sqf
@@ -27,10 +27,11 @@ if (_target isKindOf "StaticWeapon") exitWith {
crew _target findIf {getText (configOf _x >> "simulation") != "UAVPilot"} == -1
};
-// Units need to be unconscious or limping
+// Units need to be unconscious or limping; Units also need to not be in ragdoll, as that causes desync issues
if (_target isKindOf "CAManBase") exitWith {
- lifeState _target isEqualTo "INCAPACITATED"
- || {_target getHitPointDamage "HitLegs" >= 0.5}
+ !(alive _target != isAwake _target) &&
+ {lifeState _target isEqualTo "INCAPACITATED" ||
+ {_target getHitPointDamage "HitLegs" >= 0.5}}
};
// Check max items for WeaponHolders
diff --git a/addons/dragging/functions/fnc_carryObjectPFH.sqf b/addons/dragging/functions/fnc_carryObjectPFH.sqf
index 072b688b9d..3cba029f24 100644
--- a/addons/dragging/functions/fnc_carryObjectPFH.sqf
+++ b/addons/dragging/functions/fnc_carryObjectPFH.sqf
@@ -58,11 +58,12 @@ if (
if (_target isKindOf "CAManBase") then {
[_cursorObject, 0, true] call EFUNC(common,nearestVehiclesFreeSeat) isNotEqualTo []
} else {
- [_target, _cursorObject] call EFUNC(cargo,canLoadItemIn)
+ ["ace_cargo"] call EFUNC(common,isModLoaded) &&
+ {[_target, _cursorObject] call EFUNC(cargo,canLoadItemIn)}
}
}
) then {
- _hintLMB = localize ELSTRING(Cargo,loadObject);
+ _hintLMB = localize ELSTRING(common,loadObject);
};
private _hintMMB = localize LSTRING(RaiseLowerRotate);
diff --git a/addons/dragging/functions/fnc_dropObject_carry.sqf b/addons/dragging/functions/fnc_dropObject_carry.sqf
index 0b43873e79..1b475e7b36 100644
--- a/addons/dragging/functions/fnc_dropObject_carry.sqf
+++ b/addons/dragging/functions/fnc_dropObject_carry.sqf
@@ -91,7 +91,7 @@ if (_mass != 0) then {
_target setVariable [QGVAR(carryDirection_temp), nil];
// try loading into vehicle
-if (_tryLoad && {!isNull cursorObject} && {([ACE_player, cursorObject, []] call EFUNC(common,canInteractWith))}) then {
+if (_tryLoad && {!isNull cursorObject} && {([ACE_player, cursorObject, ["isNotCarrying"]] call EFUNC(common,canInteractWith))}) then {
if (_target isKindOf "CAManBase") then {
private _vehicles = [cursorObject, 0, true] call EFUNC(common,nearestVehiclesFreeSeat);
if ([cursorObject] isEqualTo _vehicles) then {
@@ -102,7 +102,10 @@ if (_tryLoad && {!isNull cursorObject} && {([ACE_player, cursorObject, []] call
};
};
} else {
- if ([_target, cursorObject] call EFUNC(cargo,canLoadItemIn)) then {
+ if (
+ ["ace_cargo"] call EFUNC(common,isModLoaded) &&
+ {[_target, cursorObject] call EFUNC(cargo,canLoadItemIn)}
+ ) then {
[player, _target, cursorObject] call EFUNC(cargo,startLoadIn);
};
};