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 });
}