So your character class has a function RequestFire, which does the line trace and applies damage to the hit actors. These characters are either controlled by a PlayerController or an AIController.
So the character controlled by a PlayerController will react on input from the player. This is done by the conditional binding from above. So when the player hits the fire button, the binding calls RequestFire. The characters controlled by an AIController won’t react to this input, since we used the function IsLocalPlayerController, which returns false for AIControllers.
So the characters controlled by an AIController will do nothing so far. A typical procedure now would be to create a behaviour tree and a “ShootAt” task. Then you can for example check if your AI character sees an enemy, if it is in range, if it has ammo, etc. and then start the ShootAt task after setting the target in a blackboard connected to the AIController. And this ShootAt task would then call the RequestFire function. And since every AIController runs its own behaviour tree, each AI character shoot independently.
I really hope I got your question right this time