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.
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
Question
smexy
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
And VehicleKeyChanger_init.sqf
Here is my init.sqf which I've added the execvm to where the OP states to put it.
And here's my server_updateobject.sqf which is in it's default position.
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
Link to comment
Share on other sites
4 answers to this question
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now