skylib_mudos_v1/
skylib_mudos_v1/bin/
skylib_mudos_v1/bin/db/
skylib_mudos_v1/mudlib/banish/a/
skylib_mudos_v1/mudlib/banish/b/
skylib_mudos_v1/mudlib/banish/c/
skylib_mudos_v1/mudlib/banish/d/
skylib_mudos_v1/mudlib/banish/e/
skylib_mudos_v1/mudlib/banish/f/
skylib_mudos_v1/mudlib/banish/g/
skylib_mudos_v1/mudlib/banish/h/
skylib_mudos_v1/mudlib/banish/j/
skylib_mudos_v1/mudlib/banish/l/
skylib_mudos_v1/mudlib/banish/m/
skylib_mudos_v1/mudlib/banish/n/
skylib_mudos_v1/mudlib/banish/o/
skylib_mudos_v1/mudlib/banish/p/
skylib_mudos_v1/mudlib/banish/r/
skylib_mudos_v1/mudlib/banish/s/
skylib_mudos_v1/mudlib/banish/t/
skylib_mudos_v1/mudlib/banish/u/
skylib_mudos_v1/mudlib/banish/w/
skylib_mudos_v1/mudlib/cmds/
skylib_mudos_v1/mudlib/cmds/admin/
skylib_mudos_v1/mudlib/cmds/guild-race/
skylib_mudos_v1/mudlib/cmds/guild-race/crafts/
skylib_mudos_v1/mudlib/cmds/guild-race/magic/
skylib_mudos_v1/mudlib/cmds/guild-race/other/
skylib_mudos_v1/mudlib/cmds/living/broken/
skylib_mudos_v1/mudlib/cmds/player/group_cmds/
skylib_mudos_v1/mudlib/d/admin/
skylib_mudos_v1/mudlib/d/admin/room/
skylib_mudos_v1/mudlib/d/admin/room/we_care/
skylib_mudos_v1/mudlib/d/admin/save/
skylib_mudos_v1/mudlib/d/admin/text/
skylib_mudos_v1/mudlib/d/learning/TinyTown/buildings/
skylib_mudos_v1/mudlib/d/learning/TinyTown/map/
skylib_mudos_v1/mudlib/d/learning/TinyTown/roads/
skylib_mudos_v1/mudlib/d/learning/chars/
skylib_mudos_v1/mudlib/d/learning/functions/
skylib_mudos_v1/mudlib/d/learning/handlers/
skylib_mudos_v1/mudlib/d/learning/help_topics/
skylib_mudos_v1/mudlib/d/learning/help_topics/npcs/
skylib_mudos_v1/mudlib/d/learning/help_topics/objects/
skylib_mudos_v1/mudlib/d/learning/help_topics/rcs_demo/
skylib_mudos_v1/mudlib/d/learning/help_topics/rcs_demo/RCS/
skylib_mudos_v1/mudlib/d/learning/help_topics/rooms/
skylib_mudos_v1/mudlib/d/learning/help_topics/rooms/crowd/
skylib_mudos_v1/mudlib/d/learning/help_topics/rooms/situations/
skylib_mudos_v1/mudlib/d/learning/save/
skylib_mudos_v1/mudlib/d/learning/school/
skylib_mudos_v1/mudlib/d/learning/school/add_sc/
skylib_mudos_v1/mudlib/d/learning/school/characters/
skylib_mudos_v1/mudlib/d/learning/school/general/
skylib_mudos_v1/mudlib/d/learning/school/getting-started/
skylib_mudos_v1/mudlib/d/learning/school/getting-started/basic_commands/
skylib_mudos_v1/mudlib/d/learning/school/getting-started/edtutor/
skylib_mudos_v1/mudlib/d/learning/school/getting-started/unix_tutor/
skylib_mudos_v1/mudlib/d/learning/school/items/
skylib_mudos_v1/mudlib/d/learning/school/npc_school/
skylib_mudos_v1/mudlib/d/learning/school/room_school/
skylib_mudos_v1/mudlib/d/learning/school/room_school/room_basic/
skylib_mudos_v1/mudlib/d/learning/school/room_school/situations/
skylib_mudos_v1/mudlib/d/learning/school/room_school/terrain_tutor/
skylib_mudos_v1/mudlib/d/learning/text/
skylib_mudos_v1/mudlib/d/liaison/
skylib_mudos_v1/mudlib/d/mudlib/
skylib_mudos_v1/mudlib/d/mudlib/changes/
skylib_mudos_v1/mudlib/d/playtesters/
skylib_mudos_v1/mudlib/d/playtesters/effects/
skylib_mudos_v1/mudlib/d/playtesters/handlers/
skylib_mudos_v1/mudlib/d/playtesters/items/
skylib_mudos_v1/mudlib/d/sage/
skylib_mudos_v1/mudlib/doc/
skylib_mudos_v1/mudlib/doc/creator/
skylib_mudos_v1/mudlib/doc/driver/
skylib_mudos_v1/mudlib/doc/driver/efuns/arrays/
skylib_mudos_v1/mudlib/doc/driver/efuns/buffers/
skylib_mudos_v1/mudlib/doc/driver/efuns/compile/
skylib_mudos_v1/mudlib/doc/driver/efuns/filesystem/
skylib_mudos_v1/mudlib/doc/driver/efuns/floats/
skylib_mudos_v1/mudlib/doc/driver/efuns/functions/
skylib_mudos_v1/mudlib/doc/driver/efuns/general/
skylib_mudos_v1/mudlib/doc/driver/efuns/mappings/
skylib_mudos_v1/mudlib/doc/driver/efuns/mixed/
skylib_mudos_v1/mudlib/doc/driver/efuns/mudlib/
skylib_mudos_v1/mudlib/doc/driver/efuns/numbers/
skylib_mudos_v1/mudlib/doc/driver/efuns/parsing/
skylib_mudos_v1/mudlib/doc/known_command/
skylib_mudos_v1/mudlib/doc/login/
skylib_mudos_v1/mudlib/doc/lpc/basic_manual/
skylib_mudos_v1/mudlib/doc/lpc/intermediate/
skylib_mudos_v1/mudlib/doc/new/add_command/
skylib_mudos_v1/mudlib/doc/new/events/
skylib_mudos_v1/mudlib/doc/new/handlers/
skylib_mudos_v1/mudlib/doc/new/living/race/
skylib_mudos_v1/mudlib/doc/new/living/spells/
skylib_mudos_v1/mudlib/doc/new/object/
skylib_mudos_v1/mudlib/doc/new/player/
skylib_mudos_v1/mudlib/doc/new/room/guild/
skylib_mudos_v1/mudlib/doc/new/room/outside/
skylib_mudos_v1/mudlib/doc/new/room/storeroom/
skylib_mudos_v1/mudlib/doc/object/
skylib_mudos_v1/mudlib/doc/playtesters/
skylib_mudos_v1/mudlib/doc/policy/
skylib_mudos_v1/mudlib/doc/weapons/
skylib_mudos_v1/mudlib/global/
skylib_mudos_v1/mudlib/global/creator/
skylib_mudos_v1/mudlib/global/handlers/
skylib_mudos_v1/mudlib/global/virtual/setup_compiler/
skylib_mudos_v1/mudlib/include/cmds/
skylib_mudos_v1/mudlib/include/effects/
skylib_mudos_v1/mudlib/include/npc/
skylib_mudos_v1/mudlib/include/room/
skylib_mudos_v1/mudlib/include/shops/
skylib_mudos_v1/mudlib/net/daemon/
skylib_mudos_v1/mudlib/net/daemon/chars/
skylib_mudos_v1/mudlib/net/inherit/
skylib_mudos_v1/mudlib/net/obj/
skylib_mudos_v1/mudlib/obj/amulets/
skylib_mudos_v1/mudlib/obj/b_day/
skylib_mudos_v1/mudlib/obj/clothes/
skylib_mudos_v1/mudlib/obj/dwarmours/plate/
skylib_mudos_v1/mudlib/obj/dwclothes/transport/horse/
skylib_mudos_v1/mudlib/obj/dwscabbards/
skylib_mudos_v1/mudlib/obj/dwweapons/axes/
skylib_mudos_v1/mudlib/obj/dwweapons/chains/
skylib_mudos_v1/mudlib/obj/faith/symbols/
skylib_mudos_v1/mudlib/obj/fungi/
skylib_mudos_v1/mudlib/obj/gatherables/
skylib_mudos_v1/mudlib/obj/instruments/
skylib_mudos_v1/mudlib/obj/magic/
skylib_mudos_v1/mudlib/obj/media/
skylib_mudos_v1/mudlib/obj/misc/player_shop/
skylib_mudos_v1/mudlib/obj/monster/godmother/
skylib_mudos_v1/mudlib/obj/monster/transport/
skylib_mudos_v1/mudlib/obj/rings/
skylib_mudos_v1/mudlib/obj/spells/
skylib_mudos_v1/mudlib/obj/stationery/
skylib_mudos_v1/mudlib/obj/stationery/envelopes/
skylib_mudos_v1/mudlib/obj/stationery/papers/
skylib_mudos_v1/mudlib/obj/toys/
skylib_mudos_v1/mudlib/obj/vessels/
skylib_mudos_v1/mudlib/obj/weapons/swords/
skylib_mudos_v1/mudlib/save/autodoc/
skylib_mudos_v1/mudlib/save/leaflets/
skylib_mudos_v1/mudlib/save/mail/
skylib_mudos_v1/mudlib/save/new_soul/data/
skylib_mudos_v1/mudlib/save/parcels/
skylib_mudos_v1/mudlib/save/playerinfo/
skylib_mudos_v1/mudlib/save/players/d/
skylib_mudos_v1/mudlib/save/random_names/
skylib_mudos_v1/mudlib/save/random_names/data/
skylib_mudos_v1/mudlib/save/terrains/
skylib_mudos_v1/mudlib/save/terrains/tutorial_desert/
skylib_mudos_v1/mudlib/save/terrains/tutorial_grassy_field/
skylib_mudos_v1/mudlib/save/terrains/tutorial_mountain/
skylib_mudos_v1/mudlib/save/todo_lists/
skylib_mudos_v1/mudlib/secure/
skylib_mudos_v1/mudlib/secure/cmds/admin/
skylib_mudos_v1/mudlib/secure/cmds/lord/
skylib_mudos_v1/mudlib/secure/config/
skylib_mudos_v1/mudlib/secure/handlers/autodoc/
skylib_mudos_v1/mudlib/secure/handlers/intermud/
skylib_mudos_v1/mudlib/secure/include/global/
skylib_mudos_v1/mudlib/secure/save/
skylib_mudos_v1/mudlib/secure/save/handlers/
skylib_mudos_v1/mudlib/secure/std/classes/
skylib_mudos_v1/mudlib/secure/std/modules/
skylib_mudos_v1/mudlib/std/commands/
skylib_mudos_v1/mudlib/std/commands/shadows/
skylib_mudos_v1/mudlib/std/creator/
skylib_mudos_v1/mudlib/std/dom/
skylib_mudos_v1/mudlib/std/effects/
skylib_mudos_v1/mudlib/std/effects/external/
skylib_mudos_v1/mudlib/std/effects/fighting/
skylib_mudos_v1/mudlib/std/effects/priest/
skylib_mudos_v1/mudlib/std/effects/room/
skylib_mudos_v1/mudlib/std/environ/
skylib_mudos_v1/mudlib/std/guilds/
skylib_mudos_v1/mudlib/std/guilds/old/
skylib_mudos_v1/mudlib/std/languages/
skylib_mudos_v1/mudlib/std/languages/BACKUPS/
skylib_mudos_v1/mudlib/std/liquids/
skylib_mudos_v1/mudlib/std/npc/
skylib_mudos_v1/mudlib/std/npc/goals/
skylib_mudos_v1/mudlib/std/npc/goals/basic/
skylib_mudos_v1/mudlib/std/npc/goals/misc/
skylib_mudos_v1/mudlib/std/npc/plans/
skylib_mudos_v1/mudlib/std/npc/plans/basic/
skylib_mudos_v1/mudlib/std/npc/types/
skylib_mudos_v1/mudlib/std/npc/types/helper/
skylib_mudos_v1/mudlib/std/npcs/
skylib_mudos_v1/mudlib/std/outsides/
skylib_mudos_v1/mudlib/std/races/shadows/
skylib_mudos_v1/mudlib/std/room/basic/topography/
skylib_mudos_v1/mudlib/std/room/controller/
skylib_mudos_v1/mudlib/std/room/inherit/topography/
skylib_mudos_v1/mudlib/std/room/topography/area/
skylib_mudos_v1/mudlib/std/room/topography/iroom/
skylib_mudos_v1/mudlib/std/room/topography/milestone/
skylib_mudos_v1/mudlib/std/shadows/curses/
skylib_mudos_v1/mudlib/std/shadows/disease/
skylib_mudos_v1/mudlib/std/shadows/fighting/
skylib_mudos_v1/mudlib/std/shadows/healing/
skylib_mudos_v1/mudlib/std/shadows/magic/
skylib_mudos_v1/mudlib/std/shadows/poison/
skylib_mudos_v1/mudlib/std/shadows/rituals/
skylib_mudos_v1/mudlib/std/shadows/room/
skylib_mudos_v1/mudlib/std/shops/controllers/
skylib_mudos_v1/mudlib/std/shops/objs/
skylib_mudos_v1/mudlib/std/shops/player_shop/
skylib_mudos_v1/mudlib/std/socket/
skylib_mudos_v1/mudlib/std/soul/
skylib_mudos_v1/mudlib/std/soul/d/
skylib_mudos_v1/mudlib/std/soul/e/
skylib_mudos_v1/mudlib/std/soul/i/
skylib_mudos_v1/mudlib/std/soul/j/
skylib_mudos_v1/mudlib/std/soul/k/
skylib_mudos_v1/mudlib/std/soul/l/
skylib_mudos_v1/mudlib/std/soul/n/
skylib_mudos_v1/mudlib/std/soul/o/
skylib_mudos_v1/mudlib/std/soul/q/
skylib_mudos_v1/mudlib/std/soul/u/
skylib_mudos_v1/mudlib/std/soul/v/
skylib_mudos_v1/mudlib/std/soul/y/
skylib_mudos_v1/mudlib/std/soul/z/
skylib_mudos_v1/mudlib/std/stationery/
skylib_mudos_v1/mudlib/w/
skylib_mudos_v1/mudlib/w/default/
skylib_mudos_v1/mudlib/w/default/armour/
skylib_mudos_v1/mudlib/w/default/clothes/
skylib_mudos_v1/mudlib/w/default/item/
skylib_mudos_v1/mudlib/w/default/npc/
skylib_mudos_v1/mudlib/w/default/room/
skylib_mudos_v1/mudlib/w/default/weapon/
skylib_mudos_v1/mudlib/www/
skylib_mudos_v1/mudlib/www/download/
skylib_mudos_v1/mudlib/www/java/
skylib_mudos_v1/mudlib/www/secure/
skylib_mudos_v1/mudlib/www/secure/lpc/advanced/
skylib_mudos_v1/mudlib/www/secure/lpc/intermediate/
skylib_mudos_v1/v22.2b14-DSv10/
skylib_mudos_v1/v22.2b14-DSv10/ChangeLog.old/
skylib_mudos_v1/v22.2b14-DSv10/Win32/
skylib_mudos_v1/v22.2b14-DSv10/compat/
skylib_mudos_v1/v22.2b14-DSv10/compat/simuls/
skylib_mudos_v1/v22.2b14-DSv10/include/
skylib_mudos_v1/v22.2b14-DSv10/mudlib/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/clone/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/command/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/data/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/etc/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/include/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/inherit/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/inherit/master/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/log/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/single/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/single/tests/compiler/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/single/tests/efuns/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/single/tests/operators/
skylib_mudos_v1/v22.2b14-DSv10/testsuite/u/
skylib_mudos_v1/v22.2b14-DSv10/tmp/
skylib_mudos_v1/v22.2b14-DSv10/windows/
/**
 * Keeps track of all the PT armours, weapons and clothing.
 * Based on the regular armoury - Sandoz.
 */

inherit ROOM_OBJ;

#define QC_DIR      "/d/qc/standard/"
#define ARMOUR_D    QC_DIR "armour/"
#define WEAPON_D    QC_DIR "weapons/"
#define CLOTHING_D  QC_DIR "clothes/"
#define JEWELLERY_D QC_DIR "jewellery/"
#define SCABBARD_D  QC_DIR "scabbards/"
#define MISC_D      QC_DIR "misc/"

nosave mapping armour, weapon, clothing, jewellery, scabbard, misc;

int query_keep_room_loaded() { return 1; }

/** @ignore yes */
mapping make_list( string base ) {
    string *dirs, dir, file_name;
    mixed file;
    mapping list;

    dirs = ({ });

    foreach( file in unguarded( (: get_dir( $(base), -1 ) :) ) )
        if( file[1] == -2 )
            dirs += ({ file[0] });

    // Make a mapping of names to filenames.
    list = ([ ]);
    foreach( dir in dirs ) {
        foreach( file_name in unguarded( (: get_dir( $(base+dir+"/*.c") ) :) ) )
            if( file_name[0] != '.')
                list[ replace_string( explode( file_name, ".")[0],
                    "_", " ") ] = base+dir+"/"+file_name;
    }

    foreach( file_name in unguarded( (: get_dir, base+"*.c" :) ) ) {
        if( file_name[0] != '.') {
            list[ replace_string( explode( file_name, ".")[0],
                "_", " ") ] = base+file_name;
        }
    }

    return list;

} /* make_list() */

/** @ignore yes */
int do_rehash() {
    armour = make_list(ARMOUR_D);
    weapon = make_list(WEAPON_D);
    clothing = make_list(CLOTHING_D);
    jewellery = make_list(JEWELLERY_D);
    scabbard = make_list(SCABBARD_D);
    misc = make_list(MISC_D);
    if( creatorp(TP) )
        write("Rehash completed.\n");
    return 1;
} /* do_rehash() */

void setup() {
    set_light(60);
    set_short("PT Armoury");
    set_determinate("the ");

    set_long("This is the PT Armoury.  From here you can list all of the PT "
        "\"weapons\", \"armour\", \"clothing\", \"jewellery\", "
        "\"scabbards\" and \"misc\" that are available, and \"request\" one "
        "of them.  The armoury stores its list of items in mappings, which "
        "can be updated with \"rehash\".\n");

    armour = weapon = clothing = jewellery = scabbard = misc = ([ ]);

    do_rehash();

} /* setup() */

/**
 * Returns the current list of known weapons.
 * @return the weapons mapping
 */
mapping query_weapons() { return weapon; }

int query_is_weapon( string str ) { return !undefinedp( weapon[str] ); }

/**
 * Returns the current list of known armours.
 * @return the armours mapping
 */
mapping query_armour() { return armour; }

int query_is_armour( string str ) { return !undefinedp( armour[str] ); }

/**
 * Returns the current list of known clothing.
 * @return the clothing mapping
 */
mapping query_clothing() { return clothing; }

int query_is_clothing( string str ) { return !undefinedp( clothing[str] ); }

/**
 * Returns the current list of known jewelley.
 * @return the jewelley mapping
 */
mapping query_jewellery() { return jewellery; }

int query_is_jewellery( string str ) { return !undefinedp( jewellery[str] ); }

/**
 * Returns the current list of known scabards.
 * @return the scabards mapping
 */
mapping query_scabbards() { return scabbard; }

int query_is_scabbard( string str ) { return !undefinedp( scabbard[str] ); }

/**
 * Returns the current list of known misc items.
 * @return the scabards mapping
 */
mapping query_misc() { return misc; }

int query_is_misc( string str ) { return !undefinedp( misc[str] ); }

/**
 * General item retreival function.  It returns a new item.
 * The "word" parameter is the name of the requested item, essentially
 * the filename without directory and with "_"'s changed to " "'s.
 * <p>
 * @param word the name of the item to retreive
 * @return the requested object, or 0 on failure
 */
object request_item( string word ) {
    object thing;
    string filename;

    if( !word )
        return 0;

    if( weapon[word] )
        filename = weapon[word];
    else if( armour[word] )
        filename = armour[word];
    else if( clothing[word] )
        filename = clothing[word];
    else if( jewellery[word] )
        filename = jewellery[word];
    else if( scabbard[word] )
        filename = scabbard[word];
    else if( misc[word] )
        filename = misc[word];
    else {
        printf("No file for item \"%s\".\n", word );
        log_file("PT_ARMOURY", "No file for %s (%s)\n", word, file_name(PO) );
        return 0;
    }

    if( file_exists( filename ) )
        thing = clone_object(filename);

    if( !thing ) {
        printf("Cannot find item \"%s\".\n", word );
        log_file("PT_ARMOURY", "Cannot find %s (%s)\n", word, file_name(PO) );
        return 0;
    }

    return thing;

} /* request_item() */

/** @ignore yes */
int do_request( string word ) {
    object thing;

    if( !word || word == "" )
        return notify_fail("Request what?\n");

    thing = request_item( word );

    if( !thing )
        return notify_fail( word+" not found.\n");

    if( (int)thing->move(TP) ) {
        write( (string)thing->the_short()+" has been placed in here.\n");
        thing->move(TO);
    } else
        write( (string)thing->the_short()+" has been placed in your "
            "inventory.\n");

    return 1;

} /* do_request() */

/** @ignore yes */
void init() {
    ::init();
    add_command("request", "<string'item'>", (: do_request($4[0]) :) );
    add_command("weapons", "");
    add_command("armour", "");
    add_command("clothing", "");
    add_command("jewellery", "");
    add_command("scabbards", "");
    add_command("misc", "");
    add_command("rehash", "");
} /* init() */

/** @ignore yes */
int do_armour() {
    if( !sizeof(armour) )
        return notify_fail("There are no armours in PT right now.\n");
    printf("Armours available for PTs are:\n%-*#s\n",
        (int)TP->query_cols(), implode(keys(armour), "\n") );
    return 1;
} /* do_armour() */

/** @ignore yes */
int do_weapons() {
    if( !sizeof(weapon) )
        return notify_fail("There are no weapons in PT right now.\n");
    printf("Weapons available for PTs are:\n%-*#s\n",
        (int)TP->query_cols(), implode(keys(weapon), "\n") );
    return 1;
} /* do_weapons() */

/** @ignore yes */
int do_clothing() {
    if( !sizeof(clothing) )
        return notify_fail("There are no clothes in PT right now.\n");
    printf("Clothes available for PTs are:\n%-*#s\n",
        (int)TP->query_cols(), implode(keys(clothing), "\n") );
    return 1;
} /* do_clothing() */

/** @ignore yes */
int do_jewellery() {
    if( !sizeof(jewellery) )
        return notify_fail("There are no jewellery in PT right now.\n");
    printf("Jewellery available for PTs are:\n%-*#s\n",
        (int)TP->query_cols(), implode(keys(jewellery), "\n") );
    return 1;
} /* do_jewellery() */

/** @ignore yes */
int do_scabbards() {
    if( !sizeof(scabbard) )
        return notify_fail("There are no scabbards in PT right now.\n");
    printf("Scabbards available for PTs are:\n%-*#s\n",
        (int)TP->query_cols(), implode(keys(scabbard), "\n") );
    return 1;
} /* do_scabbards() */

/** @ignore yes */
int do_misc() {
    if( !sizeof(misc) )
        return notify_fail("There are no misc items in PT right now.\n");
    printf("Misc items available for PTs are:\n%-*#s\n",
        (int)TP->query_cols(), implode(keys(misc), "\n") );
    return 1;
} /* do_misc() */