You can raise the event from anywhere if you make sure you
call a method on the event object as per my example.

I haven't heard of any problems, but then, I haven't looked
either. I don't really use this myself.

The order of processing is simple. Just imagine that each
object registered as being interested in these events is in
a long list. The event "triggering" is going to call the
event method in each object one after the other.

This works because each object registered with myEvent1 is
looking at the very same event object. In your original
code, you were creating a different object for each player,
hence it would never work.

Remember that when dealing with classes (actually instances
of classes), we only ever pass by reference. So player in
the example had it's SetEventHandler1 (or 2) method called,
and the reference to the lEvent1 object was passed.

Again, I hope it helps.