static mapping global_events; void create( void ) { global_events = ([ ]); } void add_event( string name ) { if( global_events == 0 ) global_events = ([ ]); global_events[name] = ({ }); } void remove_event( string name ) { global_events[name] = 0; } void subscribe_event( string name ) { global_events[name] -= ({ previous_object() }); global_events[name] += ({ previous_object() }); } void unsubscribe_event( string name ) { global_events[name] -= ({ previous_object() }); } varargs void event( string name, mixed args... ) { object *obs; int i; global_events[name] -= ({ 0 }); obs = global_events[name]; if( obs == 0 ) return; for( i = 0; i < sizeof( obs ); i++ ) { call_other( obs[i], "event_" + name, args ); } }