#15 Upgrade to Epoch 1.7.0.1 #16

Merged
stuzer05 merged 3 commits from stuzer05/arma2-epoch-server#15 into master 2023-10-01 21:22:36 +03:00
53 changed files with 1249 additions and 508 deletions
Showing only changes of commit 6576a3ab6f - Show all commits

@ -1,6 +1,6 @@
// Add UIDs and names of Admins and Mods Here. If an admin or mod wants to play with no admin tools, change name in profile.
#define SUPER_ADMIN_LIST ["76561198180152023","76500000000000000","76500000000000000"]
#define SUPER_ADMIN_NAMES ["Stuzer","SuperAdminName","SuperAdminName"]
#define SUPER_ADMIN_NAMES ["stuzer05","SuperAdminName","SuperAdminName"]
#define ADMIN_LIST ["76500000000000000","76500000000000000","76500000000000000"]
#define ADMIN_NAMES ["AdminName","AdminName","AdminName"]
#define MOD_LIST ["76500000000000000","76500000000000000","76500000000000000"]

@ -20,7 +20,7 @@ DZAI_monitorRate = 300;
//Enable or disable verification and error-correction of classname tables used by DZAI. If invalid entries are found, they are removed and logged into the RPT log.
//If disabled, any invalid classnames will not be removed and clients may crash if AI bodies with invalid items are looted. Only disable if a previous scan shows no invalid classnames (Default: true).
DZAI_verifyTables = true;
DZAI_verifyTables = false;
//(Feature in development) Enables additional checking and error-correction of certain classname tables. (Default: false)
DZAI_extendedVerify = false;
@ -254,7 +254,7 @@ DZAI_banAIWeapons = [];
//List of launcher-type weapons for mid/high-level AI to use (by default, weapongrade 1/2/3), example: ["M136"]. If left empty, AI will not use launcher weapons. (Default: [])
//If AI encounter an armored player vehicle, they will switch to a randomly-selected launcher-type weapon to engage.
//Weapon classnames added here are verified if DZAI_verifyTables is set to true. Note: Launcher weapons are removed from the AI unit upon death.
DZAI_launcherTypes = [M_Igla_AA, M_AT13_AT, M_Strela_AA, Javelin, BAF_NLAW_Launcher, M47Launcher_EP1, MetisLauncher, SMAW];
DZAI_launcherTypes = ["M_Igla_AA", "M_AT13_AT", "M_Strela_AA", "Javelin", "BAF_NLAW_Launcher", "M47Launcher_EP1", "MetisLauncher", "SMAW"];
//List of AI weapongrades that are permitted to use launcher-type weapons. Individual custom weapongrade levels may be added to allow launcher use (Default: [1,2,3])
DZAI_launcherLevels = [1,2,3];

@ -32,7 +32,7 @@ DZMSObjectsDamageOff = false;
DZMSAnnounceType = "TitleText";
// Turn this on to enable troubleshooting. RPT entries might show where problems occur.
DZMSDebug = false;
DZMSDebug = true;
// Do you want your players to gain or lose humanity from killing mission AI?
DZMSMissHumanity = true;
@ -62,7 +62,7 @@ DZMSRunGear = false;
// How long before bodies disappear? (in minutes) (default = 30)
// Also used by WAI. Make sure they are the same if both are installed.
DZE_NPC_CleanUp_Time = 30;
DZE_NPC_CleanUp_Time = 40;
// Percentage of AI that must be dead before mission completes (default = 0)
//( 0 is 0% of AI / 0.50 is 50% / 1 is 100% )
@ -142,9 +142,9 @@ DZMSMissionArray = [
"Medical_Outpost", // Medical Supplies, Weapons
"Weapons_Cache", // Weapons
"Stash_house", // Weapons
"Weapons_Truck" // Weapons
//"SMA1","SMA2","SMA3","SMA4","SMA5","SMA6",
//"SMI1","SMI2","SMI3","SMI4","SM5I","SMI6"
"Weapons_Truck", // Weapons
"SMA1","SMA2","SMA3","SMA4","SMA5","SMA6",
"SMI1","SMI2","SMI3","SMI4","SM5I","SMI6"
];
/////////////////////////////////////////////////////////////////////////////////////////////

@ -2,7 +2,7 @@
wai_debug_mode = false; // enable debug
wai_user_spawnpoints = false; // setting this to true will disable the dynamic mission spawning system and enable server owners to define their own mission spawn points in WAI\configs\spawnpoints.sqf.
wai_use_blacklist = true; // You can edit the blacklist per map in file WAI\configs\blacklist.sqf.
wai_use_blacklist = false; // You can edit the blacklist per map in file WAI\configs\blacklist.sqf.
/* END GENERAL CONFIG */

@ -18,37 +18,4 @@ VG_RandomizeMyKey = {
_return;
};
vg_serverKey = toString (8 call VG_RandomizeMyKey);
vg_alreadySpawned = [];
VG_ClearTurrets = {
//By denvdmj (probably, I found it on the biki)
private ["_weaponArray","_findRecurse","_class","_obj","_turret","_mags"];
_obj = _this;
_weaponArray = [];
_weaponArray set [count _weaponArray,[-1]];
_findRecurse = {
private ["_root", "_class", "_path", "_currentPath", "_thisThis"];
_root = (_this select 0);
_path = +(_this select 1);
_thisThis = _this select 2;
for "_i" from 0 to count _root -1 do {
_class = _root select _i;
if (isClass _class) then {
_currentPath = _path + [_i];
{_weaponArray set [count _weaponArray, _currentPath];} count getArray (_class >> "weapons");
_class = _class >> "turrets";
if (isClass _class) then {[_class, _currentPath, _thisThis] call _findRecurse;};
};
};
};
[configFile >> "CfgVehicles" >> typeOf (_obj) >> "turrets", [], _this] call _findRecurse;
{
_turret = _x;
_mags = _obj magazinesTurret _turret;
{_obj removeMagazinesTurret[_x,_turret];} count _mags;
} forEach _weaponArray;
};
vg_alreadySpawned = [];

@ -1,4 +1,4 @@
private ["_isAir","_VG_ObjID","_characterID","_class","_clientID","_clrinit","_clrinit2","_colour","_colour2","_dam","_damage","_dir","_fuel","_hitpoints","_id","_inventory","_key","_location","_message","_object","_oid","_outcome","_player","_result","_selection","_serverKey","_uid","_worldSpace"];
private ["_VG_ObjID","_characterID","_class","_clientID","_clrinit","_clrinit2","_colour","_colour2","_dam","_damage","_dir","_fuel","_hitpoints","_id","_inventory","_key","_location","_message","_object","_oid","_outcome","_player","_result","_selection","_serverKey","_uid","_worldSpace"];
_worldSpace = _this select 0;
_player = _this select 1;
@ -53,18 +53,17 @@ if (_outcome != "PASS") then {
_object setPos _location;
};
_object addEventHandler ["HandleDamage",{false}];
_object addEventHandler ["HandleDamage",{0}];
clearWeaponCargoGlobal _object;
clearMagazineCargoGlobal _object;
if (vg_clearAmmo && {vg_serverKey == _serverKey}) then {_object call VG_ClearTurrets;};
_object setFuel _fuel;
_object setDamage _damage;
[_inventory select 0,_inventory select 1,_inventory select 2,_object] call fn_addCargo;
_object setVariable ["ObjectID", _oid, true];
_object setVariable ["ObjectID", _oid];
_object setVariable ["lastUpdate",diag_tickTime];
_object setVariable ["VGObjectID",_VG_ObjID, false];
@ -83,22 +82,19 @@ 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";};
_isAir = _object isKindOf "Air";
{
_selection = _x select 0;
_dam = _x select 1;
_dam = [_x select 1,(_x select 1) min 0.8] select (!_isAir && {_selection in dayZ_explosiveParts});
[_object,_selection,_dam] call fnc_veh_setFixServer;
} forEach _hitpoints;
[_object,_hitpoints] call server_setHitpoints;
[_object,"all",true] call server_updateObject;
[_object,vg_clearAmmo,false] call fn_vehicleAddons;
dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object];
_object call fnc_veh_ResetEH;
{if (_object isKindOf _x) exitWith {_object disableTIEquipment true;}} count vg_disableThermal;
_object call fnc_veh_ResetEH;
PVDZE_veh_Init = _object;
publicVariable "PVDZE_veh_Init";

@ -1,4 +1,4 @@
private ["_damageVeh","_VGobjID","_array","_backPack","_backPackCount","_charID","_class","_clientID","_colour","_colour2","_damage","_displayName","_fnc_sanitizeInput","_fuel","_gearCount","_hit","_hitpoints","_index","_inventory","_inventoryCount","_key","_magazine","_magazineCount","_message","_name","_objectID","_objectUID","_player","_playerUID","_selection","_vehicle","_weapons","_weaponsCount","_woGear"];
private ["_damageVeh","_VGobjID","_array","_backPack","_backPackCount","_charID","_class","_clientID","_colour","_colour2","_damage","_displayName","_fuel","_hit","_hitpoints","_index","_inventory","_inventoryCount","_key","_magazine","_magazineCount","_message","_name","_objectID","_objectUID","_player","_playerUID","_selection","_vehicle","_weapons","_weaponsCount","_woGear"];
_vehicle = _this select 0;
_player = _this select 1;
@ -6,31 +6,9 @@ _woGear = _this select 2;
_clientID = owner _player;
_playerUID = if (count _this > 3) then {_this select 3} else {getPlayerUID _player};
_gearCount = {
private ["_counter"];
_counter = 0;
{_counter = _counter + _x;} count _this;
_counter;
};
_fnc_sanitizeInput = {
private ["_input","_badChars"];
_input = _this;
_input = toArray (_input);
_badChars = [60,62,38,123,125,91,93,59,58,39,96,126,44,46,47,63,124,92,34];
{
_input = _input - [_x];
} forEach _badChars;
_input = toString (_input);
_input
};
_class = typeOf _vehicle;
_displayName = (getText(configFile >> "cfgVehicles" >> _class >> "displayName")) call _fnc_sanitizeInput;
_name = if (alive _player) then {(name _player) call _fnc_sanitizeInput;} else {"unknown player";};
_displayName = [(getText(configFile >> "cfgVehicles" >> _class >> "displayName")),1] call fnc_sanitizeInput;
_name = if (alive _player) then {[(name _player),1] call fnc_sanitizeInput;} else {"unknown player";};
_charID = _vehicle getVariable ["CharacterID","0"];
_objectID = _vehicle getVariable ["ObjectID","0"];
@ -71,9 +49,9 @@ if (!_woGear) then {
_weapons = getWeaponCargo _vehicle;
_magazine = getMagazineCargo _vehicle;
_backPack = getBackpackCargo _vehicle;
_weaponsCount = (_weapons select 1) call _gearCount;
_magazineCount = (_magazine select 1) call _gearCount;
_backPackCount = (_backPack select 1) call _gearCount;
_weaponsCount = (_weapons select 1) call fnc_gearCount;
_magazineCount = (_magazine select 1) call fnc_gearCount;
_backPackCount = (_backPack select 1) call fnc_gearCount;
_inventory = [_weapons, _magazine, _backPack];
_inventoryCount = [_weaponsCount, _magazineCount, _backPackCount];
};

@ -2,7 +2,7 @@
changeCode - Safe, Lockbox and Door code changing script by salival (https://github.com/oiad)
*/
private ["_backpacks","_charID","_characterID","_clientID","_coins","_dir","_holder","_inventory","_key","_lockedClass","_magazines","_message","_name","_object","_objectID","_objectUID","_ownerID","_ownerPUID","_player","_playerUID","_pos","_typeOf","_vector","_weapons","_worldSpace","_clientKey","_exitReason"];
private ["_isZSC","_backpacks","_charID","_characterID","_clientID","_coins","_dir","_holder","_inventory","_key","_lockedClass","_magazines","_message","_name","_object","_objectID","_objectUID","_ownerID","_ownerPUID","_player","_playerUID","_pos","_typeOf","_vector","_weapons","_worldSpace","_clientKey","_exitReason"];
if (count _this < 4) exitWith {diag_log "server_changeCode error: Improper parameter format";};
@ -15,7 +15,7 @@ _typeOf = typeOf _object;
if !(_typeOf in DZE_unlockedStorage) exitWith {diag_log "server_changeCode called with invalid storage object!"};
_lockedClass = getText (configFile >> "CfgVehicles" >> _typeOf >> "lockedClass");
_pos = _object getVariable ["OEMPos",getPosATL _object];
_pos = getPosATL _object;
_dir = getDir _object;
_vector = [vectorDir _object, vectorUp _object];
_charID = _object getVariable ["CharacterID","0"];
@ -35,30 +35,30 @@ if (_exitReason != "") exitWith {diag_log _exitReason};
_weapons = getWeaponCargo _object;
_magazines = getMagazineCargo _object;
_backpacks = getBackpackCargo _object;
if (Z_singleCurrency) then {_coins = _object getVariable ["cashMoney",0];};
_isZSC = false;
if (Z_singleCurrency) then {
_isZSC = _typeOf in DZE_MoneyStorageClasses && _lockedClass in DZE_MoneyStorageClasses;
};
if (_isZSC) then {_coins = _object getVariable ["cashMoney",0];};
[_objectID,_objectUID,_object] call server_deleteObjDirect;
_holder = _lockedClass createVehicle [0,0,0];
_holder setDir _dir;
//_holder setDir _dir; // setdir is incompatible with setVectorDirAndUp and should not be used together on the same object https://community.bistudio.com/wiki/setVectorDirAndUp
_holder setVariable ["memDir",_dir,true];
_holder setVectorDirAndUp _vector;
_holder setPosATL _pos;
_holder setVariable ["CharacterID",_characterID,true];
_holder setVariable ["OEMPos",_pos,true];
if (DZE_permanentPlot) then {
_ownerPUID = if (_charID == "0000" || _charID == "10000") then {_playerUID} else {_ownerID};
_worldSpace = [_dir,_pos,_ownerPUID,_vector];
_holder setVariable ["ownerPUID",_ownerPUID,true];
} else {
_worldSpace = [_dir,_pos];
};
_ownerPUID = if (_charID == "0000" || _charID == "10000") then {_playerUID} else {_ownerID};
_worldSpace = [_dir,_pos,_ownerPUID,_vector];
_holder setVariable ["ownerPUID",_ownerPUID,true];
if (Z_singleCurrency) then {_holder setVariable ["cashMoney",_coins,true];};
if (_isZSC) then {_holder setVariable ["cashMoney",_coins,true];};
_objectUID = _worldSpace call dayz_objectUID2;
_holder setVariable ["ObjectUID",_objectUID,true];
_holder setVariable ["ObjectUID",_objectUID];
deleteVehicle _object;
@ -69,7 +69,7 @@ _holder setVariable ["BackpackCargo",_backpacks,false];
[_characterID,_holder,_worldSpace,_inventory,_player,_clientKey] call server_publishObj;
if (Z_singleCurrency) then {
if (_isZSC) then {
_key = format["CHILD:309:%1:",_objectUID] + str _inventory + ":" + str _coins + ":";
_key call server_hiveWrite;
};

@ -1,38 +1,33 @@
/*
[_objectID,_objectUID,_activatingPlayer,_objPos,dayz_authKey] call server_deleteObj;
[netID _activatingPlayer,netID _obj,dayz_authKey] call server_deleteObj;
For PV calls from the client use this function, otherwise if calling directly from the server use server_deleteObjDirect
*/
private["_id","_uid","_key","_activatingPlayer","_objPos","_clientKey","_exitReason","_PlayerUID","_processDelete"];
if (count _this < 3) exitWith {diag_log "Server_DeleteObj error: Improper parameter format";};
if (count _this < 5) exitWith {diag_log "Server_DeleteObj error: Improper parameter format";};
_id = _this select 0;
_uid = _this select 1;
_activatingPlayer = _this select 2;
_objPos = _this select 3; //Can be object or position if _processDelete is false
_clientKey = _this select 4;
_processDelete = [true,_this select 5] select (count _this > 5);
_PlayerUID = getPlayerUID _activatingPlayer;
local _activatingPlayer = objectFromNetID(_this select 0);
local _obj = objectFromNetID(_this select 1);
local _clientKey = _this select 2;
local _playerUID = getPlayerUID _activatingPlayer;
_exitReason = [_this,"DeleteObj",_objPos,_clientKey,_PlayerUID,_activatingPlayer] call server_verifySender;
local _exitReason = [_this,"DeleteObj",_obj,_clientKey,_playerUID,_activatingPlayer] call server_verifySender;
if (_exitReason != "") exitWith {diag_log _exitReason};
if (isServer) then {
if (_processDelete) then {deleteVehicle _objPos};
local _id = _obj getVariable ["ObjectID","0"];
local _uid = _obj getVariable ["ObjectUID","0"];
_type = typeOf _obj;
if (typeName _objPos != "ARRAY") then {
_objPos = typeof _objPos;
};
//remove from database
if (parseNumber _id > 0) then {
//Send request
_key = format["CHILD:304:%1:",_id];
_key call server_hiveWrite;
diag_log format["DELETE: Player %1(%2) deleted %4 with ID: %3",(_activatingPlayer call fa_plr2str), _PlayerUID, _id, _objPos];
} else {
//Send request
_key = format["CHILD:310:%1:",_uid];
_key call server_hiveWrite;
diag_log format["DELETE: Player %1(%2) deleted %4 with UID: %3",(_activatingPlayer call fa_plr2str), _PlayerUID, _uid, _objPos];
};
local _processDelete = [true,_this select 3] select (count _this > 3);
if (_processDelete) then {deleteVehicle _obj};
//remove from database
if (parseNumber _id > 0) then {
//Send request
_key = format["CHILD:304:%1:",_id];
_key call server_hiveWrite;
diag_log format["DELETE: Player %1(%2) deleted %4 with ID: %3",(_activatingPlayer call fa_plr2str), _playerUID, _id, _type];
} else {
//Send request
_key = format["CHILD:310:%1:",_uid];
_key call server_hiveWrite;
diag_log format["DELETE: Player %1(%2) deleted %4 with UID: %3",(_activatingPlayer call fa_plr2str), _playerUID, _uid, _type];
};

@ -1,4 +1,4 @@
private ["_exitReason","_clientKey","_backpacks","_charID","_clientID","_dir","_holder","_lockCode","_lockedClass","_magazines","_name","_obj","_objectID","_objectUID","_ownerID","_packedClass","_player","_playerUID","_pos","_status","_statusText","_type","_unlockedClass","_vector","_weapons","_message","_suppliedCode","_damage","_coins","_wealth"];
private ["_isZSC","_exitReason","_clientKey","_backpacks","_charID","_clientID","_dir","_holder","_lockCode","_lockedClass","_magazines","_name","_obj","_objectID","_objectUID","_ownerID","_packedClass","_player","_playerUID","_pos","_status","_statusText","_type","_unlockedClass","_vector","_weapons","_message","_suppliedCode","_damage","_coins","_wealth"];
_player = _this select 0;
_obj = _this select 1;
@ -6,7 +6,7 @@ _status = _this select 2;
_name = ["Dead Player",name _player] select (alive _player);
_type = typeOf _obj;
_pos = _obj getVariable ["OEMPos",getPosATL _obj];
_pos = getPosATL _obj;
_dir = direction _obj;
_vector = [vectorDir _obj, vectorUp _obj];
_charID = _obj getVariable ["CharacterID","0"];
@ -51,27 +51,30 @@ if !(_type in DZE_DoorsLocked) then {
if (_exitReason != "") exitWith {diag_log _exitReason};
call {
_isZSC = false;
if (Z_singleCurrency) then {
_isZSC = _type in DZE_MoneyStorageClasses;
};
if (_status == 0) exitwith { //Unlocking
_unlockedClass = getText (configFile >> "CfgVehicles" >> _type >> "unlockedClass");
_weapons = _obj getVariable ["WeaponCargo",[]];
_magazines = _obj getVariable ["MagazineCargo",[]];
_backpacks = _obj getVariable ["BackpackCargo",[]];
if (Z_singleCurrency) then {_coins = _obj getVariable ["cashMoney",0];};
if (_isZSC && {_unlockedClass in DZE_MoneyStorageClasses}) then {_coins = _obj getVariable ["cashMoney",0];};
_damage = damage _obj;
// Create new unlocked safe, then delete old locked safe
_holder = _unlockedClass createVehicle [0,0,0];
_holder setDir _dir;
//_holder setDir _dir; // setdir is incompatible with setVectorDirAndUp and should not be used together on the same object https://community.bistudio.com/wiki/setVectorDirAndUp
_holder setVariable ["memDir",_dir,true];
_holder setVectorDirAndUp _vector;
_holder setPosATL _pos;
_holder setVariable ["CharacterID",_charID,true];
_holder setVariable ["ObjectID",_objectID,true];
_holder setVariable ["ObjectUID",_objectUID,true];
_holder setVariable ["OEMPos",_pos,true];
_holder setVariable ["ObjectID",_objectID];
_holder setVariable ["ObjectUID",_objectUID];
_holder setDamage _damage;
if (DZE_permanentPlot) then {_holder setVariable ["ownerPUID",_ownerID,true];};
if (Z_singleCurrency) then {_holder setVariable ["cashMoney",_coins,true];};
_holder setVariable ["ownerPUID",_ownerID,true];
if (_isZSC && {_unlockedClass in DZE_MoneyStorageClasses}) then {_holder setVariable ["cashMoney",_coins,true];};
deleteVehicle _obj;
[_weapons,_magazines,_backpacks,_holder] call fn_addCargo;
@ -84,22 +87,21 @@ call {
_weapons = getWeaponCargo _obj;
_magazines = getMagazineCargo _obj;
_backpacks = getBackpackCargo _obj;
if (Z_singleCurrency) then {_coins = _obj getVariable ["cashMoney",0];};
if (_isZSC && {_lockedClass in DZE_MoneyStorageClasses}) then {_coins = _obj getVariable ["cashMoney",0];};
_damage = damage _obj;
// Create new locked safe, then delete old unlocked safe
_holder = _lockedClass createVehicle [0,0,0];
_holder setDir _dir;
//_holder setDir _dir; // setdir is incompatible with setVectorDirAndUp and should not be used together on the same object https://community.bistudio.com/wiki/setVectorDirAndUp
_holder setVariable ["memDir",_dir,true];
_holder setVectorDirAndUp _vector;
_holder setPosATL _pos;
_holder setVariable ["CharacterID",_charID,true];
_holder setVariable ["ObjectID",_objectID,true];
_holder setVariable ["ObjectUID",_objectUID,true];
_holder setVariable ["OEMPos",_pos,true];
_holder setVariable ["ObjectID",_objectID];
_holder setVariable ["ObjectUID",_objectUID];
_holder setDamage _damage;
if (DZE_permanentPlot) then {_holder setVariable ["ownerPUID",_ownerID,true];};
if (Z_singleCurrency) then {_holder setVariable ["cashMoney",_coins,true];};
_holder setVariable ["ownerPUID",_ownerID,true];
if (_isZSC && {_lockedClass in DZE_MoneyStorageClasses}) then {_holder setVariable ["cashMoney",_coins,true];};
deleteVehicle _obj;
// Local setVariable gear onto new locked safe for easy access on next unlock
@ -114,7 +116,7 @@ call {
_weapons = getWeaponCargo _obj;
_magazines = getMagazineCargo _obj;
_backpacks = getBackpackCargo _obj;
if (Z_singleCurrency) then {_coins = _obj getVariable ["cashMoney",0];};
if (_isZSC) then {_coins = _obj getVariable ["cashMoney",0];};
_holder = _packedClass createVehicle [0,0,0];
deleteVehicle _obj;
@ -122,7 +124,7 @@ call {
_holder setPosATL _pos;
_holder addMagazineCargoGlobal [getText(configFile >> "CfgVehicles" >> _packedClass >> "seedItem"),1];
[_weapons,_magazines,_backpacks,_holder] call fn_addCargo;
if (Z_singleCurrency && {_coins > 0}) then {
if (_isZSC && {_coins > 0}) then {
private "_displayName";
_displayName = getText (configFile >> "CfgVehicles" >> _type >> "displayName");
@ -140,7 +142,7 @@ call {
if (_status < 4) then {
_type = call {
if (_type in ["VaultStorageLocked","VaultStorage","VaultStorage2Locked","VaultStorage2","TallSafe"]) exitwith {
if (_type in ["VaultStorageLocked","VaultStorage","VaultStorage2Locked","VaultStorage2","TallSafe","TallSafeLocked"]) exitwith {
if (_ownerID == _playerUID) then {_lockCode = format["%1 - Owner",_lockCode];};
"Safe"
};

@ -1,47 +1,51 @@
/* Maintain Area - written by Skaronator */
/*
1: PVDZE_maintainArea = [player,1,[[Object, _objectID, _objectUID],[Object, _objectID, _objectUID]...etc]];
2: PVDZE_maintainArea = [player,2,[Object, _objectID, _objectUID]];
/* Maintain Area - written by Skaronator
Updated by iben
1: PVDZE_maintainArea = [netID player,1,[netID Object,netID Object,netID Object,...etc]];
2: PVDZE_maintainArea = [netID player,2,[netID Object]];
*/
private ["_player","_option","_obj","_name","_objectsInfo","_UID","_ID","_key"];
if ((_this select 1) == 1) exitWith {
{
local _obj = objectFromNetId _x;
local _ID = _obj getVariable ["ObjectID", "0"];
_player = _this select 0;
_option = _this select 1;
_objectsInfo = _this select 2;
if (_ID == "0") then {
local _UID = _obj getVariable ["ObjectUID", "0"];
if (_option == 1) then {
{
_obj = _x select 0;
_ID = _x select 1;
_UID = _x select 2;
if (_ID == "0") then {
if (_UID != "0") then {
_obj setDamage 0;
_key = format["CHILD:397:%1:", _UID];
_key call server_hiveWrite;
};
} else {
_obj setDamage 0;
_key = format["CHILD:396:%1:", _ID];
_key call server_hiveWrite;
};
} count _objectsInfo;
_name = if (alive _player) then { name _player; } else { "Dead Player"; };
diag_log format ["MAINTAIN AREA BY %1 - %2 Objects at %3, Grid: %4", _name, (count _objectsInfo), (getPosATL _player), mapGridPosition(getPosATL _player)];
} else {
_obj = _objectsInfo select 0;
_ID = _objectsInfo select 1;
_UID = _objectsInfo select 2;
if (_ID == "0") then {
if (_UID != "0") then {
_obj setDamage 0;
_key = format["CHILD:397:%1:", _UID];
_key call server_hiveWrite;
};
} else {
_obj setDamage 0;
_key = format["CHILD:396:%1:", _ID];
_key call server_hiveWrite;
};
};
if (_UID != "0") then {
_obj setDamage 0;
(format ["CHILD:397:%1:", _UID]) call server_hiveWrite
}
} else {
_obj setDamage 0;
(format ["CHILD:396:%1:", _ID]) call server_hiveWrite
}
} count (_this select 2);
local _player = objectFromNetId (_this select 0);
local _position = getPosATL _player;
diag_log format [
"MAINTAIN AREA BY %1 - %2 Objects at %3, Grid: %4."
,if (alive _player) then {name _player} else {"Dead Player"}
,count (_this select 2), _position, mapGridPosition _position
]
};
local _obj = objectFromNetId ((_this select 2) select 0);
local _ID = _obj getVariable ["ObjectID", "0"];
if (_ID == "0") exitWith {
local _UID = _obj getVariable ["ObjectUID", "0"];
if (_UID != "0") then {
_obj setDamage 0;
(format ["CHILD:397:%1:", _UID]) call server_hiveWrite
}
};
_obj setDamage 0;
(format ["CHILD:396:%1:", _ID]) call server_hiveWrite

@ -18,7 +18,6 @@ _sourceID = _this select 10;
//Mark player as dead so we bypass the ghost system
dayz_died set [count dayz_died, _playerID];
_newObject setVariable ["bodyName",_playerName,true];
_newObject setVariable ["bodyUID",_playerID,true];
_pos = getPosATL _newObject;
@ -86,5 +85,4 @@ if (_playerName != "unknown" || {_sourceName != "unknown"}) then {
};
_newObject setDamage 1;
_newObject setOwner 0;
//dead_bodyCleanup set [count dead_bodyCleanup,_newObject];
_newObject setOwner 0;

@ -194,8 +194,3 @@ if (count dayz_activeInvites > 0) then {
PVCDZ_plr_PlayerAccepted = [_playerName,diag_ticktime];
(owner _playerObj) publicVariableClient "PVCDZ_plr_PlayerAccepted";
if ((count DZE_ServerMarkerArray) > 0) then {
PVDZ_ServerMarkerSend = ["JIP",DZE_ServerMarkerArray];
(owner _playerObj) publicVariableClient "PVDZ_ServerMarkerSend";
};

@ -99,6 +99,7 @@ if (count _medical > 0) then {
_fractures = _medical select 9;
_playerObj setVariable ["hit_legs",(_fractures select 0),true];
_playerObj setVariable ["hit_hands",(_fractures select 1),true];
_playerObj setVariable ["unconsciousTime",(_medical select 10),true];
_playerObj setVariable ["messing",if (count _medical >= 14) then {(_medical select 13)} else {[0,0,0]},true];
_playerObj setVariable ["blood_testdone",if (count _medical >= 15) then {(_medical select 14)} else {false},true];
@ -114,7 +115,10 @@ if (count _medical > 0) then {
};
} else {
//Reset bleeding wounds
call fnc_usec_resetWoundPoints;
{
_playerObj setVariable["hit_"+_x,false,true];
} forEach USEC_typeOfWounds;
//Reset fractures
_playerObj setVariable ["hit_legs",0,true];
_playerObj setVariable ["hit_hands",0,true];
@ -228,7 +232,6 @@ if (_findIndex > -1) then {
// Sync weather settings for JIP player
_clientID publicVariableClient "PVDZE_SetWeather";
//PVCDZ_plr_Login2 = [_worldspace,_state,_randomKey];
PVCDZ_plr_Login2 = [[0,respawn_west_original],_state,_randomKey,_worldspace,_randomSpot,([_randomSpot,_playerID] call spawn_config)];
_clientID publicVariableClient "PVCDZ_plr_Login2";
if (dayz_townGenerator) then {
@ -240,7 +243,7 @@ _playerObj setVariable ["lastTime",diag_ticktime];
//set server-side inventory variable to monitor player gear
if (count _inventory > 2) then {
_playerObj setVariable["ServerMagArray",[_inventory select 1,_inventory select 2,_inventory select 0], false];
_playerObj setVariable["ServerMagArray",_inventory select 1, false];
};
//Record Player Login/LogOut

@ -2,8 +2,7 @@
local _character = _this select 0;
local _magazines = _this select 1;
local _dayz_onBack = _this select 2;
local _weaponsPlayer = _this select 3;
local _dayz_onBack = _character getVariable ["dayz_onBack",""];
local _characterID = _character getVariable ["characterID","0"];
local _playerUID = getPlayerUID _character;
local _charPos = getPosATL _character;
@ -41,7 +40,7 @@ local _usec_Dead = _character getVariable ["USEC_isDead",false];
local _lastTime = _character getVariable ["lastTime",-1];
local _modelChk = _character getVariable ["model_CHK",""];
local _temp = round (_character getVariable ["temperature",100]);
local _lastMagazines = _character getVariable ["ServerMagArray",[[],"",[]]];
local _lastMagazines = _character getVariable ["ServerMagArray",[]];
//Get difference between current stats and stats at last sync
local _statsDiff = [_character,_playerUID] call server_getStatsDiff;
_humanity = _statsDiff select 0;
@ -54,17 +53,12 @@ local _charPosLen = count _charPos;
local _magTemp = [];
if (!isNil "_magazines") then {
_playerGear = [_weaponsPlayer,_magazines,_dayz_onBack];
_character setVariable["ServerMagArray",[_magazines,_dayz_onBack,_weaponsPlayer], false];
_playerGear = [weapons _character,_magazines,_dayz_onBack];
_character setVariable["ServerMagArray",_magazines, false];
} else {
//check Magazines everytime they aren't sent by player_forceSave
_magTemp = (_lastMagazines select 0);
if (isNil "_dayz_onBack") then {
_dayz_onBack = _lastMagazines select 1;
};
if (isNil "_weaponsPlayer") then {
_weaponsPlayer = _lastMagazines select 2;
};
_magTemp = _lastMagazines;
if (count _magTemp > 0) then {
_magazines = [(magazines _character),20] call array_reduceSize;
{
@ -73,7 +67,7 @@ if (!isNil "_magazines") then {
_class = _x select 0;
};
if (_class in _magazines) then {
local _MatchedCount = {_compare = if (typeName _x == "ARRAY") then {_x select 0;} else {_x}; _compare == _class} count _magTemp;
local _MatchedCount = {local _compare = if (typeName _x == "ARRAY") then {_x select 0;} else {_x}; _compare == _class} count _magTemp;
local _CountedActual = {_x == _class} count _magazines;
if (_MatchedCount > _CountedActual) then {
_magTemp set [_forEachIndex, "0"];
@ -81,16 +75,15 @@ if (!isNil "_magazines") then {
} else {
_magTemp set [_forEachIndex, "0"];
};
} forEach (_lastMagazines select 0);
} forEach _lastMagazines;
_magazines = _magTemp - ["0"];
_magazines = [_magazines,_dayz_onBack,_weaponsPlayer];
_character setVariable["ServerMagArray",_magazines, false];
_playerGear = [_magazines select 2,_magazines select 0,_magazines select 1];
_playerGear = [weapons _character,_magazines,_dayz_onBack];
} else {
_magazines = [_magTemp,_dayz_onBack,_weaponsPlayer];
_magazines = _magTemp;
};
_character setVariable["ServerMagArray",_magazines, false];
_playerGear = [_magazines select 2,_magazines select 0,_magazines select 1];
_playerGear = [weapons _character,_magazines,_dayz_onBack];
};
//Check if update is requested

@ -31,11 +31,12 @@ if ([_object, "Server"] call check_publishobject) then {
if !(_object isKindOf "TrapItems") then {
if (DZE_GodModeBase && {!(_type in DZE_GodModeBaseExclude)}) then {
_object addEventHandler ["HandleDamage", {false}];
_object addEventHandler ["HandleDamage", {0}];
} else {
_object addMPEventHandler ["MPKilled",{_this call vehicle_handleServerKilled;}];
_object addMPEventHandler ["MPKilled",{if !(isServer) exitWith {};_this call vehicle_handleServerKilled;}];
};
};
// Test disabling simulation server side on buildables only.
_object enableSimulation false;

@ -63,25 +63,25 @@ if (_outcome != "PASS") then {
diag_log("CUSTOM: failed to get id for : " + str(_uid));
} else {
_oid = _result select 1;
_object setVariable ["ObjectID", _oid, true];
_object setVariable ["ObjectID", _oid];
#ifdef OBJECT_DEBUG
diag_log("CUSTOM: Selected " + str(_oid));
#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;
{
_selection = _x select 0;
_dam = _x select 1;
if (_selection in dayZ_explosiveParts && _dam > 0.8) then {_dam = 0.8};
[_object,_selection,_dam] call fnc_veh_setFixServer;
} count _array;
[_object,_array] call server_setHitpoints;
_object setFuel _fuel;
_object setvelocity [0,0,1];
[_object,"all",true] call server_updateObject;
[_object,DZE_clearVehicleAmmo,DZE_addVehicleAmmo] call fn_vehicleAddons;
_object call fnc_veh_ResetEH;
PVDZE_veh_Init = _object;

@ -73,15 +73,14 @@ if (_outcome != "PASS") then {
if(!_donotusekey) then {
_object setvehiclelock "locked";
//_object setVariable ["MF_Tow_Cannot_Tow",true,true];
};
clearWeaponCargoGlobal _object;
clearMagazineCargoGlobal _object;
dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object];
_object setVariable ["ObjectID", _oid, true];
_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]];
@ -94,9 +93,10 @@ if (_outcome != "PASS") then {
deleteVehicle _object_para;
};
};
[_object,DZE_clearVehicleAmmo,DZE_addVehicleAmmo] call fn_vehicleAddons;
_object call fnc_veh_ResetEH;
_object setVariable ["Owner", [_playerUID], true];
PVDZE_veh_Init = _object;
publicVariable "PVDZE_veh_Init";

@ -1,7 +1,7 @@
private ["_coins","_activatingPlayer","_object","_worldspace","_location","_dir","_class","_uid","_key","_keySelected"
,"_characterID","_result","_outcome","_oid","_objectID","_objectUID","_newobject","_weapons","_magazines","_backpacks"
,"_clientKey","_exitReason","_playerUID","_isAir","_fuel","_selection","_dam","_hitpoints","_newHitpoints","_damage"
,"_hit","_inv","_action","_clearTurrets","_message"];
,"_hit","_inv"];
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"
if (count _this < 6) exitWith {
@ -16,7 +16,6 @@ _class = _this select 2;
_keySelected = _this select 3;
_activatingPlayer = _this select 4;
_clientKey = _this select 5;
_action = if (count _this > 6) then {_this select 6} else {""};
_playerUID = getPlayerUID _activatingPlayer;
_characterID = _keySelected;
@ -47,7 +46,7 @@ _magazines = getMagazineCargo _object;
_backpacks = getBackpackCargo _object;
_inv = [_weapons,_magazines,_backpacks];
if (Z_SingleCurrency && ZSC_VehicleMoneyStorage) then {
if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage}) then {
_coins = _object getVariable ["cashMoney",0];
};
@ -67,9 +66,9 @@ diag_log ("PUBLISH: Attempt " + str(_object));
_dir = _worldspace select 0;
_uid = _worldspace call dayz_objectUID2;
_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, _damage , _characterID, _worldspace, _inv, _newHitpoints, _fuel,_uid];
_key = str formatText["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, _damage , _characterID, _worldspace, _inv, _newHitpoints, _fuel,_uid];
#ifdef OBJECT_DEBUG
diag_log ("HIVE: WRITE: "+ str(_key));
diag_log ("HIVE: WRITE: "+ _key);
#endif
_key call server_hiveWrite;
@ -93,9 +92,6 @@ if (_outcome != "PASS") then {
#ifdef OBJECT_DEBUG
diag_log("CUSTOM: Selected " + str(_oid));
#endif
_colour = _object getVariable ["Colour","0"];
_colour2 = _object getVariable ["Colour2","0"];
deleteVehicle _object;
[_objectID,_objectUID,_object] call server_deleteObjDirect;
@ -107,11 +103,11 @@ if (_outcome != "PASS") then {
// switch var to new vehicle at this point.
_object = _newobject;
_object setVariable ["ObjectID", _oid, true];
_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 {
if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage && (_coins > 0)}) then {
_object setVariable ["cashMoney",_coins,true];
};
@ -125,81 +121,24 @@ if (_outcome != "PASS") then {
_object setPosATL _location;
_object setVectorUp surfaceNormal _location;
_object setDamage _damage;
if (_colour != "0") then {
_object setVariable ["Colour",_colour,true];
_clrinit = format ["#(argb,8,8,3)color(%1)",_colour];
_object setVehicleInit "this setObjectTexture [0,"+str _clrinit+"];";
};
if (_colour2 != "0") then {
_object setVariable ["Colour2",_colour2,true];
_clrinit2 = format ["#(argb,8,8,3)color(%1)",_colour2];
_object setVehicleInit "this setObjectTexture [1,"+str _clrinit2+"];";
};
processInitCommands;
[_weapons,_magazines,_backpacks,_object] call fn_addCargo;
_clearTurrets = {
//By denvdmj (probably, I found it on the biki)
private ["_weaponArray","_findRecurse","_class","_obj","_turret","_mags"];
_obj = _this;
_weaponArray = [];
_weaponArray set [count _weaponArray,[-1]];
_findRecurse = {
private ["_root", "_class", "_path", "_currentPath", "_thisThis"];
_root = (_this select 0);
_path = +(_this select 1);
_thisThis = _this select 2;
for "_i" from 0 to count _root -1 do {
_class = _root select _i;
if (isClass _class) then {
_currentPath = _path + [_i];
{_weaponArray set [count _weaponArray, _currentPath];} count getArray (_class >> "weapons");
_class = _class >> "turrets";
if (isClass _class) then {[_class, _currentPath, _thisThis] call _findRecurse;};
};
};
};
[configFile >> "CfgVehicles" >> typeOf (_obj) >> "turrets", [], _this] call _findRecurse;
{
_turret = _x;
_mags = _obj magazinesTurret _turret;
{_obj removeMagazinesTurret[_x,_turret];} count _mags;
} forEach _weaponArray;
};
_isAir = _object isKindOf "Air";
{
_selection = _x select 0;
_dam = [_x select 1,(_x select 1) min 0.8] select (!_isAir && {_selection in dayZ_explosiveParts});
_object setHit [_selection,_dam];
} count _newHitpoints;
_object setFuel _fuel;
[_object,_newHitpoints] call server_setHitpoints;
[_object,"all",true] call server_updateObject;
[_object,DZE_clearVehicleAmmo,false] call fn_vehicleAddons;
_object call fnc_veh_ResetEH;
// for non JIP users this should make sure everyone has eventhandlers for vehicles.
PVDZE_veh_Init = _object;
publicVariable "PVDZE_veh_Init";
{if (_object isKindOf _x) exitWith {_object disableTIEquipment true;}} count vkc_disableThermal;
if (vkc_clearAmmo) then {_object call _clearTurrets;};
dze_waiting = "success";
(owner _activatingPlayer) publicVariableClient "dze_waiting";
if (_action == "") then {
_message = format["PUBLISH: %1(%2) upgraded %3 with UID %4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,(_location call fa_coor2str)];
} else {
_message = format["PUBLISH: %1(%2) %6 %3 with UID %4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,(_location call fa_coor2str),_action];
};
diag_log _message;
diag_log format["PUBLISH: %1(%2) upgraded %3 with UID %4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,(_location call fa_coor2str)];
};

@ -0,0 +1,178 @@
private ["_coins","_activatingPlayer","_object","_worldspace","_location","_dir","_class","_uid","_key","_keySelected"
,"_characterID","_result","_outcome","_oid","_objectID","_objectUID","_newobject","_weapons","_magazines","_backpacks"
,"_clientKey","_exitReason","_playerUID","_isAir","_fuel","_selection","_dam","_hitpoints","_newHitpoints","_damage"
,"_hit","_inv","_action","_clearTurrets","_message"];
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"
if (count _this < 6) exitWith {
diag_log "Server_PublishVehicle3 error: Wrong parameter format";
dze_waiting = "fail";
(owner (_this select 4)) publicVariableClient "dze_waiting";
};
_object = _this select 0;
_worldspace = _this select 1;
_class = _this select 2;
_keySelected = _this select 3;
_activatingPlayer = _this select 4;
_clientKey = _this select 5;
_action = if (count _this > 6) then {_this select 6} else {""};
_playerUID = getPlayerUID _activatingPlayer;
_characterID = _keySelected;
_exitReason = [_this,"PublishVehicle3",(_worldspace select 1),_clientKey,_playerUID,_activatingPlayer] call server_verifySender;
if (_exitReason != "") exitWith {
diag_log _exitReason;
dze_waiting = "fail";
(owner _activatingPlayer) publicVariableClient "dze_waiting";
};
if (!(isClass(configFile >> "CfgVehicles" >> _class)) || isNull _object) exitWith {
diag_log ("HIVE-PublishVehicle3 Error: Vehicle does not exist: "+ str(_class));
dze_waiting = "fail";
(owner _activatingPlayer) publicVariableClient "dze_waiting";
};
_objectID = _object getVariable ["ObjectID","0"];
_objectUID = _object getVariable ["ObjectUID","0"];
if (_objectUID == "0") then {
_objectUID = "";
{
_x = _x * 10;
if (_x < 0) then {_x = _x * -10};
_objectUID = _objectUID + str(round(_x));
} forEach getPosATL _object;
_objectUID = _objectUID + str(round((getDir _object) + time));
_object setVariable ["ObjectUID",_objectUID];
};
_location = [_object] call fnc_getPos;
_fuel = fuel _object;
_hitpoints = _object call vehicle_getHitpoints;
_newHitpoints = [];
_damage = damage _object;
// add items from previous vehicle here
_weapons = getWeaponCargo _object;
_magazines = getMagazineCargo _object;
_backpacks = getBackpackCargo _object;
_inv = [_weapons,_magazines,_backpacks];
if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage}) then {
_coins = _object getVariable ["cashMoney",0];
};
{
_hit = [_object,_x] call object_getHit;
if ((_hit select 0) > 0) then {
_newHitpoints set [count _newHitpoints,[(_hit select 1),(_hit select 0)]];
} else {
_newHitpoints set [count _newHitpoints,[(_hit select 1),0]];
};
} count _hitpoints;
#ifdef OBJECT_DEBUG
diag_log ("PUBLISH: Attempt " + str(_object));
#endif
_dir = _worldspace select 0;
_uid = _worldspace call dayz_objectUID2;
_key = str formatText["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, _damage , _characterID, _worldspace, _inv, _newHitpoints, _fuel,_uid];
#ifdef OBJECT_DEBUG
diag_log ("HIVE: WRITE: "+ _key);
#endif
_key call server_hiveWrite;
// GET DB ID
_key = format["CHILD:388:%1:",_uid];
#ifdef OBJECT_DEBUG
diag_log ("HIVE: WRITE: "+ str(_key));
#endif
_result = _key call server_hiveReadWrite;
_outcome = _result select 0;
if (_outcome != "PASS") then {
diag_log("HIVE-pv3: failed to get id for : " + str(_uid));
_key = format["CHILD:310:%1:",_uid];
_key call server_hiveWrite;
dze_waiting = "fail";
(owner _activatingPlayer) publicVariableClient "dze_waiting";
} else {
_oid = _result select 1;
#ifdef OBJECT_DEBUG
diag_log("CUSTOM: Selected " + str(_oid));
#endif
_colour = _object getVariable ["Colour","0"];
_colour2 = _object getVariable ["Colour2","0"];
deleteVehicle _object;
[_objectID,_objectUID,_object] call server_deleteObjDirect;
uiSleep 3;
_newobject = _class createVehicle [0,0,0];
// switch var to new vehicle at this point.
_object = _newobject;
_object setVariable ["ObjectID", _oid];
_object setVariable ["lastUpdate",diag_tickTime];
_object setVariable ["CharacterID", _characterID, true];
if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage && {_coins > 0}}) then {
_object setVariable ["cashMoney",_coins,true];
};
dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object];
clearWeaponCargoGlobal _object;
clearMagazineCargoGlobal _object;
clearBackpackCargoGlobal _object;
_object setDir _dir;
_object setPosATL _location;
_object setVectorUp surfaceNormal _location;
_object setDamage _damage;
if (_colour != "0") then {
_object setVariable ["Colour",_colour,true];
_clrinit = format ["#(argb,8,8,3)color(%1)",_colour];
_object setVehicleInit "this setObjectTexture [0,"+str _clrinit+"];";
};
if (_colour2 != "0") then {
_object setVariable ["Colour2",_colour2,true];
_clrinit2 = format ["#(argb,8,8,3)color(%1)",_colour2];
_object setVehicleInit "this setObjectTexture [1,"+str _clrinit2+"];";
};
processInitCommands;
[_weapons,_magazines,_backpacks,_object] call fn_addCargo;
_object setFuel _fuel;
[_object,_newHitpoints] call server_setHitpoints;
[_object,"all",true] call server_updateObject;
[_object,DZE_clearVehicleAmmo,false] call fn_vehicleAddons;
_object call fnc_veh_ResetEH;
// for non JIP users this should make sure everyone has eventhandlers for vehicles.
PVDZE_veh_Init = _object;
publicVariable "PVDZE_veh_Init";
dze_waiting = "success";
(owner _activatingPlayer) publicVariableClient "dze_waiting";
if (_action == "") then {
_message = format["PUBLISH: %1(%2) upgraded %3 with UID %4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,(_location call fa_coor2str)];
} else {
_message = format["PUBLISH: %1(%2) %6 %3 with UID %4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,(_location call fa_coor2str),_action];
};
diag_log _message;
};

@ -0,0 +1,9 @@
local _obj = _this select 0;
local _hitpoints = _this select 1;
local _isAir = _obj isKindOf "Air";
{
local _selection = _x select 0;
local _dam = [_x select 1,(_x select 1) min 0.8] select (!_isAir && {_selection in dayZ_explosiveParts});
_obj setHit [_selection,_dam];
} count _hitpoints;

@ -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,10 +67,8 @@ if (!_allowed || !_proceed) exitWith {
};
// Publish variables
_object setVariable ["CharacterID",_charID,true];
//_object setVariable ["ObjectUID",_objectUID,true];
_object setVariable ["OEMPos",(_worldspace select 1),true];
_setGlobal = [false,true] select ((_class in DZE_isLockedStorageUpgrade) || (_class in DZE_DoorsLocked));
_object setVariable ["CharacterID",_charID,_setGlobal];
//diag_log ("PUBLISH: Attempt " + str(_object));
@ -84,15 +82,15 @@ _key = str formatText["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _cl
_key call server_hiveWrite;
_object setVariable ["lastUpdate",diag_tickTime];
_object setVariable ["ObjectUID", _uid,true];
// _object setVariable ["CharacterID",_charID,true];
_object setVariable ["ObjectUID", _uid];
if (DZE_GodModeBase && {!(_class in DZE_GodModeBaseExclude)}) then {
_object addEventHandler ["HandleDamage",{false}];
_object addEventHandler ["HandleDamage",{0}];
} else {
_object addMPEventHandler ["MPKilled",{_this call vehicle_handleServerKilled;}];
_object addMPEventHandler ["MPKilled",{if !(isServer) exitWith {};_this call vehicle_handleServerKilled;}];
};
_gearClasses = ["Wooden_shed2_DZ","WoodShack2_DZ","StorageShed2_DZ","GunRack2_DZ","WoodCrate2_DZ","TentStorage0","TentStorage1","TentStorage2","TentStorage3","TentStorage4""DomeTentStorage0","DomeTentStorage1","DomeTentStorage2","DomeTentStorage3","DomeTentStorage4","DesertTentStorage0","DesertTentStorage1","DesertTentStorage2","DesertTentStorage3","DesertTentStorage4","StashSmall1","StashSmall2","StashSmall3","StashSmall4","StashMedium","StashMedium1","StashMedium2","StashMedium3","StashMedium4","TentStorageWinter0","TentStorageWinter1","TentStorageWinter2","TentStorageWinter3","TentStorageWinter4","WinterDomeTentStorage0","WinterDomeTentStorage1","WinterDomeTentStorage2","WinterDomeTentStorage3","WinterDomeTentStorage4"];
_gearClasses = ["Wooden_shed2_DZ","WoodShack2_DZ","StorageShed2_DZ","GunRack2_DZ","WoodCrate2_DZ","TentStorage0","TentStorage1","TentStorage2","TentStorage3","TentStorage4","DomeTentStorage0","DomeTentStorage1","DomeTentStorage2","DomeTentStorage3","DomeTentStorage4","DesertTentStorage0","DesertTentStorage1","DesertTentStorage2","DesertTentStorage3","DesertTentStorage4","StashSmall1","StashSmall2","StashSmall3","StashSmall4","StashMedium","StashMedium1","StashMedium2","StashMedium3","StashMedium4","TentStorageWinter0","TentStorageWinter1","TentStorageWinter2","TentStorageWinter3","TentStorageWinter4","WinterDomeTentStorage0","WinterDomeTentStorage1","WinterDomeTentStorage2","WinterDomeTentStorage3","WinterDomeTentStorage4"];
if (count _inv > 0 && {_class in _gearClasses}) then {
[_weapons,_magazines,_backpacks,_object] call fn_addCargo;

@ -5,28 +5,27 @@
This is useful to hinder and identify cheaters who attempt mass deletion or creation of hive objects via PVS.
*/
private ["_clientKey","_exitReason","_function","_index","_objPos","_params","_player","_playerUID"];
local _params = _this select 0;
local _function = "Server_" + (_this select 1);
local _objPos = _this select 2; //Can be object or position
local _clientKey = _this select 3;
local _playerUID = _this select 4;
local _player = _this select 5;
local _playerPos = [_player] call fnc_getPos;
_params = _this select 0;
_function = "Server_" + (_this select 1);
_objPos = _this select 2; //Can be object or position
_clientKey = _this select 3;
_playerUID = _this select 4;
_player = _this select 5;
local _index = dayz_serverPUIDArray find _playerUID;
_index = dayz_serverPUIDArray find _playerUID;
_exitReason = call {
local _exitReason = call {
//If object or player is null distance returns 9999+
//If object or player was moved with setPos on client, position takes a second to update on server
//Coordinates can be used in place of object
if (_objPos distance _player > (Z_VehicleDistance + 10)) exitwith {
format["%1 error: Verification failed, player is too far from object. Distance: %2m/%3m limit PV ARRAY: %4",_function,round (_objPos distance _player),Z_VehicleDistance + 10,_params]
if (_objPos distance _playerPos > (Z_VehicleDistance + 10)) exitwith {
format["%1 error: Verification failed, player is too far from object. Distance: %2m/%3m limit PV ARRAY: %4",_function,round (_objPos distance _playerPos),Z_VehicleDistance + 10,_params]
};
if (_index < 0) exitwith {
format["%1 error: PUID NOT FOUND ON SERVER. PV ARRAY: %2",_function,_params]
};
if (((dayz_serverClientKeys select _index) select 0 != owner _player) or ((dayz_serverClientKeys select _index) select 1 != _clientKey)) exitwith {
if (((dayz_serverClientKeys select _index) select 0 != owner _player) || ((dayz_serverClientKeys select _index) select 1 != _clientKey)) exitwith {
format["%1 error: CLIENT AUTH KEY INCORRECT OR UNRECOGNIZED. PV ARRAY: %2",_function,_params]
};
"";

@ -20,5 +20,4 @@ if ((count _position) == 2) then {
_veh enableSimulation false;
_veh setDir round(random 360);
_veh setPos _position;
_veh setVariable ["ObjectID","1",true];
};

@ -15,7 +15,7 @@ if ((count _position) == 2) then {
_veh enableSimulation false;
_veh setDir round(random 360);
_veh setPos _position;
_veh setVariable ["ObjectID","1",true];
_veh addEventHandler ["HandleDamage",{
local _damage = _this select 2;
if ((_this select 4) == "Sledge_Swing_Ammo") then {

@ -15,5 +15,4 @@ if ((count _position) == 2) then {
_veh enableSimulation false;
_veh setDir round(random 360);
_veh setPos _position;
_veh setVariable ["ObjectID","1",true];
};

@ -25,7 +25,7 @@ server_obj_inv = {
local _class = _this select 3;
local _inventory = call {
if (DZE_permanentPlot && {_class == "Plastic_Pole_EP1_DZ"}) exitwith {
if (_class == "Plastic_Pole_EP1_DZ") exitwith {
_object getVariable ["plotfriends", []] //We're replacing the inventory with UIDs for this item
};
if (DZE_doorManagement && {_class in DZE_DoorsLocked}) exitwith {
@ -37,7 +37,6 @@ server_obj_inv = {
[getWeaponCargo _object, getMagazineCargo _object, getBackpackCargo _object]
};
local _previous = str(_object getVariable["lastInventory",[]]);
if (str _inventory != _previous) then {
local _key = "";
@ -48,7 +47,7 @@ server_obj_inv = {
_key = format["CHILD:303:%1:",_objectID] + str _inventory + ":";
};
if (Z_SingleCurrency) then {
if (Z_SingleCurrency && {(_class in DZE_MoneyStorageClasses) || {ZSC_VehicleMoneyStorage && (_object isKindOf "AllVehicles") && !(_object isKindOf "StaticWeapon")}}) then {
local _coins = _object getVariable ["cashMoney", -1]; //set to invalid value if getVariable fails to prevent overwriting of coins in DB
_key = _key + str _coins + ":";
};

@ -7,11 +7,9 @@
"PVDZ_plr_Login2" addPublicVariableEventHandler {(_this select 1) call server_playerSetup};
"PVDZ_plr_LoginRecord" addPublicVariableEventHandler {_id = (_this select 1) spawn dayz_recordLogin};
"PVDZ_obj_Destroy" addPublicVariableEventHandler {(_this select 1) call server_deleteObj};
"PVDZ_plr_Delete" addPublicVariableEventHandler {(_this select 1) spawn sched_co_deleteVehicle}; // Delete hided players
"PVDZ_plr_Delete" addPublicVariableEventHandler {(_this select 1) setVariable ["sched_co_fliesDeleted", true];(_this select 1) spawn sched_co_deleteVehicle}; // Delete hided players
"PVDZ_send" addPublicVariableEventHandler {(_this select 1) call server_sendToClient};
//"PVDZ_dayzCarBomb" addPublicVariableEventHandler {[_this select 1] execVM "\z\addons\dayz_code\actions\detonate_bomb.sqf";};
//[player,[medical Array]];
"PVDZ_playerMedicalSync" addPublicVariableEventHandler { (_this select 1) call server_medicalSync; ((_this select 1) select 0) setVariable["Medical",((_this select 1) select 1),false]; }; //diag_log format["%1 - %2",((_this select 1) select 0),((_this select 1) select 1)]; };
// EPOCH ADDITIONS
"PVDZE_maintainArea" addPublicVariableEventHandler {(_this select 1) spawn server_maintainArea};

@ -5,7 +5,7 @@
//List of files in your mission to check. For example, you may want to add 'custom\variables.sqf' etc.
//Remove any you aren't using
_files = [
'description.ext','init.sqf','mission.sqm','rules.sqf'
'description.ext','init.sqf','mission.sqm','rules.sqf','configVariables.sqf','dayz_code\init\compiles.sqf','dayz_code\init\variables.sqf'
];
_list = [];

@ -1,4 +1,3 @@
#include "\z\addons\dayz_server\adminTools\init.sqf"
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"
waitUntil {!isNil "bis_fnc_init"};
@ -24,6 +23,7 @@ server_playerSetup = compile preprocessFileLineNumbers "\z\addons\dayz_server\co
server_onPlayerDisconnect = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_onPlayerDisconnect.sqf";
call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\updateObject_functions.sqf";
server_updateObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_updateObject.sqf";
server_setHitpoints = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_setHitpoints.sqf";
server_playerDied = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDied.sqf";
server_publishObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishObject.sqf"; //Creates the object in DB
server_deleteObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_deleteObj.sqf"; //Removes the object from the DB
@ -40,7 +40,11 @@ server_verifySender = compile preprocessFileLineNumbers "\z\addons\dayz_server\c
server_swapObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_swapObject.sqf"; //Used to downgrade and upgrade Epoch buildables
server_publishVeh = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle.sqf"; //Used to spawn random vehicles by server
server_publishVeh2 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle2.sqf"; //Used to purchase vehicles at traders
server_publishVeh3 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3.sqf"; //Used for car upgrades
if (DZE_VehicleKey_Changer) then {
server_publishVeh3 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3_vkc.sqf"; //Used for car upgrades
} else {
server_publishVeh3 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3.sqf"; //Used for car upgrades
};
server_tradeObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_tradeObject.sqf";
server_deaths = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDeaths.sqf";
server_maintainArea = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_maintainArea.sqf";
@ -54,29 +58,9 @@ spawn_ammosupply = compile preprocessFileLineNumbers "\z\addons\dayz_server\comp
spawn_mineveins = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\spawn_mineveins.sqf";
spawn_roadblocks = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\spawn_roadblocks.sqf";
spawn_vehicles = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\spawn_vehicles.sqf";
call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\init.sqf";
fnc_veh_setFixServer = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\veh_setFixServer.sqf"; //process the hit as a NORMAL damage (useful for persistent vehicles)
server_medicalSync = {
local _player = _this select 0;
local _array = _this select 1;
_player setVariable ["USEC_isDead",(_array select 0)]; //0
_player setVariable ["NORRN_unconscious",(_array select 1)]; //1
_player setVariable ["USEC_infected",(_array select 2)]; //2
_player setVariable ["USEC_injured",(_array select 3)]; //3
_player setVariable ["USEC_inPain",(_array select 4)]; //4
_player setVariable ["USEC_isCardiac",(_array select 5)]; //5
_player setVariable ["USEC_lowBlood",(_array select 6)]; //6
_player setVariable ["USEC_BloodQty",(_array select 7)]; //7
// _wounds; //8
// [_legs,_arms]; //9
_player setVariable ["unconsciousTime",(_array select 10)]; //10
_player setVariable ["blood_type",(_array select 11)]; //11
_player setVariable ["rh_factor",(_array select 12)]; //12
_player setVariable ["messing",(_array select 13)]; //13
_player setVariable ["blood_testdone",(_array select 14)]; //14
if (DZE_Virtual_Garage) then {
call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\init.sqf";
};
vehicle_handleServerKilled = {
@ -99,8 +83,7 @@ check_publishobject = {
diag_log format["DEBUG: Checking if Object: %1 is allowed, published by %2",_object,_playername];
#endif
if ((typeOf _object) in DayZ_SafeObjects || (_object getVariable ["EAT_Building",0] == 1)) then {
//if ((typeOf _object) in DayZ_SafeObjects) then {
if ((typeOf _object) in DayZ_SafeObjects) then {
_allowed = true;
};

@ -4,6 +4,7 @@
For detailed information about these variables see:
https://github.com/ebayShopper/ESSV3/blob/master/DOCUMENTATION.md
*/
class_epoch = isClass (configFile >> "CfgWeapons" >> "Chainsaw");
class_level1 = ["0","0","0"];
class_level2 = ["0","0","0"];
class_level3 = ["0","0","0"];
@ -13,11 +14,11 @@ class_levelCount = 3; //If you add more class levels then increase this number.
// class_level2 = class_level2 + class_level3;
#define VIP_ITEMS "HandRoadFlare","ItemBandage",2,"ItemPainkiller","ItemWaterbottle","FoodPistachio","ItemAntibiotic","ItemBloodbag","ItemEpinephrine","ItemMorphine" // constant example, these can be removed if they are not used below
#define VIP_TOOLS "Binocular_Vector","NVGoggles","ItemCompass","ItemKnife","Itemmatchbox","Itemetool","ItemFlashlightRed","ItemWatch","ItemGPS"
#define VIP_TOOLS "Binocular_Vector","NVGoggles","ItemCompass","ItemKnife","ItemMatchbox","Itemetool","ItemFlashlightRed","ItemWatch","ItemGPS"
class_private = [ // These are only visible to players in their respective class levels
["VIP Scout","Camo1_DZ","SurvivorW2_DZ",["30Rnd_556x45_Stanag",2,"15Rnd_9x19_M9SD",3,VIP_ITEMS],["M16A4_ACOG_DZ","M9_SD_DZ","Binocular_Vector"],"DZ_ALICE_Pack_EP1",[],[],1,0,0,"MeleeHatchet"],
["VIP Specialist","Rocket_DZ","SurvivorW2_DZ",["100Rnd_762x51_M240",2,"15Rnd_9x19_M9SD",3,VIP_ITEMS],["Mk48_CCO_DZ","M9_SD_DZ","Binocular_Vector"],"DZ_British_ACU",[],[],2,0,0,"MeleeHatchet"],
["VIP Sniper","Sniper1_DZ","SurvivorW2_DZ",["20Rnd_762x51_DMR",2,"15Rnd_9x19_M9SD",3,VIP_ITEMS],["DMR_DZ","M9_SD_DZ","Binocular_Vector"],"DZ_Backpack_EP1",[],[],3,0,0,"MeleeHatchet"]
["VIP Scout","Camo1_DZ","SurvivorW2_DZ",["30Rnd_556x45_Stanag",2,"15Rnd_9x19_M9SD",3,VIP_ITEMS],["M16A4_ACOG_DZ","M9_SD_DZ","Binocular_Vector"],if (class_epoch) then {"ALICE_Pack_DZE1"} else {"DZ_ALICE_Pack_EP1"},[],[],1,0,0,"MeleeHatchet"],
["VIP Specialist","Rocket_DZ","SurvivorW2_DZ",["100Rnd_762x51_M240",2,"15Rnd_9x19_M9SD",3,VIP_ITEMS],["Mk48_CCO_DZ","M9_SD_DZ","Binocular_Vector"],if (class_epoch) then {"British_ACU_DZE1"} else {"DZ_British_ACU"},[],[],2,0,0,"MeleeHatchet"],
["VIP Sniper","Sniper1_DZ","SurvivorW2_DZ",["20Rnd_762x51_DMR",2,"15Rnd_9x19_M9SD",3,VIP_ITEMS],["DMR_DZ","M9_SD_DZ","Binocular_Vector"],if (class_epoch) then {"CoyoteBackpack_DZE1"} else {"DZ_Backpack_EP1"},[],[],3,0,0,"MeleeHatchet"]
];
class_customLoadout = [
"12345678900000000", // ebay

@ -41,9 +41,7 @@ for "_i" from 1 to (SPAWN_NUM) do
//_vehicle = createVehicle [_class, _position, [], 0, "CAN_COLLIDE"];
_vehicle = _class createVehicle _position;
dayz_serverObjectMonitor set [count dayz_serverObjectMonitor, _vehicle];
_vehicle setVariable ["ObjectID", 1, true];
dayz_serverObjectMonitor set [count dayz_serverObjectMonitor, _vehicle];
_size = sizeOf _class;
{

@ -46,7 +46,6 @@ _spawnCrashSite =
_vehicle = "ClutterCutter_small_2_EP1" createVehicle _position;
_vehicle = _class createVehicle [0,0,0];
_vehicle setVariable ["ObjectID", 1, true];
_vehicle setDir random 360;
_vehicle setPos _position;

@ -90,6 +90,7 @@ AllowedVehiclesList = [
["SUV_TK_CIV_EP1_DZE",_Ratio1],
["SUV_White",_Ratio1],
["SUV_Yellow",_Ratio1],
["SUV_Blue_White",_Ratio1],
["Tractor_DZE",_Ratio3],
["TT650_Civ_DZE",_Ratio3],
["TT650_Ins_DZE",_Ratio3],

@ -0,0 +1,39 @@
/*
Safe Zone Relocate by salival (https://github.com/oiad)
*/
private ["_customPosition","_minDist","_maxDist","_maxDamage","_message","_nearVehicles","_objDist","_position","_safeZonePos","_safeZoneRadius","_useCustomPosition","_unlock"];
_useCustomPosition = false; // Enable a custom position to move vehicles to (i.e a junk yard)
_customPosition = [6942.64,15121.6,0]; // Position for vehicles to be moved to if _useCustomPosition = true;
_minDist = 5; // Minimum distance from the custom position to move vehicles to
_maxDist = 1000; // Maximum distance from the safe zone position to find a safe position or custom position for relocation, setting this too low can make vehicles spawn very close to other vehicles.
_objDist = 15; // Minimum distance from the safe position for relocation to the center of the nearest object. Specifying quite a large distance here will slow the function and might often fail to find a suitable position.
_unlock = false; // Unlock vehicle when moved from the safe zone?
_maxDamage = 0.75; // Vehicles above or equal to this amount of damage will be deleted
{
_safeZonePos = _x select 0;
_safeZoneRadius = _x select 1;
_nearVehicles = _safeZonePos nearEntities [["Air","LandVehicle","Ship"],_safeZoneRadius];
{
if (damage _x >= _maxDamage) then {
_message = format ["[SAFEZONE] %1 was deleted from the server for being too damaged before relocate: @%2 %3",typeOf _x,mapGridPosition _x,getPosATL _x];
diag_log _message;
[_x getVariable["ObjectID","0"],_x getVariable["ObjectUID","0"],_x] call server_deleteObjDirect;
deleteVehicle _x;
} else {
if (_useCustomPosition) then {
_position = [_customPosition,_minDist,_maxDist,_objDist,1,0,0,[]] call BIS_fnc_findSafePos;
} else {
_position = [_safeZonePos,(_safeZoneRadius + 50),_maxDist,_objDist,if (_x isKindOf "Ship") then {2} else {0},0,0,[],[_safeZonePos,_safeZonePos]] call BIS_fnc_findSafePos;
};
_x setPos _position;
[_x,"position"] call server_updateObject;
if (_unlock && {locked _x}) then {_x setVehicleLock "UNLOCKED"};
_message = format ["[SAFEZONE] %1 was moved out of a safe zone to: @%2 %3",typeOf _x,mapGridPosition _position,_position];
diag_log _message;
};
} forEach _nearVehicles;
} forEach DZE_safeZonePosArray;

@ -1,7 +1,5 @@
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"
if (isNil "DZE_NPC_CleanUp_Time") then {DZE_NPC_CleanUp_Time = -1;};
sched_co_deleteVehicle = {
private "_group";
_this removeAllMPEventHandlers "mpkilled";
@ -28,7 +26,7 @@ sched_co_deleteVehicle = {
sched_corpses = {
private ["_delQtyG","_delQtyZ","_delQtyP","_addFlies","_x","_deathTime","_onoff","_delQtyAnimal","_sound","_deathPos","_cpos","_animal","_nearPlayer","_delQtyV","_delQtyAI"];
private ["_delQtyG","_delQtyZ","_delQtyP","_addFlies","_x","_deathTime","_onoff","_delQtyAnimal","_sound","_deathPos","_cpos","_animal","_nearPlayer","_delQtyV"];
// EVERY 2 MINUTE
// DELETE UNCONTROLLED ZOMBIES --- PUT FLIES ON FRESH PLAYER CORPSES --- REMOVE OLD FLIES & CORPSES
_delQtyZ = 0;
@ -36,10 +34,9 @@ sched_corpses = {
_delQtyG = 0;
_delQtyV = 0;
_addFlies = 0;
_delQtyAI = 0;
{
if (local _x && {_x isKindOf "CAManBase"}) then {
if (_x isKindOf "zZombie_Base") then {
if (_x isKindOf "zZombie_Base" || {typeOf _x == "z_bloodsucker"}) then {
_x call sched_co_deleteVehicle;
_delQtyZ = _delQtyZ + 1;
} else {
@ -62,28 +59,8 @@ sched_corpses = {
_addFlies = _addFlies + 1;
};
};
// 60 * DZE_NPC_CleanUp_Time = how long an NPC corpse stays on the map
if (DZE_NPC_CleanUp_Time != -1 && {diag_tickTime - _deathTime > (60 * DZE_NPC_CleanUp_Time)} && {_x getVariable["bodyName",""] == "NPC"}) then {
if (_x getVariable["sched_co_fliesDeleted",false] or !dayz_enableFlies) then {
// flies have been switched off, we can delete body
_sound = _x getVariable ["sched_co_fliesSource", nil];
if !(isNil "_sound") then {
detach _sound;
deleteVehicle _sound;
};
_x call sched_co_deleteVehicle;
_delQtyAI = _delQtyAI + 1;
} else {
PVCDZ_flies = [ 0, _x ];
publicVariable "PVCDZ_flies";
_x setVariable ["sched_co_fliesDeleted", true];
// body will be deleted at next round
};
};
// 40 minutes = how long a player corpse stays on the map
if ((diag_tickTime - _deathTime > 40*60) && {_x getVariable["bodyName",""] != "NPC"}) then {
if (diag_tickTime - _deathTime > 40*60) then {
if (_x getVariable["sched_co_fliesDeleted",false] or !dayz_enableFlies) then {
// flies have been switched off, we can delete body
_sound = _x getVariable ["sched_co_fliesSource", nil];
@ -120,7 +97,7 @@ sched_corpses = {
if (_onoff == 1) then {
_sound = createSoundSource["Sound_Flies",getPosATL _x,[],0];
_sound attachTo [_x];
_x setVariable ["sched_co_fliesSource", _sound];
_x setVariable ["sched_co_fliesSource", _sound,[false,true] select (DZE_Bury_Body || DZE_Butcher_Body)];
//diag_log "create sound";
};
// broadcast flies status for everyone periodically, to update visible swarm
@ -158,7 +135,7 @@ sched_corpses = {
};
};
} forEach allDead;
_delQtyAnimal = 0;
{
_animal = _x;
@ -181,8 +158,8 @@ sched_corpses = {
#ifdef SERVER_DEBUG
if (_delQtyZ+_delQtyP+_addFlies+_delQtyGrp+_delQtyG+_delQtyV > 0) then {
diag_log format ["%1: Deleted %2 uncontrolled zombies, %3 uncontrolled animals, %4 dead character bodies, %7 ghosts, %8 destroyed vehicles, %9 dead mission ai and %5 empty groups. Added %6 flies.",__FILE__,
_delQtyZ,_delQtyAnimal,_delQtyP,_delQtyGrp,_addFlies,_delQtyG,_delQtyV,_delQtyAI];
diag_log format ["%1: Deleted %2 uncontrolled zombies, %3 uncontrolled animals, %4 dead character bodies, %7 ghosts, %8 destroyed vehicles and %5 empty groups. Added %6 flies.",__FILE__,
_delQtyZ,_delQtyAnimal,_delQtyP,_delQtyGrp,_addFlies,_delQtyG,_delQtyV];
};
#endif
@ -215,4 +192,4 @@ sched_disconnectedPlayers = {
objNull
};
*/
*/

@ -4,15 +4,11 @@
*/
epoch_eventIsAny = {
private ["_boolReturn","_event","_date","_bool","_index"];
_event = _this select 0;
_date = _this select 1;
_boolReturn = false;
_index = 0;
local _event = _this select 0;
local _date = _this select 1;
local _boolReturn = false;
local _index = 0;
{
_bool = false;
if (typeName _x == "STRING") then {
_boolReturn = true;
} else {
@ -21,50 +17,41 @@ epoch_eventIsAny = {
if (!_boolReturn) exitWith {};
_index = _index + 1;
} count _event;
_boolReturn
};
sched_event_init = {
diag_log("EPOCH EVENTS INIT");
diag_log formatText ["EPOCH EVENTS: %1 Events Scheduled",(count EpochEvents)];
""
};
sched_event = {
private ["_date","_key","_result","_outcome","_handle","_datestr","_lastTime"];
// Find current time from server
_lastTime = _this;
_key = "CHILD:307:";
_result = _key call server_hiveReadWrite;
_outcome = _result select 0;
if(_outcome == "PASS") then {
_date = _result select 1;
_datestr = str(_date);
local _lastTime = _this;
local _key = "CHILD:307:";
local _result = _key call server_hiveReadWrite;
local _outcome = _result select 0;
if (_outcome == "PASS") then {
local _date = _result select 1;
local _datestr = str(_date);
if (_lastTime != _datestr) then {
// internal timestamp
ServerCurrentTime = _date;
// Once a minute.
_lastTime = _datestr;
//diag_log ("EVENTS: Local Time is: " + _datestr);
if (count EpochEvents == 0) exitWith {};
{
// Run event at server start when minutes are set to -1
if ((_x select 4) == -1) then {
diag_log ("RUNNING EVENT: " + (_x select 5) + " on " + _datestr);
_handle = [] execVM "\z\addons\dayz_server\modules\" + (_x select 5) + ".sqf";
local _handle = [] execVM "\z\addons\dayz_server\modules\" + (_x select 5) + ".sqf";
// Remove event from array so it doesn't run again.
_lastIndex = (count EpochEvents) - 1;
if (_lastIndex != _forEachIndex) then {EpochEvents set [_forEachIndex, EpochEvents select _lastIndex];};
EpochEvents resize _lastIndex;
EpochEvents = [EpochEvents,_forEachIndex] call fnc_deleteAt;
} else {
if([[(_x select 0),(_x select 1),(_x select 2),(_x select 3),(_x select 4)],_date] call epoch_eventIsAny) then {
diag_log ("RUNNING EVENT: " + (_x select 5) + " on " + _datestr);
_handle = [] execVM "\z\addons\dayz_server\modules\" + (_x select 5) + ".sqf";
local _handle = [] execVM "\z\addons\dayz_server\modules\" + (_x select 5) + ".sqf";
};
};
} forEach EpochEvents;

@ -0,0 +1,57 @@
/*
EVR Storms AKA "Blowouts" Server Scheduler Functions by JasonTM.
The EVR storms are rolled out in stages for JIP players.
The server controls the EVR timing to keep the clients in sync so players have the same experience.
*/
evr_storm = {
PVDZE_EVR = "Stage1";
publicVariable "PVDZE_EVR";
uiSleep 60;
PVDZE_EVR = "Stage2";
publicVariable "PVDZE_EVR";
uiSleep 50;
PVDZE_EVR = "Stage3";
publicVariable "PVDZE_EVR";
uiSleep 40;
PVDZE_EVR = "Stage4";
publicVariable "PVDZE_EVR";
uiSleep 30;
PVDZE_EVR = "Stage5";
publicVariable "PVDZE_EVR";
uiSleep 20;
PVDZE_EVR = "Stage6";
publicVariable "PVDZE_EVR";
uiSleep 10;
PVDZE_EVR = "Stage7";
publicVariable "PVDZE_EVR";
uiSleep 180;
EVR_Lockout = false;
};
sched_evr_init = {
diag_log "EVR STORMS ENABLED";
EVR_Lockout = false; // Prevents the server from starting an EVR storm while one is running.
[diag_tickTime, (((DZE_EVRFirstTime select 0) max (random (DZE_EVRFirstTime select 1))) * 60)]
};
sched_evr = {
local _time = _this select 0;
local _timer = _this select 1;
if (!EVR_Lockout && {diag_tickTime - _time >= _timer}) then {
[] spawn evr_storm;
EVR_Lockout = true;
_time = diag_tickTime;
_timer = ((DZE_EVRTimer select 0) max (random (DZE_EVRTimer select 1))) * 60;
diag_log format ["EVR Storm Started: Next storm in %1 minutes", round(_timer / 60)];
};
[_time, _timer]
};

@ -1,37 +1,41 @@
#define PATH "z\addons\dayz_server\system\scheduler\"
#define PATH "\z\addons\dayz_server\system\scheduler\"
call compile preprocessFileLineNumbers (PATH+"sched_corpses.sqf");
call compile preprocessFileLineNumbers (PATH+"sched_lootpiles.sqf");
call compile preprocessFileLineNumbers (PATH+"sched_sync.sqf");
call compile preprocessFileLineNumbers (PATH+"sched_safetyVehicle.sqf");
call compile preprocessFileLineNumbers (PATH+"sched_dzms.sqf");
call compile preprocessFileLineNumbers (PATH+"sched_wai.sqf");
call compile preprocessFileLineNumbers (PATH+"sched_dzms.sqf");
call compile preprocessFileLineNumbers (PATH+"sched_event.sqf");
call compile preprocessFileLineNumbers (PATH+"sched_traps.sqf");
if (DZE_Bury_Body || DZE_Butcher_Body) then {
call compile preprocessFileLineNumbers (PATH+"sched_lootCrates.sqf");
};
if (DZE_EVR) then {
call compile preprocessFileLineNumbers (PATH+"sched_evr.sqf");
};
[
local _list = [
// period offset code <-> ctx init code ->ctx
[ 60, 0, sched_event, sched_event_init ],
[ 60, 224, sched_corpses ],
[ 300, 336, sched_lootpiles_5m, sched_lootpiles_5m_init ],
[ 90, 60, sched_dzms, sched_dzms_init ],
[ 90, 60, sched_wai, sched_wai_init ],
[ 90, 60, sched_dzms, sched_dzms_init ],
[ 6, 340, sched_lootpiles ],
[ 900, 0, sched_sync ],
[ 120, 48, sched_safetyVehicle ],
[ 360, 480, sched_fps ],
[ 30, 60, sched_traps, sched_traps_init ]
] execFSM ("z\addons\dayz_code\system\scheduler\scheduler.fsm");
];
//diag_log [ __FILE__, "Scheduler started"];
/*
// (see ViralZeds.hpp -> zombie_agent.fsm -> zombie_findOwner.sqf), called when a zombie becomes "local" to the server after the player disconnected
zombie_findOwner = {
(_this select 0) call fa_deleteVehicle;
if (DZE_Bury_Body || DZE_Butcher_Body) then {
_list set [count _list, [ 60, 240, sched_lootCrates ]];
};
*/
if (DZE_EVR) then {
_list set [count _list, [ 60, 180, sched_evr, sched_evr_init ]];
};
_list execFSM ("\z\addons\dayz_code\system\scheduler\scheduler.fsm");
//diag_log [ __FILE__, "Scheduler started"];

@ -0,0 +1,38 @@
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"
// Delete loot crates, graves and crosses after 25 minutes
sched_lootCrates = {
private ["_delQtyCrate","_crateTime","_objects","_crates","_graves","_cross"];
_delQtyCrate = 0;
#define CENTER getMarkerPos "center"
#define RADIUS ((getMarkerSize "center") select 1)*2
_crates = CENTER nearObjects ["DZ_AmmoBoxSmallUS",RADIUS];
_graves = CENTER nearObjects ["Grave",RADIUS];
_cross = CENTER nearObjects ["GraveCross1",RADIUS];
_objects = _crates + _graves + _cross;
{
if (_x getVariable ["bury",false]) then {
_crateTime = _x getVariable ["sched_co_crateTime", -1];
if (_crateTime == -1) exitWith {
_crateTime = diag_tickTime;
_x setVariable ["sched_co_crateTime", _crateTime];
};
if (diag_tickTime - _crateTime > 25*60) then {
_x call sched_co_deleteVehicle;
_delQtyCrate = _delQtyCrate + 1;
};
};
} forEach _objects;
#ifdef SERVER_DEBUG
if (_delQtyCrate> 0) then {
diag_log format ["%1: Deleted %2 bury/butcher objects.",__FILE__,_delQtyCrate];
};
#endif
objNull
};

@ -102,7 +102,7 @@ if ((playersNumber west + playersNumber civilian) == 0) exitWith {
_damage = _x select 8;
_storageMoney = _x select 9;
if ((_type isKindOf "AllVehicles")) then {
if ((_type isKindOf "AllVehicles") && {!(_type isKindOf "StaticWeapon") && {!(_type in DZE_StaticWeapons)}}) then {
_VehicleQueue set [_vQty,_x];
_vQty = _vQty + 1;
} else {
@ -183,21 +183,23 @@ if ((playersNumber west + playersNumber civilian) == 0) exitWith {
};
};
_object = _type createVehicle [0,0,0]; //more than 2x faster than createvehicle array
_object setDir _dir;
_object setPosATL _pos;
_object = _type createVehicle [0,0,0]; //more than 2x faster than createvehicle array
_object setDamage _damage;
if (_vecExists) then {
_object setVectorDirAndUp _vector;
} else {
_object setDir _dir; // setdir is incompatible with setVectorDirAndUp and should not be used together on the same object https://community.bistudio.com/wiki/setVectorDirAndUp
};
_object enableSimulation false;
_object setPosATL _pos;
_doorLocked = _type in DZE_DoorsLocked;
_isPlot = _type == "Plastic_Pole_EP1_DZ";
// prevent immediate hive write when vehicle parts are set up
_object setVariable ["lastUpdate",diag_ticktime];
_object setVariable ["ObjectID", _idKey, true];
_object setVariable ["ObjectID", _idKey];
_object setVariable ["OwnerPUID", _ownerPUID, true];
if (Z_SingleCurrency && {_type in DZE_MoneyStorageClasses}) then {
_object setVariable ["cashMoney", _storageMoney, true];
@ -234,7 +236,7 @@ if ((playersNumber west + playersNumber civilian) == 0) exitWith {
{_object addBackpackCargoGlobal [_x, _backpackqty select _foreachindex];} foreach _backpackcargo;
};
} else {
if (DZE_permanentPlot && _isPlot) then {
if (_isPlot) then {
_object setVariable ["plotfriends", _inventory, true];
};
if (DZE_doorManagement && _doorLocked) then {
@ -261,15 +263,20 @@ if ((playersNumber west + playersNumber civilian) == 0) exitWith {
};
};
};
_object setVariable ["CharacterID", _ownerID, true];
if (_type isKindOf "StaticWeapon" || {_type in DZE_StaticWeapons}) then {
[_object,DZE_clearStaticAmmo,false] call fn_vehicleAddons;
};
_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 {
_object addEventHandler ["HandleDamage",{false}];
_object addEventHandler ["HandleDamage",{0}];
} else {
_object addMPEventHandler ["MPKilled",{_this call vehicle_handleServerKilled;}];
_object addMPEventHandler ["MPKilled",{if !(isServer) exitWith {};_this call vehicle_handleServerKilled;}];
};
_object setVariable ["OEMPos",_pos,true]; // used for inplace upgrades and lock/unlock of safe
} else {
_object enableSimulation true;
};
@ -338,8 +345,8 @@ if ((playersNumber west + playersNumber civilian) == 0) exitWith {
// prevent immediate hive write when vehicle parts are set up
_object setVariable ["lastUpdate",diag_ticktime];
_object setVariable ["ObjectID", _idKey, true];
if (Z_SingleCurrency && ZSC_VehicleMoneyStorage) then {
_object setVariable ["ObjectID", _idKey];
if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage}) then {
_object setVariable ["cashMoney", _storageMoney, true];
};
@ -362,22 +369,19 @@ if ((playersNumber west + playersNumber civilian) == 0) exitWith {
{_object addBackpackCargoGlobal [_x, _backpackqty select _foreachindex];} foreach _backpackcargo;
};
_object setVariable ["CharacterID", _ownerID, true];
_isAir = _object isKindOf "Air";
{
_selection = _x select 0;
_dam = [_x select 1,(_x select 1) min 0.8] select (!_isAir && {_selection in dayZ_explosiveParts});
_object setHit [_selection,_dam];
} count _hitpoints;
[_object,"damage"] call server_updateObject;
_setGlobal = [false,true] select (_ownerID != "0");
_object setVariable ["CharacterID", _ownerID, _setGlobal];
[_object,_hitpoints] call server_setHitpoints;
_object setFuel _fuel;
[_object,"all",true] call server_updateObject;
[_object,DZE_clearVehicleAmmo,DZE_addVehicleAmmo] call fn_vehicleAddons;
_object call fnc_veh_ResetEH;
if (_ownerID != "0" && {!(_object isKindOf "Bicycle")}) then {
_object setVehicleLock "locked";
//_object setVariable ["MF_Tow_Cannot_Tow",true,true];
};
if (_ownerID != "0" && {!(_object isKindOf "Bicycle")}) then {_object setVehicleLock "locked";};
_serverVehicleCounter set [count _serverVehicleCounter,_type]; // total each vehicle
_object enableSimulation true;
_object setVelocity [0,0,1];
@ -415,7 +419,9 @@ for "_i" from 0 to 10 do {
diag_log format["Total Number of spawn locations %1", actualSpawnMarkerCount];
if (isDedicated) then {endLoadingScreen;};
[] call compile preprocessFileLineNumbers "\z\addons\dayz_server\DZAI\init\dzai_initserver.sqf";
allowConnection = true;
[] ExecVM "\z\addons\dayz_server\DZMS\DZMSInit.sqf";
sm_done = true;
publicVariable "sm_done";
@ -467,4 +473,7 @@ if (_hiveLoaded) then {
//Update gear last after all dynamic vehicles are created to save random loot to database (low priority)
{[_x,"gear"] call server_updateObject} count _vehiclesToUpdate;
};
if (DZE_SafeZone_Relocate) then {
execVM "\z\addons\dayz_server\system\safeZoneRelocate.sqf";
};
};

@ -60,7 +60,7 @@
] call server_spawnTraders;
// Bankers
if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
["Functionary1_EP1",[12399.83,5054.3413,0.2],52],
["Functionary1_EP1",[15529.827,13236.555,2.38],164],

@ -31,10 +31,10 @@ DZE_DeathMsgDynamicText = false; // Display death messages as dynamicText in the
DZE_DeathMsgRolling = false; // Display death messages as rolling messages in bottom center of screen.
// ZSC
Z_SingleCurrency = false; // Enable single currency system.
Z_SingleCurrency = true; // Enable single currency system.
Z_globalBanking = true; // Enable global banking system.
if (Z_SingleCurrency) then {
Z_globalBanking = false; // Enable global banking system.
Z_persistentMoney = false; // Enabling this stores currency to player_data instead of character_data. Currency transfers to a new character after death. For PVE servers only. Formerly called "GlobalMoney".
CurrencyName = "Coins"; // If using single currency this is the currency display name.
DZE_MoneyStorageClasses = ["VaultStorage","VaultStorage2","VaultStorageLocked","VaultStorage2Locked","LockboxStorageLocked","LockboxStorage2Locked","LockboxStorage","LockboxStorage2","LockboxStorageWinterLocked","LockboxStorageWinter2Locked","LockboxStorageWinter","LockboxStorageWinter2","TallSafe","TallSafeLocked"]; // If using single currency this is an array of object classes players can store coins in. E.g.: ["GunRack_DZ","WoodCrate_DZ"]
@ -132,7 +132,7 @@ if (isServer) then {
dayz_ghostTimer = 120;
// ZSC
Z_globalBankingTraders = false; // Enable banking NPCs at trader cities.
Z_globalBankingTraders = true; // Enable banking NPCs at trader cities.
// Safe Zone Relocating
DZE_SafeZone_Relocate = false; //Enables relocating of vehicles left in Safe Zones over a server restart.

@ -0,0 +1,379 @@
scriptName "modules_e\Functions\objects\fn_HALO.sqf";
uiSleep 0.01;
//--- HALO -------------------------------------------------------------------------------------------------------------------------------------
if (typename _this == typename objnull) then {
_unit = _this;
//--- Eject!
waituntil {(vehicle _unit) iskindof "ParachuteBase" || !isnil {_unit getvariable "bis_fnc_halo_now"}};
if (!local _unit) exitwith {};
//--- Delete parachute
_parachute = vehicle _unit;
if (_parachute != _unit) then {
deletevehicle _parachute;
};
//--- Init
_dir = ([[0,0,0],velocity _unit] call bis_fnc_dirto);
_unit setdir _dir;
[objNull, player, rSwitchMove,"HaloFreeFall_non"] call RE;
player switchmove "HaloFreeFall_non";
//--- Key controls
if (_unit == player) then {
//--- PLAYER ------------------------------------------------
_brightness = 0.99;
_pos = [player] call FNC_GetPos;
_parray = [
/* 00 */ ["\Ca\Data\ParticleEffects\Universal\Universal", 16, 12, 13, 0],
/* 01 */ "",
/* 02 */ "Billboard",
/* 03 */ 1,
/* 04 */ 3,
/* 05 */ [0,0,-200],
/* 06 */ wind,
/* 07 */ 0,
/* 08 */ 1.275,
/* 09 */ 1,
/* 10 */ 0,
/* 11 */ [100],
/* 12 */ [
[_brightness,_brightness,_brightness,0],
[_brightness,_brightness,_brightness,0.01],
[_brightness,_brightness,_brightness,0.10],
[_brightness,_brightness,_brightness,0]
],
/* 13 */ [1000],
/* 14 */ 0,
/* 15 */ 0,
/* 16 */ "",
/* 17 */ "",
/* 18 */ player
];
bis_fnc_halo_clouds = "#particlesource" createVehicleLocal _pos;
bis_fnc_halo_clouds setParticleParams _parray;
bis_fnc_halo_clouds setParticleRandom [0, [100, 100, 0], [0, 0, 0], 0, 0, [0, 0, 0, 0], 0, 1];
bis_fnc_halo_clouds setParticleCircle [00, [00, 00, 00]];
bis_fnc_halo_clouds setDropInterval (0.4 - (0.3 * overcast));
//--- Effects
bis_fnc_halo_ppRadialBlur = ppeffectcreate ["RadialBlur",464];
bis_fnc_halo_ppRadialBlur ppEffectAdjust [0.01,0.01,0.3,0.3];
bis_fnc_halo_ppRadialBlur ppEffectCommit 0.01;
bis_fnc_halo_ppRadialBlur ppEffectEnable true ;
bis_fnc_halo_soundLoop = time;
playsound "BIS_HALO_Flapping";
bis_fnc_halo_action = _unit addaction [localize "STR_HALO_OPEN_CHUTE", "custom\fn_halo.sqf",[],1,true,true,"Eject"];
bis_fnc_halo_keydown = {
_key = _this select 1;
//--- Forward
//if (_key in (actionkeys 'HeliForward')) then {
if (_key in (actionkeys 'MoveForward')) then {
if (bis_fnc_halo_vel < +bis_fnc_halo_velLimit) then {bis_fnc_halo_vel = bis_fnc_halo_vel + bis_fnc_halo_velAdd};
};
//--- Backward
//if (_key in (actionkeys 'HeliBack')) then {
if (_key in (actionkeys 'MoveBack')) then {
if (bis_fnc_halo_vel > -bis_fnc_halo_velLimit) then {bis_fnc_halo_vel = bis_fnc_halo_vel - bis_fnc_halo_velAdd};
};
//--- Left
//if (_key in (actionkeys 'HeliCyclicLeft')) then {
if (_key in (actionkeys 'TurnLeft')) then {
if (bis_fnc_halo_dir > -bis_fnc_halo_dirLimit) then {bis_fnc_halo_dir = bis_fnc_halo_dir - bis_fnc_halo_dirAdd};
};
//--- Right
//if (_key in (actionkeys 'HeliCyclicRight')) then {
if (_key in (actionkeys 'TurnRight')) then {
if (bis_fnc_halo_dir < +bis_fnc_halo_dirLimit) then {bis_fnc_halo_dir = bis_fnc_halo_dir + bis_fnc_halo_dirAdd};
};
};
bis_fnc_halo_keydown_eh = (finddisplay 46) displayaddeventhandler ["keydown","_this call bis_fnc_halo_keydown;"];
//--- Loop
bis_fnc_halo_vel = 0;
bis_fnc_halo_velLimit = 0.2;
bis_fnc_halo_velAdd = 0.03;
bis_fnc_halo_dir = 0;
bis_fnc_halo_dirLimit = 1;
bis_fnc_halo_dirAdd = 0.06;
[] spawn {
_time = time - 0.1;
while {alive player && vehicle player == player && isnil {player getvariable "bis_fnc_halo_terminate"} && (([player] call FNC_GetPos) select 2) > DZE_HaloOpenChuteHeight} do {
//--- FPS counter
_fpsCoef = ((time - _time) * 60) / acctime; //Script is optimized for 60 FPS
_time = time;
bis_fnc_halo_velLimit = 0.2 * _fpsCoef;
bis_fnc_halo_velAdd = 0.03 * _fpsCoef;
bis_fnc_halo_dirLimit = 1 * _fpsCoef;
bis_fnc_halo_dirAdd = 0.06 * _fpsCoef;
//--- Dir
bis_fnc_halo_dir = bis_fnc_halo_dir * 0.98;
_dir = direction player + bis_fnc_halo_dir;
player setdir _dir;
//--- Velocity
_vel = velocity player;
bis_fnc_halo_vel = bis_fnc_halo_vel * 0.96;
player setvelocity [
(_vel select 0) + (sin _dir * bis_fnc_halo_vel),
(_vel select 1) + (cos _dir * bis_fnc_halo_vel),
(_vel select 2)
];
//--- Animation system
_anim = "HaloFreeFall_non";
_v = bis_fnc_halo_vel;
_h = bis_fnc_halo_dir;
_vLimit = 0.1;
_hLimit = 0.3;
if ((abs _v) > _vLimit || (abs _h) > _hLimit) then {
_vAnim = "";
if (_v > +_vLimit) then {_vAnim = "F"};
if (_v < -_vLimit) then {_vAnim = "B"};
_hAnim = "";
if (_h > +_hLimit) then {_hAnim = "R"};
if (_h < -_hLimit) then {_hAnim = "L"};
_anim = "HaloFreeFall_" + _vAnim + _hAnim;
};
player playmovenow _anim;
//--- Sound
if ((time - bis_fnc_halo_soundLoop) > 4.5) then {
playsound "BIS_HALO_Flapping";
bis_fnc_halo_soundLoop = time;
};
//--- Effects
/*
bis_fnc_halo_ppRadialBlur ppEffectAdjust [0.02,0.02,0.3 - (bis_fnc_halo_vel/7)/_fpsCoef,0.3 - (bis_fnc_halo_vel/7)/_fpsCoef];
bis_fnc_halo_ppRadialBlur ppEffectCommit 0.01;
*/
if (DZE_HaloAltitudeMeter && !isNil "Dayz_loginCompleted") then {
titleText [
format [
localize "str_halo_altitude_speed",
str(round(([player] call FNC_GetPos) select 2)) + " m",
str(abs(round(speed(vehicle player)))) + " " + localize "str_lib_info_unit_kilometers_per_hour"
],"PLAIN DOWN",0.01
];
};
uiSleep 0.01;
};
//--- End
player removeaction bis_fnc_halo_action;
(finddisplay 46) displayremoveeventhandler ["keydown",bis_fnc_halo_keydown_eh];
ppeffectdestroy bis_fnc_halo_ppRadialBlur;
deletevehicle bis_fnc_halo_clouds;
bis_fnc_halo_clouds = nil;
bis_fnc_halo_vel = nil;
bis_fnc_halo_velLimit = nil;
bis_fnc_halo_velAdd = nil;
bis_fnc_halo_dir = nil;
bis_fnc_halo_dirLimit = nil;
bis_fnc_halo_dirAdd = nil;
bis_fnc_halo_action = nil;
bis_fnc_halo_keydown = nil;
bis_fnc_halo_keydown_eh = nil;
if (!alive player) then {
[objNull, player, rSwitchMove,"adthppnemstpsraswrfldnon_1"] call RE;
player switchmove "adthppnemstpsraswrfldnon_1";
player setvelocity [0,0,0];
} else {
if (DZE_HaloOpenChuteHeight > -1 && isNil "bis_fnc_halo_para_dirAbs") then {
//Auto open chute
[player] spawn BIS_fnc_Halo;
};
};
};
} else {
//--- AI ------------------------------------------------
while {(([_unit] call FNC_GetPos) select 2) > 100} do {
_destination = expecteddestination _unit select 0;
_unitPosition = [_unit] call FNC_GetPos;
if ((_destination distance [(_unitPosition select 0),(_unitPosition select 1),0]) > 10) then {
_vel = velocity _unit;
_dirTo = [_unit,_destination] call bis_fnc_dirto;
if (player distance _unit > 500) then {
_unit setdir _dirTo;
};
_unit setvelocity [
(_vel select 0) + (sin _dirTo * 0.2),
(_vel select 1) + (cos _dirTo * 0.2),
(_vel select 2)
];
};
uiSleep 0.01;
};
//--- Open
[_unit] spawn bis_fnc_halo;
};
};
//--- PARA -------------------------------------------------------------------------------------------------------------------------------------
if (typename _this == typename []) then {
_unit = _this select 0;
if (!local _unit) exitwith {};
//--- Free fall
if (count _this == 2) exitwith { //Fresh spawn calling from player_monitor.fsm
_alt = _this select 1;
_unit call fn_exitSwim;
_unit setvariable ["bis_fnc_halo_now",true];
_unit spawn bis_fnc_halo;
};
//-------------
_para = objnull;
_vel = [];
_unit allowDamage false; //Prevent glitch death when opening chute
_paraPosition1 = [_unit] call FNC_GetPos;
_para = createVehicle ["ParachuteWest", _paraPosition1, [], 0, "CAN_COLLIDE"];
//_para = "BIS_Steerable_Parachute" createVehicle position _unit;
_para setpos _paraPosition1;
_para setdir direction _unit;
_vel = velocity _unit;
_unit moveindriver _para;
//_unit moveingunner _para;
_para lock false;
bis_fnc_halo_para_dirAbs = direction _para;
_unit allowDamage true;
//--- Key controls
if (_unit == player) then {
_para setvelocity [(_vel select 0),(_vel select 1),(_vel select 2)*1];
/*
bis_fnc_halo_DynamicBlur = ppeffectcreate ["DynamicBlur",464];
bis_fnc_halo_DynamicBlur ppEffectEnable true;
bis_fnc_halo_DynamicBlur ppEffectAdjust [8.0];
bis_fnc_halo_DynamicBlur ppEffectCommit 0;
bis_fnc_halo_DynamicBlur ppEffectAdjust [0.0];
bis_fnc_halo_DynamicBlur ppEffectCommit 1;
*/
bis_fnc_halo_para_vel = 0;
bis_fnc_halo_para_velLimit = 0.5;
bis_fnc_halo_para_velAdd = 0.01;
bis_fnc_halo_para_dir = 0;
bis_fnc_halo_para_dirLimit = 1.5;
bis_fnc_halo_para_dirAdd = 0.03;
bis_fnc_halo_para_keydown = {
_key = _this select 1;
//--- Forward
if (_key in (actionkeys 'MoveForward')) then {
if (bis_fnc_halo_para_vel < +bis_fnc_halo_para_velLimit) then {bis_fnc_halo_para_vel = bis_fnc_halo_para_vel + bis_fnc_halo_para_velAdd};
};
//--- Backward
if (_key in (actionkeys 'MoveBack')) then {
if (bis_fnc_halo_para_vel > -bis_fnc_halo_para_velLimit*0) then {bis_fnc_halo_para_vel = bis_fnc_halo_para_vel - bis_fnc_halo_para_velAdd};
};
//--- Left
if (_key in (actionkeys 'TurnLeft')) then {
if (bis_fnc_halo_para_dir > -bis_fnc_halo_para_dirLimit) then {bis_fnc_halo_para_dir = bis_fnc_halo_para_dir - bis_fnc_halo_para_dirAdd};
};
//--- Right
if (_key in (actionkeys 'TurnRight')) then {
if (bis_fnc_halo_para_dir < +bis_fnc_halo_para_dirLimit) then {bis_fnc_halo_para_dir = bis_fnc_halo_para_dir + bis_fnc_halo_para_dirAdd};
};
};
bis_fnc_halo_para_loop_time = time - 0.1;
bis_fnc_halo_para_velZ = velocity _para select 2;
bis_fnc_halo_para_loop = {
if (!isnil {player getvariable "bis_fnc_halo_terminate"}) exitwith {};
if (time == bis_fnc_halo_para_loop_time) exitwith {}; //--- FPS too high
_para = vehicle player;
//--- FPS counter
_fpsCoef = ((time - bis_fnc_halo_para_loop_time) * 20) / acctime; //Script is optimized for 20 FPS
bis_fnc_halo_para_loop_time = time;
//_fpsCoef = _fpsCoef / 3;
bis_fnc_halo_para_velLimit = 0.3 * _fpsCoef;
bis_fnc_halo_para_velAdd = 0.002 * _fpsCoef;
bis_fnc_halo_para_dirLimit = 1.5 * _fpsCoef;
bis_fnc_halo_para_dirAdd = 0.03 * _fpsCoef;
//--- Dir
bis_fnc_halo_para_dir = bis_fnc_halo_para_dir * 0.98;
bis_fnc_halo_para_dirAbs = bis_fnc_halo_para_dirAbs + bis_fnc_halo_para_dir;
_para setdir bis_fnc_halo_para_dirAbs;
_dir = direction _para;
//--- Crash
_velZ = velocity _para select 2;
//if ((_velZ - bis_fnc_halo_para_velZ) > 7 && (getposatl _para select 2) < 100) then {player setdamage 1;debuglog ["Log::::::::::::::",(_velZ - bis_fnc_halo_para_velZ)];};
bis_fnc_halo_para_velZ = _velZ;
//--- Pos
_para setposasl [
(getposasl _para select 0) + (sin _dir * (0.1 + bis_fnc_halo_para_vel)),
(getposasl _para select 1) + (cos _dir * (0.1 + bis_fnc_halo_para_vel)),
(getposasl _para select 2) - 0.01 - 0.1 * abs bis_fnc_halo_para_vel
];
[
_para,
(-bis_fnc_halo_para_vel * 75) + 0.5*(sin (time * 180)),
(+bis_fnc_halo_para_dir * 25) + 0.5*(cos (time * 180))
] call bis_fnc_setpitchbank;
};
bis_fnc_halo_para_mousemoving_eh = (finddisplay 46) displayaddeventhandler ["mousemoving","_this call bis_fnc_halo_para_loop;"];
bis_fnc_halo_para_mouseholding_eh = (finddisplay 46) displayaddeventhandler ["mouseholding","_this call bis_fnc_halo_para_loop;"];
uiSleep 4;
// ppeffectdestroy bis_fnc_halo_DynamicBlur;
bis_fnc_halo_para_keydown_eh = (finddisplay 46) displayaddeventhandler ["keydown","_this call bis_fnc_halo_para_keydown;"];
//--- End
//waituntil {vehicle player == player};
player setvariable ["bis_fnc_halo_terminate",nil];
waituntil {(([(vehicle player)] call FNC_GetPos) select 2) < 2 || !isnil {player getvariable "bis_fnc_halo_terminate"}};
(finddisplay 46) displayremoveeventhandler ["keydown",bis_fnc_halo_para_keydown_eh];
(finddisplay 46) displayremoveeventhandler ["mousemoving",bis_fnc_halo_para_mousemoving_eh];
(finddisplay 46) displayremoveeventhandler ["mouseholding",bis_fnc_halo_para_mouseholding_eh];
bis_fnc_halo_para_vel = nil;
bis_fnc_halo_para_velLimit = nil;
bis_fnc_halo_para_velAdd = nil;
bis_fnc_halo_para_dir = nil;
bis_fnc_halo_para_dirLimit = nil;
bis_fnc_halo_para_dirAdd = nil;
bis_fnc_halo_para_keydown = nil;
bis_fnc_halo_para_loop = nil;
bis_fnc_halo_para_keydown_eh = nil;
bis_fnc_halo_para_mousemoving_eh = nil;
bis_fnc_halo_para_mouseholding_eh = nil;
bis_fnc_halo_para_dirAbs = nil;
};
};

@ -0,0 +1,6 @@
/*
DZAI Version Identifier File
*/
#define DZAI_CLIENT_TYPE "DZAI Client Addon"
#define DZAI_CLIENT_VERSION "1.0.0"

@ -0,0 +1,15 @@
if (isServer) exitWith {};
/*
DZAI Client-side Addon Configuration File
*/
//Enables use of client-side radio functions. DZAI_clientRadio must be set 'true' in dzai_config.sqf.
DZAIC_radio = false;
//Enables AI hostility to zombies. DZAI_zombieEnemy must be set 'true' in dzai_config.sqf.
DZAIC_zombieEnemy = false;
//Enables death messages to be displayed to players who kill AI units. DZAI_deathMessages must be set 'true' in dzai_config.sqf
DZAIC_deathMessages = false;

@ -0,0 +1,37 @@
if (isServer) exitWith {};
#include "DZAI_client_version.hpp"
diag_log format ["[DZAI] Initializing %1 version %2.",DZAI_CLIENT_TYPE,DZAI_CLIENT_VERSION];
call compile preprocessFileLineNumbers "dayz_code\DZAI_Client\dzai_client_config.sqf";
if (DZAIC_radio) then {
"DZAI_SMS" addPublicVariableEventHandler {
if (isNil "DZAI_noRadio") then {
systemChat (_this select 1);
DZAI_noRadio = true;
_nul = (_this select 1) spawn {
for "_i" from 1 to 2 do {cutText [_this, "PLAIN DOWN"];sleep 0.5;};
DZAI_noRadio = nil;
};
};
};
};
if (DZAIC_zombieEnemy) then {
"DZAI_ratingModify" addPublicVariableEventHandler {
_targets = (_this select 1) select 0;
_rating = (_this select 1) select 1;
{
if (local _x) then {_x addRating _rating};
} forEach _targets;
};
};
if (DZAIC_deathMessages) then {
"DZAI_killMSG" addPublicVariableEventHandler {
systemChat format ["%1 was killed",(_this select 1)];
//diag_log format ["DZAI Debug: %1 was killed.",(_this select 1)];
};
};

@ -49,8 +49,4 @@ if (!isDedicated) then {
vg_limit = [["350z_red",2],["Land",5],["AH1Z",1],["Air",3],["Ship",1]];
vg_limit = 5;
*/
};
Z_singleCurrency = true;
Z_globalBanking = true;
Z_globalBankingTraders = true;
};

@ -94,7 +94,7 @@ if (!isDedicated) then {
ZSC_bankTraders = ["Functionary1_EP1"]; // Array of trader classnames that are available for banking (i.e Functionary1_EP1), do not use _DZ classes - they are used as player skins
ZSC_limitOnBank = true; // Have a limit on the bank? (i.e true or false) limits the global banking to the number below.
ZSC_bankObjects = ["SignM_FARP_Winchester_EP1","ATM_DZ"]; // Array of objects that are available for banking i.e: ["Suitcase","Info_Board_EP1","Laptop_EP1","SatPhone"]
ZSC_maxBankMoney = 5000000; // Default limit for bank objects.
ZSC_maxBankMoney = 15000000; // Default limit for bank objects.
ZSC_defaultStorageMultiplier = 50; // Default magazine count for bank objects that don't have storage slots i.e: ["Suitcase","Info_Board_EP1","Laptop_EP1","SatPhone"]
ZSC_MaxMoneyInStorageMultiplier = 1000; // Multiplier for how much money a bank object can hold, example: 200 magazine slots in the object (or the default value above ^^) multiplied by the 5000 multiplier is 1 million coin storage. (200 * 5000 = 1,000,000 coins)
ZSC_ZombieCoins = [true,[10,500]]; // First value activate coins on zombies, second value from 0 - 1000 coins on each zombie. Coin for zombies are handled directly in check wallet.
@ -195,26 +195,27 @@ if (!isServer) then {
if (!isDedicated) then {
call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\server_traders\napf.sqf";
call compile preprocessFileLineNumbers "logistic\init.sqf";
call compile preprocessFileLineNumbers "logistic\init.sqf";
if (toLower worldName in ["chernarus","chernarus_winter"]) then {
execVM "\z\addons\dayz_code\system\mission\chernarus\hideGlitchObjects.sqf";
};
//[] execVM "Stats\j0k3r5_stats.sqf";
//[] execVM "Stats\j0k3r5_stats.sqf";
// Enables Plant lib fixes
execVM "\z\addons\dayz_code\system\antihack.sqf";
if (dayz_townGenerator) then {execVM "\z\addons\dayz_code\compile\client_plantSpawner.sqf";};
call compile preprocessFileLineNumbers "spawn\init.sqf";
"EAT_login" addPublicVariableEventHandler {call (_this select 1)};
EAT_clientToServer = ["login", player];
publicVariableServer "EAT_clientToServer";
call compile preprocessFileLineNumbers "scripts\marker_manager.sqf";
call compile preprocessFileLineNumbers "spawn\init.sqf";
execFSM "\z\addons\dayz_code\system\player_monitor.fsm";
call compile preprocessFileLineNumbers "dayz_code\DZAI_Client\dzai_initclient.sqf";
execVM "scripts\servicePoints\init.sqf";
//[false,12] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf";
//[600,.15,30] execVM "\z\addons\dayz_code\compile\fn_chimney.sqf"; // Smoking chimney effects.

@ -6,29 +6,79 @@
*/
class_selection = true; //Enable class selection dialog
#define START_ITEMS "HandRoadFlare","ItemBandage",2,"ItemPainkiller","ItemWaterbottle","FoodPistachio","PartGeneric"
#define START_ITEMS "HandRoadFlare","ItemBandage",2,"ItemPainkiller","ItemWaterbottle","FoodPistachio"
class_public = [ // These are visible to anyone on the server
[(localize "str_playerstats_bandit")+" Lvl1","Bandit1_DZ","BanditW1_DZ",[START_ITEMS,"17Rnd_9x19_glock17",2],["G17_DZ"],"",[],[],0,-5000,0,""],
[(localize "str_playerstats_bandit")+" Lvl2","Bandit1_DZ","BanditW1_DZ",[START_ITEMS,"30Rnd_9x19_UZI",3,"ItemMorphine"],["PDW_DZ"],if (class_epoch) then {"Assault_Pack_DZE1"} else {"DZ_Assault_Pack_EP1"},[],[],0,-15000,0,""],
[(localize "str_playerstats_bandit")+" Lvl3","Bandit1_DZ","BanditW1_DZ",[START_ITEMS,"30Rnd_9x19_UZI_SD",4,"ItemMorphine"],["PDW_SD_DZ"],if (class_epoch) then {"TK_Assault_Pack_DZE1"} else {"DZ_TK_Assault_Pack_EP1"},[],[],0,-25000,0,"MeleeHatchet"],
[(localize "str_playerstats_hero")+" Lvl1",if (class_epoch) then {"Soldier_Sniper_PMC_DZ"} else {"Survivor3_DZ"},"SurvivorW2_DZ",[START_ITEMS,"6Rnd_45ACP",2],["Revolver_DZ"],"",[],[],0,10000,0,""],
[(localize "str_playerstats_hero")+" Lvl2",if (class_epoch) then {"Soldier_Sniper_PMC_DZ"} else {"Survivor3_DZ"},"SurvivorW2_DZ",[START_ITEMS,"30Rnd_9x19_UZI",3,"ItemMorphine"],["PDW_DZ"],if (class_epoch) then {"Assault_Pack_DZE1"} else {"DZ_Assault_Pack_EP1"},[],[],0,20000,0,""],
[(localize "str_playerstats_hero")+" Lvl3",if (class_epoch) then {"Soldier_Sniper_PMC_DZ"} else {"Survivor3_DZ"},"SurvivorW2_DZ",[START_ITEMS,"30Rnd_9x19_UZI_SD",4,"ItemMorphine"],["PDW_SD_DZ"],if (class_epoch) then {"TK_Assault_Pack_DZE1"} else {"DZ_TK_Assault_Pack_EP1"},[],[],0,30000,0,"MeleeHatchet"],
[(localize "str_playerstats_bandit")+" Lvl2","Bandit1_DZ","BanditW1_DZ",[START_ITEMS,"17Rnd_9x19_glock17",3,"ItemMorphine"],["G17_DZ"],if (class_epoch) then {"Assault_Pack_DZE1"} else {"DZ_Assault_Pack_EP1"},[],[],0,-10000,0,""],
[(localize "str_playerstats_bandit")+" Lvl3","Bandit1_DZ","BanditW1_DZ",[START_ITEMS,"17Rnd_9x19_glock17",4,"ItemMorphine"],["G17_DZ"],if (class_epoch) then {"TK_Assault_Pack_DZE1"} else {"DZ_TK_Assault_Pack_EP1"},[],[],0,-15000,0,"MeleeHatchet"],
[(localize "str_playerstats_hero")+" Lvl1",if (class_epoch) then {"Soldier_Sniper_PMC_DZ"} else {"Survivor3_DZ"},"SurvivorW2_DZ",[START_ITEMS,"6Rnd_45ACP",2],["Revolver_DZ"],"",[],[],0,5000,0,""],
[(localize "str_playerstats_hero")+" Lvl2",if (class_epoch) then {"Soldier_Sniper_PMC_DZ"} else {"Survivor3_DZ"},"SurvivorW2_DZ",[START_ITEMS,"6Rnd_45ACP",3,"ItemMorphine"],["Revolver_DZ"],if (class_epoch) then {"Assault_Pack_DZE1"} else {"DZ_Assault_Pack_EP1"},[],[],0,10000,0,""],
[(localize "str_playerstats_hero")+" Lvl3",if (class_epoch) then {"Soldier_Sniper_PMC_DZ"} else {"Survivor3_DZ"},"SurvivorW2_DZ",[START_ITEMS,"6Rnd_45ACP",4,"ItemMorphine"],["Revolver_DZ"],if (class_epoch) then {"TK_Assault_Pack_DZE1"} else {"DZ_TK_Assault_Pack_EP1"},[],[],0,15000,0,"MeleeHatchet"],
[localize "str_playerstats_survivor","Survivor2_DZ","SurvivorW2_DZ",[START_ITEMS,"8Rnd_9x18_Makarov",2],["Makarov_DZ"],"",[],[],0,0,0]
];
halo_selection = true; // Enable HALO selection dialog
halo_force = false; // Skip HALO selection dialog and force HALO spawn.
halo_type = "C130J_US_EP1_DZ"; // Type of plane. Tested with C130J_US_EP1_DZ, AN2_DZ, MV22_DZ. Use "" to disable the plane and use regular HALO.
halo_type = "AN2_DZ"; // Type of plane. Tested with C130J_US_EP1_DZ, AN2_DZ, MV22_DZ. Use "" to disable the plane and use regular HALO.
spawn_selection = true; // Enable spawn selection dialog
spawn_bodyCheck = 1500; // If a player has a body within this distance of a spawn that spawn will be blocked. Set to -1 to disable.
spawn_bodyCheck = 4000; // If a player has a body within this distance of a spawn that spawn will be blocked. Set to -1 to disable.
spawn_nearGroup = false; // Allow players to spawn near their group. BodyCheck can override.
spawn_nearPlot = true; // Allow players to spawn near their plot. BodyCheck can override.
spawn_radius = 1200; // Distance around spawn to find a safe pos. Lower is closer to exact coordinates. Do not set too low or BIS_fnc_findSafePos may fail.
spawn_nearPlot = false; // Allow players to spawn near their plot. BodyCheck can override.
spawn_radius = 800; // Distance around spawn to find a safe pos. Lower is closer to exact coordinates. Do not set too low or BIS_fnc_findSafePos may fail.
spawn_public = switch (toLower worldName) do {
case "napf": {
spawn_public = call {
if ((toLower worldName) in ["chernarus","chernarus_winter"]) exitwith {
[
[localize "str_disp_srvsetup_random",[[4523,2444,0],[12037,9100,0],[6723,2562,0],[10417,2120,0],[1896,2242,0],[13470,6306,0]],0,0,1], // Random will never be blocked, so always keep it if using body check.
[localize "str_location_balota",[4523,2444,0],0,0],
[localize "str_location_berezino",[12037,9100,0],0,0],
[localize "str_location_chernogorsk",[6723,2562,0],0,0],
[localize "str_location_elektrozavodsk",[10417,2120,0],0,0],
[localize "str_location_kamenka",[1896,2242,0],0,0],
[localize "str_location_solnichniy",[13470,6306,0],0,0],
// Above are defaults
[localize "str_location_loc_devilscastle",[6900,11419,0],0,0],
[localize "str_location_gorka",[9659,8839,0],0,0],
[localize "str_location_grishino",[5967,10323,0],0,0],
[localize "str_location_guglovo",[8472,6754,0],0,0],
[localize "str_location_gvozdno",[8654,11832,0],0,0],
[localize "str_location_kabanino",[5346,8630,0],0,0],
[localize "str_location_kamyshovo",[12073,3490,0],0,0],
[localize "str_location_komarovo",[3643,2473,0],0,0],
[localize "str_location_krasnostav",[11342,12232,0],0,0],
[localize "str_location_loc_capkrutoy",[13395,4159,0],0,0],
[localize "str_location_lopatino",[2731,10000,0],0,0],
[localize "str_location_petrovka",[5035,12459,0],0,0],
[localize "str_location_pogorevka",[4461,6424,0],0,0],
[localize "str_location_prigorodki",[8059,3381,0],0,0],
[localize "str_location_pusta",[9178,3928,0],0,0],
[localize "str_location_vybor",[3893,8883,0],0,0],
[localize "str_location_vyshnoe",[6612,6065,0],0,0],
[localize "str_location_zelenogorsk",[2858,5313,0],0,0]
]
};
if ((toLower worldName) in ["tavi","taviana"]) exitwith {
[
[localize "str_disp_srvsetup_random",[[9093,2614,0],[17588,4952,0],[15954,15847,0],[16674,13930,0],[11361,6685,0],[17744,10299,0],[18292,7537,0],[13561,19300,0],[15246,17425,0],[12268,9763,0]],0,0,1],
["Topolka",[9093,2614,0],0,0],
["Stari Sad",[17588,4952,0],0,0],
["Sevastopol",[15954,15847,0],0,0],
["Martin",[16674,13930,0],0,0],
["Komarovo",[11361,6685,0],0,0],
["Dubovo",[17744,10299,0],0,0],
["Byelov",[18292,7537,0],0,0],
["Khotanovsk",[13561,19300,0],0,0],
["Dalnogorsk",[15246,17425,0],0,0],
// Above are defaults
["Kameni",[8350,18937,0],0,0],
["Lyepestok",[11238,14413,0],0,0],
["Marina",[10184,1542,0],0,0],
["Race Track",[1529,7271,0],0,0],
["Chernovar",[5904,10519,0],0,0]
]
};
if ((toLower worldName) == "napf") exitwith {
[
[localize "str_disp_srvsetup_random",[[5411,16676,0],[1511,11479,0],[12231,16319,0],[6946,17385,0],[12862,14850,0],[4672,14940,0],[2720,12226,0],[4104,13026,0],[1461,10584,0],[10283,18449,0],[10709,17085,0]],0,0,1],
["Seltishafen",[5411,16676,0],0,0],
@ -54,4 +104,114 @@ spawn_public = switch (toLower worldName) do {
["Waldegg",[8538,852,0],0,0]
]
};
if ((toLower worldName) == "lingor") exitwith {
[
[localize "str_disp_srvsetup_random",[[2085,5501,0],[1355,315,0],[4550,913,0],[8880,1703,0],[580,5547,0],[3250,2556,0],[6143,2753,0],[1269,2858,0],[8295,8667,0],[9072,7323,0],[6899,3971,0]],0,0,1],
["Vidora",[2085,5501,0],0,0],
["Alma",[1355,315,0],0,0],
["Calamar",[4550,913,0],0,0],
["Pikawas",[8880,1703,0],0,0],
["Benio",[580,5547,0],0,0],
["Aguado",[3250,2556,0],0,0],
["Prospero",[6143,2753,0],0,0],
["Rago",[1269,2858,0],0,0],
["Cemarin",[8295,8667,0],0,0],
["Conoteta",[9072,7323,0],0,0],
["Sanvigado",[6899,3971,0],0,0]
// Above are defaults
]
};
if ((toLower worldName) == "namalsk") exitwith {
[
[localize "str_disp_srvsetup_random",[[4620,10916,0],[7600,6020,0],[6498,11851,0],[7668,11707,0],[4340,4960,0],[7885,7206,0],[3013,7506,0],[4673,10004,0],[7859,9096,0],[8756,10119,0],[5823,5641,0]],0,0,1],
["Lubjansk",[4620,10916,0],0,0],
["Old Sawmill",[7600,6020,0],0,0],
["West Vorkuta",[6498,11851,0],0,0],
["East Vorkuta",[7668,11707,0],0,0],
["Brensk",[4340,4960,0],0,0],
["Tara Harbor",[7885,7206,0],0,0],
["Norinsk Tunnel",[3013,7506,0],0,0],
["Lubjansk Bay",[4673,10004,0],0,0],
["Nemsk Factory",[7859,9096,0],0,0],
["Jalovisko",[8756,10119,0],0,0],
["Brensk Bay",[5823,5641,0],0,0]
// Above are defaults
]
};
if ((toLower worldName) == "sauerland") exitwith {
[
[localize "str_disp_srvsetup_random",[[15448,8466,0],[19488,7462,0],[19478,12440,0],[20210,14501,0],[16453,6895,0],[19666,10377,0],[11000,10157,0],[10669,13320,0],[11349,12225,0],[12104,8936,0],[12879,14983,0]],0,0,1],
["Buersfeld",[15448,8466,0],0,0],
["Hoeinghausen",[19488,7462,0],0,0],
["Berghausen",[19478,12440,0],0,0],
["Heggen",[20210,14501,0],0,0],
["Heidermuehle",[16453,6895,0],0,0],
["Remblinghausen",[19666,10377,0],0,0],
["Schueren",[11000,10157,0],0,0],
["Schmallenberg",[10669,13320,0],0,0],
["Calle",[11349,12225,0],0,0],
["Oberdorf",[12104,8936,0],0,0],
["Burg Calle",[12879,14983,0],0,0],
// Above are defaults
["Strelingen",[3437,18843,0],0,0],
["Berghoven",[18734,21955,0],0,0],
["Oeventrop",[8668,22650,0],0,0],
["Arnsberg",[1134,24264,0],0,0],
["Suederbarup",[13260,543,0],0,0],
["Osterholz",[2580,8344,0],0,0],
["Uhlenbusch",[4092,12942,0],0,0],
["Ihrhofen",[9640,19193,0],0,0],
["Old Airfield",[17253,2167,0],0,0]
]
};
if ((toLower worldName) == "panthera2") exitwith {
[
[localize "str_disp_srvsetup_random",[[2354,5213,0],[3281,3348,0],[4793,1862,0],[5969,944,0],[7873,1403,0],[8425,3152,0],[8679,5043,0],[7961,4949,0],[6420,6127,0],[4823,6512,0],[3354,6649,0],[5549,7227,0],[4624,8042,0],[2267,9042,0],[1062,9359,0],[1646,8814,0],[5406,3876,0],[7883,1936,0],[7022,1134,0],[5840,2363,0],[2688,3400,0]],0,0,1],
["Sella Nevea",[2354,5213,0],0,0],
["Kobarid",[3281,3348,0],0,0],
["Taff Grove",[4793,1862,0],0,0],
["Zappado",[5969,944,0],0,0],
["New Skooma",[7873,1403,0],0,0],
["Zelezniki",[8425,3152,0],0,0],
["Begunje",[8679,5043,0],0,0],
["Bled",[7961,4949,0],0,0],
["Mojstrana",[6420,6127,0],0,0],
["Podkoren",[4823,6512,0],0,0],
["Tarvisio",[3354,6649,0],0,0],
// Above are defaults
["Hoopsberg",[5549,7227,0],0,0],
["Arnoldstein",[4624,8042,0],0,0],
["Mello",[2267,9042,0],0,0],
["Vatra",[1062,9359,0],0,0],
["Borna",[1646,8814,0],0,0],
["Ukanc",[5406,3876,0],0,0],
["Smugglers Den",[7883,1936,0],0,0],
["Foxhill",[7022,1134,0],0,0],
["Koritnica",[5840,2363,0],0,0],
["FOB Boriana",[2688,3400,0],0,0]
]
};
if ((toLower worldName) == "smd_sahrani_a2") exitwith {
[
[localize "str_disp_srvsetup_random",[[11369,5348,0],[9343,5953,0],[7645,6408,0],[12369,7108,0],[9131,8319,0],[10697,9490,0],[13197,8848,0],[14307,12496,0],[9763,14424,0],[10690,16186,0],[17314,14304,0],[18952,13913,0],[4541,15297,0],[9691,11021,0],[8311,9058,0],[2106,2679,0],[7767,15806,0],[6222,17336,0],[14230,1691,0]],0,0,1],
["Parato",[11369,5348,0],0,0],
["Cayo",[9343,5953,0],0,0],
["Arcadia",[7645,6408,0],0,0],
["Ortego",[12369,7108,0],0,0],
["Somato",[9131,8319,0],0,0],
["Paraiso",[10697,9490,0],0,0],
["Corazol",[13197,8848,0],0,0],
["Bagango",[14307,12496,0],0,0],
["Pacamac",[9763,14424,0],0,0],
["Mataredo",[10690,16186,0],0,0],
["Masbete",[17314,14304,0],0,0],
["Pita",[18952,13913,0],0,0],
["Isla Del Vassal",[4541,15297,0],0,0],
["Rashidah",[9691,11021,0],0,0],
["Chantico",[8311,9058,0],0,0],
["Rahmadi",[2106,2679,0],0,0],
["Hunapu",[7767,15806,0],0,0],
["Cabo Valiente",[6222,17336,0],0,0]
]
};
};

@ -1,7 +1,11 @@
if (player distance respawn_west_original < 100) then {
// Ground spawn
player setPosATL _grid;
if (surfaceIsWater respawn_west_original) then {player call fn_exitSwim;};
if (surfaceIsWater respawn_west_original) then {
player allowDamage false;
player call fn_exitSwim;
player allowDamage true;
};
// Show infoText if not in HALO spawn
_nearestCity = nearestLocations [_grid, ["NameCityCapital","NameCity","NameVillage","NameLocal"],1000];

@ -19,7 +19,6 @@ if (!class_epoch) then { //Undefined variables in vanilla
DZE_HaloJump = false;
DZE_HaloOpenChuteHeight = 180;
DZE_HaloSpawnHeight = 2000;
Z_MoneyVariable = "cashMoney";
};
if (spawn_selection) then {

@ -144,7 +144,7 @@ if (class_selection && !_isPZombie) then {
[_bweps,3,_bag] call class_fillItems;
};
if (_onBack != "") then {dayz_onBack = _onBack;};
if (_onBack != "") then {dayz_onBack = _onBack;player setVariable ["dayz_onBack",dayz_onBack,true];};
_main = primaryWeapon player;
if (_main == "") then {
@ -166,11 +166,12 @@ if (class_selection && !_isPZombie) then {
case (count class_choice > 0): {class_choice select 8}; //Custom loadout by UID
default {0};
};
_wealth = player getVariable [Z_MoneyVariable,0];
if (_wealth < _coins) then {
player setVariable [Z_MoneyVariable,(_wealth + _coins),true];
};
if (Z_SingleCurrency) then {
_wealth = player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0];
if (_wealth < _coins) then {
player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth + _coins),true];
};
};
};
if (spawn_selection) then {