From b6ffa37c1bc0cd918d39360cd3ed45f07adfdc22 Mon Sep 17 00:00:00 2001 From: icomrade Date: Fri, 12 Aug 2016 22:14:52 -0400 Subject: [PATCH] Should fix #1733 --- SQF/dayz_server/init/adminmenu.sqf | 46 +++ SQF/dayz_server/init/server_functions.sqf | 3 +- SQF/dayz_server/init/server_init.fsm | 330 ++++++++++++++++++++++ SQF/dayz_server/system/server_monitor.sqf | 1 + 4 files changed, 379 insertions(+), 1 deletion(-) create mode 100644 SQF/dayz_server/init/adminmenu.sqf create mode 100644 SQF/dayz_server/init/server_init.fsm diff --git a/SQF/dayz_server/init/adminmenu.sqf b/SQF/dayz_server/init/adminmenu.sqf new file mode 100644 index 000000000..ce0301ede --- /dev/null +++ b/SQF/dayz_server/init/adminmenu.sqf @@ -0,0 +1,46 @@ +serverSpawnVehicle = { + private ["_class","_dir","_id","_pos","_vehicle"]; + _pos = _this select 0; + _dir = _this select 1; + _class = _this select 2; + _dis = if (_class isKindOf "Air") then {8} else {5}; + _pos = [(_pos select 0) + _dis * sin _dir,(_pos select 1) + _dis * cos _dir,_pos select 2]; + + _vehicle = createVehicle [_class,_pos,[],10,"NONE"]; + _id = str ceil (random 999999); + _vehicle setVariable ["CharacterID",_id,true]; + _vehicle setVariable ["lastUpdate",time,true]; + _vehicle setVariable ["ObjectID",_id,true]; + _vehicle setVariable ["ObjectUID",_id,true]; + _vehicle setVehicleLock "UNLOCKED"; + dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_vehicle]; + clearBackpackCargoGlobal _vehicle; + clearMagazineCargoGlobal _vehicle; + clearWeaponCargoGlobal _vehicle; +}; + +"PVDZ_serverCall" addPublicVariableEventHandler { + private ["_admins","_caller","_params","_rpt","_type","_uid","_value"]; + + _admins = ["76561198155008038","76561197999482893"]; + _value = _this select 1; + _caller = _value select 0; + _type = _value select 1; + _params = if (count _value > 2) then {_value select 2} else {[]}; + _uid = getPlayerUID _caller; + + if (_uid in _admins) then { + _rpt = "Authorized admin execute"; + serverReturn = true; + switch (_type) do { + case 0: {_type = "start";}; + case 1: {_type = "spawn vehicle"; [getPos _caller,getDir _caller,_params] call serverSpawnVehicle;}; + }; + } else { + _rpt = "Unauthorized admin execute attempt"; + serverReturn = false; + }; + _rpt = _rpt + format[" by %1(%2): %3",if (alive _caller) then {name _caller} else {"Unknown"},_uid,_type]; + diag_log _rpt; + if (_type == "start") then {(owner _caller) publicVariableClient "serverReturn"}; +}; \ 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 f4d41de5a..f0bbb078e 100644 --- a/SQF/dayz_server/init/server_functions.sqf +++ b/SQF/dayz_server/init/server_functions.sqf @@ -273,4 +273,5 @@ server_hiveReadWriteLarge = { call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\fa_hiveMaintenance.sqf"; // Precise base building 1.0.5 -call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\kk_functions.sqf"; \ No newline at end of file +call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\kk_functions.sqf"; +#include "adminmenu.sqf" \ No newline at end of file diff --git a/SQF/dayz_server/init/server_init.fsm b/SQF/dayz_server/init/server_init.fsm new file mode 100644 index 000000000..5f519738f --- /dev/null +++ b/SQF/dayz_server/init/server_init.fsm @@ -0,0 +1,330 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"Start",0,250,-104.760094,-181.497162,-14.760086,-131.497162,0.000000,"Start"}; +item1[] = {"inited",4,218,-103.953484,-78.981430,-13.953476,-28.981430,0.000000,"inited"}; +item2[] = {"Server_Functions",2,250,-107.015732,-12.949921,-17.015717,37.050079,0.000000,"Server Functions"}; +link0[] = {0,1}; +link1[] = {1,2}; +globals[] = {0.000000,0,0,0,0,640,480,1,6,6316128,1,-265.558594,265.554321,134.962708,-365.217285,1229,1244,1}; +window[] = {2,-1,-1,-1,-1,1128,-22,2558,126,3,1247}; +*//*%FSM*/ +class FSM +{ + fsmName = "DayZ Server Init"; + class States + { + /*%FSM*/ + class Start + { + name = "Start"; + itemno = 0; + init = /*%FSM*/"#include ""\z\addons\dayz_server\compile\server_toggle_debug.hpp""" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class inited + { + itemno = 1; + priority = 0.000000; + to="Server_Functions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"isServer && !isNil ""bis_fnc_init"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Server_Functions + { + name = "Server_Functions"; + itemno = 2; + init = /*%FSM*/"BIS_MPF_remoteExecutionServer = {" \n + " if ((_this select 1) select 2 == ""JIPrequest"") then {" \n + " [nil,(_this select 1) select 0,""loc"",rJIPEXEC,[any,any,""per"",""execVM"",""ca\Modules\Functions\init.sqf""]] call RE;" \n + " };" \n + "};" \n + "" \n + "call compile preprocessFileLineNumbers ""\z\addons\dayz_code\util\compile.sqf"";" \n + "call compile preprocessFileLineNumbers ""\z\addons\dayz_code\loot\compile.sqf"";" \n + "" \n + "BIS_Effects_Burn = {};" \n + "dayz_disconnectPlayers = [];" \n + "server_playerLogin = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_playerLogin.sqf"";" \n + "server_playerSetup = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_playerSetup.sqf"";" \n + "server_onPlayerDisconnect = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_onPlayerDisconnect.sqf"";" \n + "server_updateObject = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_updateObject.sqf"";" \n + "server_playerDied = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_playerDied.sqf"";" \n + "server_publishObj = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_publishObject.sqf""; //Creates the object in DB" \n + "server_publishFullObject = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_publishFullObject.sqf"";" \n + "server_deleteObj = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_deleteObj.sqf""; //Removes the object from the DB" \n + "server_playerSync = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_playerSync.sqf"";" \n + "zombie_findOwner = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\zombie_findOwner.sqf"";" \n + "server_Wildgenerate = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\zombie_Wildgenerate.sqf"";" \n + "server_plantSpawner = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_plantSpawner.sqf"";" \n + "base_fireMonitor = compile preprocessFileLineNumbers ""\z\addons\dayz_code\system\fire_monitor.sqf"";" \n + "server_systemCleanup = compile preprocessFileLineNumbers ""\z\addons\dayz_server\system\server_cleanup.sqf"";" \n + "spawnComposition = compile preprocessFileLineNumbers ""ca\modules\dyno\data\scripts\objectMapper.sqf""; //""\z\addons\dayz_code\compile\object_mapper.sqf"";" \n + "server_sendToClient = compile preprocessFileLineNumbers ""\z\addons\dayz_server\eventHandlers\server_sendToClient.sqf"";" \n + "" \n + "// EPOCH ADDITIONS" \n + "server_swapObject = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_swapObject.sqf""; //Used to downgrade and upgrade Epoch buildables" \n + "server_publishVeh = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_publishVehicle.sqf""; //Used to spawn random vehicles by server" \n + "server_publishVeh2 = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_publishVehicle2.sqf""; //Used to purchase vehicles at traders" \n + "server_publishVeh3 = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_publishVehicle3.sqf""; //Used for car upgrades" \n + "server_tradeObj = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_tradeObject.sqf"";" \n + "server_traders = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_traders.sqf"";" \n + "server_spawnEvents = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_spawnEvent.sqf"";" \n + "server_deaths = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_playerDeaths.sqf"";" \n + "server_maintainArea = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_maintainArea.sqf"";" \n + "server_checkIfTowed = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_checkIfTowed.sqf"";" \n + "server_logUnlockLockEvent = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\server_logUnlockLockEvent.sqf"";" \n + "spawn_ammosupply = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\spawn_ammosupply.sqf"";" \n + "spawn_mineveins = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\spawn_mineveins.sqf"";" \n + "spawn_roadblocks = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\spawn_roadblocks.sqf"";" \n + "spawn_vehicles = compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\spawn_vehicles.sqf"";" \n + "" \n + "server_medicalSync = {" \n + " _player = _this select 0;" \n + " _array = _this select 1;" \n + " " \n + " _player setVariable [""USEC_isDead"",(_array select 0)]; //0" \n + " _player setVariable [""NORRN_unconscious"",(_array select 1)]; //1" \n + " _player setVariable [""USEC_infected"",(_array select 2)]; //2" \n + " _player setVariable [""USEC_injured"",(_array select 3)]; //3" \n + " _player setVariable [""USEC_inPain"",(_array select 4)]; //4" \n + " _player setVariable [""USEC_isCardiac"",(_array select 5)]; //5" \n + " _player setVariable [""USEC_lowBlood"",(_array select 6)]; //6" \n + " _player setVariable [""USEC_BloodQty"",(_array select 7)]; //7" \n + " // _wounds; //8" \n + " // [_legs,_arms]; //9" \n + " _player setVariable [""unconsciousTime"",(_array select 10)]; //10" \n + " _player setVariable [""blood_type"",(_array select 11)]; //11" \n + " _player setVariable [""rh_factor"",(_array select 12)]; //12" \n + " _player setVariable [""messing"",(_array select 13)]; //13" \n + " _player setVariable [""blood_testdone"",(_array select 14)]; //14" \n + "};" \n + "" \n + "dayz_Achievements = {" \n + " _achievementID = (_this select 0) select 0;" \n + " _player = (_this select 0) select 1;" \n + " _playerOwnerID = owner _player;" \n + " " \n + " _achievements = _player getVariable ""Achievements"";" \n + " _achievements set [_achievementID,1];" \n + " _player setVariable [""Achievements"",_achievements];" \n + "};" \n + "" \n + "vehicle_handleServerKilled = {" \n + " private [""_unit"",""_killer""];" \n + " _unit = _this select 0;" \n + " _killer = _this select 1;" \n + " " \n + " [_unit, ""killed""] call server_updateObject; " \n + " _unit removeAllMPEventHandlers ""MPKilled"";" \n + " _unit removeAllEventHandlers ""Killed"";" \n + " _unit removeAllEventHandlers ""HandleDamage"";" \n + " _unit removeAllEventHandlers ""GetIn"";" \n + " _unit removeAllEventHandlers ""GetOut"";" \n + "};" \n + "" \n + "check_publishobject = {" \n + " private [""_saveObject"",""_allowed"",""_allowedObjects"",""_object"",""_playername""];" \n + "" \n + " _object = _this select 0;" \n + " _playername = _this select 1;" \n + " _allowed = false;" \n + "" \n + " #ifdef OBJECT_DEBUG" \n + " diag_log format[""DEBUG: Checking if Object: %1 is allowed, published by %2"",_object,_playername];" \n + " #endif" \n + "" \n + " if ((typeOf _object) in DayZ_SafeObjects) then {" \n + " _saveObject = ""DayZ_SafeObjects"";" \n + " _allowed = true;" \n + " };" \n + " " \n + " //Buildings" \n + " if (_object isKindOf ""DZ_buildables"") then {" \n + " _saveObject = ""DZ_buildables"";" \n + " _allowed = true;" \n + " };" \n + " " \n + " #ifdef OBJECT_DEBUG" \n + " diag_log format[""DEBUG: Object: %1 published by %2 is allowed by %3"",_object,_playername,_saveObject];" \n + " #endif" \n + "" \n + " _allowed" \n + "};" \n + "" \n + "server_hiveWrite = {" \n + " private ""_data"";" \n + " //diag_log (""ATTEMPT WRITE: "" + _this);" \n + " _data = ""HiveExt"" callExtension _this;" \n + " //diag_log (""WRITE: "" +str(_data));" \n + "};" \n + "" \n + "server_hiveReadWrite = {" \n + " private [""_key"",""_resultArray"",""_data""];" \n + " _key = _this;" \n + " //diag_log (""ATTEMPT READ/WRITE: "" + _key);" \n + " _data = ""HiveExt"" callExtension _key;" \n + " //diag_log (""READ/WRITE: "" +str(_data));" \n + " _resultArray = call compile format [""%1"",_data];" \n + " _resultArray" \n + "};" \n + "" \n + "onPlayerDisconnected ""[_uid,_name] call server_onPlayerDisconnect;"";" \n + "" \n + "server_getDiff = {" \n + " private [""_variable"",""_object"",""_vNew"",""_vOld"",""_result""];" \n + " _variable = _this select 0;" \n + " _object = _this select 1;" \n + " _vNew = _object getVariable [_variable,0];" \n + " _vOld = _object getVariable [(_variable + ""_CHK""),_vNew];" \n + " _result = 0;" \n + " if (_vNew < _vOld) then {" \n + " //JIP issues" \n + " _vNew = _vNew + _vOld;" \n + " _object getVariable [(_variable + ""_CHK""),_vNew];" \n + " } else {" \n + " _result = _vNew - _vOld;" \n + " _object setVariable [(_variable + ""_CHK""),_vNew];" \n + " };" \n + " _result" \n + "};" \n + "" \n + "server_getDiff2 = {" \n + " private [""_variable"",""_object"",""_vNew"",""_vOld"",""_result""];" \n + " _variable = _this select 0;" \n + " _object = _this select 1;" \n + " _vNew = _object getVariable [_variable,0];" \n + " _vOld = _object getVariable [(_variable + ""_CHK""),_vNew];" \n + " _result = _vNew - _vOld;" \n + " _object setVariable [(_variable + ""_CHK""),_vNew];" \n + " _result" \n + "};" \n + "" \n + "// 1.8.7 dayz_objectUID2 seems to generate keys that are too long for Epoch hive. Keep old method for now." \n + "dayz_objectUID2 = {" \n + " private[""_position"",""_dir"",""_key"",""_element"",""_vector"",""_set"",""_vecCnt"",""_usedVec""];" \n + " _dir = _this select 0;" \n + " _key = """";" \n + " _position = _this select 1;" \n + " if((count _this) == 2) then{" \n + " {" \n + " _x = _x * 10;" \n + " if (_x < 0) then { _x = _x * -10 };" \n + " _key = _key + str(round(_x));" \n + " } count _position;" \n + " _key = _key + str(round(_dir));" \n + " } else {" \n + " _vector = [];" \n + " _usedVec = false;" \n + " {" \n + " _element = _x;" \n + " if(typeName _element == ""ARRAY"") then{" \n + " _vector = _element;" \n + " if((count _vector) == 2)then{" \n + " if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{" \n + " {" \n + " _x = _x * 10;" \n + " if ( _x < 0 ) then { _x = _x * -10 };" \n + " _key = _key + str(round(_x));" \n + " } count _position;" \n + "" \n + " _vecCnt = 0;" \n + " {" \n + " _set = _x;" \n + " {" \n + " _vecCnt = _vecCnt + (round (_x * 100));" \n + "" \n + " } foreach _set;" \n + "" \n + " } foreach _vector;" \n + " if(_vecCnt < 0)then{" \n + " _vecCnt = ((_vecCnt * -1) * 3);" \n + " };" \n + " _key = _key + str(_vecCnt);" \n + " _usedVec = true;" \n + " };" \n + " };" \n + " };" \n + " } count _this;" \n + "" \n + " if!(_usedVec) then{" \n + " {" \n + " _x = _x * 10;" \n + " if ( _x < 0 ) then { _x = _x * -10 };" \n + " _key = _key + str(round(_x));" \n + " } count _position;" \n + " _key = _key + str(round(_dir));" \n + " };" \n + " };" \n + " _key" \n + "};" \n + "" \n + "dayz_recordLogin = {" \n + " private [""_key"",""_status"",""_name""];" \n + " _key = format[""CHILD:103:%1:%2:%3:"",_this select 0,_this select 1,_this select 2];" \n + " _key call server_hiveWrite;" \n + " " \n + " _status = switch (1==1) do {" \n + " case ((_this select 2) == 0): { ""CLIENT LOADED & PLAYING"" };" \n + " case ((_this select 2) == 1): { ""LOGGED IN"" };" \n + " case ((_this select 2) == 2): { ""LOGGED OUT"" };" \n + " };" \n + " " \n + " _name = if (typeName (_this select 3) == ""ARRAY"") then { toString (_this select 3) } else { _this select 3 };" \n + " diag_log format[""INFO - Player: %1(UID:%3/CID:%4) Status: %2"",_name,_status,(_this select 0),(_this select 1)];" \n + "};" \n + "" \n + "dayz_reseed = {" \n + " private [""_loc"",""_i"",""_radius"",""_ref""];" \n + " _loc = _this select 0;" \n + " _ref = _this select 1;" \n + " " \n + " diag_log str(_loc);" \n + " //_lootspawner = [[10416.695, 4198.4634],[7982.2563, 1419.8256],[10795.93, 1419.8263],[7966.083, 4088.7463],[9259.7266, 2746.1985],[5200.5234, 3915.3274],[6494.1665, 2572.7798],[5216.6968, 1246.407],[2564.7244, 3915.3296],[3858.3674, 2572.782],[2580.8977, 1246.4092],[13398.995, 4400.5874],[12242.025, 2948.3196],[13551.842, 1832.2257],[14870.512, 3009.5117],[-178.19415, 1062.4478],[1099.2754, 2388.8206],[-194.36755, 3731.3679],[10394.215, 8322.1719],[7959.7759, 5543.5342],[10773.449, 5543.5342],[7943.6025, 8212.4551],[9237.2461, 6869.9063],[5178.043, 8039.0361],[6471.686, 6696.4883],[5194.2163, 5370.1152],[2542.2439, 8039.0381],[3835.887, 6696.4902],[2558.4172, 5370.1172],[13376.514, 8524.2969],[12219.544, 7072.0273],[13529.361, 5955.9336],[14848.032, 7133.2197],[-200.67474, 5186.1563],[1076.7949, 6512.5283],[-216.84814, 7855.0771],[10293.751, 12197.736],[7859.312, 9419.0996],[10672.988, 9419.0996],[7843.1387, 12088.021],[9136.7822, 10745.474],[5077.5791, 11914.601],[6371.2222, 10572.052],[5093.7524, 9245.6816],[2441.78, 11914.604],[3735.4231, 10572.055],[2457.9534, 9245.6816],[13276.053, 12399.861],[12119.08, 10947.596],[13428.897, 9831.501],[14747.566, 11008.786],[-301.13867, 9061.7207],[976.33112, 10388.096],[-317.31201, 11730.642],[10271.271, 16321.429],[7836.8315, 13542.813],[10650.506, 13542.813],[7820.6582, 16211.718],[9114.3018, 14869.175],[5055.0986, 16038.3],[6348.7417, 14695.758],[5071.272, 13369.392],[2419.2996, 16038.305],[3712.9426, 14695.76],[2435.4729, 13369.392],[13253.568, 16523.553],[12096.6, 15071.295],[13406.416, 13955.209],[14725.089, 15132.486],[-323.61914, 13185.43],[953.85059, 14511.8],[-339.79248, 15854.346]];" \n + " //{" \n + " _radius = 1500;" \n + " dayz_lootspawner = [_loc,_radius,_ref] spawn server_lootSpawner;" \n + " waitUntil {scriptDone dayz_lootspawner};" \n + " //} forEach dayz_grid;" \n + "};" \n + "" \n + "generate_new_damage = {" \n + " private ""_damage"";" \n + " _damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100;" \n + " _damage" \n + "};" \n + "" \n + "server_hiveReadWriteLarge = {" \n + " private[""_key"",""_resultArray"",""_data""];" \n + " _key = _this;" \n + " _data = ""HiveExt"" callExtension _key;" \n + " _resultArray = call compile _data;" \n + " _resultArray" \n + "};" \n + "" \n + "call compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\fa_hiveMaintenance.sqf"";" \n + "// Precise base building 1.0.5" \n + "call compile preprocessFileLineNumbers ""\z\addons\dayz_server\compile\kk_functions.sqf"";" \n + "#include ""adminmenu.sqf"""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + }; + initState="Start"; + finalStates[] = + { + }; +}; +/*%FSM*/ \ No newline at end of file diff --git a/SQF/dayz_server/system/server_monitor.sqf b/SQF/dayz_server/system/server_monitor.sqf index 0abe95396..6a2716fba 100644 --- a/SQF/dayz_server/system/server_monitor.sqf +++ b/SQF/dayz_server/system/server_monitor.sqf @@ -224,6 +224,7 @@ _respawnPos = getMarkerpos "respawn_west"; }; if (_object isKindOf "AllVehicles") then { + _object setVariable ["CharacterID", _ownerID, true]; { _selection = _x select 0; _dam = _x select 1;