Keep global characterID only for special cases

Only vehicles with a key and locked/lockable buildings need a global characterID. All other vehicles and buildings will have a characterID of "0".
This commit is contained in:
A Man
2022-03-26 18:11:16 +01:00
parent fc6680c360
commit 67bdc72171
11 changed files with 45 additions and 49 deletions

View File

@@ -1212,19 +1212,16 @@ if (_canBuild) then {
if (count _findNearestPole > 0) then { // is near plot
_nearestPole = _findNearestPole select 0; // get first entry
_ownerID = _nearestPole getVariable["CharacterID","0"];
if (dayz_characterID != _ownerID) then { // not the owner
_buildcheck = [player, _nearestPole] call FNC_check_access;
_isowner = _buildcheck select 0;
_isfriendly = ((_buildcheck select 1) || (_buildcheck select 3));
if (!_isowner && !_isfriendly) then {
_cancel = true;
};
if (_cancel) then {
_reason = localize "STR_EPOCH_PLAYER_134"; // You do not have access to build on this plot.
};
_buildcheck = [player, _nearestPole] call FNC_check_access;
_isowner = _buildcheck select 0;
_isfriendly = ((_buildcheck select 1) || (_buildcheck select 3));
if (!_isowner && !_isfriendly) then {
_cancel = true;
};
if (_cancel) then {
_reason = localize "STR_EPOCH_PLAYER_134"; // You do not have access to build on this plot.
};
};
};
@@ -1555,8 +1552,8 @@ if (_canBuild) then {
systemChat format[localize "str_epoch_player_140", _combinationDisplay, _text]; // You have setup your %2. The combination is %1
} else { // if not lockable item
_builtObject setVariable ["CharacterID", dayz_characterID, true];
local _charID = "0";
_builtObject setVariable ["CharacterID", _charID];
// fireplace
if (_builtObject isKindOf "Land_Fire_DZ") then { // if campfire, then spawn, but do not publish to database
@@ -1571,9 +1568,9 @@ if (_canBuild) then {
_friendsArr = [[dayz_playerUID, toArray (name player)]];
_builtObject setVariable ["plotfriends", _friendsArr, true];
PVDZ_obj_Publish = [dayz_characterID, _builtObject, [_dir, _position, dayz_playerUID, _vector], _friendsArr, player, dayz_authKey];
PVDZ_obj_Publish = [_charID, _builtObject, [_dir, _position, dayz_playerUID, _vector], _friendsArr, player, dayz_authKey];
} else {
PVDZ_obj_Publish = [dayz_characterID, _builtObject, [_dir, _position, dayz_playerUID, _vector], [], player, dayz_authKey];
PVDZ_obj_Publish = [_charID, _builtObject, [_dir, _position, dayz_playerUID, _vector], [], player, dayz_authKey];
};
publicVariableServer "PVDZ_obj_Publish";
};

View File

@@ -14,7 +14,7 @@ if (dayz_actionInProgress) exitWith {localize "str_epoch_player_48" call dayz_ro
dayz_actionInProgress = true;
player removeAction s_player_downgrade_build;
s_player_downgrade_build = 1;
s_player_downgrade_build = -1;
local _obj = _this select 3;
@@ -22,7 +22,6 @@ local _objectCharacterID = _obj getVariable ["CharacterID","0"];
if (DZE_Lock_Door != _objectCharacterID) exitWith { // Unable to downgrade, you do not know the combination.
dayz_actionInProgress = false;
s_player_downgrade_build = -1;
localize "str_epoch_player_49" call dayz_rollingMessages;
};
@@ -30,10 +29,16 @@ local _playerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [
if (_playerNear) exitWith { // Another player is nearby. Only one player can be near to perform this action.
dayz_actionInProgress = false;
s_player_downgrade_build = -1;
localize "str_pickup_limit_5" call dayz_rollingMessages;
};
local _ownerID = _obj getVariable["ownerPUID", "0"];
if (_ownerID == "0") exitWith { // Not setup yet.
dayz_actionInProgress = false;
localize "str_epoch_player_50" call dayz_rollingMessages;
};
///////////////////////////////////////////////////////////////////////////////////////////////////
local _classname = typeOf _obj;
@@ -89,9 +94,8 @@ if (count _upgrade > 0) then {
local _vector = [(vectorDir _obj), (vectorUp _obj)];
if (_classname in DZE_DoorsLocked) then {
_obj setVariable ["CharacterID", dayz_characterID, true];
_objectCharacterID = dayz_characterID;
_objectCharacterID = "0";
_obj setVariable ["CharacterID",_objectCharacterID, true];
};
_classname = _newclassname;
@@ -125,8 +129,7 @@ if (count _upgrade > 0) then {
_object setDamage _damageNew;
};
local _ownerID = _obj getVariable["ownerPUID", "0"];
_object setVariable ["ownerPUID", _ownerID, true];
PVDZE_obj_Swap = [_objectCharacterID, _object, [_dir, _position, dayz_playerUID, _vector], _classname, _obj, player, [], dayz_authKey];
publicVariableServer "PVDZE_obj_Swap";

View File

@@ -14,14 +14,14 @@ if (dayz_actionInProgress) exitWith {localize "str_epoch_player_52" call dayz_ro
dayz_actionInProgress = true;
player removeAction s_player_upgrade_build;
s_player_upgrade_build = 1;
s_player_upgrade_build = -1;
local _obj = _this select 3;
local _classname = typeOf _obj;
local _ownerID = _obj getVariable["ownerPUID","0"];
if (_classname in DZE_DisableUpgrade) exitWith {
if (_ownerID == "0" || {_classname in DZE_DisableUpgrade}) exitWith {
dayz_actionInProgress = false;
s_player_upgrade_build = -1;
localize "str_epoch_player_50" call dayz_rollingMessages; // Not setup yet.
};
@@ -206,9 +206,7 @@ if ((count _upgrade) > 0) then {
};
_object setDamage _damageNew;
};
local _ownerID = _obj getVariable["ownerPUID","0"];
};
if (_ownerID == "0") then {
_ownerID = dayz_playerUID; // APFL is on but UID is 0 so we will claim it to record the ownership.

View File

@@ -91,7 +91,7 @@ if (_isPole && _isNearPlot > 0) exitWith {
///////////////////////////////////////////////////////////////////////////////////////////////////
if (_isPole && !_isAdmin && DZE_limitPlots > 0) then {
{
if (_x getVariable["ownerPUID","0"] == dayz_playerUID || (_x getVariable["CharacterID","0"] == dayz_characterID)) then {
if (_x getVariable["ownerPUID","0"] == dayz_playerUID) then {
_plotPoles = _plotPoles + 1;
};
} count (entities "Plastic_Pole_EP1_DZ"); // all plot poles on the map owned by player
@@ -130,16 +130,11 @@ if (_isNearPlot == 0 && !_canBuild) exitWith {
//
///////////////////////////////////////////////////////////////////////////////////////////////////
if (_isNearPlot > 0) then {
local _ownerID = _nearestPole getVariable["CharacterID","0"];
if (dayz_characterID == _ownerID) then {
local _accessCheck = [player, _nearestPole] call FNC_check_access;
local _isowner = _accessCheck select 0;
local _isfriendly = ((_accessCheck select 1) || (_accessCheck select 3));
if (_isowner || _isfriendly) then {
_canBuild = true;
} else {
local _accessCheck = [player, _nearestPole] call FNC_check_access;
local _isowner = _accessCheck select 0;
local _isfriendly = ((_accessCheck select 1) || (_accessCheck select 3));
if (_isowner || _isfriendly) then {
_canBuild = true;
};
};
};

View File

@@ -35,7 +35,7 @@ private [
,"_isDoorFriend" // return value - Only applicable if target is a door
,"_isDoorAdmin" // return value - Only applicable if target is a door
,"_targetType" // return value
,"_targetOwnerUID" // UID or characterID of the owner of _target
,"_targetOwnerUID" // UID of the owner of _target
,"_playerUID" // UID of the _player
,"_plotcheck" // takes return value of FNC_find_plots
,"_isNearPlot" // player is in plot's reach

View File

@@ -82,7 +82,7 @@ if (_outcome != "PASS") then {
processInitCommands;
_characterID = str(_characterID);
_object setVariable ["CharacterID", _characterID, true];
_object setVariable ["CharacterID", _characterID, [true,false] select (_characterID == "0")];
if (_characterID != "0" && !(_object isKindOf "Bicycle")) then {_object setVehicleLock "LOCKED";};

View File

@@ -70,7 +70,7 @@ if (_outcome != "PASS") then {
#endif
_object setVariable ["lastUpdate",diag_tickTime];
_object setVariable ["CharacterID", _characterID, true];
_object setVariable ["CharacterID", _characterID]; // Non key vehicles need no global set CharacterID
_object setDamage _damage;
[_object,_array] call server_setHitpoints;

View File

@@ -80,7 +80,7 @@ if (_outcome != "PASS") then {
dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object];
_object setVariable ["ObjectID", _oid];
_object setVariable ["lastUpdate",diag_tickTime];
_object setVariable ["CharacterID", _characterID, true];
_object setVariable ["CharacterID", _characterID,[true,false] select (_donotusekey)]; // Set CharacterID global only for vehicles with a key.
if(DZE_TRADER_SPAWNMODE) then {
_object attachTo [_object_para, [0,0,-1.6]];

View File

@@ -105,7 +105,7 @@ if (_outcome != "PASS") then {
_object setVariable ["ObjectID", _oid];
_object setVariable ["lastUpdate",diag_tickTime];
_object setVariable ["CharacterID", _characterID, true];
_object setVariable ["CharacterID", _characterID, [false,true] select (_characterID != "0")];
if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage && (_coins > 0)}) then {
_object setVariable ["cashMoney",_coins,true];

View File

@@ -1,4 +1,4 @@
private ["_gearClasses","_coins","_class","_uid","_charID","_object","_worldspace","_key","_allowed","_obj","_inv","_objectID","_objectUID","_proceed","_activatingplayer","_clientKey","_exitReason","_playerUID","_weapons","_magazines","_backpacks"];
private ["_setGlobal","_gearClasses","_coins","_class","_uid","_charID","_object","_worldspace","_key","_allowed","_obj","_inv","_objectID","_objectUID","_proceed","_activatingplayer","_clientKey","_exitReason","_playerUID","_weapons","_magazines","_backpacks"];
if (count _this < 8) exitWith {diag_log format ["Server_SwapObject error: Wrong parameter format from player %1",_this select 5];};
@@ -67,7 +67,8 @@ if (!_allowed || !_proceed) exitWith {
};
// Publish variables
_object setVariable ["CharacterID",_charID,true];
_setGlobal = [false,true] select ((_class in DZE_isLockedStorageUpgrade) || (_class in DZE_DoorsLocked));
_object setVariable ["CharacterID",_charID,_setGlobal];
//diag_log ("PUBLISH: Attempt " + str(_object));

View File

@@ -263,7 +263,8 @@ if ((playersNumber west + playersNumber civilian) == 0) exitWith {
};
};
};
_object setVariable ["CharacterID", _ownerID, true];
_setGlobal = [false,true] select ((_type in DZE_LockedStorage) || (_type in DZE_DoorsLocked));
_object setVariable ["CharacterID", _ownerID, _setGlobal];
if (_isSafeObject && !_isTrapItem) then {
_object setVariable["memDir",_dir,true];
if (DZE_GodModeBase && {!(_type in DZE_GodModeBaseExclude)}) then {
@@ -363,7 +364,8 @@ if ((playersNumber west + playersNumber civilian) == 0) exitWith {
{_object addBackpackCargoGlobal [_x, _backpackqty select _foreachindex];} foreach _backpackcargo;
};
_object setVariable ["CharacterID", _ownerID, true];
_setGlobal = [false,true] select (_ownerID != "0");
_object setVariable ["CharacterID", _ownerID, _setGlobal];
[_object,_hitpoints] call server_setHitpoints;