Yes, it's pretty cool.

No, I did't create an event function, I went the easy way :).

I simply added a new trait + trigger for On LesserGeneralOfferedForAdoption and use the EOP Event onCharacterSelected(selectedChar). If the trait exists, I call a new function to do the stuff and then remove the trait again. As you always select the character at one point, it's almost as good as a dedicated event function.

The overhead is ignorable but automating that (i.e. create the necessary event function) is the next step, though.

However, I'm a bit confused as to why the adopted character is a family member but doesn't show up in the family tree. But that's probably a question for another thread.