/*************************************************************************** * Mud20 1.0 by Todd H. Johnson (Kregor) a derivative of the Open Gaming * * License by Wizards of the Coast. All comments referring to D20, OGL, * * and SRD refer to the System Reference Document for the Open Gaming * * system. Any inclusion of these derivatives must include credit to the * * Mud20 system, the full and complete Open Gaming LIcense, and credit to * * the respective authors. See ../doc/srd.txt for more information. * * * * Emud 2.2 by Igor van den Hoven, Michiel Lange, and Martin Bethlehem. * * * * MrMud 1.4 by David Bills, Dug Michael and Martin Gallwey * * * * Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * Original Diku Mud copyright (C) 1990 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeld, Tom Madsen, and Katje Nyboe. * ***************************************************************************/ /*************************************************************************** * interp.c: Handles interpretation and execution of commands * ***************************************************************************/ #include <sys/time.h> #include "mud.h" void process_command( CHAR_DATA *, char *); void preprocess_command( CHAR_DATA *, char *); /* Command logging types. */ #define LOG_NORMAL 0 #define LOG_ALWAYS 1 #define LOG_NEVER 2 #define LI LEVEL_IMMORTAL #define ML MAX_LEVEL #define LD 75 #define LE 90 #define LH 60 /* Command table. */ const struct cmd_type cmd_table [] = { { "//", do_osay, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_DEAD|CMD_NOHELP}, { "?", do_context_help,POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_BERSERK|CMD_NOHELP}, { "'", do_say, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_DEAD|CMD_NOHELP}, { ">", do_immtalk, POS_SLEEPING, LI, ACTION_FREE, LOG_NORMAL, CMD_NOHELP}, { "*", do_emote, POS_DEAD, -8, ACTION_FREE, LOG_NORMAL, CMD_DEAD|CMD_BERSERK|CMD_NOHELP}, // { "a", do_a, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NOHELP}, { "attack", do_attack, POS_FIGHTING, -9, ACTION_FREE, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "activate", do_activate, POS_RESTING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "affects", do_affects, POS_DEAD, -8, ACTION_FREE, LOG_NORMAL, CMD_BERSERK}, { "abilities", do_abilities, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "adjective", do_adjective, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "advance", do_advance, POS_DEAD, ML, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, { "afk", do_afk, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "aid", do_aid, POS_KNEELING, 1, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "alias", do_alias, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "alist", do_alist, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER}, { "answer", do_answer, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_HELPER|CMD_ENFORCER}, { "appraise", do_appraise, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "areas", do_areas, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "arrest", do_arrest, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_ENFORCER}, { "assassinate", do_assassinate, POS_STANDING, -3, ACTION_FREE, LOG_NORMAL, CMD_ATTACK}, { "astat", do_astat, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "at", do_at, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "authorize", do_authorize, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_HELPER|CMD_ENFORCER}, { "bash", do_bash, POS_FIGHTING, -3, ACTION_FREE, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "buy", do_buy, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "bank", do_bank, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "banish", do_ban, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "bamfin", do_bamfin, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "bamfout", do_bamfout, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "beep", do_beep, POS_SLEEPING, -3, ACTION_FREE, LOG_NORMAL, CMD_ENFORCER}, { "bio", do_bio, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "block", do_block, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "bluff", do_bluff, POS_STANDING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "bounty", do_bounty, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "brew", do_brew, POS_SITTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "breath", do_breath, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_ATTACK}, { "bullrush", do_bullrush, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "buffer", do_buffer, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "burn", do_burn, POS_STANDING, -3, ACTION_FULL, LOG_NORMAL, CMD_NONE}, { "cast", do_cast, POS_FIGHTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NO_MAGIC}, { "camp", do_camp, POS_RESTING, -3, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "chat", do_chat, POS_SLEEPING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "charge", do_charge, POS_FIGHTING, -3, ACTION_FULL, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, // { "clans", do_clans, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, // { "clanmessage", do_clan_mssg, POS_DEAD, ML, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, // { "clanset", do_clanset, POS_RESTING, 10, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, // { "clanwhere", do_clanwhere, POS_RESTING, 10, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, // { "clanrent", do_clan_rent, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "claim", do_claim, POS_STANDING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "cloak", do_cloak, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "close", do_close, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "clock", do_clock, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, // { "coffer", do_coffer, POS_RESTING, 10, ACTION_FREE, LOG_ALWAYS, CMD_HIDE}, { "color", do_color, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "combatmode", do_combatmode, POS_RESTING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "commands", do_commands, POS_DEAD, -8, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "compare", do_compare, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "components", do_components, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "complaint", do_complaint, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "consider", do_consider, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "conceal", do_conceal, POS_RESTING, -8, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "connect", do_connect, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "config", do_config, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "cook", do_cook, POS_RESTING, -3, ACTION_FULL, LOG_NORMAL, CMD_NONE}, { "copyover", do_copyover, POS_DEAD, ML, ACTION_FREE, LOG_ALWAYS, CMD_QUIT}, { "counterspell", do_counterspell,POS_FIGHTING, -3, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "coupdegrace", do_coupdegrace, POS_FIGHTING, -8, ACTION_FULL, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "craft", do_craft, POS_STANDING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "crouch", do_crouch, POS_RESTING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "credits", do_credits, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "down", do_down, POS_STANDING, -9, ACTION_MOVE, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "diceroll", do_diceroll, POS_DEAD, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "death", do_death, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "delay", do_delay, POS_RESTING, -9, ACTION_FREE, LOG_NORMAL, CMD_BERSERK}, { "delete", do_delete, POS_DEAD, 1, ACTION_FREE, LOG_NEVER, CMD_QUIT}, { "demand", do_demand, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "deny", do_deny, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "description", do_description, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "destroy", do_destroy, POS_DEAD, ML, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, { "disarm", do_disarm, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "disable", do_disable, POS_KNEELING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "disconnect", do_disconnect, POS_DEAD, LI, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, { "discharge", do_discharge, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "disguise", do_disguise, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "dismount", do_dismount, POS_FIGHTING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "dismiss", do_dismiss, POS_RESTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "divert", do_divert, POS_FIGHTING, 1, ACTION_MOVE, LOG_NORMAL, CMD_NONE}, { "domains", do_domain, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, // { "donate", do_donate, POS_RESTING, 10, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "doorset", do_door, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER}, { "drink", do_drink, POS_RESTING, 1, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "drag", do_drag, POS_RESTING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "draw", do_draw, POS_SITTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "drop", do_drop, POS_RESTING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "dump", do_dump, POS_RESTING, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "east", do_east, POS_STANDING, -9, ACTION_MOVE, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "eat", do_eat, POS_RESTING, -9, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "echo", do_echo, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "edit", do_edit, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER}, { "email", do_email, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "emote", do_emote, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_BERSERK}, { "empty", do_empty, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NOFIGHT}, { "enchant", do_enchant, POS_STANDING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "enter", do_enter, POS_STANDING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "equipment", do_equipment, POS_DEAD, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "examine", do_examine, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "exits", do_exits, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "familiar", do_familiar, POS_FIGHTING, -3, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "faveenemy", do_faveenemy, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "feats", do_feats, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "feint", do_feint, POS_FIGHTING, -3, ACTION_FREE, LOG_NORMAL, CMD_ATTACK}, { "fly", do_fly, POS_STANDING, -9, ACTION_FREE, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "fight", do_fight, POS_FIGHTING, -9, ACTION_FREE, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "fill", do_fill, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NOFIGHT}, { "finger", do_finger, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "fish", do_fish, POS_STANDING, 1, ACTION_FULL, LOG_NORMAL, CMD_NONE}, { "fixpass", do_fixpass, POS_DEAD, LI, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, { "follow", do_follow, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "forage", do_forage, POS_STANDING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "force", do_force, POS_DEAD, LI, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, // { "forceren", do_forceren, POS_DEAD, ML, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, // { "forcerent", do_forcerent, POS_DEAD, ML, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, { "forget", do_forget, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "freeze", do_freeze, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "get", do_get, POS_RESTING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "give", do_give, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "gaze", do_gaze, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "goto", do_goto, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "gouge", do_gouge, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "greet", do_greet, POS_SLEEPING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "grapple", do_grapple, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "grep", do_grep, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE|CMD_BERSERK}, { "group", do_group, POS_SLEEPING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "help", do_help, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "heal", do_heal, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "hitch", do_hitch, POS_STANDING, 1, ACTION_FULL, LOG_NORMAL, CMD_NONE}, { "hlist", do_hlist, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER}, { "hold", do_hold, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "holylight", do_holylight, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "html", do_html, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "inventory", do_inventory, POS_DEAD, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "identify", do_identify, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "immtalk", do_immtalk, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, // { "initiate", do_initiate, POS_RESTING, 10, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "intimidate", do_intimidate, POS_STANDING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "instaroom", do_instaroom, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER}, { "instazone", do_instazone, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER}, { "invis", do_invis, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "join", do_join, POS_RESTING, -8, ACTION_MOVE, LOG_NORMAL, CMD_NONE}, { "jump", do_jump, POS_STANDING, -9, ACTION_STANDARD, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "junk", do_junk, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "kneel", do_kneel, POS_RESTING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE|CMD_DEAD}, { "knock", do_knock, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "look", do_look, POS_RESTING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE|CMD_BERSERK|CMD_DEAD}, { "land", do_land, POS_STANDING, -9, ACTION_FREE, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "languages", do_languages, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "learn", do_learn, POS_SITTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "level", do_level, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "list", do_list, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "listen", do_listen, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE|CMD_BERSERK|CMD_DEAD}, { "link", do_link, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER}, { "lock", do_lock, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "locate", do_locate, POS_STANDING, 1, ACTION_FULL, LOG_NORMAL, CMD_NONE}, { "log", do_log, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_ENFORCER}, { "map", do_map, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, // { "makeclan", do_makeclan, POS_RESTING, 10, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mana", do_mana, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "maze", do_maze, POS_DEAD, LI, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, { "metamagic", do_metamagic, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "mfind", do_mfind, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER}, { "mount", do_mount, POS_FIGHTING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "move", do_move, POS_DEAD, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "makewild", do_makewild, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "mute", do_mute, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "mlist", do_mlist, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "mload", do_mload, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER}, { "mimic", do_mimic, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "mpareaecho", do_mpareaecho, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpaset", do_mpaset, POS_DEAD, LI, ACTION_FREE, LOG_ALWAYS, CMD_HIDE}, { "mpasound", do_mpasound, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpat", do_mpat, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpcalculate", do_mpcalculate, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpclearfeat", do_mpclearfeat, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpcommands", do_mpcommands, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "mpdamage", do_mpdamage, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpdelay", do_mpdelay, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpdo", do_mpdo, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpecho", do_mpecho, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpechoaround", do_mpechoaround,POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpechoat", do_mpechoat, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpfollow", do_mpfollow, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpforce", do_mpforce, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpgorand", do_mpgorand, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpgoto", do_mpgoto, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpinfect", do_mpinfect, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpjunk", do_mpjunk, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpjunkperson", do_mpjunk_person, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpkill", do_mpkill, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mplock", do_mplock, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mplog", do_mplog, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpmadd", do_mpmadd, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpmload", do_mpmload, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpmset", do_mpmset, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpoadd", do_mpoadd, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpoload", do_mpoload, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mposet", do_mposet, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mppoison", do_mppoison, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mppractice", do_mppractice, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mppurge", do_mppurge, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpquiet", do_mpquiet, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpsetfeat", do_mpsetfeat, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpstat", do_mpstat, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "mpswap", do_mpswap, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mptransfer", do_mptransfer, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mptrigger", do_mptrigger, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpunintercept",do_mpunintercept, POS_SLEEPING, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpunlock", do_mpunlock, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpwalkto", do_mpwalkto, POS_SLEEPING, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "mpzset", do_mpzset, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "madd", do_madd, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "mset", do_mset, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "mstat", do_mstat, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "mwhere", do_mwhere, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER}, { "north", do_north, POS_STANDING, -9, ACTION_MOVE, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "nbanish", do_nban, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "nohelps", do_nohelps, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER}, // { "nominate", do_nominate, POS_RESTING, 10, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "note", do_note, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "open", do_open, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "offer", do_value, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "ofind", do_ofind, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "order", do_order, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "osay", do_osay, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "oset", do_oset, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "ostat", do_ostat, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "olist", do_olist, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "oload", do_oload, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER}, { "opstat", do_opstat, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "otell", do_otell, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, // { "outcast", do_outcast, POS_RESTING, 10, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "owhere", do_owhere, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "pardon", do_pardon, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_ENFORCER}, { "password", do_password, POS_DEAD, 1, ACTION_FREE, LOG_NEVER, CMD_NONE}, { "peace", do_peace, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "peek", do_peek, POS_RESTING, -3, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "pemote", do_pemote, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "pick", do_pick, POS_KNEELING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "plant", do_plant, POS_RESTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, // { "pledge", do_pledge, POS_RESTING, 10, ACTION_FREE, LOG_NORMAL, CMD_HIDE}, { "pload", do_pload, POS_DEAD, LI, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, { "pquit", do_pquit, POS_DEAD, LI, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, { "port", do_port, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "pounce", do_pounce, POS_FIGHTING, -3, ACTION_FULL, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "pose", do_pose, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE|CMD_DEAD}, { "poison", do_poison, POS_SITTING, 1, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "prepare", do_prepare, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "pray", do_pray, POS_SLEEPING, -9, ACTION_MOVE, LOG_NORMAL, CMD_NONE|CMD_DEAD}, { "prompt", do_prompt, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "purge", do_purge, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER}, { "put", do_put, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "qui", do_qui, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_HIDE|CMD_NOHELP}, { "question", do_question, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "quit", do_quit, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_BERSERK|CMD_QUIT}, { "racecast", do_racecast, POS_FIGHTING, -3, ACTION_FREE, LOG_NORMAL, CMD_NO_MAGIC}, { "reply", do_reply, POS_DEAD, 1, ACTION_SWIFT, LOG_NORMAL, CMD_NONE}, { "read", do_read, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "reboo", do_reboo, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_HIDE|CMD_NOHELP}, { "reboot", do_reboot, POS_DEAD, LI, ACTION_FREE, LOG_ALWAYS, CMD_QUIT}, { "recall", do_recall, POS_FIGHTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "refresh", do_refresh, POS_DEAD, -8, ACTION_FREE, LOG_NORMAL, CMD_BERSERK}, { "regoto", do_regoto, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "reload", do_reload, POS_STANDING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "rent", do_rent, POS_SITTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "rename", do_rename, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, // { "renounce", do_renounce, POS_RESTING, 10, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "release", do_release, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "rend", do_rend, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "remove", do_remove, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "repair", do_repair, POS_SITTING, 1, ACTION_FULL, LOG_NORMAL, CMD_NONE}, { "request", do_request, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "rescue", do_rescue, POS_FIGHTING, 1, ACTION_MOVE, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "rescale", do_rescale, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "resetarea", do_resetarea, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "rest", do_rest, POS_SLEEPING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE|CMD_DEAD}, { "resistances", do_resistances, POS_DEAD, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "restore", do_restore, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "respawn", do_respawn, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "resurrect", do_resurrect, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "return", do_return, POS_DEAD, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "retran", do_retran, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "recover", do_recover, POS_DEAD, ML, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, { "revert", do_revert, POS_RESTING, -8, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "reveal", do_reveal, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "reward", do_reward, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "rlist", do_rlist, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "rstat", do_rstat, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "rpstat", do_rpstat, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "south", do_south, POS_STANDING, -9, ACTION_MOVE, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "say", do_say, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE|CMD_BERSERK|CMD_DEAD}, { "sayto", do_sayto, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE|CMD_BERSERK|CMD_DEAD}, { "sacrifice", do_sacrifice, POS_STANDING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE|CMD_NOHELP}, { "sunder", do_sunder, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "save", do_save, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "savearea", do_savearea, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER}, { "savewho", do_savewho, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "score", do_score, POS_DEAD, -9, ACTION_FREE, LOG_NORMAL, CMD_BERSERK}, { "scan", do_scan, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_BERSERK}, { "scribe", do_scribe, POS_SITTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "school", do_school, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "search", do_search, POS_STANDING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "seal", do_seal, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "sell", do_sell, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "sset", do_sset, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "sstat", do_sstat, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "setfunc", do_setfunc, POS_DEAD, ML, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "shoot", do_shoot, POS_FIGHTING, -3, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "shadow", do_shadow, POS_STANDING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "sheath", do_sheath, POS_SITTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "shout", do_shout, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "shove", do_shove, POS_RESTING, -9, ACTION_FREE, LOG_NORMAL, CMD_BERSERK}, { "show", do_show, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "shutdow", do_shutdow, POS_DEAD, ML, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "shutdown", do_shutdown, POS_DEAD, ML, ACTION_FREE, LOG_ALWAYS, CMD_QUIT}, { "silence", do_silence, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_ENFORCER}, { "sing", do_sing, POS_STANDING, 1, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "sit", do_sit, POS_SLEEPING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE|CMD_DEAD}, { "skills", do_skills, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "sla", do_sla, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "slay", do_slay, POS_DEAD, LI, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, { "sleep", do_sleep, POS_SLEEPING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "skin", do_skin, POS_STANDING, -3, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "slice", do_slice, POS_STANDING, -3, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "slookup", do_slookup, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_TESTER}, { "socials", do_socials, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "snoop", do_snoop, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_ENFORCER}, { "speak", do_speak, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "speed", do_speed, POS_DEAD, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "spells", do_spells, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "songs", do_songs, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "split", do_split, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "spy", do_spy, POS_STANDING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "stand", do_stand, POS_SLEEPING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE|CMD_DEAD}, { "stable", do_stable, POS_STANDING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "steal", do_steal, POS_STANDING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "stealth", do_stealth, POS_STANDING, -3, ACTION_SWIFT, LOG_NORMAL, CMD_NONE}, { "stun", do_stun, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "strike", do_strike, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_ENFORCER}, { "swindle", do_swindle, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "switch", do_switch, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "showclass", do_showclass, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "showdomain", do_showdomain, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "showgod", do_showgod, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "showrace", do_showrace, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "showbloodline",do_showbloodline, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "tell", do_tell, POS_DEAD, 1, ACTION_SWIFT, LOG_NORMAL, CMD_NONE}, { "take", do_get, POS_RESTING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "taunt", do_taunt, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "tame", do_tame, POS_FIGHTING, 1, ACTION_FULL, LOG_NORMAL, CMD_NONE}, { "teach", do_teach, POS_STANDING, 1, ACTION_FULL, LOG_NORMAL, CMD_NONE}, { "test", do_test, POS_DEAD, ML, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, { "think", do_think, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "throw", do_throw, POS_FIGHTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "tick", do_tick, POS_DEAD, LI, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, { "title", do_title, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "time", do_time, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "tie", do_tie, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "trample", do_trample, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "train", do_train, POS_STANDING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "track", do_track, POS_STANDING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "trip", do_trip, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "transfer", do_transfer, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "up", do_up, POS_STANDING, -9, ACTION_MOVE, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "unalias", do_unalias, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "unlock", do_unlock, POS_RESTING, -3, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "untie", do_untie, POS_FIGHTING, -3, ACTION_STANDARD, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "unhitch", do_unhitch, POS_STANDING, 1, ACTION_FULL, LOG_NORMAL, CMD_NONE}, { "use", do_use, POS_FIGHTING, 1, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "unseal", do_unseal, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "unarrest", do_unarrest, POS_DEAD, -3, ACTION_FREE, LOG_ALWAYS, CMD_ENFORCER}, { "vt102", do_vt100, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "value", do_value, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "version", do_version, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "visible", do_visible, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "west", do_west, POS_STANDING, -9, ACTION_MOVE, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "weapons", do_weapons, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "wake", do_wake, POS_SLEEPING, -8, ACTION_STANDARD, LOG_NORMAL, CMD_NONE}, { "waypoint", do_waypoint, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "warn", do_warn, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_ENFORCER}, { "wear", do_wear, POS_RESTING, -9, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "weather", do_weather, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "where", do_where, POS_DEAD, -3, ACTION_FREE, LOG_NORMAL, CMD_ENFORCER}, { "whirl", do_whirl, POS_FIGHTING, -3, ACTION_FULL, LOG_NORMAL, CMD_BERSERK|CMD_ATTACK}, { "whisper", do_whisper, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "who", do_who, POS_DEAD, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "wield", do_hold, POS_RESTING, -8, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "withdraw", do_withdraw, POS_FIGHTING, -9, ACTION_FREE, LOG_NORMAL, CMD_BERSERK}, { "wizhelp", do_wizhelp, POS_DEAD, LI, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "wizlock", do_wizlock, POS_DEAD, ML, ACTION_FREE, LOG_ALWAYS, CMD_NONE}, { "wiztime", do_timemode, POS_DEAD, LD, ACTION_FREE, LOG_NORMAL, CMD_BUILDER|CMD_TESTER}, { "write", do_write, POS_RESTING, 1, ACTION_FREE, LOG_NORMAL, CMD_NONE}, { "", NULL, POS_DEAD, 0, ACTION_FREE, LOG_NORMAL, CMD_HIDE} }; /* The social table. Add new socials here. Alphabetical order is not required. */ const struct social_type social_table [] = { { "accuse", "Accuse whom?", "$n is in an accusing mood.", "You look accusingly at $N.", "$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 gasp at $N and say 'ACK!'.", "$n gasps at $N and says 'ACK!'.", "$n gasps at you and says 'ACK!'.", "You say 'ACK!' at yourself.", "$n says 'ACK!' to $mself." }, { "admire", "Admire whom?", NULL, "You admire $N's beauty.", "$n admires $N's beauty.", "$n admires your beauty.", "You admire yourself.", "$n admires $mself." }, { "adore", "Adore whom?", NULL, "You look at $N adoringly.", "$n looks at $N adoringly.", "$n looks at you with adoring eyes.", "You adore yourself", "$n adores $mself in an extremely conceited fashion." }, { "ahem", "You clear your throat.", "$n clears $s throat.", "You look at $N and clear your throat.", "$n looks at $N and clears $s throat.", "$n looks at you and clears $s throat.", "You cover your mouth and clear your throat loudly.", "$n covers $s mouth and clears $s throat loudly." }, { "agree", "You nod in agreement.", "$n nods in agreement.", "You nod at $N in agreement.", "$n nods at $N in agreement.", "$n nods at you in agreement.", "You seem to agree with yourself.", "$n seems to agree with $s own thoughts." }, { "applaud", "You give a round of applause.", "$n gives a round of applause.", "You clap for $N.", "$n claps for $N.", "$n gives you a round of applause.", "You applaud at yourself. Boy, are we conceited!", "$n applauds at $mself. Boy, are we conceited!" }, { "ballad", "You raise your clear voice towards the sky.", "$n has begun to sing a bit offkey.", "You sing a ballad to $N.", "$n sings a ballad to $N.", "$n sings a ballad to you! How sweet!", "You sing a little ditty to yourself.", "$n sings a little ditty to $mself." }, { "bark", "Woof! Woof!", "$n barks like a dog.", "You bark at $N.", "$n barks at $N.", "$n barks at you.", "You bark at yourself. Woof! Woof!", "$n barks at $mself. Woof! Woof!" }, { "bat", "You bat your lashes and smile.", "$n bats $s lashes and smiles.", "You bat your lashes at $N with a smile.", "$n bats $s lashes at $N, and smiles at $M.", "$n bats $s lashes and smiles at you.", "Awww.. You're such an adorable being.", "$n looks cross-eyed while batting $s lashes." }, { "beam", "You beam broadly.", "$n beams broadly.", "You beam at $N broadly.", "$n beams at $N broadly.", "$n beams at you broadly.", "Well, aren't you pleased with yourself?", "$n beams a $mself, obviously pleased." }, { "bearhug", "Whom do you wish to bearhug?", NULL, "You overwhelm $N with a great, big, hulking bearhug.", "$n encompasses $N in an ENORMOUS bearhug!", "$n clutches you tightly in an overwhelming bearhug!", "You vainly clutch yourself in a bearhug for consolation.", "$n hugs $mself as tightly as possible.", }, { "beckon", "You beckon for anyone to follow.", "$n beckons for anyone to follow.", "You beckon for $N to follow you.", "$n beckons $N to follow $m.", "$n beckons for you to follow.", "You beckon to your shadow to follow.", "$n beckons to $s shadow to follow." }, { "bkiss", "You blow a kiss for someone to catch.", "$n blows a kiss for someone to catch.", "You blow a kiss to $N.", "$n blows a kiss to $N.", "$n blows a kiss to you.", "Blow a kiss at yourself??", NULL }, { "bleed", "You bleed all over the room!", "$n bleeds all over the room!", "You bleed all over $N!", "$n bleeds all over $N.", "$n bleeds all over you!", "You bleed all over yourself!", "$n bleeds all over $mself." }, { "beg", "You beg the gods for mercy.", "$n falls on his knees pleading to the gods.", "You get on your knees and desperately plead to $N.", "$n falls on $s knees and pleas shamelessly at $N!", "$n falls on $s knees and pleas shamelessly to you.", "Begging yourself for help wouldn't be very smart.", "$n begs $mself for whatever, how ingenious." }, { "blink", "You blink in confusion.", "$n blinks in confusion.", "You blink at $N in utter disbelief.", "$n blinks at $N in utter disbelief.", "$n blinks at you in utter disbelief.", "You blink at yourself in complete confusion.", "$n blinks at $mself in complete confusion." }, { "blush", "Your cheeks are burning.", "$n blushes deeply.", "Your cheeks turn red at $N.", "$n blushes as $e looks at $N.", "$n looks at you and blushes deeply.", "You blush at your actions.", "$n blushes at $s actions." }, { "bounce", "you bounce around the room!", "$n bounces around happily.", "You bounce onto $N'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 $N.", "$n bows before $N.", "$n bows before you.", "You kiss your toes; how flexible.", "$n folds up like a jack knife and kisses $s own toes." }, { "burp", "You burp loudly.", "$n burps loudly.", "You burp loudly to $N in response.", "$n burps loudly in response to $N's remark.", "$n burps loudly in response to your remark.", "You cover your mouth as you burp loudly.", "$n covers $s mouth as $e burps loudly." }, { "bye", "You wave goodbye to all in the room.", "$n waves goodbye to everyone in the room.", "You wave goodbye to $N.", "$n waves goodbye to $N", "$n waves goodbye to you!", "You wave goodbye to all in the room.", "$n waves goodbye to everyone in the room, including $mself!" }, { "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.", "You cackle at yourself. Now, THAT'S strange!", "$n is really crazy now! $e cackles at $mself!" }, { "cheek", "Kiss whose cheek?", NULL, "You lean forward to kiss $N gently on the cheek.", "$n leans forward to kiss $N gently on the cheek.", "$n leans forward to kiss you gently on the cheek.", "People might start to talk..", NULL }, { "cheer", "You cheer with great gusto.", "$n cheers with great gusto.", "You cheer for $N with great gusto.", "$n cheers for $N with great gusto.", "$n cheers for you with great gusto.", "You cheer for yourself since no one else does.", "$n cheers for $mself since no one else does." }, { "chuckle", "You chuckle politely.", "$n chuckles politely.", "You chuckle at $N.", "$n chuckles at $N.", "$n chuckles at you.", "You chuckle to yourself.", "$n chuckles to $mself." }, { "clap", "You clap your hands together.", "$n claps $s hands together.", "You clap for $N.", "$n claps for $N.", "$n claps for you.", "You clap at your own performance.", "$n claps at $s own performance." }, { "comfort", "Comfort whom?", NULL, "You comfort $N.", "$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 loudly.", "$n coughs loudly.", "You cough loudly at $N.", "$n coughs loudly at $N.", "$n coughs loudly at you.", "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.", "$n cringes.", "You look at $N and cringe.", "$n look at $N and cringe.", "$n looks at you and cringes.", "How do you cringe at yourself?!", NULL }, { "cry", "You burst into tears.", "$n bursts into tears.", "You cry on $N'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 attempt to cuddle $N warmly.", "$n attempts to cuddle $N warmly.", "$n attempts cuddle you warmly.", "Get a life.", NULL }, { "curse", "You swear loudly.", "$n swears loudly", "You swear at $N.", "$n swears at $N.", "$n swears at you!", "You swear at yourself.", "$n starts swearing at $mself audibly." }, { "curtsey", "You curtsey gracefully.", "$n curtseys gracefully.", "You curtsey gracefully to $N.", "$n curtseys gracefully to $N.", "$n curtseys gracefully to you.", "You curtsey to your audience (yourself).", "$n curtseys to $mself, since no one is paying attention to $m." }, { "dance", "You dance and sway to the music in your head...", "$n dances and sways to the music in $s head...", "You move to sweep $N into romantic waltz!", "$n moves to sweep $N into a romantic waltz!", "$n moves to sweep you into a romantic waltz!", "You skip and dance around by yourself.", "$n dances a pas-de-une." }, { "doh", "You say, 'Doh!!' and slap yourself.", "$n slaps $mself and says, 'Doh!!!'", "You say, 'Doh!!' and slap yourself.", "$n slaps $mself and says, 'Doh!!!'", "$n slaps $mself and says, 'Doh!!!'", "You slap yourself and say, 'Doh!!!'", "$n slaps $mself and says, 'Doh!!!'" }, { "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." }, { "embrace", "Who do you want to hold?", "$n looks around for someone to hold close to $m.", "You hold $N in a warm and loving embrace.", "$n holds $N in a warm and loving embrace.", "$n holds you in a warm and loving embrace.", "You hold yourself in a warm and loving embrace. Feels silly doesn't it?", "$n holds $mself in a warm and loving embrace ($e looks pretty silly, doesn't $e?)" }, { "eyeroll", "You roll your eyes.", "$n rolls $s eyes.", "You roll your eyes at $N.", "$n rolls $s eyes at $N.", "$n rolls $s eyes at you.", "You roll your eyes at yourself.", "$n rolls $s eyes at $mself." }, { "eyebrow", "You raise an eyebrow.", "$n raises an eyebrow.", "You raise your eyebrow at $N.", "$n raises an eyebrow at $N.", "$n raises an eyebrow at you.", "You make weird faces, practising your eyebrow raise skills.", "$n makes weird faces while practising eyebrow raising." }, { "faint", "You faint from the aromas that linger within.", "$n faints from the aromas that linger within.", "You faint as you smell $N.", "$n faints as $e smells $N.", "$n faints as $e smells you.", "You faint as you smell your stench.", "$n faints as $e smells $mself." }, { "flirt", "You flirt aimlessly.", "$n flirts with anyone who will pay attention", "You flirt with $N trying to get $S attention.", "$n flirts with $N trying to get $S attention.", "$n flirts with you trying to get your attention.", "You flirt with yourself.", "$n flirts with $mself. Has $e no shame." }, { "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 $N.", "$n frowns at $N.", "$n frowns at you.", "You frown at yourself.", "$n frowns at $mself." }, { "fume", "You grit your teeth and fume with rage.", "$n grits $s teeth and fumes with rage.", "You stare at $N, fuming.", "$n stares at $N, fuming with rage.", "$n stares at you, fuming with rage!", "You fume at yourself and stomp about angrily", "$n clenches $s fists and stomps $s feet, fuming with anger." }, { "gasp", "You gasp in astonishment.", "$n gasps in astonishment.", "You look at $N and gasp.", "$n gasps as $e looks at $N.", "$n gasps as $e looks at you.", "You look at yourself and gasp!", "$n takes one look at $mself and gasps!" }, { "giggle", "You giggle.", "$n giggles.", "You giggle at $N.", "$n giggles at $N.", "$n giggles at you.", "You giggle at yourself. You must be nervous or something.", "$n giggles at $mself looking rather jittery." }, { "glare", "You glare at nothing in particular.", "$n glares around $m.", "You glare icily at $N.", "$n glares icily at $N.", "$n glares icily at you.", "You glare icily at your feet.", "$n glares at $s feet." }, { "girn", "You try to grin, but somehow get it slightly wrong.", "$n tries to grin, but somehow gets it slightly wrong.", "You try to grin at $N, but screw it up badly.", "$n tries to grin at $N, but screws up badly.", "$n tries to grin at you, but screws up badly.", "Your face becomes a ghastly mask as you fail to grin.", "$n's face becomes a strange mask as $e tries to grin." }, { "grin", "You grin.", "$n grins.", "You grin at $N.", "$n grins at $N.", "$n grins at you.", "You grin to yourself.", "$n grins to $mself." }, { "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 in frustration with $mself." }, { "grovel", "You grovel in the dirt.", "$n grovels in the dirt.", "You grovel before $N.", "$n grovels at $N's feet.", "$n grovels at your feet.", "That seems a little silly to me.", NULL }, { "growl", "Grrrrrrrrrr ...", "$n growls.", "You growl at $N", "$n growls at $N.", "$n growls at you.", "You growl at yourself.", "$n growls at $mself." }, { "grumble", "You grumble.", "$n grumbles.", "You grumble to $N.", "$n grumbles to $N.", "$n grumbles to you.", "You grumble under your breath.", "$n grumbles under $s breath." }, { "hand", "You reach out your hand.", "$n reaches out $s hand", "You take $N's hand to kiss it.", "$n takes $N's hand in $s to kiss it.", "$n takes your hand to kiss it.", "You kiss your own hand.", "$n kisses $s own hand." }, { "howl", "You howl at the moon.", "$n howls at the moon.", "You howl soulfully at $N.", "$n howls soulfully at $N.", "$n howls soulfully at you.", "You throw back your head and howl in profound frustration!", "$n throws back $s head and howls in profound frustration!" }, { "hug", "Hug whom?", NULL, "You hug $N tightly.", "$n hugs $N tightly.", "$n hugs you tightly.", "You hug yourself.", "$n hugs $mself in a vain attempt to get friendship." }, { "huggle", "Huggle whom?", NULL, "You envelop $N in a warm huggle.", "$n envelops $N in a warm huggle.", "$n envelopes you in a warm huggle.", "Huggle yourself??", NULL }, { "hum", "You hum quietly.", "$n hums quietly.", "You hum a little ditty for $N.", "$n hums a little ditty for $N.", "$n hums a little ditty for you.", "You hum quietly to yourself.", "$n hums quietly to $mself." }, { "kiss", "kiss whom?", NULL, "You kiss $N.", "$n kisses $N.", "$n kisses you.", "All the lonely people...", NULL }, { "laugh", "You laugh.", "$n laughs.", "You laugh at $N.", "$n laughs at $N.", "$n laughs at you.", "You laugh to yourself.", "$n laughs to $mself." }, { "lag", "OOC: $n has a terrible lag.", "OOC: $n has a terrible lag.", NULL, NULL, NULL, NULL, NULL }, { "lap", "Whose lap do you want to climb into?", NULL, "You climb into $N's lap and cuddle up with $M", "$n climbs into $N's lap and cuddles up with $M.", "$n climbs into your lap and cuddles up with you.", NULL, NULL }, { "lick", "You lick your lips and smile.", "$n licks $s lips and smiles.", "You lick $N.", "$n licks $N.", "$n licks you.", "You lick yourself.", "$n licks $mself." }, { "lol", "You laugh out loud.", "$n laughs out loud.", "You laugh at $N loudly.", "$n laughs at $N loudly.", "$n laughs at you loudly.", "You laugh to yourself.", "$n laughs to $mself." }, { "love", "You love the whole world.", "$n loves everybody in the world.", "You tell your true feelings to $N.", "$n whispers softly to $N.", "$n whispers to you sweet words of love.", "Well, we already know you love yourself (lucky someone does!)", "$n loves $mself, can you believe it ?" }, { "massage", "Massage what? Thin air?", NULL, "You gently massage $N's shoulders.", "$n massages $N's shoulders.", "$n gently massages your shoulders.", "You practice yoga as you try to massage yourself.", "$n gives a show on yoga positions, trying to massage $mself." }, { "mischievous", "You give a mischievous smile at your thoughts.", "$n grins mischievously.", "You grin mischievously at $N, thinking obviously mischevious thoughts.", "$n grins mischievously at $N, thinking obviously mischevious thoughts.", "$n grins mischievously at you, thinking obviously mischevious thoughts.", "You grin mischievously to yourself.", "$n grins mischievously to $mself, thinking obviously mischevious thoughts." }, { "moan", "You start to moan.", "$n starts moaning.", "You moan at $N.", "$n moans at $N.", "$n moans at you.", "You moan to yourself.", "$n moans to $mself." }, { "muhaha", "MUHAHAHAHAHA", "$n laughs diabolically. MUHAHAHAHAHAAAA!", "You laugh at $N diabolically. MUHAHAHAHAHAAAA", "$n laughs at $N diabolically. MUHAHAHAHAHAAAA!", "$n laughs at you diabolically. MUHAHAHAHAHAAAA!", "You must have funny thoughts.", NULL }, { "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.", "$n nods.", "You nod at $N.", "$n nods at $N.", "$n nods at you.", "You quietly nod to yourself.", "$n nods quietly to $mself." }, { "nudge", "Nudge whom?", NULL, "You nudge $N.", "$n nudges $N.", "$n nudges you.", "You nudge yourself, for some strange reason.", "$n nudges $mself, to keep $mself awake." }, { "nuzzle", "Nuzzle whom?", NULL, "You nuzzle $N's cheek softly.", "$n softly nuzzles $N's cheek.", "$n softly nuzzles your cheek.", "I'm sorry, friend, but that's impossible.", NULL }, { "ogle", "Whom do you want to ogle?", NULL, "You ogle $N with a grin.", "$n ogles $N with a grin.", "$n ogles you with a grin.", "You ogle yourself??", "$n ogles $mself. Better hope that $e stops there." }, { "pat", "Pat whom?", NULL, "You pat $N on $S back.", "$n pats $N on $S back.", "$n pats you on your back.", "You pat yourself on your back, great job!", "$n pats $mself on the back for $s accomplishment." }, { "peck", "Wouldn't you like to do that to a person, or do you prefer air?", "$n looks around with his lips puckered.", "You give $N a sweet peck on the cheek.", "$n gives $N a sweet peck on the cheek.", "$n gives you a sweet peck on the cheek.", "Wouldn't you like to do that to a person, or do you prefer air?", NULL, }, { "peer", "You peer intently about your surroundings.", "$n peers intently about the area.", "You peer at $N quizzically.", "$n peers at $N quizzically.", "$n peers at you quizzically.", "You peer intently about your surroundings.", "$n peers intently about the area." }, { "point", "Point at whom?", NULL, "You point at $N.", "$n points at $N.", "$n points at you.", "You point meaningfully at yourself.", "$n points meaningfully at $mself." }, { "poke", "Poke whom?", NULL, "You poke $N in the ribs.", "$n pokes $N in the ribs.", "$n pokes you in the ribs.", "You poke yourself in the ribs, feeling hungry.", "$n pokes $mself in the ribs, looking very peckish." }, { "ponder", "You sit down and think deeply.", "$n sits down and thinks deeply.", "You ponder, looking at $N.", "$n looks at $N ponderously.", "$n looks at you ponderously.", "You ponder intently to yourself.", "$n stares in the distance, pondering a thought." }, { "pout", "Ah, don't take it so hard.", "$n pouts.", "You pout at $N.", "$n pouts at $N.", "$n pouts at you.", "You pout to yourself.", "$n pouts to $mself." }, { "pray", "You feel pious, and begin to pray.", "$n prays and grovels to the powers that be.", "You crawl in the dust before $N.", "$n falls down and grovels before $N.", "$n kisses the dirt at your feet.", "You mutter a prayer to yourself.", "$n mumbles a prayer to $mself." }, { "puke", "You puke.", "$n pukes.", "You puke on $N's feet!", "$n pukes on $N's feet!", "$n pukes on your feet!", "You puke on yourself.", "$n pukes on $mself." }, { "punch", "Punch whom?", NULL, "You punch $N playfully.", "$n punches $N playfully.", "$n punches you playfully.", "You punch yourself. You deserve it.", "$n punches $mself." }, { "purr", "You puuurrrrr.", "$n purrs contentedly.", "You purr contentedly, nuzzling against $N.", "$n purrs contentedly, nuzzling against $N.", "$n purrs contentedly, nuzzling against you.", "You purr at yourself.", "$n purrs at $mself. Must be a cat thing." }, { "raspberry", "You stick your tongue out at ... well, no one.", "$n sticks $s tongue out.", "You stick your tongue out at $N", "$n sticks $s tongue out at $N.", "$n sticks $s tongue out at you.", "You try to stick your tongue out at yourself... Somehow it isn't the same.", NULL }, { "roar", "You take a deep breath and roar loadly!", "$n lets out a deafening roar!", "You roar loudly at $N!", "$n roars loudly at $N!", "$n roars loudly at you!", "You roar in frustration.", "$n roars in frustration." }, { "rofl", "You roll around on the floor laughing hysterically.", "$n rolls around on the floor laughing hysterically.", "You roll around on the floor laughing hysterically at $N.", "$n rolls around on the floor laughing hysterically at $N.", "$n rolls around on the floor laughing hysterically at you.", "You roll around on the floor laughing hysterically.", "$n rolls around on the floor laughing hysterically." }, { "roll", "You roll your eyes.", "$n rolls $s eyes.", "You roll your eyes at $N.", "$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." }, { "salute", "You salute smartly.", "$n salutes smartly.", "You salute $N smartly", "$n salutes $N smartly.", "$n salutes you smartly.", "You salute yourself.", "$n salutes $mself." }, { "scream", "You scream loudly!", "$n screams loudly!", "You scream loudly in $N's face", "$n screams loudly at $N.", "$n screams at you!", "You scream at yourself. Yes, that's ONE way of relieving tension!", "$n screams loudly at $mself!" }, { "scuff", "You scuff your feet sheepishly.", "$n scuffs $s feet in the dirt, looking very sheepish.", "You scuff your foot, avoiding $N's gaze.", "$n scuffs $s foot, shyly avoiding $N's gaze.", "$n scuffs $s foot, shyly avoiding your gaze.", "You scuff your foot sheepishly.", "$n scuffs $s foot in the dirt, looking very sheepish." }, { "seduce", "Whom did you wish to seduce?", NULL, "You smile seductively at $N with darkened eyes.", "$n smiles seductively at $N with darkened eyes.", "$n smiles seductively at you with darkened eyes.", "Umm, are you sure about that?", NULL }, { "shake", "You shake your head.", "$n shakes $s head.", "You shake your head at $N.", "$n shakes $s head at $N.", "$n shakes $s head at you.", "You are shaken by yourself.", "$n shakes and quivers like a bowl full of jelly." }, { "shiver", "You shiver with a chill down your spine.", "$n shivers with a chill down $s spine.", "You shiver at $N.", "$n shivers at $N.", "$n shivers at you.", NULL, NULL }, { "shrug", "You shrug.", "$n shrugs.", "You shrug to $m.", "$n shrugs at $N.", "$n shrugs at you.", "You shrug to yourself.", "$n shrugs to $mself." }, { "sigh", "You sigh.", "$n sighs loudly.", "You sigh loudly at $N.", "$n sighs loudly at $N.", "$n sighs as $e looks at you.", "You sigh at yourself.", "$n sighs at $mself." }, { "slap", "Slap whom?", NULL, "You slap $N on the face.", "$n slaps $N on the face.", "$n slaps you on your face.", "You slap yourself HARD!", "$n slaps $mself." }, { "smack", "Smack whom?", NULL, "You smack $N upside the head.", "$n smacks $N upside the head.", "$n smacks you upside the head.", "You smack yourself HARD!", "$n smacks $mself upside the head." }, { "smile", "You smile happily.", "$n smiles happily.", "You smile at $N.", "$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 $N.", "$n smirks at $N.", "$n smirks at you.", "You smirk to yourself.", "$n smirks to $mself." }, { "snap", "SNAP! You snap your fingers.", "$n snaps $s fingers.", "You snap your fingers at $N.", "$n snaps $s fingers at $N.", "$n snaps $s fingers at you.", "You snap yourself to attention.", "$n snaps $mself to attention." }, { "snarl", "You grizzle your teeth and look mean.", "$n snarls angrily.", "You snarl at $N.", "$n snarls at $N.", "$n snarls at you.", "You snarl at yourself.", "$n snarls at $mself." }, { "sneeze", "You sneeze!", "$n sneezes!", "You sneeze in $N's face!", "$n sneezes in $N's face!", "$n sneezes in your face!", "You sneeze all over yourself!", "$n sneezes all over $mself!", }, { "snicker", "You snicker softly.", "$n snickers softly.", "You snicker at $N.", "$n snickers at $N.", "$n snickers at you.", "You snicker to yourself.", "$n snickers to $mself." }, { "sniff", "You sniff sadly. *SNIFF*", "$n sniffs sadly.", "You sniff sadly at $N.", "$n sniffs sadly at $N.", "$n sniffs sadly at you.", "You sniff sadly at yourself.", "$n sniffs sadly at $mself." }, { "snore", "Zzzzzzzzzzzzzzzzz.", "$n snores loudly.", NULL, NULL, NULL, NULL, NULL }, { "snuggle", "Snuggle who?", NULL, "You snuggle up to $N affectionately.", "$n snuggles up to $N affectionately.", "$n snuggles up to you affectionately.", "You snuggle up, getting ready to sleep.", "$n snuggles up, getting ready to sleep." }, { "spit", "You spit.", "$n spits.", "You spit on $N.", "$n spits on $N.", "$n spits on you.", "You spit on yourself. Always knew you were a drooler.", "$n spits on $mself." }, { "squeeze", "Who to give a squeeze now?", NULL, "You squeeze $N fondly.", "$n squeezes $N fondly.", "$n squeezes you fondly.", "You squeeze yourself - try to relax a little!", "$n squeezes $mself." }, { "stare", "You stare at the sky.", "$n stares at the sky.", "You stare blankly at $N.", "$n stares blankly at $N.", "$n stares blankly at you.", "You stare dreamily at yourself - enough narcissism for now.", "$n stares dreamily at $mself." }, { "stroke", "You stroke the air vaguely.", "$n makes vague stroking motions.", "You bring a hand to stroke $N's hair.", "$n brings a hand to stroke $N's hair.", "$n brings a hand to stroke your hair.", "You stroke your fingers through your hair.", "$n strokes $s fingers through $s hair." }, { "strut", "Strut your stuff.", "$n struts proudly.", NULL, NULL, NULL, NULL, NULL }, { "sulk", "You sulk.", "$n sulks.", NULL, NULL, NULL, NULL, NULL }, { "sweep", "Who do you wish to sweep into your arms?", NULL, "You sweep $N into your arms.", "$n sweeps $N into $s arms.", "$n sweeps you into $s arms.", "You look at your empty arms and sigh.", "$n looks at $s empty arms, and sighs." }, { "tackle", "Whom do you want to tackle?", NULL, "You run up to $N to takle $M.", "$n runs up to $N to tackle $M.", "$n runs up to try and tackle you.", "You take yourself down to the ground and roll about", "$n takes himself down on the ground and rolls about." }, { "tap", "You tap your foot impatiently.", "$n taps $s foot impatiently.", "You tap your foot, looking at $N.", "$n taps $s foot, looking at $N.", "$n taps $s foot, looking at you.", "You tap yourself on the head.", "$n taps $mself on the head." }, { "tender", "You pout your lips, trying to lure someone into a kiss.", "$n is pouting $s lips, trying to lure someone into a kiss.", "You give $N a soft, tender kiss.", "$n gives $N a soft, tender kiss.", "$n gives you a soft, tender kiss.", "You'd better not, people may start to talk!", NULL }, { "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 noone else will." }, { "thwap", "Thwap whom?", NULL, "You THWAP $M on the head for being a moron.", "$n THWAPS $N on the head for being a moron.", "$n THWAPS you on the head for being a moron.", "You THWAP yourself on the head, fool that you are!", "$n THWAPS $mself for being a moron." }, { "tickle", "Whom do you want to tickle?", NULL, "You tickle $N.", "$n tickles $N.", "$n tickles you.", "You tickle yourself, how funny!", "$n tickles $mself." }, { "tip", "You tip your hat with a gallant flourish.", "$n tips $s hat with a gallant flourish.", "You tip your hat to $N gallantly.", "$n tips $s hat gallantly to $N.", "$n tips $s hat to you gallantly.", "You tip the brim of your hat.", "$n tips the brim of $s hat." }, { "tongue", "You stick out your tongue.", "$n sticks out $s tongue", "You stick your tongue out at $N.", "$n sticks $s tongue out at $N's.", "$n sticks $s tongue out at you.", NULL, NULL }, { "tummy", "You rub your tummy as it growls.", "$n rubs $s tummy as it growls.", "You rub your tummy, looking expectantly to $N.", "$n rubs $s tummy, looking expectantly to $N..", "$n rubs $s tummy, looking expectantly to You.", "You rub your tummy and mutter to yourself.", "$n rubs $s tummy and mutters to $mself." }, { "twiddle", "You patiently twiddle your thumbs.", "$n patiently twiddles $s thumbs.", "You look at $N and twiddle your thumbs.", "$n looks at $N and twiddles $s thumbs.", "$n looks at you and twiddles $s thumbs.", "You twiddle your ears like Dumbo.", "$n twiddles $s own ears like Dumbo." }, { "undress", "You start to undress in the shadows.", "$n begins to undress in the shadows... Wow!", "You undress $N with your eyes.", "$n undresses $N with $s eyes.", "You sense $n undressing you with $s eyes.", "A mirror would help better!", "You feel a raise in temerature as $n lusts on $mself." }, { "wave", "You wave.", "$n waves happily.", "You wave to $N.", "$n waves to $N.", "$n waves to you.", "You wave to yourself?", "$n waves to $mself?" }, { "whistle", "You whistle off-key.", "$n whistles off-key.", "You whistle at the sight of $N.", "$n whistles at the sight of $N.", "$n whistles at the sight of you.", "You whistle a little tune to yourself.", "$n whistles a little tune to $mself." }, { "whew", "You wipe your brow and exclaim, 'Whew!'", "$n wipes $s brow and exclaims, 'Whew!'", NULL, NULL, NULL, NULL, NULL }, { "wiggle", "Your wiggle your eyebrows.", "$n wiggles $s eyebrows.", "You wiggle your eyebrows toward $M.", "$n wiggles $s eyebrows toward $N.", "$n wiggles $s eyebrows toward you.", "You wiggle about like a fish.", "$n wiggles about like a fish." }, { "wince", "You wince.", "$n winces.", "You wince at $M.", "$n winces at $N.", "$n winces at you.", "You wince to yourself.", "$n winces to $mself." }, { "wink", "You wink suggestively.", "$n winks suggestively.", "You wink suggestively at $N.", "$n winks suggestively at $N.", "$n winks suggestively at you.", "You wink at yourself?? - what are you up to?", "$n contorts $s face trying to wink at $mself..." }, { "yawn", "You let out a tired yawn.", "$n lets out a tired yawn.", "You look at $N and yawn.", "$n looks at $N and yawns.", "$n looks at you and yawns.", "You cover your mouth as you yawn.", "$n covers $s mouth and yawns." }, { "", NULL, NULL, NULL, NULL, NULL, NULL, NULL } }; lg_int get_game_usec( void ) { struct timeval last_time; push_call("get_game_usec()"); gettimeofday(&last_time, NULL); pop_call(); return((lg_int) last_time.tv_usec + 1000000LL * (lg_int) last_time.tv_sec); } /* The main entry point for executing commands. Can be recursively called from 'at', 'order', 'force'. */ void interpret( CHAR_DATA *ch, char *argue ) { char command[MAX_INPUT_LENGTH]; char logline[MAX_INPUT_LENGTH]; char pag_buf[MAX_STRING_LENGTH]; char buf[MAX_STRING_LENGTH]; char argument_buf[MAX_INPUT_LENGTH]; char *argument; int cmd = -1; int leng; int trust; int sn; bool found = FALSE; lg_int last_time, delta; char *pt, *pti, *pto; bool auto_command; push_call_format("interpret(%s,%s)", ch->name, argue); last_time = get_game_usec(); if (!IS_NPC(ch) && IS_SET(ch->pcdata->interp, INTERP_AUTO)) { REMOVE_BIT(ch->pcdata->interp, INTERP_AUTO); auto_command = TRUE; } else { auto_command = FALSE; } strcpy(argument_buf, argue); /* Strip off non printables - Chaos 5/13/96 */ for (pt = argument_buf ; *pt != '\0' ; pt++) { if (*pt != '\r' && *pt != '\n' && (*pt < 32 || *pt > 126)) { *pt = ' '; } } argument = argument_buf; /* OLC stuff */ if (!IS_NPC(ch) && (ch->pcdata->editmode == MODE_REPEATCMD || ch->pcdata->tempmode == MODE_REPEATCMD)) { DO_FUN *fun; if ((fun = ch->pcdata->last_cmd) == NULL) { ch->pcdata->editmode = MODE_NONE; bug( "interpret: bad last_cmd mode"); pop_call(); return; } else { for (cmd = 0 ; *cmd_table[cmd].name != '\0' ; cmd++) { if (cmd_table[cmd].do_fun == fun) { found = TRUE; break; } } if (!found) { cmd = 0; bug( "interpret: invalid last_cmd"); pop_call(); return; } sprintf( logline, "(%s) %s", cmd_table[cmd].name, argument ); } } if (cmd == -1) { if (ch->desc) { if (ch->desc->character == ch) { *ch->desc->incomm = '\0'; } /* Let's not display commands in obj_progs, and doesn't hurt either */ if (IS_PLR(ch, PLR_REPEAT)) { if (get_trust(ch) <= ch->level && !IS_SET(ch->pcdata->interp, INTERP_FORCE)) { ch_printf_color(ch, "{078}[{178}%s{078}]\n\r", argument); } } if (!IS_NPC(ch) && IS_SET(ch->pcdata->interp, INTERP_DUMP) && auto_command == FALSE && !IS_SET(ch->pcdata->interp, INTERP_FORCE)) { CHAR_DATA *fch; if (!strcasecmp(argument, "stop" ) ) { send_to_char( "Dump stopped.\n\r", ch ); REMOVE_BIT(ch->pcdata->interp, INTERP_DUMP); pop_call(); return; } ch_printf_color(ch, "You say, %s\"%s\".\n\r", get_color_string(ch, COLOR_SPEECH, VT102_DIM), argument); for (fch = ch->in_room->first_person ; fch ; fch = fch->next_in_room) { if (ch == fch) { continue; } if (fch->position <= POS_SLEEPING) { continue; } if (blocking(fch, ch)) { continue; } if (!can_understand(fch, ch, FALSE)) { continue; } ch_printf_color(fch, "%s says, %s\"%s\".\n\r", PERS(ch, fch), get_color_string(ch, COLOR_SPEECH, VT102_DIM), argument); } pop_call(); return; } } /* Strip leading/tailing spaces. */ while (isspace(*argument) && *argument != '\0') { argument++; } if (*argument != '\0') { for (pt = argument + strlen(argument) - 1 ; *pt == ' ' ; pt--) { *pt = '\0'; } } /* Send the scroll prompter out only if no inputs - Chaos 8/22/97 */ if (ch->desc && IS_SET(CH(ch->desc)->pcdata->interp, INTERP_PAGE) && CH(ch->desc)->pcdata->page_buf != NULL) { REMOVE_BIT(CH(ch->desc)->pcdata->interp, INTERP_PAGE); leng = str_cpy_max( pag_buf, ansi_translate_text( ch, "{300}" ), MAX_BUFFER_LENGTH ); leng = str_apd_max( pag_buf, CH(ch->desc)->pcdata->page_buf, leng, MAX_BUFFER_LENGTH); STRFREE (CH(ch->desc)->pcdata->page_buf ); if (*argument == '\0') { send_to_char(pag_buf, ch); } else { send_to_char((const char*)ansi_translate_text(ch, "{088}{200}-----------------------------[{078}Page Buffer Canceled{200}]-----------------------------\n\r"), ch); } } if (*argument == '\0') { pop_call(); return; } /* Add links to hyper-text helps */ if (!IS_NPC(ch) && IS_SET(ch->pcdata->interp, INTERP_HELP)) { REMOVE_BIT(ch->pcdata->interp, INTERP_HELP); if (argument[1] == '\0' && argument[0] != '\0') { HELP_MENU_DATA *menu; HELP_MENU_DATA *prev_menu=NULL; HELP_MENU_DATA *menu2; HELP_DATA *help; bool foundh, foundh2; char retbuf[MAX_INPUT_LENGTH]; foundh = FALSE; help = ch->pcdata->last_help; for (menu = help->first_menu ; menu ; menu = menu->next) { if (menu->option == '-') { foundh = TRUE; } prev_menu = menu; if (prev_menu == NULL) { break; } } if (argument[0] == '-' && !foundh && ch->pcdata->prev_help != NULL) { format_help_to_char(ch, ch->pcdata->prev_help); // send_to_char_color(ch->pcdata->prev_help->text, ch); ch->pcdata->last_help = ch->pcdata->prev_help; ch->pcdata->prev_help = NULL; SET_BIT(ch->pcdata->interp, INTERP_HELP); pop_call(); return; } for (menu = help->first_menu ; menu ; menu = menu->next) { if (tolower(argument[0]) == menu->option) { format_help_to_char(ch, menu->help); // send_to_char_color( menu->help->text, ch); foundh2 = FALSE; for (menu2 = menu->help->first_menu ; menu2 ; menu2 = menu2->next) { if (menu2->option == '-') { foundh2 = TRUE; } } if (!foundh2 && argument[0] != '-') { char colw[20], colW[20], colg[20]; strcpy(colw, get_color_string(ch, COLOR_TEXT, VT102_DIM)); strcpy(colW, get_color_string(ch, COLOR_TEXT, VT102_BOLD)); strcpy(colg, get_color_string(ch, COLOR_ACCENT, VT102_DIM)); sprintf(retbuf, "\n\r %s[%s-%s] %sReturn to %s%s\n\r", colg, colw, colg, colW, ansi_translate(ansi_strip(help_title(ch->pcdata->last_help))), colw); if (ch->pcdata->page_buf == NULL) { send_to_char_color(retbuf, ch); } else { leng = str_cpy_max(pag_buf, ch->pcdata->page_buf, MAX_BUFFER_LENGTH); leng = str_apd_max(pag_buf, ansi_translate_text(ch, retbuf), leng, MAX_BUFFER_LENGTH); ch->pcdata->page_buf = STRALLOC(pag_buf); } } if (argument[0] == '-') { ch->pcdata->prev_help = NULL; } else { ch->pcdata->prev_help = ch->pcdata->last_help; } ch->pcdata->last_help = menu->help; SET_BIT(ch->pcdata->interp, INTERP_HELP); pop_call(); return; } } /* assume a menu option not listed is normal command and continue */ } } /* Last Command - Chaos 5/6/99 */ if (!IS_NPC(ch) && !IS_SET(ch->pcdata->interp, INTERP_FORCE) && auto_command == FALSE && ch->pcdata->last_command != NULL) { char jbuf[MAX_STRING_LENGTH]; if (!strcasecmp(argument, "stop") || !strcasecmp(argument, "quit")) { send_to_char( "Command stopped.\n\r", ch ); STRFREE( ch->pcdata->last_command ); ch->pcdata->last_command = NULL; pop_call(); return; } strcpy( jbuf, ch->pcdata->last_command); strcat( jbuf, argument ); strcpy( argument, jbuf ); STRFREE( ch->pcdata->last_command ); ch->pcdata->last_command = NULL; } /* Any command starting with numbers is a repeat command */ if (*argument >= '0' && *argument <= '9') { do_repeat( ch, argument); pop_call(); return; } /* Added the '&' to multi-line commands Chaos 12/7/93 */ pti = argument; pto = command; for (pti = argument, pto = command ; *pti != ' ' && *pti != '\0' ; pto++, pti++) { *pto = *pti; } *pto = '\0'; if (ch->desc && ch->desc->intop < MAX_INPUT_LENGTH-2) { if (strchr(argument, '&') != NULL && strcasecmp(command, "alias")) { process_command(ch, argument); pop_call(); return; } } /* Implement freeze command. */ if (!IS_NPC(ch) && IS_SET(pvnum_index[ch->pcdata->pvnum]->flags, PVNUM_FROZEN)) { send_to_char("You're totally frozen!\n\r", ch); pop_call(); return; } /* Grab the command word. Special parsing so ' can be a command, also no spaces needed after punctuation. */ strcpy(logline, argument ); if (!isalpha(*argument) && !isdigit(*argument)) { *command = *argument; *(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 ); /* Look for alias first - Chaos 10/11/93 */ if (ch->desc && auto_command == FALSE) { if (!IS_SET(CH(ch->desc)->pcdata->interp, INTERP_ALIAS) && !IS_SET(CH(ch->desc)->pcdata->interp, INTERP_OPROG) && !IS_SET(CH(ch->desc)->pcdata->interp, INTERP_FORCE)) { for (cmd = 0 ; cmd < MAX_ALIAS ; cmd++) { if (CH(ch->desc)->pcdata->alias[cmd] != NULL && CH(ch->desc)->pcdata->alias[cmd][0] != '\0') { if (!strcasecmp(CH(ch->desc)->pcdata->alias_c[cmd], command)) { SET_BIT(CH(ch->desc)->pcdata->interp, INTERP_ALIAS); buf[0] = '\0'; pti = CH(ch->desc)->pcdata->alias[cmd]; for (pto = buf ; *pti != '\0' ; pti++) { if (*pti == '%') { pto = &buf[0] + str_cat_max(buf, argument, MAX_INPUT_LENGTH); } else { if ((pto-&buf[0]) < MAX_INPUT_LENGTH-1) { *pto = (char) (*pti); *(++pto)= '\0'; } } } str_cat_max(buf, "\0", MAX_INPUT_LENGTH); if (ch->desc && ch->desc->character == ch) { if (ch->desc->back_buf != NULL) { char buf2[MAX_INPUT_LENGTH]; str_cpy_max( buf2, ch->desc->back_buf, MAX_INPUT_LENGTH ); STRFREE(ch->desc->back_buf ); str_cat_max( buf2, ch->desc->inbuf, MAX_INPUT_LENGTH ); ch->desc->back_buf = STRALLOC( buf2 ); } else { ch->desc->back_buf = STRALLOC(ch->desc->inbuf); } ch->desc->intop = 0; *ch->desc->inbuf = '\0'; } preprocess_command(ch, buf); pop_call(); return; } } } } } if ((cmd = find_command(command, trust)) != -1) { found = TRUE; } /* * support account function flags in builder commands - Kregor */ if (!IS_GOD(ch)) { if (IS_SET(cmd_table[cmd].flags, CMD_TESTER)) { if (!PLR_FUNCTION(ch, FUNCTION_BETA_TESTER|FUNCTION_BUILDER)) { found = FALSE; cmd = -1; } } else if (IS_SET(cmd_table[cmd].flags, CMD_BUILDER) && !PLR_FUNCTION(ch, FUNCTION_BUILDER)) { found = FALSE; cmd = -1; } if (IS_SET(cmd_table[cmd].flags, CMD_HELPER)) { if (!PLR_FUNCTION(ch, FUNCTION_HELPER|FUNCTION_ENFORCER)) { found = FALSE; cmd = -1; } } else if (IS_SET(cmd_table[cmd].flags, CMD_ENFORCER) && !PLR_FUNCTION(ch, FUNCTION_ENFORCER)) { found = FALSE; cmd = -1; } } /* * hard code command to support PC generation rooms - Kregor 5/22/12 */ if (!IS_NPC(ch) && !strcasecmp(command, "done")) { if (ch->in_room->vnum == ROOM_VNUM_SKILLS) { if (ch->pcdata->practice) { send_to_char_color("You still have skill points to spend.\n\r", ch); pop_call(); return; } char_from_room(ch); char_to_room(ch, ROOM_VNUM_FEATS, TRUE); do_refresh(ch, ""); do_look(ch, ""); pop_call(); return; } else if (ch->in_room->vnum == ROOM_VNUM_FEATS) { if (ch->pcdata->feat_pts || ch->pcdata->bonus_feat[ch->class]) { send_to_char_color("You still have feats to select.\n\r", ch); pop_call(); return; } if (ch->class == CLASS_CLERIC) { char_from_room(ch); char_to_room(ch, ROOM_VNUM_DOMAINS, TRUE); do_refresh(ch, ""); do_look(ch, ""); pop_call(); return; } else { char_from_room(ch); char_to_room(ch, ROOM_VNUM_SCHOOL, TRUE); do_refresh(ch, ""); do_look(ch, ""); pop_call(); return; } } else if (ch->in_room->vnum == ROOM_VNUM_DOMAINS) { int cnt, count; for (cnt = count = 0 ; cnt < MAX_DOMAIN ; cnt++) { if (ch->pcdata->domain[cnt]) { count++; } } if (!count) { send_to_char_color("You need to select your domain.\n\r", ch); pop_call(); return; } char_to_room(ch, ROOM_VNUM_SCHOOL, TRUE); do_refresh(ch, ""); do_look(ch, ""); pop_call(); return; } } if (IS_PLR(ch, PLR_AFK)) { REMOVE_BIT(ch->act, PLR_AFK); act( "You are no longer afk.", ch, NULL, NULL, TO_CHAR ); act( "$n is no longer afk.", ch, NULL, NULL, TO_ROOM ); } /* dead people can't do anything that isn't flagged for them */ if (IS_PLR(ch, PLR_DEAD) && !IS_IMMORTAL(ch)) { if (found && cmd_table[cmd].position >= POS_STUNNED && !IS_SET(cmd_table[cmd].flags, CMD_DEAD)) { send_to_char("You're can't do that, you're dead!\n\r", ch); pop_call(); return; } } /* Assassination attempts are spoiled without concentration. */ if (ch->asn_count > 32) { if (found && cmd_table[cmd].position >= POS_SITTING) { if (!concentration_check(ch, NULL, concentration_roll(ch), 20)) { send_to_char( "You loose concentration on your assassination target.\n\r", ch ); ch->assassinate = NULL; ch->asn_count = 0; } } } /* Doing a concentration task prevents others. */ if (ch->concentrating) { if (!strcasecmp(command, "stop")) { free_skill(ch); act( "You stop your task.", ch, NULL, NULL, TO_CHAR); pop_call(); return; } else if (found && cmd_table[cmd].position >= POS_RESTING) { free_skill(ch); act( "You interrupt your concentration.", ch, NULL, NULL, TO_CHAR); pop_call(); return; } } /* Casting characters cannot do anything else until casting is finished. */ if (ch->casting) { if (strcasecmp(command, "stop")) { if (found && cmd_table[cmd].position >= POS_STUNNED) { send_to_char( "You are busy casting a spell. Type STOP to interrupt.\n\r", ch ); pop_call(); return; } } else { free_cast(ch); act( "You stop casting your spell.", ch, NULL, NULL, TO_CHAR); pop_call(); return; } } /* * Check for condition AFF_ affects */ if (cmd_table[cmd].position >= POS_SITTING && IS_AFFECTED(ch, AFF2_STUNNED)) { send_to_char( "You are too stunned to do that.\n\r", ch ); pop_call(); return; } if (cmd_table[cmd].position == POS_FIGHTING && IS_AFFECTED(ch, AFF2_NAUSEATED)) { send_to_char( "You are too sickened to do that.\n\r", ch ); pop_call(); return; } if (cmd_table[cmd].position > POS_MORTAL && IS_AFFECTED(ch, AFF2_PETRIFICATION)) { send_to_char( "You are frozen like stone!\n\r", ch ); pop_call(); return; } if (cmd_table[cmd].position > POS_RESTING && IS_AFFECTED(ch, AFF2_DAZED)) { send_to_char( "You are too dazed for that!\n\r", ch ); pop_call(); return; } if (cmd_table[cmd].position > POS_SLEEPING) { if (is_affected(ch, gsn_time_stop)) { send_to_char( "You are frozen in time!\n\r", ch ); pop_call(); return; } if (IS_AFFECTED(ch, AFF2_PARALYSIS) && !IS_AFFECTED(ch, AFF_FREEDOM) && str_prefix(cmd_table[cmd].name, "look")) { send_to_char( "You are totally paralyzed!\n\r", ch ); pop_call(); return; } if (cmd_table[cmd].position > POS_SLEEPING && is_affected(ch, gsn_irresistible_dance) && str_prefix(cmd_table[cmd].name, "look")) { send_to_char( "You are too busy dancing!\n\r", ch ); pop_call(); return; } } /* Berserk players can only do combat commands */ if (IS_AFFECTED(ch, AFF2_BERSERK)) { if (!found || !IS_SET(cmd_table[cmd].flags, CMD_BERSERK|CMD_ATTACK)) { send_to_char("You're to driven with rage to do that.\n\r", ch); pop_call(); return; } } if (is_affected(ch, gsn_transformation)) { if (!IS_SET(cmd_table[cmd].flags, CMD_NO_MAGIC)) { send_to_char("You're too thrilled with battle to use magic right now!\n\r", ch); pop_call(); return; } } /* NO_MAGIC rooms prevent magical commands */ if (ch->in_room && IS_SET(ch->in_room->room_flags, ROOM_NO_MAGIC) && !IS_PLR(ch, PLR_HOLYLIGHT)) { if (IS_SET(cmd_table[cmd].flags, CMD_NO_MAGIC)) { send_to_char("You cannot summon the magical energies here to do that!\n\r", ch); pop_call(); return; } } /* * safe rooms disallow aggressive commands */ if (IS_SET(cmd_table[cmd].flags, CMD_ATTACK) && !IS_IMMORTAL(ch)) { if (!is_safe(ch, NULL)) { pop_call(); return; } if (ch->fear_level >= 3) { send_to_char("You are too paralyzed with fear to attack anyone!\n\r", ch); pop_call(); return; } } } /* Log and snoop. */ if (cmd_table[cmd].log == LOG_NEVER) { strcpy(logline, cmd_table[cmd].name); } sprintf(mud->last_player_cmd, "%s: %s", ch->name, logline); if ((!IS_NPC(ch) && IS_SET(pvnum_index[ch->pcdata->pvnum]->flags, PVNUM_LOGGED)) || IS_SET(mud->flags, MUD_LOGALL) || cmd_table[cmd].log == LOG_ALWAYS) { log_printf("Log %s: %s", IS_NPC(ch) ? ch->short_descr : ch->name, logline); } if (!found) { /* Check for intercept progs for unknown commands */ if (!IS_NPC(ch) && ch->desc && !IS_SET(ch->pcdata->interp, INTERP_OPROG) && !IS_SET(ch->pcdata->interp, INTERP_MPROG)) { CHAR_DATA *rch; for (rch = ch->in_room->first_person ; rch ; rch = rch->next_in_room) { if (!IS_NPC(rch) || rch == ch) continue; if (can_see(rch, ch) && mprog_intercept_trigger(command, rch, ch, argument)) { pop_call(); return; } } if (oprog_intercept_trigger(command, ch, argument)) { pop_call(); return; } if (rprog_intercept_trigger(command, ch, argument)) { pop_call(); return; } } if (!check_social(ch, command, argument) && strcasecmp(command, "!") && strcasecmp( command, ".")) { ch_printf_color(ch, "Huh? '%s' is not a command.\n\r", command); /* Pets limitations - Scandum */ if (IS_NPC(ch) && IS_AFFECTED(ch, AFF_DOMINATE) && ch->master) { send_to_char( "Your slave can't do that.\n\r", ch->master); pop_call(); return; } if (IS_ACT(ch, ACT_PET|ACT_FAMILIAR|ACT_COMPANION) && ch->master) { send_to_char( "Your pet can't do that.\n\r", ch->master); pop_call(); return; } } pop_call(); return; } // /* // Check for invalid combat // */ // // if (ch->last_attacked != NULL) // { // if (ch->last_attacked->in_room != ch->in_room) // { // stop_fighting(ch,FALSE); // update_pos(ch,-1); // } // } /* * Character not in position for command? */ if (ch->position < cmd_table[cmd].position) { switch( ch->position ) { case POS_DEAD: send_to_char( "Lie still; you are DEAD.\n\r", ch ); break; case POS_MORTAL: send_to_char( "You are hurt far too bad for that.\n\r", ch ); break; case POS_INCAP: send_to_char( "You are incapacitated.\n\r", ch ); break; case POS_STUNNED: send_to_char( "You can't do that, you're out cold!\n\r", ch ); break; case POS_SLEEPING: send_to_char( "In your dreams, or what?\n\r", ch ); break; case POS_RESTING: send_to_char( "You can't do that while resting.\n\r", ch); break; case POS_SITTING: send_to_char( "You can't do that while sitting down.\n\r", ch); break; case POS_KNEELING: send_to_char( "You can't do that while kneeling.\n\r", ch); break; case POS_CROUCHING: send_to_char( "You can't do that from a crouching position.\n\r", ch); break; case POS_FIGHTING: send_to_char( "No way! You are still fighting!\n\r", ch); break; } pop_call(); return; } if (in_combat(ch)) { if (!is_active(ch) && cmd_table[cmd].action > ACTION_SWIFT) { send_to_char( "Just wait your turn!\n\r", ch ); pop_call(); return; } if (IS_SET(cmd_table[cmd].flags, CMD_NOFIGHT)) { send_to_char( "You cannot do that in combat!\n\r", ch ); pop_call(); return; } } if (cmd_table[cmd].action == ACTION_MOVE) { if (IS_SET(ch->action, ACTION_STANDARD) && IS_SET(ch->action, ACTION_MOVE)) { send_to_char( "You cannot make another move action this round.\n\r", ch ); pop_call(); return; } } if (cmd_table[cmd].action == ACTION_STANDARD) { if (IS_SET(ch->action, ACTION_STANDARD)) { send_to_char( "You have already made a standard action this round.\n\r", ch ); pop_call(); return; } } if (cmd_table[cmd].action == ACTION_SWIFT) { if (IS_SET(ch->action, ACTION_SWIFT)) { send_to_char( "You can only make ONE swift action per round.\n\r", ch ); pop_call(); return; } } if (IS_SET(cmd_table[cmd].action, ACTION_MOVE) && IS_SET(cmd_table[cmd].action, ACTION_STANDARD)) { if (IS_SET(ch->action, ACTION_STANDARD) || IS_SET(ch->action, ACTION_MOVE)) { send_to_char( "You cannot make a full round action this round.\n\r", ch ); pop_call(); return; } } /* * rest and long term care get spoiled for strenuous or intensive activity */ if (cmd_table[cmd].position > POS_RESTING) { if (ch->rest > 0) { send_to_char("Your rest was interrupted.\n\r", ch); ch->rest = 0; } // strenuous activity takes extra air underwater - Kregor if (ch->in_room && ch->in_room->sector_type == SECT_UNDER_WATER && !CAN_BREATH_WATER(ch) && must_breathe(ch)) { gain_condition(ch, COND_AIR, -1); } } if (IS_AFFECTED(ch, AFF2_LONGTERM_CARE) && cmd_table[cmd].position > POS_RESTING) { send_to_char("Your long-term care was spoiled.\n\r", ch); REMOVE_AFFECT(ch, AFF2_LONGTERM_CARE); } /* * Damaging actions for disabled PCs - Kregor * Need the check here, in case performing action results in damage * to character, thus could trigger this check. Pass result to after * the action, because the damage happens after action is complete */ CHAR_DATA *attacker = NULL; if (IS_AWAKE(ch) && ch->hit < 0) { if (IS_SET(cmd_table[cmd].action, ACTION_STANDARD) || IS_SET(cmd_table[cmd].flags, CMD_ATTACK)) { if ((attacker = get_char_pvnum(ch->critical_hit_by)) == NULL) { attacker = ch; } if (get_apply(ch, APPLY_REGENERATION) > 0) { attacker = NULL; } } } /* Check for intercept programs for known commands */ if (!IS_NPC(ch) && ch->desc && !IS_SET(ch->pcdata->interp, INTERP_OPROG) && !IS_SET(ch->pcdata->interp, INTERP_MPROG)/* && !IS_SET(ch->pcdata->interp, INTERP_FORCE)*/) { CHAR_DATA *rch; if (oprog_intercept_trigger(cmd_table[cmd].name, ch, argument)) { pop_call(); return; } for (rch = ch->in_room->first_person ; rch ; rch = rch->next_in_room) { if (!IS_NPC(rch) || rch == ch) continue; if (can_see(rch, ch) && mprog_intercept_trigger(cmd_table[cmd].name, rch, ch, argument)) { pop_call(); return; } } if (rprog_intercept_trigger(cmd_table[cmd].name, ch, argument)) { pop_call(); return; } } if (!IS_NPC(ch)) { ch->pcdata->last_cmd = *cmd_table[cmd].do_fun; if (IS_SET(cmd_table[cmd].flags, CMD_IDLE)) { ch->pcdata->idle = 0; } if (ch->pcdata->editmode == MODE_RESTRICTED && IS_SET(cmd_table[cmd].flags, CMD_QUIT)) { ch_printf_color(ch, "You cannot use quit commands while editing.\n\r"); pop_call(); return; } } /* Decrement move points for exertion cmds - interrupt if no move points left. */ if ((sn = skill_lookup(cmd_table[cmd].name)) != -1 && skill_table[sn].mana_move) { if (!move_loss(ch, NULL, skill_table[sn].mana_move)) { pop_call(); return; } } (*cmd_table[cmd].do_fun) ( ch, argument ); if (attacker != NULL) { damage(attacker, ch, 1, TYPE_NOFIGHT, NULL); } if (!IS_SET(cmd_table[cmd].flags, CMD_QUIT) && ch != NULL && !IS_NPC(ch)) { if (IS_SET(ch->act, PLR_WIZTIME)) { delta = get_game_usec() - last_time; ch_printf_color(ch, "{058}(%lld usec to execute command)\n\r", delta); } } pop_call(); return; } bool check_social( CHAR_DATA *ch, char *command, char *argument ) { int cmd; bool retval; push_call("check_social(%p,%p,%p)",ch,command,argument); if ((cmd = find_social(command)) == -1) { pop_call(); return FALSE; } retval = check_social_fast(ch, cmd, argument); pop_call(); return( retval ); } bool check_social_fast( CHAR_DATA *ch, int cmd, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; push_call("check_social_fast(%p,%p,%p)",ch,cmd,argument); switch ( ch->position ) { case POS_DEAD: send_to_char( "Lie still; you are DEAD.\n\r", ch ); pop_call(); return TRUE; case POS_INCAP: case POS_MORTAL: send_to_char( "You are hurt far too badly for that.\n\r", ch ); pop_call(); return TRUE; case POS_STUNNED: send_to_char( "You are too stunned to do that.\n\r", ch ); pop_call(); return TRUE; case POS_SLEEPING: send_to_char( "In your dreams, or what?\n\r", ch ); pop_call(); return TRUE; } if ( argument == NULL) { act( social_table[cmd].others_no_arg, ch, NULL, NULL, TO_ROOM ); act( social_table[cmd].char_no_arg, ch, NULL, NULL, TO_CHAR ); pop_call(); return TRUE; } one_argument( argument, arg ); victim = NULL; if (!is_string(arg)) { act( social_table[cmd].others_no_arg, ch, NULL, victim, TO_ROOM ); act( social_table[cmd].char_no_arg, ch, NULL, victim, TO_CHAR ); pop_call(); return TRUE; } else if ((victim = get_char_room(ch, arg)) == NULL) { send_to_char( "They aren't here.\n\r", ch ); } else if (victim == ch) { act( social_table[cmd].others_auto, ch, NULL, victim, TO_ROOM ); act( social_table[cmd].char_auto, ch, NULL, victim, TO_CHAR ); } else { act( social_table[cmd].char_found, ch, NULL, victim, TO_CHAR ); if (!blocking(victim, ch)) { act( social_table[cmd].others_found, ch, NULL, victim, TO_NOTVICT ); act( social_table[cmd].vict_found, ch, NULL, victim, TO_VICT ); } if (!mprog_social_trigger(social_table[cmd].name, victim, ch)) { if (!MP_VALID_MOB(ch) && MP_VALID_MOB(victim) && CAN_TALK(victim)) { switch (number_bits(2)) { case 0: if (strcasecmp(social_table[cmd].name, "hand")) check_social_fast(victim, cmd, ch->name); break; case 1: if (!strcasecmp(social_table[cmd].name, "kiss") || !strcasecmp(social_table[cmd].name, "sweep") || !strcasecmp(social_table[cmd].name, "bkiss") || !strcasecmp(social_table[cmd].name, "cheek") || !strcasecmp(social_table[cmd].name, "peck") || !strcasecmp(social_table[cmd].name, "dance") || !strcasecmp(social_table[cmd].name, "hand")) check_social(victim, "slap", ch->name); break; case 2: check_social(victim, "ponder", ch->name); break; case 3: if ((!strcasecmp(social_table[cmd].name, "kiss") || !strcasecmp(social_table[cmd].name, "bkiss") || !strcasecmp(social_table[cmd].name, "cheek") || !strcasecmp(social_table[cmd].name, "peck") || !strcasecmp(social_table[cmd].name, "hand")) && ((ch->sex == SEX_MALE && victim->sex == SEX_FEMALE) || (ch->sex == SEX_FEMALE && victim->sex == SEX_MALE))) check_social(victim, "blush", ch->name); else check_social(victim, "ponder", ch->name); break; } } } } pop_call(); return TRUE; } void process_command( CHAR_DATA *ch, char *argument) { char buf2[MAX_INPUT_LENGTH], buf3[MAX_INPUT_LENGTH]; char *pti, *pto; bool found; push_call("process_command(%p,%p)",ch,argument); found = FALSE; for (pti = argument, pto = buf3 ; *pti != '\0' ; pti++, pto++) { if (*pti == '&') { if (!found) { *pto = '\0'; pto = buf2-1; /* Switch recording medium */ found = TRUE; } else { *pto = '\r'; } } else { *pto = *pti; } } if (found) { *pto = '\r'; pto++; } *pto = '\0'; if (found) { /* Add buf2 to the inbuf */ if (*ch->desc->inbuf == '\0') { ch->desc->intop = str_cpy_max( ch->desc->inbuf, buf2, MAX_INPUT_LENGTH); } else { if (ch->desc->inbuf[ch->desc->intop-1] != '\r' && ch->desc->inbuf[ch->desc->intop-1] != '\n') { ch->desc->intop = str_apd_max(ch->desc->inbuf, "\r", ch->desc->intop, MAX_INPUT_LENGTH); ch->desc->intop = str_apd_max(ch->desc->inbuf, buf2, ch->desc->intop, MAX_INPUT_LENGTH); } else { ch->desc->intop = str_apd_max(ch->desc->inbuf, buf2, ch->desc->intop, MAX_INPUT_LENGTH); } } } interpret(ch, buf3); pop_call(); return; } void preprocess_command( CHAR_DATA *ch, char *argument) { char buf2[MAX_INPUT_LENGTH], buf3[MAX_INPUT_LENGTH]; char buf1[MAX_INPUT_LENGTH]; char *pti, *pto; bool found; push_call("preprocess_command(%p,%p)",ch,argument); found = FALSE; for (pti = argument, pto = buf3 ; *pti != '\0' ; pti++, pto++) { if (*pti == '&') { if (!found) { *pto = '\0'; pto = buf2-1; /* Switch recording medium */ found = TRUE; } else { *pto = '\r'; } } else { *pto = *pti; } } if (found) { *pto = '\r'; pto++; } *pto = '\0'; if (found) { if (*ch->desc->inbuf == '\0') { ch->desc->intop = str_cpy_max( ch->desc->inbuf, buf2, MAX_INPUT_LENGTH); } else { strcpy( buf1, ch->desc->inbuf); ch->desc->intop = str_cpy_max( ch->desc->inbuf, buf2, MAX_INPUT_LENGTH); ch->desc->intop = str_apd_max(ch->desc->inbuf, "\r", ch->desc->intop, MAX_INPUT_LENGTH); ch->desc->intop = str_apd_max(ch->desc->inbuf, buf1, ch->desc->intop, MAX_INPUT_LENGTH); } } interpret(ch, buf3); pop_call(); return; } void do_a( CHAR_DATA *ch, char *argument ) { push_call("do_a(%p,%p)",ch,argument); send_to_char( "Ah, what?\n\r", ch ); pop_call(); return; }