This is due to a limitation in how the Delay node works. It isn’t meant to be used within function or loop bodies. I’ll spare you the details here but I encourage you to do a little research into why that’s the case.
You actually don’t need a loop at all - what you want to use in this case is a Custom Event. For example, this bit of BP code will print your “Restarting in x seconds…” message, delay for a second, and then call the event again unless the timer has reached zero (in which case the level is restarted):
To trigger the delay initially, you can just call the same event after the “Out of ammo!” message like so:
![image](https://community.gamedev.tv/uploads/db2322/original/3X/e/9/e9438aad8b16279f6c32a741d24bb5e7ea306050.png)
Hope that helps. =]
Edit: Updated the first image - the Make Literal String function was redundant.