Jump to content

[Release] 3.0 Door Management - No More Codes


Zupa

Recommended Posts

ElDubya,If you noticed the last portion of the tutorial states "VERY IMPORTANT FOR NON P4L USERS" which from my understanding means it will work for non P4L servers. The code they provided for us non P4L users specifically is supposed to provide an OwnerID to the owner that upgrades the door, thus giving that owner access to the Manage Door feature. That is where I'm having trouble..

I've got the same problem like SteamROLLER. I thought this additional line:"IMPORTANT FOR NON PLOT4 LIFE USERS" means that this script works now without P4L. I have no notion of installing P4L because I think this is a unnecessary complicated Script. Other more easier scripts do have the same impact and are much more compatible with modded servers. Anyway I've installed ZSC 3.0, PlotManagement and Advanced Trading and they all work fine (Many Thanks Zupa). Only doorManagement rebels persistent. If you upgrade a door with a code lock you're not the owner of this. I hope anyone find a solution for this. Many Thanks!

Best regards,

GudrunGisela

Link to comment
Share on other sites

Hi everyone,

I've got a problem with the door management. I don't use Plot 4 Life but I've added the additional lines to the player_upgrade.sqf so that the builder always will be added to the manage door list by default. This entry is also been saved to the database in the inventory but after restart the door says: You do not have the rights to manage. It is possible to use eye scan but not to manage the door anymore. Does anyone know how that could be fixed?

Best regards,

GudrunGisela

Link to comment
Share on other sites

Hi everyone,

I've got a problem with the door management. I don't use Plot 4 Life but I've added the additional lines to the player_upgrade.sqf so that the builder always will be added to the manage door list by default. This entry is also been saved to the database in the inventory but after restart the door says: You do not have the rights to manage. It is possible to use eye scan but not to manage the door anymore. Does anyone know how that could be fixed?

Best regards,

GudrunGisela

I'm having a similar issue. Everything works great untill the server is restarted. Can eye scan and manage after door is built and lock is added but when the server restarts, the eye scan fails and manage door says you don't have rights. Not using P4L or Plot Manage if that makes a difference. Can not get manage plot to work, server sticks on wait for host. Tried P4L as well and could not get to work either.

Did all the "fixes" previously posted for non P4L users with no change. Can manage and eye scan right after door built but once the server reboots, I get the menu, but as said eye scan fails and no rights to manage. Would really like to get this working properly.

Link to comment
Share on other sites

I'm having a similar issue. Everything works great untill the server is restarted. Can eye scan and manage after door is built and lock is added but when the server restarts, the eye scan fails and manage door says you don't have rights. Not using P4L or Plot Manage if that makes a difference. Can not get manage plot to work, server sticks on wait for host. Tried P4L as well and could not get to work either.

Did all the "fixes" previously posted for non P4L users with no change. Can manage and eye scan right after door built but once the server reboots, I get the menu, but as said eye scan fails and no rights to manage. Would really like to get this working properly.

This seems like an issue related to server_updateObject.sqf or server_monitor.sqf.

May you two upload those files or preferably paste them into pastebin.com, so we can have a look?

PS: The files can be found in

dayz_server.pbo\compiles\server_updateObject.sqf

dayz_server.pbo\system\server_monitor.sqf

Link to comment
Share on other sites

Update: Now the player can manage their doors after restart but now i got a new problem. If a player upgrades his door the manual code is not shown and in the database the code of every door is equal to the character id of the player o.O I didn't change anything but the first problem is gone and this problem shows up.

Link to comment
Share on other sites

I've read through the whole thread and haven't been able to get this one working 100%.

I'm getting a problem that has been mentioned before, when I press Eye Scan I can hear a click but nothing happens (if I press it enough times it says too many attempts, wait 10 seconds).

Manual code and manage buttons don't do anything at all, however the blue scroll wheel option 'Manage door' opens up a panel (the Add, Close, Delete buttons at the bottom are larger than they should be).

So basically there's no way to actually open the door as a regular player.

 

Only getting one error in the client rpt

Error in expression <en{
createDialog "DoorManagement";
call DoorNearbyHumans;
call DoorGetFriends;
}>
  Error position: <DoorNearbyHumans;
call DoorGetFriends;
}>
  Error Undefined variable in expression: doornearbyhumans
File mpmissions\__CUR_MP.Napf\doorManagement\initDoorManagement.sqf, line 23

I have this line included in my compiles.sqf

DoorNearbyHumans = 		compile preprocessFileLineNumbers "doorManagement\doorNearbyHumans.sqf";

My initDoorManagement.sqf is the default version provided by Zupa.

I AM running PlotManagement, but I am NOT running Plot 4 Life.

 

In one of the earlier pages of the thread, some people suggest changing initDoorManagement.sqf to work with non Plot for Life installs as well as the change to player_upgrade.sqf that Zupa referred to at the bottom of the OP. Can anyone who has got this script working confirm if I have to change initDoorManagement or can I use the default? Thanks

Link to comment
Share on other sites

I know this is old but i saw a typo, inventory was spelt wrong;

 

if (count _intentory > 0) then {

Replace that with

if ((count _intentory > 0) && !(typeOf( _object) in DZE_DoorsLocked)) then {

B - IF USING PLOT MANAGEMENT, 
 
REplace:

if ((count _intentory > 0) && !(typeOf( _object) == "Plastic_Pole_EP1_DZ")) then {

With

if ((count _intentory > 0) && !(typeOf( _object) == "Plastic_Pole_EP1_DZ") && !(typeOf( _object) in DZE_DoorsLocked)) then {

 

in case anyone runs into that problem where gear disappears

Link to comment
Share on other sites

hey, trying to install this but ran into an issue.

 

Once I have put everything in inc plot 4 life, the options pop up on the menu.

 

#1 When I click on the " Unlock door " scroll-wheel option, I then click on the " Manual code " option & nothing shows up

#2 When I click on the " Unlock door " scroll-wheel option. I then click on the " Manage " option & nothing shows up

#3 When I click on the " Manage " scroll wheel option & the window shows up to add friends etc, but no players are showing up in the list.

 

Can you offer any insight into this?

Link to comment
Share on other sites

hey, trying to install this but ran into an issue.

 

Once I have put everything in inc plot 4 life, the options pop up on the menu.

 

#1 When I click on the " Unlock door " scroll-wheel option, I then click on the " Manual code " option & nothing shows up

#2 When I click on the " Unlock door " scroll-wheel option. I then click on the " Manage " option & nothing shows up

#3 When I click on the " Manage " scroll wheel option & the window shows up to add friends etc, but no players are showing up in the list.

 

Can you offer any insight into this?

Link to comment
Share on other sites

  • 3 weeks later...

Hello! 

I get error in rpt:

  Error Undefined variable in expression: dze_lock_door
File mpmissions\__CUR_MP.sauerland\custom\fn_selfActions.sqf, line 791
Error in expression <dOf "CinderWallDoorLocked_DZ_Base") && (DZE_Lock_Door == _ownerID)) then {
if ((>
  Error position: <DZE_Lock_Door == _ownerID)) then {
if ((>

line 791:

	// downgrade system
	if((_isDestructable || _cursorTarget isKindOf "Land_DZE_WoodDoorLocked_Base" || _cursorTarget isKindOf "CinderWallDoorLocked_DZ_Base") && (DZE_Lock_Door == _ownerID)) then {
		if ((s_player_lastTarget select 1) != _cursorTarget) then {
			if (s_player_downgrade_build > 0) then {	
				player removeAction s_player_downgrade_build;
				s_player_downgrade_build = -1;
			};
		};

		if (s_player_downgrade_build < 0) then {
			s_player_lastTarget set [1,_cursorTarget];
			s_player_downgrade_build = player addAction [format[localize "STR_EPOCH_ACTIONS_REMLOCK",_text], "scripts\pm\player_buildingDowngrade.sqf",_cursorTarget, -2, false, true, "",""];
		};
	} else {
		player removeAction s_player_downgrade_build;
		s_player_downgrade_build = -1;
	};

Help please

Link to comment
Share on other sites

  • 1 month later...

When i place down a door with a lock it doesent give me access to it i can manually type in the code but then i cant access the menu any more because when i hit unlock it just unlocks and when i would hit eye scan or manage it says i dont have the right to manage it.

 

 

**Fixed** -_- it was a stupid mistake.

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 weeks later...

How are you guys getting this to work after server restart, everything works perfectly until the server restarts and then no one can use eye scan or open their doors without taking the lock off and putting it back on.

I have triple checked the server side of the installation multiple times and just cant get this to work out

Link to comment
Share on other sites

How are you guys getting this to work after server restart, everything works perfectly until the server restarts and then no one can use eye scan or open their doors without taking the lock off and putting it back on.

I have triple checked the server side of the installation multiple times and just cant get this to work out

 

either the objects doesn't get saved correctly to the DB (server_UpdateObject)

 

or

 

the DB doesn't get loaded in correctly after a restart (server_monitor.sqf)

 

It's one of the 2.

 

EDIT: A closer guess is that you are editing a server_monitor thats not loaded in or used.

Link to comment
Share on other sites

either the objects doesn't get saved correctly to the DB (server_UpdateObject)

 

or

 

the DB doesn't get loaded in correctly after a restart (server_monitor.sqf)

 

It's one of the 2.

 

EDIT: A closer guess is that you are editing a server_monitor thats not loaded in or used.

Thank you alot for the reply zupa, but i cant see what im doing wrong with either of these two files.

 

This is running on plot for life 2.34, vector building, and snap building pro

 

Server monitor

private ["_nul","_result","_pos","_wsDone","_dir","_isOK","_countr","_objWpnTypes","_objWpnQty","_dam","_selection","_totalvehicles","_object","_idKey","_type","_ownerID","_worldspace","_intentory","_hitPoints","_fuel","_damage","_key","_vehLimit","_hiveResponse","_objectCount","_codeCount","_data","_status","_val","_traderid","_retrader","_traderData","_id","_lockable","_debugMarkerPosition","_vehicle_0","_bQty","_vQty","_BuildingQueue","_objectQueue","_superkey","_shutdown","_res","_hiveLoaded"];
 
dayz_versionNo = getText(configFile >> "CfgMods" >> "DayZ" >> "version");
dayz_hiveVersionNo = getNumber(configFile >> "CfgMods" >> "DayZ" >> "hiveVersion");
 
_hiveLoaded = false;
 
waitUntil{initialized}; //means all the functions are now defined
 
diag_log "HIVE: Starting";
 
waituntil{isNil "sm_done"}; // prevent server_monitor be called twice (bug during login of the first player)
 
// Custom Configs
if(isnil "MaxVehicleLimit") then {
MaxVehicleLimit = 500;
};
 
if(isnil "MaxDynamicDebris") then {
MaxDynamicDebris = 100;
};
if(isnil "MaxAmmoBoxes") then {
MaxAmmoBoxes = 15;
};
if(isnil "MaxMineVeins") then {
MaxMineVeins = 100;
};
 
// Camp LS
call compile preprocessFileLineNumbers "\z\addons\dayz_server\custombuildings\Camp_LS.sqf";
call compile preprocessFileLineNumbers "\z\addons\dayz_server\custombuildings\Camp_LS_Box.sqf";
call compile preprocessFileLineNumbers "\z\addons\dayz_server\custombuildings\Camp_LS_Box2.sqf";
 
// Custom Configs End
 
if (isServer && isNil "sm_done") then {
 
serverVehicleCounter = [];
_hiveResponse = [];
 
for "_i" from 1 to 5 do {
diag_log "HIVE: trying to get objects";
_key = format["CHILD:302:%1:", dayZ_instance];
_hiveResponse = _key call server_hiveReadWrite;  
if ((((isnil "_hiveResponse") || {(typeName _hiveResponse != "ARRAY")}) || {((typeName (_hiveResponse select 1)) != "SCALAR")})) then {
if ((_hiveResponse select 1) == "Instance already initialized") then {
_superkey = profileNamespace getVariable "SUPERKEY";
_shutdown = format["CHILD:400:%1:", _superkey];
_res = _shutdown call server_hiveReadWrite;
diag_log ("HIVE: attempt to kill.. HiveExt response:"+str(_res));
} else {
diag_log ("HIVE: connection problem... HiveExt response:"+str(_hiveResponse));
 
};
_hiveResponse = ["",0];
else {
diag_log ("HIVE: found "+str(_hiveResponse select 1)+" objects" );
_i = 99; // break
};
};
 
_BuildingQueue = [];
_objectQueue = [];
 
if ((_hiveResponse select 0) == "ObjectStreamStart") then {
 
// save superkey
profileNamespace setVariable ["SUPERKEY",(_hiveResponse select 2)];
 
_hiveLoaded = true;
 
diag_log ("HIVE: Commence Object Streaming...");
_key = format["CHILD:302:%1:", dayZ_instance];
_objectCount = _hiveResponse select 1;
_bQty = 0;
_vQty = 0;
for "_i" from 1 to _objectCount do {
_hiveResponse = _key call server_hiveReadWriteLarge;
//diag_log (format["HIVE dbg %1 %2", typeName _hiveResponse, _hiveResponse]);
if ((_hiveResponse select 2) isKindOf "ModularItems") then {
_BuildingQueue set [_bQty,_hiveResponse];
_bQty = _bQty + 1;
} else {
_objectQueue set [_vQty,_hiveResponse];
_vQty = _vQty + 1;
};
};
diag_log ("HIVE: got " + str(_bQty) + " Epoch Objects and " + str(_vQty) + " Vehicles");
};
 
// # NOW SPAWN OBJECTS #
_totalvehicles = 0;
{
_idKey = _x select 1;
_type = _x select 2;
_ownerID = _x select 3;
 
_worldspace = _x select 4;
_intentory = _x select 5;
_hitPoints = _x select 6;
_fuel = _x select 7;
_damage = _x select 8;
 
_dir = 0;
_pos = [0,0,0];
_wsDone = false;
if (count _worldspace >= 2) then
{
_dir = _worldspace select 0;
if (count (_worldspace select 1) == 3) then {
_pos = _worldspace select 1;
_wsDone = true;
}
};
 
// Plot for life // Vector building
_vector = [[0,0,0],[0,0,0]];
_vecExists = false;
_ownerPUID = "0";   
if (count _worldspace >= 3) then{
    if(count _worldspace == 3) then{
            if(typename (_worldspace select 2) == "STRING")then{
                _ownerPUID = _worldspace select 2;
            }else{
                 if(typename (_worldspace select 2) == "ARRAY")then{
                    _vector = _worldspace select 2;
                    if(count _vector == 2)then{
                        if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
                            _vecExists = true;
                        };
                    };
                };                  
            };
 
    }else{
        //Was not 3 elements, so check if 4 or more
        if(count _worldspace == 4) then{
            if(typename (_worldspace select 3) == "STRING")then{
                _ownerPUID = _worldspace select 3;
            }else{
                if(typename (_worldspace select 2) == "STRING")then{
                    _ownerPUID = _worldspace select 2;
                };
            };
 
 
            if(typename (_worldspace select 2) == "ARRAY")then{
                _vector = _worldspace select 2;
                if(count _vector == 2)then{
                    if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
                        _vecExists = true;
                    };
                };
            }else{
                if(typename (_worldspace select 3) == "ARRAY")then{
                    _vector = _worldspace select 3;
                    if(count _vector == 2)then{
                        if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
                            _vecExists = true;
                        };
                    };
                };
            };
 
        }else{
            //More than 3 or 4 elements found
            //Might add a search for the vector, ownerPUID will equal 0
        };
    };
}; 
 
if (!_wsDone) then {
if (count _worldspace >= 1) then { _dir = _worldspace select 0; };
_pos = [getMarkerPos "center",0,4000,10,0,2000,0] call BIS_fnc_findSafePos;
if (count _pos < 3) then { _pos = [_pos select 0,_pos select 1,0]; };
diag_log ("MOVED OBJ: " + str(_idKey) + " of class " + _type + " to pos: " + str(_pos));
};
 
 
if (_damage < 1) then {
//diag_log format["OBJ: %1 - %2", _idKey,_type];
 
//Create it
_object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"];
// Door management
if (typeOf (_object) in  DZE_DoorsLocked) then {
_object setVariable ["doorfriends", _intentory, true];
};
_object setVariable ["lastUpdate",time];
_object setVariable ["ObjectID", _idKey, true];
_object setVariable ["ownerPUID", _ownerPUID, true];
 
_lockable = 0;
if(isNumber (configFile >> "CfgVehicles" >> _type >> "lockable")) then {
_lockable = getNumber(configFile >> "CfgVehicles" >> _type >> "lockable");
};
 
// fix for leading zero issues on safe codes after restart
if (_lockable == 4) then {
_codeCount = (count (toArray _ownerID));
if(_codeCount == 3) then {
_ownerID = format["0%1", _ownerID];
};
if(_codeCount == 2) then {
_ownerID = format["00%1", _ownerID];
};
if(_codeCount == 1) then {
_ownerID = format["000%1", _ownerID];
};
};
 
if (_lockable == 3) then {
_codeCount = (count (toArray _ownerID));
if(_codeCount == 2) then {
_ownerID = format["0%1", _ownerID];
};
if(_codeCount == 1) then {
_ownerID = format["00%1", _ownerID];
};
};
 
_object setVariable ["CharacterID", _ownerID, true];
 
clearWeaponCargoGlobal  _object;
clearMagazineCargoGlobal  _object;
// _object setVehicleAmmo DZE_vehicleAmmo;
 
_object setdir _dir;
if(_vecExists)then{
_object setVectorDirAndUp _vector;
}; 
_object setposATL _pos;
_object setDamage _damage;
 
if ((typeOf _object) in dayz_allowedObjects) then {
_object setVariable["memDir",_dir,true];
if (DZE_GodModeBase) then {
_object addEventHandler ["HandleDamage", {false}];
} else {
_object addMPEventHandler ["MPKilled",{_this call object_handleServerKilled;}];
};
// Test disabling simulation server side on buildables only.
_object enableSimulation false;
// used for inplace upgrades && lock/unlock of safe
_object setVariable ["OEMPos", _pos, true];
};
 
if ((count _intentory > 0) && !(typeOf( _object) in  DZE_DoorsLocked)) then {
// zsc
if( count (_intentory) > 3)then{
_object setVariable ["bankMoney", _intentory select 3, true];
}else{
       _object setVariable ["bankMoney", 0, true];
};
if (_type in DZE_LockedStorage) then {
// Fill variables with loot
_object setVariable ["WeaponCargo", (_intentory select 0),true];
_object setVariable ["MagazineCargo", (_intentory select 1),true];
_object setVariable ["BackpackCargo", (_intentory select 2),true];
} else {
 
//Add weapons
_objWpnTypes = (_intentory select 0) select 0;
_objWpnQty = (_intentory select 0) select 1;
_countr = 0;
{
if(_x in (DZE_REPLACE_WEAPONS select 0)) then {
_x = (DZE_REPLACE_WEAPONS select 1) select ((DZE_REPLACE_WEAPONS select 0) find _x);
};
_isOK = isClass(configFile >> "CfgWeapons" >> _x);
if (_isOK) then {
_object addWeaponCargoGlobal [_x,(_objWpnQty select _countr)];
};
_countr = _countr + 1;
} count _objWpnTypes; 
 
//Add Magazines
_objWpnTypes = (_intentory select 1) select 0;
_objWpnQty = (_intentory select 1) select 1;
_countr = 0;
{
if (_x == "BoltSteel") then { _x = "WoodenArrow" }; // Convert BoltSteel to WoodenArrow
if (_x == "ItemTent") then { _x = "ItemTentOld" };
_isOK = isClass(configFile >> "CfgMagazines" >> _x);
if (_isOK) then {
_object addMagazineCargoGlobal [_x,(_objWpnQty select _countr)];
};
_countr = _countr + 1;
} count _objWpnTypes;
 
//Add Backpacks
_objWpnTypes = (_intentory select 2) select 0;
_objWpnQty = (_intentory select 2) select 1;
_countr = 0;
{
_isOK = isClass(configFile >> "CfgVehicles" >> _x);
if (_isOK) then {
_object addBackpackCargoGlobal [_x,(_objWpnQty select _countr)];
};
_countr = _countr + 1;
} count _objWpnTypes;
};
};
 
if (_object isKindOf "AllVehicles") then {
{
_selection = _x select 0;
_dam = _x select 1;
if (_selection in dayZ_explosiveParts && _dam > 0.8) then {_dam = 0.8};
[_object,_selection,_dam] call object_setFixServer;
} count _hitpoints;
 
_object setFuel _fuel;
 
if (!((typeOf _object) in dayz_allowedObjects)) then {
 
//_object setvelocity [0,0,1];
_object call fnc_veh_ResetEH;
 
if(_ownerID != "0" && !(_object isKindOf "Bicycle")) then {
_object setvehiclelock "locked";
};
 
_totalvehicles = _totalvehicles + 1;
 
// total each vehicle
serverVehicleCounter set [count serverVehicleCounter,_type];
};
};
 
//Monitor the object
PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_object];
};
} count (_BuildingQueue + _objectQueue);
// # END SPAWN OBJECTS #
 
// preload server traders menu data into cache
if !(DZE_ConfigTrader) then {
{
// get tids
_traderData = call compile format["menu_%1;",_x];
if(!isNil "_traderData") then {
{
_traderid = _x select 1;
 
_retrader = [];
 
_key = format["CHILD:399:%1:",_traderid];
_data = "HiveEXT" callExtension _key;
 
//diag_log "HIVE: Request sent";
 
//Process result
_result = call compile format ["%1",_data];
_status = _result select 0;
 
if (_status == "ObjectStreamStart") then {
_val = _result select 1;
//Stream Objects
//diag_log ("HIVE: Commence Menu Streaming...");
call compile format["ServerTcache_%1 = [];",_traderid];
for "_i" from 1 to _val do {
_data = "HiveEXT" callExtension _key;
_result = call compile format ["%1",_data];
call compile format["ServerTcache_%1 set [count ServerTcache_%1,%2]",_traderid,_result];
_retrader set [count _retrader,_result];
};
//diag_log ("HIVE: Streamed " + str(_val) + " objects");
};
 
} forEach (_traderData select 0);
};
} forEach serverTraders;
};
 
if (_hiveLoaded) then {
//  spawn_vehicles
_vehLimit = MaxVehicleLimit - _totalvehicles;
if(_vehLimit > 0) then {
diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit));
for "_x" from 1 to _vehLimit do {
[] spawn spawn_vehicles;
};
} else {
diag_log "HIVE: Vehicle Spawn limit reached!";
};
};
 
//  spawn_roadblocks
diag_log ("HIVE: Spawning # of Debris: " + str(MaxDynamicDebris));
for "_x" from 1 to MaxDynamicDebris do {
[] spawn spawn_roadblocks;
};
//  spawn_ammosupply at server start 1% of roadblocks
diag_log ("HIVE: Spawning # of Ammo Boxes: " + str(MaxAmmoBoxes));
for "_x" from 1 to MaxAmmoBoxes do {
[] spawn spawn_ammosupply;
};
// call spawning mining veins
diag_log ("HIVE: Spawning # of Veins: " + str(MaxMineVeins));
for "_x" from 1 to MaxMineVeins do {
[] spawn spawn_mineveins;
};
 
if(isnil "dayz_MapArea") then {
dayz_MapArea = 10000;
};
if(isnil "HeliCrashArea") then {
HeliCrashArea = dayz_MapArea / 2;
};
if(isnil "OldHeliCrash") then {
OldHeliCrash = false;
};
 
// [_guaranteedLoot, _randomizedLoot, _frequency, _variance, _spawnChance, _spawnMarker, _spawnRadius, _spawnFire, _fadeFire]
if(OldHeliCrash) then {
_nul = [3, 4, (50 * 60), (15 * 60), 0.75, 'center', HeliCrashArea, true, false] spawn server_spawnCrashSite;
};
if (isDedicated) then {
// Epoch Events
_id = [] spawn server_spawnEvents;
// server cleanup
[] spawn {
private ["_id"];
sleep 200; //Sleep Lootcleanup, don't need directly cleanup on startup + fix some performance issues on serverstart
waitUntil {!isNil "server_spawnCleanAnimals"};
_id = [] execFSM "\z\addons\dayz_server\system\server_cleanup.fsm";
};
 
// spawn debug box
_debugMarkerPosition = getMarkerPos "respawn_west";
_debugMarkerPosition = [(_debugMarkerPosition select 0),(_debugMarkerPosition select 1),1];
_vehicle_0 = createVehicle ["DebugBox_DZ", _debugMarkerPosition, [], 0, "CAN_COLLIDE"];
_vehicle_0 setPos _debugMarkerPosition;
_vehicle_0 setVariable ["ObjectID","1",true];
 
// max number of spawn markers
if(isnil "spawnMarkerCount") then {
spawnMarkerCount = 10;
};
actualSpawnMarkerCount = 0;
// count valid spawn marker positions
for "_i" from 0 to spawnMarkerCount do {
if (!([(getMarkerPos format["spawn%1", _i]), [0,0,0]] call BIS_fnc_areEqual)) then {
actualSpawnMarkerCount = actualSpawnMarkerCount + 1;
} else {
// exit since we did not find any further markers
_i = spawnMarkerCount + 99;
};
 
};
diag_log format["Total Number of spawn locations %1", actualSpawnMarkerCount];
 
endLoadingScreen;
};
// Chatzbach Trader and Buckten Trader
execVM "\z\addons\dayz_server\custombuildings\Tradersexecution.sqf";
 
allowConnection = true;
sm_done = true;
publicVariable "sm_done";
};

 
Update object
 

/*
[_object,_type] spawn server_updateObject;
*/
private ["_object","_type","_objectID","_uid","_lastUpdate","_needUpdate","_object_position","_object_inventory","_object_damage","_isNotOk","_parachuteWest","_firstTime","_object_killed","_object_repair","_isbuildable"];
 
_object = _this select 0;
 
if(isNull(_object)) exitWith {
diag_log format["Skipping Null Object: %1", _object];
};
 
_type = _this select 1;
_parachuteWest = ((typeOf _object == "ParachuteWest") || (typeOf _object == "ParachuteC"));
_isbuildable = (typeOf _object) in dayz_allowedObjects;
_isNotOk = false;
_firstTime = false;
 
_objectID = _object getVariable ["ObjectID","0"];
_uid = _object getVariable ["ObjectUID","0"];
 
if ((typeName _objectID != "string") || (typeName _uid != "string")) then
    diag_log(format["Non-string Object: ID %1 UID %2", _objectID, _uid]);
    //force fail
    _objectID = "0";
    _uid = "0";
};
if (!_parachuteWest && !(locked _object)) then {
if (_objectID == "0" && _uid == "0") then
{
_object_position = getPosATL _object;
    _isNotOk = true;
};
};
 
// do not update if buildable && not ok
if (_isNotOk && _isbuildable) exitWith {  };
 
// delete if still not ok
if (_isNotOk) exitWith { deleteVehicle _object; diag_log(format["Deleting object %1 with invalid ID at pos [%2,%3,%4]",typeOf _object,_object_position select 0,_object_position select 1, _object_position select 2]); };
 
 
_lastUpdate = _object getVariable ["lastUpdate",time];
_needUpdate = _object in needUpdate_objects;
 
// TODO ----------------------
_object_position = {
private["_position","_worldspace","_fuel","_key"];
_position = getPosATL _object;
_worldspace = [
round(direction _object),
_position
];
_fuel = 0;
if (_object isKindOf "AllVehicles") then {
_fuel = fuel _object;
};
_key = format["CHILD:305:%1:%2:%3:",_objectID,_worldspace,_fuel];
//diag_log ("HIVE: WRITE: "+ str(_key));
_key call server_hiveWrite;
};
 
_object_inventory = {
_isNormal = true;
if (typeOf (_object)in DZE_DoorsLocked) then{
_isNormal = false;
_inventory = _object getVariable ["doorfriends", []]; //We're replacing the inventory with UIDs for this item
};
 
if(_isNormal)then {
_inventory = [
getWeaponCargo _object,
getMagazineCargo _object,
getBackpackCargo _object,
// zsc
_object getVariable["bankMoney",0]
];
};
 
// zsc
_object getVariable["bankMoney",0];
_previous = str(_object getVariable["lastInventory",[]]);
if (str(_inventory) != _previous) then {
_object setVariable["lastInventory",_inventory];
if (_objectID == "0") then {
_key = format["CHILD:309:%1:%2:",_uid,_inventory];
} else {
_key = format["CHILD:303:%1:%2:",_objectID,_inventory];
};
//diag_log ("HIVE: WRITE: "+ str(_key));
_key call server_hiveWrite;
};
};
 
_object_damage = {
private["_hitpoints","_array","_hit","_selection","_key","_damage"];
_hitpoints = _object call vehicle_getHitpoints;
_damage = damage _object;
_array = [];
{
_hit = [_object,_x] call object_getHit;
_selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
_object setHit ["_selection", _hit];
} count _hitpoints;
 
_key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
//diag_log ("HIVE: WRITE: "+ str(_key));
_key call server_hiveWrite;
_object setVariable ["needUpdate",false,true];
};
 
_object_killed = {
private["_hitpoints","_array","_hit","_selection","_key","_damage"];
_hitpoints = _object call vehicle_getHitpoints;
//_damage = damage _object;
_damage = 1;
_array = [];
{
_hit = [_object,_x] call object_getHit;
_selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
_hit = 1;
_object setHit ["_selection", _hit];
} count _hitpoints;
 
if (_objectID == "0") then {
_key = format["CHILD:306:%1:%2:%3:",_uid,_array,_damage];
} else {
_key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
};
//diag_log ("HIVE: WRITE: "+ str(_key));
_key call server_hiveWrite;
_object setVariable ["needUpdate",false,true];
if ((count _this) > 2) then {
_killer = _this select 2;
_charID = _object getVariable ['CharacterID','0'];
_objID = _object getVariable['ObjectID','0'];
_objUID = _object getVariable['ObjectUID','0'];
_worldSpace = getPosATL _object;
if (getPlayerUID _killer != "") then {
_name = if (alive _killer) then { name _killer; } else { format["OBJECT %1", _killer]; };
diag_log format["Vehicle killed: Vehicle %1 (TYPE: %2), CharacterID: %3, ObjectID: %4, ObjectUID: %5, Position: %6, Killer: %7 (UID: %8)", _object, (typeOf _object), _charID, _objID, _objUID, _worldSpace, _name, (getPlayerUID _killer)];
} else {
diag_log format["Vehicle killed: Vehicle %1 (TYPE: %2), CharacterID: %3, ObjectID: %4, ObjectUID: %5, Position: %6", _object, (typeOf _object), _charID, _objID, _objUID, _worldSpace];
};
};
};
 
_object_repair = {
private["_hitpoints","_array","_hit","_selection","_key","_damage"];
_hitpoints = _object call vehicle_getHitpoints;
_damage = damage _object;
_array = [];
{
_hit = [_object,_x] call object_getHit;
_selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
_object setHit ["_selection", _hit];
} count _hitpoints;
 
_key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
//diag_log ("HIVE: WRITE: "+ str(_key));
_key call server_hiveWrite;
_object setVariable ["needUpdate",false,true];
};
// TODO ----------------------
 
_object setVariable ["lastUpdate",time,true];
switch (_type) do {
case "all": {
call _object_position;
call _object_inventory;
call _object_damage;
};
case "position": {
if (!(_object in needUpdate_objects)) then {
//diag_log format["DEBUG Position: Added to NeedUpdate=%1",_object];
needUpdate_objects set [count needUpdate_objects, _object];
};
};
case "gear": {
call _object_inventory;
};
case "damage": {
if ( (time - _lastUpdate) > 5) then {
call _object_damage;
} else {
if (!(_object in needUpdate_objects)) then {
//diag_log format["DEBUG Damage: Added to NeedUpdate=%1",_object];
needUpdate_objects set [count needUpdate_objects, _object];
};
};
};
case "killed": {
call _object_killed;
};
case "repair": {
call _object_damage;
};
};

 

An error im is here below that i just noticed

if (str(_inventory) != _previous) then {
_object>
15:36:29   Error position: <_inventory) != _previous) then {
_object>
15:36:29   Error Undefined variable in expression: _inventory
15:36:29 File z\addons\dayz_server\compile\server_updateObject.sqf, line 83

Link to comment
Share on other sites

change guide 
 

B - IF USING PLOT MANAGEMENT, 
 
REplace:

if ((count _intentory > 0) && !(typeOf( _object) == "Plastic_Pole_EP1_DZ")) then {

With

if ((count _intentory > 0) && !(typeOf( _object) == "Plastic_Pole_EP1_DZ") && !(typeOf( _object) in DZE_DoorsLocked)) then {
 

a) place

if (typeOf (_object) in DZE_DoorsLocked) then {
_object setVariable ["doorfriends", _intentory, true];
};

under

_object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"];

 

Change all

_intentory

to 

_inventory 

and loot saving after restart

Link to comment
Share on other sites

 

Thank you alot for the reply zupa, but i cant see what im doing wrong with either of these two files.

 

This is running on plot for life 2.34, vector building, and snap building pro

 

Server monitor

private ["_nul","_result","_pos","_wsDone","_dir","_isOK","_countr","_objWpnTypes","_objWpnQty","_dam","_selection","_totalvehicles","_object","_idKey","_type","_ownerID","_worldspace","_intentory","_hitPoints","_fuel","_damage","_key","_vehLimit","_hiveResponse","_objectCount","_codeCount","_data","_status","_val","_traderid","_retrader","_traderData","_id","_lockable","_debugMarkerPosition","_vehicle_0","_bQty","_vQty","_BuildingQueue","_objectQueue","_superkey","_shutdown","_res","_hiveLoaded"];
 
dayz_versionNo = getText(configFile >> "CfgMods" >> "DayZ" >> "version");
dayz_hiveVersionNo = getNumber(configFile >> "CfgMods" >> "DayZ" >> "hiveVersion");
 
_hiveLoaded = false;
 
waitUntil{initialized}; //means all the functions are now defined
 
diag_log "HIVE: Starting";
 
waituntil{isNil "sm_done"}; // prevent server_monitor be called twice (bug during login of the first player)
 
// Custom Configs
if(isnil "MaxVehicleLimit") then {
MaxVehicleLimit = 500;
};
 
if(isnil "MaxDynamicDebris") then {
MaxDynamicDebris = 100;
};
if(isnil "MaxAmmoBoxes") then {
MaxAmmoBoxes = 15;
};
if(isnil "MaxMineVeins") then {
MaxMineVeins = 100;
};
 
// Camp LS
call compile preprocessFileLineNumbers "\z\addons\dayz_server\custombuildings\Camp_LS.sqf";
call compile preprocessFileLineNumbers "\z\addons\dayz_server\custombuildings\Camp_LS_Box.sqf";
call compile preprocessFileLineNumbers "\z\addons\dayz_server\custombuildings\Camp_LS_Box2.sqf";
 
// Custom Configs End
 
if (isServer && isNil "sm_done") then {
 
serverVehicleCounter = [];
_hiveResponse = [];
 
for "_i" from 1 to 5 do {
diag_log "HIVE: trying to get objects";
_key = format["CHILD:302:%1:", dayZ_instance];
_hiveResponse = _key call server_hiveReadWrite;  
if ((((isnil "_hiveResponse") || {(typeName _hiveResponse != "ARRAY")}) || {((typeName (_hiveResponse select 1)) != "SCALAR")})) then {
if ((_hiveResponse select 1) == "Instance already initialized") then {
_superkey = profileNamespace getVariable "SUPERKEY";
_shutdown = format["CHILD:400:%1:", _superkey];
_res = _shutdown call server_hiveReadWrite;
diag_log ("HIVE: attempt to kill.. HiveExt response:"+str(_res));
} else {
diag_log ("HIVE: connection problem... HiveExt response:"+str(_hiveResponse));
 
};
_hiveResponse = ["",0];
else {
diag_log ("HIVE: found "+str(_hiveResponse select 1)+" objects" );
_i = 99; // break
};
};
 
_BuildingQueue = [];
_objectQueue = [];
 
if ((_hiveResponse select 0) == "ObjectStreamStart") then {
 
// save superkey
profileNamespace setVariable ["SUPERKEY",(_hiveResponse select 2)];
 
_hiveLoaded = true;
 
diag_log ("HIVE: Commence Object Streaming...");
_key = format["CHILD:302:%1:", dayZ_instance];
_objectCount = _hiveResponse select 1;
_bQty = 0;
_vQty = 0;
for "_i" from 1 to _objectCount do {
_hiveResponse = _key call server_hiveReadWriteLarge;
//diag_log (format["HIVE dbg %1 %2", typeName _hiveResponse, _hiveResponse]);
if ((_hiveResponse select 2) isKindOf "ModularItems") then {
_BuildingQueue set [_bQty,_hiveResponse];
_bQty = _bQty + 1;
} else {
_objectQueue set [_vQty,_hiveResponse];
_vQty = _vQty + 1;
};
};
diag_log ("HIVE: got " + str(_bQty) + " Epoch Objects and " + str(_vQty) + " Vehicles");
};
 
// # NOW SPAWN OBJECTS #
_totalvehicles = 0;
{
_idKey = _x select 1;
_type = _x select 2;
_ownerID = _x select 3;
 
_worldspace = _x select 4;
_intentory = _x select 5;
_hitPoints = _x select 6;
_fuel = _x select 7;
_damage = _x select 8;
 
_dir = 0;
_pos = [0,0,0];
_wsDone = false;
if (count _worldspace >= 2) then
{
_dir = _worldspace select 0;
if (count (_worldspace select 1) == 3) then {
_pos = _worldspace select 1;
_wsDone = true;
}
};
 
// Plot for life // Vector building
_vector = [[0,0,0],[0,0,0]];
_vecExists = false;
_ownerPUID = "0";   
if (count _worldspace >= 3) then{
    if(count _worldspace == 3) then{
            if(typename (_worldspace select 2) == "STRING")then{
                _ownerPUID = _worldspace select 2;
            }else{
                 if(typename (_worldspace select 2) == "ARRAY")then{
                    _vector = _worldspace select 2;
                    if(count _vector == 2)then{
                        if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
                            _vecExists = true;
                        };
                    };
                };                  
            };
 
    }else{
        //Was not 3 elements, so check if 4 or more
        if(count _worldspace == 4) then{
            if(typename (_worldspace select 3) == "STRING")then{
                _ownerPUID = _worldspace select 3;
            }else{
                if(typename (_worldspace select 2) == "STRING")then{
                    _ownerPUID = _worldspace select 2;
                };
            };
 
 
            if(typename (_worldspace select 2) == "ARRAY")then{
                _vector = _worldspace select 2;
                if(count _vector == 2)then{
                    if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
                        _vecExists = true;
                    };
                };
            }else{
                if(typename (_worldspace select 3) == "ARRAY")then{
                    _vector = _worldspace select 3;
                    if(count _vector == 2)then{
                        if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
                            _vecExists = true;
                        };
                    };
                };
            };
 
        }else{
            //More than 3 or 4 elements found
            //Might add a search for the vector, ownerPUID will equal 0
        };
    };
}; 
 
if (!_wsDone) then {
if (count _worldspace >= 1) then { _dir = _worldspace select 0; };
_pos = [getMarkerPos "center",0,4000,10,0,2000,0] call BIS_fnc_findSafePos;
if (count _pos < 3) then { _pos = [_pos select 0,_pos select 1,0]; };
diag_log ("MOVED OBJ: " + str(_idKey) + " of class " + _type + " to pos: " + str(_pos));
};
 
 
if (_damage < 1) then {
//diag_log format["OBJ: %1 - %2", _idKey,_type];
 
//Create it
_object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"];
// Door management
if (typeOf (_object) in  DZE_DoorsLocked) then {
_object setVariable ["doorfriends", _intentory, true];
};
_object setVariable ["lastUpdate",time];
_object setVariable ["ObjectID", _idKey, true];
_object setVariable ["ownerPUID", _ownerPUID, true];
 
_lockable = 0;
if(isNumber (configFile >> "CfgVehicles" >> _type >> "lockable")) then {
_lockable = getNumber(configFile >> "CfgVehicles" >> _type >> "lockable");
};
 
// fix for leading zero issues on safe codes after restart
if (_lockable == 4) then {
_codeCount = (count (toArray _ownerID));
if(_codeCount == 3) then {
_ownerID = format["0%1", _ownerID];
};
if(_codeCount == 2) then {
_ownerID = format["00%1", _ownerID];
};
if(_codeCount == 1) then {
_ownerID = format["000%1", _ownerID];
};
};
 
if (_lockable == 3) then {
_codeCount = (count (toArray _ownerID));
if(_codeCount == 2) then {
_ownerID = format["0%1", _ownerID];
};
if(_codeCount == 1) then {
_ownerID = format["00%1", _ownerID];
};
};
 
_object setVariable ["CharacterID", _ownerID, true];
 
clearWeaponCargoGlobal  _object;
clearMagazineCargoGlobal  _object;
// _object setVehicleAmmo DZE_vehicleAmmo;
 
_object setdir _dir;
if(_vecExists)then{
_object setVectorDirAndUp _vector;
}; 
_object setposATL _pos;
_object setDamage _damage;
 
if ((typeOf _object) in dayz_allowedObjects) then {
_object setVariable["memDir",_dir,true];
if (DZE_GodModeBase) then {
_object addEventHandler ["HandleDamage", {false}];
} else {
_object addMPEventHandler ["MPKilled",{_this call object_handleServerKilled;}];
};
// Test disabling simulation server side on buildables only.
_object enableSimulation false;
// used for inplace upgrades && lock/unlock of safe
_object setVariable ["OEMPos", _pos, true];
};
 
if ((count _intentory > 0) && !(typeOf( _object) in  DZE_DoorsLocked)) then {
// zsc
if( count (_intentory) > 3)then{
_object setVariable ["bankMoney", _intentory select 3, true];
}else{
       _object setVariable ["bankMoney", 0, true];
};
if (_type in DZE_LockedStorage) then {
// Fill variables with loot
_object setVariable ["WeaponCargo", (_intentory select 0),true];
_object setVariable ["MagazineCargo", (_intentory select 1),true];
_object setVariable ["BackpackCargo", (_intentory select 2),true];
} else {
 
//Add weapons
_objWpnTypes = (_intentory select 0) select 0;
_objWpnQty = (_intentory select 0) select 1;
_countr = 0;
{
if(_x in (DZE_REPLACE_WEAPONS select 0)) then {
_x = (DZE_REPLACE_WEAPONS select 1) select ((DZE_REPLACE_WEAPONS select 0) find _x);
};
_isOK = isClass(configFile >> "CfgWeapons" >> _x);
if (_isOK) then {
_object addWeaponCargoGlobal [_x,(_objWpnQty select _countr)];
};
_countr = _countr + 1;
} count _objWpnTypes; 
 
//Add Magazines
_objWpnTypes = (_intentory select 1) select 0;
_objWpnQty = (_intentory select 1) select 1;
_countr = 0;
{
if (_x == "BoltSteel") then { _x = "WoodenArrow" }; // Convert BoltSteel to WoodenArrow
if (_x == "ItemTent") then { _x = "ItemTentOld" };
_isOK = isClass(configFile >> "CfgMagazines" >> _x);
if (_isOK) then {
_object addMagazineCargoGlobal [_x,(_objWpnQty select _countr)];
};
_countr = _countr + 1;
} count _objWpnTypes;
 
//Add Backpacks
_objWpnTypes = (_intentory select 2) select 0;
_objWpnQty = (_intentory select 2) select 1;
_countr = 0;
{
_isOK = isClass(configFile >> "CfgVehicles" >> _x);
if (_isOK) then {
_object addBackpackCargoGlobal [_x,(_objWpnQty select _countr)];
};
_countr = _countr + 1;
} count _objWpnTypes;
};
};
 
if (_object isKindOf "AllVehicles") then {
{
_selection = _x select 0;
_dam = _x select 1;
if (_selection in dayZ_explosiveParts && _dam > 0.8) then {_dam = 0.8};
[_object,_selection,_dam] call object_setFixServer;
} count _hitpoints;
 
_object setFuel _fuel;
 
if (!((typeOf _object) in dayz_allowedObjects)) then {
 
//_object setvelocity [0,0,1];
_object call fnc_veh_ResetEH;
 
if(_ownerID != "0" && !(_object isKindOf "Bicycle")) then {
_object setvehiclelock "locked";
};
 
_totalvehicles = _totalvehicles + 1;
 
// total each vehicle
serverVehicleCounter set [count serverVehicleCounter,_type];
};
};
 
//Monitor the object
PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_object];
};
} count (_BuildingQueue + _objectQueue);
// # END SPAWN OBJECTS #
 
// preload server traders menu data into cache
if !(DZE_ConfigTrader) then {
{
// get tids
_traderData = call compile format["menu_%1;",_x];
if(!isNil "_traderData") then {
{
_traderid = _x select 1;
 
_retrader = [];
 
_key = format["CHILD:399:%1:",_traderid];
_data = "HiveEXT" callExtension _key;
 
//diag_log "HIVE: Request sent";
 
//Process result
_result = call compile format ["%1",_data];
_status = _result select 0;
 
if (_status == "ObjectStreamStart") then {
_val = _result select 1;
//Stream Objects
//diag_log ("HIVE: Commence Menu Streaming...");
call compile format["ServerTcache_%1 = [];",_traderid];
for "_i" from 1 to _val do {
_data = "HiveEXT" callExtension _key;
_result = call compile format ["%1",_data];
call compile format["ServerTcache_%1 set [count ServerTcache_%1,%2]",_traderid,_result];
_retrader set [count _retrader,_result];
};
//diag_log ("HIVE: Streamed " + str(_val) + " objects");
};
 
} forEach (_traderData select 0);
};
} forEach serverTraders;
};
 
if (_hiveLoaded) then {
//  spawn_vehicles
_vehLimit = MaxVehicleLimit - _totalvehicles;
if(_vehLimit > 0) then {
diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit));
for "_x" from 1 to _vehLimit do {
[] spawn spawn_vehicles;
};
} else {
diag_log "HIVE: Vehicle Spawn limit reached!";
};
};
 
//  spawn_roadblocks
diag_log ("HIVE: Spawning # of Debris: " + str(MaxDynamicDebris));
for "_x" from 1 to MaxDynamicDebris do {
[] spawn spawn_roadblocks;
};
//  spawn_ammosupply at server start 1% of roadblocks
diag_log ("HIVE: Spawning # of Ammo Boxes: " + str(MaxAmmoBoxes));
for "_x" from 1 to MaxAmmoBoxes do {
[] spawn spawn_ammosupply;
};
// call spawning mining veins
diag_log ("HIVE: Spawning # of Veins: " + str(MaxMineVeins));
for "_x" from 1 to MaxMineVeins do {
[] spawn spawn_mineveins;
};
 
if(isnil "dayz_MapArea") then {
dayz_MapArea = 10000;
};
if(isnil "HeliCrashArea") then {
HeliCrashArea = dayz_MapArea / 2;
};
if(isnil "OldHeliCrash") then {
OldHeliCrash = false;
};
 
// [_guaranteedLoot, _randomizedLoot, _frequency, _variance, _spawnChance, _spawnMarker, _spawnRadius, _spawnFire, _fadeFire]
if(OldHeliCrash) then {
_nul = [3, 4, (50 * 60), (15 * 60), 0.75, 'center', HeliCrashArea, true, false] spawn server_spawnCrashSite;
};
if (isDedicated) then {
// Epoch Events
_id = [] spawn server_spawnEvents;
// server cleanup
[] spawn {
private ["_id"];
sleep 200; //Sleep Lootcleanup, don't need directly cleanup on startup + fix some performance issues on serverstart
waitUntil {!isNil "server_spawnCleanAnimals"};
_id = [] execFSM "\z\addons\dayz_server\system\server_cleanup.fsm";
};
 
// spawn debug box
_debugMarkerPosition = getMarkerPos "respawn_west";
_debugMarkerPosition = [(_debugMarkerPosition select 0),(_debugMarkerPosition select 1),1];
_vehicle_0 = createVehicle ["DebugBox_DZ", _debugMarkerPosition, [], 0, "CAN_COLLIDE"];
_vehicle_0 setPos _debugMarkerPosition;
_vehicle_0 setVariable ["ObjectID","1",true];
 
// max number of spawn markers
if(isnil "spawnMarkerCount") then {
spawnMarkerCount = 10;
};
actualSpawnMarkerCount = 0;
// count valid spawn marker positions
for "_i" from 0 to spawnMarkerCount do {
if (!([(getMarkerPos format["spawn%1", _i]), [0,0,0]] call BIS_fnc_areEqual)) then {
actualSpawnMarkerCount = actualSpawnMarkerCount + 1;
} else {
// exit since we did not find any further markers
_i = spawnMarkerCount + 99;
};
 
};
diag_log format["Total Number of spawn locations %1", actualSpawnMarkerCount];
 
endLoadingScreen;
};
// Chatzbach Trader and Buckten Trader
execVM "\z\addons\dayz_server\custombuildings\Tradersexecution.sqf";
 
allowConnection = true;
sm_done = true;
publicVariable "sm_done";
};

 
Update object
 

/*
[_object,_type] spawn server_updateObject;
*/
private ["_object","_type","_objectID","_uid","_lastUpdate","_needUpdate","_object_position","_object_inventory","_object_damage","_isNotOk","_parachuteWest","_firstTime","_object_killed","_object_repair","_isbuildable"];
 
_object = _this select 0;
 
if(isNull(_object)) exitWith {
diag_log format["Skipping Null Object: %1", _object];
};
 
_type = _this select 1;
_parachuteWest = ((typeOf _object == "ParachuteWest") || (typeOf _object == "ParachuteC"));
_isbuildable = (typeOf _object) in dayz_allowedObjects;
_isNotOk = false;
_firstTime = false;
 
_objectID = _object getVariable ["ObjectID","0"];
_uid = _object getVariable ["ObjectUID","0"];
 
if ((typeName _objectID != "string") || (typeName _uid != "string")) then
    diag_log(format["Non-string Object: ID %1 UID %2", _objectID, _uid]);
    //force fail
    _objectID = "0";
    _uid = "0";
};
if (!_parachuteWest && !(locked _object)) then {
if (_objectID == "0" && _uid == "0") then
{
_object_position = getPosATL _object;
    _isNotOk = true;
};
};
 
// do not update if buildable && not ok
if (_isNotOk && _isbuildable) exitWith {  };
 
// delete if still not ok
if (_isNotOk) exitWith { deleteVehicle _object; diag_log(format["Deleting object %1 with invalid ID at pos [%2,%3,%4]",typeOf _object,_object_position select 0,_object_position select 1, _object_position select 2]); };
 
 
_lastUpdate = _object getVariable ["lastUpdate",time];
_needUpdate = _object in needUpdate_objects;
 
// TODO ----------------------
_object_position = {
private["_position","_worldspace","_fuel","_key"];
_position = getPosATL _object;
_worldspace = [
round(direction _object),
_position
];
_fuel = 0;
if (_object isKindOf "AllVehicles") then {
_fuel = fuel _object;
};
_key = format["CHILD:305:%1:%2:%3:",_objectID,_worldspace,_fuel];
//diag_log ("HIVE: WRITE: "+ str(_key));
_key call server_hiveWrite;
};
 
_object_inventory = {
_isNormal = true;
if (typeOf (_object)in DZE_DoorsLocked) then{
_isNormal = false;
_inventory = _object getVariable ["doorfriends", []]; //We're replacing the inventory with UIDs for this item
};
 
if(_isNormal)then {
_inventory = [
getWeaponCargo _object,
getMagazineCargo _object,
getBackpackCargo _object,
// zsc
_object getVariable["bankMoney",0]
];
};
 
// zsc
_object getVariable["bankMoney",0];
_previous = str(_object getVariable["lastInventory",[]]);
if (str(_inventory) != _previous) then {
_object setVariable["lastInventory",_inventory];
if (_objectID == "0") then {
_key = format["CHILD:309:%1:%2:",_uid,_inventory];
} else {
_key = format["CHILD:303:%1:%2:",_objectID,_inventory];
};
//diag_log ("HIVE: WRITE: "+ str(_key));
_key call server_hiveWrite;
};
};
 
_object_damage = {
private["_hitpoints","_array","_hit","_selection","_key","_damage"];
_hitpoints = _object call vehicle_getHitpoints;
_damage = damage _object;
_array = [];
{
_hit = [_object,_x] call object_getHit;
_selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
_object setHit ["_selection", _hit];
} count _hitpoints;
 
_key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
//diag_log ("HIVE: WRITE: "+ str(_key));
_key call server_hiveWrite;
_object setVariable ["needUpdate",false,true];
};
 
_object_killed = {
private["_hitpoints","_array","_hit","_selection","_key","_damage"];
_hitpoints = _object call vehicle_getHitpoints;
//_damage = damage _object;
_damage = 1;
_array = [];
{
_hit = [_object,_x] call object_getHit;
_selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
_hit = 1;
_object setHit ["_selection", _hit];
} count _hitpoints;
 
if (_objectID == "0") then {
_key = format["CHILD:306:%1:%2:%3:",_uid,_array,_damage];
} else {
_key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
};
//diag_log ("HIVE: WRITE: "+ str(_key));
_key call server_hiveWrite;
_object setVariable ["needUpdate",false,true];
if ((count _this) > 2) then {
_killer = _this select 2;
_charID = _object getVariable ['CharacterID','0'];
_objID = _object getVariable['ObjectID','0'];
_objUID = _object getVariable['ObjectUID','0'];
_worldSpace = getPosATL _object;
if (getPlayerUID _killer != "") then {
_name = if (alive _killer) then { name _killer; } else { format["OBJECT %1", _killer]; };
diag_log format["Vehicle killed: Vehicle %1 (TYPE: %2), CharacterID: %3, ObjectID: %4, ObjectUID: %5, Position: %6, Killer: %7 (UID: %8)", _object, (typeOf _object), _charID, _objID, _objUID, _worldSpace, _name, (getPlayerUID _killer)];
} else {
diag_log format["Vehicle killed: Vehicle %1 (TYPE: %2), CharacterID: %3, ObjectID: %4, ObjectUID: %5, Position: %6", _object, (typeOf _object), _charID, _objID, _objUID, _worldSpace];
};
};
};
 
_object_repair = {
private["_hitpoints","_array","_hit","_selection","_key","_damage"];
_hitpoints = _object call vehicle_getHitpoints;
_damage = damage _object;
_array = [];
{
_hit = [_object,_x] call object_getHit;
_selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
_object setHit ["_selection", _hit];
} count _hitpoints;
 
_key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
//diag_log ("HIVE: WRITE: "+ str(_key));
_key call server_hiveWrite;
_object setVariable ["needUpdate",false,true];
};
// TODO ----------------------
 
_object setVariable ["lastUpdate",time,true];
switch (_type) do {
case "all": {
call _object_position;
call _object_inventory;
call _object_damage;
};
case "position": {
if (!(_object in needUpdate_objects)) then {
//diag_log format["DEBUG Position: Added to NeedUpdate=%1",_object];
needUpdate_objects set [count needUpdate_objects, _object];
};
};
case "gear": {
call _object_inventory;
};
case "damage": {
if ( (time - _lastUpdate) > 5) then {
call _object_damage;
} else {
if (!(_object in needUpdate_objects)) then {
//diag_log format["DEBUG Damage: Added to NeedUpdate=%1",_object];
needUpdate_objects set [count needUpdate_objects, _object];
};
};
};
case "killed": {
call _object_killed;
};
case "repair": {
call _object_damage;
};
};

 

An error im is here below that i just noticed

if (str(_inventory) != _previous) then {
_object>
15:36:29   Error position: <_inventory) != _previous) then {
_object>
15:36:29   Error Undefined variable in expression: _inventory
15:36:29 File z\addons\dayz_server\compile\server_updateObject.sqf, line 83

 

I have found the fix to my issue with this and it now persists after restart and works fine now. I will link the thread below containing the fix.

 

Zupa, many thanks for the great script.

I recommend linking this thread in your install directions (or adding the line i had to add) for anyone that runs into this same issue as i have.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...