From cf1469aa8f7d575e5c1623a27fb89bf6ceba7c5f Mon Sep 17 00:00:00 2001 From: "[VB]AWOL" Date: Wed, 18 Sep 2013 03:39:50 -0500 Subject: [PATCH] Building upgrade and maintenance now use one function server side. --- .../actions/player_buildingMaint.sqf | 20 +------- SQF/dayz_code/actions/player_upgrade.sqf | 20 +------- SQF/dayz_code/init/publicEH.sqf | 6 ++- SQF/dayz_server/compile/server_swapObject.sqf | 50 +++++++++++++++++++ 4 files changed, 59 insertions(+), 37 deletions(-) create mode 100644 SQF/dayz_server/compile/server_swapObject.sqf diff --git a/SQF/dayz_code/actions/player_buildingMaint.sqf b/SQF/dayz_code/actions/player_buildingMaint.sqf index 802b3b416..e9c81c487 100644 --- a/SQF/dayz_code/actions/player_buildingMaint.sqf +++ b/SQF/dayz_code/actions/player_buildingMaint.sqf @@ -95,24 +95,8 @@ if (_proceed) then { // Set location _object setPos _location; - // Remove old object - deleteVehicle _obj; - - // Delete object from database - dayzDeleteObj = [_objectID,_objectUID]; - publicVariableServer "dayzDeleteObj"; - - // sleep a bit to make sure delete happens before create - sleep 1; - - // Publish variables - _object setVariable ["CharacterID",_objectCharacterID,true]; - - //_object setVariable ["ObjectUID",_objectUID,true]; - _object setVariable ["OEMPos",_location,true]; - - dayzPublishObj = [_objectCharacterID,_object,[_dir,_location],_classname]; - publicVariableServer "dayzPublishObj"; + dayzSwapObj = [_objectCharacterID,_object,[_dir,_location],_classname,_objectID,_objectUID,_obj]; + publicVariableServer "dayzSwapObj"; cutText [format["You have repaired %1.",_text], "PLAIN DOWN", 5]; diff --git a/SQF/dayz_code/actions/player_upgrade.sqf b/SQF/dayz_code/actions/player_upgrade.sqf index 497e04150..2a3207e74 100644 --- a/SQF/dayz_code/actions/player_upgrade.sqf +++ b/SQF/dayz_code/actions/player_upgrade.sqf @@ -145,16 +145,6 @@ if ((count _upgrade) > 0) then { // Set location _object setPos _location; - // Remove old object - deleteVehicle _obj; - - // Delete object from database - dayzDeleteObj = [_objectID,_objectUID]; - publicVariableServer "dayzDeleteObj"; - - // sleep a bit to make sure delete happens before create - sleep 1; - if (_lockable == 3) then { _combination_1 = floor(random 10); @@ -169,14 +159,8 @@ if ((count _upgrade) > 0) then { cutText [format["You have upgraded %1.",_text], "PLAIN DOWN", 5]; }; - // Publish variables - _object setVariable ["CharacterID",_objectCharacterID,true]; - - //_object setVariable ["ObjectUID",_objectUID,true]; - _object setVariable ["OEMPos",_location,true]; - - dayzPublishObj = [_objectCharacterID,_object,[_dir,_location],_classname]; - publicVariableServer "dayzPublishObj"; + dayzSwapObj = [_objectCharacterID,_object,[_dir,_location],_classname,_objectID,_objectUID,_obj]; + publicVariableServer "dayzSwapObj"; player reveal _object; diff --git a/SQF/dayz_code/init/publicEH.sqf b/SQF/dayz_code/init/publicEH.sqf index c78c41ffa..807aa0e7d 100644 --- a/SQF/dayz_code/init/publicEH.sqf +++ b/SQF/dayz_code/init/publicEH.sqf @@ -43,7 +43,11 @@ if (isServer) then { //Checking "dayzDeleteObj" addPublicVariableEventHandler {(_this select 1) spawn server_deleteObj}; - "atp" addPublicVariableEventHandler { _array = _this select 1; diag_log format["TELEPORT REVERT: %1 (%2) from %3 to %4 now at %5", _array select 0, _array select 1, _array select 2, _array select 3, _array select 4];}; + + // upgrade and maintain + "dayzSwapObj" addPublicVariableEventHandler {(_this select 1) spawn server_swapObject}; + + // "atp" addPublicVariableEventHandler { _array = _this select 1; diag_log format["TELEPORT REVERT: %1 (%2) from %3 to %4 now at %5", _array select 0, _array select 1, _array select 2, _array select 3, _array select 4];}; // disable zombies server side "dayzSpawnZed" addPublicVariableEventHandler {(_this select 1) spawn server_handleZedSpawn}; diff --git a/SQF/dayz_server/compile/server_swapObject.sqf b/SQF/dayz_server/compile/server_swapObject.sqf new file mode 100644 index 000000000..ab60b7157 --- /dev/null +++ b/SQF/dayz_server/compile/server_swapObject.sqf @@ -0,0 +1,50 @@ +private ["_class","_uid","_charID","_object","_worldspace","_key","_allowed","_obj","_objectID","_objectUID"]; +//[dayz_characterID,_tent,[_dir,_location],"TentStorage"] +_charID = _this select 0; +_object = _this select 1; +_worldspace = _this select 2; +_class = _this select 3; +_obj = _this select 4; + +_obj removeAllMPEventHandlers "MPKilled"; + +// Remove old object +deleteVehicle _obj; + +// Publish variables +_object setVariable ["CharacterID",_charID,true]; + +//_object setVariable ["ObjectUID",_objectUID,true]; +_object setVariable ["OEMPos",_worldspace,true]; + +_objectID = _this select 5; +_objectUID = _this select 6; + +if(_objectID == "0" && _objectUID == "0") exitWith {diag_log ("Object not valid: "+ str(_object));}; + +[_objectID,_objectUID] call server_deleteObj; + +_allowed = [_object, "Server"] call check_publishobject; +if (!_allowed) exitWith { deleteVehicle _object; }; + +//diag_log ("PUBLISH: Attempt " + str(_object)); + +//get UID +_uid = _worldspace call dayz_objectUID2; + +//Send request +_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _charID, _worldspace, [], [], 0,_uid]; +//diag_log ("HIVE: WRITE: "+ str(_key)); +_key call server_hiveWrite; + +_object setVariable ["lastUpdate",time]; +_object setVariable ["ObjectUID", _uid,true]; +// _object setVariable ["CharacterID",_charID,true]; + +_object addMPEventHandler ["MPKilled",{_this call object_handleServerKilled;}]; +// Test disabling simulation server side on buildables only. +_object enableSimulation false; + +dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object]; + +//diag_log ("PUBLISH: Created " + (_class) + " with ID " + _uid);