Jump to content

[How To] [CPC] Indestructible Bases


ToejaM

Recommended Posts

  • 2 weeks later...

Guys, Ive really red the whole Thread but I cant get this running on epoch 1.0.4.2. After I trying to do Part1, everyone who want to connect stuck on "Waiting for Server to start Authentication".

 

I'm really new to this type of scripting.Would be nice If someone could tell me how to get this running.

 

Greetings

Link to comment
Share on other sites

I cannot get this to work for Part 1 Step 1 I cannot find them 2 lines that the Indestructible sit between. Can someone guide me?

Looks like the server_monitor.sqf has changed, at least with Dayz.St it has not sure about others so Part 1 is no longer applicable for the Array. If you want Indestructible bases all you need to do is add...

 

DZE_GodModeBase = true;

 

into your init.sqf.

Indestructible bases are now built into EPOCH. BUT, this is only after restart will they become indestructible.

Link to comment
Share on other sites

Looks like the server_monitor.sqf has changed, at least with Dayz.St it has not sure about others so Part 1 is no longer applicable for the Array. If you want Indestructible bases all you need to do is add...

 

DZE_GodModeBase = true;

 

into your init.sqf.

Indestructible bases are now built into EPOCH. BUT, this is only after restart will they become indestructible.

 

Would maintaining work with DZE_GodModeBase = True? And is it just Cinder?

Link to comment
Share on other sites

Im just trying to install the very first part (indestructible on restarts), and I must be inserting the code in the incorrect places. Server is getting stuck on authenticating. Here's my server_monitor

private ["_nul","_result","_pos","_wsDone","_dir","_block","_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"];
// []execVM "\z\addons\dayz_server\system\instaaction.sqf";

dayz_versionNo = 		getText(configFile >> "CfgMods" >> "DayZ" >> "version");
dayz_hiveVersionNo = 	getNumber(configFile >> "CfgMods" >> "DayZ" >> "hiveVersion");

    _script = getText(missionConfigFile >> "onPauseScript");
    // ### [CPC] Indestructible Buildables Fix
    _cpcimmune =[
    "WoodFloor_DZ",
    "WoodFloorHalf_DZ",
    "WoodFloorQuarter_DZ",
    "Land_DZE_LargeWoodDoorLocked",
    "WoodLargeWallDoor_DZ",
    "WoodLargeWallWin_DZ",
    "WoodLargeWall_DZ",
    "Land_DZE_WoodDoorLocked",
    "WoodSmallWallDoor_DZ",
    "WoodSmallWallWin_DZ",
    "Land_DZE_GarageWoodDoor",
    "Land_DZE_GarageWoodDoorLocked",
    "WoodLadder_DZ",
    "WoodStairsSans_DZ",
    "WoodStairs_DZ",
    "WoodSmallWall_DZ",
    "WoodSmallWallThird_DZ",
    "CinderWallHalf_DZ",
    "CinderWall_DZ",
    "CinderWallDoorway_DZ",
    "Land_DZE_LargeWoodDoor",
    "MetalFloor_DZ",
    "CinderWallDoorSmallLocked_DZ",
    "CinderWallSmallDoorway_DZ",
    "CinderWallDoor_DZ"
    ];
    // ### [CPC] Indestructible Buildables Fix
    if ((count playableUnits == 0) and !isDedicated) then {

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 and 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 {
			diag_log ("HIVE: connection problem... HiveExt response:"+str(_hiveResponse));
			_hiveResponse = ["",0];
		} 
		else {
			diag_log ("HIVE: found "+str(_hiveResponse select 1)+" objects" );
			srvInstaId = _hiveResponse select 2;
			_i = 99; // break
		};
	};
	
	_BuildingQueue = [];
	_objectQueue = [];
	
	if ((_hiveResponse select 0) == "ObjectStreamStart") then {
		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;
			}
		};			
		
		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];

			_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;
                _object setpos _pos;
                _object setDamage _damage;
               // ### [CPC] Indestructible Buildables Fix
    if (typeOf(_object) in _cpcimmune) then {
                _object addEventHandler ["HandleDamage", {false}];
                _object enableSimulation false;
    };
    // ### [CPC] Indestructible Buildables Fix
	
			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 and 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)];
					_object setVariable ["MagazineCargo", (_intentory select 1)];
					_object setVariable ["BackpackCargo", (_intentory select 2)];
				} 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;
					} forEach _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;
					} forEach _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;
					} forEach _objWpnTypes;
				};
			};	
			
			if (_object isKindOf "AllVehicles") then {
				{
					_selection = _x select 0;
					_dam = _x select 1;
					if (_selection in dayZ_explosiveParts and _dam > 0.8) then {_dam = 0.8};
					[_object,_selection,_dam] call object_setFixServer;
				} forEach _hitpoints;

				_object setFuel _fuel;

				if (!((typeOf _object) in dayz_allowedObjects)) then {
					
					//_object setvelocity [0,0,1];
					_object call fnc_veh_ResetEH;		
					
					if(_ownerID != "0" and !(_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];
		};
	} forEach (_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;
	};

	//  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;
	};
[] ExecVM "\z\addons\dayz_server\DZMS\DZMSInit.sqf";
	allowConnection = true;

	// [_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];
	};

	sm_done = true;
	publicVariable "sm_done";
};

Where'd I go wrong?

 

After reading this entire thread, Ive come to the conclusion that this is something with the newest version of epoch... Gonna try adding

DZE_GodModeBase = true;

to my init.sqf

Link to comment
Share on other sites

Can someone tell me which step stops the item from becoming destructible once its upgraded?

Literally one line of code now.

DZE_GodModeBase = true;

Add that to your mission file's init.sqf where the other variables are defined, else it is off (false) by default in Epoch 1.0.4.2

Link to comment
Share on other sites

Alas that didn't work for me... that only kept them from being destroyed after the server restarted...

 

I have to make a custom player_upgrade.sqf in order ti disable the damagehandler.

 

If anyone needs my code just ask me...

Link to comment
Share on other sites

does it need this bit  

LINE 6      _script = getText(missionConfigFile >> "onPauseScript");
Line 36    if ((count playableUnits == 0) and !isDedicated) then {

or i just need this part

// ### [CPC] Indestructible Buildables Fix
_cpcimmune =[
"WoodFloor_DZ",
"WoodFloorHalf_DZ",
"WoodFloorQuarter_DZ",
"Land_DZE_LargeWoodDoorLocked",
yada yada... so on and so forth....al the way to the bottom of the list...
// ### [CPC] Indestructible Buildables Fix

http://pastebin.com/LeA1S9Ei    

 

thats what i got so far

Link to comment
Share on other sites

How can I install on Vilayer, when I tried I could not connect and my console was spammed with this:


diag_log format["server_monitor.sqf exec>
13:25:26 Error position: <diag_log format["server_monitor.sqf exec>
13:25:26 Error Missing ;
13:25:26 File z\addons\dayz_server\system\server_monitor.sqf, line 19
13:25:26 Error in expression <ver_initCount = server_initCount + 1;
}
Link to comment
Share on other sites

does it need this bit  

LINE 6      _script = getText(missionConfigFile >> "onPauseScript");
Line 36    if ((count playableUnits == 0) and !isDedicated) then {

or i just need this part

// ### [CPC] Indestructible Buildables Fix
_cpcimmune =[
"WoodFloor_DZ",
"WoodFloorHalf_DZ",
"WoodFloorQuarter_DZ",
"Land_DZE_LargeWoodDoorLocked",
yada yada... so on and so forth....al the way to the bottom of the list...
// ### [CPC] Indestructible Buildables Fix

http://pastebin.com/LeA1S9Ei    

 

thats what i got so far

 

 

If you are using latest Epoch, you can turn on DZE_BaseGodmode or whatever it is...

That will deal with the first step, and maintenance issues... but I had issues with when players upgrade cinder half to fulls they could be destroyed.. 

Link to comment
Share on other sites

So on my server.. cinder walls and such were snapping fine and staying striaght but then i added indestructible bases() followed the instructions for part 1 only...my server_monitor.sqf ended up looking like this http://pastebin.com/LeA1S9Ei ... it worked but after server restarts i started noticing that people's walls started shiting forwards and backwards little by little... is there something i did wrong..? does anyone know how i can possibly fix it? any help would be greatly appreciated

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...