Sorry for assuming that you are a beginner, but some things you've described and especially your troubleshooting methods (re-arranging events, adding waits etc.) are mistakes that I've seen many times on this forum.
For example, adding 1 to a global variable when any enemy is attacking, and subtracting 1 at the end of their attack animation - with multiple enemies this is difficult to program correctly, and extremely difficult to debug when it's not working.
It's much easier to set isUnderAttack=true when an enemy starts its attack, and then when an attack ends (or on every tick, or every 0.1s) check if there are any enemies still attacking. If not, set isUnderAttack=false.
Using "Wait" in this logic will only cause problems! If you need to delay something, for example, player recovering from the attack, use Timer behavior.
.
About your other issue with the startup sequence - when you are starting many asynchronous requests at once, and then use many "On completed" events, it's difficult to figure out when all of them are completed. It's easier to execute them one by one.
Unless the files are really big, these requests should be finished in a couple of ticks.
.
Can you please post screenshots of your code, which you are struggling with? It will be much easier to discuss with actual examples.