Advertisement
Guest User

server_handleSafeGear

a guest
Mar 25th, 2017
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.98 KB | None | 0 0
  1. private ["_backpacks","_charID","_clientID","_dir","_holder","_lockCode","_lockColor","_lockedClass","_magazines","_name","_obj","_objectID","_objectUID","_ownerID","_packedClass","_player","_playerUID","_pos","_status","_statusText","_type","_unlockedClass","_vector","_weapons","_message","_suppliedCode","_fnc_lockCode","_coins","_wealth"];
  2.  
  3. _player = _this select 0;
  4. _obj = _this select 1;
  5. _status = _this select 2;
  6.  
  7. _name = if (alive _player) then {name _player} else {"Dead Player"};
  8.  
  9. _type = typeOf _obj;
  10. _pos = _obj getVariable ["OEMPos",getPosATL _obj];
  11. _dir = direction _obj;
  12. _vector = [vectorDir _obj, vectorUp _obj];
  13. _charID = _obj getVariable ["CharacterID","0"];
  14. _objectID = _obj getVariable ["ObjectID","0"];
  15. _objectUID = _obj getVariable ["ObjectUID","0"];
  16. _ownerID = _obj getVariable ["ownerPUID","0"];
  17. _lockCode = _charID;
  18.  
  19. if (count _this > 3) then {
  20. _suppliedCode = _this select 3;
  21. if (_status != 3 && {_status != 6}) then {_lockCode = _suppliedCode;};
  22. };
  23.  
  24. // Player may have disconnected or died before message send. Attempt lock/unlock/pack/save procedure anyway
  25. if (isNull _player) then {diag_log "ERROR: server_handleSafeGear called with Null player object";};
  26.  
  27. _clientID = owner _player;
  28. _playerUID = getPlayerUID _player;
  29.  
  30. _statusText = switch (_status) do {
  31. case 0: {"UNLOCKED"}; // unlock safe/lockbox
  32. case 1: {"LOCKED"}; // lock safe/lockbox
  33. case 2: {"PACKED"}; // pack safe/lockbox
  34. case 3: {"FAILED unlocking"}; // failed unlock safe/lockbox
  35. case 4: {"LOCKED"}; // lock door
  36. case 5: {"UNLOCKED"}; // unlock door
  37. case 6: {"FAILED unlocking"}; // failed unlocking door
  38. };
  39.  
  40. if (isNull _obj) exitWith {
  41. diag_log format["ERROR: server_handleSafeGear called with Null object by %1 (%2). %3 attempt failed.",_name,_playerUID,_statusText];
  42. if (_status < 3) then {
  43. dze_waiting = "fail";
  44. _clientID publicVariableClient "dze_waiting";
  45. };
  46. };
  47.  
  48. switch (_status) do {
  49. case 0: { //Unlocking
  50. _unlockedClass = getText (configFile >> "CfgVehicles" >> _type >> "unlockedClass");
  51. _weapons = _obj getVariable ["WeaponCargo",[]];
  52. _magazines = _obj getVariable ["MagazineCargo",[]];
  53. _backpacks = _obj getVariable ["BackpackCargo",[]];
  54. if (Z_singleCurrency) then {_coins = _obj getVariable [Z_MoneyVariable,0];};
  55.  
  56. // Create new unlocked safe, then delete old locked safe
  57. //_holder = createVehicle [_unlockedClass,_pos,[],0,"CAN_COLLIDE"];
  58. _holder = _unlockedClass createVehicle [0,0,0];
  59. _holder setDir _dir;
  60. _holder setVariable ["memDir",_dir,true];
  61. _holder setVectorDirAndUp _vector;
  62. _holder setPosATL _pos;
  63. _holder setVariable ["CharacterID",_charID,true];
  64. _holder setVariable ["ObjectID",_objectID,true];
  65. _holder setVariable ["ObjectUID",_objectUID,true];
  66. _holder setVariable ["OEMPos",_pos,true];
  67. if (DZE_permanentPlot) then {_holder setVariable ["ownerPUID",_ownerID,true];};
  68. if (Z_singleCurrency) then {_holder setVariable [Z_MoneyVariable,_coins,true];};
  69. deleteVehicle _obj;
  70.  
  71. [_weapons,_magazines,_backpacks,_holder] call server_addCargo;
  72. };
  73. case 1: { //Locking
  74. _lockedClass = getText (configFile >> "CfgVehicles" >> _type >> "lockedClass");
  75.  
  76. // Save to database (also happens if a player is within 10m in server_playerSync and server_onPlayerDisconnect)
  77. [_obj,"gear"] call server_updateObject;
  78. _weapons = getWeaponCargo _obj;
  79. _magazines = getMagazineCargo _obj;
  80. _backpacks = getBackpackCargo _obj;
  81. if (Z_singleCurrency) then {_coins = _obj getVariable [Z_MoneyVariable,0];};
  82.  
  83. // Create new locked safe, then delete old unlocked safe
  84. //_holder = createVehicle [_lockedClass,_pos,[],0,"CAN_COLLIDE"];
  85. _holder = _lockedClass createVehicle [0,0,0];
  86. _holder setDir _dir;
  87. _holder setVariable ["memDir",_dir,true];
  88. _holder setVectorDirAndUp _vector;
  89. _holder setPosATL _pos;
  90. _holder setVariable ["CharacterID",_charID,true];
  91. _holder setVariable ["ObjectID",_objectID,true];
  92. _holder setVariable ["ObjectUID",_objectUID,true];
  93. _holder setVariable ["OEMPos",_pos,true];
  94. if (DZE_permanentPlot) then {_holder setVariable ["ownerPUID",_ownerID,true];};
  95. if (Z_singleCurrency) then {_holder setVariable [Z_MoneyVariable,_coins,true];};
  96. deleteVehicle _obj;
  97.  
  98. // Local setVariable gear onto new locked safe for easy access on next unlock
  99. // Do not send big arrays over network! Only server needs these
  100. _holder setVariable ["WeaponCargo",_weapons,false];
  101. _holder setVariable ["MagazineCargo",_magazines,false];
  102. _holder setVariable ["BackpackCargo",_backpacks,false];
  103. };
  104. case 2: { //Packing
  105. _packedClass = getText (configFile >> "CfgVehicles" >> _type >> "packedClass");
  106. _weapons = getWeaponCargo _obj;
  107. _magazines = getMagazineCargo _obj;
  108. _backpacks = getBackpackCargo _obj;
  109. if (Z_singleCurrency) then {_coins = _obj getVariable [Z_MoneyVariable,0];};
  110.  
  111. //_holder = createVehicle [_packedClass,_pos,[],0,"CAN_COLLIDE"];
  112. _holder = _packedClass createVehicle [0,0,0];
  113. deleteVehicle _obj;
  114. _holder setDir _dir;
  115. _holder setPosATL _pos;
  116. _holder addMagazineCargoGlobal [getText(configFile >> "CfgVehicles" >> _packedClass >> "seedItem"),1];
  117. [_weapons,_magazines,_backpacks,_holder] call server_addCargo;
  118. if (Z_singleCurrency && {_coins > 0}) then {
  119. _wealth = _player getVariable [Z_MoneyVariable,0];
  120. _player setVariable [Z_MoneyVariable,_wealth + _coins,true];
  121.  
  122. RemoteMessage = ["private",[_playerUID,format ["You packed %1 while it had %2 %3 in it, it has been transferred to your %3 total.",_type,[_coins] call BIS_fnc_numberText,CurrencyName]]];
  123. publicVariable "RemoteMessage";
  124. };
  125.  
  126. // Delete safe from database
  127. [_objectID,_objectUID,_player] call server_deleteObj;
  128. };
  129. };
  130.  
  131. _fnc_lockCode = {
  132. private ["_color","_code"];
  133.  
  134. if (_this == "") exitWith {0};
  135. _color = "";
  136. _code = if (typeName _this == "STRING") then {parseNumber _this} else {_this};
  137. _code = _code - 10000;
  138.  
  139. if (_code <= 99) then {_color = localize "STR_TEAM_RED";};
  140. if (_code >= 100 && _code <= 199) then {_color = localize "STR_TEAM_GREEN"; _code = _code - 100;};
  141. if (_code >= 200) then {_color = localize "STR_TEAM_BLUE"; _code = _code - 200;};
  142. if (_code <= 9) then {_code = format["0%1", _code];};
  143. _code = format ["%1%2",_color,_code];
  144.  
  145. _code
  146. };
  147.  
  148. if (_status < 4) then {
  149. _type = switch _type do {
  150. case "VaultStorage";
  151. case "VaultStorageLocked": {
  152. "Safe"
  153. };
  154. case "LockboxStorage";
  155. case "LockboxStorageLocked": {
  156. _lockCode = _charID call _fnc_lockCode;
  157. if (_status == 3) then {_suppliedCode = _suppliedCode call _fnc_lockCode;};
  158. "LockBox"
  159. };
  160. };
  161. };
  162.  
  163. if (_statusText == "FAILED unlocking") then {
  164. _message = format["%1 (%2) %3 %4 with code: %5 (actual: %8) @%6 %7",_name,_playerUID,_statusText,_type,_suppliedCode,mapGridPosition _pos,_pos,_lockCode];
  165. } else {
  166. _message = format["%1 (%2) %3 %4 with code: %5 @%6 %7",_name,_playerUID,_statusText,_type,_lockCode,mapGridPosition _pos,_pos];
  167. };
  168.  
  169. diag_log _message;
  170. if (_status < 3) then {
  171. dze_waiting = "success";
  172. _clientID publicVariableClient "dze_waiting";
  173. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement