mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-21 19:06:29 +03:00
It makes no sense to rename the identical DayZ PVs to have an E in their name. I don't see any good reason it was done in the first place. All it accomplishes is breaking script compatibility between the two mods and requiring different publicvariable.txt filters. The only time it makes sense is for custom Epoch variables that aren't used in vanilla. All admins have to do to update custom scripts is swap the names according to the change log. Note I've submitted a pull request to replace PVDZ_veh_Save with PVDZ_obj_Save in official too because they are duplicates.
177 lines
4.8 KiB
Plaintext
177 lines
4.8 KiB
Plaintext
/*
|
|
DayZ Safe
|
|
Made for DayZ Epoch please ask permission to use/edit/distrubute email vbawol@veteranbastards.com.
|
|
*/
|
|
private ["_tent","_location","_isOk","_cancel","_location3","_location4","_location1","_location2","_counter","_pondPos","_isPond","_ppos","_hastentitem","_dir","_building","_isBuilding","_playerPos","_item","_offset_x","_offset_y","_offset_z","_offset_z_attach","_config","_text","_tmpvault","_vault_location","_objectsPond","_combination_1","_combination_2","_combination_3","_combination_4","_combination","_removed"];
|
|
//check if can pitch here
|
|
|
|
if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_108") , "PLAIN DOWN"]; };
|
|
DZE_ActionInProgress = true;
|
|
|
|
//disableSerialization;
|
|
|
|
_playerPos = getPosATL player;
|
|
_item = _this;
|
|
_hastentitem = _this in magazines player;
|
|
_offset_x = 0;
|
|
_offset_y = 1.5;
|
|
_offset_z = 0;
|
|
_offset_z_attach = 0.5;
|
|
|
|
_location = player modeltoworld [_offset_x,_offset_y,_offset_z];
|
|
|
|
// Allow placement anywhere.
|
|
|
|
_isOk = true;
|
|
|
|
//diag_log ("Pitch Tent: " + str(_isok) );
|
|
|
|
_config = configFile >> "CfgMagazines" >> _item;
|
|
_text = getText (_config >> "displayName");
|
|
|
|
if (!_hastentitem) exitWith {cutText [format[(localize "str_player_31"),_text,"pitch"] , "PLAIN DOWN"]};
|
|
|
|
// blocked
|
|
// Allow on concrete since we dont force to ground.
|
|
// if (["concrete",dayz_surfaceType] call fnc_inString) then { _isOk = true; diag_log ("surface concrete"); };
|
|
|
|
|
|
|
|
//diag_log ("Pitch Tent: " + str(_isok) );
|
|
_dir = getDir player;
|
|
|
|
// Start Preview loop
|
|
_tmpvault = createVehicle ["VaultStorageLocked", _location, [], 0, "CAN_COLLIDE"];
|
|
_tmpvault setdir _dir;
|
|
_tmpvault attachTo [player,[_offset_x,_offset_y,_offset_z_attach]];
|
|
|
|
_cancel = false;
|
|
_counter = 0;
|
|
|
|
|
|
while {_isOk} do {
|
|
|
|
if(_counter == 0) then {
|
|
cutText [(localize "str_epoch_player_109"), "PLAIN DOWN"];
|
|
uiSleep 5;
|
|
_location1 = getPosATL player;
|
|
uiSleep 5;
|
|
_location2 = getPosATL player;
|
|
|
|
if(_location1 distance _location2 < 0.1) exitWith {
|
|
|
|
cutText [(localize "str_epoch_player_109"), "PLAIN DOWN"];
|
|
_location3 = getPosATL player;
|
|
uiSleep 5;
|
|
_location4 = getPosATL player;
|
|
|
|
if(_location3 distance _location4 > 0.1) exitWith {
|
|
_isOk = false;
|
|
_cancel = true;
|
|
};
|
|
|
|
_isOk = false;
|
|
};
|
|
};
|
|
if(_counter >= 1) exitWith {
|
|
_isOk = false;
|
|
_cancel = true;
|
|
};
|
|
_counter = _counter + 1;
|
|
};
|
|
|
|
detach _tmpvault;
|
|
|
|
_vault_location = (getPosATL _tmpvault);
|
|
|
|
|
|
|
|
// Make sure vault is not placed on road.
|
|
if (isOnRoad _vault_location) then { _isOk = true; };
|
|
// Make sure vault is not placed in trader citys
|
|
if(!canbuild) then { _isOk = true; };
|
|
|
|
//Block Tents in pounds
|
|
_objectsPond = nearestObjects [_playerPos, [], 10];
|
|
{
|
|
_isPond = ["pond",str(_x),false] call fnc_inString;
|
|
if (_isPond) then {
|
|
_pondPos = (_x worldToModel _playerPos) select 2;
|
|
if (_pondPos < 0) then {
|
|
_isOk = true;
|
|
};
|
|
};
|
|
} count _objectsPond;
|
|
|
|
deleteVehicle _tmpvault;
|
|
|
|
if(!_cancel) then {
|
|
if (!_isOk) then {
|
|
|
|
//remove safe
|
|
|
|
_hastentitem = _this in magazines player;
|
|
if (!_hastentitem) exitWith {cutText [format[(localize "str_player_31"),_text,"pitch"] , "PLAIN DOWN"]};
|
|
|
|
_removed = ([player,_item] call BIS_fnc_invRemove);
|
|
|
|
if(_removed == 1) then {
|
|
|
|
//call dayz_forceSave;
|
|
|
|
_dir = round(direction player);
|
|
[1,1] call dayz_HungerThirst;
|
|
//wait a bit
|
|
player playActionNow "Medic";
|
|
uiSleep 1;
|
|
[player,"tentunpack",0,false] call dayz_zombieSpeak;
|
|
|
|
[player,50,true,(getPosATL player)] spawn player_alertZombies;
|
|
|
|
_building = nearestObject [(vehicle player), "HouseBase"];
|
|
_isBuilding = [(vehicle player),_building] call fnc_isInsideBuilding;
|
|
|
|
if(_isBuilding) then {
|
|
|
|
_ppos = _building worldToModel _vault_location;
|
|
_location = _building modelToWorld _ppos;
|
|
|
|
} else {
|
|
_location = player modelToWorld [_offset_x,_offset_y,_offset_z];
|
|
};
|
|
|
|
uiSleep 5;
|
|
//place tent (local)
|
|
_tent = createVehicle ["VaultStorageLocked", _location, [], 0, "CAN_COLLIDE"];
|
|
_tent setdir _dir;
|
|
_tent setpos _location;
|
|
player reveal _tent;
|
|
|
|
// Generate Combination
|
|
_combination_1 = floor(random 10);
|
|
_combination_2 = floor(random 10);
|
|
_combination_3 = floor(random 10);
|
|
_combination_4 = floor(random 10);
|
|
|
|
// Format Combination
|
|
_combination = format["%1%2%3%4",_combination_1,_combination_2,_combination_3,_combination_4];
|
|
|
|
_tent setVariable ["CharacterID",_combination,true];
|
|
_tent setVariable ["OEMPos",_location,true];
|
|
|
|
//["PVDZ_obj_Publish",[_combination,_tent,[_dir,_location],"VaultStorageLocked"]] call callRpcProcedure;
|
|
PVDZ_obj_Publish = [_combination,_tent,[_dir,_location],"VaultStorageLocked"];
|
|
publicVariableServer "PVDZ_obj_Publish";
|
|
|
|
cutText [format[(localize "str_epoch_player_179"),_combination], "PLAIN DOWN", 5];
|
|
};
|
|
|
|
} else {
|
|
cutText [(localize "str_epoch_player_110"), "PLAIN DOWN"];
|
|
};
|
|
|
|
} else {
|
|
cutText [(localize "str_epoch_player_111"), "PLAIN DOWN"];
|
|
};
|
|
|
|
DZE_ActionInProgress = false; |