#include <creator.h> #define COUNT 10 int cmd(string arg){ mapping m = ([]); string *obs, ob, ret = ""; if(!master()->query_senior(this_player()->query_name())) return 0; switch(arg){ case "all": objects((:$(m)[base_name($1)]++,reset_eval_cost():)); break; case "inside": objects((:environment($1) && $(m)[base_name($1)]++:)); break; default: objects((:environment($1) && living($1) && $(m)[base_name($1)]++:)); } obs = keys(filter(m, (:$2 > COUNT:))); foreach(ob in obs){ object *things, thing; m = ([]); reset_eval_cost(); if(arg != "all") things = filter(children(ob), (:environment($1):)); else things = children(ob); foreach(thing in things) m[environment(thing)]++; m = filter(m, (:$2 > COUNT:)); if(sizeof(m)){ object *rooms = keys(m); foreach(thing in rooms){ ret += sprintf("%3d %s in %s\n", m[thing], WIZ_PRESENT->desc_f_object(find_object(ob)), WIZ_PRESENT->desc_f_object(thing)); } } } ob = sprintf("/w/%s/mobs", this_player()->query_name()); printf("Saving to %s.\n", ob); //this_player()->more_string(ret); seteuid(geteuid(this_player())); unguarded((:rm($(ob)),write_file($(ob), $(ret)):)); return 1; } mixed *query_patterns() { return ({ "", (: cmd(0) :), "{all|inside}", (: cmd($4[0]) :) }); } string help() { return "Shows groups of NPCs of one kind that are in the same room."; }