I've seen vehicles coded in as item types which works well. Builders can create them on the fly without needing trigger writing knowledge.
You'd add a couple of new items, for example: ITEM_VEHICLE, ITEM_VEHICLE_HATCH
Make two new commands : enter , leave
The vehicle is pretty much the object ITEM_VEHICLE that moves around in the world.
One of its values is the VNUM of the room which you've created to be the interior of the vehicle.
When you 'enter the vehicle' it moves you to the vehicle interior.
Inside you'd load the object ITEM_VEHICLE_HATCH which has a pointer to the object VNUM of the ITEM_VEHICLE.
When you type leave, it sends you to the room which ITEM_VEHICLE is currently in.
Cannons and boarding could be triggers or commands/skills
Hope that made sense
Either triggers or coding will get the same result, just go with whichever you are more comfortable with.
I'd do coding. Someone like Parnassus would trigger it all up no problem