Better way to achieve semi-automatic fire for third person shooter?

I think you’ve been close to finishing this,
you need to set InDelay variable to True after firing and before timer in SemiAuto.
In the DelayComplete function reset InDelay bool to false.

This should do the trick.

Edit: reset the bool in ReleaseTrigger, not in DelayComplete.