lots going on here so ill give you a few tips.
- make sure the ammo pickup is handled on server
- I’d recommend a timer over the Gate/Tick logic on the weapon.
- you’re not handling the CanShoot false branch? should probably close Gate/Cancel timer?
- for readability i’d probably separate the authority path ie. Server shoots, client just plays FX?
- your weapon checks are only checking PlayerCharacter(0), since this is probably run on server it will always be the server character.