zeuskkc

Vehicle Spawning System For Motley

Oct 10th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.58 KB | None | 0 0
  1. const constVehicleLife = 10; // Seconds
  2. const constVehicleMaxOccupants = 8;
  3.  
  4. _Vehicle <- {};
  5.  
  6. /* class */
  7. class CVehicle {
  8.     instance = null;
  9.     lastUsed = null;
  10.     creationTime = null;
  11.    
  12.     constructor( veh )
  13.     {
  14.         if ( typeof(veh) != "instance" ) return;
  15.        
  16.         this.instance = veh;
  17.         this.creationTime = ::time();
  18.     }
  19. };
  20. /* end of classes */
  21.  
  22. /* functions */
  23. function getPreviouslySpawnedVehicle( player ) {
  24.     /* eject any occupeant inside the vehicle */
  25.     for( local i = 1; i <= constVehicleMaxOccupants; i++ )
  26.     {
  27.         local Occupant = _Vehicle.rawget( player.ID ).instance.GetOccupant( i );
  28.         if ( Occupant != null )
  29.         {
  30.             Occupant.Eject();
  31.             MessagePlayer( "The vehicle belongs to someone else, use /vehicle to spawn your own vehicle.", Occupant );
  32.         }
  33.     }
  34.    
  35.     _Vehicle.rawget( player.ID ).instance.Pos = player.Pos;
  36.     player.Vehicle = _Vehicle.rawget( player.ID ).instance;
  37. }
  38.  
  39. function removePreviouslySpawnedVehicle( player ) {
  40.     /* eject any occupeant inside the vehicle */
  41.     for( local i = 1; i <= constVehicleMaxOccupants; i++ )
  42.     {
  43.         local Occupant = _Vehicle.rawget( player.ID ).instance.GetOccupant( i );
  44.         if ( Occupant != null )
  45.         {
  46.             Occupant.Eject();
  47.             MessagePlayer( "The vehicle belongs to someone else, use /vehicle to spawn your own vehicle.", Occupant );
  48.         }
  49.     }
  50.     _Vehicle.rawget( player.ID ).instance.Remove();
  51.     _Vehicle.rawdelete( player.ID );
  52. }
  53.  
  54. function processVehicles() {
  55.     foreach( idx, veh in _Vehicles )
  56.     {
  57.         if ( ( time() - veh.lastUsed ) < constVehicleLife ) continue;
  58.        
  59.         if ( veh.instance.Driver != null ) continue;
  60.        
  61.         veh.instance.Remove();
  62.         _Vehicle.rawdelete( idx );
  63.     }
  64. }
  65.  
  66. /* events processor */
  67. function processVehicleCommands( player, cmd, text )
  68. {
  69.     switch( cmd )
  70.     {
  71.         case "car":
  72.         case "veh":
  73.             if ( player.Vehicle ) return MessagePlayer( "You must not be in a vehicle in order to use this command.", player );
  74.            
  75.             if ( _Vehicle.rawin( player.ID ) && ( time() - _Vehicle.rawget( player.ID ).creationTime ) >= constVehicleLife )
  76.             {
  77.                 getPreviouslySpawnedVehicle( player );
  78.                 return MessagePlayer( "You can spawn new vehicle in "+( time() - _Vehicle.rawget( player.ID ).creationTime )+" seconds, bringing previously spawned vehicle.", player);
  79.             }
  80.            
  81.             if ( !text ) return MessagePlayer( "/vehicle [130-236]", player );
  82.             if ( !IsNum( text ) ) return MessagePlayer( "/vehicle [130-236]", player );
  83.            
  84.             local model = text.tointeger();
  85.            
  86.             if ( model < 130 || model > 236 ) return MessagePlayer("/vehicle [130-236]", player);
  87.             if ( restrictedVehicle( model ) ) return MessagePlayer( "You can't spawn this vehicle", player );
  88.            
  89.             if ( _Vehicle.rawin( player.ID ) &&  _Vehicle.rawget( player.ID ).instance.Model == model )
  90.             {
  91.                 getPreviouslySpawnedVehicle( player );
  92.                 return MessagePlayer( "The model is same as the previously spawned vehicle, bringing previously spawned vehicle.", player);
  93.             }
  94.            
  95.             if ( _Vehicle.rawin( player.ID ) ) removePreviouslySpawnedVehicle( player );
  96.            
  97.             local veh = CreateVehicle( model, player.Pos, player.Angle, -1, -1 ); /* vehicle creation */
  98.             _Vehicle.rawset( player.ID, CVehicle( veh ) );
  99.             player.Vehicle = veh;
  100.  
  101.             return MessagePlayer("Vehicle Spawned: " + GetVehicleNameFromModel( model ), player );
  102.         break;
  103.     }
  104. }
  105.  
  106. function processPlayerExitVehicle( player, vehicle )
  107. {
  108.     foreach( veh in _Vehicle )
  109.     {
  110.         if ( veh.instance.ID != vehicle.ID ) continue;
  111.        
  112.         _Vehicle.rawget( player.ID ).lastUsed = time();
  113.     }
  114. }
  115.  
  116. function onPlayerPart( player, reason )
  117. {
  118.     if ( !_Vehicle.rawin( player.ID ) ) return;
  119.    
  120.     removePreviouslySpawnedVehicle( player );
  121. }
Add Comment
Please, Sign In to add comment