Jump to content
  • 0

Help adding guns to vehicles (like biplanes) on Overwatch


DangerRuss

Question

I can't find help for this anywhere guys. I knew how to do it with my old server_monitor.sqf but that was outdated and not updating tent inventories. Ive looked at the epoch tutorial but the server_monitor.sqf is just too different. Any help on where to insert this block of code would be much appreciated. Thanks!

if (_entity isKindOf "AN2_DZ") then {
_entity addWeapon "DSHKM";
_entity addMagazine "50Rnd_127x107_DSHKM";
_entity addMagazine "50Rnd_127x107_DSHKM";
_entity addMagazine "50Rnd_127x107_DSHKM";

I know it needs to go somewhere after the magazine and weapon cargo clear but exactly where seems to be an issue.

Here's my server_monitor.sqf

private ["_date","_year","_month","_day","_hour","_minute","_date1","_hiveResponse","_key","_objectCount","_dir","_point","_i","_action","_dam","_selection","_wantExplosiveParts","_entity","_worldspace","_damage","_booleans","_rawData","_ObjectID","_class","_CharacterID","_inventory","_hitpoints","_fuel","_id","_objectArray","_script","_result","_outcome"];
[]execVM "\z\addons\dayz_server\system\s_fps.sqf"; //server monitor FPS (writes each ~181s diag_fps+181s diag_fpsmin*)
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"

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

waitUntil{initialized}; //means all the functions are now defined

diag_log "HIVE: Starting";

//Set the Time
	//Send request
	_key = "CHILD:307:";
	_result = _key call server_hiveReadWrite;
	_outcome = _result select 0;
	if(_outcome == "PASS") then {
		_date = _result select 1;

		//date setup
		_year = _date select 0;
		_month = _date select 1;
		_day = _date select 2;
		_hour = _date select 3;
		_minute = _date select 4;

		//Force full moon nights
		_date1 = [2013,8,3,_hour,_minute];

		if(isDedicated) then {
			//["dayzSetDate",_date] call broadcastRpcCallAll;
			setDate _date1;
			dayzSetDate = _date1;
			dayz_storeTimeDate = _date1;
			publicVariable "dayzSetDate";
		};
		diag_log ("HIVE: Local Time set to " + str(_date1));
	};

waituntil{isNil "sm_done"}; // prevent server_monitor be called twice (bug during login of the first player)

if (isServer and isNil "sm_done") then {
	
	//Stream in objects
	/* STREAM OBJECTS */
		//Send the key
		_key = format["CHILD:302:%1:",dayZ_instance];
		_result = _key call server_hiveReadWrite;

		diag_log "HIVE: Request sent";

		//Process result
		_status = _result select 0;

		_myArray = [];
		if (_status == "ObjectStreamStart") then {
			_val = _result select 1;
			//Stream Objects
			diag_log ("HIVE: Commence Object Streaming...");
			for "_i" from 1 to _val do {
				_result = _key call server_hiveReadWrite;

				_status = _result select 0;
				_myArray set [count _myArray,_result];
				//diag_log ("HIVE: Loop ");
			};
			diag_log ("HIVE: Streamed " + str(_val) + " objects");
		};

		_countr = 0;		
		{

			//Parse Array
			_countr = _countr + 1;
			
			_action = 		_x select 0; 
			_idKey = 		_x select 1;
			_type =			if ((typeName (_x select 2)) == "STRING") then { _x select 2 };
			_ownerID = 		_x select 3;
			_worldspace = 	if ((typeName (_x select 4)) == "ARRAY") then { _x select 4 } else { [] };
			_inventory =	if ((typeName (_x select 5)) == "ARRAY") then { _x select 5 } else { [] };
			_hitPoints =	if ((typeName (_x select 6)) == "ARRAY") then { _x select 6 } else { [] };
			_fuel =			if ((typeName (_x select 7)) == "SCALAR") then { _x select 7 } else { 0 };
			_damage = 		if ((typeName (_x select 8)) == "SCALAR") then { _x select 8 } else { 0.9 };
			
			_dir = floor(random(360));
			_pos = getMarkerpos "respawn_west";	
			_wsDone = false;
			
			if (count _worldspace >= 1 && {(typeName (_worldspace select 0)) == "SCALAR"}) then { 
				_dir = _worldspace select 0;
			};
			if (count _worldspace == 2 && {(typeName (_worldspace select 1)) == "ARRAY"}) then { 
				_i = _worldspace select 1;
				if (count _i == 3 &&
					{(typeName (_i select 0)) == "SCALAR"} && 
					{(typeName (_i select 1)) == "SCALAR"} &&
					{(typeName (_i select 2)) == "SCALAR"}) then {
					_pos = _i;
					_wsDone = true;					
				};
			};
			if (!_wsDone) then {
				_pos = [getMarkerPos "center",0,30,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,%3,%4,%5,%6,%7,%8", _idKey,_type,_ownerID,_worldspace,_inventory,_hitPoints,_fuel,_damage];
        
                 dayz_nonCollide = ["DomeTentStorage","TentStorage","CamoNet_DZ"];
        
                 //Create it
                 _object = createVehicle [_type, _pos, [], 0, if (_type in dayz_nonCollide) then {"NONE"} else {"CAN_COLLIDE"}];
                 _object setVariable ["lastUpdate",time];
                 // Don't set objects for deployables to ensure proper inventory updates
                 if (_ownerID == "0") then {
                     _object setVariable ["ObjectID", str(_idKey), true];
                 } else {
                     _object setVariable ["ObjectUID", _worldspace call dayz_objectUID2, true];
                 };
                 _object setVariable ["CharacterID", _ownerID, true];
        
                 _object setdir _dir;
                 _object setDamage _damage;
				
				//Dont add inventory for traps.
				if (!(_object isKindOf "TrapItems")) then {
					_cargo = _inventory;
					clearWeaponCargoGlobal  _object;
					clearMagazineCargoGlobal  _object;
					clearBackpackCargoGlobal  _object;	 
					_config = ["CfgWeapons", "CfgMagazines", "CfgVehicles" ];
					{
						_magItemTypes = _x select 0;
						_magItemQtys = _x select 1;
						_i = _forEachIndex;
						{    
							if (_x == "Crossbow") then { _x = "Crossbow_DZ" }; // Convert Crossbow to Crossbow_DZ
							if (_x == "BoltSteel") then { _x = "WoodenArrow" }; // Convert BoltSteel to WoodenArrow
							// Convert to DayZ Weapons
							if (_x == "DMR") then { _x = "DMR_DZ" };
							//if (_x == "M14_EP1") then { _x = "M14_DZ" };
							if (_x == "SVD") then { _x = "SVD_DZ" }; 
							if (_x == "SVD_CAMO") then { _x = "SVD_CAMO_DZ" };
							if (isClass(configFile >> (_config select _i) >> _x) &&
								getNumber(configFile >> (_config select _i) >> _x >> "stopThis") != 1) then {
								if (_forEachIndex < count _magItemQtys) then {
									switch (_i) do {
										case 0: { _object addWeaponCargoGlobal [_x,(_magItemQtys select _forEachIndex)]; }; 
										case 1: { _object addMagazineCargoGlobal [_x,(_magItemQtys select _forEachIndex)]; }; 
										case 2: { _object addBackpackCargoGlobal [_x,(_magItemQtys select _forEachIndex)]; }; 
									};
								};
							};
						} forEach _magItemTypes;
					} forEach _cargo;
				};
								
				} else { 
					if (_type in SafeObjects) then {
						if (_object isKindOf "TentStorage" || _object isKindOf "CamoNet_DZ" || _object isKindOf "Land_A_tent") then {
							//_booleans=[];
							//_pos = [_type, _pos, _booleans] call fn_niceSpot;
							_pos set [2,0];
							_object setPosATL _pos;
							_object addMPEventHandler ["MPKilled",{_this call vehicle_handleServerKilled;}];
						};
												
						if (_object isKindOf "TrapItems") then {
							_object setVariable ["armed", _inventory select 0, false];
						};
					} else {
						_damage = 1;
						_object setDamage _damage;
						diag_log format["OBJ: %1 - %2 REMOVED", _object,_damage];
					};
			
			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 fnc_veh_setFixServer;
					} forEach _hitpoints;
					_object setvelocity [0,0,1];
					_object setFuel _fuel;
					_object call fnc_veh_ResetEH;
					
				};
				
				//Monitor the object
				//_object enableSimulation false;
				dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object];
			};
			sleep 0.01;
		} forEach _myArray;

	// # END OF STREAMING #

	createCenter civilian;
	if (isDedicated) then {
		endLoadingScreen;
	};
/*
	if (isDedicated) then {
		_id = [] execFSM "\z\addons\dayz_server\system\server_cleanup.fsm";
	};
*/

[] ExecVM "\z\addons\dayz_server\DZMS\DZMSInit.sqf";
	allowConnection = true;
	
	// antiwallhack
	call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\fa_antiwallhack.sqf";
	
	sm_done = true;
	publicVariable "sm_done";
	
	dayz_Crashspawner = [] spawn {
		// [_guaranteedLoot, _randomizedLoot, spawnOnStart, _frequency, _variance, _spawnChance, _spawnMarker, _spawnRadius, _spawnFire, _fadeFire]
		[3, 4, 3, (40 * 60), (15 * 60), 0.75, 'center', 4000, true, false] call server_spawnCrashSite;
	};
	
	//Spawn camps
	dayz_Campspawner = [] spawn {
		// quantity, marker, radius, min distance between 2 camps
		Server_InfectedCamps = [3, "center", 4500, 2000] call fn_bases;
		dayzInfectedCamps = Server_InfectedCamps;
		publicVariable "dayzInfectedCamps";
	};
	
	dayz_Plantspawner = [] spawn {
		[300] call server_plantSpawner;
	};

	//if (isDedicated) then {
	//Wild Zeds Ownership isnt working as expected yet
	//	execFSM "\z\addons\dayz_server\system\zombie_wildagent.fsm";
	//};
	
	// Trap loop
	[] spawn {
		private ["_array","_array2","_array3","_script","_armed"];
		_array = str dayz_traps;
		_array2 = str dayz_traps_active;
		_array3 = str dayz_traps_trigger;

		while { true } do {
			if ((str dayz_traps != _array) || (str dayz_traps_active != _array2) || (str dayz_traps_trigger != _array3)) then {
				_array = str dayz_traps;
				_array2 = str dayz_traps_active;
				_array3 = str dayz_traps_trigger;

				diag_log "DEBUG: traps";
				diag_log format["dayz_traps (%2) -> %1", dayz_traps, count dayz_traps];
				diag_log format["dayz_traps_active (%2) -> %1", dayz_traps_active, count dayz_traps_active];
				diag_log format["dayz_traps_trigger (%2) -> %1", dayz_traps_trigger, count dayz_traps_trigger];
				diag_log "DEBUG: end traps";
			};

			{
				if (isNull _x) then {
					dayz_traps = dayz_traps - [_x];
				};

				_script = call compile getText (configFile >> "CfgVehicles" >> typeOf _x >> "script");
				_armed = _x getVariable ["armed", false];

				if (_armed) then {
					if !(_x in dayz_traps_active) then {
						["arm", _x] call _script;
					};
				} else {
					if (_x in dayz_traps_active) then {
						["disarm", _x] call _script;
					};
				};

				//sleep 0.01;
			} forEach dayz_traps;
		};
	};
};
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

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
  • Discord

×
×
  • Create New...