Fix vehicle damage handler bug

Fixes vehicle appearing to repair itself on first hit. SetDamage 0 was
running if no parts were damaged because "totalDmg" is not a hitpoint.

Vanilla commit:

92ab8fe2d4
This commit is contained in:
ebaydayz
2016-11-10 15:51:36 -05:00
parent 6fb4290ffe
commit 2cb3dac0be
2 changed files with 11 additions and 7 deletions

View File

@@ -14,7 +14,7 @@ or by zombie_attack
- return : updated damage for that part - return : updated damage for that part
broadcast: boolean. if true, then the request will be sent to all players if the vehicle is not local. broadcast: boolean. if true, then the request will be sent to all players if the vehicle is not local.
************************************************************/ ************************************************************/
private["_unit","_selection","_strH","_total","_damage","_needUpdate"]; private["_unit","_selection","_strH","_total","_damage","_needUpdate","_totalDmg"];
_unit = _this select 0; _unit = _this select 0;
_selection = _this select 1; _selection = _this select 1;
@@ -22,8 +22,10 @@ _total = _this select 2;
if (_selection != "") then { if (_selection != "") then {
_strH = "hit_" + _selection; _strH = "hit_" + _selection;
_totalDmg = false;
} else { } else {
_strH = "totalDmg"; _strH = "totalDmg";
_totalDmg = true;
}; };
if (_total >= 0.98) then { if (_total >= 0.98) then {
@@ -32,15 +34,16 @@ if (_total >= 0.98) then {
if (local _unit) then { if (local _unit) then {
if (_total > 0) then { if (_total > 0) then {
if (!_totalDmg) then {
_unit setVariable [_strH, _total, true]; _unit setVariable [_strH, _total, true];
};
_unit setHit [_selection, _total]; _unit setHit [_selection, _total];
PVDZ_veh_Save = [_unit,"damage",false,_totalDmg];
if (!isServer) then { if (!isServer) then {
PVDZ_veh_Save = [_unit,"damage"];
publicVariableServer "PVDZ_veh_Save"; publicVariableServer "PVDZ_veh_Save";
} else { } else {
[_unit, "damage"] call server_updateObject; PVDZ_veh_Save call server_updateObject;
}; };
}; };
} else { } else {

View File

@@ -1,13 +1,14 @@
// [_object,_type] spawn server_updateObject; // [_object,_type] spawn server_updateObject;
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" #include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"
if (isNil "sm_done") exitWith {}; if (isNil "sm_done") exitWith {};
private ["_objectID","_objectUID","_object_position","_isNotOk","_object","_type","_recorddmg","_forced","_lastUpdate","_needUpdate","_object_inventory","_object_damage","_objWallDamage","_object_killed","_object_maintenance","_object_variables"]; private ["_objectID","_objectUID","_object_position","_isNotOk","_object","_type","_recorddmg","_forced","_lastUpdate","_needUpdate","_object_inventory","_object_damage","_objWallDamage","_object_killed","_object_maintenance","_object_variables","_totalDmg"];
_object = _this select 0; _object = _this select 0;
_type = _this select 1; _type = _this select 1;
_recorddmg = false; _recorddmg = false;
_isNotOk = false; _isNotOk = false;
_forced = if (count _this > 2) then {_this select 2} else {false}; _forced = if (count _this > 2) then {_this select 2} else {false};
_totalDmg = if (count _this > 3) then {_this select 3} else {false};
_objectID = "0"; _objectID = "0";
_objectUID = "0"; _objectUID = "0";
@@ -127,7 +128,7 @@ _object_damage = {
}; };
} forEach _hitpoints; } forEach _hitpoints;
if (_allFixed) then {_object setDamage 0;}; if (_allFixed && !_totalDmg) then {_object setDamage 0;};
if (_forced) then { if (_forced) then {
if (_object in needUpdate_objects) then {needUpdate_objects = needUpdate_objects - [_object];}; if (_object in needUpdate_objects) then {needUpdate_objects = needUpdate_objects - [_object];};