mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-14 04:02:37 +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).
156 lines
5.2 KiB
Plaintext
156 lines
5.2 KiB
Plaintext
/*
|
|
DayZ Lock Safe
|
|
Usage: [_obj] spawn player_unlockVault;
|
|
Made for DayZ Epoch please ask permission to use/edit/distrubute email vbawol@veteranbastards.com.
|
|
*/
|
|
private ["_objectID","_objectUID","_obj","_ownerID","_dir","_pos","_holder","_weapons","_magazines","_backpacks","_objWpnTypes","_objWpnQty","_countr","_alreadyPacking","_playerNear","_playerID","_claimedBy","_unlockedClass","_text","_objType","_combination","_ComboMatch","_vector","_characterID"];
|
|
|
|
if (DZE_ActionInProgress) exitWith {localize "str_epoch_player_21" call dayz_rollingMessages;};
|
|
DZE_ActionInProgress = true;
|
|
|
|
{player removeAction _x} count s_player_combi;
|
|
s_player_combi = [];
|
|
s_player_unlockvault = 1;
|
|
|
|
_obj = _this;
|
|
_objType = typeOf _obj;
|
|
|
|
if !(_objType in DZE_LockedStorage) exitWith {
|
|
s_player_unlockvault = -1;
|
|
DZE_ActionInProgress = false;
|
|
};
|
|
|
|
_playerNear = _obj call dze_isnearest_player;
|
|
if (_playerNear) exitWith {DZE_ActionInProgress = false; localize "str_epoch_player_20" call dayz_rollingMessages;};
|
|
|
|
// Silently exit if object no longer exists || alive
|
|
if (isNull _obj || !(alive _obj)) exitWith { DZE_ActionInProgress = false; };
|
|
|
|
_unlockedClass = getText (configFile >> "CfgVehicles" >> _objType >> "unlockedClass");
|
|
_text = getText (configFile >> "CfgVehicles" >> _objType >> "displayName");
|
|
|
|
_alreadyPacking = _obj getVariable["packing",0];
|
|
_claimedBy = _obj getVariable["claimed","0"];
|
|
_ownerID = _obj getVariable["CharacterID","0"];
|
|
_characterID = _ownerID;
|
|
_ComboMatch = (_ownerID == dayz_combination);
|
|
if (DZE_permanentPlot) then {
|
|
_combination = _obj getVariable["characterID","0"];
|
|
_ownerID = _obj getVariable["ownerPUID","0"];
|
|
_ComboMatch = (_combination == dayz_combination);
|
|
};
|
|
|
|
if (_alreadyPacking == 1) exitWith {DZE_ActionInProgress = false; format[localize "str_epoch_player_124",_text] call dayz_rollingMessages;};
|
|
|
|
// Promt user for password if _ownerID != dayz_playerUID
|
|
if (_ComboMatch || (_ownerID == dayz_playerUID)) then {
|
|
|
|
// Check if any players are nearby if not allow player to claim item.
|
|
_playerNear = {isPlayer _x} count (player nearEntities ["CAManBase", 6]) > 1;
|
|
_playerID = [player] call FNC_GetPlayerUID;
|
|
|
|
// Only allow if not already claimed.
|
|
if (_claimedBy == "0" || !_playerNear) then {
|
|
// Since item was not claimed proceed with claiming it.
|
|
_obj setVariable["claimed",_playerID,true];
|
|
};
|
|
|
|
_dir = direction _obj;
|
|
_vector = [(vectorDir _obj),(vectorUp _obj)];
|
|
_pos = _obj getVariable["OEMPos",getPosATL _obj];
|
|
_objectID = _obj getVariable["ObjectID","0"];
|
|
_objectUID = _obj getVariable["ObjectUID","0"];
|
|
|
|
_claimedBy = _obj getVariable["claimed","0"];
|
|
|
|
if (_claimedBy == _playerID) then {
|
|
|
|
if(!isNull _obj && alive _obj) then {
|
|
|
|
dze_waiting = nil;
|
|
PVDZE_log_lockUnlock = [player, _obj, false];
|
|
publicVariableServer "PVDZE_log_lockUnlock";
|
|
//wait for response from server to verify safe was logged before proceeding
|
|
waitUntil {!isNil "dze_waiting"};
|
|
|
|
_obj setVariable["packing",1];
|
|
["Working",0,[3,2,8,0]] call dayz_NutritionSystem;
|
|
_weapons = _obj getVariable["WeaponCargo",[]];
|
|
_magazines = _obj getVariable["MagazineCargo",[]];
|
|
_backpacks = _obj getVariable["BackpackCargo",[]];
|
|
player playActionNow "Medic";
|
|
uiSleep 1;
|
|
[player,"tentpack",0,false] call dayz_zombieSpeak;
|
|
uiSleep 5;
|
|
|
|
_holder = createVehicle [_unlockedClass,_pos,[], 0, "CAN_COLLIDE"];
|
|
// Remove locked vault
|
|
deleteVehicle _obj;
|
|
_holder setdir _dir;
|
|
_holder setVariable["memDir",_dir,true];
|
|
_holder setVectorDirAndUp _vector;
|
|
_holder setPosATL _pos;
|
|
player reveal _holder;
|
|
|
|
_holder setVariable["CharacterID",_characterID,true];
|
|
_holder setVariable["ObjectID",_objectID,true];
|
|
_holder setVariable["ObjectUID",_objectUID,true];
|
|
_holder setVariable ["OEMPos", _pos, true];
|
|
if (DZE_permanentPlot) then {
|
|
_holder setVariable ["ownerPUID", _ownerID , true];
|
|
};
|
|
|
|
if (count _weapons > 0) then {
|
|
//Add weapons
|
|
_objWpnTypes = _weapons select 0;
|
|
_objWpnQty = _weapons select 1;
|
|
_countr = 0;
|
|
{
|
|
_holder addweaponcargoGlobal [_x,(_objWpnQty select _countr)];
|
|
_countr = _countr + 1;
|
|
} count _objWpnTypes;
|
|
};
|
|
|
|
if (count _magazines > 0) then {
|
|
//Add Magazines
|
|
_objWpnTypes = _magazines select 0;
|
|
_objWpnQty = _magazines select 1;
|
|
_countr = 0;
|
|
{
|
|
if (_x != "CSGAS") then
|
|
{
|
|
_holder addmagazinecargoGlobal [_x,(_objWpnQty select _countr)];
|
|
_countr = _countr + 1;
|
|
};
|
|
} count _objWpnTypes;
|
|
};
|
|
|
|
if (count _backpacks > 0) then {
|
|
//Add Backpacks
|
|
_objWpnTypes = _backpacks select 0;
|
|
_objWpnQty = _backpacks select 1;
|
|
_countr = 0;
|
|
{
|
|
_holder addbackpackcargoGlobal [_x,(_objWpnQty select _countr)];
|
|
_countr = _countr + 1;
|
|
} count _objWpnTypes;
|
|
};
|
|
|
|
format[localize "str_epoch_player_125",_text] call dayz_rollingMessages;
|
|
};
|
|
} else {
|
|
DZE_ActionInProgress = false;
|
|
format[localize "str_player_beinglooted",_text] call dayz_rollingMessages;
|
|
};
|
|
} else {
|
|
["Working",0,[100,15,10,0]] call dayz_NutritionSystem;
|
|
player playActionNow "Medic";
|
|
uiSleep 1;
|
|
[player,"repair",0,false] call dayz_zombieSpeak;
|
|
[player,25,true,(getPosATL player)] spawn player_alertZombies;
|
|
uiSleep 5;
|
|
format[localize "str_epoch_player_126",_text] call dayz_rollingMessages;
|
|
};
|
|
s_player_unlockvault = -1;
|
|
DZE_ActionInProgress = false;
|