From 6ddd59f4746433237588177c4c32ecc9dabe9abd Mon Sep 17 00:00:00 2001 From: "[VB]AWOL" Date: Wed, 4 Dec 2013 16:23:01 -0600 Subject: [PATCH] recode vehicle upgrade system --- .../compile/player_upgradeVehicle.sqf | 79 +++-------- SQF/dayz_code/init/publicEH.sqf | 1 + .../compile/server_publishVehicle3.sqf | 133 ++++++++++++++++++ SQF/dayz_server/init/server_functions.sqf | 1 + 4 files changed, 151 insertions(+), 63 deletions(-) create mode 100644 SQF/dayz_server/compile/server_publishVehicle3.sqf diff --git a/SQF/dayz_code/compile/player_upgradeVehicle.sqf b/SQF/dayz_code/compile/player_upgradeVehicle.sqf index e2dbe1d87..9e682f763 100644 --- a/SQF/dayz_code/compile/player_upgradeVehicle.sqf +++ b/SQF/dayz_code/compile/player_upgradeVehicle.sqf @@ -84,74 +84,27 @@ if (_IsNearVehicle >= 1) then { _objectID = _vehicle getVariable ["ObjectID","0"]; _objectUID = _vehicle getVariable ["ObjectUID","0"]; - PVDZE_obj_Delete = [_objectID,_objectUID,player]; - publicVariableServer "PVDZE_obj_Delete"; - - // Get position - _location = getposATL _vehicle; - - // Get direction - _dir = getDir _vehicle; - diag_log format ["The original (preDelete) vehicle position was %1", _dir]; - - // Current charID - _objectCharacterID = _vehicle getVariable ["CharacterID","0"]; - - _weapons = getWeaponCargo _vehicle; - _magazines = getMagazineCargo _vehicle; - _backpacks = getBackpackCargo _vehicle; - - // remove old vehicle - deleteVehicle _vehicle; + if(_objectID == "0" && _objectUID == "0") then { - _classname = _newclassname; - - // Create new object - _object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"]; - diag_log format ["The preSetDir vehicle position was %1", _dir]; - - // Set location - _object setPosATL _location; + cutText [(localize "str_epoch_player_50"), "PLAIN DOWN"]; - // Set direction - _object setDir _dir; - diag_log format ["The upgraded setDir vehicle position is %1", _dir]; + } else { + + // Get position + _location = getposATL _vehicle; - PVDZE_veh_Publish2 = [_object,[_dir,_location],_classname,true,_objectCharacterID,player]; - publicVariableServer "PVDZE_veh_Publish2"; + // Get direction + _dir = getDir _vehicle; - _holder = _object; - - //Add weapons - _objWpnTypes = _weapons select 0; - _objWpnQty = _weapons select 1; - _countr = 0; - { - _holder addWeaponCargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; - } forEach _objWpnTypes; + // Current charID + _objectCharacterID = _vehicle getVariable ["CharacterID","0"]; + + PVDZE_veh_Publish3 = [_object,[_dir,_location],_newclassname,true,_objectCharacterID,player]; + publicVariableServer "PVDZE_veh_Upgrade"; + + cutText [(localize "STR_EPOCH_VEHUP_SUCCESS"), "PLAIN DOWN"]; + }; - //Add Magazines - _objWpnTypes = _magazines select 0; - _objWpnQty = _magazines select 1; - _countr = 0; - { - _holder addMagazineCargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; - } forEach _objWpnTypes; - - //Add Backpacks - _objWpnTypes = _backpacks select 0; - _objWpnQty = _backpacks select 1; - _countr = 0; - { - _holder addBackpackCargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; - } forEach _objWpnTypes; - - player reveal _object; - cutText [(localize "STR_EPOCH_VEHUP_SUCCESS"), "PLAIN DOWN"]; - } else { {player addMagazine _x;} forEach _temp_removed_array; diff --git a/SQF/dayz_code/init/publicEH.sqf b/SQF/dayz_code/init/publicEH.sqf index 8aa08893f..56eaf0809 100644 --- a/SQF/dayz_code/init/publicEH.sqf +++ b/SQF/dayz_code/init/publicEH.sqf @@ -51,6 +51,7 @@ if (isServer) then { // Dayz epoch custom "PVDZE_veh_Publish" addPublicVariableEventHandler {(_this select 1) spawn server_publishVeh}; "PVDZE_veh_Publish2" addPublicVariableEventHandler {(_this select 1) spawn server_publishVeh2}; + "PVDZE_veh_Upgrade" addPublicVariableEventHandler {(_this select 1) spawn server_publishVeh3}; "PVDZE_obj_Trade" addPublicVariableEventHandler {(_this select 1) spawn server_tradeObj}; "PVDZE_plr_TradeMenu" addPublicVariableEventHandler {(_this select 1) spawn server_traders}; "PVDZE_plr_DeathB" addPublicVariableEventHandler {(_this select 1) spawn server_deaths}; diff --git a/SQF/dayz_server/compile/server_publishVehicle3.sqf b/SQF/dayz_server/compile/server_publishVehicle3.sqf new file mode 100644 index 000000000..12c8897c4 --- /dev/null +++ b/SQF/dayz_server/compile/server_publishVehicle3.sqf @@ -0,0 +1,133 @@ +private ["_activatingPlayer","_isOK","_object","_worldspace","_location","_dir","_class","_uid","_key","_keySelected","_characterID","_donotusekey"]; +//PVDZE_veh_Publish2 = [_veh,[_dir,_location],_part_out,false,_keySelected,_activatingPlayer]; +_object = _this select 0; +_worldspace = _this select 1; +_class = _this select 2; +_donotusekey = _this select 3; +_keySelected = _this select 4; +_activatingPlayer = _this select 5; +_characterID = _keySelected; + +_isOK = isClass(configFile >> "CfgVehicles" >> _class); +if(!_isOK) exitWith { diag_log ("HIVE-pv3: Vehicle does not exist: "+ str(_class)); }; + +diag_log ("PUBLISH: Attempt " + str(_object)); +_dir = _worldspace select 0; +_location = _worldspace select 1; + +//Generate UID test using time +_uid = _worldspace call dayz_objectUID3; + +//Send request +_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _characterID, _worldspace, [], [], 1,_uid]; +diag_log ("HIVE: WRITE: "+ str(_key)); +_key call server_hiveWrite; + +// Switched to spawn so we can wait a bit for the ID +[_object,_uid,_characterID,_class,_dir,_location,_donotusekey,_activatingPlayer] spawn { + private ["_object","_uid","_characterID","_done","_retry","_key","_result","_outcome","_oid","_class","_location","_object_para","_donotusekey","_activatingPlayer"]; + + _object = _this select 0; + _objectID = _object getVariable ["ObjectID","0"]; + _objectUID = _object getVariable ["ObjectUID","0"]; + _uid = _this select 1; + _characterID = _this select 2; + _class = _this select 3; + //_dir = _this select 4; + _location = _this select 5; + _donotusekey = _this select 6; + _activatingPlayer = _this select 7; + + _done = false; + _retry = 0; + // TODO: Needs major overhaul for 1.1 + while {_retry < 10} do { + + sleep 1; + // GET DB ID + _key = format["CHILD:388:%1:",_uid]; + diag_log ("HIVE: WRITE: "+ str(_key)); + _result = _key call server_hiveReadWrite; + _outcome = _result select 0; + if (_outcome == "PASS") then { + _oid = _result select 1; + //_object setVariable ["ObjectID", _oid, true]; + diag_log("CUSTOM: Selected " + str(_oid)); + _done = true; + _retry = 100; + + } else { + diag_log("CUSTOM: trying again to get id for: " + str(_uid)); + _done = false; + _retry = _retry + 1; + }; + }; + + if(!_done) exitWith { diag_log("CUSTOM: failed to get id for : " + str(_uid)); }; + + _newobject = createVehicle [_class, _location, [], 0, "CAN_COLLIDE"]; + + // add items from previous vehicle here + _weapons = getWeaponCargo _object; + _magazines = getMagazineCargo _object; + _backpacks = getBackpackCargo _object; + + clearWeaponCargoGlobal _object; + clearMagazineCargoGlobal _object; + clearBackpackCargoGlobal _object; + + // Remove marker + deleteVehicle _object; + + _holder setDir _dir; + _holder setPosATL _location; + + // remove old vehicle from DB + [_objectID,_objectUID,_activatingPlayer] call server_deleteObj; + + // switch to new vehicle. + _object = _newobject; + + //Add weapons + _objWpnTypes = _weapons select 0; + _objWpnQty = _weapons select 1; + _countr = 0; + { + _object addWeaponCargoGlobal [_x,(_objWpnQty select _countr)]; + _countr = _countr + 1; + } forEach _objWpnTypes; + + //Add Magazines + _objWpnTypes = _magazines select 0; + _objWpnQty = _magazines select 1; + _countr = 0; + { + _object addMagazineCargoGlobal [_x,(_objWpnQty select _countr)]; + _countr = _countr + 1; + } forEach _objWpnTypes; + + //Add Backpacks + _objWpnTypes = _backpacks select 0; + _objWpnQty = _backpacks select 1; + _countr = 0; + { + _object addBackpackCargoGlobal [_x,(_objWpnQty select _countr)]; + _countr = _countr + 1; + } forEach _objWpnTypes; + + _object setVariable ["ObjectID", _oid, true]; + + _object setVariable ["lastUpdate",time]; + + _object setVariable ["CharacterID", _characterID, true]; + + PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_object]; + + _object call fnc_veh_ResetEH; + + // for non JIP users this should make sure everyone has eventhandlers for vehicles. + PVDZE_veh_Init = _object; + publicVariable "PVDZE_veh_Init"; + + diag_log ("PUBLISH: " + str(_activatingPlayer) + " Upgraded " + (_class) + " with ID " + str(_uid)); +}; diff --git a/SQF/dayz_server/init/server_functions.sqf b/SQF/dayz_server/init/server_functions.sqf index 1947b8c86..6360981c0 100644 --- a/SQF/dayz_server/init/server_functions.sqf +++ b/SQF/dayz_server/init/server_functions.sqf @@ -17,6 +17,7 @@ server_deleteObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\co server_swapObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_swapObject.sqf"; server_publishVeh = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle.sqf"; // Custom to add vehicles server_publishVeh2 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle2.sqf"; // Custom to add vehicles +server_publishVeh3 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3.sqf"; // Custom to add vehicles server_tradeObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_tradeObject.sqf"; server_traders = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_traders.sqf"; server_playerSync = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSync.sqf";