Don't bother with fast triggers, they were written to support an algorithmically efficient version of the 'on loop' conditions which didn't slow down when other unrelated 'on loop' conditions are present. To achieve this they cut a lot of corners ranging from not performing object picking to ignoring the first parameter... essentially, they're not useful for plugins.
To trigger a condition pass the index of the condition. ADDCND() in the ACE table adds the condition to a list, so it's the zero-based condition you have in your ACE table.
Triggering a condition does what you said pretty much, it executes all events with the trigger condition in top-to-bottom order in the event sheet immediately testing all conditions and running all actions and subevents, all done immediately within the function. As you'd expect if the trigger routine (cMyCondition) returns false, that trigger does not run. Note in your example not all control paths return a value, so you probably want a 'else return false' in there!
If you trigger an event from within an action, condition or expression, call pRuntime->NewSOL() before it and pRuntime->RestoreSOL() after it. Otherwise, conditions and picking in the trigger event will affect picking in the event that caused the trigger.