Guest User

ExileServer_system_trading_network_purchaseVehicleRequest

a guest
Jul 26th, 2018
551
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQF 7.92 KB | None | 0 0
  1. /**
  2.  * ExileServer_system_trading_network_purchaseVehicleRequest
  3.  *
  4.  * Exile Mod
  5.  * www.exilemod.com
  6.  * © 2015 Exile Mod Team
  7.  *
  8.  * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
  9.  * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
  10.  *
  11.  * Changes by Xine (Untriel) idea from krwtt and posted by BetterDeadThanZed
  12.  */
  13.  
  14. private["_sessionID","_parameters","_vehicleClass","_pinCode","_playerObject","_useInventory","_salesPrice","_playerMoney","_position","_vehicleObject","_logging","_traderLog","_responseCode"];
  15. _sessionID = _this select 0;
  16. _parameters = _this select 1;
  17. _vehicleClass = _parameters select 0;
  18. _pinCode = _parameters select 1;
  19. _useInventory = _parameters select 2;
  20. try
  21. {
  22.     _playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
  23.     if (isNull _playerObject) then
  24.     {
  25.         throw 1;
  26.     };
  27.     if !(alive _playerObject) then
  28.     {
  29.         throw 2;
  30.     };
  31.     if (_playerObject getVariable ["ExileMutex",false]) then
  32.     {
  33.         throw 12;
  34.     };
  35.     _playerObject setVariable ["ExileMutex", true];
  36.     if !(isClass (missionConfigFile >> "CfgExileArsenal" >> _vehicleClass) ) then
  37.     {
  38.         throw 3;
  39.     };
  40.     _salesPrice = getNumber (missionConfigFile >> "CfgExileArsenal" >> _vehicleClass >> "price");
  41.     if (_salesPrice <= 0) then
  42.     {
  43.         throw 4;
  44.     };
  45.     _playerMoney = _playerObject getVariable ["ExileMoney", 0];
  46.     if (_playerMoney < _salesPrice) then
  47.     {
  48.         throw 5;
  49.     };
  50.     if !((count _pinCode) isEqualTo 4) then
  51.     {
  52.         throw 11;
  53.     };
  54.    
  55.     if (_useInventory) then
  56.     {
  57.         _check = [ExileTraderInventory,[_vehicleClass, false]] call ExileClient_util_dictionary_get;
  58.         if (_check isEqualType false) then
  59.         {
  60.             throw 15;
  61.         };
  62.         if ((_check - 1) < 0) then
  63.         {
  64.             throw 16;
  65.         };
  66.         if ((_check - 1) < 1) then
  67.         {
  68.             ExileTraderInventory =
  69.             [ExileTraderInventory,[_vehicleClass]] call ExileClient_util_dictionary_remove;
  70.         }
  71.         else
  72.         {
  73.             ExileTraderInventory =
  74.             [ExileTraderInventory,[_vehicleClass, _check - 1]] call ExileClient_util_dictionary_set;
  75.         };
  76.         ["updateTraderInventoryResponse",[ExileTraderInventory]] call ExileServer_system_network_send_broadcast;
  77.         format["updateItemStock:%1:%2",-1, _vehicleClass] call ExileServer_system_database_query_fireAndForget;
  78.     };
  79.  
  80.     _spawnObject    = "Land_HelipadSquare_F"; // the object you want to use for spawning, can't be a simple object
  81.     _safeRadius     = 5; // radius around the spawn object where it looks for room, must be 5 or higher
  82.     _disableCheck   = 0; // set to 1 if you don't want to check if there is a vehicle near the spawn object
  83.     _disableRadius  = 0; // set to 1 if you want vehicles to only spawn at the exact coords of your spawn object, not recommended better to reduce _safeRadius
  84.     _dirShip        = (random 360); // set rotation of ship vehicle spawning, default = random
  85.     _dirAir         = 30.180;       // set rotation of air vehicle spawning, default = random
  86.     _dirOther       = (random 360); // set rotation of all other vehicles spawning, default = random
  87.     _errorMessage   = "There is no room to safely spawn this vehicle!"; // (toast)message to player when there is no room to spawn
  88.  
  89.     _nObject = nearestObject [(getPosATL _playerObject), _spawnObject];
  90.     _throwError = 0;
  91.  
  92.     if (isNull _nObject) then
  93.     {
  94.         if (_vehicleClass isKindOf "Ship") then
  95.         {
  96.             _position = [(getPosATL _playerObject), 80, 10] call ExileClient_util_world_findWaterPosition;
  97.             if (_position isEqualTo []) then
  98.             {
  99.                 throw 13;
  100.             };
  101.             _vehicleObject = [_vehicleClass, _position, (random 360), false, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  102.         }
  103.         else
  104.         {
  105.             _position = (getPos _playerObject) findEmptyPosition [10, 175, _vehicleClass];
  106.             if (_position isEqualTo []) then
  107.             {
  108.                 throw 13;
  109.             };
  110.             _vehicleObject = [_vehicleClass, _position, (random 360), true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  111.         };
  112.     }
  113.     else
  114.     {
  115.         _position = getPos _nObject;
  116.  
  117.         if (_position isEqualTo []) then
  118.         {
  119.             [_sessionID, "toastRequest", ["ErrorTitleAndText", ["Error: Unable to get the position of the Spawn Object."]]] call ExileServer_system_network_send_to;
  120.             _throwError = 1;
  121.         };
  122.  
  123.         if (_disableCheck isEqualTo 1) then
  124.         {
  125.             switch (true) do {
  126.                 case (_vehicleClass isKindOf "Ship"): {
  127.                     _vehicleObject = [_vehicleClass, _position, _dirShip, false, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  128.                 };
  129.                 case (_vehicleClass isKindOf "Air"): {
  130.                     _vehicleObject = [_vehicleClass, _position, _dirAir, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  131.                 };
  132.                 default {
  133.                     _vehicleObject = [_vehicleClass, _position, _dirOther, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  134.                 };
  135.             };
  136.         }
  137.         else
  138.         {
  139.             _findEmpty = _position findEmptyPosition [0, _safeRadius, _vehicleClass];
  140.             if (_findEmpty isEqualTo []) then
  141.             {
  142.                 [_sessionID, "toastRequest", ["ErrorTitleAndText", [_errorMessage]]] call ExileServer_system_network_send_to;
  143.                 _throwError = 1;
  144.             }
  145.             else
  146.             {
  147.                 _isEmpty = _findEmpty isFlatEmpty [-1, -1, -1, -1, -1, false, _nObject];
  148.                 if (_isEmpty isEqualTo []) then
  149.                 {
  150.                     [_sessionID, "toastRequest", ["ErrorTitleAndText", [_errorMessage]]] call ExileServer_system_network_send_to;
  151.                     _throwError = 1;
  152.                 }
  153.                 else
  154.                 {
  155.                     switch (true) do {
  156.                         case (_vehicleClass isKindOf "Ship"): {
  157.                             if (_disableRadius isEqualTo 1) then
  158.                             {
  159.                                 _vehicleObject = [_vehicleClass, _position, _dirShip, false, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  160.                             }
  161.                             else
  162.                             {
  163.                                 _vehicleObject = [_vehicleClass, _findEmpty, _dirShip, false, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  164.                             };
  165.                         };
  166.                         case (_vehicleClass isKindOf "Air"): {
  167.                             if (_disableRadius isEqualTo 1) then
  168.                             {
  169.                                 _vehicleObject = [_vehicleClass, _position, _dirAir, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  170.                             }
  171.                             else
  172.                             {
  173.                                 _vehicleObject = [_vehicleClass, _findEmpty, _dirAir, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  174.                             };
  175.                         };
  176.                         default {
  177.                             if (_disableRadius isEqualTo 1) then
  178.                             {
  179.                                 _vehicleObject = [_vehicleClass, _position, _dirOther, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  180.                             }
  181.                             else
  182.                             {
  183.                                 _vehicleObject = [_vehicleClass, _findEmpty, _dirOther, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  184.                             };
  185.                         };
  186.                     };
  187.                 };
  188.             };
  189.         };
  190.     };
  191.  
  192.     if (_throwError isEqualTo 0) then
  193.     {
  194.         _vehicleObject setVariable ["ExileOwnerUID", (getPlayerUID _playerObject)];
  195.         _vehicleObject setVariable ["ExileIsLocked",0];
  196.         _vehicleObject lock 0;
  197.         _vehicleObject call ExileServer_object_vehicle_database_insert;
  198.         _vehicleObject call ExileServer_object_vehicle_database_update;
  199.         _playerMoney = _playerMoney - _salesPrice;
  200.         _playerObject setVariable ["ExileMoney", _playerMoney, true];
  201.         format["setPlayerMoney:%1:%2", _playerMoney, _playerObject getVariable ["ExileDatabaseID", 0]] call ExileServer_system_database_query_fireAndForget;
  202.         [_sessionID, "purchaseVehicleResponse", [0, netId _vehicleObject, _salesPrice]] call ExileServer_system_network_send_to;
  203.         _logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "traderLogging");
  204.         if (_logging isEqualTo 1) then
  205.         {
  206.             _traderLog = format ["PLAYER: ( %1 ) %2 PURCHASED VEHICLE %3 FOR %4 POPTABS | PLAYER TOTAL MONEY: %5",getPlayerUID _playerObject,_playerObject,_vehicleClass,_salesPrice,_playerMoney];
  207.             "extDB2" callExtension format["1:TRADING:%1",_traderLog];
  208.         };
  209.     };
  210. }
  211. catch
  212. {
  213.     _responseCode = _exception;
  214.     [_sessionID, "purchaseVehicleResponse", [_responseCode, "", 0]] call ExileServer_system_network_send_to;
  215. };
  216. if !(isNull _playerObject) then
  217. {
  218.     _playerObject setVariable ["ExileMutex", false];
  219. };
  220. true
Advertisement
Add Comment
Please, Sign In to add comment