object *labels; void create() { labels = ({ }); } object *query_labels() { return labels; } /* Labels shouldnt weigh anything.... */ int add_weight(int n) { return !n; } /* Once it is in us... we let it go :) */ int test_remove(object ob, int flag) { return 1; } int test_add(object ob, int flag) { return ob->query_property("label") && member_array(ob, labels) != -1; } /* Note, this should be called BEFORE the label is stuck on the object. */ void add_label(object ob) { if (environment()) { filter_array(all_inventory(environment()), "add_read_this", this_object()); environment()->add_command("read", this_object()); } labels += ({ ob }); } /* * Make sure this is called when we leave the objects environ, could do * bad things... */ void remove_label(object ob) { labels = labels - ({ ob }); }