I didn't really see a problem with timers, in fact there are only 7 in the entire script and only 2 of which will be used regularly. The on onPlayerJoin is justifiable, it's a necessary part of most scripts otherwise in a full server people will miss any messages given to them when they join. The one onPlayerEnterVehicle can go.
But yeah, the use of SQLite is way way too high, there are 57 queries in the script, you can probably minimise it to about 10.
As Thijn said, cars and props should be in array entries.
Other than that though, it is a very good effort at making a script. You're really getting better and you're almost there.
One other small thing I noticed, your DecCash and IncCash functions can be simplified by using the -= and += operators. Also, you use player.ID a lot. It's better to assign it into a separate variable like 'id' so that you don't keep calling player.ID. It's just a simple bit of optimisation.
Another thing I've just noticed is saving data. You need to save player data periodically while they're in the server, in case it crashes. If someone's been playing in your server for 2 hours and the server crashes, they lose everything as there won't be an onPlayerPart signal.