Advertisement
Brenner650

ExileServer_system_trading_network_purchaseVehicleRequest.sq

Oct 27th, 2018
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.13 KB | None | 0 0
  1.  
  2. /**
  3.  * ExileServer_system_trading_network_purchaseVehicleRequest
  4.  *
  5.  * Exile Mod
  6.  * www.exilemod.com
  7.  * © 2015 Exile Mod Team
  8.  *
  9.  * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
  10.  * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
  11.  *
  12.  * Changes by Xine (Untriel) idea from krwtt and posted by BetterDeadThanZed
  13.  */
  14.  
  15. private["_sessionID","_parameters","_vehicleClass","_pinCode","_playerObject","_salesPrice","_playerMoney","_position","_vehicleObject","_logging","_traderLog","_responseCode"];
  16. _sessionID = _this select 0;
  17. _parameters = _this select 1;
  18. _vehicleClass = _parameters select 0;
  19. _pinCode = _parameters select 1;
  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.     _spawnObject    = "Land_HelipadEmpty_F"; // the object you want to use for spawning, can't be a simple object
  56.     _safeRadius     = 5; // radius around the spawn object where it looks for room, must be 5 or higher
  57.     _disableCheck   = 0; // set to 1 if you don't want to check if there is a vehicle near the spawn object
  58.     _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
  59.     _dirShip        = (random 360); // set rotation of ship vehicle spawning, default = random
  60.     _dirAir         = (random 360); // set rotation of air vehicle spawning, default = random
  61.     _dirOther       = (random 360); // set rotation of all other vehicles spawning, default = random
  62.     _errorMessage   = "There is no room to safely spawn this vehicle!"; // (toast)message to player when there is no room to spawn
  63.  
  64.     _nObject = nearestObject [(getPosATL _playerObject), _spawnObject];
  65.     _throwError = 0;
  66.  
  67.     if (isNull _nObject) then
  68.     {
  69.         if (_vehicleClass isKindOf "Ship") then
  70.         {
  71.             _position = [(getPosATL _playerObject), 80, 10] call ExileClient_util_world_findWaterPosition;
  72.             if (_position isEqualTo []) then
  73.             {
  74.                 throw 13;
  75.             };
  76.             _vehicleObject = [_vehicleClass, _position, (random 360), false, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  77.         }
  78.         else
  79.         {
  80.             _position = (getPos _playerObject) findEmptyPosition [10, 175, _vehicleClass];
  81.             if (_position isEqualTo []) then
  82.             {
  83.                 throw 13;
  84.             };
  85.             _vehicleObject = [_vehicleClass, _position, (random 360), true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  86.         };
  87.     }
  88.     else
  89.     {
  90.         _position = getPos _nObject;
  91.  
  92.         if (_position isEqualTo []) then
  93.         {
  94.             [_sessionID, "toastRequest", ["ErrorTitleAndText", ["Error: Unable to get the position of the Spawn Object."]]] call ExileServer_system_network_send_to;
  95.             _throwError = 1;
  96.         };
  97.  
  98.         if (_disableCheck isEqualTo 1) then
  99.         {
  100.             switch (true) do {
  101.                 case (_vehicleClass isKindOf "Ship"): {
  102.                     _vehicleObject = [_vehicleClass, _position, _dirShip, false, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  103.                 };
  104.                 case (_vehicleClass isKindOf "Air"): {
  105.                     _vehicleObject = [_vehicleClass, _position, _dirAir, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  106.                 };
  107.                 default {
  108.                     _vehicleObject = [_vehicleClass, _position, _dirOther, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  109.                 };
  110.             };
  111.         }
  112.         else
  113.         {
  114.             _findEmpty = _position findEmptyPosition [0, _safeRadius, _vehicleClass];
  115.             if (_findEmpty isEqualTo []) then
  116.             {
  117.                 [_sessionID, "toastRequest", ["ErrorTitleAndText", [_errorMessage]]] call ExileServer_system_network_send_to;
  118.                 _throwError = 1;
  119.             }
  120.             else
  121.             {
  122.                 _isEmpty = _findEmpty isFlatEmpty [-1, -1, -1, -1, -1, false, _nObject];
  123.                 if (_isEmpty isEqualTo []) then
  124.                 {
  125.                     [_sessionID, "toastRequest", ["ErrorTitleAndText", [_errorMessage]]] call ExileServer_system_network_send_to;
  126.                     _throwError = 1;
  127.                 }
  128.                 else
  129.                 {
  130.                     switch (true) do {
  131.                         case (_vehicleClass isKindOf "Ship"): {
  132.                             if (_disableRadius isEqualTo 1) then
  133.                             {
  134.                                 _vehicleObject = [_vehicleClass, _position, _dirShip, false, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  135.                             }
  136.                             else
  137.                             {
  138.                                 _vehicleObject = [_vehicleClass, _findEmpty, _dirShip, false, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  139.                             };
  140.                         };
  141.                         case (_vehicleClass isKindOf "Air"): {
  142.                             if (_disableRadius isEqualTo 1) then
  143.                             {
  144.                                 _vehicleObject = [_vehicleClass, _position, _dirAir, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  145.                             }
  146.                             else
  147.                             {
  148.                                 _vehicleObject = [_vehicleClass, _findEmpty, _dirAir, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  149.                             };
  150.                         };
  151.                         default {
  152.                             if (_disableRadius isEqualTo 1) then
  153.                             {
  154.                                 _vehicleObject = [_vehicleClass, _position, _dirOther, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  155.                             }
  156.                             else
  157.                             {
  158.                                 _vehicleObject = [_vehicleClass, _findEmpty, _dirOther, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  159.                             };
  160.                         };
  161.                     };
  162.                 };
  163.             };
  164.         };
  165.     };
  166.  
  167.     if (_throwError isEqualTo 0) then
  168.     {
  169.         _vehicleObject setVariable ["ExileOwnerUID", (getPlayerUID _playerObject)];
  170.         _vehicleObject setVariable ["ExileIsLocked",0];
  171.         _vehicleObject lock 0;
  172.         _vehicleObject call ExileServer_object_vehicle_database_insert;
  173.         _vehicleObject call ExileServer_object_vehicle_database_update;
  174.         _playerMoney = _playerMoney - _salesPrice;
  175.         _playerObject setVariable ["ExileMoney", _playerMoney, true];
  176.         format["setPlayerMoney:%1:%2", _playerMoney, _playerObject getVariable ["ExileDatabaseID", 0]] call ExileServer_system_database_query_fireAndForget;
  177.         [_sessionID, "purchaseVehicleResponse", [0, netId _vehicleObject, _salesPrice]] call ExileServer_system_network_send_to;
  178.         _logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "traderLogging");
  179.         if (_logging isEqualTo 1) then
  180.         {
  181.             _traderLog = format ["PLAYER: ( %1 ) %2 PURCHASED VEHICLE %3 FOR %4 POPTABS | PLAYER TOTAL MONEY: %5",getPlayerUID _playerObject,_playerObject,_vehicleClass,_salesPrice,_playerMoney];
  182.             "extDB2" callExtension format["1:TRADING:%1",_traderLog];
  183.         };
  184.     };
  185. }
  186. catch
  187. {
  188.     _responseCode = _exception;
  189.     [_sessionID, "purchaseVehicleResponse", [_responseCode, "", 0]] call ExileServer_system_network_send_to;
  190. };
  191. if !(isNull _playerObject) then
  192. {
  193.     _playerObject setVariable ["ExileMutex", false];
  194. };
  195. true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement