Jump to content
  • 0

Undefined variables when they are being defined??


smexy

Question

Hello all, I'm trying to install  I am running into issues with undefined variables everywhere.  I have followed the instructions to a T but still. Now I did ask for help in the topic but I would also like to learn so I figured I'd ask here. Anyways here is the full sqf that I am using.

 

VehicleKeyChanger.sqf

/***********************************/ 	
/* Vehicle Key Changer v1.4        */
/* Written by OtterNas3            */
/* January, 11, 2014               */
/* Last update: 06/15/2014         */
/***********************************/


/* Setup the private variables */
private ["_magazinesPlayer","_max","_j","_actionArray","_targetVehicle","_targetVehicleID","_targetVehicleUID","_playerKeys","_playerKeysDisplayName","_targetVehicleKeyName","_itemKeyName","_targetVehicleClassname","_targetVehiclePos","_targetVehicleDir","_Price","_claimingPrice","_timeout"];

/* Remove the Action Menu entry */
player removeAction s_player_copyToKey;
s_player_copyToKey = 0;
player removeAction s_player_claimVehicle;
s_player_claimVehicle = 0;

/* Get the array and setup the variables */
_actionArray = _this select 3;
_targetVehicle = _actionArray select 0;
_targetVehicleID = _targetVehicle getVariable ["ObjectID","0"];
_targetVehicleUID = _targetVehicle getVariable ["ObjectUID","0"];
	

/* Check if the Vehicle is in the Database, if false exit */
if (_targetVehicleID == "0" && _targetVehicleUID == "0") exitWith {cutText ["Sorry but\nthis Vehicle does not support\nKeychange/Claiming!","PLAIN",0];s_player_copyToKey = -1;s_player_claimVehicle = -1;};

/* Setup more variables */
_playerKeys = _actionArray select 1;
_playerKeysDisplayName = _actionArray select 3;
_targetVehicleKeyName = _actionArray select 4;
_itemKeyName = _actionArray select 5;
_Price = _actionArray select 6;
_claimingPrice = _actionArray select 7;
_targetVehicleClassname = typeOf _targetVehicle;

_targetVehiclePos = getPosATL _targetVehicle;
_targetVehicleDir = getDir _targetVehicle;

/* Just in case it is a just bought vehicle and does not yet have a ObjectUID variable set */
if (_targetVehicleUID == "0") then {
	_targetVehicleUID = "";
	{
		_x = _x * 10;
		if ( _x < 0 ) then { _x = _x * -10 };
		_targetVehicleUID = _targetVehicleUID + str(round(_x));
	} forEach _targetVehiclePos;
	_targetVehicleUID = _targetVehicleUID + str(round(_targetVehicleDir + time));
	_targetVehicle setVariable["ObjectUID",_targetVehicleUID,true];
};
	
/* Setup the Key Names list to select from */
keyNameList = [];
for "_i" from 0 to (count _playerKeysDisplayName) -1 do {
	keyNameList set [(count keyNameList), _playerKeysDisplayName select _i];
};

/* Setup the Key Numbers list to select from */
keyNumberList = [];
for "_i" from 0 to (count _playerKeys) -1 do {
	keyNumberList set [(count keyNumberList), _playerKeys select _i];
};

/* Resetting menu variables*/
keyNameSelect = "";
exitscript = true;
snext = false;

/* Creating the menu */
copyMenu =
{
	private ["_keyMenu","_keyArray"];
	_keyMenu = [["",true], ["Select the new Key:", [-1], "", -5, [["expression", ""]], "1", "0"]];
	for "_i" from (_this select 0) to (_this select 1) do
	{
		_keyArray = [format['%1', keyNameList select (_i)], [_i - (_this select 0) + 2], "", -5, [["expression", format ["keyNameSelect = keyNameList select %1; keyNumberSelect = keyNumberList select %1", _i]]], "1", "1"];
		_keyMenu set [_i + 2, _keyArray];
	};
	_keyMenu set [(_this select 1) + 2, ["", [-1], "", -5, [["expression", ""]], "1", "0"]];
	if (count keyNameList > (_this select 1)) then
	{
		_keyMenu set [(_this select 1) + 3, ["Next", [12], "", -5, [["expression", "snext = true;"]], "1", "1"]];
	} else {
		_keyMenu set [(_this select 1) + 3, ["", [-1], "", -5, [["expression", ""]], "1", "0"]];
	};
	_keyMenu set [(_this select 1) + 4, ["Exit", [13], "", -5, [["expression", "keyNameSelect = 'exitscript';"]], "1", "1"]];
	showCommandingMenu "#USER:_keyMenu";
};

/* Wait for the player to select a Key from the list */
_j = 0;
_max = 10;
if (_max > 9) then {_max = 10;};
while {keyNameSelect == ""} do {
	[_j, (_j + _max) min (count keyNameList)] call copyMenu;
	_j = _j + _max;
	waitUntil {keyNameSelect != "" || snext};
	snext = false;
};

/* Player selected a Key, lets make the Vehicle update call */
if (keyNameSelect != "exitscript") then {
	
	/* Check again for the needed price or claiming price and remove em from the players inventory */
	_magazinesPlayer = magazines player;
	if (_Price != "0") then {
		/* Player still has the costs in hi inventory */
		if (_Price in _magazinesPlayer) then {
			[player, _Price, 1] call BIS_fnc_invRemove;
			systemChat (format["Keychange costs a %1, thanks for your Payment!", _Price]);
		
		/* Player doesn't have the costs anymore, tried to trick the system? */
		} else {
			systemChat (format["Keychange costs a %1, you had it and tried to trick the system - Keychange for this Vehicle disabled!", _Price]);
			
			/* This disables the Keychange ability for this vehicle JUST for this Player */
			/* However he can relog and try again but it is a little punishment for trying to trick it */
			_targetVehicle setVariable ["VKC_disabled", 1];
			s_player_copyToKey = -1;
			s_player_claimVehicle = -1;
			breakOut "exit";
		};
	};
	
	if (_claimingPrice != "0") then {
		/* Player still has the costs in hi inventory */
		if (_claimingPrice in _magazinesPlayer) then {
			[player, _claimingPrice, 1] call BIS_fnc_invRemove;
			systemChat (format["Claiming Vehicle costs a %1, thanks for your Payment!", _claimingPrice]);

		/* Player doesn't have the costs anymore, tried to trick the system? */
		} else {
			systemChat (format["Claiming Vehicle costs a %1, you had it and tried to trick the system - Claiming for this Vehicle disabled!", Price]);

			/* This disables the Claiming ability for this vehicle JUST for this Player */
			/* However he can relog and try again but it is a little punishment for trying to trick it */
			_targetVehicle setVariable ["VKC_claiming_disabled", 1];
			s_player_copyToKey = -1;
			s_player_claimVehicle = -1;
			breakOut "exit";
		};
	};
	
	/* We got the Money lets do our Job */
	/* Lock the vehicle */
	_targetVehicle setVehicleLock "LOCKED";
	
	/* The super duper OneForAllAnimation... */
	player playActionNow "Medic";
	
	/* Remove the Key from the Toolbelt of the player and put it in the Backpack - No Backpack and the Key gets lost */
	if (_itemKeyName != "0") then {
		if (!isNull (unitBackpack player)) then {
			[player, _itemKeyName, 1] call BIS_fnc_invRemove;
			(unitBackpack (vehicle player)) addWeaponCargoGlobal [_itemKeyName, 1];
			systemChat (format["%1 has been moved to your Backpack", _targetVehicleKeyName]);
		};
	};
	
	/* This calls the custom update function which we put it in server_updateObject.sqf */
	PVDZE_veh_Update = [_targetVehicle, "vehiclekey", player, _targetVehicleClassname, keyNumberSelect, keyNameSelect, _targetVehicleID, _targetVehicleUID]; 
	publicVariableServer "PVDZE_veh_Update"; 

	/* Wait for success or timeout */
	_timeout = 20;
	while {_timeout > 0 && isNil "PVDZE_vkc_Success"} do {
		if (_Price != "0") then {
			cutText["~~ Performing Keychange ~~\n~~ Please wait ~~","PLAIN",0.5];
		};
		if (_claimingPrice != "0") then {
			cutText["~~ Performing Claim ~~\n~~ Please wait ~~","PLAIN",0.5];
		};
		sleep 1;
		_timeout = _timeout - 1;
	};

	/* Inform the player about the success and tell him to check the Key */
	if (!isNil "PVDZE_vkc_Success") then {
		if (_Price != "0") then {
			cutText["~~ Vehicle Keychange - SUCCESS ~~","PLAIN",1];
			systemChat (format["Changed Vehicle Key to %1", keyNameSelect]);
			systemChat (format["Please check Vehicle function with %1 before you throw away %2!", keyNameSelect, _targetVehicleKeyName]);
		};
		if (_claimingPrice != "0") then {
			cutText["~~ Vehicle Claiming - SUCCESS ~~","PLAIN",1];
			systemChat (format["You claimed this Vehicle with: %1", keyNameSelect]);
		};
		PVDZE_vkc_Success = nil;
		
		/* This updates the Vehicle as it is now, position, gear, damage, fuel */
		/* Should prevent the "backporting" some dudes reported. */
		/* Just fyi i never had that but just in case... */
		[nil,nil,nil,_targetVehicle] execVM "\z\addons\dayz_code\actions\forcesave.sqf";
	
	/* Something went wrong, inform the player and refund the costs */
	} else {
		if (_Price != "0") then {
			cutText["~~ Vehicle Keychange - FAIL ~~","PLAIN",1];
			systemChat (format["Sorry something went wrong", keyNameSelect]);
			systemChat (format["Please try again. If it keeps failing, please contact a Admin!", keyNameSelect, _targetVehicleKeyName]);
			[player,_Price] call BIS_fnc_invAdd;
			systemChat (format["Refunded %1",_Price]);
		};
		if (_claimingPrice != "0") then {
			cutText["~~ Vehicle Claiming - FAIL ~~","PLAIN",1];
			systemChat ("Sorry something went wrong");
			systemChat ("Please try again. If it keeps failing, please contact a Admin!");
			[player,_claimingPrice] call BIS_fnc_invAdd;
			systemChat (format["Refunded %1",_claimingPrice]);
		};
	};
};

/* Reset the action menu variables for a new run */
s_player_copyToKey = -1;
s_player_claimVehicle = -1;

/**************************************/
/* That's it, hope you enjoy this Mod */
/*                                    */
/* Yours sincerly,                    */
/* Otter                              */
/**************************************/ 

 

And VehicleKeyChanger_init.sqf

/***********************************/ 	
/* Vehicle Key Changer v1.4        */
/* Written by OtterNas3            */
/* January, 11, 2014               */
/* Last update: 06/15/2014         */
/***********************************/


/////////////////////////////////////////////////
/////////////////////////////////////////////////
// Edit these settings to fit your needs/likes //
/////////////////////////////////////////////////
/////////////////////////////////////////////////
/// Claim Vehicles that does not yet need Key ///
///////// 0 = Not allowed | 1 = Allowed /////////
vkc_claiming = 1;
/////////////////////////////////////////////////
//////// Claim Vehicles costs this Item /////////
/// Any Item can be used here, some examples: ///
//// ItemTinBar, ItemSilverBar, ItemGoldBar, ////
////// ItemSilverBar10oz, ItemGoldBar10oz, //////
///// ItemBriefcase20oz, ItemBriefcase100oz /////
//////// set to "0" to disable the costs ////////
vkc_claimingPrice = "ItemGoldBar10oz";
/////////////////////////////////////////////////
////////// Change Key costs this Item// /////////
////////////// see above examples ///////////////
//////// set to "0" to disable the costs ////////
vkc_Price = "ItemSilverBar";
/////////////////////////////////////////////////
/////// Need KeyKit to use this function ////////
////////// 0 = Not needed | 1 = Needed //////////
vkc_needKeykit = 1;
/////////////////////////////////////////////////
/////////////////////////////////////////////////
/////////////// DONT EDIT BELOW ! ///////////////
/////////////////////////////////////////////////

ON_fnc_vkcReset = {
	player removeAction s_player_claimVehicle;
	s_player_claimVehicle = -1;
	player removeAction s_player_copyToKey;
	s_player_copyToKey = -1;
	lastKeyChangeCursorTarget = [objNull,objNull];
	vkc_cTarget = objNull;
};

/* Wait for player full ingame so we can access the action-menu */
waitUntil {!isNil "dayz_animalCheck"};

/* Initial Reset */
[] call ON_fnc_vkcReset;

/* Start the loop check */
while{true} do {
	sleep 3;

	if ((vehicle player) == player) then {
	
		if (speed player <= 1) then {

			if (!isNull cursorTarget) then {
				_cursorTarget = cursorTarget;
				
				if ((_cursorTarget isKindOf "Motorcycle" || _cursorTarget isKindOf "Car" || _cursorTarget isKindOf "Air" || _cursorTarget isKindOf "Ship")) then {

					if ((_cursorTarget distance player) <= 10) then {

						if (!isEngineOn _cursorTarget) then {

							vkc_carKey = _cursorTarget getVariable ["CharacterID","0"];

							if (vkc_claiming == 1) then {
							
								if (vkc_carKey == "0") then {

									if ((lastKeyChangeCursorTarget select 0) != _cursorTarget) then {
										player removeAction s_player_claimVehicle;
										s_player_claimVehicle = -1;
								
										lastKeyChangeCursorTarget set [0,_cursorTarget];
										vkc_cTarget = lastKeyChangeCursorTarget select 0;
									};

									if (vkc_cTarget getVariable ["VKC_claming_disabled", 0] == 0) then {
										vkc_magazinesPlayer = magazines player;
										vkc_itemsPlayer = items player;
									
										if (("ItemKeyKit" in vkc_itemsPlayer || vkc_needKeykit == 0) && ((vkc_claimingPrice == "0" || vkc_claimingPrice in vkc_magazinesPlayer))) then {
											vkc_objectID = vkc_cTarget getVariable ["ObjectID","0"];
											vkc_objectUID = vkc_cTarget getVariable ["ObjectUID","0"];

											if (!(vkc_objectID == "0" && vkc_objectUID == "0")) then {
												vkc_key_colors = ["ItemKeyYellow","ItemKeyBlue","ItemKeyRed","ItemKeyGreen","ItemKeyBlack"];
												vkc_temp_keys = [];
												vkc_temp_keysDisplayName = [];
												vkc_temp_keysDisplayNameParse = [];
											
												{
	
													if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _x)) in vkc_key_colors) then {
														vkc_ownerKeyId = getNumber(configFile >> "CfgWeapons" >> _x >> "keyid");
														vkc_keyName = getText(configFile >> "CfgWeapons" >> _x >> "displayName");
														vkc_temp_keysDisplayName set [count vkc_temp_keysDisplayName,vkc_keyName];
														vkc_temp_keys set [count vkc_temp_keys,str(vkc_ownerKeyId)];
													};
												} forEach vkc_itemsPlayer;

												if ((count vkc_temp_keys) > 0) then {
	
													if (s_player_claimVehicle < 0) then {
														s_player_claimVehicle = player addAction [("<t color='#00FFFF'>" + ("Claim Vehicle") + "</t>"),"custom\VehicleKeyChanger\VehicleKeyChanger.sqf",[vkc_cTarget,vkc_temp_keys,"0",vkc_temp_keysDisplayName,"0","0","0", vkc_claimingPrice],-1002,false,false,"",""];
													};
	
												} else {

													player removeAction s_player_claimVehicle;
													s_player_claimVehicle = -1;
												};

											} else {

												player removeAction s_player_claimVehicle;
												s_player_claimVehicle = -1;
											};

										} else {

											player removeAction s_player_claimVehicle;
											s_player_claimVehicle = -1;
										};

									} else {

										player removeAction s_player_claimVehicle;
										s_player_claimVehicle = -1;
									};

								} else {

									player removeAction s_player_claimVehicle;
									s_player_claimVehicle = -1;
								};

							} else {

								player removeAction s_player_claimVehicle;
								s_player_claimVehicle = -1;
							};

							if (vkc_carKey != "0") then {

								if ((lastKeyChangeCursorTarget select 1) != _cursorTarget) then {
									player removeAction s_player_copyToKey;
									s_player_copyToKey = -1;

									lastKeyChangeCursorTarget set [1,_cursorTarget];
									vkc_cTarget = lastKeyChangeCursorTarget select 1;
								};

								if (vkc_cTarget getVariable ["VKC_disabled",0] == 0) then {

									vkc_magazinesPlayer = magazines player;
									vkc_itemsPlayer = items player;

									if (("ItemKeyKit" in vkc_itemsPlayer || vkc_needKeykit == 0) && (vkc_Price == "0" || vkc_Price in vkc_magazinesPlayer)) then {

										vkc_objectID = vkc_cTarget getVariable ["ObjectID","0"];
										vkc_objectUID = vkc_cTarget getVariable ["ObjectUID","0"];

										if (!(vkc_objectID == "0" && vkc_objectUID == "0")) then {
								
											vkc_key_colors = ["ItemKeyYellow","ItemKeyBlue","ItemKeyRed","ItemKeyGreen","ItemKeyBlack"];
											vkc_temp_keys = [];
											vkc_temp_keysDisplayName = [];
											vkc_temp_keysDisplayNameParse = [];
											vkc_temp_keysParse = [];

											{

												if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _x)) in vkc_key_colors) then {
													vkc_ownerKeyId = getNumber(configFile >> "CfgWeapons" >> _x >> "keyid");
													vkc_keyName = getText(configFile >> "CfgWeapons" >> _x >> "displayName");
													vkc_temp_keysDisplayName set [count vkc_temp_keysDisplayName,vkc_keyName];
													vkc_temp_keysDisplayNameParse set [vkc_ownerKeyId,vkc_keyName];
													vkc_temp_keys set [count vkc_temp_keys,str(vkc_ownerKeyId)];
													vkc_temp_keysParse set [vkc_ownerKeyId, _x];
												};
											} forEach vkc_itemsPlayer;

											vkc_hasKey = vkc_carKey in vkc_temp_keys;

											if (vkc_hasKey && (count vkc_temp_keys) > 1) then {
												vkc_carKeyName = (vkc_temp_keysDisplayNameParse select (parseNumber vkc_carKey));
												vkc_targetVehicleKey = (vkc_temp_keysParse select (parseNumber vkc_carKey));
												vkc_temp_keys = vkc_temp_keys - [vkc_carKey];
												vkc_temp_keysDisplayName = vkc_temp_keysDisplayName - [vkc_carKeyName];

												if (s_player_copyToKey < 0) then {
													s_player_copyToKey = player addAction [("<t color=""#0000FF"">" + ("Change Vehicle Key") + "</t>"),"custom\VehicleKeyChanger\VehicleKeyChanger.sqf",[vkc_cTarget, vkc_temp_keys, vkc_carKey, vkc_temp_keysDisplayName, vkc_carKeyName, vkc_targetVehicleKey, vkc_Price, "0"],-1002,false,false,"",""];
												};

											} else {
										
												player removeAction s_player_copyToKey;
												s_player_copyToKey = -1;
											};

										} else {
										
											player removeAction s_player_copyToKey;
											s_player_copyToKey = -1;
										};

									} else {
									
										player removeAction s_player_copyToKey;
										s_player_copyToKey = -1;
									};
							
								} else {
									
									player removeAction s_player_copyToKey;
									s_player_copyToKey = -1;
								};

							} else {
									
								player removeAction s_player_copyToKey;
								s_player_copyToKey = -1;
							};

						} else {
							
							[] call ON_fnc_vkcReset;
						};

					} else {

						[] call ON_fnc_vkcReset;
					};

				} else {

					[] call ON_fnc_vkcReset;
				};

			} else {

				[] call ON_fnc_vkcReset;
			};

		} else {

			[] call ON_fnc_vkcReset;
		};

	} else {

		[] call ON_fnc_vkcReset;
	};

};

 

 

Here is my init.sqf which I've added the execvm to where the OP states to put it.

 

dayz_antihack = 0;
dayz_REsec = 0;
startLoadingScreen ["","RscDisplayLoadCustom"];
cutText ["","BLACK OUT"];
enableSaving [false, false];

//REALLY IMPORTANT VALUES
dayZ_instance =	24;				//The instance
dayzHiveRequest = [];
initialized = false;
dayz_previousID = 0;

//disable greeting menu 
player setVariable ["BIS_noCoreConversations", true];
//disable radio messages to be heard and shown in the left lower corner of the screen
enableRadio false;
// May prevent "how are you civillian?" messages from NPC
enableSentences false;
DZEdebug = true;
// DayZ Epochconfig
spawnShoremode = 1; // Default = 1 (on shore)
spawnArea= 1500; // Default = 1500
// 
MaxVehicleLimit = 75; // Default = 50
MaxDynamicDebris = 200; // Default = 100
dayz_MapArea = 18000; // Default = 10000

dayz_minpos = -1000; 
dayz_maxpos = 26000;
dayz_paraSpawn = false;
dayz_sellDistance_vehicle = 10;
dayz_sellDistance_boat = 30;
dayz_sellDistance_air = 40;
DZE_StaticConstructionCount = 1;
dayz_maxAnimals = 5; // Default: 8
dayz_tameDogs = true;
DynamicVehicleDamageLow = 10; // Default: 0
DynamicVehicleDamageHigh = 100; // Default: 100
//Plot 4 life
DZE_APlotforLife = true;
DZE_PlotOwnership = false;
DZE_modularBuild = false;
//loadout
DefaultMagazines = ["ItemBandage","ItemBandage","17Rnd_9x19_glock17","17Rnd_9x19_glock17","ItemMorphine","ItemPainkiller","ItemWaterbottleBoiled","FoodSteakCooked"];
DefaultWeapons = ["glock17_EP1","ItemToolbox","ItemHatchet_DZE","ItemMap","ItemRadio"];
DefaultBackpack = "DZ_TerminalPack_EP1";
DZE_ForceNameTags = true;
DZE_BuildOnRoads = false; // Default: False

EpochEvents = [["any","any","any","any",30,"crash_spawner"],["any","any","any","any",0,"crash_spawner"],["any","any","any","any",15,"supply_drop"]];
dayz_fullMoonNights = true;

//Load in compiled functions
call compile preprocessFileLineNumbers "custom\A_Plot_for_Life\init\variables.sqf";				//Initilize the Variables (IMPORTANT: Must happen very early)
progressLoadingScreen 0.1;
call compile preprocessFileLineNumbers "custom\A_Plot_for_Life\init\publicEH.sqf";				//Initilize the publicVariable event handlers
progressLoadingScreen 0.2;
call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf";	//Functions used by CLIENT for medical
progressLoadingScreen 0.4;
call compile preprocessFileLineNumbers "custom\A_Plot_for_Life\init\compiles.sqf";				//Compile regular functions
progressLoadingScreen 0.5;
call compile preprocessFileLineNumbers "server_traders.sqf";				//Compile trader configs
progressLoadingScreen 1.0;

"filmic" setToneMappingParams [0.153, 0.357, 0.231, 0.1573, 0.011, 3.750, 6, 4]; setToneMapping "Filmic";

if (isServer) then {
	//Compile vehicle configs
	call compile preprocessFileLineNumbers "\z\addons\dayz_server\missions\DayZ_Epoch_24.Napf\dynamic_vehicle.sqf";				
	// Add trader citys
	_nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_24.Napf\mission.sqf";

	_serverMonitor = 	[] execVM "custom\system\server_monitor.sqf";
};

if (!isDedicated) then {
	//Conduct map operations
	0 fadeSound 0;
	waitUntil {!isNil "dayz_loadScreenMsg"};
	dayz_loadScreenMsg = (localize "STR_AUTHENTICATING");
	[] execVM 'Safezone.sqf';
	//Run the player monitor
	_id = player addEventHandler ["Respawn", {_id = [] spawn player_death;}];
	_playerMonitor = 	[] execVM "\z\addons\dayz_code\system\player_monitor.sqf";
	_nil = [] execVM "custom\VehicleKeyChanger\VehicleKeyChanger_init.sqf";
	execVM "custom\gui\dzgm\init.sqf";
	//Lights
	//[false,12] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf";
};

//Start Dynamic Weather
execVM "\z\addons\dayz_code\external\DynamicWeatherEffects.sqf";

#include "\z\addons\dayz_code\system\BIS_Effects\init.sqf"

 

And here's my server_updateobject.sqf which is in it's default position.

 

/*
[_object,_type] spawn server_updateObject;
*/
/* Additional */
/***********************************/ 	
/* Vehicle Key Changer v1.4        */
/* Written by OtterNas3            */
/* January, 11, 2014               */
/* Last update: 06/15/2014         */

/***********************************/


private ["_object","_type","_objectID","_uid","_lastUpdate","_needUpdate","_object_position","_object_inventory","_object_damage","_isNotOk","_parachuteWest","_firstTime","_object_killed","_object_repair","_isbuildable","_object_vehicleKey","_activatingPlayer","_vehicleClassname","_toKey","_toKeyName","_vehicle_ID","_vehicle_UID"];

_object = 	_this select 0;

if(isNull(_object)) exitWith {
	diag_log format["Skipping Null Object: %1", _object];
};

_type = 	_this select 1;
_parachuteWest = ((typeOf _object == "ParachuteWest") || (typeOf _object == "ParachuteC"));
_isbuildable = (typeOf _object) in dayz_allowedObjects;
_isNotOk = false;
_firstTime = false;

_objectID =	_object getVariable ["ObjectID","0"];
_uid = 		_object getVariable ["ObjectUID","0"];

if ((typeName _objectID != "string") || (typeName _uid != "string")) then
{ 
    diag_log(format["Non-string Object: ID %1 UID %2", _objectID, _uid]);
    //force fail
    _objectID = "0";
    _uid = "0";
};
if (!_parachuteWest && !(locked _object)) then {
	if (_objectID == "0" && _uid == "0") then
	{
		_object_position = getPosATL _object;
    	_isNotOk = true;
	};
};

// do not update if buildable && not ok
if (_isNotOk && _isbuildable) exitWith {  };

// delete if still not ok
if (_isNotOk) exitWith { deleteVehicle _object; diag_log(format["Deleting object %1 with invalid ID at pos [%2,%3,%4]",typeOf _object,_object_position select 0,_object_position select 1, _object_position select 2]); };


_lastUpdate = _object getVariable ["lastUpdate",time];
_needUpdate = _object in needUpdate_objects;

// TODO ----------------------
_object_position = {
	private["_position","_worldspace","_fuel","_key"];
		_position = getPosATL _object;
		_worldspace = [
			round(direction _object),
			_position
		];
		_fuel = 0;
		if (_object isKindOf "AllVehicles") then {
			_fuel = fuel _object;
		};
		_key = format["CHILD:305:%1:%2:%3:",_objectID,_worldspace,_fuel];
		//diag_log ("HIVE: WRITE: "+ str(_key));
		_key call server_hiveWrite;
};

_object_inventory = {
	private["_inventory","_previous","_key"];
	_isNormal = true;
if (typeOf (_object) == "Plastic_Pole_EP1_DZ") then{
    _isNormal = false;
    _inventory = _object getVariable ["plotfriends", []]; //We're replacing the inventory with UIDs for this item
}; 
if (typeOf (_object)in DZE_DoorsLocked) then{
    _isNormal = false;
	_inventory = _object getVariable ["doorfriends", []]; //We're replacing the inventory with UIDs for this item
};

if(_isNormal)then {
    _inventory = [
    getWeaponCargo _object,
    getMagazineCargo _object,
    getBackpackCargo _object
    ];
};
		_previous = str(_object getVariable["lastInventory",[]]);
		if (str(_inventory) != _previous) then {
			_object setVariable["lastInventory",_inventory];
			if (_objectID == "0") then {
				_key = format["CHILD:309:%1:%2:",_uid,_inventory];
			} else {
				_key = format["CHILD:303:%1:%2:",_objectID,_inventory];
			};
			//diag_log ("HIVE: WRITE: "+ str(_key));
			_key call server_hiveWrite;
		};
};

_object_damage = {
	private["_hitpoints","_array","_hit","_selection","_key","_damage"];
		_hitpoints = _object call vehicle_getHitpoints;
		_damage = damage _object;
		_array = [];
		{
			_hit = [_object,_x] call object_getHit;
			_selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
			if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
			_object setHit ["_selection", _hit];
		} count _hitpoints;
	
		_key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
		//diag_log ("HIVE: WRITE: "+ str(_key));
		_key call server_hiveWrite;
	_object setVariable ["needUpdate",false,true];
	};

_object_killed = {
	private["_hitpoints","_array","_hit","_selection","_key","_damage"];
	_hitpoints = _object call vehicle_getHitpoints;
	//_damage = damage _object;
	_damage = 1;
	_array = [];
	{
		_hit = [_object,_x] call object_getHit;
		_selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
		if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
		_hit = 1;
		_object setHit ["_selection", _hit];
	} count _hitpoints;
	
	if (_objectID == "0") then {
		_key = format["CHILD:306:%1:%2:%3:",_uid,_array,_damage];
	} else {
		_key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
	};
	//diag_log ("HIVE: WRITE: "+ str(_key));
	_key call server_hiveWrite;
	_object setVariable ["needUpdate",false,true];
	if ((count _this) > 2) then {
		_killer = _this select 2;
		_charID = _object getVariable ['CharacterID','0'];
		_objID 	= _object getVariable['ObjectID','0'];
		_objUID	= _object getVariable['ObjectUID','0'];
		_worldSpace = getPosATL _object;
		if (getPlayerUID _killer != "") then {
			_name = if (alive _killer) then { name _killer; } else { format["OBJECT %1", _killer]; };
			diag_log format["Vehicle killed: Vehicle %1 (TYPE: %2), CharacterID: %3, ObjectID: %4, ObjectUID: %5, Position: %6, Killer: %7 (UID: %8)", _object, (typeOf _object), _charID, _objID, _objUID, _worldSpace, _name, (getPlayerUID _killer)];
		} else {
			diag_log format["Vehicle killed: Vehicle %1 (TYPE: %2), CharacterID: %3, ObjectID: %4, ObjectUID: %5, Position: %6", _object, (typeOf _object), _charID, _objID, _objUID, _worldSpace];
		};
	};
};

_object_repair = {
	private["_hitpoints","_array","_hit","_selection","_key","_damage"];
	_hitpoints = _object call vehicle_getHitpoints;
	_damage = damage _object;
	_array = [];
	{
		_hit = [_object,_x] call object_getHit;
		_selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
		if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
		_object setHit ["_selection", _hit];
	} count _hitpoints;
	
	_key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
	//diag_log ("HIVE: WRITE: "+ str(_key));
	_key call server_hiveWrite;
	_object setVariable ["needUpdate",false,true];
};

_object_vehicleKey = {
	private ["_hit","_selection","_fuel","_gotcha","_retry","_vehicleID","_key","_result","_outcome","_player","_class","_newKey","_newKeyName","_oldVehicleID","_oldVehicleUID","_hitpoints","_damage","_array","_inventory","_vehicleUID","_position","_dir","_worldspace"];
	
	/* Setting up variables */
	_player = _this select 0;
	_class = _this select 1;
	_newKey = _this select 2;
	_newKeyName = _this select 3;
	_oldVehicleID = _this select 4;
	_oldVehicleUID = _this select 5;

	/* Get Damage of the Vehicle */
	_hitpoints = _object call vehicle_getHitpoints;
	_damage = damage _object;
	_array = [];
	{
		_hit = [_object,_x] call object_getHit;
		_selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
		if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
		_object setHit ["_selection", _hit];
	} forEach _hitpoints;
	
	/* Get the Fuel of the Vehicle */
	_fuel = 0;
	if (_object isKindOf "AllVehicles") then {
		_fuel = fuel _object;
	};
	
	/* Get the Inventory of the Vehicle */
	_inventory = [
		getWeaponCargo _object,
		getMagazineCargo _object,
		getBackpackCargo _object
	];
	
	/* Get the position of the Vehicle */
	_position 	= getPosASL _object;
	if !(surfaceIsWater _position) then {
		_position =  ASLToATL _position;
	};
	_dir 		= getDir _object;
	_worldspace = [_dir,_position];

	/* Delete the current Database entry */
	[_oldVehicleID,_oldVehicleUID,_player] call server_deleteObj;
	sleep 1;
	
	/* Generate a new UID */
	_vehicleUID = _worldspace call dayz_objectUID3;

	/* Write the new Database entry and LOG the action*/
	_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, _damage , _newKey, _worldspace, _inventory, _array, _fuel,_vehicleUID];
	_key call server_hiveWrite;
	diag_log ("HIVE: WRITE: VEHICLE KEY CHANGER: "+ str(_key)); 
	diag_log format["HIVE: WRITE: VEHICLE KEY CHANGER: Vehicle:%1 NewKey:%2 BY %3(%4)", _object, _newKeyName, (name _player), (getPlayerUID _player)];

	/* Get the ObjectID of the entry in the Database */
	_retry = 0;
	_gotcha = false;
	while {!_gotcha && _retry < 10} do {
		sleep 1;
		
		/* Send the request */
		_key = format["CHILD:388:%1:",_vehicleUID];
		diag_log ("HIVE: READ: VEHICLE KEY CHANGER: "+ str(_key));
		_result = _key call server_hiveReadWrite;
		_outcome = _result select 0;
		
		/* We got a answer */
		if (_outcome == "PASS") then {
			_vehicleID = _result select 1;
			
			/* Compare with old ObjectID to check if it not was deleted yet */
			if (_oldVehicleID == _vehicleID) then {
				/* Not good lets give it another try */
				_gotcha = false;
				_retry = _retry + 1;
	if (_retry > 8) then {
					PVDZE_vkc_Success = false;
					(owner _player) publicVariableClient "PVDZE_vkc_Success";
				};
			} else {
				/* GOTCHA! */
				diag_log("CUSTOM: VEHICLE KEY CHANGER: Selected " + str(_vehicleID));
				_gotcha = true;
				_retry = 11;

				_object setVariable ["VKC_disabled", 1,true];
				_object setVariable ["VKC_claiming_disabled", 1,true];

				[_object] spawn {
					private ["_veh"];
					_veh = _this select 0;

					sleep 30;
					_veh setVariable ["VKC_disabled", 0,true];
					_veh setVariable ["VKC_claiming_disabled", 0,true];
				};

				PVDZE_vkc_Success = true;
				(owner _player) publicVariableClient "PVDZE_vkc_Success";

				/* Lock the Vehicle */
				_object setVehicleLock "locked";
	
				/* Save the ObjectID and ObjectUID to the vehicles variable and make it public */
				_object setVariable ["ObjectID", _vehicleID, true];
				_object setVariable ["ObjectUID", _vehicleUID, true];
	
				/* Set the lastUpdate time to current */
				_object setVariable ["lastUpdate",time,true];
	
				/* Set the CharacterID to the new Key so we can access it! */
				_object setVariable ["CharacterID", _newKey, true];
	
				/* Some other variables you might need for disallow lift/tow/cargo locked Vehicles and such */
				/* Uncomment if you use this */
	
				/* R3F Arty and LOG block lift/tow/cargo locked vehicles*/
				_object setVariable ["R3F_LOG_disabled",true,true];

				/* =BTC= Logistic block lift locked vehicles*/
				_object setVariable ["BTC_Cannot_Lift",true,true];
			};
		} else {
			/* Something went wrong on the request give it another try */
			diag_log("CUSTOM: VEHICLE KEY CHANGER: trying again to get id for: " + str(_vehicleUID));
			_gotcha = false;
			_retry = _retry + 1;
		};
	};
};
// TODO ----------------------

_object setVariable ["lastUpdate",time,true];
switch (_type) do {
	case "all": {
		call _object_position;
		call _object_inventory;
		call _object_damage;
		};
	case "position": {
		if (!(_object in needUpdate_objects)) then {
			//diag_log format["DEBUG Position: Added to NeedUpdate=%1",_object];
			needUpdate_objects set [count needUpdate_objects, _object];
		};
	};
	case "gear": {
		call _object_inventory;
			};
	case "damage": {
		if ( (time - _lastUpdate) > 5) then {
			call _object_damage;
		} else {
			if (!(_object in needUpdate_objects)) then {
				//diag_log format["DEBUG Damage: Added to NeedUpdate=%1",_object];
				needUpdate_objects set [count needUpdate_objects, _object];
			};
		};
	};
	case "killed": {
		call _object_killed;
	};
	case "repair": {
		call _object_damage;
	};
	case "vehiclekey": {
		_activatingPlayer = _this select 2;
		_vehicleClassname = _this select 3;
		_toKey = _this select 4;
		_toKeyName = _this select 5;
		_vehicle_ID = _this select 6;
		_vehicle_UID = _this select 7;
		[_activatingPlayer, _vehicleClassname, _toKey, _toKeyName, _vehicle_ID, _vehicle_UID] call _object_vehicleKey;;
	};
};

 

 

I'm completely at a loss as to what could be going wrong... Everyone else in the topic seems to have no issues but there was a few others who had my problem but nobody replied to them. The only thing I could think of is the variables aren't being defined early enough?? If that's the case I'd love to learn how to fix this type of issue. I want to understand! Thanks for any time anyone puts into this to help me out!

 

 

EDIT:

 

Also here are the errors I was getting derp

Error in expression <= -1;
};

} else {

player removeAction s_player_claimKey;
s_player_claimKey = ->
  Error position: <s_player_claimKey;
s_player_claimKey = ->
  Error Undefined variable in expression: s_player_claimkey
File mpmissions\__CUR_MP.Napf\custom\VehicleKeyChanger\VehicleKeyChanger_init.sqf, line 154
if (vkc_claimKey == 1 && vkc_ownerID == "0" && vkc_cursorTarget g>
  Error position: <vkc_ownerID == "0" && vkc_cursorTarget g>
  Error Undefined variable in expression: vkc_ownerid
File mpmissions\__CUR_MP.Napf\custom\VehicleKeyChanger\VehicleKeyChanger_init.sqf, line 56
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

s_player_claimkey value and basically any addaction value like this have to be initialized in variables.sqf

In that file search for any -1;  and you'll find the location at no time...its a whole bunch of them

 

For vkc_ownerID, i am guessing you are not assigning a value to it before using it.

There should be something like

 

vkc_ownerID = _vehicle getplayerUID or something similar above ?!?

 

The best tool that can errors in a script is : http://www.armaholic.com/page.php?id=11817   this.

Especially for assigning the private [""]; declaration at the top of every file.

Copy past your script in there..it usually produces a 99% accurate private (fix) declaration

Link to comment
Share on other sites

  • 0

s_player_claimkey value and basically any addaction value like this have to be initialized in variables.sqf

In that file search for any -1;  and you'll find the location at no time...its a whole bunch of them

 

For vkc_ownerID, i am guessing you are not assigning a value to it before using it.

There should be something like

 

vkc_ownerID = _vehicle getplayerUID or something similar above ?!?

 

The best tool that can errors in a script is : http://www.armaholic.com/page.php?id=11817   this.

Especially for assigning the private [""]; declaration at the top of every file.

Copy past your script in there..it usually produces a 99% accurate private (fix) declaration

 

 

Okay thanks! I was just so confused as to why this wouldn't work for me but it works for everyone else?! like I'm literally using the same files as everyone else but it just won't work for me for some reason. I'd assume vkc_ownerID is being defined in the files provided since no one else was having this problem except a few people.

Link to comment
Share on other sites

  • 0

Okay thanks! I was just so confused as to why this wouldn't work for me but it works for everyone else?! like I'm literally using the same files as everyone else but it just won't work for me for some reason. I'd assume vkc_ownerID is being defined in the files provided since no one else was having this problem except a few people.

 

That script was released before the latest ArmaOA patch that screwed things up with variables.

Now any 'missed' variable declared will throw errors like this.

All you have to do 99% of the time is make sure s_player actions are defined as -1 in the variables.sqf and that on top of the file the private declaration is correct with all the values used in that script file.

Sometimes you declare another private inside a while loop or something....squint should be able to pick those up as well and correct them if you are missing any...but sometimes it screws up and add the variable from inside the while function at the top of the file..which is wrong.

Its a really helpful program....you just have to pay a little attention to what it 'suggest' you should do.

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

×
×
  • Create New...