Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2016
697
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.13 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","_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. try
  20. {
  21. _playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
  22. if (isNull _playerObject) then
  23. {
  24. throw 1;
  25. };
  26. if !(alive _playerObject) then
  27. {
  28. throw 2;
  29. };
  30. if (_playerObject getVariable ["ExileMutex",false]) then
  31. {
  32. throw 12;
  33. };
  34. _playerObject setVariable ["ExileMutex", true];
  35. if !(isClass (missionConfigFile >> "CfgExileArsenal" >> _vehicleClass) ) then
  36. {
  37. throw 3;
  38. };
  39. _salesPrice = getNumber (missionConfigFile >> "CfgExileArsenal" >> _vehicleClass >> "price");
  40. if (_salesPrice <= 0) then
  41. {
  42. throw 4;
  43. };
  44. _playerMoney = _playerObject getVariable ["ExileMoney", 0];
  45. if (_playerMoney < _salesPrice) then
  46. {
  47. throw 5;
  48. };
  49. if !((count _pinCode) isEqualTo 4) then
  50. {
  51. throw 11;
  52. };
  53.  
  54. _spawnObject = "Land_HelipadEmpty_F"; // the object you want to use for spawning, can't be a simple object
  55. _safeRadius = 5; // radius around the spawn object where it looks for room, must be 5 or higher
  56. _disableCheck = 0; // set to 1 if you don't want to check if there is a vehicle near the spawn object
  57. _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
  58. _dirShip = (random 360); // set rotation of ship vehicle spawning, default = random
  59. _dirAir = (random 360); // set rotation of air vehicle spawning, default = random
  60. _dirOther = (random 360); // set rotation of all other vehicles spawning, default = random
  61. _errorMessage = "There is no room to safely spawn this vehicle!"; // (toast)message to player when there is no room to spawn
  62.  
  63. _nObject = nearestObject [(getPosATL _playerObject), _spawnObject];
  64. _throwError = 0;
  65.  
  66. if (isNull _nObject) then
  67. {
  68. if (_vehicleClass isKindOf "Ship") then
  69. {
  70. _position = [(getPosATL _playerObject), 80, 10] call ExileClient_util_world_findWaterPosition;
  71. if (_position isEqualTo []) then
  72. {
  73. throw 13;
  74. };
  75. _vehicleObject = [_vehicleClass, _position, (random 360), false, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  76. }
  77. else
  78. {
  79. _position = (getPos _playerObject) findEmptyPosition [10, 175, _vehicleClass];
  80. if (_position isEqualTo []) then
  81. {
  82. throw 13;
  83. };
  84. _vehicleObject = [_vehicleClass, _position, (random 360), true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  85. };
  86. }
  87. else
  88. {
  89. _position = getPos _nObject;
  90.  
  91. if (_position isEqualTo []) then
  92. {
  93. [_sessionID, "toastRequest", ["ErrorTitleAndText", ["Error: Unable to get the position of the Spawn Object."]]] call ExileServer_system_network_send_to;
  94. _throwError = 1;
  95. };
  96.  
  97. if (_disableCheck isEqualTo 1) then
  98. {
  99. switch (true) do {
  100. case (_vehicleClass isKindOf "Ship"): {
  101. _vehicleObject = [_vehicleClass, _position, _dirShip, false, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  102. };
  103. case (_vehicleClass isKindOf "Air"): {
  104. _vehicleObject = [_vehicleClass, _position, _dirAir, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  105. };
  106. default {
  107. _vehicleObject = [_vehicleClass, _position, _dirOther, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  108. };
  109. };
  110. }
  111. else
  112. {
  113. _findEmpty = _position findEmptyPosition [0, _safeRadius, _vehicleClass];
  114. if (_findEmpty isEqualTo []) then
  115. {
  116. [_sessionID, "toastRequest", ["ErrorTitleAndText", [_errorMessage]]] call ExileServer_system_network_send_to;
  117. _throwError = 1;
  118. }
  119. else
  120. {
  121. _isEmpty = _findEmpty isFlatEmpty [-1, -1, -1, -1, -1, false, _nObject];
  122. if (_isEmpty isEqualTo []) then
  123. {
  124. [_sessionID, "toastRequest", ["ErrorTitleAndText", [_errorMessage]]] call ExileServer_system_network_send_to;
  125. _throwError = 1;
  126. }
  127. else
  128. {
  129. switch (true) do {
  130. case (_vehicleClass isKindOf "Ship"): {
  131. if (_disableRadius isEqualTo 1) then
  132. {
  133. _vehicleObject = [_vehicleClass, _position, _dirShip, false, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  134. }
  135. else
  136. {
  137. _vehicleObject = [_vehicleClass, _findEmpty, _dirShip, false, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  138. };
  139. };
  140. case (_vehicleClass isKindOf "Air"): {
  141. if (_disableRadius isEqualTo 1) then
  142. {
  143. _vehicleObject = [_vehicleClass, _position, _dirAir, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  144. }
  145. else
  146. {
  147. _vehicleObject = [_vehicleClass, _findEmpty, _dirAir, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  148. };
  149. };
  150. default {
  151. if (_disableRadius isEqualTo 1) then
  152. {
  153. _vehicleObject = [_vehicleClass, _position, _dirOther, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  154. }
  155. else
  156. {
  157. _vehicleObject = [_vehicleClass, _findEmpty, _dirOther, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
  158. };
  159. };
  160. };
  161. };
  162. };
  163. };
  164. };
  165.  
  166. if (_throwError isEqualTo 0) then
  167. {
  168. _vehicleObject setVariable ["ExileOwnerUID", (getPlayerUID _playerObject)];
  169. _vehicleObject setVariable ["ExileIsLocked",0];
  170. _vehicleObject lock 0;
  171. _vehicleObject call ExileServer_object_vehicle_database_insert;
  172. _vehicleObject call ExileServer_object_vehicle_database_update;
  173. _playerMoney = _playerMoney - _salesPrice;
  174. _playerObject setVariable ["ExileMoney", _playerMoney, true];
  175. format["setPlayerMoney:%1:%2", _playerMoney, _playerObject getVariable ["ExileDatabaseID", 0]] call ExileServer_system_database_query_fireAndForget;
  176. [_sessionID, "purchaseVehicleResponse", [0, netId _vehicleObject, _salesPrice]] call ExileServer_system_network_send_to;
  177. _logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "traderLogging");
  178. if (_logging isEqualTo 1) then
  179. {
  180. _traderLog = format ["PLAYER: ( %1 ) %2 PURCHASED VEHICLE %3 FOR %4 POPTABS | PLAYER TOTAL MONEY: %5",getPlayerUID _playerObject,_playerObject,_vehicleClass,_salesPrice,_playerMoney];
  181. "extDB2" callExtension format["1:TRADING:%1",_traderLog];
  182. };
  183. };
  184. }
  185. catch
  186. {
  187. _responseCode = _exception;
  188. [_sessionID, "purchaseVehicleResponse", [_responseCode, "", 0]] call ExileServer_system_network_send_to;
  189. };
  190. if !(isNull _playerObject) then
  191. {
  192. _playerObject setVariable ["ExileMutex", false];
  193. };
  194. true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement