EotS/
EotS/area/
EotS/player/
EotS/src/
/***************************************************************************
 *  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
 *  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
 *                                                                         *
 *  Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael          *
 *  Chastain, Michael Quan, and Mitchell Tse.                              *
 *                                                                         *
 *  Envy Diku Mud improvements copyright (C) 1994 by Michael Quan, David   *
 *  Love, Guilherme 'Willie' Arnold, and Mitchell Tse.                     *
 *                                                                         *
 *  In order to use any part of this Envy Diku Mud, you must comply with   *
 *  the original Diku license in 'license.doc', the Merc license in        *
 *  'license.txt', as well as the Envy license in 'license.nvy'.           *
 *  In particular, you may not remove either of these copyright notices.   *
 *                                                                         *
 *  Much time and thought has gone into this software and you are          *
 *  benefitting.  We hope that you share your changes too.  What goes      *
 *  around, comes around.                                                  *
 ***************************************************************************/

#define unix 1
#if defined( macintosh )
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"



bool	check_social	args( ( CHAR_DATA *ch, char *command,
			       char *argument ) );
bool    check_alias     args( ( CHAR_DATA *ch, char *command,
			       char *argument ) );
void    add_alias   args( ( CHAR_DATA *ch, ALIAS_DATA *pAl,
                                char *old, char *new ) );
bool	can_use_cmd	args( ( int cmd, CHAR_DATA *ch, int trust ) );

/*
 * Command logging types.
 */
#define LOG_NORMAL              0
#define LOG_ALWAYS              1
#define LOG_NEVER               2
/*
 * Altrag was here.
 */
#define LOG_BUILD               3


/*
 * God Levels - Check them out in merc.h
*/

#define L_HER                   LEVEL_HERO

/*
 * Log-all switch.
 */
bool				fLogAll		    = FALSE;



/*
 * Command table.
 */
struct	cmd_type	cmd_table	[ ] =
{
    /*
     * Common movement commands.
     */
    { "north",		do_north,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "east",		do_east,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "south",		do_south,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "west",		do_west,	POS_STANDING,	 0,  LOG_NORMAL },
    { "up",		do_up,		POS_STANDING,	 0,  LOG_NORMAL },
    { "down",		do_down,	POS_STANDING,	 0,  LOG_NORMAL },

/* XOR */
    { "push",		do_push,	POS_STANDING,	 0,  LOG_NORMAL },
    { "drag",		do_drag,	POS_STANDING,	 0,  LOG_NORMAL },

    /*
     * Common other commands.
     * Placed here so one and two letter abbreviations work.
     */
    { "accept",		do_accept,	POS_STANDING,	 0,  LOG_NORMAL },
    { "buy",		do_buy,		POS_STANDING,	 0,  LOG_NORMAL	},
	{ "declare",	do_declare,		POS_STANDING,	 0,  LOG_NORMAL	},
    { "cast",		do_cast,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "challenge",	do_challenge,	POS_STANDING,	 0,  LOG_NORMAL },
    { "deposit",	do_deposit,     POS_RESTING,     0, LOG_NORMAL  },
    { "dual",           do_dual,        POS_RESTING,     0,  LOG_NORMAL },
    { "exits",		do_exits,	POS_RESTING,	 0,  LOG_NORMAL	},
	{ "flip",		do_flip,	POS_FIGHTING,	0,	LOG_NORMAL },
    { "get",		do_get,		POS_RESTING,	 0,  LOG_NORMAL	},
    { "palm",		do_palm,	POS_RESTING,	 0,  LOG_NORMAL },
    { "inventory",	do_inventory,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "invoke",         do_invoke,      POS_RESTING,     0,  LOG_NORMAL },
    { "kill",		do_kill,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "look",		do_look,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "lure",		do_lure,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "order",		do_order,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "rest",		do_rest,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "repair",         do_repair,      POS_RESTING,     0,  LOG_NORMAL },
    { "sing",		do_cast,	POS_FIGHTING,	 0,  LOG_NORMAL },
    { "sleep",		do_sleep,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "stand",		do_stand,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "tell",		do_tell,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "track",          do_track,       POS_STANDING,    0,  LOG_NORMAL },
	{ "war	",		do_war,		POS_STANDING,	0,	LOG_NORMAL	},
    { "wield",		do_wear,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "wizhelp",	do_wizhelp,	POS_DEAD,        0,  LOG_NORMAL	},

    { "mpasound",       do_mpasound,    POS_DEAD,        0,  LOG_NORMAL },
    { "mpjunk",         do_mpjunk,      POS_DEAD,        0,  LOG_NORMAL },
    { "mpecho",         do_mpecho,      POS_DEAD,        0,  LOG_NORMAL },
    { "mpechoat",       do_mpechoat,    POS_DEAD,        0,  LOG_NORMAL },
    { "mpechoaround",   do_mpechoaround,POS_DEAD,        0,  LOG_NORMAL },
    { "mpkill",         do_mpkill      ,POS_DEAD,        0,  LOG_NORMAL },
    { "mpmload",        do_mpmload     ,POS_DEAD,        0,  LOG_NORMAL },
    { "mpoload",        do_mpoload     ,POS_DEAD,        0,  LOG_NORMAL },
    { "mppurge",        do_mppurge     ,POS_DEAD,        0,  LOG_NORMAL },
    { "mpgoto",         do_mpgoto      ,POS_DEAD,        0,  LOG_NORMAL },
    { "mpat",           do_mpat        ,POS_DEAD,        0,  LOG_NORMAL },
    { "mptransfer",     do_mptransfer  ,POS_DEAD,        0,  LOG_NORMAL },
    { "mpforce",        do_mpforce     ,POS_DEAD,        0,  LOG_NORMAL },
    { "mpteleport",     do_mpteleport,  POS_DEAD,        0,  LOG_NORMAL },

    /*
     * Informational commands.
     */
    { "affected",       do_affectedby,  POS_DEAD,        0,  LOG_NORMAL },
    { "raffected",	do_raffect,	POS_DEAD,	 0,  LOG_NORMAL },
    { "areas",		do_areas,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "bug",		do_bug,		POS_DEAD,	 0,  LOG_NORMAL	},
    { "commands",	do_commands,	POS_DEAD,	 0,  LOG_NORMAL },
    { "compare",	do_compare,	POS_RESTING,	 0,  LOG_NORMAL },
    { "consider",	do_consider,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "credits",	do_credits,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "enter",          do_enter,       POS_STANDING,    0,  LOG_NORMAL },
    { "equipment",	do_equipment,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "examine",	do_examine,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "finger",         do_finger,      POS_DEAD,        0,  LOG_ALWAYS },
    { "forge",		do_forge,	POS_STANDING,   30,  LOG_ALWAYS },
    { "help",		do_help,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "idea",		do_idea,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "report",		do_report,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "pagelength",     do_pagelen,     POS_DEAD,        0,  LOG_NORMAL },
    { "read",		do_look,	POS_RESTING,	 0,  LOG_NORMAL	},
	{ "scan",		do_scan,	POS_STANDING,	0,	LOG_NORMAL	},
    { "score",		do_score,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "scent",		do_scent,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "slist",          do_slist,       POS_DEAD,        0,  LOG_NORMAL },
    { "socials",	do_socials,	POS_DEAD,	 0,  LOG_NORMAL },
    { "time",		do_time,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "typo",		do_typo,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "weather",	do_weather,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "worth",          do_worth,       POS_DEAD,        0,  LOG_NORMAL },
    { "who",		do_who,		POS_DEAD,	 0,  LOG_NORMAL	},
    { "wizlist",        do_immlist,     POS_DEAD,        0,  LOG_NORMAL },
    { "champlist",	do_champlist,	POS_DEAD,	 0,  LOG_NORMAL },
    { "newbie",		do_newbie,	POS_DEAD,        0,  LOG_NORMAL },

    /*
     * Clan commands.
     */
    { "induct",        do_induct,       POS_STANDING,    0,  LOG_ALWAYS },
    { "outcast",       do_outcast,      POS_STANDING,    0,  LOG_ALWAYS },
    { "setlev",        do_setlev,       POS_STANDING,    0,  LOG_ALWAYS },
    { "cinfo",         do_cinfo,        POS_DEAD,        0,  LOG_NORMAL },
 /* { "assasinate",    do_assasinate,   POS_STANDING,   30,  LOG_ALWAYS },*/
    { "farsight",      do_farsight,     POS_SLEEPING,   30,  LOG_NORMAL },
    { "cquest",        do_clanquest,    POS_DEAD,        0,  LOG_NORMAL },

    /*
     * Guild commands
     */
    { "guild",		do_guild,	POS_DEAD,	 0,  LOG_ALWAYS },
    { "unguild",	do_unguild,	POS_DEAD,	 0,  LOG_ALWAYS	},
    { "setrank",	do_setrank,	POS_DEAD,	 0,  LOG_ALWAYS	},
    { "gdt",		do_gdt,		POS_SLEEPING,	 0,  LOG_NORMAL },
    { "guildtalk",	do_gdt,		POS_SLEEPING,	 0,  LOG_NORMAL },
    { "guilds",         do_guilds,      POS_DEAD,        0,  LOG_NORMAL },
    /*
     * Configuration commands.
     */
    { "alias",          do_alias,       POS_DEAD,        0,  LOG_NORMAL },
    { "auto",           do_auto,        POS_DEAD,        0,  LOG_NORMAL },
    { "autoexit",       do_autoexit,    POS_DEAD,        0,  LOG_NORMAL },
    { "autoloot",       do_autoloot,    POS_DEAD,        0,  LOG_NORMAL },
    { "autocoins",      do_autocoins,   POS_DEAD,        0,  LOG_NORMAL },
    { "autosac",        do_autosac,     POS_DEAD,        0,  LOG_NORMAL },
    { "blank",          do_blank,       POS_DEAD,        0,  LOG_NORMAL },
    { "brief",          do_brief,       POS_DEAD,        0,  LOG_NORMAL },
    { "channels",	do_channels,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "combine",        do_combine,     POS_DEAD,        0,  LOG_NORMAL },
    { "autosplit",      do_autosplit,   POS_DEAD,        0,  LOG_NORMAL },
    { "ansi",           do_ansi,    	POS_DEAD,        0,  LOG_NORMAL },
    { "fullname",       do_fullname,    POS_DEAD,        0,  LOG_NORMAL },
    { "combat",         do_combat,      POS_DEAD,        0,  LOG_NORMAL },
    { "telnetga",       do_telnetga,    POS_DEAD,        0,  LOG_NORMAL },
    { "config",		do_config,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "description",	do_description,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "email",		do_email,	POS_DEAD,	 0,  LOG_NORMAL },
    { "password",	do_password,	POS_DEAD,	 0,  LOG_NEVER	},
    { "plan",		do_plan,	POS_DEAD,	 0,  LOG_NORMAL },
    { "pr",     	do_practice,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "prompt",         do_prompt,      POS_DEAD,        0,  LOG_NORMAL },
    { "title",		do_title,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "wimpy",		do_wimpy,	POS_DEAD,	 0,  LOG_NORMAL	},
/*    { "qjoin",		do_questflag,   POS_DEAD, 0,LOG_NORMAL },*/
    /*
     * Communication commands.
     */
    { "answer",		do_answer,	POS_SLEEPING,	 0,  LOG_NORMAL },
    { "auction",	do_auction,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "bid",            do_bid,         POS_RESTING,     0,  LOG_NORMAL },
    { "chat",		do_chat,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { ".",		do_chat,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "emote",		do_emote,	POS_RESTING,	 0,  LOG_NORMAL	},
    { ",",		do_emote,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "gtell",		do_gtell,	POS_DEAD,	 0,  LOG_NORMAL	},
    { ";",		do_gtell,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "music",		do_music,	POS_SLEEPING,	 0,  LOG_NORMAL },
    { "note",		do_note,	POS_SLEEPING,	 0,  LOG_NORMAL	}, 
#if 0
    { "pose",		do_pose,	POS_RESTING,	 0,  LOG_NORMAL	},
#endif
    { "quest",          do_quest,       POS_RESTING,     0,  LOG_NORMAL },
    { "question",	do_question,	POS_SLEEPING,	 0,  LOG_NORMAL },
    { "reply",		do_reply,	POS_SLEEPING,	 0,  LOG_NORMAL },
    { "say",		do_say,		POS_RESTING,	 0,  LOG_NORMAL	},
    { "'",		do_say,		POS_RESTING,	 0,  LOG_NORMAL	},
    { "shout",		do_shout,	POS_RESTING,	 3,  LOG_NORMAL	},
    { "yell",		do_yell,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "clantalk",       do_clan,        POS_DEAD,        0,  LOG_NORMAL },
    { "clans",          do_clans,       POS_DEAD,        0,  LOG_NORMAL },
    { "class",          do_class,       POS_DEAD,        0,  LOG_NORMAL },
    { ">",              do_class,       POS_DEAD,        0,  LOG_NORMAL },
    { "ooc",		do_ooc,		POS_DEAD,	 0,  LOG_NORMAL },
    { "]",		do_ooc,		POS_DEAD,	 0,  LOG_NORMAL },
    { "guard",          do_guard,       POS_DEAD,    L_CON,  LOG_NORMAL },
    { "[",		do_guard,	POS_DEAD,    L_CON,  LOG_NORMAL },
    { "conference",     do_conference,  POS_DEAD,    L_IMP,  LOG_ALWAYS },
    { "info",		do_info,	POS_DEAD,    L_DIR,  LOG_ALWAYS },

    { "vent",           do_vent,        POS_DEAD,        0,  LOG_NORMAL },
    { "/",              do_vent,        POS_DEAD,        0,  LOG_NORMAL },
    { "clear_alias",    do_clear,       POS_DEAD,        0,  LOG_NORMAL },

    /*
     * Object manipulation commands.
     */
    { "brandish",	do_brandish,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "close",		do_close,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "donate",		do_donate,	POS_RESTING,	 0,  LOG_NORMAL },
    { "drink",		do_drink,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "drop",		do_drop,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "eat",		do_eat,		POS_RESTING,	 0,  LOG_NORMAL	},
    { "fill",		do_fill,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "give",		do_give,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "hold",		do_wear,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "join",           do_join,        POS_RESTING,     0,  LOG_NORMAL },
    { "list",		do_list,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "lock",		do_lock,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "open",		do_open,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "patch",          do_patch,       POS_STANDING,    26, LOG_NORMAL },
    { "pick",		do_pick,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "put",		do_put,		POS_RESTING,	 0,  LOG_NORMAL },
    { "quaff",		do_quaff,	POS_RESTING,	 0,  LOG_NORMAL	},
	{ "raise",		do_raise,	POS_STANDING,	0,	LOG_NORMAL },
    { "recall",         do_lowrecall,   POS_STANDING,    0,  LOG_NORMAL },
    { "recite",		do_recite,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "remove",		do_remove,	POS_RESTING,	 0,  LOG_NORMAL	},
	{ "remor",		do_remor,	POS_STANDING,	0,	LOG_NORMAL },
	{ "remort",		do_remort,	POS_STANDING,	0,	LOG_NORMAL },
    { "retrieve",       do_retrieve,    POS_STANDING,    2,  LOG_NORMAL },
    { "sell",		do_sell,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "take",		do_get,		POS_RESTING,	 0,  LOG_NORMAL	},
    { "sacrifice",	do_sacrifice,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "separate",       do_separate,    POS_RESTING,     0,  LOG_NORMAL },
    { "store",          do_store,       POS_STANDING,    2,  LOG_NORMAL },
    { "unlock",		do_unlock,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "value",		do_value,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "wear",		do_wear,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "zap",		do_zap,		POS_RESTING,	 0,  LOG_NORMAL	},
    { "stare",          do_stare,       POS_RESTING,     0,  LOG_NORMAL },
    { "alchemy",        do_alchemy,     POS_RESTING,     0,  LOG_ALWAYS },
    { "antidote",	do_antidote,	POS_RESTING,	 0,  LOG_NORMAL },
    { "scribe",         do_scribe,      POS_RESTING,     0,  LOG_ALWAYS },
    { "gravebind",	do_gravebind,	POS_RESTING,	 0,  LOG_NORMAL },
    { "flamehand",	do_flamehand,	POS_RESTING,	 0,  LOG_NORMAL },
    { "frosthand",	do_frosthand,	POS_RESTING,	 0,  LOG_NORMAL },
    { "chaoshand",	do_chaoshand,	POS_RESTING,	 0,  LOG_NORMAL },
    /*
     * Combat commands.
     */
    { "backstab",	do_backstab,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "bladepalm",	do_bladepalm,	POS_FIGHTING,	 0,  LOG_NORMAL },
    { "bs",		do_backstab,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "df",		do_drowfire,	POS_FIGHTING,	 0,  LOG_NORMAL },
    { "disarm",		do_disarm,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "flee",		do_flee,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "retreat",	do_retreat,	POS_FIGHTING,	 0,  LOG_NORMAL },
    { "flury",		do_flury,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "kick",		do_kick,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "high kick",	do_high_kick,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "jump kick",	do_jump_kick,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "spin kick",	do_spin_kick,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "feed",           do_feed,        POS_FIGHTING,    0,  LOG_NORMAL },
    { "flying kick",	do_flyingkick,	POS_FIGHTING,	 0,  LOG_NORMAL },
    { "punch",          do_punch,       POS_FIGHTING,    0,  LOG_NORMAL },
    { "jab punch",      do_jab_punch,   POS_FIGHTING,    0,  LOG_NORMAL },
    { "kidney punch",   do_kidney_punch,POS_FIGHTING,    0,  LOG_NORMAL },
    { "cross punch",    do_cross_punch, POS_FIGHTING,    0,  LOG_NORMAL },
    { "roundhouse punch",do_roundhouse_punch,POS_FIGHTING,0, LOG_NORMAL },
    { "uppercut punch", do_uppercut_punch,POS_FIGHTING,  0,  LOG_NORMAL },
    { "murde",		do_murde,	POS_FIGHTING,	 5,  LOG_NORMAL	},
    { "murder",		do_murder,	POS_FIGHTING,	 5,  LOG_ALWAYS	},
    { "nerve",		do_nerve,	POS_FIGHTING,	 0,  LOG_NORMAL },
    { "rescue",		do_rescue,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "throw",	        do_throw,	POS_STANDING,    0,  LOG_NORMAL }, 
    { "trip",		do_trip,	POS_FIGHTING,	 0,  LOG_NORMAL },
	{ "triple",		do_triple,  POS_STANDING,	0,	LOG_NORMAL },
    { "drain life",	do_drain_life,	POS_FIGHTING,	 0,  LOG_NORMAL	},
    { "mental drain",   do_mental_drain,POS_FIGHTING,    0,  LOG_NORMAL },
    { "shriek",		do_shriek,	POS_FIGHTING,	 0,  LOG_NORMAL },
    { "snatch",		do_snatch,	POS_FIGHTING,	 0,  LOG_NORMAL },
    { "spit",		do_spit,	POS_FIGHTING,	 0,  LOG_NORMAL },
    { "stun",           do_stun,        POS_FIGHTING,    0,  LOG_NORMAL },
    { "berserk",        do_berserk,     POS_FIGHTING,    0,  LOG_NORMAL },
    { "soulstrike",     do_soulstrike,  POS_FIGHTING,    0,  LOG_NORMAL },
    { "multiburst",	do_multiburst,	POS_FIGHTING,	 0,  LOG_NORMAL },
    { "bite",		do_bite,	POS_FIGHTING,	 0,  LOG_NORMAL },
    { "howl of fear",	do_howl_of_fear,POS_FIGHTING,	 0,  LOG_NORMAL },
    { "frenzy",		do_frenzy,	POS_FIGHTING,	 0,  LOG_NORMAL },

    /*
     * Miscellaneous commands.
     */
    { "account",        do_account,     POS_RESTING,     0,  LOG_NORMAL },
    { "adrenaline rush",do_rush,	POS_RESTING,	 0,  LOG_NORMAL },
    { "afk",		do_afk,		POS_DEAD,	 0,  LOG_NORMAL },
    { "afkmes",         do_afkmes,      POS_DEAD,        0,  LOG_NORMAL }, 
    { "bash door",      do_bash,        POS_STANDING,    0,  LOG_NORMAL },
    { "chameleon power",do_chameleon,   POS_STANDING,    0,  LOG_NORMAL },
    { "follow",		do_follow,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "group",		do_group,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "globe",		do_globedarkness, POS_STANDING,  0,  LOG_NORMAL },
    { "heighten senses",do_heighten,    POS_STANDING,    0,  LOG_NORMAL },
    { "enhance reflexes",do_reflex,	POS_STANDING,	 0,  LOG_NORMAL },
    { "hide",		do_hide,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "iron grip",      do_irongrip,    POS_STANDING,    0,  LOG_NORMAL },
    { "ironfist",	do_ironfist,	POS_STANDING,	 0,  LOG_NORMAL },
    { "poison weapon",	do_poison_weapon,POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "practice",	do_practice,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "qui",		do_qui,		POS_DEAD,	 0,  LOG_NORMAL	},
    { "quit",		do_quit,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "rage",		do_rage,	POS_DEAD,	 0,  LOG_NORMAL },
    { "remote",		do_remote,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "<",		do_remote,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "rent",		do_rent,	POS_DEAD,	 0,  LOG_NORMAL	},
    { "save",		do_save,	POS_DEAD,	 1,  LOG_NORMAL	},
    { "shadow",         do_shadow_walk, POS_STANDING,    0,  LOG_NORMAL },
    { "sleep",		do_sleep,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "sneak",		do_sneak,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "spells",         do_spells,      POS_SLEEPING,    L_IMP, LOG_NORMAL},
    { "split",		do_split,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "steal",		do_steal,	POS_STANDING,	 0,  LOG_NORMAL	},
    { "train",		do_train,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "visible",	do_visible,	POS_SLEEPING,	 0,  LOG_NORMAL },
    { "wake",		do_wake,	POS_SLEEPING,	 0,  LOG_NORMAL	},
    { "ward",		do_ward,    POS_STANDING, 1,  LOG_ALWAYS },
    { "where",		do_where,	POS_RESTING,	 0,  LOG_NORMAL	},
    { "withdraw",       do_withdraw,    POS_RESTING,     0,  LOG_NORMAL },
    { "pray",           do_pray,        POS_RESTING,     0,  LOG_NORMAL },
    { "delet",		do_delet,	POS_STANDING,    0,  LOG_NORMAL },
    { "delete",		do_delete,	POS_STANDING,    0,  LOG_ALWAYS },
    { "pkill",		do_pkill,	POS_DEAD,	 0,  LOG_NORMAL },

    /*
     * Artifactor commands
     */
    { "indestructable", do_indestructable, POS_STANDING, 0,  LOG_NORMAL },
    { "remake",		do_remake,  	POS_STANDING,	 0,  LOG_NORMAL },

    /*
     * Immortal commands.
     */

/*    { "vnum",           do_vnum,        POS_DEAD,  L_DIR,  LOG_NORMAL }, */
/*    { "load",           do_load,        POS_DEAD,  L_DIR,  LOG_NORMAL }, */

    { "advance",        do_advance,     POS_DEAD,  L_IMP,  LOG_ALWAYS },
    { "allow",          do_allow,       POS_DEAD,  L_DIR,  LOG_ALWAYS },
    { "astat",          do_astat,       POS_DEAD,  L_JUN,  LOG_NORMAL },
    { "astrip",         do_astrip,      POS_DEAD,  L_JUN,  LOG_NORMAL },
    { "at",             do_at,          POS_DEAD,  L_APP,  LOG_NORMAL },
    { "authorize",      do_authorize,   POS_DEAD,  L_APP,  LOG_ALWAYS },
    { "bamfmes",        do_bamf,        POS_DEAD,  L_APP,  LOG_NORMAL },
    { "banlist",	do_banlist,     POS_DEAD,  L_GOD,  LOG_NORMAL },
    { "bodybag",        do_bodybag,     POS_DEAD,  L_APP,  LOG_ALWAYS },
    { "changes",	do_changes,	POS_DEAD,  L_DIR,  LOG_NORMAL },
    { "clandesc",       do_clandesc,    POS_DEAD,  L_SEN,  LOG_NORMAL },
    { "cloak",          do_cloak,       POS_DEAD,  L_DIR,  LOG_NORMAL },
    { "clone",		do_clone,       POS_DEAD,  L_SEN,  LOG_NORMAL },
    { "countcommands",  do_countcommands,POS_DEAD, L_IMP,  LOG_NORMAL },
    { "cset",           do_cset,        POS_DEAD,  L_IMP,  LOG_BUILD  },
    { "deny",           do_deny,        POS_DEAD,  L_IMP,  LOG_ALWAYS },
    { "desc_check",	do_desc_check,	POS_DEAD,  L_IMP,  LOG_NORMAL },
    { "desc_clean",     do_descript_clean, POS_DEAD, L_IMP,LOG_NORMAL },
    { "detract",	do_detract,	POS_DEAD,  L_IMP,  LOG_ALWAYS },
    { "disconnect",     do_disconnect,  POS_DEAD,  L_GOD,  LOG_ALWAYS },
    { "echo",           do_echo,        POS_DEAD,  L_JUN,  LOG_ALWAYS },
    { "empower",	do_empower,     POS_DEAD,  L_IMP,  LOG_ALWAYS },
    { "force",          do_force,       POS_DEAD,  L_DIR,  LOG_ALWAYS },
    { "freeze",         do_freeze,      POS_DEAD,  L_DIR,  LOG_ALWAYS },
    { "goto",           do_goto,        POS_DEAD,  L_APP,  LOG_NORMAL },
    { "hero",           do_hero,        POS_DEAD,    100,    LOG_NORMAL },
    { "hlist",          do_hlist,       POS_DEAD,    L_APP,  LOG_NORMAL },
    { "holylight",      do_holylight,   POS_DEAD,  L_APP,  LOG_NORMAL },
#if defined ( HOTREBOOT )
    { "hotreboo",      	do_hotreboo,    POS_DEAD,  L_DIR,  LOG_ALWAYS },
    { "hotreboot",      do_hotreboot,   POS_DEAD,  L_DIR,  LOG_ALWAYS },
#endif
    { "ideas",          do_ideas,       POS_DEAD,  L_DIR,  LOG_ALWAYS },
    { "imc",		do_imc,         POS_DEAD,  L_APP,  LOG_NORMAL },
    { "immtalk",        do_immtalk,     POS_DEAD,  L_APP,  LOG_NORMAL },
    { "shieldify",      do_shieldify,   POS_STANDING,  L_CON, LOG_NORMAL },
	{ "doubleexp",      do_doubleexp,   POS_DEAD,  L_DIR,  LOG_NORMAL },
	{ "log",            do_log,         POS_DEAD,  L_CON,  LOG_ALWAYS },
    { "memory",         do_memory,      POS_DEAD,  L_GOD,  LOG_NORMAL },
    { "mfind",          do_mfind,       POS_DEAD,  L_JUN,  LOG_NORMAL },
    { "mload",          do_mload,       POS_DEAD,  L_DEM,  LOG_BUILD  },
    { "mpstat",         do_mpstat,      POS_DEAD,  L_APP,  LOG_NORMAL },
    { "mpcommands",     do_mpcommands,  POS_DEAD,  L_APP,  LOG_NORMAL },
    { "mset",           do_mset,        POS_DEAD,  L_DIR,  LOG_BUILD  },
    { "mstat",          do_mstat,       POS_DEAD,  L_JUN,  LOG_NORMAL },
    { "mwhere",         do_mwhere,      POS_DEAD,  L_JUN,  LOG_NORMAL },
    { "newban",		do_newban,      POS_DEAD,  L_GOD,  LOG_ALWAYS },
    { "newcorpse",	do_newcorpse,   POS_DEAD,  L_GOD,  LOG_ALWAYS },
    { "newlock",        do_newlock,     POS_DEAD,  L_IMP,  LOG_ALWAYS },
    { "noemote",        do_noemote,     POS_DEAD,  L_GOD,  LOG_NORMAL },
    { "notell",         do_notell,      POS_DEAD,  L_GOD,  LOG_NORMAL },
    { "nukerep",	do_nukerep,	POS_DEAD,  L_GOD,  LOG_NORMAL },
    { "numlock",        do_numlock,     POS_DEAD,  L_CON,  LOG_ALWAYS },
    { "ofind",          do_ofind,       POS_DEAD,  L_JUN,  LOG_NORMAL },
    { "oload",          do_oload,       POS_DEAD,  L_JUN,  LOG_BUILD  },
    { "opstat",		do_opstat,	POS_DEAD,    L_APP,  LOG_NORMAL },
    { "oset",           do_oset,        POS_DEAD,  L_DIR,  LOG_BUILD  },
    { "ostat",          do_ostat,       POS_DEAD,  L_JUN,  LOG_NORMAL },
    { "owhere",         do_owhere,      POS_DEAD,  L_JUN,  LOG_NORMAL },
    { "pardon",         do_pardon,      POS_DEAD,  L_IMP,  LOG_ALWAYS },
    { "peace",          do_peace,       POS_DEAD,  L_DEM,  LOG_NORMAL },
    { "permban",	do_permban,	    POS_DEAD,  L_DIR,  LOG_ALWAYS },
    { "plist",	        do_playerlist,  POS_DEAD,    L_APP,  LOG_NORMAL },
    { "pload",          do_pload,       POS_DEAD,  L_DIR,  LOG_ALWAYS },
    { "purge",          do_purge,       POS_DEAD,  L_DEM,  LOG_NORMAL },
    { "qecho",          do_qecho,       POS_DEAD,  L_GOD,  LOG_ALWAYS },
    { "qset",           do_qset,        POS_DEAD,  L_GOD,  LOG_ALWAYS },
    { "racelist",	do_racelist,	POS_DEAD,  L_APP,  LOG_NORMAL },
    { "rebuild",        do_rebuild,	    POS_DEAD,  L_DIR,  LOG_ALWAYS },
    { "reboo",          do_reboo,       POS_DEAD,  L_DIR,  LOG_NORMAL },
    { "reboot",         do_reboot,      POS_DEAD,  L_DIR,  LOG_ALWAYS },
    { "recho",          do_recho,       POS_DEAD,  L_JUN,  LOG_ALWAYS },
    { "restore",        do_restore,     POS_DEAD,  L_GOD,  LOG_ALWAYS },
    { "restrict",       do_restrict,    POS_DEAD,  L_GOD,  LOG_NORMAL },
    { "rpstat",		do_rpstat,	POS_DEAD,  L_APP,  LOG_NORMAL },
    { "rset",           do_rset,        POS_DEAD,  L_DIR,  LOG_BUILD  },
    { "rstat",          do_rstat,       POS_DEAD,  L_JUN,  LOG_NORMAL },
    { "seize",		do_seize,       POS_DEAD,  L_DIR,  LOG_ALWAYS },
    { "shutdow",        do_shutdow,     POS_DEAD,  L_CON,  LOG_NORMAL },
    { "shutdown",       do_shutdown,    POS_DEAD,  L_CON,  LOG_ALWAYS },
    { "silence",        do_silence,     POS_DEAD,  L_GOD,  LOG_NORMAL },
    { "sla",            do_sla,         POS_DEAD,  L_GOD,  LOG_NORMAL },
    { "slay",           do_slay,        POS_DEAD,  L_GOD,  LOG_ALWAYS },
    { "slaymes",        do_slaymes,     POS_DEAD,  L_GOD,  LOG_NORMAL },
    { "slookup",        do_slookup,     POS_DEAD,  L_DIR,  LOG_NORMAL },
    { "snoop",          do_snoop,       POS_DEAD,  L_DIR,  LOG_ALWAYS },
    { "sset",           do_sset,        POS_DEAD,  L_DIR,  LOG_ALWAYS },
    { "sstat",          do_sstat,       POS_DEAD,  L_DIR,  LOG_NORMAL },
    { "sstime",         do_sstime,      POS_DEAD,  L_CON,  LOG_ALWAYS },
    { "tempban",	do_tempban,     POS_DEAD,  L_GOD,  LOG_ALWAYS },
    { "todo",           do_todo,        POS_DEAD,  L_DIR,  LOG_ALWAYS },
    { "transfer",       do_transfer,    POS_DEAD,  L_JUN,  LOG_ALWAYS },
    { "transmes",       do_trmes,       POS_DEAD,  L_JUN,  LOG_NORMAL },
    { "trust",          do_trust,       POS_DEAD,  L_IMP,  LOG_ALWAYS },
    { "typos",          do_typos,       POS_DEAD,  L_SEN,  LOG_ALWAYS },
    { "users",          do_users,       POS_DEAD,  L_DIR,  LOG_NORMAL },
    { "vused",          do_vused,       POS_DEAD,  L_DIR,  LOG_NORMAL },
    { "whotype",	do_whotype,	POS_DEAD,    L_CON,  LOG_NORMAL },
    { "wizify",         do_wizify,      POS_DEAD,  L_CON,  LOG_ALWAYS },
    { "wizlock",        do_wizlock,     POS_DEAD,  L_IMP,  LOG_ALWAYS },
    { "wizinvis",       do_invis,       POS_DEAD,  L_DIR,  LOG_NORMAL },
    { "wiznet",		do_wiznet,      POS_DEAD,  L_JUN,  LOG_NORMAL },
    { "wrlist",         do_wrlist,      POS_DEAD,  L_JUN,  LOG_NORMAL },
    { ":",              do_immtalk,     POS_DEAD,  L_APP,  LOG_NORMAL },
    { "=",              do_imc,         POS_DEAD,  L_APP,  LOG_NORMAL },
    { "-",              do_hero,        POS_DEAD,    100,    LOG_NORMAL },

 /*{ "fighting",        do_fighting,    POS_DEAD,  L_GOD,  LOG_NORMAL },*/
	{ "switch",       do_switch,      POS_DEAD,  L_DIR,  LOG_ALWAYS },
    { "return",       do_return,      POS_DEAD,  L_DIR,  LOG_NORMAL },
/*{ "pwhere",           do_pwhere,      POS_DEAD,    105,  LOG_NORMAL },*/
/*    { "bamfin",         do_bamfin,      POS_DEAD,  L_APP,  LOG_NORMAL },
    { "bamfout",        do_bamfout,     POS_DEAD,  L_APP,  LOG_NORMAL }, */

    /*
     * Here because they interefeared with something
     */
    { "gorge",          do_gorge,       POS_STANDING,    0,  LOG_NORMAL },
    { "gouge",          do_gouge,      POS_FIGHTING, 0,      LOG_NORMAL },
    { "circle",         do_circle,     POS_FIGHTING, 0,      LOG_NORMAL },
    { "rake",           do_rake,       POS_FIGHTING, 0,      LOG_NORMAL },
    { "headbutt",	do_headbutt,	POS_FIGHTING,	 0,  LOG_NORMAL },
    { "transport",      do_transport,  POS_RESTING,      0,  LOG_NORMAL },
/*    { "immlist",	do_immlist,	POS_DEAD, 	 0,  LOG_NORMAL },*/

    /*
     * OLC 1.1b
     */
    { "aedit",		do_aedit,	POS_DEAD, L_IMP,  LOG_BUILD  },
    { "cedit",          do_cedit,       POS_DEAD, L_CON,  LOG_BUILD  },
    { "hedit",          do_hedit,       POS_DEAD, L_APP,  LOG_BUILD  },
    { "redit",		do_redit,	POS_DEAD, L_CON,  LOG_BUILD  },
    { "oedit",		do_oedit,	POS_DEAD, L_IMP,  LOG_BUILD  },
    { "medit",		do_medit,	POS_DEAD, L_IMP,  LOG_BUILD  },
    { "asave",          do_asave,	POS_DEAD, L_APP,  LOG_NORMAL },
    { "alist",		do_alist,	POS_DEAD, L_CON,  LOG_NORMAL },
    { "resets",		do_resets,	POS_DEAD, L_CON,  LOG_NORMAL },
    { "mreset",		do_mreset,	POS_DEAD, L_CON,  LOG_NORMAL },

    { "sedit",		do_sedit,	POS_DEAD, L_CON,  LOG_BUILD  },
    { "spedit",		do_spedit,	POS_DEAD, L_IMP,  LOG_ALWAYS },
    { "rename_obj",	do_rename_obj,	POS_DEAD, L_APP,  LOG_ALWAYS },
    { "race_edit",	do_race_edit,	POS_DEAD, L_IMP,  LOG_ALWAYS },
    { "nedit",		do_nedit,	POS_DEAD, L_CON,  LOG_BUILD  }, 
    /*
     * End of list.
     */
    { "",		0,		POS_DEAD,	 0,  LOG_NORMAL	}
};



/*
 * The social table.
 * Add new socials here.
 * Alphabetical order is not required.
 */

/* New socials contributed by Katrina and Binky */
/*
const	struct	social_type	social_table [ ] =
{

    {   "dammit",
        "You curse like a drunken sailor for how the fates have treated you.",
        "$n slams $s weapon on the ground and yells, 'Dammit Dammit DAMMIT!'",
        "You throw your hands up in disgust and let the verbal barbs fly at $N!",
        "$n curses $N to eternity while throwing a fit.",
        "$n curses you out like never before, $e must be pretty ticked off.",
        "You curse your own stupidity! Bah!",
        "$n curses $mself!"
    },       

    {   "oral",
        "Answer: &YORAL SEX!! &PAnd lots of it!",
        "$n yells, &C'Answer: ORAL SEX!! And lots of it!'",
        "Answer: &YORAL SEX!! &PAnd lots of it!", 
        "$n yells, &C'Answer: ORAL SEX!! And lots of it!'",  
        "$n yells, &C'Answer: ORAL SEX!! And lots of it!'",         
        "You remind yourself of the answer, &YORAL SEX!",
        "$n yells, &C'Answer: ORAL SEX!! And lots of it!'"
    },

    {   "autostrip",
        "You drool in ecstasy as Mel Gibson strips naked in front of you!",
        "$n drools in ecstasy as Mel Gibson peels off all his clothes!",
        "You grab $N and start to rip $S clothes off!",
        "$n grabs $N and starts to rip $S clothes off!",
        "$n grabs you and attempts to rip off all your clothes!",
        "You suddenly feel adventurous and begin to rip your clothes off!",
        "$n moans as $e begins to take off all $s clothing..."
    },   

    {
        "pounce",
        "You crouch low to the ground, looking for someone to pounce on...",
        "$n pounces up and down like a mad man!",
        "You pounce onto $N's lap playfully.",
        "$n pounces onto $N's lap playfully.",
        "$n crouches low to the ground, looking for someone to pounce on...",
        "You attempt to pounce on yourself. Not too swift...",
        "$n attempts to pounce on $mself! Not too swift..."
    },

    {
	"accuse",
	"Accuse whom?",
	"$n is in an accusing mood.",
	"You look accusingly at $M.",
	"$n looks accusingly at $N.",
	"$n looks accusingly at you.",
	"You accuse yourself.",
	"$n seems to have a bad conscience."
    },

    {
	"ack",
	"You gasp and say 'ACK!' at your mistake.",
	"$n ACKS at $s big mistake.",
	"You ACK $M.",
	"$n ACKS $N.",
	"$n ACKS you.",
	"You ACK yourself.",
	"$n ACKS $mself.  Must be a bad day."
    },
	
    {
	"addict",
	"You stand and admit to all in the room, 'Hi, I'm $n, and I'm a mud addict.'",
	"$n stands and says, 'Hi, I'm $n, and I'm a mud addict.'",
	"You tell $M that you are addicted to $S love.",
	"$n tells $N that $e is addicted to $S love.",
	"$n tells you that $e is addicted to your love.",
	"You stand and admit to all in the room, 'Hi, I'm $n, and I'm a mud addict.'",
	"$n stands and says, 'Hi, I'm $n, and I'm a mud addict.'",
    },
   
    {
	"agree",
	"You seem to be in an agreeable mood.",
	"$n seems to agree.",
	"You agree with $M.",
	"$n agrees with $N.",
	"$n agrees with you.",
	"Well I hope you would agree with yourself!",
	"$n agrees with $mself, of course."
    },

    {
	"apologize",
	"You apologize for your behavior.",
	"$n apologizes for $s rude behavior.",
	"You apologize to $M.",
	"$n apologizes to $N.",
	"$n apologizes to you.",
	"You apologize to yourself.",
	"$n apologizes to $mself.  Hmmmm."
    },
    
    {
	"bark",
	"Woof!  Woof!",
	"$n barks like a dog.",
	"You bark at $M.",
	"$n barks at $N.",
	"$n barks at you.",
	"You bark at yourself.  Woof!  Woof!",
	"$n barks at $mself.  Woof!  Woof!"
    },

    {
	"beg",
	"You beg the gods for mercy.",
	"The gods fall down laughing at $n's request for mercy.",
	"You desperately try to squeeze a few coins from $M.",
	"$n begs $N for a gold piece!",
	"$n begs you for money.",
	"Begging yourself for money doesn't help.",
	"$n begs $mself for money."
    },
  
    {
        "blah",
        "You say 'BLAH!'",
        "$n says 'BLAH!'",
        "You tell $M that everything is just blah.",
        "$n tells $N that everything is just blah.",
        "$n tells you that everything is just blah.",
        "You scream 'BLAH BLAH BLAH!'",
        "$n screams 'BLAH BLAH BLAH!'"
    },
    
    {
	"bleed",
	"You bleed all over the room!",
	"$n bleeds all over the room!  Get out of $s way!",
	"You bleed all over $M!",
	"$n bleeds all over $N.  Better leave, you may be next!",
	"$n bleeds all over you!  YUCK!",
	"You bleed all over yourself!",
	"$n bleeds all over $mself."
    },

    {
	"blink",
	"You blink in utter disbelief.",
	"$n blinks in utter disbelief.",
	"You blink at $M in confusion.",
	"$n blinks at $N in confusion.",
	"$n blinks at you in confusion.",
	"You are sooooooooooooo confused",
	"$n blinks at $mself in complete confusion."
    },

    {
	"blush",
	"Your cheeks are burning.",
	"$n blushes.",
	"You get all flustered up seeing $M.",
	"$n blushes as $e sees $N here.",
	"$n blushes as $e sees you here.  Such an effect on people!",
	"You blush at your own folly.",
	"$n blushes as $e notices $s boo-boo."
    },

    {
	"bonk",
	"BONK.",
	"$n spells 'potato' like Dan Quayle: 'B-O-N-K'.",
	"You bonk $M for being a numbskull.",
	"$n bonks $N.  What a numbskull.",
	"$n bonks you.  BONK BONK BONK!",
	"You bonk yourself.",
	"$n bonks $mself."
    },
 
    {
	"bounce",
	"BOIINNNNNNGG!",
	"$n bounces around.",
	"You bounce onto $S lap.",
	"$n bounces onto $N's lap.",
	"$n bounces onto your lap.",
	"You bounce your head like a basketball.",
	"$n plays basketball with $s head."
    },

    {
	"bow",
	"You bow deeply.",
	"$n bows deeply.",
	"You bow before $M.",
	"$n bows before $N.",
	"$n bows before you.",
	"You kiss your toes.",
	"$n folds up like a jack knife and kisses $s own toes."
    },

    {
	"brb",
	"You announce that you will be right back.",
	"$n says in a stern voice, 'I'll be back!'",
	"You announce to $M that you will be right back.",
	"$n says to $N in a stern voice, 'I'll be back!'",
	"$n says to you in a stern voice, 'I'll be right back!'",
	"You mumble to yourself, 'I'll be right back'",
	"$n mumbles to $mself, 'I'll be right back, won't I?'"
    },

    {
	"burp",
	"You burp loudly.",
	"$n burps loudly.",
	"You burp loudly to $M in response.",
	"$n burps loudly in response to $N's remark.",
	"$n burps loudly in response to your remark.",
	"You burp at yourself.",
	"$n burps at $mself.  What a sick sight."
    },

    {
	"bye",
	"You say goodbye to all in the room.",
	"$n says goodbye to everyone in the room.",
	"You say goodbye to $N.",
	"$n says goodbye to $N.",
	"$n says goodbye to you.",
	"You say goodbye to yourself.  Contemplating suicide?",
	"$n says goodbye to $mself.  Is $e contemplating suicide?"
    },
	
    {
	"cackle",
	"You throw back your head and cackle with insane glee!",
	"$n throws back $s head and cackles with insane glee!",
	"You cackle gleefully at $N",
	"$n cackles gleefully at $N.",
	"$n cackles gleefully at you.  Better keep your distance from $m.",
	"You cackle at yourself.  Now, THAT'S strange!",
	"$n is really crazy now!  $e cackles at $mself."
    },
    
    {
	"cheer",
	"ZIS BOOM BAH!  BUGS BUNNY BUGS BUNNY RAH RAH RAH!",
	"$n says 'BUGS BUNNY BUGS BUNNY RAH RAH RAH!'",
	"You cheer loudly: 'Go $N Go!'",
	"$n cheers loudly: 'Go $N Go!'",
	"$n cheers you on!",
	"You cheer yourself up.",
	"$n cheers $mself on."
    },
    
    {
	"chuckle",
	"You chuckle politely.",
	"$n chuckles politely.",
	"You chuckle at $S joke.",
	"$n chuckles at $N's joke.",
	"$n chuckles at your joke.",
	"You chuckle at your own joke, since no one else would.",
	"$n chuckles at $s own joke, since none of you would."
    },

    {
	"clap",
	"You clap your hands together.",
	"$n shows $s approval by clapping $s hands together.",
	"You clap at $S performance.",
	"$n claps at $N's performance.",
	"$n claps at your performance.",
	"You clap at your own performance.",
	"$n claps at $s own performance."
    },

    {
	"comfort",
	"Do you feel uncomfortable?",
	NULL,
	"You comfort $M.",
	"$n comforts $N.",
	"$n comforts you.",
	"You make a vain attempt to comfort yourself.",
	"$n has no one to comfort $m but $mself."
    },

    {
	"cough",
	"You cough to clear your throat and eyes and nose and....",
	"$n coughs loudly.",
	"You cough loudly.  It must be $S fault, $E gave you this cold.",
	"$n coughs loudly, and glares at $N, like it is $S fault.",
	"$n coughs loudly, and glares at you.  Did you give $M that cold?",
	"You cough loudly.  Why don't you take better care of yourself?",
	"$n coughs loudly.  $n should take better care of $mself." 
    },
    
    {
	"cringe",
	"You cringe in terror.",
	"$n cringes in terror!",
	"You cringe away from $M.",
	"$n cringes away from $N in mortal terror.",
	"$n cringes away from you.",
	"I beg your pardon?",
	NULL
    },

    {
	"cry",
	"Waaaaah ...",
	"$n bursts into tears.",
	"You cry on $S shoulder.",
	"$n cries on $N's shoulder.",
	"$n cries on your shoulder.",
	"You cry to yourself.",
	"$n sobs quietly to $mself."
    },

    {
	"cuddle",
	"Whom do you feel like cuddling today?",
	NULL,
	"You cuddle $M.",
	"$n cuddles $N.",
	"$n cuddles you.",
	"You must feel very cuddly indeed ... :)",
	"$n cuddles up to $s shadow.  What a sorry sight."
    },

    {
	"curse",
	"You swear loudly for a long time.",
	"$n swears: @*&^%@*&!",
	"You swear at $M.",
	"$n swears at $N.",
	"$n swears at you!  Where are $s manners?",
	"You swear at your own mistakes.",
	"$n starts swearing at $mself.  Why don't you help?"
    },

    {
	"curtsey",
	"You curtsey to your audience.",
	"$n curtseys gracefully.",
	"You curtsey to $M.",
	"$n curtseys gracefully to $N.",
	"$n curtseys gracefully for you.",
	"You curtsey to your audience (yourself).",
	"$n curtseys to $mself, since no one is paying attention to $m."
    },

    {
	"dance",
	"Feels silly, doesn't it?",
	"$n tries to break dance, but nearly breaks $s neck!",
	"You sweep $M into a romantic waltz.",
	"$n sweeps $N into a romantic waltz.",
	"$n sweeps you into a romantic waltz.",
	"You skip and dance around by yourself.",
	"$n dances a pas-de-une."
    },

    {
	"dive",
	"You dive into the ocean.",
	"$n dives into the ocean.",
	"You dive behind $M and hide.",
	"$n dives behind $N and hides.",
	"$n dives behind you and hides.",
	"You take a dive.",
	"$n takes a dive."
    },
    
    {
	"doh",
	"You say, 'Doh!!' and hit your forehead.  What an idiot you are!",
	"$n hits $mself in the forehead and says, 'Doh!!!'",
	"You say, 'Doh!!' and hit your forehead.  What an idiot you are!",
	"$n hits $mself in the forehead and says, 'Doh!!!'",
	"$n hits $mself in the forehead and says, 'Doh!!!'",
	"You hit yourself in the forehead and say, 'Doh!!!'",
	"$n hits $mself in the forehead and says, 'Doh!!!'"    
    },
*/    
    /*
     * This one's for Baka, Penn, and Onethumb!
     */
  /*  {
	"drool",
	"You drool on yourself.",
	"$n drools on $mself.",
	"You drool all over $N.",
	"$n drools all over $N.",
	"$n drools all over you.",
	"You drool on yourself.",
	"$n drools on $mself."
    },

    {
	"duck",
	"Whew!  That was close!",
	"$n is narrowly missed by a low-flying dragon.",
	"You duck behind $M.  Whew!  That was close!",
	"$n ducks behind $N to avoid the fray.",
	"$n ducks behind you to avoid the fray.",
	"You duck behind yourself.  Oww that hurts!",
	"$n tries to duck behind $mself.  $n needs help getting untied now."
    },
    
    {
	"eyebrow",
	"You raise an eyebrow.",
	"$n raises an eyebrow.",
	"You raise an eyebrow at $M.",
	"$n raises an eyebrow at $N.",
	"$n raises an eyebrow at you.",
	"You raise an eyebrow at yourself.  That hurt!",
	"$n raises an eyebrow at $mself.  That must have hurt!"
    },
 
    {
	"faint",
	"You feel dizzy and hit the ground like a board.",
	"$n's eyes roll back in $s head and $e crumples to the ground.",
	"You faint into $S arms.",
	"$n faints into $N's arms.",
	"$n faints into your arms.  How romantic.",
	"You look down at your condition and faint.",
	"$n looks down at $s condition and faints dead away."
    },
   
    {  
	"fakerep",
	"You report: 12874/13103 hp 9238/10230 mana 2483/3451 mv 2.31E13 xp.",
	"$n reports: 12874/13103 hp 9238/10230 mana 2483/3451 mv 2.31E13 xp.",
	"You report: 12874/13103 hp 9238/10230 mana 2483/3451 mv 2.31E13 xp.",
	"$n reports: 12874/13103 hp 9238/10230 mana 2483/3451 mv 2.31E13 xp.",
	"$n reports: 12874/13103 hp 9238/10230 mana 2483/3451 mv 2.31E13 xp.",
	"You report: 12874/13103 hp 9238/10230 mana 2483/3451 mv 2.31E13 xp.",
	"$n reports: 12874/13103 hp 9238/10230 mana 2483/3451 mv 2.31E13 xp."
    },

    {
	"fart",
	"Where are your manners?",
	"$n lets off a real rip-roarer ... a greenish cloud envelops $n!",
	"You fart at $M.  Boy, you are sick.",
	"$n farts in $N's direction.  Better flee before $e turns to you!",
	"$n farts in your direction.  You gasp for air.",
	"You fart at yourself.  You deserve it.",
	"$n farts at $mself.  Better $m than you."
    },

    {
	"flex",
	"You flex your bulging muscles at the beach crowd.",
	"$n flexes $s muscles and puts yours to shame!",
	"You flex your bulging muscles at $M.",
	"$n flexes $s muscles at $N.",
	"$n flexes $s muscles at you.  $n must be trying to impress you.",
	"You flex your muscles at yourself.  Wow, you are HUGE!",
	"$n flexes $s muscles at $mself.  How narcissistic!"
    },
    
    {
	"flip",
	"You flip head over heels.",
	"$n flips head over heels.",
	"You flip $M over your shoulder.",
	"$n flips $N over $s shoulder.",
	"$n flips you over $s shoulder.  Hmmmm.",
	"You tumble all over the room.",
	"$n does some nice tumbling and gymnastics."
    },

    {
	"flirt",
	"Wink wink!",
	"$n flirts -- probably needs a date, huh?",
	"You flirt with $M.",
	"$n flirts with $N.",
	"$n wants you to show some interest and is flirting with you.",
	"You flirt with yourself.",
	"$n flirts with $mself.  Hoo boy."
    },
    {
        "frag",
        "You say, 'FRAG FRAG FRAG FRAG!!!'",
        "$n says, 'FRAG FRAG FRAG FRAG!!!'",
        "You glare at $N and say, 'FRAG FRAG FRAG FRAG!!!'",
        "$n glares at $N and says, 'FRAG FRAG FRAG FRAG!!!'",
        "$n glares at you and says, 'FRAG FRAG FRAG FRAG!!!'",
        "You mutter angrily to yourself, 'FRAG FRAG FRAG FRAG!!!'",
        "$n mutters angrily to $mself, 'FRAG FRAG FRAG FRAG!!!'"
    },
 
    {
	"fondle",
	"Who needs to be fondled?",
	NULL,
	"You fondly fondle $M.",
	"$n fondly fondles $N.",
	"$n fondly fondles you.",
	"You fondly fondle yourself, feels funny doesn't it ?",
	"$n fondly fondles $mself - this is going too far !!"
    },

    {
	"french",
	"Kiss whom?",
	NULL,
	"You give $N a long and passionate kiss.",
	"$n kisses $N passionately.",
	"$n gives you a long and passionate kiss.",
	"You gather yourself in your arms and try to kiss yourself.",
	"$n makes an attempt at kissing $mself."
    },

    {
	"frown",
	"What's bothering you ?",
	"$n frowns.",
	"You frown at what $E did.",
	"$n frowns at what $N did.",
	"$n frowns at what you did.",
	"You frown at yourself.  Poor baby.",
	"$n frowns at $mself.  Poor baby."
    },
    {
	"fruff",
	"You turn into a fruff monster and look for someone to fruff.",
	"$n turns into a fruff monster and looks around for a fruff victim.",
	"You fruff $N until $E starts to giggle out loud.",
	"$n fruffs you and you giggle out loud!",
	"You find no one and fruff yourself.",
	"Finding no one, $n fruffs $mself."
    },
    {
	"gasp",
	"You gasp in astonishment.",
	"$n gasps in astonishment.",
	"You gasp as you realize what $e did.",
	"$n gasps as $e realizes what $N did.",
	"$n gasps as $e realizes what you did.",
	"You look at yourself and gasp!",
	"$n takes one look at $mself and gasps in astonishment!"
    },
    
    {
	"ghug",
	"GROUP HUG!  GROUP HUG!",
	"$n hugs you all in a big group hug.  How sweet!",
	"GROUP HUG!  GROUP HUG!",
	"$n hugs you all in a big group hug.  How sweet!",
	"$n hugs you all in a big group hug.  How sweet!",
	"GROUP HUG!  GROUP HUG!",
	"$n hugs you all in a big group hug.  How sweet!"
    },
    
    {
	"giggle",
	"You giggle.",
	"$n giggles.",
	"You giggle in $S presence.",
	"$n giggles at $N's actions.",
	"$n giggles at you.  Hope it's not contagious!",
	"You giggle at yourself.  You must be nervous or something.",
	"$n giggles at $mself.  $e must be nervous or something."
    },

    {
	"glare",
	"You glare at nothing in particular.",
	"$n glares around $m.",
	"You glare icily at $M.",
	"$n glares at $N.",
	"$n glares icily at you, you feel cold to your bones.",
	"You glare icily at your feet, they are suddenly very cold.",
	"$n glares at $s feet, what is bothering $m?"
    },

    {
	"goose",
	"You honk like a goose.",
	"$n honks like a goose.",
	"You goose $S luscious bottom.",
	"$n gooses $N's soft behind.",
	"$n squeezes your tush.  Oh my!",
	"You goose yourself.",
	"$n gooses $mself.  Yuck."
    },
    
    {
	"grimace",
	"You contort your face in disgust.",
	"$n grimaces is disgust.",
	"You grimace in disgust at $M.",
	"$n grimaces in disgust at $N.",
	"$n grimaces in disgust at you.",
	"You grimace at yourself in disgust.",
	"$n grimaces at $mself in disgust."
    },

    {
	"grin",
	"You grin evilly.",
	"$n grins evilly.",
	"You grin evilly at $M.",
	"$n grins evilly at $N.",
	"$n grins evilly at you.  Hmmm.  Better keep your distance.",
	"You grin at yourself.  You must be getting very bad thoughts.",
	"$n grins at $mself.  You must wonder what's in $s mind."
    },

    {
	"groan",
	"You groan loudly.",
	"$n groans loudly.",
	"You groan at the sight of $M.",
	"$n groans at the sight of $N.",
	"$n groans at the sight of you.",
	"You groan as you realize what you have done.",
	"$n groans as $e realizes what $e has done."
    },

    {
	"grovel",
	"You grovel in the dirt.",
	"$n grovels in the dirt.",
	"You grovel before $M.",
	"$n grovels in the dirt before $N.",
	"$n grovels in the dirt before you.",
	"That seems a little silly to me.",
	NULL
    },

    {
	"growl",
	"Grrrrrrrrrr ...",
	"$n growls.",
	"Grrrrrrrrrr ... take that, $N!",
	"$n growls at $N.  Better leave the room before the fighting starts.",
	"$n growls at you.  Hey, two can play it that way!",
	"You growl at yourself.  Boy, do you feel bitter!",
	"$n growls at $mself.  This could get interesting..."
    },

    {
	"grumble",
	"You grumble.",
	"$n grumbles.",
	"You grumble to $M.",
	"$n grumbles to $N.",
	"$n grumbles to you.",
	"You grumble under your breath.",
	"$n grumbles under $s breath."
    },

    {
	"grunt",
	"GRNNNHTTTT.",
	"$n grunts like a pig.",
	"GRNNNHTTTT.",
	"$n grunts to $N.  What a pig!",
	"$n grunts to you.  What a pig!",
	"GRNNNHTTTT.",
	"$n grunts to $mself.  What a pig!"
    },

    {
	"highfive",
	"You jump in the air...oops, better get someone else to join you.",
	"$n jumps in the air by $mself.  Is $e a cheerleader, or just daft?",
	"You jump in the air and give $M a big highfive!",
	"$n jumps in the air and gives $N a big highfive!",
	"$n jumps in the air and gives you a big highfive!",
	"You jump in the air and congratulate yourself!",
	"$n jumps in the air and gives $mself a big highfive!  Wonder what $e did?"
    },
    
    {
	"hmm",
	"You Hmmmm out loud.",
	"$n thinks, 'Hmmmm.'",
	"You gaze thoughtfully at $M and say 'Hmmm.'",
	"$n gazes thoughtfully at $N and says 'Hmmm.'",
	"$n gazes thoughtfully at you and says 'Hmmm.'",
	"You Hmmmm out loud.",
	"$n thinks, 'Hmmmm.'"
    },
 
    {
	"hug",
	"Hug whom?",
	NULL,
	"You hug $M.",
	"$n hugs $N.",
	"$n hugs you.",
	"You hug yourself.",
	"$n hugs $mself in a vain attempt to get friendship."
    },
    
    {
	"kiss",
	"Isn't there someone you want to kiss?",
	NULL,
	"You kiss $M.",
	"$n kisses $N.",
	"$n kisses you.",
	"All the lonely people :(",
	NULL
    },

    {
        "lag",
        "You complain about the lag, your hitpoints, your mana...",
        "$n has lost $s link because of the lag.",
        "You complain to $N about the lag, your hitpoints, your mana...",
        "$n has lost $s link because of the lag.",
        "$n has lost $s link because of the lag.",
        "You complain about the lag, your hitpoints, your mana...",
        "$n has lost $s link because of the lag."
    },
    
    {
        "lapdance",
        "You look around for someone to lapdance.",
        "$n looks around for someone to lapdance.",
        "You lapdance $M making $M pop into a sweat!",
        "$n lapdances $N till they beg for mercy!",
        "$n lapdances you slowly to the beat of Latin music!",
        "You lapdance yourself.  Kinky!",
        "$n lapdances $mself. You wonder, 'Are they really that lonely?'",
    },
 
    {
	"laugh",
	"You laugh.",
	"$n laughs.",
	"You laugh at $N mercilessly.",
	"$n laughs at $N mercilessly.",
	"$n laughs at you mercilessly.  Hmmmmph.",
	"You laugh at yourself.  I would, too.",
	"$n laughs at $mself.  Let's all join in!!!"
    },

    {
	"lick",
	"You lick your lips and smile.",
	"$n licks $s lips and smiles.",
	"You lick $M.",
	"$n licks $N.",
	"$n licks you.",
	"You lick yourself.",
	"$n licks $mself - YUCK."
    },

    {
        "liege",
        "You kneel down on the ground, looking for someone to liege.",
        "$n kneels to the ground, looking for someone to liege.",
        "You kneel before $M and say, 'My liege!'",
        "$n kneels before $N and says, 'My liege!'",
        "$n kneels before you and says, 'My liege!'",
        "You liege yourself, how silly!",
        "$n lieges $mself, how strange."
    },
    
    {
	"massage",
	"Massage what?  Thin air?",
	NULL,
	"You gently massage $N's shoulders.",
	"$n massages $N's shoulders.",
	"$n gently massages your shoulders.  Ahhhhhhhhhh ...",
	"You practice yoga as you try to massage yourself.",
	"$n gives a show on yoga positions, trying to massage $mself."
    },
    
    {
	"mmm",
	"You go mmMMmmMMmmMMmm.",
	"$n says, 'mmMMmmMMmmMMmm.'",
	"You go mmMMmmMMmmMMmm.",
	"$n says, 'mmMMmmMMmmMMmm.'",
	"$n thinks of you and says, 'mmMMmmMMmmMMmm.'",
	"You think of yourself, and go mmMMmmMMmmMMmm.",
	"$n thinks of $mself and says, 'mmMMmmMMmmMMmm.'"
    },
    
    { 
        "mock",
        "You mock nothing in general.",
        "$n mocks nothing in general.",
        "You look at $M, smile, and say 'I mock you.'",
        "$n mocks $N mercilessly.",
        "$n looks at you, smiles, and says 'I mock you.'",
        "You mock yourself alot.",
        "$n mocks $mself just cause $e can."
    },

    {
	"moan",
	"You start to moan.",
	"$n starts moaning.",
	"You moan for the loss of $M.",
	"$n moans for the loss of $N.",
	"$n moans at the sight of you.  Hmmmm.",
	"You moan at yourself.",
	"$n makes $mself moan."
    },
    
    {
	"muhaha",
	"You laugh diabolically.  MUHAHAHAHAHAHA!",
	"$n laughs diabolically.  MUHAHAHAHAHAHA!",
	"You laugh at $M diabolically.  MUHAHAHAHAHAHA!",
	"$n laughs at $N diabolically.  MUHAHAHAHAHAHA!",
	"$n laughs at you diabolically.  MUHAHAHAHAHAHA!",
	"Muhaha at yourself??  Wierd.",
	NULL
    },
    
    {
	"ni",
	"You exclaim proudly, 'I am a knight that goes NI!'",
	"$n exclaims proudly, 'I am a knight that goes NI!'",
	"You exclaim proudly to $M, 'I am a knight that goes NI!'",
	"$n exclaims proudly to $N, 'I am a knight that goes NI!'",
	"$n proudly exclaims to you, 'I am a knight that goes NI!'",
	"You exclaim proudly, 'I am a knight that goes NI!'",
	"$n exclaims proudly, 'I am a knight that goes NI!'"
    },
    
    {
	"nibble",
	"Nibble on whom?",
	NULL,
	"You nibble on $N's ear.",
	"$n nibbles on $N's ear.",
	"$n nibbles on your ear.",
	"You nibble on your OWN ear.",
	"$n nibbles on $s OWN ear."
    },

    {
	"nod",
	"You nod affirmative.",
	"$n nods affirmative.",
	"You nod in recognition to $M.",
	"$n nods in recognition to $N.",
	"$n nods in recognition to you.  You DO know $m, right?",
	"You nod at yourself.  Are you getting senile?",
	"$n nods at $mself.  $e must be getting senile."
    },

    {
	"nudge",
	"Nudge whom?",
	NULL,
	"You nudge $M.",
	"$n nudges $N.",
	"$n nudges you.",
	"You nudge yourself, for some strange reason.",
	"$n nudges $mself, to keep $mself awake."
    },
 
    {
        "ooo",
        "You go ooOOooOOooOOoo.",
        "$n says, 'ooOOooOOooOOoo.'",
        "You go ooOOooOOooOOoo.",
        "$n says, 'ooOOooOOooOOoo.'",
        "$n thinks of you and says, 'ooOOooOOooOOoo.'",
        "You go ooOOooOOooOOoo.",
        "$n says, 'ooOOooOOooOOoo.'"
    },
 
    {
	"pet",
	"Pat whom?",
	NULL,
	"You pat $N on $S head.",
	"$n pats $N on $S head.",
	"$n pats you on your head.",
	"You pat yourself on your head.  Aren't you proud?",
	"$n pats $mself on the head.  $e is proud of $mself!"
    },

    {
	"peer",
	"You peer intently about your surroundings.",
	"$n peers intently about the area, looking for thieves no doubt.",
	"You peer at $M quizzically.",
	"$n peers at $N quizzically.",
	"$n peers at you quizzically.",
	"You peer intently about your surroundings.",
	"$n peers intently about the area, looking for thieves no doubt."
    },

    {
	"pinch",
	"You toss a pinch of salt over your shoulder.",
	"$n tosses a pinch of salt over $s shoulder.",
	"You pinch $S rosy cheeks.",
	"$n pinches $N's rosy cheeks.",
	"$n pinches your chubby cheeks.",
	"You need a pinch of salt.",
	"$n needs a pinch of salt."
    },

    {
	"point",
	"Point at whom?",
	NULL,
	"You point at $M accusingly.",
	"$n points at $N accusingly.",
	"$n points at you accusingly.",
	"You point proudly at yourself.",
	"$n points proudly at $mself."
    },

    {
	"poke",
	"Poke whom?",
	NULL,
	"You poke $M in the ribs.",
	"$n pokes $N in the ribs.",
	"$n pokes you in the ribs.",
	"You poke yourself in the ribs, feeling very silly.",
	"$n pokes $mself in the ribs, looking very sheepish."
    },
   
    {
        "pounce",
        "You crouch low to the ground, looking for someone to pounce on...",
        "$n pounces up and down like a mad man!",
        "You pounce onto $N's lap playfully.",
        "$n pounces onto $N's lap playfully.",
        "$n crouches low to the ground, looking for someone to pounce on...",
        "You attempt to pounce on yourself. Not too swift...",
        "$n attempts to pounce on $mself! Not too swift..."
    },

    {
	"ponder",
	"You ponder the question.",
	"$n sits down and thinks deeply.",
	NULL,
	NULL,
	NULL,
	NULL,
	NULL
    },
    
    {
	"pout",
	"Ah, don't take it so hard.",
	"$n pouts.",
	"Ah, don't take it so hard.",
	"$n pouts at $N.  What did $N do?",
	"$n pouts at you.  What did you do to $m?",
	"Ah, don't take it so hard.",
	"$n pouts."
    },

    {
	"pray",
	"You feel righteous, and maybe a little foolish.",
	"$n begs and grovels to the powers that be.",
	"You crawl in the dust before $M.",
	"$n falls down and grovels in the dirt before $N.",
	"$n kisses the dirt at your feet.",
	"Talk about narcissism ...",
	"$n mumbles a prayer to $mself."
    },
    
    {
	"puke",
	"You puke ... chunks everywhere!",
	"$n pukes.",
	"You puke on $M.",
	"$n pukes on $N.",
	"$n spews vomit and pukes all over your clothing!",
	"You puke on yourself.",
	"$n pukes on $s clothes."
    },

    {
	"raise",
	"You raise your hand in response.",
	"$n raises $s hand in response.",
	"You raise your hand in response.",
	"$n raises $s hand in response.",
	"$n raises $s hand in response to you.",
	"You raise your hand in response.",
	"$n raises $s hand in response."
    },

    {
	"rofl",
	"You roll on the floor laughing hysterically.",
	"$n rolls on the floor laughing hysterically.",
	"You laugh your head off at $S remark.",
	"$n rolls on the floor laughing at $N's remark.",
	"$n can't stop laughing at your remark.",
	"You roll on the floor and laugh at yourself.",
	"$n laughs at $mself.  Join in the fun."
    },
    
    {
        "roflmao",
        "You roll on the floor, laughing your ass off!",
        "$n rolls on the floor, laughing $s ass off!",
        "You roll on the floor, laughing your ass off at $M!",
        "$n rolls on the floor, laughing $s ass off at $N!",
        "$n rolls on the floor, laughing $s ass off at YOU!",
        "You roll on the floor, laughing your ass off at yourself!",
        "$n rolls on the floor, laughing $s ass off at $mself...Strange."
     },

    {
	"roll",
	"You roll your eyes.",
	"$n rolls $s eyes.",
	"You roll your eyes at $M.",
	"$n rolls $s eyes at $N.",
	"$n rolls $s eyes at you.",
	"You roll your eyes at yourself.",
	"$n rolls $s eyes at $mself."
    },

    {
	"ruffle",
	"You've got to ruffle SOMEONE.",
	NULL,
	"You ruffle $N's hair playfully.",
	"$n ruffles $N's hair playfully.",
	"$n ruffles your hair playfully.",
	"You ruffle your hair.",
	"$n ruffles $s hair."
    },
    
    {
	"sad",
	"You put on a glum expression.",
	"$n looks particularly glum today.  *sniff*",
	"You give $M your best glum expression.",
	"$n looks at $N glumly.  *sniff*  Poor $n.",
	"$n looks at you glumly.  *sniff*   Poor $n.",
	"You bow your head and twist your toe in the dirt glumly.",
	"$n bows $s head and twists $s toe in the dirt glumly."
    },

    {
	"salute",
	"You salute smartly.",
	"$n salutes smartly.",
	"You salute $M.",
	"$n salutes $N.",
	"$n salutes you.",
	"Huh?",
	NULL
    },

    {
	"scream",
	"ARRRRRRRRRRGH!!!!!",
	"$n screams loudly!",
	"ARRRRRRRRRRGH!!!!!  Yes, it MUST have been $S fault!!!",
	"$n screams loudly at $N.  Better leave before $e blames you, too!!!",
	"$n screams at you!  That's not nice!  *sniff*",
	"You scream at yourself.  Yes, that's ONE way of relieving tension!",
	"$n screams loudly at $mself!  Is there a full moon up?"
    },

    {
	"shake",
	"You shake your head.",
	"$n shakes $s head.",
	"You shake $S hand.",
	"$n shakes $N's hand.",
	"$n shakes your hand.",
	"You are shaken by yourself.",
	"$n shakes and quivers like a bowl full of jelly."
    },

    {
	"shrug",
	"You shrug.",
	"$n shrugs helplessly.",
	"You shrug in response to $s question.",
	"$n shrugs in response to $N's question.",
	"$n shrugs in respopnse to your question.",
	"You shrug to yourself.",
	"$n shrugs to $mself.  What a strange person."
    },

    {
	"sigh",
	"You sigh.",
	"$n sighs loudly.",
	"You sigh as you think of $M.",
	"$n sighs at the sight of $N.",
	"$n sighs as $e thinks of you.  Touching, huh?",
	"You sigh at yourself.  You MUST be lonely.",
	"$n sighs at $mself.  What a sorry sight."
    },

    {
	"slobber",
	"You slobber all over the floor.",
	"$n slobbers all over the floor.",
	"You slobber all over $M.",
	"$n slobbers all over $N.",
	"$n slobbers all over you.",
	"You slobber all down your front.",
	"$n slobbers all over $mself."
    },

    {
	"smile",
	"You smile happily.",
	"$n smiles happily.",
	"You smile at $M.",
	"$n beams a smile at $N.",
	"$n smiles at you.",
	"You smile at yourself.",
	"$n smiles at $mself."
    },

    {
	"smirk",
	"You smirk.",
	"$n smirks.",
	"You smirk at $S saying.",
	"$n smirks at $N's saying.",
	"$n smirks at your saying.",
	"You smirk at yourself.  Okay ...",
	"$n smirks at $s own 'wisdom'."
    },

    {
        "slap",
        "You look around for someone to slap.",
        "$n looks around for someone to slap.",
        "You slap $M.",
        "$n slaps $N.",
        "$n slaps you.",
        "You slap yourself across the face.",
        "$n slaps $mself across the face."
    },

    {
	"smooch",
	"You are searching for someone to smooch.",
	"$n is looking for someone to smooch.",
	"You give $M a nice, wet smooch.",
	"$n and $N are smooching in the corner.",
	"$n smooches you passionately on the lips.",
	"You smooch yourself.",
	"$n smooches $mself.  Yuck."
    },

    {
	"sneeze",
	"Gesundheit!",
	"$n sneezes.",
	NULL,
	NULL,
	NULL,
	NULL,
	NULL
    },

    {
	"snicker",
	"You snicker softly.",
	"$n snickers softly.",
	"You snicker with $M about your shared secret.",
	"$n snickers with $N about their shared secret.",
	"$n snickers with you about your shared secret.",
	"You snicker at your own evil thoughts.",
	"$n snickers at $s own evil thoughts."
    },

    {
	"sniff",
	"You sniff sadly. *SNIFF*",
	"$n sniffs sadly.",
	"You sniff sadly at the way $E is treating you.",
	"$n sniffs sadly at the way $N is treating $m.",
	"$n sniffs sadly at the way you are treating $m.",
	"You sniff sadly at your lost opportunities.",
	"$n sniffs sadly at $mself.  Something MUST be bothering $m."
    },
    
    {
	"spank",
	"Spank whom?",
	NULL,
	"You spank $M playfully.",
	"$n spanks $N playfully.",
	"$n spanks you playfully.  OUCH!",
	"You spank yourself.  Kinky!",
	"$n spanks $mself.  Kinky!"
    },
    
    {
	"squeeze",
	"Where, what, how, whom?",
	NULL,
	"You squeeze $M fondly.",
	"$n squeezes $N fondly.",
	"$n squeezes you fondly.",
	"You squeeze yourself - try to relax a little!",
	"$n squeezes $mself."
    },
    
    {
	"strip",
	"You show some of your shoulder as you begin your performance.",
	"$n shows $s bare shoulder and glances seductively around the room.",
	"You show some of your shoulder as you begin your performance.",
	"$n shows $s bare shoulder and glances seductively at $N.",
	"$n shows $s bare shoulder and glances seductively at you.",
	"You show some of your shoulder as you begin your performance.",
	"$n shows $s bare shoulder and glances seductively around the room."
    },

    {
	"strut",
	"Strut your stuff.",
	"$n struts proudly.",
	"You strut to get $S attention.",
	"$n struts, hoping to get $N's attention.",
	"$n struts, hoping to get your attention.",
	"You strut to yourself, lost in your own world.",
	"$n struts to $mself, lost in $s own world."
    },

    {
	"swoon",
	"You swoon in ecstacy.",
	"$n swoons in ecstacy.",
	"You swoon in ecstacy at the thought of $M.",
	"$n swoons in ecstacy at the thought of $N.",
	"$n swoons in ecstacy as $e thinks of you.",
	"You swoon in ecstacy.",
	"$n swoons in ecstacy."
    },

    {
	"tackle",
	"You can't tackle the AIR!",
	NULL,
	"You run over to $M and bring $M down!",
	"$n runs over to $N and tackles $M to the ground!",
	"$n runs over to you and tackles you to the ground!",
	"You wrap your arms around yourself, and throw yourself to the ground.",
	"$n wraps $s arms around $mself and brings $mself down!?"
    },
    
    {
	"tap",
	"You tap your foot impatiently.",
	"$n taps $s foot impatiently.",
	"You tap your foot impatiently.  Will $E ever be ready?",
	"$n taps $s foot impatiently as $e waits for $N.",
	"$n taps $s foot impatiently as $e waits for you.",
	"You tap yourself on the head.  Ouch!",
	"$n taps $mself on the head."
     },
     
    {
	"thank",
	"Thank you too.",
	NULL,
	"You thank $N heartily.",
	"$n thanks $N heartily.",
	"$n thanks you heartily.",
	"You thank yourself since nobody else wants to !",
	"$n thanks $mself since you won't."
    },

    {
	"think",
	"You think about times past and friends forgotten.",
	"$n thinks deeply and is lost in thought.",
	"You think about times past and friends forgotten.",
	"$n thinks deeply and is lost in thought.",
	"$n thinks deeply and is lost in thought.  Maybe $e is thinking of you?",
	"You think about times past and friends forgotten.",
	"$n thinks deeply and is lost in thought."
    },

    {
	"tickle",
	"Whom do you want to tickle?",
	NULL,
	"You tickle $N - $E starts giggling.",
	"$n tickles $N - $E starts giggling.",
	"$n tickles you - hee hee hee.",
	"You tickle yourself, how funny!",
	"$n tickles $mself."
    },
    
    {
	"twiddle",
	"You patiently twiddle your thumbs.",
	"$n patiently twiddles $s thumbs.",
	"You twiddle $S ears.",
	"$n twiddles $N's ears.",
	"$n twiddles your ears.",
	"You twiddle your ears like Dumbo.",
	"$n twiddles $s own ears like Dumbo."
    },
    
    {
	"wave",
	"You wave.",
	"$n waves happily.",
	"You wave goodbye to $N.",
	"$n waves goodbye to $N.",
	"$n waves goodbye to you.  Have a good journey.",
	"Are you going on adventures as well?",
	"$n waves goodbye to $mself."
    },

    {
	"wedgie",
	"You look around for someone to wedgie.",
	"$n is looking around for someone to wedgie!  Run!",
	"You wedgie $M.  Must be fun! ",
	"$n wedgies $N to the heavens.",
	"$n wedgies you!  Ouch!",
	"You delight in pinning your underwear to the sky.",
	"$n wedgies $mself and revels with glee."
    },

    {
	"whine",
	"You whine like the great whiners of the century.",
	"$n whines 'I want to be a god already.  I need more hitpoints..I...'",
	"You whine to $M like the great whiners of the century.",
	"$n whines to $N 'I want to be an immortal already.  I need more hp...I..'",
	"$n whines to you 'I want to be an immortal already.  I need more hp...I...'",
	"You whine like the great whiners of the century.",
	"$n whines 'I want to be a god already.  I need more hitpoints..I...'"
    },

    {
	"wince",
	"You wince.  Ouch!",
	"$n winces.  Ouch!",
	"You wince at $M.",
	"$n winces at $N.",
	"$n winces at you.",
	"You wince at yourself.  Ouch!",
	"$n winces at $mself.  Ouch!"
    },

    {
	"wink",
	"You wink suggestively.",
	"$n winks suggestively.",
	"You wink suggestively at $N.",
	"$n winks at $N.",
	"$n winks suggestively at you.",
	"You wink at yourself ?? - what are you up to ?",
	"$n winks at $mself - something strange is going on..."
    },

    {
	"worship",
	"You worship the powers that be.",
	"$n worships the powers that be.",
	"You drop to your knees in homage of $M.",
	"$n prostrates $mself before $N.",
	"$n believes you are all powerful.",
	"You worship yourself.",
	"$n worships $mself - ah, the conceitedness of it all."
    },
    
    {
	"yawn",
	"You must be tired.",
	"$n yawns.",
	"You must be tired.",
	"$n yawns at $N.  Maybe you should let them go to bed?",
	"$n yawns at you.  Maybe $e wants you to go to bed with $m?",
	"You must be tired.",
	"$n yawns."
    },
    
    {
	"",
	NULL, NULL, NULL, NULL, NULL, NULL, NULL
    }
};

*/

/*
 * The main entry point for executing commands.
 * Can be recursively called from 'at', 'order', 'force'.
 */
void interpret( CHAR_DATA *ch, char *argument )
{
    char command [ MAX_INPUT_LENGTH ];
    char logline [ MAX_INPUT_LENGTH ];
    int  cmd;
    int  trust;
    bool found;

    if ( ch->wait > 0 )
      return;

    /*
     * Strip leading spaces.
     */
    while ( isspace( *argument ) )
	argument++;
    if ( argument[0] == '\0' )
	return;

    /*
     * Implement freeze command.
     */
    if ( !IS_NPC( ch ) && IS_SET( ch->act, PLR_FREEZE ) )
    {
	send_to_char(AT_LBLUE, "You're totally frozen!\n\r", ch );
	return;
    }

    /*
     * Implement stun.
     */
    if ( IS_STUNNED( ch, STUN_COMMAND ) ||
	 IS_STUNNED( ch, STUN_TOTAL ) )
    {
      send_to_char(AT_LBLUE, "You're too stunned to do anything!\n\r", ch );
      return;
    }

    /*
     * Grab the command word.
     * Special parsing so ' can be a command,
     *   also no spaces needed after punctuation.
     */
    strcpy( logline, argument );
    if ( !isalpha( argument[0] ) && !isdigit( argument[0] ) )
    {
	command[0] = argument[0];
	command[1] = '\0';
	argument++;
	while ( isspace( *argument ) )
	    argument++;
    }
    else
    {
	argument = one_argument( argument, command );
    }

    /*
     * Look for command in command table.
     */
    found = FALSE;
    trust = get_trust( ch );
    for ( cmd = 0; cmd_table[cmd].name[0] != '\0'; cmd++ )
    {
	if ( command[0] == cmd_table[cmd].name[0]
	    && !str_prefix( command, cmd_table[cmd].name )
	    && can_use_cmd(cmd, ch, trust) )
	{
	    found = TRUE;
	    break;
	}
    }

    /*
     * Log and snoop.
     */
    if ( cmd_table[cmd].log == LOG_NEVER )
	strcpy( logline, "XXXXXXXX XXXXXXXX XXXXXXXX" );


	/*
	 * Builder Logs.
	 * Added by Altrag.
	 */
	if ( cmd_table[cmd].log == LOG_BUILD )
	{
	sprintf( log_buf, "%s: %s", ch->name, logline );
	log_string( log_buf, CHANNEL_BUILD , get_trust( ch ) );
	wiznet( log_buf, ch, NULL, WIZ_SECURE, 0, get_trust( ch ) );
	}

    if ( ( !IS_NPC( ch ) && IS_SET( ch->act, PLR_LOG ) )
	|| fLogAll
	|| cmd_table[cmd].log == LOG_ALWAYS )
    {
      sprintf( log_buf, "%s: %s", ch->name, logline );
      log_string( log_buf, ( ch->level == L_IMP ? CHANNEL_NONE : CHANNEL_GOD ),
         ( ( ch->level > 100 ) ? get_trust( ch ) : -1 ) );
      wiznet( log_buf, ch, NULL, WIZ_SECURE, 0, get_trust( ch ) );
    }

    if ( ch->desc && ch->desc->snoop_by )
    {
        sprintf( log_buf, "%s%%", ch->name );
	write_to_buffer( ch->desc->snoop_by, log_buf,    0 );
	write_to_buffer( ch->desc->snoop_by, logline, 0 );
	write_to_buffer( ch->desc->snoop_by, "\n\r",  2 );
    }

    /*
     *  Hiding stuff...  - Decklarean
     */
    if ( IS_AFFECTED(ch,AFF_HIDE) )
     {     /*Things you can do while hiding*/
	if (            str_cmp( cmd_table[cmd].name, "pick"     ) &&
			str_cmp( cmd_table[cmd].name, "chameleon power") &&
			str_cmp( cmd_table[cmd].name, "save"     ) &&
			str_cmp( cmd_table[cmd].name, "visible"  ) &&
			str_cmp( cmd_table[cmd].name, "inventory") &&
			str_cmp( cmd_table[cmd].name, "equipment") &&
			str_cmp( cmd_table[cmd].name, "where"    ) &&
			str_cmp( cmd_table[cmd].name, "who"      ) &&
			str_cmp( cmd_table[cmd].name, "open"     ) &&
			str_cmp( cmd_table[cmd].name, "hide"     ) &&
			str_cmp( cmd_table[cmd].name, "sleep"    ) &&
			str_cmp( cmd_table[cmd].name, "stand"    ) &&
			str_cmp( cmd_table[cmd].name, "rest"     ) &&
			str_cmp( cmd_table[cmd].name, "peek"     ) &&
			str_cmp( cmd_table[cmd].name, "shadow"   ) &&
			str_cmp( cmd_table[cmd].name, "sneak"    ) &&
			str_cmp( cmd_table[cmd].name, "worth"    ) &&
			str_cmp( cmd_table[cmd].name, "affected" ) &&
			str_cmp( cmd_table[cmd].name, "look"     ) &&
                        str_cmp( cmd_table[cmd].name, "tell"     ) &&
			str_cmp( cmd_table[cmd].name, "score"    )    )
        {
 /*If you are sneaking you can move these directions while hiding*/
 	   if ( IS_AFFECTED(ch,AFF_SNEAK) &&
		( !str_cmp( cmd_table[cmd].name, "north" ) ||
	          !str_cmp( cmd_table[cmd].name, "east"  ) ||
           	  !str_cmp( cmd_table[cmd].name, "south" ) ||
		  !str_cmp( cmd_table[cmd].name, "west"  ) ||
		  !str_cmp( cmd_table[cmd].name, "up"    ) ||
		  !str_cmp( cmd_table[cmd].name, "down"  )    ) )
	   { 
              /* check and see if they are chameleon and remove it if they
		 are trying to move*/
	      if ( is_affected(ch, gsn_chameleon) )
	      {
                 send_to_char(AT_BLUE, "You return to your normal coloration.\n\r", ch );
  	         affect_strip ( ch, gsn_chameleon );
              }
 	      /* If they aren't hidding remove the hide bit */	
              if ( !is_affected(ch, gsn_hide ) )
 	         REMOVE_BIT( ch->affected_by, AFF_HIDE );
           }
           else
           {  /* remove all the hidding stuff */
              if ( is_affected(ch, gsn_chameleon) )
	      {
                 send_to_char(AT_BLUE, "You return to your normal coloration.\n\r", ch );
                 affect_strip ( ch, gsn_chameleon);
              }
	      if ( is_affected(ch, gsn_hide) )
              {
		 send_to_char(AT_BLUE, "You stop hiding.\n\r", ch);
                 affect_strip ( ch, gsn_hide );
	      }
 	      REMOVE_BIT( ch->affected_by, AFF_HIDE );
	   }
	}
     }


    if ( IS_AFFECTED2(ch,AFF_BERSERK) && trust < LEVEL_IMMORTAL)
    {
      if ( !found || (str_cmp( cmd_table[cmd].name, "flee" ) &&
		      str_cmp( cmd_table[cmd].name, "look" ) &&
		      str_cmp( cmd_table[cmd].name, "get"  ) &&
		      str_cmp( cmd_table[cmd].name, "wield") &&
		      str_cmp( cmd_table[cmd].name, "dual" ) &&
		      str_cmp( cmd_table[cmd].name, "score")) )
      {
	send_to_char( AT_BLOOD, "You cannot do that in such a rage!\n\r",ch);
	return;
      }
    }

    if ( !found )
    {
	/*
	 * Look for command in socials table.
	 */
	if ( IS_NPC(ch) || !check_alias( ch, command, argument ) )
	if ( !check_social( ch, command, argument ) )
	    send_to_char(C_DEFAULT, "Huh?\n\r", ch );
	return;
    }

    /*
     * Character not in position for command?
     */
    if ( ch->position < cmd_table[cmd].position )
    {
	switch( ch->position )
	{
	case POS_DEAD:
	    send_to_char(AT_RED, "Lie still; you are DEAD.\n\r", ch );
	    break;

	case POS_MORTAL:
	case POS_INCAP:
	    send_to_char(AT_RED, "You are hurt far too bad for that.\n\r", ch );
	    break;

	case POS_STUNNED:
	    send_to_char(AT_WHITE, "You are too stunned to do that.\n\r",    ch );
	    break;

	case POS_SLEEPING:
	    send_to_char(AT_BLUE, "In your dreams, or what?\n\r",           ch );
	    break;

	case POS_RESTING:
	    send_to_char(AT_BLUE, "Nah... You feel too relaxed...\n\r",     ch );
	    break;

	case POS_FIGHTING:
	    send_to_char(AT_BLOOD, "No way!  You are still fighting!\n\r",   ch );
	    break;

	}
	return;
    }
/*
    if ( IS_NPC(ch) )
    {
      char combuf [MAX_STRING_LENGTH];
      char filname[MAX_INPUT_LENGTH];
      extern int port;

      sprintf(combuf, "%s: [%d] %s %s\n\r", ctime( &current_time), ch->pIndexData->vnum, command, argument);
      sprintf(filname, "comlog%d.txt", port );
      append_file( ch, filname, combuf );
    }
*/
    /*
     * Dispatch the command.
     */
    if ( IS_SET( ch->act, PLR_AFK ) )  /* if player was afk, remove afk */
       {
       REMOVE_BIT( ch->act, PLR_AFK );
       send_to_char( AT_YELLOW, "You are no longer AFK.\n\r", ch );
       }
    if ( !strcmp( cmd_table[cmd].name, "sing" )
    && prime_class(ch) != CLASS_BARD )
	{
	send_to_char( C_DEFAULT, "What do you think you are, a BARD???\n\r", ch );
	return;
	}
    else if ( !strcmp( cmd_table[cmd].name, "cast" )
	 && prime_class(ch) == CLASS_BARD )
	{
	send_to_char( C_DEFAULT, "You're a bard, SING!\n\r", ch );
	return;
	}

/* Here checks if ch is fighting in the arena **/

    if ( ch == arena.fch || ch == arena.sch ) 
       arena_master( ch, cmd_table[cmd].name, argument ); 

/** Do arena_master so we can look at arg and send info over channel then we come
    back and process command **/


    (*cmd_table[cmd].do_fun) ( ch, argument );
    tail_chain( );
    return;
}

bool can_use_cmd( int cmd, CHAR_DATA *ch, int trust )
{
  if ( trust <= 0 )
    trust = get_trust(ch);
  if ( !IS_NPC(ch) )
  {
    if ( is_name(NULL, cmd_table[cmd].name, ch->pcdata->empowerments) )
      return TRUE;
    if ( is_name(NULL, cmd_table[cmd].name, ch->pcdata->detractments) )
      return FALSE;
  }
  return (cmd_table[cmd].level <= trust);
}

bool check_alias( CHAR_DATA *ch, char *command, char *argument )
{
   ALIAS_DATA *al;
   char arg[MAX_STRING_LENGTH];
   char newarg[MAX_STRING_LENGTH];
   bool found;
   
   arg[0] = '\0';
   newarg[0] = '\0';
   
/*   if ( argument[0] != '\0' )
     argument = one_argument( argument, arg );*/
   while ( isspace(*argument) )
     argument++;
   strcpy( arg, argument );
   
   if ( IS_NPC( ch ) )
     return FALSE;
     
   if ( !(ch->pcdata->alias_list) )
     return FALSE;
   
   found = FALSE;

   for ( al = ch->pcdata->alias_list; al; al = al->next )
   {
     if ( !str_cmp( al->old, command ) )
     {
/*       if ( arg[0] != '\0' )
       {*/
         strcpy( newarg, al->new );
         strcat( newarg, " " );
         strcat( newarg, arg );
         interpret( ch, newarg );
/*       }
      else
       interpret( ch, al->new );*/
       
       found = TRUE;
       break;
     }
   }
   return found;
}


bool check_social( CHAR_DATA *ch, char *command, char *argument )
{
    CHAR_DATA *victim;
    char       arg [ MAX_INPUT_LENGTH ];
    char       buf [ MAX_STRING_LENGTH ];
    
/*    int        cmd;*/
    bool       found;
    SOCIAL_DATA *pSocial;

    found  = FALSE;
/*
    for ( cmd = 0; social_table[cmd].name[0] != '\0'; cmd++ )
    {
	if ( command[0] == social_table[cmd].name[0]
	    && !str_prefix( command, social_table[cmd].name ) )
	{
	    found = TRUE;
	    break;
	}
    } */

  for(pSocial = social_first;pSocial;pSocial = pSocial->next)
  {
    if ( command[0] == pSocial->name[0]
         && !str_prefix( command, pSocial->name) )
    {
	found = TRUE;
	break;
    }
  }

    if ( !found )
	return FALSE;

    if ( !IS_NPC( ch ) && IS_SET( ch->act, PLR_NO_EMOTE ) )
    {
	send_to_char(AT_LBLUE, "You are anti-social!\n\r", ch );
	return TRUE;
    }

    switch ( ch->position )
    {
    case POS_DEAD:
	send_to_char(AT_RED, "Lie still; you are DEAD.\n\r",             ch );
	return TRUE;

    case POS_INCAP:
    case POS_MORTAL:
	send_to_char(AT_RED, "You are hurt far too badly for that.\n\r", ch );
	return TRUE;

    case POS_STUNNED:
	send_to_char(AT_WHITE, "You are too stunned to do that.\n\r",      ch );
	return TRUE;

    case POS_SLEEPING:
	/*
	 * I just know this is the path to a 12" 'if' statement.  :(
	 * But two players asked for it already!  -- Furey
	 */
	if ( !str_cmp( pSocial->name, "snore" ) )
	    break;
	send_to_char(AT_BLUE, "In your dreams, or what?\n\r",             ch );
	return TRUE;

    }

    one_argument( argument, arg );
    victim = NULL;
    if ( arg[0] == '\0' )
    {
	act(AT_PINK, pSocial->char_no_arg,   ch, NULL, victim, TO_CHAR);
	act(AT_PINK, pSocial->others_no_arg, ch, NULL, victim, TO_ROOM);
    }
    else if ( !( victim = get_char_room( ch, arg ) ) )
    {
	if ( !( victim = get_char_world( ch, arg ) ) )
		send_to_char(AT_WHITE, "They aren't here.\n\r",                    ch );
  	else {  
		if ((ch->in_room->vnum == ROOM_VNUM_HELL) &&
		   (ch->level < LEVEL_IMMORTAL))
		{
		   send_to_char(AT_WHITE, "What do you think this is, a vacation?\n\r" ,ch);
		}
		else
		{
		   sprintf( buf, "From a great distance, %s", pSocial->char_found);
		   act(AT_PINK, buf, ch, NULL, victim, TO_CHAR);
		   sprintf( buf, "From a great distance, %s", pSocial->vict_found);
		   act(AT_PINK, buf, ch, NULL, victim, TO_VICT);
		   sprintf( buf, "From a great distance, %s", pSocial->others_found );
		   act(AT_PINK, buf, ch, NULL, victim, TO_NOTVICT);
	   	}
		
	   }
	
    }
    else if ( victim == ch )
    {
	act(AT_PINK, pSocial->char_auto,     ch, NULL, victim, TO_CHAR);
	act(AT_PINK, pSocial->others_auto,   ch, NULL, victim, TO_ROOM);
    }
    else
    {
	act(AT_PINK, pSocial->char_found,    ch, NULL, victim, TO_CHAR);
	act(AT_PINK, pSocial->vict_found,    ch, NULL, victim, TO_VICT);
	act(AT_PINK, pSocial->others_found,  ch, NULL, victim, TO_NOTVICT);

	if ( !IS_NPC( ch )
	    && IS_NPC( victim )
	    && !IS_AFFECTED( victim, AFF_CHARM )
	    && IS_AWAKE( victim )
	    && ( !victim->pIndexData->mobprogs ) )
	    
	{
	    switch ( number_bits( 4 ) )
	    {
	    case 0:
	        if ( ( victim->level < ch->level )
		    && !( victim->fighting ) )
		    multi_hit( victim, ch, TYPE_UNDEFINED );
		break;

	    case 1: case 2: case 3: case 4:
	    case 5: case 6: case 7: case 8:
		act(AT_PINK, pSocial->char_found,
		    victim, NULL, ch, TO_CHAR    );
		act(AT_PINK, pSocial->vict_found,
		    victim, NULL, ch, TO_VICT    );
		act(AT_PINK, pSocial->others_found,
		    victim, NULL, ch, TO_NOTVICT );
		break;

	    case 9: case 10: case 11: case 12:
		act(AT_PINK, "You slap $N.",  victim, NULL, ch, TO_CHAR    );
		act(AT_PINK, "$n slaps you.", victim, NULL, ch, TO_VICT    );
		act(AT_PINK, "$n slaps $N.",  victim, NULL, ch, TO_NOTVICT );
		break;
	    }
	}
    }

    return TRUE;
}



/*
 * Return true if an argument is completely numeric.
 */
bool is_number( char *arg )
{
    if ( *arg == '\0' )
	return FALSE;

    if ( *arg == '+' || *arg == '-' )
        arg++;

    for ( ; *arg != '\0'; arg++ )
    {
	if ( !isdigit( *arg ) )
	    return FALSE;
    }

    return TRUE;
}



/*
 * Given a string like 14.foo, return 14 and 'foo'
 */
int number_argument( char *argument, char *arg )
{
    char *pdot;
    int   number;
    
    for ( pdot = argument; *pdot != '\0'; pdot++ )
    {
	if ( *pdot == '.' )
	{
	    *pdot = '\0';
	    number = atoi( argument );
	    *pdot = '.';
	    strcpy( arg, pdot+1 );
	    return number;
	}
    }

    strcpy( arg, argument );
    return 1;
}



/*
 * Pick off one argument from a string and return the rest.
 * Understands quotes.
 */
char *one_argument( char *argument, char *arg_first )
{
    char cEnd;

    while ( isspace( *argument ) )
	argument++;

    cEnd = ' ';

    if ( *argument == '\'' ||
 *argument == '"' )
	cEnd = *argument++;

    while ( *argument != '\0' )
    {
	if ( *argument == cEnd )
	{
	    argument++;
	    break;
	}
	*arg_first = LOWER( *argument );
	arg_first++;
	argument++;
    }
    *arg_first = '\0';

    while ( isspace( *argument ) )
	argument++;

    return argument;
}

void do_clear( CHAR_DATA *ch, char *argument )
{
  ALIAS_DATA *pA1;
  ALIAS_DATA *pA1_next;

  if( !ch->pcdata->alias_list )
    {
      send_to_char( AT_WHITE, "You have no alias' to clear.\n\r", ch );
      return;
    }
   
   for ( pA1 = ch->pcdata->alias_list; pA1; pA1 = pA1_next )
    {
      pA1_next = pA1->next;
      /*free_string(pA1->old);
      free_string(pA1->new);
      free_mem(pA1, sizeof( *pA1 ));*/
      free_alias(pA1);
    }
   send_to_char( AT_WHITE, "All aliases have been erased.\n\r", ch );
   ch->pcdata->alias_list = NULL;
   return;

}

void do_alias( CHAR_DATA *ch, char *argument )
{
  char arg[MAX_STRING_LENGTH];
  char arg1[MAX_STRING_LENGTH];
  ALIAS_DATA *al;
  ALIAS_DATA *oAl;
  
  smash_tilde( argument );
  argument = one_argument( argument, arg );
  strcpy( arg1, argument );
  
  if ( arg[0] == '\0' )
  {
    if ( !ch->pcdata->alias_list )
    {
      send_to_char( AT_WHITE, "You have no alias' set.\n\r", ch );
      return;
    }
    
    send_to_char( AT_WHITE, "Your currently set alias' are:\n\r", ch );
  
    for ( al = ch->pcdata->alias_list; al; al = al->next )
    {
      sprintf( log_buf, "  %-10s   &B%s&w\n\r", al->old, al->new );
      send_to_char( AT_RED, log_buf, ch );
    }
    send_to_char( AT_WHITE, "\n\r", ch );
    return;
  }
  
  if ( arg1[0] == '\0' && ( !( ch->pcdata->alias_list ) ) )
  {
    send_to_char( AT_WHITE, "You have no command alias' to remove!\n\r", ch );
    return;
  }
  
  if ( arg1[0] != '\0' )
  {
    for ( oAl = ch->pcdata->alias_list; oAl; oAl = oAl->next )
    {
      if ( is_name( NULL, arg1, oAl->old ) || !str_prefix( arg, arg1 ) )
      {
        send_to_char( AT_WHITE, "You cannot alias other alias' into your [new] string.\n\r", ch );
        return;
      }
    }
  }        
  
  for ( al = ch->pcdata->alias_list; al; al = al->next )
    if ( !str_cmp( al->old, arg ) )
      break;
  if ( arg1[0] == '\0' )
  {
    if ( !al )
    {
      send_to_char( C_DEFAULT, "Alias does not exist.\n\r", ch );
      return;
    }
    if ( al == ch->pcdata->alias_list )
      ch->pcdata->alias_list = al->next;
    else
    {
      for ( oAl = ch->pcdata->alias_list; oAl; oAl = oAl->next )
	if ( oAl->next == al )
	  break;
      if ( !oAl )
      {
	sprintf( log_buf, "Do_alias: bad alias - ch (%s) - [%s]", ch->name, arg );
	bug( log_buf, 0 );
	send_to_char(C_DEFAULT, "Alias does not exist.\n\r", ch );
	return;
      }
      oAl->next = al->next;
    }
    /*free_string( al->old );
    free_string( al->new );
    free_mem( al, sizeof( *al ) );*/
    free_alias( al );
    act( AT_WHITE, "Alias '$t' cleared.\n\r", ch, arg, NULL, TO_CHAR );
    return;
  }

  if ( al )
  {
    free_string( al->new );
    al->new = str_dup( arg1 );
    sprintf( log_buf, "Alias '%s' remade.\n\r", arg );
    send_to_char( AT_WHITE, log_buf, ch );  
    return;
  }
  
  /*
  al = alloc_perm( sizeof( *al ) );
  al->old = str_dup( arg );
  al->new = str_dup( arg1 );
  al->next = ch->pcdata->alias_list;
  ch->pcdata->alias_list = al;
  */
  add_alias( ch, al, arg, arg1 );
  sprintf( log_buf, "Alias '%s' added.\n\r", arg );
  send_to_char( AT_WHITE, log_buf, ch );
  return;
}

void add_alias( CHAR_DATA *ch, ALIAS_DATA *pAl, char *old, char *new )
{
  pAl = alloc_perm( sizeof( *pAl ) );
  pAl->old = str_dup( old );
  pAl->new = str_dup( new );
  pAl->next = ch->pcdata->alias_list;  ch->pcdata->alias_list = pAl;
  return;
}

void do_countcommands( CHAR_DATA *ch, char *argument )
{
  char buf[MAX_STRING_LENGTH];
  int scnt;
  int skill[MAX_CLASS];
  int spell[MAX_CLASS];
  int iclass;

  for ( iclass = 0; iclass < MAX_CLASS; iclass++ )
  { 
     skill[iclass] = 0;
     spell[iclass] = 0;
  }

  for ( scnt = 0; skill_table[scnt].name[0] != '\0'; scnt++ )
  {
    for ( iclass = 0; iclass < MAX_CLASS; iclass++ )
    {
       if ( skill_table[scnt].skill_level[iclass] < L_APP )
       {
	  if ( skill_table[scnt].spell_fun == spell_null )
	    skill[iclass]++;
	  else
	    spell[iclass]++;
       }
    }
  }

  sprintf(buf, "Command table size: %d\n\r"
	       "Social table size:  %d\n\r"
	       "GSkill table size:  %d\n\r"
	       "Skill table size:   %d\n\r",
	  /* -1 from each for blank index entry at end. */
	  sizeof(   cmd_table) / sizeof(   cmd_table[0]) - 1,
	  top_social,
/*sizeof(social_table) / sizeof(social_table[0]) -1,*/
	  sizeof(gskill_table) / sizeof(gskill_table[0])    ,
	  scnt); /* Someone wanna explain why theres an error with
		    sizeof(skill_table)?? */
  send_to_char(AT_PINK, buf, ch );
  for ( iclass = 0; iclass < MAX_CLASS; iclass++ )
  {
    sprintf( buf, "%-15s: Skills %2d + Spells %2d = Total %2d\n\r",
		 class_table[iclass].who_long,
		 skill[iclass], spell[iclass], skill[iclass]+spell[iclass] );
    send_to_char(AT_PINK, buf, ch );
  }
  return;
}
void do_afk( CHAR_DATA *ch, char *argument )
{
   if ( IS_NPC( ch ) )
      return;
   send_to_char( AT_YELLOW, "You announce that you are going AFK.\n\r",
		 ch );
   act( AT_YELLOW, "$n announces, 'I am going AFK.'", ch, NULL, NULL,
        TO_ROOM );
   SET_BIT( ch->act, PLR_AFK );
   return;
}

void do_pkill( CHAR_DATA *ch, char *argument )
{
    if ( IS_NPC( ch ) )
	return;

    if(argument[0] == '\0' )
    {
      send_to_char( AT_WHITE,
        "Syntax: &Rpkill yes&W    To choose to become a PKILLER forever!\n\r", ch );
      send_to_char( AT_WHITE, "This is NOT a reversible choice. Type HELP PK.\n\r", ch );
      return;
    }
    if (!str_cmp( argument, "yes" ) )
    {
      if ( ch->level < 20 )
      {
        send_to_char( AT_WHITE, "You must be at least level 20 to choose the path of PKILL.\n\r", ch );
        return;
      }
      if ( IS_SET( ch->act, PLR_PKILLER ) )
      {
        send_to_char( AT_WHITE, "You have already chosen the path of pkilling.\n\r", ch );
        return;
      }
      send_to_char( AT_RED, 
       "You are now a PKILLER! Beware, the path you have chosen is not one of the weak minded.\n\r", ch);
      act( AT_RED, 
       "$n has made a lifelong decision, to join forces with Pkillers throughout the Storm!",
       ch , NULL, NULL, TO_ROOM );
      SET_BIT( ch->act, PLR_PKILLER );
      do_help( ch, "pk" );
      return;
    }
    else
    {
      send_to_char( AT_WHITE,
        "Syntax: &Rpkill yes&W    To choose to become a PKILLER forever!\n\r", ch );
      send_to_char( AT_WHITE, "This is NOT a reversible choice. Type HELP PK.\n\r", ch );
      return;
    }

}

void arena_master( CHAR_DATA *ch, char *argument, char *arg2 )
{
    char	arg  [ MAX_STRING_LENGTH ];
/*    char	buf  [ MAX_STRING_LENGTH ];  */
    bool	same_room = FALSE;

    one_argument( arg2, arg );

    /* Check if two people are still in arena fighting */
    if ( !arena.fch || !arena.sch )
      return;

    /* Check if fch and sch are in same room */
    if ( arena.fch->in_room == arena.sch->in_room )
      same_room = TRUE;

/*    if ( !str_cmp( "cast", argument ) )
    {

    }

    arena_chann( buf2, 0, 0 ); */

    return;
}