Jump to content
  • 0

Minor issues after installing P4L and Zupa's Door/Plot Management


illclint

Question

First off I'll admit I'm far from skilled when it comes to code and scripting, but I can understand basic file/folder structure. 
 
After about an hour or two with winmerge I managed to get P4L working, so I added in Zupa's Plot Management and Door Management. Tested it on my home server with no obvious issues, so I pushed it live for more players to test. 
 
 
P4L required replacing the player_unlockVault and player_lockVault that were modified in Zupa's SC 3.0 script, so I merged those changes over the P4L's versions of those files. After that had no reported issues of loss of coins from safes. But after adding in Plot Management and Door Management player's are reporting safes being emptied and coins lost (which I have confirmed) and I cannot build on a plot that I'm granted permission to, although I can "manage" the pole. So I looked into those files and couldn't see anything obvious. Read that it might be changes made in server_updateObject (which there were a handful of), but again couldn't see any errors. Went back through the steps again and couldn't find anything. 
 
Only RPT errors are these:
 
12:05:54 "DayZ Epoch: PRELOAD Functions\init [[<No group>:0 (FunctionsManager)],any]"
//above has always happened, never had any issues. not sure what it's pointing to
12:05:37 Server error: Player without identity player (id xxxxxxxxx)
//always happens ~10 times when someone logs in on server startup, never been an issue
12:13:16 Error: Bone leftshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone rightshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone rightshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone leftshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone rightshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone leftshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone rightshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone leftshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone rightshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone leftshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone rightshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone leftshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone leftshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone rightshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone leftshoulder doesn't exist in some skeleton 
12:13:16 Error: Bone rightshoulder doesn't exist in some skeleton 
//no idea but i'm sure it's unrelated
12:19:50 Server: Object 4:65 not found (message 70)
12:19:50 Server: Object 4:51 not found (message 94)
12:19:50 Server: Object 4:52 not found (message 94)
12:19:50 Server: Object 4:53 not found (message 94)
12:19:50 Server: Object 4:54 not found (message 94)
12:19:50 Server: Object 4:55 not found (message 94)
12:19:50 Server: Object 4:56 not found (message 94)
12:19:50 Server: Object 4:57 not found (message 94)
//spams RPT occasionally, believe it's related to WAI, not sure. 

Here are any relevant files:

compiles.sqf: http://pastebin.com/3sZUqaGg

server_updateObject.sqf: http://pastebin.com/5LNu1s0w

player_lockVault.sqf: http://pastebin.com/GXYbrCAd

player_unlockVault.sqf: http://pastebin.com/iYUkcRnf

Any help is appreciated. Where to look, any obvious issues you see, any relevant threads; whatever. I've searched around but haven't found anything specific to my issue other than ancient threads in regards to old epoch bugs. 

Thanks dudes!


 

 
 
 
Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0

It's possible. Here's a copy of my player_build from the live server:

Maybe I can spot it in here, looking at n++ gives me an instead headache at this point, haha. I'm pretty sure it's unrelated to single currency, but it's possible that my modifications to P4L's vault files cause something, but I'm leaning towards plot management since it was last to be added and that's when the issues arose. I'll try and download a copy of my life server on a restart to test some more on the home server, but it's hard to with the increasing pop. 

 

/*
	DayZ Base Building
	Made for DayZ Epoch please ask permission to use/edit/distrubute email [email protected].
*/
private ["_location","_dir","_classname","_item","_hasrequireditem","_missing","_hastoolweapon","_cancel","_reason","_started","_finished","_animState","_isMedic","_dis","_sfx","_hasbuilditem","_tmpbuilt","_onLadder","_isWater","_require","_text","_offset","_IsNearPlot","_isOk","_location1","_location2","_counter","_limit","_proceed","_num_removed","_position","_object","_canBuildOnPlot","_friendlies","_nearestPole","_ownerID","_findNearestPoles","_findNearestPole","_distance","_classnametmp","_ghost","_isPole","_needText","_lockable","_zheightchanged","_rotate","_combination_1","_combination_2","_combination_3","_combination_4","_combination","_combination_1_Display","_combinationDisplay","_zheightdirection","_abort","_isNear","_need","_needNear","_vehicle","_inVehicle","_requireplot","_objHDiff","_isLandFireDZ","_isTankTrap","_playerID", "_playerUID","_ownerID","_buildcheck","_isowner","_isfriendly","_maxBuildDistance","_vector","_buildOffset","_vUp"];

if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_40") , "PLAIN DOWN"]; };
DZE_ActionInProgress = true;

// disallow building if too many objects are found within 30m
if((count (([player] call FNC_GetPos) nearObjects ["All",DZE_PlotPole select 0])) >= DZE_BuildingLimit) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_41"), "PLAIN DOWN"];};

_onLadder =		(getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_isWater = 		dayz_isSwimming;
_cancel = false;
_reason = "";
_canBuildOnPlot = false;

_vehicle = vehicle player;
_inVehicle = (_vehicle != player);

_playerUID = [player] call FNC_GetPlayerUID;

if (DZE_APlotforLife) then {
	_playerID = [player] call FNC_GetPlayerUID;
}else{
	_playerID = dayz_characterID;
};

DZE_Q = false;
DZE_Z = false;

DZE_Q_alt = false;
DZE_Z_alt = false;

DZE_Q_ctrl = false;
DZE_Z_ctrl = false;

DZE_5 = false;
DZE_4 = false;
DZE_6 = false;

DZE_cancelBuilding = false;

DZE_updateVec = false;
DZE_memDir = 0;
DZE_memForBack = 0;
DZE_memLeftRight = 0;

call gear_ui_init;
closeDialog 1;

if (_isWater) exitWith {DZE_ActionInProgress = false; cutText [localize "str_player_26", "PLAIN DOWN"];};
if (_inVehicle) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_42"), "PLAIN DOWN"];};
if (_onLadder) exitWith {DZE_ActionInProgress = false; cutText [localize "str_player_21", "PLAIN DOWN"];};
if (player getVariable["combattimeout", 0] >= time) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_43"), "PLAIN DOWN"];};

_item =	_this;

// Need Near Requirements
_abort = false;
_reason = "";

_needNear = 	getArray (configFile >> "CfgMagazines" >> _item >> "ItemActions" >> "Build" >> "neednearby");

{
	switch(_x) do{
		case "fire":
		{
			_distance = 3;
			_isNear = {inflamed _x} count (([player] call FNC_GetPos) nearObjects _distance);
			if(_isNear == 0) then {
				_abort = true;
				_reason = "fire";
			};
		};
		case "workshop":
		{
			_distance = 3;
			_isNear = count (nearestObjects [player, ["Wooden_shed_DZ","WoodShack_DZ","WorkBench_DZ"], _distance]);
			if(_isNear == 0) then {
				_abort = true;
				_reason = "workshop";
			};
		};
		case "fueltank":
		{
			_distance = 30;
			_isNear = count (nearestObjects [player, dayz_fuelsources, _distance]);
			if(_isNear == 0) then {
				_abort = true;
				_reason = "fuel tank";
			};
		};
	};
} forEach _needNear;


if(_abort) exitWith {
	cutText [format[(localize "str_epoch_player_135"),_reason,_distance], "PLAIN DOWN"];
	DZE_ActionInProgress = false;
};

_classname = 	getText (configFile >> "CfgMagazines" >> _item >> "ItemActions" >> "Build" >> "create");
_classnametmp = _classname;
_require =  getArray (configFile >> "cfgMagazines" >> _this >> "ItemActions" >> "Build" >> "require");
_text = 		getText (configFile >> "CfgVehicles" >> _classname >> "displayName");
_ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview");

_lockable = 0;
if(isNumber (configFile >> "CfgVehicles" >> _classname >> "lockable")) then {
	_lockable = getNumber(configFile >> "CfgVehicles" >> _classname >> "lockable");
};

_requireplot = DZE_requireplot;
if(isNumber (configFile >> "CfgVehicles" >> _classname >> "requireplot")) then {
	_requireplot = getNumber(configFile >> "CfgVehicles" >> _classname >> "requireplot");
};

if (_requireplot == 0) then{_requireplot = false}else{_requireplot = true};

_isAllowedUnderGround = 1;
if(isNumber (configFile >> "CfgVehicles" >> _classname >> "nounderground")) then {
	_isAllowedUnderGround = getNumber(configFile >> "CfgVehicles" >> _classname >> "nounderground");
};

_offset = 	getArray (configFile >> "CfgVehicles" >> _classname >> "offset");
if((count _offset) <= 0) then {
	_offset = [0,1.5,0];
};

_isPole = (_classname == "Plastic_Pole_EP1_DZ");
_isLandFireDZ = (_classname == "Land_Fire_DZ");

_distance = DZE_PlotPole select 0;
_needText = localize "str_epoch_player_246";

if(_isPole) then {
	_distance = DZE_PlotPole select 1;
};

// check for near plot
_findNearestPoles = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], _distance];
_findNearestPole = [];

{
	if (alive _x) then {
		_findNearestPole set [(count _findNearestPole),_x];
	};
} count _findNearestPoles;

_IsNearPlot = count (_findNearestPole);

// If item is plot pole && another one exists within 45m
if(_isPole && _IsNearPlot > 0) exitWith {  DZE_ActionInProgress = false; cutText [(format [localize "str_epoch_player_44", DZE_PlotPole select 1]) , "PLAIN DOWN"]; };

if(_IsNearPlot == 0) then {

	// Allow building of plotpole or items not requiring a plot pole
	if(!(_requireplot) || _isLandFireDZ) then {
		_canBuildOnPlot = true;
	};

} else {
	// Since there are plot poles nearby we need to check ownership && friend status

	// check nearest pole only
	_nearestPole = _findNearestPole select 0;

	_buildcheck = [player, _nearestPole] call FNC_check_owner;
	_isowner = _buildcheck select 0;
	_isfriendly = _buildcheck select 1;
	if ((_isowner) || (_isfriendly)) then {
		_canBuildOnPlot = true;
	};
};

// _message
if(!_canBuildOnPlot) exitWith {  DZE_ActionInProgress = false; cutText [format[(localize "STR_EPOCH_PLAYER_135"),_needText,_distance] , "PLAIN DOWN"]; };

_missing = "";
_hasrequireditem = true;
{
	_hastoolweapon = _x in weapons player;
	if(!_hastoolweapon) exitWith { _hasrequireditem = false; _missing = getText (configFile >> "cfgWeapons" >> _x >> "displayName"); };
} count _require;

_hasbuilditem = _this in magazines player;
if (!_hasbuilditem) exitWith {DZE_ActionInProgress = false; cutText [format[(localize "str_player_31"),_text,"build"] , "PLAIN DOWN"]; };

if (!_hasrequireditem) exitWith {DZE_ActionInProgress = false; cutText [format[(localize "str_epoch_player_137"),_missing] , "PLAIN DOWN"]; };
if (_hasrequireditem) then {

	_location = [0,0,0];
	_isOk = true;

	// get initial players position & set max build range origin.
	if ((DZE_BuildInPlotRadius) && (_requireplot)) then{
		_location1 = [_nearestPole] call FNC_GetPos;
		_maxBuildDistance = _Distance / 2;
		diag_log text "Pole initial location.";
	}else{
		_location1 = [player] call FNC_GetPos;
		_maxBuildDistance = 5;
		diag_log text "Player initial location.";
	};
	
	diag_log format["[Player_Build] _location1 = %1, _maxBuildDistance = %2, DZE_BuildInPlotRadius = %3, _requireplot = %4",_location1, _maxBuildDistance, DZE_BuildInPlotRadius, _requireplot];
	
	_dir = getDir player;

	// if ghost preview available use that instead
	if (_ghost != "") then {
		_classname = _ghost;
	};

	_object = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];

	_object attachTo [player,_offset];

	_position = [_object] call FNC_GetPos;

	cutText [(localize "str_epoch_player_45"), "PLAIN DOWN"];

	_objHDiff = 0;

	if !(_item in DZE_noRotate) then{
		["","","",["Init","Init",0]] spawn build_vectors;
	};
	
	while {_isOk} do {

		_zheightchanged = false;
		_zheightdirection = "";
		_rotate = false;

		if (DZE_Q) then {
			DZE_Q = false;
			_zheightdirection = "up";
			_zheightchanged = true;
		};
		if (DZE_Z) then {
			DZE_Z = false;
			_zheightdirection = "down";
			_zheightchanged = true;
		};
		if (DZE_Q_alt) then {
			DZE_Q_alt = false;
			_zheightdirection = "up_alt";
			_zheightchanged = true;
		};
		if (DZE_Z_alt) then {
			DZE_Z_alt = false;
			_zheightdirection = "down_alt";
			_zheightchanged = true;
		};
		if (DZE_Q_ctrl) then {
			DZE_Q_ctrl = false;
			_zheightdirection = "up_ctrl";
			_zheightchanged = true;
		};
		if (DZE_Z_ctrl) then {
			DZE_Z_ctrl = false;
			_zheightdirection = "down_ctrl";
			_zheightchanged = true;
		};
		if (DZE_4) then {
			_rotate = true;
			DZE_4 = false;
			if(DZE_dirWithDegrees) then{
				DZE_memDir = DZE_memDir - DZE_curDegree;
			}else{
				DZE_memDir = DZE_memDir - 45;
			};
		};
		if (DZE_6) then {
			_rotate = true;
			DZE_6 = false;
			if(DZE_dirWithDegrees) then{
				DZE_memDir = DZE_memDir + DZE_curDegree;
			}else{
				DZE_memDir = DZE_memDir + 45;
			};
		};
		
		if(DZE_updateVec) then{
			[_object,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
			DZE_updateVec = false;
		};

		if(_rotate) then {
			[_object,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
		};

		if(_zheightchanged) then {
			detach _object;

			_position = getPosATL _object;

			if(_zheightdirection == "up") then {
				_position set [2,((_position select 2)+0.1)];
				_objHDiff = _objHDiff + 0.1;
			};
			if(_zheightdirection == "down") then {
				_position set [2,((_position select 2)-0.1)];
				_objHDiff = _objHDiff - 0.1;
			};

			if(_zheightdirection == "up_alt") then {
				_position set [2,((_position select 2)+1)];
				_objHDiff = _objHDiff + 1;
			};
			if(_zheightdirection == "down_alt") then {
				_position set [2,((_position select 2)-1)];
				_objHDiff = _objHDiff - 1;
			};

			if(_zheightdirection == "up_ctrl") then {
				_position set [2,((_position select 2)+0.01)];
				_objHDiff = _objHDiff + 0.01;
			};
			if(_zheightdirection == "down_ctrl") then {
				_position set [2,((_position select 2)-0.01)];
				_objHDiff = _objHDiff - 0.01;
			};

			_object setDir (getDir _object);

			if((_isAllowedUnderGround == 0) && ((_position select 2) < 0)) then {
				_position set [2,0];
			};

			_object setPosATL _position;

			//diag_log format["DEBUG Change BUILDING POS: %1", _position];

			_object attachTo [player];
			
			[_object,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;

		};

		sleep 0.5;

		_location2 = getPosATL player;

		if(DZE_5) exitWith {
			_isOk = false;
			detach _object;
			_dir = getDir _object;
			_vector = [(vectorDir _object),(vectorUp _object)];	
			_position = getPosATL _object;
			//diag_log format["DEBUG BUILDING POS: %1", _position];
			deleteVehicle _object;
		};

		if(_location1 distance _location2 > 5) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = "You've moved to far away from where you started building (within 5 meters)";
			detach _object;
			deleteVehicle _object;
		};

		if(abs(_objHDiff) > 5) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = "Cannot move up or down more than 5 meters";
			detach _object;
			deleteVehicle _object;
		};

		if (player getVariable["combattimeout", 0] >= time) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = (localize "str_epoch_player_43");
			detach _object;
			deleteVehicle _object;
		};

		if (DZE_cancelBuilding) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = "Cancelled building.";
			detach _object;
			deleteVehicle _object;
		};
	};

	//No building on roads unless toggled
	if (!DZE_BuildOnRoads) then {
		if (isOnRoad _position) then { _cancel = true; _reason = "Cannot build on a road."; };
	};

	// No building in trader zones
	if(!canbuild) then { _cancel = true; _reason = "Cannot build in a city."; };
	
	if ((DZE_BuildOnGround) && !(_requireplot)) then{
		_toohigh = false;
		if (_ispole) then{
			if ((_position select 2) > DZE_MaxPlotHeight) then{_toohigh = true};
		}else{
			if ((_position select 2) > DZE_MaxNoPlotNeededHeight) then{_toohigh = true};
		};
		if (_toohigh) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = "This item must be built at ground level.";
			detach _object;
			deleteVehicle _object;
		};
	};

	if(!_cancel) then {

		_classname = _classnametmp;

		// Start Build
		_tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];

		_tmpbuilt setdir _dir;

		// Get position based on object
		_location = _position;

		if((_isAllowedUnderGround == 0) && ((_location select 2) < 0)) then {
			_location set [2,0];
		};

		_tmpbuilt setVectorDirAndUp _vector;
	
		_buildOffset = [0,0,0];
		_vUp = _vector select 1;
		switch (_classname) do {
			case "MetalFloor_DZ": { _buildOffset = [(_vUp select 0) * .148, (_vUp select 1) * .148,0]; };
		};
		
		_location = [
			(_location select 0) - (_buildOffset select 0),
			(_location select 1) - (_buildOffset select 1),
			(_location select 2) - (_buildOffset select 2)
		];
		
		if (surfaceIsWater _location) then {
			_tmpbuilt setPosASL _location;
			_location = ASLtoATL _location; //Database uses ATL
		} else {
			_tmpbuilt setPosATL _location;
		};

		cutText [format[(localize "str_epoch_player_138"),_text], "PLAIN DOWN"];

		_limit = 3;

		if (DZE_StaticConstructionCount > 0) then {
			_limit = DZE_StaticConstructionCount;
		}
		else {
			if (isNumber (configFile >> "CfgVehicles" >> _classname >> "constructioncount")) then {
				_limit = getNumber(configFile >> "CfgVehicles" >> _classname >> "constructioncount");
			};
		};

		_isOk = true;
		_proceed = false;
		_counter = 0;

		while {_isOk} do {

			[10,10] call dayz_HungerThirst;
			player playActionNow "Medic";

			_dis=20;
			_sfx = "repair";
			[player,_sfx,0,false,_dis] call dayz_zombieSpeak;
			[player,_dis,true,([player] call FNC_GetPos)] spawn player_alertZombies;

			r_interrupt = false;
			r_doLoop = true;
			_started = false;
			_finished = false;

			while {r_doLoop} do {
				_animState = animationState player;
				_isMedic = ["medic",_animState] call fnc_inString;
				if (_isMedic) then {
					_started = true;
				};
				if (_started && !_isMedic) then {
					r_doLoop = false;
					_finished = true;
				};
				if (r_interrupt || (player getVariable["combattimeout", 0] >= time)) then {
					r_doLoop = false;
				};
				if (DZE_cancelBuilding) exitWith {
					r_doLoop = false;
				};
				sleep 0.1;
			};
			r_doLoop = false;


			if(!_finished) exitWith {
				_isOk = false;
				_proceed = false;
			};

			if(_finished) then {
				_counter = _counter + 1;
			};

			cutText [format[(localize "str_epoch_player_139"),_text, _counter,_limit], "PLAIN DOWN"];

			if(_counter == _limit) exitWith {
				_isOk = false;
				_proceed = true;
			};

		};

		if (_proceed) then {

			_num_removed = ([player,_item] call BIS_fnc_invRemove);
			if(_num_removed == 1) then {

				cutText [format[localize "str_build_01",_text], "PLAIN DOWN"];

				if (_isPole) then {
					[] spawn player_plotPreview;
				};

				_tmpbuilt setVariable ["OEMPos",_location,true];

				if(_lockable > 1) then {

					_combinationDisplay = "";

					switch (_lockable) do {

						case 2: { // 2 lockbox
							_combination_1 = (floor(random 3)) + 100; // 100=red,101=green,102=blue
							_combination_2 = floor(random 10);
							_combination_3 = floor(random 10);
							_combination = format["%1%2%3",_combination_1,_combination_2,_combination_3];
							dayz_combination = _combination;
							if (_combination_1 == 100) then {
								_combination_1_Display = "Red";
							};
							if (_combination_1 == 101) then {
								_combination_1_Display = "Green";
							};
							if (_combination_1 == 102) then {
								_combination_1_Display = "Blue";
							};
							_combinationDisplay = format["%1%2%3",_combination_1_Display,_combination_2,_combination_3];
						};

						case 3: { // 3 combolock
							_combination_1 = floor(random 10);
							_combination_2 = floor(random 10);
							_combination_3 = floor(random 10);
							_combination = format["%1%2%3",_combination_1,_combination_2,_combination_3];
							dayz_combination = _combination;
							_combinationDisplay = _combination;
						};

						case 4: { // 4 safe
							_combination_1 = floor(random 10);
							_combination_2 = floor(random 10);
							_combination_3 = floor(random 10);
							_combination_4 = floor(random 10);
							_combination = format["%1%2%3%4",_combination_1,_combination_2,_combination_3,_combination_4];
							dayz_combination = _combination;
							_combinationDisplay = _combination;
						};
					};

					_tmpbuilt setVariable ["CharacterID",_combination,true];
					_tmpbuilt setVariable ["ownerPUID",_playerID,true];

					PVDZE_obj_Publish = [_combination,_tmpbuilt,[_dir,_location,_playerUID,_vector],_classname];
					publicVariableServer "PVDZE_obj_Publish";

					cutText [format[(localize "str_epoch_player_140"),_combinationDisplay,_text], "PLAIN DOWN", 5];
                    systemChat format [(localize "str_epoch_player_140"),_combinationDisplay,_text];

				} else {
					_tmpbuilt setVariable ["CharacterID",dayz_characterID,true];
					_tmpbuilt setVariable ["ownerPUID",_playerID,true];
					
					// fire?
					if(_tmpbuilt isKindOf "Land_Fire_DZ") then {
						_tmpbuilt spawn player_fireMonitor;
					} else {
						PVDZE_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,_playerUID,_vector],_classname];
						publicVariableServer "PVDZE_obj_Publish";
					};
				};
			} else {
				deleteVehicle _tmpbuilt;
				cutText [(localize "str_epoch_player_46") , "PLAIN DOWN"];
			};

		} else {
			r_interrupt = false;
			if (vehicle player == player) then {
				[objNull, player, rSwitchMove,""] call RE;
				player playActionNow "stop";
			};

			deleteVehicle _tmpbuilt;

			cutText [(localize "str_epoch_player_46") , "PLAIN DOWN"];
		};

	} else {
		cutText [format[(localize "str_epoch_player_47"),_text,_reason], "PLAIN DOWN"];
	};
};

DZE_ActionInProgress = false;

Link to comment
Share on other sites

  • 0

Update: vehicles are no longer saving positions either. Thought this was related to a script that would remove vehicles from the trader and TP them elsewhere on the map, but that has since been removed and the problem persist. Replaced the server_updateObject with a known working one and reapplied the changes. Will report back if I find anything else out in the meantime. 

Edit: they seem to revert to wherever they were purchased or last updated in DB. I obviously broke something when adding management, but can't figure it out. Trying to pull plot management, will update again.

Link to comment
Share on other sites

  • 0

Yeah, I get "unable to upgrade, plotpole nearby" whenever I'm tagged as friendly or added to the plotpole with plotmanagement. Door management works without any issues, but plot management is the one causing the issues. I'm wondering if it's just not compatible with AP4L 2.35 or if I'm just bad. The changes called for in player_build is throwing me off as this line doesn't even exist:

 

_friendlies     = player getVariable ["friendlyTo",[]];
// check if friendly to owner
if(_ownerID in _friendlies) then {
    _canBuildOnPlot = true;
};

And why these changes are breaking my server_updateObject:

 

if (typeOf (_object) == "Plastic_Pole_EP1_DZ") then{
    _inventory = _object getVariable ["plotfriends", []]; //We're replacing the inventory with UIDs for this item
} else {
    _inventory = [
    getWeaponCargo _object,
    getMagazineCargo _object,
    getBackpackCargo _object
    ];
};
Link to comment
Share on other sites

  • 0

"unable to upgrade" does nothing has to do with player_build

 

its player_upgrade.sqf

this line here kicks you out of the script:

if(!_canBuildOnPlot) exitWith {  DZE_ActionInProgress = false; cutText [format[(localize "str_epoch_player_157"),_needText,_distance] , "PLAIN DOWN"]; };

So are you not able to upgrade or build?

Link to comment
Share on other sites

  • 0

Neither. I've updated my player_buildingDowngrade, player_build_plotCheck and player_upgrade. Also the update_object server file is stable on my test server right now, so I'm going to push them, test and I'll report back with any changes. 

Thanks for your help so far by the way. 

Edit: objects seem to be updating. Will test changes to player build files ASAP. Not sure what I did, but I blame lack of sleep. 

Edit 2: Can build too. I must have missed something, but going back through it and it all works now. Although I seem to be able to build on someone else's plot now..

Can't upgrade or remove items on someone's plot, but I can build. Don't think there's anything in any of my admin tools that's allowing that. 
 

Link to comment
Share on other sites

  • 0

Found these errors in client rpt today:

 

Error in expression <en {
_canBuildOnPlot = true;
};  
};
};
};

_passArray = [_IsNearPlot,_nearestPo>
  Error position: <};

_passArray = [_IsNearPlot,_nearestPo>
  Error Missing {
File mpmissions\__CUR_MP.Chernarus\Custom\A_Plot_for_Life\Action\player_build_plotCheck.sqf, line 75
Error in expression <en {
_canBuildOnPlot = true;
};  
};
};
};

_passArray = [_IsNearPlot,_nearestPo>
  Error position: <};

_passArray = [_IsNearPlot,_nearestPo>
  Error Missing {
File mpmissions\__CUR_MP.Chernarus\Custom\A_Plot_for_Life\Action\player_build_plotCheck.sqf, line 75

Here's that block of code from that file:

 

	// check if friendly to owner
	if(_playerUID == _ownerID) then {  //Keep ownership
		// owner can build anything within his plot except other plots
		if(!_isPole) then {
			_canBuildOnPlot = true;
		};
	} else {
		// disallow building plot
		_friendlies = _nearestPole getVariable ["plotfriends",[]];
		_fuid  = [];
	{
		_friendUID = _x select 0;
		_fuid  =  _fuid  + [_friendUID];
	} forEach _friendlies;
		_builder  = getPlayerUID player;
		// check if friendly to owner
	if(_builder in _fuid) then {
		_canBuildOnPlot = true;
			};  
		};
	};
};

I feel like the error should be painfully obvious, but I'm not seeing it. 

More RPT spam:

 

if ((_rplayerUID in _friendlies) && (_playerU>
  Error position: <_rplayerUID in _friendlies) && (_playerU>
  Error Undefined variable in expression: _rplayeruid
File mpmissions\__CUR_MP.Chernarus\Custom\player_updateGui.sqf, line 188
Error in expression <t getVariable ["friendlyTo", []];

if ((_rplayerUID in _friendlies) && (_playerU>
  Error position: <_rplayerUID in _friendlies) && (_playerU>
  Error Undefined variable in expression: _rplayeruid
File mpmissions\__CUR_MP.Chernarus\Custom\player_updateGui.sqf, line 188
Error in expression <t getVariable ["friendlyTo", []];

if ((_rplayerUID in _friendlies) && (_playerU>
  Error position: <_rplayerUID in _friendlies) && (_playerU>
  Error Undefined variable in expression: _rplayeruid
File mpmissions\__CUR_MP.Chernarus\Custom\player_updateGui.sqf, line 188
Error in expression <t getVariable ["friendlyTo", []];

if ((_rplayerUID in _friendlies) && (_playerU>
  Error position: <_rplayerUID in _friendlies) && (_playerU>
  Error Undefined variable in expression: _rplayeruid
File mpmissions\__CUR_MP.Chernarus\Custom\player_updateGui.sqf, line 188
Error in expression <t getVariable ["friendlyTo", []];

I'll dig through that file some and see if I can find anything obvious. Sorry if I'm spamming here, just helps to get everything out in front of me and maybe somebody can point out the obvious. 

Link to comment
Share on other sites

  • 0

I've resolved all of the issues with Plot Management, but I'm still getting the errors in my client RPT and sometimes my HUD disappears. Only seems to affect me. 

 

if ((_rplayerUID in _friendlies) && (_playerU>
  Error position: <_rplayerUID in _friendlies) && (_playerU>
  Error Undefined variable in expression: _rplayeruid
File mpmissions\__CUR_MP.Chernarus\Custom\player_updateGui.sqf, line 188
Error in expression <t getVariable ["friendlyTo", []];

Not sure where the undefined variable error is coming from. 

Link to comment
Share on other sites

  • 0

Check for the line that assignes a value to _rplayeruid.  Make sure it is not assigning a value to _rplayerid or something like that.

 

Undefined variable usually means

  • You are not defining the variable (wrong name typo or something).
  • The value you are putting in tot eh variable is nil (ie nothing) which causes the variavle to be deleted.

A diag_log line will show what you are trying to put in tot he variable if that is the issue and you can track back from there.

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

×
×
  • Create New...