The correct pointer syntax is CRunObject*, by the way
First, any action or condition that does any picking at all must specify the SOL_MODIFIER flag (otherwise behavior is undefined, and the app will probably crash). If the pointer is called 'object' and the pointer to its type (CRunObjType*) is called 'type', then the following does:
pRuntime->SelectAll(type);
// 'type' is now put in to 'all selected' mode, as if it hasn't yet been referenced by any conditions - eg. in an Always event[/code:34maw5si]
[code:34maw5si]pRuntime->SelectAll(type);
pRuntime->Select(object);
// 'object' is now the only object picked[/code:34maw5si]
[code:34maw5si]pRuntime->Select(object);
// Without a preceeding 'selectall', this adds 'object' to the currently picked objects
// It *must not* already be picked - if you're not sure call IsSelected() first to check[/code:34maw5si]
[code:34maw5si]pRuntime->SelectAll(type);
pRuntime->Select(object1);
pRuntime->Select(object2);
pRuntime->Select(object3);
// The three objects 'object1', 'object2' and 'object3' are now selected
// Note you cannot call Select() on the same object twice - if you think
// any of those pointers might point to the same object, you must check it
// isn't selected first via pRuntime->IsSelected(object)[/code:34maw5si]
The code for running actions, subevents, suppressing elses etc is purely for looping conditions like for-each and repeat - they're a bit more complicated, but for other conditions, you don't need to worry about those functions at all.