/***************************************************************************
* 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;
}