GiveDamage можно вызывать ложно, насколько помнится. И чтоб более-менее отследить ложное срабатывание, всё равно потребуется использовать OnPlayerWeaponShot, проверяя факт выстрела.
Какие? Ты же в любом случае будешь блокировать серверный урон и делать свой. Это наоборот сыграет тебе на руку.