mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-14 20:13:13 +03:00
Plot for Life and Plot Management work best together. They essentially provide the same functionality. Both let you keep your plot after death by using UID instead of CharacterID. Plot Management doesn't even have an option to save characterID, so by default it is always keeping all friends and the owner permanently until they are removed. The only major difference between them is Plot For Life also adds permanent ownership of built items on the plot, which is behavior most people expect. It doesn't make sense to keep ownership of the plot after death but not the other objects built on it. The other functionality it adds (take ownership) can be toggled with a config variable. It is rare that someone would want Plot For Life enabled, but Plot Management disabled or vice versa. If they really want that they can still do it manually, but consolidating them to a single config option greatly simplifies things for everyone else. I removed links to mod githubs because many changes have been made to the 1.0.6 versions, so outdated information there will likely confuse people. Authors are already credited in the README and change log. In variables.sqf "DZ_storage_base" is now the parent class which includes all tents and stashes. DZE_checkNearbyRadius variable is not used (identical to DZE_PlotPole select 0).
242 lines
7.3 KiB
Plaintext
242 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 = [round (direction _object),_position];
|
|
_worldspace = [getDir _object, _position] call AN_fnc_formatWorldspace; // Precise Base Building 1.0.5
|
|
_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 {
|
|
if (DZE_permanentPlot && (typeOf _object == "Plastic_Pole_EP1_DZ")) then {
|
|
_inventory = _object getVariable ["plotfriends", []]; //We're replacing the inventory with UIDs for this item
|
|
} else {
|
|
_inventory = [getWeaponCargo _object, getMagazineCargo _object, getBackpackCargo _object];
|
|
};
|
|
};
|
|
|
|
_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;
|
|
};
|
|
}; |