final_realms_fluffos_v1/
final_realms_fluffos_v1/bin/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/ChangeLog.old/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/Win32/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/simuls/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/clone/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/command/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/data/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/etc/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/master/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/log/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/compiler/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/efuns/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/operators/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/u/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/tmp/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/windows/
final_realms_fluffos_v1/lib/baseobs/guilds/
final_realms_fluffos_v1/lib/baseobs/misc/
final_realms_fluffos_v1/lib/baseobs/races/shadows/
final_realms_fluffos_v1/lib/cmds/god/
final_realms_fluffos_v1/lib/cmds/handlers/
final_realms_fluffos_v1/lib/cmds/handlers/cmds/
final_realms_fluffos_v1/lib/d/heaven/
final_realms_fluffos_v1/lib/d/heaven/heaven/ave/
final_realms_fluffos_v1/lib/d/mudlib/
final_realms_fluffos_v1/lib/d/newbie/
final_realms_fluffos_v1/lib/d/newbie/docs/
final_realms_fluffos_v1/lib/d/newbie/drow/armour/
final_realms_fluffos_v1/lib/d/newbie/drow/items/
final_realms_fluffos_v1/lib/d/newbie/drow/mobs/
final_realms_fluffos_v1/lib/d/newbie/drow/oldmobs/
final_realms_fluffos_v1/lib/d/newbie/drow/weapons/
final_realms_fluffos_v1/lib/d/newbie/duergar/weapons/
final_realms_fluffos_v1/lib/d/newbie/dwarf/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/cafe/
final_realms_fluffos_v1/lib/d/newbie/elf/chars/equip/
final_realms_fluffos_v1/lib/d/newbie/elf/items/armours/
final_realms_fluffos_v1/lib/d/newbie/elf/items/obj/
final_realms_fluffos_v1/lib/d/newbie/elf/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/quick_fix/
final_realms_fluffos_v1/lib/d/newbie/gnome/armour/
final_realms_fluffos_v1/lib/d/newbie/gnome/buildings/
final_realms_fluffos_v1/lib/d/newbie/gnome/items/
final_realms_fluffos_v1/lib/d/newbie/gnome/npcs/clones/
final_realms_fluffos_v1/lib/d/newbie/gnome/rooms/northrooms/
final_realms_fluffos_v1/lib/d/newbie/gnome/weapons/
final_realms_fluffos_v1/lib/d/newbie/goblin/armour/
final_realms_fluffos_v1/lib/d/newbie/goblin/items/
final_realms_fluffos_v1/lib/d/newbie/grads/log/
final_realms_fluffos_v1/lib/d/newbie/grads/npcs/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/cave1/
final_realms_fluffos_v1/lib/d/newbie/grads/temp/
final_realms_fluffos_v1/lib/d/newbie/guests/weapons/
final_realms_fluffos_v1/lib/d/newbie/half-elf/items/
final_realms_fluffos_v1/lib/d/newbie/half-elf/newroomss/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/castle/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/drows/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/savannah/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/secret/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/town/
final_realms_fluffos_v1/lib/d/newbie/halfling/
final_realms_fluffos_v1/lib/d/newbie/halfling/misc/
final_realms_fluffos_v1/lib/d/newbie/halfling/rooms/cave/
final_realms_fluffos_v1/lib/d/newbie/human/
final_realms_fluffos_v1/lib/d/newbie/human/armour/
final_realms_fluffos_v1/lib/d/newbie/human/monsters/
final_realms_fluffos_v1/lib/d/newbie/human/obj/
final_realms_fluffos_v1/lib/d/newbie/human/weapons/
final_realms_fluffos_v1/lib/d/newbie/lizard/armour/
final_realms_fluffos_v1/lib/d/newbie/lizard/items/
final_realms_fluffos_v1/lib/d/newbie/lizard/underwater/
final_realms_fluffos_v1/lib/d/newbie/lizard/weapons/
final_realms_fluffos_v1/lib/d/newbie/logs/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/rooms/
final_realms_fluffos_v1/lib/d/newbie/newelf/
final_realms_fluffos_v1/lib/d/newbie/newelf/chars/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/recopied/
final_realms_fluffos_v1/lib/d/newbie/newelf/obj/
final_realms_fluffos_v1/lib/d/newbie/newelf/quest_docs./
final_realms_fluffos_v1/lib/d/newbie/newken/
final_realms_fluffos_v1/lib/d/newbie/newken/chars/
final_realms_fluffos_v1/lib/d/newbie/newken/misc/
final_realms_fluffos_v1/lib/d/newbie/newken/npcs/
final_realms_fluffos_v1/lib/d/newbie/newken/obj/
final_realms_fluffos_v1/lib/d/newbie/newliz/
final_realms_fluffos_v1/lib/d/newbie/newliz/cave/
final_realms_fluffos_v1/lib/d/newbie/newliz/npcs/
final_realms_fluffos_v1/lib/d/newbie/orc/items/misc/
final_realms_fluffos_v1/lib/d/newbie/orc/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/orc/tower/
final_realms_fluffos_v1/lib/d/vehicle/
final_realms_fluffos_v1/lib/doc/
final_realms_fluffos_v1/lib/doc/driver/
final_realms_fluffos_v1/lib/doc/driver/concepts/
final_realms_fluffos_v1/lib/doc/driver/driver/
final_realms_fluffos_v1/lib/doc/driver/efuns/arrays/
final_realms_fluffos_v1/lib/doc/driver/efuns/bitstrings/
final_realms_fluffos_v1/lib/doc/driver/efuns/communication/
final_realms_fluffos_v1/lib/doc/driver/efuns/core/
final_realms_fluffos_v1/lib/doc/driver/efuns/debugging/
final_realms_fluffos_v1/lib/doc/driver/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/driver/efuns/interactive/
final_realms_fluffos_v1/lib/doc/driver/efuns/mappings/
final_realms_fluffos_v1/lib/doc/driver/efuns/objects/
final_realms_fluffos_v1/lib/doc/driver/efuns/security/
final_realms_fluffos_v1/lib/doc/driver/efuns/strings/
final_realms_fluffos_v1/lib/doc/driver/efuns/system/
final_realms_fluffos_v1/lib/doc/driver/efuns/types/
final_realms_fluffos_v1/lib/doc/driver/lpc/constructs/
final_realms_fluffos_v1/lib/doc/driver/lpc/types/
final_realms_fluffos_v1/lib/doc/driver/platforms/
final_realms_fluffos_v1/lib/doc/lpc/
final_realms_fluffos_v1/lib/doc/mail/
final_realms_fluffos_v1/lib/doc/man/
final_realms_fluffos_v1/lib/doc/man/html/
final_realms_fluffos_v1/lib/doc/man/html/applies/
final_realms_fluffos_v1/lib/doc/man/html/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/html/driver/
final_realms_fluffos_v1/lib/doc/man/html/efuns/
final_realms_fluffos_v1/lib/doc/man/html/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/html/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/html/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/html/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/html/efuns/general/
final_realms_fluffos_v1/lib/doc/man/html/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/
final_realms_fluffos_v1/lib/doc/man/local/applies/
final_realms_fluffos_v1/lib/doc/man/local/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/local/applies/master/
final_realms_fluffos_v1/lib/doc/man/local/concepts/
final_realms_fluffos_v1/lib/doc/man/local/defines/
final_realms_fluffos_v1/lib/doc/man/local/driver/
final_realms_fluffos_v1/lib/doc/man/local/efuns/
final_realms_fluffos_v1/lib/doc/man/local/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/local/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/local/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/local/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/local/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/local/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/local/efuns/general/
final_realms_fluffos_v1/lib/doc/man/local/efuns/interactive/
final_realms_fluffos_v1/lib/doc/man/local/efuns/internals/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/local/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/objects/
final_realms_fluffos_v1/lib/doc/man/local/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/efuns/sockets/
final_realms_fluffos_v1/lib/doc/man/local/efuns/strings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/system/
final_realms_fluffos_v1/lib/doc/man/local/historical/
final_realms_fluffos_v1/lib/doc/man/local/lfun/QC/
final_realms_fluffos_v1/lib/doc/man/local/lfun/events/
final_realms_fluffos_v1/lib/doc/man/local/lfun/monster/
final_realms_fluffos_v1/lib/doc/man/local/lfun/properties/
final_realms_fluffos_v1/lib/doc/man/local/lpc/
final_realms_fluffos_v1/lib/doc/man/local/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/local/lpc/types/
final_realms_fluffos_v1/lib/doc/man/local/standards/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/basic/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/intermediate/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/concepts/
final_realms_fluffos_v1/lib/doc/man/mudos/driver/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/general/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mixed/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/types/
final_realms_fluffos_v1/lib/doc/races/
final_realms_fluffos_v1/lib/doc/races/old_race/
final_realms_fluffos_v1/lib/global/virtual/
final_realms_fluffos_v1/lib/global/wiz_backup/
final_realms_fluffos_v1/lib/net/config/
final_realms_fluffos_v1/lib/net/daemon/chars/
final_realms_fluffos_v1/lib/net/inherit/
final_realms_fluffos_v1/lib/net/intermud3/
final_realms_fluffos_v1/lib/net/intermud3/cmds/
final_realms_fluffos_v1/lib/net/intermud3/save/
final_realms_fluffos_v1/lib/net/intermud3/services/
final_realms_fluffos_v1/lib/net/obj/
final_realms_fluffos_v1/lib/net/old/
final_realms_fluffos_v1/lib/net/old/intermud/
final_realms_fluffos_v1/lib/net/old/intermud/adm/
final_realms_fluffos_v1/lib/net/old/intermud/services/
final_realms_fluffos_v1/lib/net/old/intermud/udp/
final_realms_fluffos_v1/lib/net/virtual/
final_realms_fluffos_v1/lib/obj/b_day/
final_realms_fluffos_v1/lib/obj/chars/
final_realms_fluffos_v1/lib/obj/handlers/lists/
final_realms_fluffos_v1/lib/obj/handlers/useless/
final_realms_fluffos_v1/lib/obj/monsters/
final_realms_fluffos_v1/lib/obj/roomgen/
final_realms_fluffos_v1/lib/obj/soul/
final_realms_fluffos_v1/lib/obj/vegetation/
final_realms_fluffos_v1/lib/obj/weapons/oldsys/
final_realms_fluffos_v1/lib/open/
final_realms_fluffos_v1/lib/players/g/
final_realms_fluffos_v1/lib/releasefiles/d/heaven/
final_realms_fluffos_v1/lib/releasefiles/d/mudlib/
final_realms_fluffos_v1/lib/releasefiles/d/newbie/
final_realms_fluffos_v1/lib/releasefiles/doc/
final_realms_fluffos_v1/lib/releasefiles/players/g/
final_realms_fluffos_v1/lib/releasefiles/save/
final_realms_fluffos_v1/lib/releasefiles/save/environ/
final_realms_fluffos_v1/lib/releasefiles/save/roomgen/
final_realms_fluffos_v1/lib/releasefiles/secure/
final_realms_fluffos_v1/lib/releasefiles/w/
final_realms_fluffos_v1/lib/releasefiles/w/god/
final_realms_fluffos_v1/lib/room/
final_realms_fluffos_v1/lib/save/
final_realms_fluffos_v1/lib/save/environ/
final_realms_fluffos_v1/lib/save/roomgen/
final_realms_fluffos_v1/lib/scripts/
final_realms_fluffos_v1/lib/secure/crerem/
final_realms_fluffos_v1/lib/secure/dom/
final_realms_fluffos_v1/lib/secure/log/
final_realms_fluffos_v1/lib/secure/misc/
final_realms_fluffos_v1/lib/std/adnd/
final_realms_fluffos_v1/lib/std/commands/shadows/
final_realms_fluffos_v1/lib/std/creator/
final_realms_fluffos_v1/lib/std/curses/
final_realms_fluffos_v1/lib/std/curses/old_sys/
final_realms_fluffos_v1/lib/std/curses/shadows/
final_realms_fluffos_v1/lib/std/dom/
final_realms_fluffos_v1/lib/std/effects/
final_realms_fluffos_v1/lib/std/effects/healing/
final_realms_fluffos_v1/lib/std/effects/other/
final_realms_fluffos_v1/lib/std/effects/poisons/
final_realms_fluffos_v1/lib/std/environ/
final_realms_fluffos_v1/lib/std/guilds/
final_realms_fluffos_v1/lib/std/guilds/priests/samples/
final_realms_fluffos_v1/lib/std/guilds/wizards/
final_realms_fluffos_v1/lib/std/living/baldy/
final_realms_fluffos_v1/lib/std/living/divstuff/
final_realms_fluffos_v1/lib/std/paran/
final_realms_fluffos_v1/lib/std/poisons/
final_realms_fluffos_v1/lib/std/poisons/shadows/
final_realms_fluffos_v1/lib/std/poisons/weapons/
final_realms_fluffos_v1/lib/std/race_groups/
final_realms_fluffos_v1/lib/std/room/
final_realms_fluffos_v1/lib/std/room/old/
final_realms_fluffos_v1/lib/std/rooms/
final_realms_fluffos_v1/lib/std/shadows/
final_realms_fluffos_v1/lib/std/shadows/test_shad/
final_realms_fluffos_v1/lib/std/socket/
final_realms_fluffos_v1/lib/std/spells/
final_realms_fluffos_v1/lib/std/vaults/
final_realms_fluffos_v1/lib/tmp/
final_realms_fluffos_v1/lib/w/
final_realms_fluffos_v1/lib/w/god/
final_realms_fluffos_v1/old/
final_realms_fluffos_v1/win32/
// Another stat keeper... this one for all items in the
// game hopefully.  - Radix 1996
// Version 1.0
 
inherit "/std/object.c";
 
#define SAVE "/save/"
 
mapping container_data, armour_data, weapon_data;
 
// Pouches, backpacks, ...
mapping query_container_data() { return container_data; }
// Armours...
mapping query_armour_data() { return armour_data; }
// Weapons...
mapping query_weapon_data() { return weapon_data; }

int query_prevent_shadow(object o) { return 1; }
 
void load_this_ob() {
     restore_object(SAVE+"item_info");
}
 
void save_this_ob() {
    save_object(SAVE+"item_info",1);
}
 
create()
{
   object::create();
   container_data = ([ ]);
   weapon_data = ([ ]);
   armour_data = ([ ]);
   load_this_ob();
   seteuid("Root");
}
 
dest_me()
{
   save_this_ob();
   destruct(this_object());
}
 
string crop_string(string longpa, int howlong) {
  string shorter;
  shorter = longpa[sizeof(longpa)-howlong..sizeof(longpa)];
  return shorter;
}
 
// Called from /global/creator/cmds/qc.c
int query_qc_perms(string name)
{
   string *rights = ({ "taniwha","kodiak" });
   rights += ({ "/d/aprior/master"->query_dom_lord() });
   return member_array(name, rights) != -1;
}
// Called from /global/creator/cmds/info.c 
int query_info_perms(string name, object obj)
{
   string dom = domain_origin(obj);
   mixed mas;
   if(!dom) return 0;   // /w/creator won't have data anyway
   mas = "/d/"+dom+"/master";
   return mas->valid_write(explode(real_filename(obj),"/"),name,0);
}

void display_item_properties(object ob)
{
   mapping m;
   int i;
   m = ob->query_properties();
   if(!sizeof(keys(m)))
      return ;
   write("Properties:\n   ");
   for(i=0; i<sizeof(keys(m)); i++)
      write(keys(m)[i]+" : "+m[keys(m)[i]]+"\n   ");
   write("\n");
   return;
}

/* container_data mapping:
     ([ "domain" : 
         ([ "path" : ({
                        max_weight,
                        enchant,
                        qc'ed,
                        qc'ed by,
                        comments
                     })
         ])
     ])
*/
void update_container(object ob)
{
   mapping obmap = ([ ]);
   mixed tmp = ({ });
   int caught = 0;
   string dom, file;
   if(!ob) 
      return;
   dom = domain_origin(ob);
   file = real_filename(ob);
   if(!dom || !file)
      return;
   obmap = container_data[dom];
   if(!m_sizeof(obmap)) obmap = ([ ]);
   tmp = obmap[file];
   if(!sizeof(tmp))
   {
      tmp = allocate(5);
      tmp[0] = ob->query_max_weight();
      tmp[1] = ob->query_enchant();
      tmp[2] = 0;
      tmp[3] = 0;
      tmp[4] = 0;
      obmap[file] = tmp;
      container_data[dom] = obmap;
      save_this_ob();
      return;
   }
   if(tmp[0] != ob->query_max_weight()) caught = 1;
   if(tmp[1] != ob->query_enchant()) caught = 1;
   if(caught)
   {
      tmp[2] = 0;
      tmp[3] = 0;
      obmap[file] = tmp;
      container_data[dom] = obmap;
      save_this_ob();
   }
   return;
}
 
// Called from /global/creator/cmds/qc.c
void qc_item_container(object ob)
{
   mapping obmap = ([ ]);
   mixed tmp = ({ });
   int caught = 0;
   string dom, file;
   if(!ob) 
      return;
   dom = domain_origin(ob);
   file = real_filename(ob);
   if(!dom || !file)
      return;
   obmap = container_data[dom];
   if(!m_sizeof(obmap)) obmap = ([ ]);
   tmp = obmap[file];
   if(!sizeof(tmp))
   {
      write("ERROR: Container has no data!\n");
      return;
   }
   tmp[2] = 1;
   tmp[3] = geteuid(this_player());
   obmap[file] = tmp;
   container_data[dom] = obmap;
   save_this_ob();
   write("File: "+file+" now QCed.\n");
   return;
}

void info_item_container(object ob)
{
   mapping obmap = ([ ]);
   mixed tmp = ({ });
   int caught = 0;
   string dom, file;
   if(!ob) 
      return;
   dom = domain_origin(ob);
   file = real_filename(ob);
   if(!dom || !file)
      return;
   obmap = container_data[dom];
   if(!m_sizeof(obmap)) obmap = ([ ]);
   tmp = obmap[file];
   if(!sizeof(tmp))
   {
      write("ERROR: Container has no data!\n");
      return;
   }
   write("Filename: "+file+"\n"+
        "Max weight: "+tmp[0]+"\n"
        "Enchant: "+tmp[1]+"\n"
        "QCed: ");
   if(tmp[2])
      write("Yes \nQCed by: "+capitalize(tmp[3])+"\n");
   else write("No\n");
   write("Comments:\n   ");
   if(tmp[4] == "NA") write("None.\n\n");
   else
      write(tmp[4]+"\n\n");
   return;
}

// Called from /global/creator/cmds/info.c
void domain_item_containers(string dom)
{
   string s;
   mixed obs, obmap;
   mixed tmp;
   int i;
   if(member_array(dom,get_dir("/d/")) == -1)
   {
      write(capitalize(dom)+" does not exist.\n");
      return;
   }
   obmap = container_data[dom];
   if(!obmap)
      obmap = ([ ]);
   obs = sort_array(keys(obmap),1);
   s = sprintf("%-40s %6s %6s %12s %6s\n",
      "Filename","Mx Wt","Enchnt","QCed by","Com'ed");
   if(!sizeof(obs))
      s+= sprintf("\nNo data.\n");
   for(i=0; i<sizeof(obs); i++)
   {
      tmp = explode(obs[i],"/");
      tmp = implode(tmp - ({ tmp[0], tmp[1] }),"/");
      s+= sprintf("%-35s%5d%5d ",
               tmp, obmap[obs[i]][0], obmap[obs[i]][1]); 
      s+= sprintf("%12s",obmap[obs[i]][3]);
      if(obmap[obs[i]][4]) 
         s += sprintf("%5s","Yes");
      s+= "\n";
   }
   write(s);
}

/* weapon_data mapping:
     ([ "domain" : 
         ([ "path" : ({
                        weight,
                        enchant,
                        rolls,
                        dice,
                        roll_add,
                        twohanded,
                        qc'ed by,
                        comments
                     })
         ])
     ])
*/
void update_weapon(object ob)
{
   mapping obmap = ([ ]);
   mixed tmp = ({ });
   int caught = 0;
   string dom, file;
   int *dmg;
   if(!ob) 
      return;
   dom = domain_origin(ob);
   file = real_filename(ob);
   if(!dom || !file)
      return;
   obmap = weapon_data[dom];
   if(!m_sizeof(obmap)) obmap = ([ ]);
   tmp = obmap[file];
   dmg = ob->query_damage_vals();
   if(!sizeof(tmp))
   {
      tmp = allocate(8);
      tmp[0] = ob->query_weight();
      tmp[1] = ob->query_enchant();
      tmp[2] = dmg[0];
      tmp[3] = dmg[1];
      tmp[4] = dmg[2];
      tmp[5] = ob->query_twohanded();
      tmp[6] = 0;
      tmp[7] = 0;
      obmap[file] = tmp;
      weapon_data[dom] = obmap;
      save_this_ob();
      return;
   }
   if(tmp[0] != ob->query_weight()) caught = 1;
   if(tmp[1] != ob->query_enchant()) caught = 1;
   if(tmp[2] != dmg[0]) caught = 1;
   if(tmp[3] != dmg[1]) caught = 1;
   if(tmp[4] != dmg[2]) caught = 1;
   if(tmp[5] != ob->query_twohanded()) caught = 1;
   if(caught)
   {
      tmp[6] = 0;
      obmap[file] = tmp;
      weapon_data[dom] = obmap;
      save_this_ob();
   }
   return;
}
 
// Called from /global/creator/cmds/qc.c
void qc_weapon(object ob)
{
   mapping obmap = ([ ]);
   mixed tmp = ({ });
   int caught = 0;
   string dom, file;
   if(!ob) 
      return;
   dom = domain_origin(ob);
   file = real_filename(ob);
   if(!dom || !file)
      return;
   obmap = weapon_data[dom];
   if(!m_sizeof(obmap)) obmap = ([ ]);
   tmp = obmap[file];
   if(!sizeof(tmp))
   {
      write("ERROR: Weapon has no data!\n");
      return;
   }
   tmp[6] = geteuid(this_player());
   obmap[file] = tmp;
   weapon_data[dom] = obmap;
   save_this_ob();
   write("File: "+file+" now QCed.\n");
   return;
}

void info_weapon(object ob)
{
   mapping obmap = ([ ]);
   mixed tmp = ({ });
   int caught = 0;
   string dom, file;
   if(!ob) 
      return;
   dom = domain_origin(ob);
   file = real_filename(ob);
   if(!dom || !file)
      return;
   obmap = weapon_data[dom];
   if(!m_sizeof(obmap)) obmap = ([ ]);
   tmp = obmap[file];
   if(!sizeof(tmp))
   {
      write("ERROR: Weapon has no data!\n");
      return;
   }
   write("Filename: "+file+"\n"+
        "Weight  : "+tmp[0]+"\n"
        "Enchant : "+tmp[1]+"\n"
        "Damage  : "+tmp[2]+"d"+tmp[3]+"+"+tmp[4]+"\n"
        "Hands   : ");
   if(ob->query_twohanded())
      write("2\n");
   else
      write("1\n");
   write("QCed : ");
   if(tmp[6])
      write("Yes \nQCed by: "+capitalize(tmp[6])+"\n");
   else 
      write("No\n");
   if(!tmp[5]) 
      if(file_size(file+".comments") > 0)
         write(read_file(file+".comments")+"\n\n");
      else
         write("None.\n\n");
   else
      write(tmp[5]+"\n\n");
   display_item_properties(ob);
   return;
}

// Called from /global/creator/cmds/info.c
void domain_weapons(string dom)
{
   string s;
   mixed obs, obmap;
   mixed tmp;
   int i;
   if(member_array(dom,get_dir("/d/")) == -1)
   {
      write(capitalize(dom)+" does not exist.\n");
      return;
   }
   obmap = weapon_data[dom];
   if(!obmap)
      obmap = ([ ]);
   obs = sort_array(keys(obmap),1);
   s = sprintf("%-40s %6s %6s %12s %6s\n",
      "Filename","Enchnt","Damage","QCed by","Com'ed");
   if(!sizeof(obs))
      s+= sprintf("\nNo data.\n");
   for(i=0; i<sizeof(obs); i++)
   {
      tmp = explode(obs[i],"/");
      tmp = implode(tmp - ({ tmp[0], tmp[1] }),"/");
      s+= sprintf("%-40s%5d ",
               tmp, obmap[obs[i]][1]); 
      s+= sprintf("%6s",obmap[obs[i]][2]+"d"+obmap[obs[i]][3]+"+"+
               obmap[obs[i]][4]);
      if(obmap[obs[i]][6])
         s+= sprintf("%12s",capitalize(obmap[obs[i]][6]));
      else
         s+= sprintf("%12s","");
      if(obmap[obs[i]][7]) 
         s += sprintf("%5s","Yes");
      s+= "\n";
   }
   this_player()->more_string(s);
}

/* armour_data mapping:
     ([ "domain" : 
         ([ "path" : ({
                        weight,
                        size,
            enchant,
                        ac,
                        qc'ed by,
                        comments
                     })
         ])
     ])
*/
void update_armour(object ob)
{
   mapping obmap = ([ ]);
   mixed tmp = ({ });
   int caught = 0;
   string dom, file;
   if(!ob) 
      return;
   dom = domain_origin(ob);
   file = real_filename(ob);
   if(!dom || !file)
      return;
   obmap = armour_data[dom];
   if(!m_sizeof(obmap)) obmap = ([ ]);
   tmp = obmap[file];
   if(!sizeof(tmp))
   {
      tmp = allocate(6);
      tmp[0] = ob->query_weight();
      tmp[1] = ob->query_size();
      tmp[2] = ob->query_enchant();
      tmp[3] = ob->query_ac();
      tmp[4] = 0;
      tmp[5] = 0;
      obmap[file] = tmp;
      armour_data[dom] = obmap;
      save_this_ob();
      return;
   }
   if(tmp[0] != ob->query_weight()) 
   {
      caught = 1;
      tmp[0] = ob->query_weight();
   }
   if(tmp[1] != ob->query_size()) 
   {
      caught = 1;
      tmp[1] = ob->query_size();
   }
   if(tmp[2] != ob->query_enchant()) 
   {
      caught = 1;
      tmp[2] = ob->query_enchant();
   }
   if(tmp[3] != ob->query_ac()) 
   {
      caught = 1;
      tmp[3] = ob->query_ac();
   }
   if(caught)
   {
      if(this_player() && this_player()->query_creator() && tmp[4])
         write("\nThis item needs to be QCed again.\n");
      tmp[4] = 0;
      obmap[file] = tmp;
      armour_data[dom] = obmap;
      save_this_ob();
   }
   return;
}
 
// Called from /global/creator/cmds/qc.c
void qc_armour(object ob)
{
   mapping obmap = ([ ]);
   mixed tmp = ({ });
   string dom, file;
   if(!ob) 
      return;
   dom = domain_origin(ob);
   file = real_filename(ob);
   if(!dom || !file)
      return;
   obmap = armour_data[dom];
   if(!m_sizeof(obmap)) obmap = ([ ]);
   tmp = obmap[file];
   if(!sizeof(tmp))
   {
      write("ERROR: Armour has no data!\n");
      return;
   }
   tmp[4] = geteuid(this_player());
   obmap[file] = tmp;
   armour_data[dom] = obmap;
   save_this_ob();
   write("File: "+file+" now QCed.\n");
   return;
}

// Called from /global/creator/cmds/info.c
void info_armour(object ob)
{
   mapping obmap = ([ ]);
   mixed tmp = ({ });
   string dom, file;
   if(!ob) 
      return;
   dom = domain_origin(ob);
   file = real_filename(ob);
   if(!dom || !file)
      return;
   obmap = armour_data[dom];
   if(!m_sizeof(obmap)) obmap = ([ ]);
   tmp = obmap[file];
   if(!sizeof(tmp))
   {
      write("ERROR: Armour has no data!\n");
      return;
   }
   write("Filename: "+file+"\n"+
        "Weight  : "+tmp[0]+"\n"
        "Size    : "+tmp[1]+"\n"
        "Enchant : "+tmp[2]+"\n"
        "AC      : "+tmp[3]+"\n"
        "QCed    : ");   
   if(tmp[4])
      write("Yes \nQCed by : "+capitalize(tmp[4])+"\n");
   else 
      write("No\n");
   write("Comments:\n   ");
   if(!tmp[5]) 
      if(file_size(file+".comments") > 0)
         write(read_file(file+".comments")+"\n\n");
      else
         write("None.\n\n");
   else
      write(tmp[5]+"\n\n");
   display_item_properties(ob);
   return;
}

// Called from /global/creator/cmds/info.c
void domain_armours(string dom)
{
   string s;
   mixed obs, obmap;
   mixed tmp;
   int i;
   if(member_array(dom,get_dir("/d/")) == -1)
   {
      write(capitalize(dom)+" does not exist.\n");
      return;
   }
   obmap = armour_data[dom];
   if(!obmap)
      obmap = ([ ]);
   obs = sort_array(keys(obmap),1);
   s = sprintf("%-40s%4s%4s%4s%5s%12s%10s\n",
      "Filename","Wt","Sz","AC","Ench","QCed by","Commented");
   if(!sizeof(obs))
      s+= sprintf("\nNo data.\n");
   for(i=0; i<sizeof(obs); i++)
   {
      tmp = explode(obs[i],"/");
      tmp = implode(tmp - ({ tmp[0], tmp[1] }),"/");
      s+= sprintf("%-40s%4d",tmp, obmap[obs[i]][0]); 
      s+= sprintf("%4d%4d",obmap[obs[i]][1],obmap[obs[i]][3]);
      s+= sprintf("%5d",obmap[obs[i]][2]);
      if(stringp(obmap[obs[i]][4]))
         s+= sprintf("%12s",capitalize(obmap[obs[i]][4]));
      else
         s+= sprintf("%12s","");
      if(stringp(obmap[obs[i]][5]))
         s+= sprintf("%10s","Yes");
      else
         s+= sprintf("%10s","No");
      s+= "\n";
   }
   this_player()->more_string(s);
}