From 678590c7ce748f73dd07683af42d7ff36f0c301f Mon Sep 17 00:00:00 2001 From: Skaronator Date: Fri, 17 Jan 2014 19:09:37 +0100 Subject: [PATCH] Publish new Maintain Area (New HiveDLL is required) --- SQF/dayz_code/actions/maintain_area.sqf | 50 ++++--------------- SQF/dayz_code/init/publicEH.sqf | 1 + SQF/dayz_code/init/variables.sqf | 1 + .../compile/server_maintainArea.sqf | 24 +++++++++ SQF/dayz_server/init/server_functions.sqf | 8 +++ Server Files/Battleye/publicvariable.txt | 2 +- 6 files changed, 45 insertions(+), 41 deletions(-) create mode 100644 SQF/dayz_server/compile/server_maintainArea.sqf diff --git a/SQF/dayz_code/actions/maintain_area.sqf b/SQF/dayz_code/actions/maintain_area.sqf index ab5382184..eedd66d8f 100644 --- a/SQF/dayz_code/actions/maintain_area.sqf +++ b/SQF/dayz_code/actions/maintain_area.sqf @@ -1,5 +1,5 @@ -//Code developed by Axe Cop for use in DayZ Epoch Mod. -private ["_missing","_missingQty","_proceed","_itemIn","_countIn","_qty","_num_removed","_removed","_removed_total","_tobe_removed_total","_obj","_objectID","_objectUID","_classname","_location","_dir","_objectCharacterID","_object","_temp_removed_array","_textMissing","_target","_objectClasses","_range","_objects","_requirements","_count","_cost","_itemText","_option"]; +//Code developed by Axe Cop - Massiv improvments and performance tunes by Skaronator +private ["_missing","_missingQty","_proceed","_itemIn","_countIn","_qty","_num_removed","_uniqueID","_removed","_removed_total","_tobe_removed_total","_obj","_objectID","_objectUID","_classname","_location","_dir","_objectCharacterID","_object","_temp_removed_array","_textMissing","_target","_objectClasses","_range","_objects","_requirements","_count","_cost","_itemText","_option"]; if (DZE_ActionInProgress) exitWith { cutText [(localize "STR_EPOCH_ACTIONS_2") , "PLAIN DOWN"]; }; DZE_ActionInProgress = true; @@ -77,45 +77,15 @@ switch _option do { // all required items removed from player gear if (_tobe_removed_total == _removed_total) then { - { - _obj = _x; - - // Find objectID - _objectID = _obj getVariable ["ObjectID","0"]; - - // Find objectUID - _objectUID = _obj getVariable ["ObjectUID","0"]; - - if (_objectID == "0" && _objectUID == "0") exitWith { cutText ["At least one building part is not setup yet.", "PLAIN DOWN"];}; - - // Get classname - _classname = typeOf _obj; - - // Get position - _location = _obj getVariable["OEMPos",(getposATL _obj)]; - - // Get direction - _dir = getDir _obj; - - // Find CharacterID - _objectCharacterID = _obj getVariable ["CharacterID","0"]; - - // Create new object - _object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"]; - - // Set direction - _object setDir _dir; - - // Set location - _object setPosATL _location; - - PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location],_classname,_obj,player]; - publicVariableServer "PVDZE_obj_Swap"; - - player reveal _object; - } forEach _objects; - + _uniqueID = random(99999); + _retry = 0; cutText [format[(localize "STR_EPOCH_ACTIONS_4"), _count], "PLAIN DOWN", 5]; + while {3 >= _retry} do { // 3 Times + _retry = _retry + 1; + PVDZE_maintainArea = [player,[_target, _objectClasses, _range],_uniqueID]; + publicVariableServer "PVDZE_maintainArea"; + sleep 20; + }; } else { {player addMagazine _x;} forEach _temp_removed_array; cutText [format[(localize "STR_EPOCH_ACTIONS_5"),_removed_total,_tobe_removed_total], "PLAIN DOWN"]; diff --git a/SQF/dayz_code/init/publicEH.sqf b/SQF/dayz_code/init/publicEH.sqf index c5f76018e..64b597e19 100644 --- a/SQF/dayz_code/init/publicEH.sqf +++ b/SQF/dayz_code/init/publicEH.sqf @@ -32,6 +32,7 @@ if (isServer) then { /* PVS/PVC - Skaronator */ "PVDZE_send" addPublicVariableEventHandler {(_this select 1) call server_sendToClient}; + "PVDZE_maintainArea" addPublicVariableEventHandler {(_this select 1) spawn server_maintainArea}; "PVDZE_plr_Died" addPublicVariableEventHandler {_id = (_this select 1) spawn server_playerDied}; "PVDZE_plr_Save" addPublicVariableEventHandler {_id = (_this select 1) spawn server_playerSync;}; diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf index 43022cfef..d2aa06112 100644 --- a/SQF/dayz_code/init/variables.sqf +++ b/SQF/dayz_code/init/variables.sqf @@ -527,6 +527,7 @@ call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\loot_init.sqf"; if(isServer) then { dayz_players = []; + DZEMaintainCache = []; dead_bodyCleanup = []; needUpdate_objects = []; diff --git a/SQF/dayz_server/compile/server_maintainArea.sqf b/SQF/dayz_server/compile/server_maintainArea.sqf new file mode 100644 index 000000000..93ba5af9c --- /dev/null +++ b/SQF/dayz_server/compile/server_maintainArea.sqf @@ -0,0 +1,24 @@ +/* Maintain Area - written by Skaronator +How to use: PVDZE_maintainArea = [player,[_target, _objectClasses, _range]]; +*/ +private ["_player","_area","_uniqueID","_objects","_key"]; +_player = _this select 0; +_area = _this select 1; +_uniqueID = _this select 2; + +if (_uniqueID in DZEMaintainCache) exitWith { }; //Just do it only one time + +DZEMaintainCache = DZEMaintainCache + [_uniqueID]; + +_objects = nearestObjects _area; + +{ + _objectID = _x getVariable ["ObjectID","0"]; + //_objectUID = _x getVariable ["ObjectUID","0"]; + + _key = format["CHILD:396:%1:", _objectID]; //Use ID instead of UID because ID is shorter + _key call server_maintainObj; +} forEach _objects; + + +diag_log format ["MAINTAIN AREA BY %1 - %2 Objects at %3", name _player, count _objects, position _player]; \ No newline at end of file diff --git a/SQF/dayz_server/init/server_functions.sqf b/SQF/dayz_server/init/server_functions.sqf index 062bf95aa..c9a4162d3 100644 --- a/SQF/dayz_server/init/server_functions.sqf +++ b/SQF/dayz_server/init/server_functions.sqf @@ -29,6 +29,7 @@ server_spawnEvents = compile preprocessFileLineNumbers "\z\addons\dayz_server\ //server_weather = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_weather.sqf"; fnc_plyrHit = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\fnc_plyrHit.sqf"; server_deaths = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDeaths.sqf"; +server_maintainArea = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_maintainArea.sqf"; /* PVS/PVC - Skaronator */ server_sendToClient = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_sendToClient.sqf"; @@ -163,6 +164,13 @@ server_hiveReadWrite = { _resultArray }; +server_maintainObj = { + private["_data"]; + //diag_log ("ATTEMPT WRITE: " + _this); + _data = "HiveExt" callExtension _this; + //diag_log ("WRITE: " +str(_data)); +}; + server_hiveReadWriteLarge = { private["_key","_resultArray","_data"]; _key = _this; diff --git a/Server Files/Battleye/publicvariable.txt b/Server Files/Battleye/publicvariable.txt index 6f6ecb544..dc9570c0b 100644 --- a/Server Files/Battleye/publicvariable.txt +++ b/Server Files/Battleye/publicvariable.txt @@ -1,4 +1,4 @@ -5 !="remExField" !="remExFP" !="PVDZE_plr_TradeMenu" !="PVDZE_veh_Update" !="PVDZE_veh_Lock" !="PVDZE_plr_DeathB" !="PVDZE_obj_Publish" !="PVDZE_obj_Swap" !="PVDZE_plr_Save" !="PVDZE_obj_Delete" !="PVDZE_veh_SFix" !="PVDZE_obj_Trade" !="PVDZE_veh_Publish2" !="PVDZE_send" !="usecBleed" !="PVDZE_plr_Died" !="PVDZE_zed_Spawn" !="drn_DynamicWeather_DebugTextEventArgs" !="drn_AskServerDynamicWeatherEventArgs" !="drn_DynamicWeatherEventArgs" !="drn_var_DynamicWeather_Rain" !="drn_var_DynamicWeather_ServerInitialized" !="norrnRACarUp" !="norrnRAPicUp" !="norrnRaDrag" !="norrnR180" !="norrnRalie" !="norrnRLact" !="norrnRALW" !="norrinRAlie" !="atp" !="PVDZE_plr_Login" !="PVDZE_plr_Login2" !="PVDZE_plr_LoginRecord" !="PVDZE_plr_DiscRem" !="BIS_effects_gepv" !="PVDZE_plr_DeathBResult" !="customRemoteMessage" !="dayzPlayerLogin" !="PVDZE_veh_Init" !="dayzTradeResult" !="PVDZE_plr_TradeMenuResult" !="PVDZE_plr_SetDate" !="PVDZE_plr_Morph2" !="PVDZE_plr_Morph" !="norrnRnoAnim" !="norrnRDead" !="PVDZE_plr_Hit" !="PVDZE_plr_HitV" !="PVDZE_plr_DelLocal" !="PVDZE_veh_Upgrade" !"player" !"PVAHR_" !="PVAH_AdminRequest" !="PVAH_WriteLogRequest" +5 !="remExField" !="remExFP" !="PVDZE_plr_TradeMenu" !="PVDZE_maintainArea" !="PVDZE_veh_Update" !="PVDZE_veh_Lock" !="PVDZE_plr_DeathB" !="PVDZE_obj_Publish" !="PVDZE_obj_Swap" !="PVDZE_plr_Save" !="PVDZE_obj_Delete" !="PVDZE_veh_SFix" !="PVDZE_obj_Trade" !="PVDZE_veh_Publish2" !="PVDZE_send" !="usecBleed" !="PVDZE_plr_Died" !="PVDZE_zed_Spawn" !="drn_DynamicWeather_DebugTextEventArgs" !="drn_AskServerDynamicWeatherEventArgs" !="drn_DynamicWeatherEventArgs" !="drn_var_DynamicWeather_Rain" !="drn_var_DynamicWeather_ServerInitialized" !="norrnRACarUp" !="norrnRAPicUp" !="norrnRaDrag" !="norrnR180" !="norrnRalie" !="norrnRLact" !="norrnRALW" !="norrinRAlie" !="atp" !="PVDZE_plr_Login" !="PVDZE_plr_Login2" !="PVDZE_plr_LoginRecord" !="PVDZE_plr_DiscRem" !="BIS_effects_gepv" !="PVDZE_plr_DeathBResult" !="customRemoteMessage" !="dayzPlayerLogin" !="PVDZE_veh_Init" !="dayzTradeResult" !="PVDZE_plr_TradeMenuResult" !="PVDZE_plr_SetDate" !="PVDZE_plr_Morph2" !="PVDZE_plr_Morph" !="norrnRnoAnim" !="norrnRDead" !="PVDZE_plr_Hit" !="PVDZE_plr_HitV" !="PVDZE_plr_DelLocal" !="PVDZE_veh_Upgrade" !"player" !"PVAHR_" !="PVAH_AdminRequest" !="PVAH_WriteLogRequest" 5 PVAHR_ //!PVAHR_0 !PVAHR_1 !PVAHR_2 !PVAHR_3 !PVAHR_4 !PVAHR_5 !PVAHR_6 !PVAHR_7 !PVAHR_8 !PVAHR_9 5 "HangenderRE" 5 "vilegaming"