it can handle various error or not expected flow with 0, INVLID_VEHICLE_ID.
not created for train in ground, invalid model, limit reached, etc...
so, i think that player error is not various as vehicle. so, 0 is used for player not error handling.
No real reason. They should be consistent, but they aren't.
Objects and player objects also start at ID 1.
Always keep in mind that a lot of people are active on this forum in their spare time.
They are sacrificing time they could easily spend on things they would rather do, to help you instead.