Advertisement
Guest User

GTA Vehicle Spawning

a guest
Jan 23rd, 2017
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function load_model(iParam0)//Position - 0x1339
  2. {
  3.     return STREAMING.IS_MODEL_A_VEHICLE(iParam0)
  4.             ? (STREAMING.REQUEST_MODEL(iParam0), STREAMING.HAS_MODEL_LOADED(iParam0))
  5.             : 0
  6.             ;
  7. }
  8. function spawn_vehicle(model, options = {}) {
  9.     _.defaults(options, {
  10.         model: _.isString(model) ? joaat(model) : model,
  11.         pedid: pedid(),
  12.         coords: getCoords(options.pedid || pedid()),
  13.         heading: getHeading(options.pedid || pedid()),
  14.         forward: 5,
  15.         up: 0,
  16.         clearArea: false,
  17.         netHandle: true,
  18.         p6: true,
  19.         networkedEntity: true,
  20.         allMachines: true,
  21.         stolen: false,
  22.         openDoors: false,
  23.         iParam5: false,
  24.     });
  25.  
  26.     if (!model)
  27.         return "Help: [model, options]\n" + JSON.stringify(options, null, 4);
  28.  
  29.     if (!load_model(options.model)) {
  30.         console.log("couldn't load model " + options.model + "");
  31.         return false;
  32.     }
  33.  
  34.     if (options.clear)
  35.         GAMEPLAY.CLEAR_AREA_OF_VEHICLES(options.options.coords, 1.0, 0, 0, 1, 1, true);
  36.  
  37.     var v = VEHICLE.CREATE_VEHICLE(options.model, options.coords.x, options.coords.y, options.coords.z, options.heading, !!options.netHandle, !!options.p6);
  38.     console.info("Laz-e-log: options.model, options.coords, options.heading, options.netHandle, options.p6", options.model, options.coords, options.heading, options.netHandle, options.p6);
  39.     console.log("v(" + options.model + ") = " + v + "");
  40.     window.__veh = v;
  41.     var net_id = NETWORK.VEH_TO_NET(v);
  42.     if (NETWORK.NETWORK_DOES_NETWORK_ID_EXIST(net_id))
  43.     {
  44.         ENTITY._NETWORK_SET_ENTITY_AS_NETWORKED_ENTITY(v, options.networkedEntity);  // Hashes: 0x3910051CCECDB00C
  45.  
  46.         // if (NETWORK.NETWORK_GET_ENTITY_IS_NETWORKED(v))   // NETWORK._0XC7827959479DCC78
  47.         if (NETWORK._0xC7827959479DCC78(v))   // NETWORK._0XC7827959479DCC78
  48.         {
  49.             if (options.allMachines)
  50.             {
  51.                 // void SET_NETWORK_ID_EXISTS_ON_ALL_MACHINES(int netId, BOOL toggle)
  52.                 NETWORK.SET_NETWORK_ID_EXISTS_ON_ALL_MACHINES(net_id, 1);
  53.             }
  54.             else
  55.             {
  56.                 // void SET_NETWORK_ID_EXISTS_ON_ALL_MACHINES(int netId, BOOL toggle)
  57.                 NETWORK.SET_NETWORK_ID_EXISTS_ON_ALL_MACHINES(net_id, 0);
  58.             }
  59.         }
  60.         VEHICLE.SET_VEHICLE_IS_STOLEN(v, options.stolen);
  61.         // unk_0xB2E0C0D6922D31F2(v, 1);
  62.         // @invokePerform: (name, hash, resultType, paramTypes, args) ->
  63.         Native.invokePerform(
  64.             "unk_0xB2E0C0D6922D31F2",
  65.             "0xB2E0C0D6922D31F2",
  66.             "void",
  67.             [{
  68.                 "type": "int",
  69.                 "name": "p1"
  70.             }, {
  71.                 "type": "int",
  72.                 "name": "p2"
  73.             }],
  74.             [v, 1]
  75.         );
  76.  
  77.         if (options.openDoors)
  78.         {
  79.             // unk_0xFC40CBF7B90CA77C(v);
  80.             Native.invokePerform(
  81.                 "unk_0xFC40CBF7B90CA77C",
  82.                 "0xFC40CBF7B90CA77C",
  83.                 "void",
  84.                 [{
  85.                     "type": "int",
  86.                     "name": "p1"
  87.                 }],
  88.                 [v]
  89.             );
  90.  
  91.             // The trunk?!
  92.             VEHICLE.SET_VEHICLE_DOOR_CONTROL(v, 5, 5, 1.0);
  93.         }
  94.         // might be for mechanic or pegasus
  95.         if (options.iParam5)
  96.         {
  97.             ENTITY.SET_ENTITY_HEADING(NETWORK.NET_TO_VEH(net_id), heading);
  98.             ENTITY.SET_ENTITY_COORDS(NETWORK.NET_TO_VEH(net_id),
  99.                     /* Vector3 */
  100.                     ENTITY.GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(
  101.                         NETWORK.NET_TO_VEH(net_id), x = 2.0, y = 0.0, z = 0.0
  102.                     ),
  103.                     true, // invert X axis
  104.                     false,
  105.                     false,
  106.                     true  // clear area
  107.             );
  108.         }
  109.         VEHICLE.SET_VEHICLE_ON_GROUND_PROPERLY(NETWORK.NET_TO_VEH(net_id)); // , 1084227584);
  110.         DECORATOR.DECOR_SET_INT(v, "MPBitset", 0);
  111.         VEHICLE.SET_VEHICLE_HAS_BEEN_OWNED_BY_PLAYER(NETWORK.NET_TO_VEH(net_id), 1);
  112.         VEHICLE.SET_VEHICLE_AUTOMATICALLY_ATTACHES(NETWORK.NET_TO_VEH(net_id), false, 0);
  113.         // void _0x25367DE49D64CF16(Vehicle vehicle, BOOL p1)
  114.         VEHICLE._0x25367DE49D64CF16(NETWORK.NET_TO_VEH(net_id), 1);
  115.         NETWORK.SET_NETWORK_ID_CAN_MIGRATE(net_id, true);
  116.  
  117.         (function(v, model) {
  118.             start = Date.now();
  119.             function check() {
  120.                 if (VEHICLE.GET_VEHICLE_MAX_NUMBER_OF_PASSENGERS(v) || v == veh() || Date.now() > start + 60000) {
  121.                     STREAMING.SET_MODEL_AS_NO_LONGER_NEEDED(model);
  122.                     console.log("removed model " + model + "");
  123.                 } else {
  124.                     setTimeout(check, 5000);
  125.                 }
  126.             }
  127.             setTimeout(check, 2000);
  128.            
  129.         }(v, options.model));
  130.  
  131.         return v;
  132.     } else {
  133.         console.error("failed at:\n"
  134.             + "var net_id = NETWORK.VEH_TO_NET(v);\n"
  135.             + "if (NETWORK.NETWORK_DOES_NETWORK_ID_EXIST(net_id))\n;"
  136.             + "net_id: " + net_id + " v: " + v + "");
  137.         if (model)
  138.             STREAMING.SET_MODEL_AS_NO_LONGER_NEEDED(model);
  139.         return false;
  140.     }
  141.     return 0;
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement