From 2f178d8978ca11d6b583d26c89a39883772ac260 Mon Sep 17 00:00:00 2001 From: oiad Date: Sun, 19 Nov 2017 11:06:00 +1300 Subject: [PATCH] Consolidate weapon/magazine/backpack adding to function This moves a lot of duplicated code from a server side only function (server_addCargo) to a client/server function called fn_addCargo. --- .../actions/object_upgradeFireplace.sqf | 16 ++----- .../actions/object_upgradeStorage.sqf | 34 ++----------- SQF/dayz_code/compile/fn_addCargo.sqf | 48 +++++++++++++++++++ SQF/dayz_code/compile/player_packTent.sqf | 35 ++------------ SQF/dayz_code/compile/player_switchModel.sqf | 15 ++---- SQF/dayz_code/init/compiles.sqf | 1 + .../compile/server_handleSafeGear.sqf | 4 +- .../compile/server_publishVehicle3.sqf | 18 +++---- SQF/dayz_server/init/server_functions.sqf | 1 - 9 files changed, 76 insertions(+), 96 deletions(-) create mode 100644 SQF/dayz_code/compile/fn_addCargo.sqf diff --git a/SQF/dayz_code/actions/object_upgradeFireplace.sqf b/SQF/dayz_code/actions/object_upgradeFireplace.sqf index 269467f98..f48dadc85 100644 --- a/SQF/dayz_code/actions/object_upgradeFireplace.sqf +++ b/SQF/dayz_code/actions/object_upgradeFireplace.sqf @@ -12,7 +12,7 @@ private ["_objclass","_cursorTarget","_item","_classname","_requiredTools","_requiredParts","_upgrade","_upgradeConfig", "_upgradeDisplayname","_onLadder","_isWater","_upgradeParts","_startUpgrade","_missingPartsConfig","_textMissingParts","_dis", "_sfx","_ownerID","_objectID","_objectUID","_dir","_weapons","_magazines","_backpacks", -"_object","_objWpnTypes","_objWpnQty","_countr","_itemName","_vector","_finished"]; +"_object","_itemName","_vector","_finished"]; _cursorTarget = _this select 0; @@ -143,17 +143,9 @@ if ((_startUpgrade) AND (isClass(_upgradeConfig))) then { //Make sure player knows about the new object player reveal _object; - - //Add contents back - //Add Magazines - _objWpnTypes = _magazines select 0; - _objWpnQty = _magazines select 1; - _countr = 0; - { - _object addmagazinecargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; - } count _objWpnTypes; - + + [[],_magazines,[],_object] call fn_addCargo; + //Light fire [_object,true] call dayz_inflame; _object spawn player_fireMonitor; diff --git a/SQF/dayz_code/actions/object_upgradeStorage.sqf b/SQF/dayz_code/actions/object_upgradeStorage.sqf index b26c0aa88..7dc887ecc 100644 --- a/SQF/dayz_code/actions/object_upgradeStorage.sqf +++ b/SQF/dayz_code/actions/object_upgradeStorage.sqf @@ -12,7 +12,7 @@ dayz_actionInProgress = true; private ["_cursorTarget","_item","_classname","_requiredTools","_requiredParts","_upgrade","_upgradeConfig", "_upgradeDisplayname","_onLadder","_isWater","_upgradeParts","_startUpgrade","_missingPartsConfig","_textMissingParts","_dis", "_sfx","_ownerID","_objectID","_objectUID","_dir","_weapons","_magazines","_backpacks","_object", -"_objWpnTypes","_objWpnQty","_countr","_itemName","_vector","_playerNear","_finished"]; +"_itemName","_vector","_playerNear","_finished"]; _cursorTarget = _this select 3; @@ -152,33 +152,7 @@ if ((_startUpgrade) AND (isClass(_upgradeConfig))) then { //Make sure player knows about the new object player reveal _object; - //Add contents back - //Add Weapons - _objWpnTypes = _weapons select 0; - _objWpnQty = _weapons select 1; - _countr = 0; - { - _object addweaponcargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; - } count _objWpnTypes; - - //Add Magazines - _objWpnTypes = _magazines select 0; - _objWpnQty = _magazines select 1; - _countr = 0; - { - _object addmagazinecargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; - } count _objWpnTypes; - - //Add Backpacks - _objWpnTypes = _backpacks select 0; - _objWpnQty = _backpacks select 1; - _countr = 0; - { - _object addbackpackcargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; - } count _objWpnTypes; + [_weapons,_magazines,_backpacks,_object] call fn_addCargo; //publish new tent if (DZE_permanentPlot) then { @@ -188,7 +162,7 @@ if ((_startUpgrade) AND (isClass(_upgradeConfig))) then { PVDZ_obj_Publish = [dayz_characterID,_object,[_dir,_pos],[_weapons,_magazines,_backpacks],player,dayz_authKey]; }; publicVariableServer "PVDZ_obj_Publish"; - diag_log [diag_ticktime, __FILE__, "New Networked object, request to save to hive. PVDZ_obj_Publish:", PVDZ_obj_Publish]; + //diag_log [diag_ticktime, __FILE__, "New Networked object, request to save to hive. PVDZ_obj_Publish:", PVDZ_obj_Publish]; localize "str_upgradeDone" call dayz_rollingMessages; /* @@ -197,4 +171,4 @@ if ((_startUpgrade) AND (isClass(_upgradeConfig))) then { */ }; -dayz_actionInProgress = false; \ No newline at end of file +dayz_actionInProgress = false; diff --git a/SQF/dayz_code/compile/fn_addCargo.sqf b/SQF/dayz_code/compile/fn_addCargo.sqf new file mode 100644 index 000000000..de5c0307c --- /dev/null +++ b/SQF/dayz_code/compile/fn_addCargo.sqf @@ -0,0 +1,48 @@ +/* + Adds cargo to an object + + Parameters: + _this select 0: array - weapon cargo to add + _this select 1: array - magazine cargo to add + _this select 2: array - backpack cargo to add + _this select 3: object - object to add cargo to +*/ + +private ["_weapons","_magazines","_backpacks","_holder","_objWpnTypes","_objWpnQty","_counter"]; + +_weapons = _this select 0; +_magazines = _this select 1; +_backpacks = _this select 2; +_holder = _this select 3; + +if (count _weapons > 0) then { + _objWpnTypes = _weapons select 0; + _objWpnQty = _weapons select 1; + _counter = 0; + { + _holder addWeaponCargoGlobal [_x,(_objWpnQty select _counter)]; + _counter = _counter + 1; + } count _objWpnTypes; +}; + +if (count _magazines > 0) then { + _objWpnTypes = _magazines select 0; + _objWpnQty = _magazines select 1; + _counter = 0; + { + if (_x != "CSGAS") then { + _holder addMagazineCargoGlobal [_x,(_objWpnQty select _counter)]; + _counter = _counter + 1; + }; + } count _objWpnTypes; +}; + +if (count _backpacks > 0) then { + _objWpnTypes = _backpacks select 0; + _objWpnQty = _backpacks select 1; + _counter = 0; + { + _holder addBackpackCargoGlobal [_x,(_objWpnQty select _counter)]; + _counter = _counter + 1; + } count _objWpnTypes; +}; \ No newline at end of file diff --git a/SQF/dayz_code/compile/player_packTent.sqf b/SQF/dayz_code/compile/player_packTent.sqf index e701922ff..f334e1fc9 100644 --- a/SQF/dayz_code/compile/player_packTent.sqf +++ b/SQF/dayz_code/compile/player_packTent.sqf @@ -4,7 +4,7 @@ if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; dayz_actionInProgress = true; -private ["_alreadyPacking","_backpacks","_bag","_campItems","_countr","_dir","_holder","_magazines","_obj","_objWpnQty","_objWpnTypes","_objectID","_objectUID","_ownerID","_packobj","_playerNear","_pos","_weapons","_finished"]; +private ["_alreadyPacking","_backpacks","_bag","_campItems","_dir","_holder","_magazines","_obj","_objectID","_objectUID","_ownerID","_packobj","_playerNear","_pos","_weapons","_finished"]; _obj = _this; _ownerID = _obj getVariable["CharacterID","0"]; @@ -37,7 +37,7 @@ if (_ownerID in [dayz_characterID,dayz_playerUID] or typeOf _obj in _campItems) [player,"tentpack",0,false,20] call dayz_zombieSpeak; [player,20,true,getPosATL player] call player_alertZombies; - + _finished = ["Medic",1] call fn_loopAction; if (isNull _obj) exitWith {}; if (!_finished) exitWith {_obj setVariable["packing",0,true];}; @@ -46,7 +46,7 @@ if (_ownerID in [dayz_characterID,dayz_playerUID] or typeOf _obj in _campItems) _bag = createVehicle [_packobj, _pos, [], 0, "CAN_COLLIDE"]; _bag setDir _dir; player reveal _bag; - + _holder = createVehicle ["WeaponHolder", _pos, [], 0, "CAN_COLLIDE"]; _weapons = getWeaponCargo _obj; @@ -57,35 +57,10 @@ if (_ownerID in [dayz_characterID,dayz_playerUID] or typeOf _obj in _campItems) publicVariableServer "PVDZ_obj_Destroy"; deleteVehicle _obj; - //Add weapons - _objWpnTypes = _weapons select 0; - _objWpnQty = _weapons select 1; - _countr = 0; - { - _holder addWeaponCargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; - } count _objWpnTypes; - - //Add Magazines - _objWpnTypes = _magazines select 0; - _objWpnQty = _magazines select 1; - _countr = 0; - { - _holder addMagazineCargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; - } count _objWpnTypes; - - //Add Backpacks - _objWpnTypes = _backpacks select 0; - _objWpnQty = _backpacks select 1; - _countr = 0; - { - _holder addBackpackCargoGlobal [_x,(_objWpnQty select _countr)]; - _countr = _countr + 1; - } count _objWpnTypes; + [_weapons,_magazines,_backpacks,_holder] call fn_addCargo; localize "str_success_tent_pack" call dayz_rollingMessages; } else { localize "str_fail_tent_pack" call dayz_rollingMessages; }; -dayz_actionInProgress = false; \ No newline at end of file +dayz_actionInProgress = false; diff --git a/SQF/dayz_code/compile/player_switchModel.sqf b/SQF/dayz_code/compile/player_switchModel.sqf index 80381fd9f..7da621de9 100644 --- a/SQF/dayz_code/compile/player_switchModel.sqf +++ b/SQF/dayz_code/compile/player_switchModel.sqf @@ -1,4 +1,4 @@ -private ["_weapons","_isArray","_backpackWpn","_backpackMag","_currentWpn","_isWeapon","_isMagazine","_backpackWpnTypes","_backpackWpnQtys","_countr","_class","_position","_dir","_currentAnim","_playerUID","_countMags","_magazines","_primweapon","_secweapon","_newBackpackType","_muzzles","_oldUnit","_group","_newUnit","_oldGroup","_idc","_display","_switchUnit","_leader","_currentCamera"]; +private ["_weapons","_isArray","_backpackWpn","_backpackMag","_currentWpn","_isWeapon","_isMagazine","_countr","_class","_position","_dir","_currentAnim","_playerUID","_countMags","_magazines","_primweapon","_secweapon","_newBackpackType","_muzzles","_oldUnit","_group","_newUnit","_oldGroup","_idc","_display","_switchUnit","_leader","_currentCamera"]; _isArray = typeName _this == "ARRAY"; _class = if (_isArray) then {_this select 0} else {_this}; @@ -138,12 +138,6 @@ if (!isNil "_newBackpackType" && {_newBackpackType != ""}) then { //_oldBackpack = dayz_myBackpack; dayz_myBackpack = unitBackpack _newUnit; - _backpackWpnTypes = []; - _backpackWpnQtys = []; - if (count _backpackWpn > 0) then { - _backpackWpnTypes = _backpackWpn select 0; - _backpackWpnQtys = _backpackWpn select 1; - }; call _switchUnit; if (gear_done) then {sleep 0.001;}; ["1"] call gearDialog_create; @@ -172,11 +166,8 @@ if (!isNil "_newBackpackType" && {_newBackpackType != ""}) then { }; } count _backpackMag; (findDisplay 106) closeDisplay 0; - _countr = 0; - { - dayz_myBackpack addWeaponCargoGlobal [_x,(_backpackWpnQtys select _countr)]; - _countr = _countr + 1; - } count _backpackWpnTypes; + + [_backpackWpn,[],[],dayz_myBackpack] call fn_addCargo; } else { call _switchUnit; }; diff --git a/SQF/dayz_code/init/compiles.sqf b/SQF/dayz_code/init/compiles.sqf index 18236991e..e1d6e42b6 100644 --- a/SQF/dayz_code/init/compiles.sqf +++ b/SQF/dayz_code/init/compiles.sqf @@ -21,6 +21,7 @@ if (!isDedicated) then { fn_exitSwim = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_exitSwim.sqf"; fn_loopAction = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_loopAction.sqf"; fn_nearWaterHole = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_nearWaterHole.sqf"; + fn_addCargo = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_addCargo.sqf"; player_zombieCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieCheck.sqf"; //Run on a players computer, checks if the player is near a zombie player_zombieAttack = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieAttack.sqf"; //Run on a players computer, causes a nearby zombie to attack them player_attackdelay = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_attackfsmdelay.sqf"; diff --git a/SQF/dayz_server/compile/server_handleSafeGear.sqf b/SQF/dayz_server/compile/server_handleSafeGear.sqf index 32769e66f..4c29dacfa 100644 --- a/SQF/dayz_server/compile/server_handleSafeGear.sqf +++ b/SQF/dayz_server/compile/server_handleSafeGear.sqf @@ -66,7 +66,7 @@ switch (_status) do { if (DZE_permanentPlot) then {_holder setVariable ["ownerPUID",_ownerID,true];}; deleteVehicle _obj; - [_weapons,_magazines,_backpacks,_holder] call server_addCargo; + [_weapons,_magazines,_backpacks,_holder] call fn_addCargo; }; case 1: { //Locking _lockedClass = getText (configFile >> "CfgVehicles" >> _type >> "lockedClass"); @@ -110,7 +110,7 @@ switch (_status) do { _holder setDir _dir; _holder setPosATL _pos; _holder addMagazineCargoGlobal [getText(configFile >> "CfgVehicles" >> _packedClass >> "seedItem"),1]; - [_weapons,_magazines,_backpacks,_holder] call server_addCargo; + [_weapons,_magazines,_backpacks,_holder] call fn_addCargo; // Delete safe from database [_objectID,_objectUID] call server_deleteObjDirect; diff --git a/SQF/dayz_server/compile/server_publishVehicle3.sqf b/SQF/dayz_server/compile/server_publishVehicle3.sqf index 752804540..74ba4ddfb 100644 --- a/SQF/dayz_server/compile/server_publishVehicle3.sqf +++ b/SQF/dayz_server/compile/server_publishVehicle3.sqf @@ -69,12 +69,12 @@ if (_outcome != "PASS") then { #endif // add items from previous vehicle here - _weapons = getWeaponCargo _object; - _magazines = getMagazineCargo _object; - _backpacks = getBackpackCargo _object; + _weapons = getWeaponCargo _object; + _magazines = getMagazineCargo _object; + _backpacks = getBackpackCargo _object; - clearWeaponCargoGlobal _object; - clearMagazineCargoGlobal _object; + clearWeaponCargoGlobal _object; + clearMagazineCargoGlobal _object; clearBackpackCargoGlobal _object; deleteVehicle _object; @@ -85,7 +85,7 @@ if (_outcome != "PASS") then { // switch var to new vehicle at this point. _object = _newobject; - + _object setVariable ["ObjectID", _oid, true]; _object setVariable ["lastUpdate",diag_tickTime]; _object setVariable ["CharacterID", _characterID, true]; @@ -94,8 +94,8 @@ if (_outcome != "PASS") then { _object setDir _dir; _object setPosATL _location; _object setVectorUp surfaceNormal _location; - - [_weapons,_magazines,_backpacks,_object] call server_addCargo; + + [_weapons,_magazines,_backpacks,_object] call fn_addCargo; _object call fnc_veh_ResetEH; // for non JIP users this should make sure everyone has eventhandlers for vehicles. @@ -106,4 +106,4 @@ if (_outcome != "PASS") then { (owner _activatingPlayer) publicVariableClient "dze_waiting"; diag_log format["PUBLISH: %1(%2) upgraded %3 with UID %4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,(_location call fa_coor2str)]; -}; \ 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 d2cc46291..3614618dc 100644 --- a/SQF/dayz_server/init/server_functions.sqf +++ b/SQF/dayz_server/init/server_functions.sqf @@ -36,7 +36,6 @@ server_sendToClient = compile preprocessFileLineNumbers "\z\addons\dayz_server\e server_verifySender = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_verifySender.sqf"; // EPOCH ADDITIONS -server_addCargo = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_addCargo.sqf"; server_swapObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_swapObject.sqf"; //Used to downgrade and upgrade Epoch buildables server_publishVeh = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle.sqf"; //Used to spawn random vehicles by server server_publishVeh2 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle2.sqf"; //Used to purchase vehicles at traders