I've also found that Wait and Timer triggers sometimes fail to fire even though the logic of the events looks good. I've also had them stop working for no reason after I've been working on a different part of an event sheet, but nothing consistent enough to put in a bug report for proper analysis (only enough for me to occasionally moan about it! <img src="smileys/smiley2.gif" border="0" align="middle" />).
My advice would be to do 2 things here:
1. Add a tripple event containing (1)Sword is on screen Inverted - AND - (2)Swordbull... is on screen Inverted - AND - (3)Trigger Once. Use this to set a variable "player_can_fight_time" to "time + Player.WeaponRespawn".
2. Check player_can_fight_time < time as a pre-event to your key down checks (in place of the WeaponLaunched = 0 check). That should do it.
Good luck! Like I said before, I've often found that once a game becomes very complicated with lots of time checks and trigger checks, the triggers sometimes get missed. This has resulted in an enemy not shooting at the player, for example (which can just about be excused) or something like the above problem where the player can no longer interact with the game (= fail!). This time check using an object variable technique might seem to be a pain at first but I've never found it to let me down (I rarely use Wait and don't use the Timer any more and I don't have to solve problems like this either...).