Solution
Use a `BaseCarryable` → `BaseWeapon` → `BaseBulletWeapon` hierarchy. — BaseCarryable.cs. Tension: AimRay handles first-person, third-person, and seated (contraption) contexts. Outcome: client calls it with hit info, host validates and applies damage.
89d607b1-6f8e-4d8d-89f3-830444569c80
Use a BaseCarryable → BaseWeapon → BaseBulletWeapon hierarchy. — BaseCarryable.cs. Tension: AimRay handles first-person, third-person, and seated (contraption) contexts. Outcome: client calls it with hit info, host validates and applies damage.