I have a iPhone 3G with iOS 4.2.1 which hit the ground too many times. The thing is that it doesn't ring when someone calls me but it play the sounds on some games or when I try to change the ringtones in Settings->Sounds menu. All the ringtones are the default ones.
Is your ringer switch stuck on mute? If not this could be a simple software issue, you would have to save all your data through iTunes, save all of your pictures separately, and restore the iPhone to factory settings. Once restored you must choose to set the iPhone up as new, otherwise restoring from a corrupted backup will bring the issue back. You can make sure to save contacts & calendar events on 4.2.1 by going into the info tab while the iPhone is plugged into iTunes, and selecting sync contacts, & sync calendars, notes, bookmarks, ect.
If you did drop it too many times & break the ringer switch, it's about time for a new phone