/** * Theft callback system! * @author Terano * @started 5/04/2003 */ class theft_callback { string func_name; //Function to call! string path; //Object to call func_name on. } class theft_callback *calls = ({ }); void event_theft( object command_ob, object thief, object victim, object *stolen ) { if ( !sizeof( calls ) ) return; //If it's us getting stolen! if ( !stolen ) { foreach( class theft_callback temp in calls ) { if ( stringp( temp->path ) && stringp( temp->func_name ) ) call_other( temp->path, temp->func_name, this_object(), thief, victim ); } } return; } /** * Add a new theft callback! * @arg string func_name to call. * @arg string Path to call func_name on. * @return int -1 if failed, otherwise the ID of the callback. */ int add_theft_callback( string func_name, string path ) { class theft_callback temp = new( class theft_callback, func_name: func_name, path: path ); if ( !stringp( func_name ) || !stringp( path ) ) return -1; debug_printf( "Added theft callback: %s %s.\n", func_name, path ); calls += ({ temp }); return sizeof( calls ) - 1; } /** * Delete a theft callback! * @arg int ID to remove! * @return int -1 if failed, 1 otherwise */ int remove_theft_callback( int id ) { if ( id >= sizeof( calls ) || id < 0 ) return -1; debug_printf( "Deleting callback: %s %s.\n", calls[id]->func_name, calls[id]->path ); calls -= ({ calls[id] }); return 1; } string query_theft_callbacks() { string ret = ""; int count = 0; if ( !sizeof( calls ) ) return "No theft callbacks found!\n"; foreach( class theft_callback temp in calls ) { ret += sprintf( "%d. %s: %s.\n", count, temp->func_name, temp->path ); count++; } return ret; }