dw_fluffos_v2/
dw_fluffos_v2/fluffos-2.9-ds2.05/
dw_fluffos_v2/fluffos-2.9-ds2.05/ChangeLog.old/
dw_fluffos_v2/fluffos-2.9-ds2.05/Win32/
dw_fluffos_v2/fluffos-2.9-ds2.05/compat/
dw_fluffos_v2/fluffos-2.9-ds2.05/compat/simuls/
dw_fluffos_v2/fluffos-2.9-ds2.05/include/
dw_fluffos_v2/fluffos-2.9-ds2.05/testsuite/
dw_fluffos_v2/fluffos-2.9-ds2.05/testsuite/clone/
dw_fluffos_v2/fluffos-2.9-ds2.05/testsuite/command/
dw_fluffos_v2/fluffos-2.9-ds2.05/testsuite/data/
dw_fluffos_v2/fluffos-2.9-ds2.05/testsuite/etc/
dw_fluffos_v2/fluffos-2.9-ds2.05/testsuite/include/
dw_fluffos_v2/fluffos-2.9-ds2.05/testsuite/inherit/
dw_fluffos_v2/fluffos-2.9-ds2.05/testsuite/inherit/master/
dw_fluffos_v2/fluffos-2.9-ds2.05/testsuite/log/
dw_fluffos_v2/fluffos-2.9-ds2.05/testsuite/single/
dw_fluffos_v2/fluffos-2.9-ds2.05/testsuite/single/tests/compiler/
dw_fluffos_v2/fluffos-2.9-ds2.05/testsuite/single/tests/efuns/
dw_fluffos_v2/fluffos-2.9-ds2.05/testsuite/single/tests/operators/
dw_fluffos_v2/fluffos-2.9-ds2.05/testsuite/u/
dw_fluffos_v2/fluffos-2.9-ds2.05/tmp/
dw_fluffos_v2/fluffos-2.9-ds2.05/windows/
dw_fluffos_v2/lib/
dw_fluffos_v2/lib/binaries/cmds/
dw_fluffos_v2/lib/binaries/cmds/creator/
dw_fluffos_v2/lib/binaries/cmds/living/
dw_fluffos_v2/lib/binaries/cmds/player/
dw_fluffos_v2/lib/binaries/d/admin/obj/
dw_fluffos_v2/lib/binaries/d/liaison/
dw_fluffos_v2/lib/binaries/global/virtual/
dw_fluffos_v2/lib/binaries/global/virtual/setup_compiler/
dw_fluffos_v2/lib/binaries/obj/handlers/autodoc/
dw_fluffos_v2/lib/binaries/obj/handlers/terrain_things/
dw_fluffos_v2/lib/binaries/obj/misc/
dw_fluffos_v2/lib/binaries/obj/misc/buckets/
dw_fluffos_v2/lib/binaries/obj/monster/
dw_fluffos_v2/lib/binaries/obj/reactions/
dw_fluffos_v2/lib/binaries/obj/reagents/
dw_fluffos_v2/lib/binaries/secure/cmds/creator/
dw_fluffos_v2/lib/binaries/secure/master/
dw_fluffos_v2/lib/binaries/std/
dw_fluffos_v2/lib/binaries/std/dom/
dw_fluffos_v2/lib/binaries/std/effects/object/
dw_fluffos_v2/lib/binaries/std/guilds/
dw_fluffos_v2/lib/binaries/std/languages/
dw_fluffos_v2/lib/binaries/std/races/
dw_fluffos_v2/lib/binaries/std/room/
dw_fluffos_v2/lib/binaries/std/room/basic/
dw_fluffos_v2/lib/binaries/std/shops/
dw_fluffos_v2/lib/binaries/std/shops/inherit/
dw_fluffos_v2/lib/binaries/www/
dw_fluffos_v2/lib/cmds/guild-race/
dw_fluffos_v2/lib/cmds/guild-race/crafts/
dw_fluffos_v2/lib/cmds/guild-race/other/
dw_fluffos_v2/lib/cmds/playtester/
dw_fluffos_v2/lib/cmds/playtester/senior/
dw_fluffos_v2/lib/d/admin/
dw_fluffos_v2/lib/d/admin/log/
dw_fluffos_v2/lib/d/admin/mapper/31-10-01/mapmaker/event/
dw_fluffos_v2/lib/d/admin/meetings/
dw_fluffos_v2/lib/d/admin/obj/
dw_fluffos_v2/lib/d/admin/room/we_care/
dw_fluffos_v2/lib/d/admin/save/
dw_fluffos_v2/lib/d/dist/
dw_fluffos_v2/lib/d/dist/mtf/
dw_fluffos_v2/lib/d/dist/pumpkin/
dw_fluffos_v2/lib/d/dist/pumpkin/chars/
dw_fluffos_v2/lib/d/dist/pumpkin/desert/
dw_fluffos_v2/lib/d/dist/pumpkin/gumboot/
dw_fluffos_v2/lib/d/dist/pumpkin/hospital/
dw_fluffos_v2/lib/d/dist/pumpkin/inherit/
dw_fluffos_v2/lib/d/dist/pumpkin/map/
dw_fluffos_v2/lib/d/dist/pumpkin/plain/
dw_fluffos_v2/lib/d/dist/pumpkin/pumpkin/
dw_fluffos_v2/lib/d/dist/pumpkin/save/
dw_fluffos_v2/lib/d/dist/pumpkin/squash/
dw_fluffos_v2/lib/d/dist/pumpkin/terrain/
dw_fluffos_v2/lib/d/dist/pumpkin/woods/
dw_fluffos_v2/lib/d/dist/start/
dw_fluffos_v2/lib/d/learning/TinyTown/buildings/
dw_fluffos_v2/lib/d/learning/TinyTown/map/
dw_fluffos_v2/lib/d/learning/TinyTown/roads/
dw_fluffos_v2/lib/d/learning/add_command/
dw_fluffos_v2/lib/d/learning/arms_and_weps/
dw_fluffos_v2/lib/d/learning/chars/
dw_fluffos_v2/lib/d/learning/cutnpaste/
dw_fluffos_v2/lib/d/learning/examples/npcs/
dw_fluffos_v2/lib/d/learning/examples/player_houses/npcs/
dw_fluffos_v2/lib/d/learning/examples/terrain_map/basic/
dw_fluffos_v2/lib/d/learning/functions/
dw_fluffos_v2/lib/d/learning/handlers/
dw_fluffos_v2/lib/d/learning/help_topics/npcs/
dw_fluffos_v2/lib/d/learning/help_topics/objects/
dw_fluffos_v2/lib/d/learning/help_topics/rcs_demo/
dw_fluffos_v2/lib/d/learning/help_topics/rooms/
dw_fluffos_v2/lib/d/learning/help_topics/rooms/crowd/
dw_fluffos_v2/lib/d/learning/help_topics/rooms/situations/
dw_fluffos_v2/lib/d/learning/items/
dw_fluffos_v2/lib/d/learning/save/
dw_fluffos_v2/lib/d/liaison/
dw_fluffos_v2/lib/d/liaison/NEWBIE/doc/
dw_fluffos_v2/lib/d/liaison/NEWBIE/save/oldlog/
dw_fluffos_v2/lib/db/
dw_fluffos_v2/lib/doc/
dw_fluffos_v2/lib/doc/creator/
dw_fluffos_v2/lib/doc/creator/autodoc/include/reaction/
dw_fluffos_v2/lib/doc/creator/autodoc/include/ritual_system/
dw_fluffos_v2/lib/doc/creator/autodoc/include/talker/
dw_fluffos_v2/lib/doc/creator/autodoc/include/terrain_map/
dw_fluffos_v2/lib/doc/creator/autodoc/obj/baggage/
dw_fluffos_v2/lib/doc/creator/autodoc/obj/clock/
dw_fluffos_v2/lib/doc/creator/autodoc/obj/clothing/
dw_fluffos_v2/lib/doc/creator/autodoc/obj/cont_save/
dw_fluffos_v2/lib/doc/creator/autodoc/obj/corpse/
dw_fluffos_v2/lib/doc/creator/autodoc/obj/money/
dw_fluffos_v2/lib/doc/creator/autodoc/obj/monster/
dw_fluffos_v2/lib/doc/creator/autodoc/obj/scabbard/
dw_fluffos_v2/lib/doc/creator/autodoc/obj/service_provider/
dw_fluffos_v2/lib/doc/creator/autodoc/obj/state_changer/
dw_fluffos_v2/lib/doc/creator/autodoc/obj/wand/
dw_fluffos_v2/lib/doc/creator/autodoc/std/book_dir/
dw_fluffos_v2/lib/doc/creator/autodoc/std/key/
dw_fluffos_v2/lib/doc/creator/autodoc/std/learning/
dw_fluffos_v2/lib/doc/creator/autodoc/std/map/
dw_fluffos_v2/lib/doc/creator/autodoc/std/race/
dw_fluffos_v2/lib/doc/creator/autodoc/std/weapon_logic/
dw_fluffos_v2/lib/doc/creator/files/
dw_fluffos_v2/lib/doc/creator/policy/
dw_fluffos_v2/lib/doc/creator/room/
dw_fluffos_v2/lib/doc/effects/
dw_fluffos_v2/lib/doc/ideas/
dw_fluffos_v2/lib/doc/known_command/
dw_fluffos_v2/lib/doc/lpc/basic_manual/
dw_fluffos_v2/lib/doc/lpc/intermediate/
dw_fluffos_v2/lib/doc/new/add_command/
dw_fluffos_v2/lib/doc/new/handlers/
dw_fluffos_v2/lib/doc/new/living/
dw_fluffos_v2/lib/doc/new/living/race/
dw_fluffos_v2/lib/doc/new/living/spells/
dw_fluffos_v2/lib/doc/new/player/
dw_fluffos_v2/lib/doc/new/room/guild/
dw_fluffos_v2/lib/doc/new/room/outside/
dw_fluffos_v2/lib/doc/new/room/storeroom/
dw_fluffos_v2/lib/doc/object/
dw_fluffos_v2/lib/doc/playtesters/
dw_fluffos_v2/lib/doc/policy/
dw_fluffos_v2/lib/doc/weapons/
dw_fluffos_v2/lib/global/handlers/
dw_fluffos_v2/lib/global/virtual/setup_compiler/
dw_fluffos_v2/lib/include/
dw_fluffos_v2/lib/include/cmds/
dw_fluffos_v2/lib/include/effects/
dw_fluffos_v2/lib/include/npc/
dw_fluffos_v2/lib/include/shops/
dw_fluffos_v2/lib/net/daemon/chars/
dw_fluffos_v2/lib/net/inherit/
dw_fluffos_v2/lib/net/intermud3/
dw_fluffos_v2/lib/net/intermud3/services/
dw_fluffos_v2/lib/net/obj/
dw_fluffos_v2/lib/net/save/
dw_fluffos_v2/lib/net/smnmp/
dw_fluffos_v2/lib/net/snmp/
dw_fluffos_v2/lib/obj/amulets/
dw_fluffos_v2/lib/obj/b_day/
dw_fluffos_v2/lib/obj/examples/
dw_fluffos_v2/lib/obj/food/alcohol/
dw_fluffos_v2/lib/obj/food/chocolates/
dw_fluffos_v2/lib/obj/food/fruits/
dw_fluffos_v2/lib/obj/food/meat/
dw_fluffos_v2/lib/obj/food/nuts/
dw_fluffos_v2/lib/obj/food/seafood/
dw_fluffos_v2/lib/obj/food/vegetables/
dw_fluffos_v2/lib/obj/fungi/
dw_fluffos_v2/lib/obj/furnitures/artwork/
dw_fluffos_v2/lib/obj/furnitures/bathroom/
dw_fluffos_v2/lib/obj/furnitures/beds/
dw_fluffos_v2/lib/obj/furnitures/cabinets/
dw_fluffos_v2/lib/obj/furnitures/chairs/
dw_fluffos_v2/lib/obj/furnitures/chests/
dw_fluffos_v2/lib/obj/furnitures/clocks/
dw_fluffos_v2/lib/obj/furnitures/crockery/
dw_fluffos_v2/lib/obj/furnitures/cupboards/
dw_fluffos_v2/lib/obj/furnitures/cushions/
dw_fluffos_v2/lib/obj/furnitures/fake_plants/
dw_fluffos_v2/lib/obj/furnitures/lamps/
dw_fluffos_v2/lib/obj/furnitures/mirrors/
dw_fluffos_v2/lib/obj/furnitures/outdoor/
dw_fluffos_v2/lib/obj/furnitures/safes/
dw_fluffos_v2/lib/obj/furnitures/shelves/
dw_fluffos_v2/lib/obj/furnitures/sideboards/
dw_fluffos_v2/lib/obj/furnitures/sofas/
dw_fluffos_v2/lib/obj/furnitures/stoves/
dw_fluffos_v2/lib/obj/furnitures/tables/
dw_fluffos_v2/lib/obj/furnitures/wardrobes/
dw_fluffos_v2/lib/obj/handlers/
dw_fluffos_v2/lib/obj/handlers/autodoc/
dw_fluffos_v2/lib/obj/jewellery/anklets/
dw_fluffos_v2/lib/obj/jewellery/bracelets/
dw_fluffos_v2/lib/obj/jewellery/earrings/
dw_fluffos_v2/lib/obj/jewellery/misc/
dw_fluffos_v2/lib/obj/jewellery/necklaces/
dw_fluffos_v2/lib/obj/jewellery/rings/
dw_fluffos_v2/lib/obj/media/
dw_fluffos_v2/lib/obj/misc/buckets/
dw_fluffos_v2/lib/obj/misc/jars/
dw_fluffos_v2/lib/obj/misc/papers/
dw_fluffos_v2/lib/obj/misc/player_shop/
dw_fluffos_v2/lib/obj/misc/shops/
dw_fluffos_v2/lib/obj/misc/traps/
dw_fluffos_v2/lib/obj/monster/
dw_fluffos_v2/lib/obj/monster/godmother/
dw_fluffos_v2/lib/obj/monster/transport/
dw_fluffos_v2/lib/obj/plants/inherit/
dw_fluffos_v2/lib/obj/potions/
dw_fluffos_v2/lib/open/boards/
dw_fluffos_v2/lib/save/autodoc/
dw_fluffos_v2/lib/save/bank_accounts/
dw_fluffos_v2/lib/save/boards/frog/
dw_fluffos_v2/lib/save/books/bed_catalog/
dw_fluffos_v2/lib/save/creators/
dw_fluffos_v2/lib/save/mail/
dw_fluffos_v2/lib/save/mail/p/
dw_fluffos_v2/lib/save/soul/data/
dw_fluffos_v2/lib/save/tasks/
dw_fluffos_v2/lib/save/vaults/
dw_fluffos_v2/lib/secure/cmds/lord/
dw_fluffos_v2/lib/secure/config/
dw_fluffos_v2/lib/secure/items/
dw_fluffos_v2/lib/secure/player/
dw_fluffos_v2/lib/soul/
dw_fluffos_v2/lib/soul/i/
dw_fluffos_v2/lib/soul/j/
dw_fluffos_v2/lib/soul/k/
dw_fluffos_v2/lib/soul/o/
dw_fluffos_v2/lib/soul/q/
dw_fluffos_v2/lib/soul/to_approve/
dw_fluffos_v2/lib/soul/u/
dw_fluffos_v2/lib/soul/v/
dw_fluffos_v2/lib/soul/wish_list/
dw_fluffos_v2/lib/soul/y/
dw_fluffos_v2/lib/soul/z/
dw_fluffos_v2/lib/std/creator/
dw_fluffos_v2/lib/std/effects/
dw_fluffos_v2/lib/std/effects/attached/
dw_fluffos_v2/lib/std/effects/external/
dw_fluffos_v2/lib/std/effects/fighting/
dw_fluffos_v2/lib/std/effects/other/
dw_fluffos_v2/lib/std/environ/
dw_fluffos_v2/lib/std/guilds/
dw_fluffos_v2/lib/std/hospital/
dw_fluffos_v2/lib/std/house/
dw_fluffos_v2/lib/std/house/onebedhouse/
dw_fluffos_v2/lib/std/house/onebedhut/
dw_fluffos_v2/lib/std/house/tworoomflat/
dw_fluffos_v2/lib/std/languages/
dw_fluffos_v2/lib/std/liquids/
dw_fluffos_v2/lib/std/nationality/
dw_fluffos_v2/lib/std/nationality/accents/
dw_fluffos_v2/lib/std/nationality/accents/national/
dw_fluffos_v2/lib/std/nationality/accents/regional/
dw_fluffos_v2/lib/std/npc/goals/
dw_fluffos_v2/lib/std/npc/goals/basic/
dw_fluffos_v2/lib/std/npc/goals/misc/
dw_fluffos_v2/lib/std/npc/inherit/
dw_fluffos_v2/lib/std/npc/plans/
dw_fluffos_v2/lib/std/npc/plans/basic/
dw_fluffos_v2/lib/std/outsides/
dw_fluffos_v2/lib/std/races/shadows/
dw_fluffos_v2/lib/std/room/basic/topography/
dw_fluffos_v2/lib/std/room/controller/
dw_fluffos_v2/lib/std/room/controller/topography/
dw_fluffos_v2/lib/std/room/furniture/games/
dw_fluffos_v2/lib/std/room/furniture/inherit/
dw_fluffos_v2/lib/std/room/inherit/carriage/
dw_fluffos_v2/lib/std/room/inherit/topography/
dw_fluffos_v2/lib/std/room/punishments/
dw_fluffos_v2/lib/std/room/topography/area/
dw_fluffos_v2/lib/std/room/topography/iroom/
dw_fluffos_v2/lib/std/room/topography/milestone/
dw_fluffos_v2/lib/std/shadows/
dw_fluffos_v2/lib/std/shadows/attached/
dw_fluffos_v2/lib/std/shadows/curses/
dw_fluffos_v2/lib/std/shadows/disease/
dw_fluffos_v2/lib/std/shadows/fighting/
dw_fluffos_v2/lib/std/shadows/room/
dw_fluffos_v2/lib/std/shops/controllers/
dw_fluffos_v2/lib/std/shops/objs/
dw_fluffos_v2/lib/std/shops/player_shop/
dw_fluffos_v2/lib/std/shops/player_shop/office_code/
dw_fluffos_v2/lib/std/socket/
dw_fluffos_v2/lib/www/
dw_fluffos_v2/lib/www/external/autodoc/
dw_fluffos_v2/lib/www/external/java/telnet/Documentation/
dw_fluffos_v2/lib/www/external/java/telnet/Documentation/images/
dw_fluffos_v2/lib/www/external/java/telnet/examples/
dw_fluffos_v2/lib/www/external/java/telnet/tools/
dw_fluffos_v2/lib/www/pics/
dw_fluffos_v2/lib/www/secure/creator/
dw_fluffos_v2/lib/www/secure/editors/
dw_fluffos_v2/lib/www/secure/survey_results/
dw_fluffos_v2/win32/
/**
* Player-run shop employee badge.
* This object is the badge claimable by employees of player-run shops.
* It allows employees of a particular shop to chat to each other on a
* deidcated channel.  It also sets a player-title, and shows which employees
* are currently logged on.
* This object should not be inherited by anything, but should be created
* by the player_shop office.
* @author Ringo
* @started 1st August 1999
*/
#include <player_shop.h>

inherit "/obj/armour";

private int do_badge(string);
private int do_chat(string);
private int get_properties();
private string cap_name(string);

private string _office, 
_title,
_channel,
_owner;

private int _echo;

void setup()
{
    set_name("badge");
    set_short("employee badge");
    add_adjective("employee");
    add_adjective("tin");
    add_adjective("small");
    set_main_plural("employee badges");
    set_weight(1);
    set_value(0);
    set_type("badge");
    setup_armour(640);
    set_damage_chance(5);
    set_wear_remove_func(file_name(this_object()),
      "wear_remove_badge");
    add_property("no recycling", 1);
    add_extra_look(this_object());
    if (!query_property("office") || !query_property("owner"))
    {
        return;
    }
    _office = query_property("office");
    _owner = query_property("owner");
    _echo = query_property("echo");
    _title = _office->shop_very_short();
    _channel = _office->query_channel();
    set_long( "This is a small tin badge which marks " +
      cap_name(_owner) + " as an employee of "+
      _office->query_shop_name()+ ", "+ _office->query_place()+ ".\n");
    add_adjective(_channel);
}
/* setup() */


/** @ignore yes */
private string cap_name(string name) 
{
    if (test_player(name))
        return PLAYER_HANDLER->query_cap_name(name);
    else return capitalize(name);
}

/** @ignore yes */
void init()
{
    object tp;

    if (!_office || !_owner)
    {
        if (!get_properties()) return;
        set_long("This is a small tin badge which marks "+
          cap_name(_owner) + " as an employee of "+
          _office->query_shop_name()+ ", "+ _office->query_place()+ ".\n");
        add_adjective(_channel);
    }
    tp = this_player();
    if (!_office->query_employee(tp->query_name()) &&
      !_office->query_retired(tp->query_name()) &&
      !tp->query_creator())
    {
        return;
    }
    add_command("badge", ({ "help", "echo" }), (: do_badge($5) :));
    add_command("h"+ _channel, "", (: do_badge("hist") :));
    add_command(_channel+"?", "", (: do_badge("who") :));
    add_command(_channel, "<string'text'>", (: do_chat($4[0]) :));
    add_command(_channel+"@", "<string'text'>", (: do_chat("@"+$4[0]) :));
}
/* init() */


/** @ignore yes */
private int do_badge(string args)
{
    if (!_office || !_owner)
    {
        if (!get_properties()) return 1;
    }
    add_succeeded_mess("");
    if (args == "who")
    {
        tell_object(this_player(),
          "The following employees from "+ _office->query_shop_name()+
          " are logged on: \n" + _office->badge_list());
        return 1;
    }
    else if (args == "hist")
    {
        string result = "$P$"+ _channel+ " channel$P$\n";
        mixed *hist = HISTORY_HANDLER->query_chat_history(lower_case(_channel));

        tell_object(this_player(),
          "You ask the badge for the last few chats on the "+ _channel+ 
          " channel\n");
        if (!arrayp(hist) || !sizeof(hist))
        {
            tell_object(this_player(),
              "The badge mutters that nothing has been said on this channel, "
              "or it is not being remembered.\n");
            return 1;
        }
        result += implode(map(hist, (: "$I$5=$C$" + $1[0] + $1[1] + 
              "%^RESET%^" :)), "\n" ); 
        tell_object(this_player(), result);
    }
    else if (args == "echo")
    {
        if (_echo)
        {
            tell_object(this_player(), "Local echo now off.\n");
            _echo = 0;
        }
        else
        {
            tell_object(this_player(), "Local echo now on.\n");
            _echo = 1;
        }
        add_property("echo", _echo);
    }
    else
    {
        string result = sprintf("Commands for this badge:\n\n"
          "   %-13s - chat a message to the other employees\n"
          "   %-13s - emote a message to the other employees\n"
          "   %-13s - list employees logged on\n"
          "   h%-12s - show recent chat history\n"
          "   badge echo    - Turn local echo on/off\n\n"
          "You can also set your preferred chat colour using the \"colour "
          "shopchat <colour>\" command.\n", _channel, _channel + "@",
          _channel + "?", _channel, _channel);
        tell_object(this_player(), result);
    }
    return 1;
}
/* do_badge() */


/** @ignore yes */
private int do_chat(string wisp)
{
    string sender;
    object *things, tp;

    add_succeeded_mess("");
    if (!_office || !_owner)
    {
        if (!get_properties()) return 1;
    }
    tp = this_player();
    if (!tp->query_property(_channel+ "_on"))
    {
        return notify_fail("You are not wearing the " + _channel+
          " badge!\n");
    }
    if (tp->query_property("gagged"))
    {
        return notify_fail("You have been gagged!  You cannot chat until "
          "your gag is removed.  Perhaps you should talk to a creator about "
          "this.\n");
    }
    if (!tp->query_creator())
    {
        wisp = replace_string(wisp, "%^", "");
    }
    if (!wisp || ( wisp == "" ) || wisp == "@")
    {
        return notify_fail("Chat what?\n");
    }
    if (environment(this_object()) != tp)
    {
        return notify_fail("You're too far from the badge to whisper into "
          "it.\n");
    }
    tell_object(tp,  "You whisper into the badge.\n");
    sender = tp->query_cap_name();
    if (tp->query_name() == CREATOR && tp->query_invis())
    {
        sender = tp->query_short();
    }
    wisp = replace(wisp, sprintf("%c", 7), "!");
    things = children(BADGE);

    if (_echo)
    {
        things -= ({find_object(BADGE)});
    }
    else
    {
        things -= ({this_object(), find_object(BADGE)});
    }
    things->receive(_channel ,sender, wisp);
    if (wisp[0] == '@')
    {
        if (wisp[1] == ''')
      {
         HISTORY_HANDLER->add_chat_history(_channel, sender, wisp[1..1000]);
      }
      else
      {
         HISTORY_HANDLER->add_chat_history(_channel, sender+ " ", wisp[1..1000]);
      }
   }
   else
   {
      HISTORY_HANDLER->add_chat_history(_channel, sender +": ", wisp);
   }
   return 1;
}
/* do_chat() */


/** @ignore yes */
string extra_look(object thing)
{
   object tp;
   
   tp = this_player();
   if (!_office || !_owner)
   {
      if (!get_properties()) return "";
   }
   if (!_office->query_employee(tp->query_name()) &&
      !_office->query_retired(tp->query_name()) && !tp->query_creator())
   {
      return "";
   }
   return "You can get a list of commands by typing \"badge help\"\n";
}
/* extra_look() */


/** @ignore yes */
private int get_properties()
{
   if (!query_property("office") || !query_property("owner"))
   {
      tell_object(environment(), "This badge is broken.  "
         "Please claim another.\n");
      move("/room/rubbish");
      return 0;
   }
   _office = query_property("office");
   _owner = query_property("owner");
   _echo = query_property("echo");
   _title = _office->shop_very_short();
   _channel = _office->query_channel();
   return 1;
}
/* get_properties() */


/** @ignore yes */
string query_channel() { return copy(_channel); }


/** @ignore yes */
void receive(string channel, string sender, string text)
{
   object owner = environment();
   string *ignoring, prev_ob;
   
   if (!_office || !_owner)
   {
      if (!get_properties()) return;
   }
   prev_ob = base_name(previous_object());
   if (prev_ob != BADGE && prev_ob != _office->query_shop_front()
      /* Remove this condition once Tarnach's changed over */
      && prev_ob != "/d/am/square/emporium/TARNACH/consumables")
   {
      LOG_ERROR("shop_badge.c", "receive("+channel+","+sender+","+text+")");
      return;
   }
   if (!owner || (!living(owner)))
   {
      return;
   }
   if (!_office->query_employee(owner->query_name()) &&
      !_office->query_retired(owner->query_name()) &&
      !owner->query_creator())
   {
      return;
   }
   ignoring = owner->query_property("ignoring");
   if (ignoring && member_array(lower_case(sender), ignoring) != -1)
   {
      return;
   }
   if (channel != _channel || !owner->query_property(_channel+ "_on"))
   {
      return;
   }
   if (text[0] == '@')
   {
      if (text[1] == ''')
      {
         text = "["+ lower_case( _channel )+ "] "+ sender + text[1..1000];
      }
      else
      {
         text = "["+ lower_case( _channel )+ "] "+ sender +" "+ text[1..1000];
      }
   }
   else
   {
      text = "["+ lower_case( _channel )+ "] "+ sender +": "+ text;
   }
   
   tell_object(owner, owner->colour_event("shopchat", "%^CYAN%^") +
      "$I$5=$C$"+ text + "%^RESET%^\n");
   return;
}
/* receive() */


/** @ignore yes */
void set_props(string path, string owner)
{
   if (!path || path == "")
   {
      return;
   }
   if (previous_object() && previous_object() != find_object(path)) 
   {
      LOG_ERROR("shop_badge.c", "set_props("+path+","+owner+")");
      return;
   }
   set_long("This is a small tin badge which marks " +
      cap_name( owner ) + " as an employee of "+
      path->query_shop_name()+ ", "+ path->query_place()+ ".\n");
   add_property("office", path);
   add_property("owner", owner);
   _office = path;
   _owner = owner;
   _title = _office->shop_very_short();
   _channel = _office->query_channel();
   add_adjective( _channel );
}
/* set_props() */


/** @ignore yes */
void wear_remove_badge(object thing)
{   
   if (!_office || !_owner)
   {
      if (!get_properties()) return;
   }
   if (thing)
   {
      int level;
      string start;

      if (!living(thing))
      {
         return;
      }

if (thing->query_creator())
{
thing->add_property(_channel+ "_on", 1);
return;
}

      level = _office->query_employee(thing->query_name());
      
      /* Once Tarnach's transferred over replace following line with
       * if ( !level )
       */
      if (!level || level == -1)
      {
         if (_office->query_retired(thing->query_name()))
         {
            start = "Retired manager of ";
         }
         else return;
      }
      else if (level & MANAGER)
      {
         start = "Manager of ";
      }
      else if (level & SUPERVISOR)
      {
         start = "Supervisor of ";
      }
      else
      {
         start = "Employee of ";
      }
      thing->add_property(_channel+ "_on", 1);
      thing->set_title(_title, start + _office->query_shop_name());
      return;
   }
   thing = previous_object()->query_worn_by();
   if (thing)
   {
      thing->remove_property(_channel+ "_on");
      thing->remove_title(_title);
   }
}
/* wear_remove_badge() */