OK, third attempt at a good fix that covers everything. Keep other mount interactions the same as originally, but just flip the mount vs. push order on boat types, giving push priority on boats. Required moving the Push menu command out of BaseVehicle.
Removed cases where I was doing specific mutable state checks in trigger InterestedInObject calls, not realising that InterestedInObject is also checked to see if we should allow a collider to detect that it LEFT a trigger. Fixes spawning a car on top of yourself and then noclipping out of it causing the game to consider you still in the triggers.
Fix BasePlayer movement references on the server in TriggerPlayerForce and TriggerMount. Moved BasePlayer vars that aren't used on the server at all into BasePlayer-Client, so this mistake is now prevented from being made again.
Let the car chassis push and hurt triggers stay always on, since there are various situations where players may end up inside a vehicle - not all of them a case where the vehicle is on or even moving (e.g. Spawning as a sleeper underneath one after loading a save).
Big fix: Categorically prevent players on flatbeds being hurt by car hurt triggers. This tended to happen due to server/client differences when standing near the back of a flatbed while the car reversed.
Mounted state isn't saved to a save file, so players can get stuck in vehicles on load, in their mounted position but not mounted. Quick fix: Ignore the vehicle layer in sleeper physics, so players fall through the vehicle instead of getting stuck in it.
Merge car central locking changes -> Main. New central locking system prevents players without a key from mounting a lockable car, but a driver can unlock the doors if desired once inside. Placeholder graphics for now. Protocol++.