mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-13 19:52:38 +03:00
A Plot For Life also includes Precise Base Building by Mikeeeyy. Precise base building has no variable to switch it on or off, I don't think it should. Seems to work well enough, this may conflict with the duplicate object uid fix, it appears to spam my server rpt.
245 lines
7.3 KiB
Plaintext
245 lines
7.3 KiB
Plaintext
// [_object,_type] spawn server_updateObject;
|
|
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"
|
|
if (isNil "sm_done") exitWith {};
|
|
|
|
private ["_object","_type","_objectID","_objectUID","_lastUpdate","_needUpdate","_object_position","_object_inventory","_object_damage","_isNotOk"];
|
|
_object = _this select 0;
|
|
_type = _this select 1;
|
|
_recorddmg = false;
|
|
_isNotOk = false;
|
|
_forced = if (count _this > 2) then {_this select 2} else {false};
|
|
_objectID = "0";
|
|
_objectUID = "0";
|
|
|
|
if !((isNil "_object") or {isNull _object}) then {
|
|
_objectID = _object getVariable ["ObjectID","0"];
|
|
_objectUID = _object getVariable ["ObjectUID","0"];
|
|
};
|
|
|
|
if ((typeName _objectID == "SCALAR") || (typeName _objectUID == "SCALAR")) then {
|
|
#ifdef OBJECT_DEBUG
|
|
diag_log (format["Non-string Object: ID %1 UID %2", _objectID, _objectUID]);
|
|
#endif
|
|
//force fail
|
|
_objectID = nil;
|
|
_objectUID = nil;
|
|
};
|
|
|
|
if (!((typeOf _object) in DZE_safeVehicle) && !locked _object) then {
|
|
//diag_log format["Object: %1, ObjectID: %2, ObjectUID: %3",_object,_objectID,_objectUID];
|
|
if (!(_objectID in dayz_serverIDMonitor) && isNil {_objectUID}) then {
|
|
//force fail
|
|
_objectID = nil;
|
|
_objectUID = nil;
|
|
};
|
|
if ((isNil {_objectID}) && (isNil {_objectUID})) then {
|
|
_object_position = getPosATL _object;
|
|
#ifdef OBJECT_DEBUG
|
|
diag_log format["Object %1 with invalid ID at pos %2",typeOf _object,_object_position];
|
|
#endif
|
|
_isNotOk = true;
|
|
};
|
|
};
|
|
|
|
if (_isNotOk) exitWith {
|
|
//deleteVehicle _object;
|
|
};
|
|
|
|
_lastUpdate = _object getVariable ["lastUpdate",diag_tickTime];
|
|
_needUpdate = _object in needUpdate_objects;
|
|
|
|
// TODO ----------------------
|
|
_object_position = {
|
|
private ["_position","_worldspace","_fuel","_key"];
|
|
_position = getPosATL _object;
|
|
_worldspace = [(getDir _object) call KK_fnc_floatToString, _position call KK_fnc_positionToString];
|
|
_fuel = if (_object isKindOf "AllVehicles") then {fuel _object} else {0};
|
|
|
|
_key = format["CHILD:305:%1:%2:%3:",_objectID,_worldspace,_fuel];
|
|
_key call server_hiveWrite;
|
|
|
|
#ifdef OBJECT_DEBUG
|
|
diag_log ("HIVE: WRITE: "+ str(_key));
|
|
#endif
|
|
};
|
|
|
|
_object_inventory = {
|
|
private ["_inventory","_previous","_key"];
|
|
if (_object isKindOf "TrapItems") then {
|
|
_inventory = [["armed",_object getVariable ["armed",false]]];
|
|
} else {
|
|
// plotManagement //
|
|
if( DZE_plotManagement && (typeOf (_object) == "Plastic_Pole_EP1_DZ") ) then {
|
|
_inventory = _object getVariable ["plotfriends", []]; //We're replacing the inventory with UIDs for this item
|
|
} else {
|
|
// plotManagement //
|
|
_inventory = [getWeaponCargo _object, getMagazineCargo _object, getBackpackCargo _object];
|
|
// plotManagement //
|
|
};
|
|
// plotManagement //
|
|
};
|
|
|
|
_previous = str(_object getVariable["lastInventory",[]]);
|
|
if (str _inventory != _previous) then {
|
|
_object setVariable["lastInventory",_inventory];
|
|
if (_objectID == "0") then {
|
|
_key = format["CHILD:309:%1:",_objectUID] + str _inventory + ":";
|
|
} else {
|
|
_key = format["CHILD:303:%1:",_objectID] + str _inventory + ":";
|
|
};
|
|
|
|
#ifdef OBJECT_DEBUG
|
|
diag_log ("HIVE: WRITE: "+ str(_key));
|
|
#endif
|
|
|
|
_key call server_hiveWrite;
|
|
};
|
|
};
|
|
|
|
_object_damage = {
|
|
//Allow dmg process
|
|
private ["_hitpoints","_array","_hit","_selection","_key","_damage","_allFixed"];
|
|
_hitpoints = _object call vehicle_getHitpoints;
|
|
_damage = damage _object;
|
|
_array = [];
|
|
_allFixed = true;
|
|
{
|
|
_hit = [_object,_x] call object_getHit;
|
|
_selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
|
|
if (_hit > 0) then {
|
|
_allFixed = false;
|
|
_array set [count _array,[_selection,_hit]];
|
|
//diag_log format ["Section Part: %1, Dmg: %2",_selection,_hit];
|
|
} else {
|
|
_array set [count _array,[_selection,0]];
|
|
};
|
|
} forEach _hitpoints;
|
|
|
|
if (_allFixed) then {_object setDamage 0;};
|
|
if (_forced) then {
|
|
if (_object in needUpdate_objects) then {needUpdate_objects = needUpdate_objects - [_object];};
|
|
_recorddmg = true;
|
|
} else {
|
|
//Prevent damage events for the first 10 seconds of the servers live.
|
|
if (diag_ticktime - _lastUpdate > 10) then {
|
|
if !(_object in needUpdate_objects) then {
|
|
//diag_log format["DEBUG: Monitoring: %1",_object];
|
|
needUpdate_objects set [count needUpdate_objects, _object];
|
|
_recorddmg = true;
|
|
};
|
|
};
|
|
};
|
|
|
|
if (_recorddmg) then {
|
|
if (_objectID == "0") then {
|
|
_key = format["CHILD:306:%1:",_objectUID] + str _array + ":" + str _damage + ":";
|
|
} else {
|
|
_key = format["CHILD:306:%1:",_objectID] + str _array + ":" + str _damage + ":";
|
|
};
|
|
diag_log ("HIVE: WRITE: "+ str(_key));
|
|
_key call server_hiveWrite;
|
|
};
|
|
};
|
|
|
|
//Walls
|
|
_objWallDamage = {
|
|
private "_key";
|
|
_damage = _this select 2;
|
|
_object setDamage _damage;
|
|
|
|
if (_objectID == "0") then {
|
|
_key = format["CHILD:306:%1:%2:%3:",_objectUID,[],_damage];
|
|
} else {
|
|
_key = format["CHILD:306:%1:%2:%3:",_objectID,[],_damage];
|
|
};
|
|
_key call server_hiveWrite;
|
|
};
|
|
|
|
_object_killed = {
|
|
private "_key";
|
|
_object setDamage 1;
|
|
|
|
if (_objectID == "0") then {
|
|
//Need to update hive to make a new call to allow UID to be updated for a killed event
|
|
//_key = format["CHILD:306:%1:%2:%3:",_objectUID,[],1];
|
|
_key = format["CHILD:310:%1:",_objectUID];
|
|
} else {
|
|
_key = format["CHILD:306:%1:%2:%3:",_objectID,[],1];
|
|
};
|
|
_key call server_hiveWrite;
|
|
diag_log ("HIVE: WRITE: "+ str(_key));
|
|
|
|
if (((typeOf _object) in DayZ_removableObjects) or ((typeOf _object) in DZE_isRemovable)) then {[_objectID,_objectUID] call server_deleteObj;};
|
|
};
|
|
|
|
_object_maintenance = {
|
|
private ["_ownerArray","_key"];
|
|
|
|
_ownerArray = _object getVariable ["ownerArray",[]];
|
|
_accessArray = _object getVariable ["dayz_padlockCombination",[]];
|
|
_variables set [count _variables, ["ownerArray", _ownerArray]];
|
|
_variables set [count _variables, ["padlockCombination", _accessArray]];
|
|
|
|
if (_objectID == "0") then {
|
|
_key = format["CHILD:309:%1:%2:",_objectUID,_ownerArray];
|
|
_key = format["CHILD:306:%1:%2:%3:",_objectUID,[],0]; //Wont work just now.
|
|
} else {
|
|
_key = format["CHILD:303:%1:%2:",_objectID,_ownerArray];
|
|
_key = format["CHILD:306:%1:%2:%3:",_objectID,[],0];
|
|
};
|
|
// #ifdef OBJECT_DEBUG
|
|
diag_log ("HIVE: WRITE: Maintenance, "+ str(_key));
|
|
// #endif
|
|
_key call server_hiveWrite;
|
|
};
|
|
|
|
_object_variables = {
|
|
private ["_ownerArray","_key","_accessArray","_variables"];
|
|
|
|
_ownerArray = _object getVariable ["ownerArray",[]];
|
|
_accessArray = _object getVariable ["dayz_padlockCombination",[]];
|
|
_lockedArray = _object getVariable ["BuildLock",false];
|
|
|
|
//diag_log format ["[%1,%2]",_ownerArray,_accessArray];
|
|
_variables = [];
|
|
_variables set [count _variables, ["ownerArray", _ownerArray]];
|
|
_variables set [count _variables, ["padlockCombination", _accessArray]];
|
|
_variables set [count _variables, ["BuildLock", _lockedArray]];
|
|
|
|
if (_objectID == "0") then {
|
|
_key = format["CHILD:309:%1:%2:",_objectUID,_variables];
|
|
} else {
|
|
_key = format["CHILD:303:%1:%2:",_objectID,_variables];
|
|
};
|
|
_key call server_hiveWrite;
|
|
};
|
|
|
|
_object setVariable ["lastUpdate",diag_ticktime,true];
|
|
switch (_type) do {
|
|
case "all": {
|
|
call _object_position;
|
|
call _object_inventory;
|
|
call _object_damage;
|
|
};
|
|
case "position": {
|
|
call _object_position;
|
|
};
|
|
case "gear": {
|
|
call _object_inventory;
|
|
};
|
|
case "maintenance": {
|
|
call _object_maintenance;
|
|
};
|
|
case "damage"; case "repair" : {
|
|
call _object_damage;
|
|
};
|
|
case "killed": {
|
|
call _object_killed;
|
|
};
|
|
case "accessCode"; case "buildLock" : {
|
|
call _object_variables;
|
|
};
|
|
case "objWallDamage": {
|
|
call _objWallDamage;
|
|
};
|
|
}; |