Jump to content

[Release] Build Vectors - Rotate objects in Dayz Epoch (v2.34 P4L & non-P4L)


striker

Recommended Posts

I'm having a small issue with walls/doors that have been put flat on the ground (Like a hatch) standing up to their normal position after a restart, is this a known issue or have I perhaps make a mistake? It seems to remember rotations, just not the pitch.

Link to comment
Share on other sites

I only having problems after restart with

 

Same setup as in demo video

 

CinderWallDoorLocked_DZ  [70.425,[2212.17,11771.9,1.964],[[0.942,0.335,0],[0.335,-0.942,-4.371e-08]],"455353535434543"]

CinderWallDoor_DZ             [70.425,[2212.17,11771.9,1.964],[[0.942,0.335,0],[-0.335,0.942,-4.371e-08]],"455353535434543"]

 

Vectored Floors and metalpanels all saving to database

 

As far as i know still testing..

Link to comment
Share on other sites

I get this error

15:25:29 Error in expression < _countr)];
};
_countr = _countr + 1;
} count _objWpnTypes; 


_objWpnTypes = (_>
15:25:29   Error position: <count _objWpnTypes; 


_objWpnTypes = (_>
15:25:29   Error count: Type String, expected Array
15:25:29 File z\addons\dayz_server\system\server_monitor.sqf, line 238

my server_monitor.sqf

 

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 = 50;
};

if(isnil "MaxDynamicDebris") then {
	MaxDynamicDebris = 100;
};
if(isnil "MaxAmmoBoxes") then {
	MaxAmmoBoxes = 3;
};
if(isnil "MaxMineVeins") then {
	MaxMineVeins = 50;
};
// Custon 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;
		_vector = [[0,0,0],[0,0,0]];
		_vecExists = false;
		
		_pos = [0,0,0];
		_wsDone = false;
    if (count _worldspace >= 2) then
        {
            if(count _worldspace == 3) then{
                _vector = _worldspace select 2;
                if(typename _vector == "ARRAY")then{
                    if(count _vector == 2)then{
                        if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
                            _vecExists = true;
                        };
                    };

                };

            };
            _dir = _worldspace select 0;
            if (count (_worldspace select 1) == 3) then {
                _pos = _worldspace select 1;
                _wsDone = true;
            }
        };			
		
		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"];
			_object setVariable ["lastUpdate",time];
			_object setVariable ["ObjectID", _idKey, true];
			
			if (typeOf (_object) == "Plastic_Pole_EP1_DZ") then {
            _object setVariable ["plotfriends", _intentory, true];
            };			

			_lockable = 0;
			
			if (_type == "SUV_PMC") then {_object setVehicleInit 'this setObjectTexture [0, ''custom\SUV_PMC.jpg''];';};					
			
			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;
			
//#########################INDESTRUCTIBLE ITEMS#########################
			if ((typeOf _object) in indestructible) then {
				_object addEventHandler ["HandleDamage", {false}];
				_object enableSimulation false;
			} else {
				_object addMPEventHandler ["MPKilled",{_this call object_handleServerKilled;}];
			};
//######################################################################
			
			if ((typeOf _object) in dayz_allowedObjects) then {
//#########################REMOVED FOR INDESTRUCTIBLE ITEMS#########################
//				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) then {
				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 #  **************************************************************************************************************************************************************************
	processInitCommands; 
	// 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;
	};
//ExecVM "\z\addons\dayz_server\WAI\init.sqf";
	allowConnection = true;	
	sm_done = true;
	publicVariable "sm_done";
};

 

b_560_95_1.png

 

FIXED

Link to comment
Share on other sites

Hello,

 

don't know if you are aware of this, Striker.

 

But with Vector Build and Snap Pro, there's a problem, when you put the object down with the F-Key.

 

If you tilt the object exactly 90 degrees forward or backwards, makes no difference, and then you put it down with the F-Key the object will spin around for 180 degrees.

 

There's still a slight difference, if you tilt the object forward or backwards:

 

90 degrees forward, the object will spin at the FIRST push of F-Key, when you put the object down.

90 degrees backward, the object will spin at the SECOND push of F-Key, when you pick the object up.

 

I think it's for all building objects, I tested it with metalfloors, cinderwalls, woodwalls, WoodCrate, etc.

 

Tilting, when the object is put down, won't produce this problem. Only WHILE carrying the object around and then tilting will produce the direction change, when pressing the F-Key afterwards.

 

Couldn't figure out how to fix it so far.

Link to comment
Share on other sites

Hello, I have a bug. when you connect to the server pishshet just such a mistake





I'm sorry, he made ​​a mistake. wrote twice #include "custom \ snap_pro \ snappoints.hpp"

ErrorMessage: File mpmissions\DayZ_Epoch_11.Chernarus\custom\snap_pro\snappoints.
hpp, line 397: .SnapBuilding: Member already defined.
Link to comment
Share on other sites

Hey guys,

 

Big news, all the major issues with the vector script have been fixed and will be released tonight. However, the new release will need this Mikeeeyy to work decently. So add that in to your server if you want a head start.

The full release should be added here in a few hours.  :)

 

striker 

Link to comment
Share on other sites

 

Hello, I have a bug. when you connect to the server pishshet just such a mistake

ErrorMessage: File mpmissions\DayZ_Epoch_11.Chernarus\custom\snap_pro\snappoints.hpp, line 397: .SnapBuilding: Member already defined.

 

 

This is my snappoints.hpp

 

/*-----------------------------------------------------------*/
// Created by Raymix
// Last update - August 21 2014
/*-----------------------------------------------------------*/


class SnapBuilding {
//Barriers whitelist
class Barrier {
snapTo[] = {
"Land_HBarrier5_DZ",
"Land_HBarrier3_DZ",
"Land_HBarrier1_DZ",
"Sandbag1_DZ",
"BagFenceRound_DZ",
"Fort_RazorWire"
};
radius = 5;
};
//snap points
class Land_HBarrier5Preview: Barrier{ //fix for broken offsets in ghost
points[] = {
{0,0,0,"Pivot"},
{0,-0.75,0.1,"Back"},
{0,0.75,0.1,"Front"},
{-2.85,0,0.1,"Left"},
{2.85,0,0.1,"Right"},
{0,0,0.9,"Top"}
};
};
class Land_HBarrier5_DZ: Land_HBarrier5Preview {
points[] = {
{0,0,0,"Pivot"},
{0,-0.75,0,"Back"},
{0,0.75,0,"Front"},
{-2.85,0,0,"Left"},
{2.85,0,0,"Right"},
{0,0,0.9,"Top"}
};
};

class Land_HBarrier3ePreview: Barrier { //whitelist inheritance
points[] = {
{0,0,0,"Pivot"},
{0,-0.75,0,"Back"},
{0,0.75,0,"Front"},
{-1.7,0,0,"Left"},
{1.7,0,0,"Right"},
{0,0,0.9,"Top"}
};
};
class Land_HBarrier3_DZ: Land_HBarrier3ePreview{}; //point inheritance

class Land_HBarrier1Preview: Barrier {
points[] = {
{0,0,0,"Pivot"},
{0,-0.75,0,"Back"},
{0,0.75,0,"Front"},
{-0.6,0,0,"Left"},
{0.6,0,0,"Right"},
{0,0,0.9,"Top"}
};
};
class Land_HBarrier1_DZ: Land_HBarrier1Preview{};

class Fort_RazorWirePreview: Barrier {
points[] = {
{0,0,0,"Pivot"},
{0,-0.95,-0.3,"Back"},
{0,0.95,-0.3,"Front"},
{-4.1,0,-0.3,"Left"},
{4.1,0,-0.3,"Right"},
{0,0,1,"Top"}
};
};
class Fort_RazorWire: Fort_RazorWirePreview {};

class Sandbag1_DZ: Barrier {
points[] = {
{0,0,0,"Pivot"},
{-1.5,0,0,"Left"},
{1.5,0,0,"Right"},
{0,0,0.4,"Top"}
};
};

class BagFenceRound_DZ: Barrier {
points[] = {
{0,0,0,"Pivot"},
{-1.295,0.38,0,"Left"},
{1.295,0.38,0,"Right"},
{0,0,0.4,"Top"}
};
};

//Snapping whitelists for Floors, walls and stairs
class FloorsWallsStairs {
snapTo[] = {
"WoodFloorQuarter_DZ",
"WoodFloorHalf_DZ",
"WoodFloor_DZ",
"WoodStairs_DZ",
"WoodStairsSans_DZ",
"WoodSmallWallDoor_DZ",
"WoodSmallWall_DZ",
"WoodSmallWallWin_DZ",
"Land_DZE_WoodDoor",
"Land_DZE_WoodDoorLocked",
"WoodLargeWall_DZ",
"Land_DZE_LargeWoodDoor",
"WoodLargeWallWin_DZ",
"WoodLargeWallDoor_DZ",
"Land_DZE_GarageWoodDoor",
"Land_DZE_GarageWoodDoorLocked",
"Land_DZE_LargeWoodDoorLocked",
"WoodSmallWallThird_DZ",
"CinderWall_DZ",
"CinderWallDoorway_DZ",
"CinderWallDoorLocked_DZ",
"CinderWallDoor_DZ",
"CinderWallSmallDoorway_DZ",
"CinderWallDoorSmallLocked_DZ",
"CinderWallHalf_DZ",
"CinderWallDoorSmall_DZ",
"MetalFloor_DZ"
};
radius = 7;
};

class WoodFloorQuarter_Preview_DZ: FloorsWallsStairs { //fix for broken offsets in ghost
points[] = {
{0,0,0,"Pivot"},
{0,-1.23,0,"Back"},
{0,1.23,0,"Front"},
{-1.24,0,0,"Left"},
{1.24,0,0,"Right"}
};
};

class WoodFloorQuarter_DZ: FloorsWallsStairs {
points[] = {
{0,0,0,"Pivot"},
{0,-1.23,0.137726,"Back"},
{0,1.23,0.137726,"Front"},
{-1.24,0,0.137726,"Left"},
{1.24,0,0.137726,"Right"}
};
};

class WoodFloorHalf_Preview_DZ: FloorsWallsStairs { //fix for broken offsets in ghost
points[] = {
{0,0,0,"Pivot"},
{0,-2.34,0,"Back"},
{0,2.34,0,"Front"},
{-1.25,0,0,"Left"},
{1.25,0,0,"Right"}
};
};
class WoodFloorHalf_DZ: FloorsWallsStairs{
points[] = {
{0,0,0,"Pivot"},
{0,-2.34,0.1407,"Back"},
{0,2.34,0.1407,"Front"},
{-1.25,0,0.1407,"Left"},
{1.25,0,0.1407,"Right"}
};
};

class WoodFloor_Preview_DZ: FloorsWallsStairs {
points[] = {
{0,0,0,"Pivot"},
{0,-2.33,0.130,"Back"},
{0,2.33,0.130,"Front"},
{-2.495,0,0.130,"Left"},
{2.495,0,0.130,"Right"}
};
radius = 10;
};
class WoodFloor_DZ: WoodFloor_Preview_DZ{};

class Stairs_DZE: FloorsWallsStairs {
points[] = {
{0,0,0,"Pivot"},
{1.56055,-0.78,1.5,"Back"},
{1.56055,0.78,1.5,"Front"},
{1.73926,0.05,2.9,"Top"},
{-1.73926,0.05,0,"Bottom"}
};
};
class WoodStairs_DZ: Stairs_DZE {};
class WoodStairs_Preview_DZ: Stairs_DZE {};
class WoodStairsSans_Preview_DZ: Stairs_DZE {};
class WoodStairsSans_DZ: Stairs_DZE {};

class WoodSmall_DZE: FloorsWallsStairs { // Small wood walls
points[] = {
{0,0,0,"Pivot"},
{-2.285, 0, 1.5,"Left"},
{2.285, 0, 1.5,"Right"},
{0, 0, 3,"Top"}
};
};
class WoodSmallWallDoor_Preview_DZ: WoodSmall_DZE {};
class WoodSmallWall_Preview_DZ: WoodSmall_DZE {};
class WoodSmallWallWin_Preview_DZ: WoodSmall_DZE {};
class WoodSmallWallDoor_DZ: WoodSmall_DZE {};
class WoodSmallWall_DZ: WoodSmall_DZE {};
class WoodSmallWallWin_DZ: WoodSmall_DZE {};
class Land_DZE_WoodDoor: WoodSmall_DZE {};
class Land_DZE_WoodDoorLocked: WoodSmall_DZE {};
class WoodDoor_Preview_DZ: WoodSmall_DZE{};

class WoodLarge_DZE: FloorsWallsStairs { //Large wood walls
points[] = {
{0,0,0,"Pivot"},
{-2.45, 0, 1.5,"Left"},
{2.45, 0, 1.5,"Right"},
{0, 0, 3,"Top"}
};
};
class WoodLargeWall_Preview_DZ: WoodLarge_DZE {};
class WoodLargeWallWin_Preview_DZ: WoodLarge_DZE {};
class WoodLargeWallDoor_Preview_DZ: WoodLarge_DZE {};
class WoodSmallWallThird_Preview_DZ: WoodLarge_DZE {
points[] = {
{0,0,0,"Pivot"},
{-2.445, 0, 1.5,"Left"},
{2.445, 0, 1.5,"Right"},
{0, 0, 1.17,"Top"}
};
};
class WoodSmallWallThird_DZ: WoodSmallWallThird_Preview_DZ{};
class WoodLargeWall_DZ: WoodLarge_DZE {};
class Land_DZE_LargeWoodDoor: WoodLarge_DZE {};
class WoodLargeWallWin_DZ: WoodLarge_DZE {};
class WoodLargeWallDoor_DZ: WoodLarge_DZE {};
class Land_DZE_GarageWoodDoor: WoodLarge_DZE {};
class GarageWoodDoor_Preview_DZ: WoodLarge_DZE {};
class Land_DZE_GarageWoodDoorLocked: WoodLarge_DZE {};
class Land_DZE_LargeWoodDoorLocked: WoodLarge_DZE {};
class LargeWoodDoor_Preview_DZ: WoodLarge_DZE {};

class Cinder_DZE: FloorsWallsStairs { //All cinder walls and doors
points[] = {
{0,0,0,"Pivot"},
{-2.752, 0, 1.5,"Left"},
{2.752, 0, 1.5,"Right"},
{0, 0, 3.37042,"Top"}
};
radius = 10;
};
class CinderWall_Preview_DZ: Cinder_DZE {};
class CinderWallDoorway_Preview_DZ: Cinder_DZE {};
class CinderWallSmallDoorway_Preview_DZ: Cinder_DZE {};
class CinderWallHalf_Preview_DZ: Cinder_DZE {
points[] = {
{0,0,0,"Pivot"},
{-2.752, 0, 1.5,"Left"},
{2.752, 0, 1.5,"Right"},
{0, 0, 1.5,"Top"}
};
};
class CinderWall_DZ: Cinder_DZE {};
class CinderWallDoorway_DZ: Cinder_DZE {};
class CinderWallDoorLocked_DZ: Cinder_DZE {};
class CinderWallDoor_DZ: Cinder_DZE {};
class CinderWallSmallDoorway_DZ: Cinder_DZE {};
class CinderWallDoorSmallLocked_DZ: Cinder_DZE {};
class CinderWallHalf_DZ: Cinder_DZE {
points[] = {
{0,0,0,"Pivot"},
{-2.752, 0, 1.5,"Left"},
{2.752, 0, 1.5,"Right"},
{0, 0, 1.5,"Top"}
};
};
class CinderWallDoorSmall_DZ: Cinder_DZE {};

class MetalFloor_Preview_DZ: FloorsWallsStairs { //fix for broken offsets in ghost
points[] = {
{0,0,0.011,"Pivot"},
{0, -2.64, 0.009,"Back"},
{0, 2.64, 0.009,"Front"},
{-2.64, 0, 0.009,"Left"},
{2.64, 0, 0.009,"Right"}
};
radius = 12;
};
class MetalFloor_DZ: FloorsWallsStairs{
points[] = {
{0,0,0,"Pivot"},
{0, -2.64, 0.15,"Back"},
{0, 2.64, 0.15,"Front"},
{-2.64, 0, 0.15,"Left"},
{2.64, 0, 0.15,"Right"}
};
radius = 12;
};


//Non essential Items that only snap to themselves, do whitelist inheritance if you want these to snap
class WoodCrate_DZ {
snapTo[] = {
"WoodCrate_DZ"
};
radius = 5;
points[] = {
{0,0,0,"Pivot"},
{0,-0.47,0,"Back"},
{0,0.47,0,"Front"},
{-0.47,0,0,"Left"},
{0.47,0,0,"Right"},
{0,0,0.47,"Top"}
};
};

class MetalPanel_DZ {
snapTo[] = {
"MetalPanel_DZ"
};
radius = 5;
points[] = {
{0,0,0,"Pivot"},
{-1.5,0,0,"Left"},
{1.5,0,0,"Right"}
};
};

class MetalGate_DZ {
snapTo[] = {
"MetalGate_DZ"
};
radius = 5;
points[] = {
{0,0,0,"Pivot"},
{-4.1,0,0,"Left"}
};
};

class StickFence_DZ {
snapTo[] = {
"StickFence_DZ"
};
radius = 10;
points[] = {
{0,0,0,"Pivot"},
{-2.95,0,0.3,"Left"},
{2.95,0,0.3,"Right"}
};
};

class Fence_corrugated_DZ {
snapTo[] = {
"Fence_corrugated_DZ"
};
radius = 10;
points[] = {
{0,0,0,"Pivot"},
{-1.95,0,0.88,"Left"},
{1.95,0,0.88,"Right"}
};
};

class WoodRamp_Preview_DZ {
snapTo[] = {
"WoodRamp_DZ"
};
radius = 7;
points[] = {
{0,0,0,"Pivot"},
{0.65,-1.7,1.2,"Back"},
{0.65,1.5,1.2,"Front"},
{3.34,-0.115,2.82,"Top"}
};
};
class WoodRamp_DZ: WoodRamp_Preview_DZ{};

class WoodLadder_Preview_DZ {
snapTo[] = {
"WoodLadder_DZ"
};
radius = 5;
points[] = {
{0,0,0,"Pivot"},
{-0.4,0,1.725,"Left"},
{0.4,0,1.725,"Right"}
};
};
class WoodLadder_DZ: WoodLadder_Preview_DZ{};

class VaultStorageLocked {
snapTo[] = {
"VaultStorageLocked",
"VaultStorage"
};
radius = 5;
points[] = {
{0,0,0,"Pivot"},
{0,0.284,0.615,"Back"},
{0,0,1.23,"Top"},
{-0.362,0,0.615,"Left"},
{0.362,0,0.615,"Right"}
};

};
class VaultStorage: VaultStorageLocked {};
};

Link to comment
Share on other sites

Hey, 

get this error message:

Error count: Undefined variable in expression: _buildingqueue

2:24:16 File z\addons\dayz_server\system\server_monitor.sqf, line 337

 

Normal setup without admin / P4L

 

Here is my complete server_monitor.sqf, try it and see if it works correctly.

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 = 50;
};

if(isnil "MaxDynamicDebris") then {
	MaxDynamicDebris = 100;
};
if(isnil "MaxAmmoBoxes") then {
	MaxAmmoBoxes = 3;
};
if(isnil "MaxMineVeins") then {
	MaxMineVeins = 50;
};
// Custon 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
		{
			if ((typeName (_worldspace select 0)) == "STRING") then {
				_worldspace set [0, call compile (_worldspace select 0)];
				_worldspace set [1, call compile (_worldspace select 1)];
			};
			_dir = _worldspace select 0;
			if (count (_worldspace select 1) == 3) then {
				_pos = _worldspace select 1;
				_wsDone = true;
			}
		};	
		
		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));
		};
		
		_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
				};
			};
		};
		   	   
		// diag_log format["Server_monitor: [ObjectID = %1]  [ClassID = %2] [_ownerPUID = %3]", _idKey, _type, _ownerPUID];
		
		if (_damage < 1) then {
			//diag_log format["OBJ: %1 - %2", _idKey,_type];
			
			//Create it
			_object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"];
			_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 {
				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) then {
				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;
	};

	allowConnection = true;	
	sm_done = true;
	publicVariable "sm_done";
};

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
  • Advertisement
×
×
  • Create New...