The trigger once doesn’t trigger once while the other conditions of the event is true, but trigger once while previous conditions (including parent events) are true.
It works the following way: when it is called, it sets an internal variable “wasExecuted” to true, and returns the inversed value of wasExecutedPreviousFrame. And after each frame, it sets wasExecutedPreviousFrame to the value of wasExecuted then sets wasExecuted to false.
This works because GDevelop doesn’t call next conditions when a previous one was false (after all there is no point as all need to be true to execute actions).