In every Ham hook you can specify if it's a pre or post hook (the last argument in RegisterHam).
If it's a pre hook, it happens before the action happens so you can use the return values to block the action, you also have an arsenal of natives to use such as SetHamParamInt/Float/...
However in post hook the action has already happened and there's nothing you can do about it. It's good to hook post if you for example want to check the DEFINITE damage in TakeDamage. If you hooked it as a pre, there's a chance another plugin might still change the value.