In know how you made that 'or' event.
You first made 2 separate events. 1 with the 'on key pressed'. And then 1 with the 'on touched'.
Then you converted the event containing the 'on key pressed' to an 'or' block.
Then you dragged the 'on touched' condition in that 'or' block.
Then you deleted the empty event.
Thing is, i dont know why it accepts this.
If you try to directly add a second trigger (trigger conditions start with 'on') to an event that already contains a trigger ... then it will not accept that second trigger.
Conclusion: i think that there should be no two triggers in 1 event. So,i am not surprised that is does not work.
When a trigger is burred in conditions, it has to look up if it is allowed to run its actions.
In this case, it looks up and bumps head on the 'on key' not being true.
The other thing i see is the use of 'wait' to keep the next event from being true all the time that the current event is true. That is bad coding (my opinion).
Also the 'triggers once while true' is a 'incomplete fix' for the problems created by the 'wait'.
May i suggest to use a function. (i suppose that there is only 1 trailbutton)
New root event
On function (give it a name ... say "SWITCH")
_______TrailOnOff = 0 ?
___________actions ___ set TrailOnOff to 1
______________________ do that visible/invisible stuff / plz dont use wait
_______Else
___________actions ___ set TrailOnOff to 0
______________________ do that visible/invisible stuff / plz dont use wait
New root event
On key pressed
______ Call function "SWITCH"
New root event
On touched
______ Call function "SWITCH"