/*************************************************************************** * Emud 2.2 by Igor van den Hoven, Michiel Lange, and Martin Bethlehem. * * * * MrMud 1.4 by David Bills and Dug Michael. * * * * 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. * ***************************************************************************/ #include <sys/time.h> #include "emud.h" bool check_social args( ( CHAR_DATA *ch, char *command, char *argument ) ); 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 /* Command table. */ sh_int cmd_gsn[512]; const struct cmd_type cmd_table [] = { { "/", do_recall, POS_FIGHTING, 1, LOG_NORMAL, CMD_HIDE}, { "?", do_grep, POS_DEAD, 1, LOG_NORMAL, CMD_HIDE|CMD_BERSERK}, { ".", do_chat, POS_SLEEPING, 1, LOG_NORMAL, CMD_HIDE}, { ",", do_emote, POS_RESTING, -9, LOG_NORMAL, CMD_HIDE}, { ";", do_gtell, POS_DEAD, 1, LOG_NORMAL, CMD_HIDE}, { "'", do_say, POS_RESTING, -9, LOG_NORMAL, CMD_HIDE}, { ":", do_channel_talk, POS_DEAD, 1, LOG_NORMAL, CMD_HIDE}, { "]", do_immtalk, POS_SLEEPING, 96, LOG_NORMAL, CMD_HIDE}, /* alphabetical ordered for indexing - Scandum */ { "a", do_a, POS_DEAD, 1, LOG_NORMAL, CMD_HIDE}, { "acupunch", do_acupunch, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "advance", do_advance, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_NONE}, { "affects", do_affects, POS_DEAD, -8, LOG_NORMAL, CMD_BERSERK}, { "afk", do_afk, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "alias", do_alias, POS_DEAD, -3, LOG_NORMAL, CMD_NONE}, { "ambush", do_ambush, POS_STANDING, 1, LOG_NORMAL, CMD_HIDE}, { "areas", do_areas, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "arrest", do_arrest, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_NONE}, { "assassin", do_assassin, POS_FIGHTING, 1, LOG_NORMAL, CMD_HIDE}, { "assassinate", do_assassinate, POS_FIGHTING, 1, LOG_NORMAL, CMD_HIDE}, { "at", do_at, POS_DEAD, MAX_LEVEL-3, LOG_NORMAL, CMD_NONE}, { "attack", do_attack, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_NONE}, { "auto", do_auto, POS_DEAD, 1, LOG_NORMAL, CMD_BERSERK}, { "buy", do_buy, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "bank", do_bank, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "banish", do_ban, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_NONE}, { "backstab", do_backstab, POS_STANDING, -3, LOG_NORMAL, CMD_HIDE}, { "bash", do_bash, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "beep", do_beep, POS_SLEEPING, 1, LOG_NORMAL, CMD_NONE}, { "berserk", do_berserk, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "block", do_block, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "bloodfrenzy", do_bloodfrenzy, POS_FIGHTING, 1, LOG_NORMAL, CMD_HIDE}, { "bounty", do_bounty, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "brandish", do_brandish, POS_FIGHTING, 1, LOG_NORMAL, CMD_HIDE}, { "buffer", do_buffer, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "buildlight", do_buildlight, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "cast", do_cast, POS_FIGHTING, -3, LOG_NORMAL, CMD_NONE}, { "castle", do_castle, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "camp", do_camp, POS_RESTING, -3, LOG_NORMAL, CMD_HIDE}, { "chat", do_chat, POS_SLEEPING, 1, LOG_NORMAL, CMD_NONE}, { "clans", do_clans, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "clanmessage", do_clan_message, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_NONE}, { "clanset", do_clanset, POS_RESTING, 10, LOG_NORMAL, CMD_HIDE}, { "clanwhere", do_clanwhere, POS_RESTING, 10, LOG_NORMAL, CMD_HIDE}, { "class", do_class, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "clearpath", do_clear_path, POS_STANDING, -3, LOG_NORMAL, CMD_HIDE}, { "cloak", do_cloak, POS_DEAD, MAX_LEVEL-3, LOG_NORMAL, CMD_NONE}, { "close", do_close, POS_RESTING, -8, LOG_NORMAL, CMD_NONE}, { "clock", do_clock, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "circle", do_circle, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "coffer", do_coffer, POS_RESTING, 10, LOG_ALWAYS, CMD_HIDE}, { "color", do_color, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "commands", do_commands, POS_DEAD, -8, LOG_NORMAL, CMD_HIDE}, { "compare", do_compare, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "connect", do_connect, POS_DEAD, MAX_LEVEL-1, LOG_NORMAL, CMD_NONE}, { "consider", do_consider, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "constitution", do_constitution, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "config", do_config, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "copyover", do_copyover, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_QUIT}, { "credits", do_credits, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "cripple", do_cripple, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "down", do_down, POS_STANDING, -8, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "death", do_death, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "delete", do_delete, POS_DEAD, 1, LOG_NEVER, CMD_NONE}, { "deny", do_deny, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_NONE}, { "description", do_description, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "destroy", do_destroy, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_NONE}, { "dexterity", do_dexterity, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "disarm", do_disarm, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "disconnect", do_disconnect, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_NONE}, { "disguise", do_disguise, POS_RESTING, 1, LOG_NORMAL, CMD_HIDE}, { "dismount", do_dismount, POS_FIGHTING, 1, LOG_NORMAL, CMD_HIDE}, { "distract", do_distract, POS_STANDING, -3, LOG_NORMAL, CMD_HIDE}, { "divert", do_divert, POS_FIGHTING, 1, LOG_NORMAL, CMD_HIDE}, { "donate", do_donate, POS_RESTING, 10, LOG_NORMAL, CMD_HIDE}, { "doorbash", do_bashdoor, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "doorset", do_door, POS_DEAD, MAX_LEVEL-1, LOG_NORMAL, CMD_NONE}, { "drink", do_drink, POS_RESTING, ~ 1, LOG_NORMAL, CMD_NONE}, { "drain", do_drain, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "drop", do_drop, POS_RESTING, -9, LOG_NORMAL, CMD_NONE}, { "dump", do_dump, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "east", do_east, POS_STANDING, -8, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "eat", do_eat, POS_FIGHTING, 1, LOG_NORMAL, CMD_NONE}, { "echo", do_echo, POS_DEAD, MAX_LEVEL-3, LOG_NORMAL, CMD_NONE}, { "edit", do_edit, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "email", do_email, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "emote", do_emote, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "engrave", do_engrave, POS_STANDING, 1, LOG_NORMAL, CMD_HIDE}, { "enter", do_enter, POS_STANDING, 1, LOG_NORMAL, CMD_NONE}, { "equipment", do_equipment, POS_DEAD, -8, LOG_NORMAL, CMD_NONE}, { "etell", do_etell, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "evaluate", do_evaluate, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "examine", do_examine, POS_RESTING, -8, LOG_NORMAL, CMD_NONE}, { "exits", do_exits, POS_RESTING, -8, LOG_NORMAL, CMD_NONE}, { "flee", do_flee, POS_FIGHTING, -8, LOG_NORMAL, CMD_NONE}, { "fill", do_fill, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "finger", do_finger, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "find", do_find, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "fixpass", do_fixpass, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_NONE}, { "follow", do_follow, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "forage", do_forage, POS_STANDING, 1, LOG_NORMAL, CMD_HIDE}, { "force", do_force, POS_DEAD, MAX_LEVEL-3, LOG_ALWAYS, CMD_NONE}, { "forceren", do_forceren, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_HIDE}, { "forcerent", do_forcerent, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_NONE}, { "forge", do_forge, POS_RESTING, 1, LOG_NORMAL, CMD_HIDE}, { "fos", do_fos, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "freeze", do_freeze, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_NONE}, { "get", do_get, POS_RESTING, -9, LOG_NORMAL, CMD_NONE}, { "give", do_give, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "glance", do_glance, POS_RESTING, 1, LOG_NORMAL, CMD_HIDE}, { "gohome", do_gohome, POS_RESTING, 10, LOG_NORMAL, CMD_HIDE}, { "goto", do_goto, POS_DEAD, MAX_LEVEL-3, LOG_NORMAL, CMD_NONE}, { "gouge", do_gouge, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "grep", do_grep, POS_DEAD, 1, LOG_NORMAL, CMD_NONE|CMD_BERSERK}, { "group", do_group, POS_SLEEPING, 1, LOG_NORMAL, CMD_NONE}, { "gtell", do_gtell, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "help", do_help, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "headbutt", do_head_butt, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "heal", do_heal, POS_RESTING, 10, LOG_NORMAL, CMD_HIDE}, { "hearlog", do_hearlog, POS_DEAD, MAX_LEVEL-3, LOG_NORMAL, CMD_NONE}, { "hide", do_hide, POS_RESTING, -3, LOG_NORMAL, CMD_HIDE}, { "history", do_history, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "hold", do_wear, POS_RESTING, -8, LOG_NORMAL, CMD_HIDE}, { "holylight", do_holylight, POS_DEAD, MAX_LEVEL-3, LOG_NORMAL, CMD_NONE}, { "honorific", do_honorific, POS_SLEEPING, 90, LOG_NORMAL, CMD_NONE}, { "html", do_html, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "hunt", do_hunt, POS_STANDING, -3, LOG_NORMAL, CMD_HIDE}, { "inventory", do_inventory, POS_DEAD, -8, LOG_NORMAL, CMD_NONE}, { "identify", do_identify, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "immtalk", do_immtalk, POS_DEAD, MAX_LEVEL-3, LOG_NORMAL, CMD_NONE}, { "initiate", do_initiate, POS_RESTING, 10, LOG_NORMAL, CMD_HIDE}, { "intelligence", do_intelligence, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "invis", do_invis, POS_DEAD, MAX_LEVEL-3, LOG_NORMAL, CMD_NONE}, { "kill", do_kill, POS_FIGHTING, -9, LOG_NORMAL, CMD_BERSERK}, { "kick", do_kick, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE|CMD_BERSERK}, { "knife", do_knife, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "know", do_know, POS_RESTING, 1, LOG_NORMAL, CMD_HIDE}, { "look", do_look, POS_RESTING, -8, LOG_NORMAL, CMD_NONE|CMD_BERSERK}, { "language", do_language, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "level", do_level, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "list", do_list, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "load", do_load, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "lock", do_lock, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "log", do_log, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_NONE}, { "map", do_map, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "makeclan", do_makeclan, POS_RESTING, 10, LOG_NORMAL, CMD_HIDE}, { "makeflash", do_make_flash, POS_STANDING, 1, LOG_NORMAL, CMD_HIDE}, { "makepoison", do_make_poison, POS_STANDING, 1, LOG_NORMAL, CMD_HIDE}, { "mana", do_mana, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "mass", do_mass, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "maze", do_maze, POS_DEAD, MAX_LEVEL-1, LOG_ALWAYS, CMD_NONE}, { "morph", do_morph, POS_DEAD, -7, LOG_NORMAL, CMD_NONE}, { "most", do_most, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "mount", do_mount, POS_FIGHTING, 1, LOG_NORMAL, CMD_HIDE}, { "move", do_move, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "multiclass", do_multi, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "murde", do_murde, POS_STANDING, 5, LOG_NORMAL, CMD_HIDE}, { "murder", do_murder, POS_STANDING, 5, LOG_NORMAL, CMD_BERSERK}, { "mute", do_mute, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_NONE}, { "mpaset", do_mpaset, POS_DEAD, 97, LOG_ALWAYS, CMD_HIDE}, { "mpasound", do_mpasound, POS_DEAD, 97, LOG_NORMAL, CMD_HIDE}, { "mpareaecho", do_mpareaecho, POS_DEAD, 97, LOG_NORMAL, CMD_HIDE}, { "mpdamage", do_mpdamage, POS_DEAD, 97, LOG_NORMAL, CMD_HIDE}, { "mpdelay", do_mpdelay, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mpjunk", do_mpjunk, POS_DEAD, 97, LOG_NORMAL, CMD_HIDE}, { "mpjunkperson", do_mpjunk_person, POS_DEAD, 97, LOG_NORMAL, CMD_HIDE}, { "mpecho", do_mpecho, POS_DEAD, 97, LOG_NORMAL, CMD_HIDE}, { "mpechoat", do_mpechoat, POS_DEAD, 97, LOG_NORMAL, CMD_HIDE}, { "mpechoaround", do_mpechoaround, POS_DEAD, 97, LOG_NORMAL, CMD_HIDE}, { "mpgorand", do_mpgorand, POS_DEAD, 97, LOG_NORMAL, CMD_HIDE}, { "mpkill", do_mpkill, POS_DEAD, 97, LOG_NORMAL, CMD_HIDE}, { "mpzset", do_mpzset, POS_DEAD, 97, LOG_NORMAL, CMD_HIDE}, { "mpcalculate", do_mpcalculate, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mpdo", do_mpdo, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mpmload", do_mpmload, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mpoload", do_mpoload, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mppurge", do_mppurge, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mpquiet", do_mpquiet, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mpgoto", do_mpgoto, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mpat", do_mpat, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mptransfer", do_mptransfer, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mptrigger", do_mptrigger, POS_DEAD, 97, LOG_NORMAL, CMD_HIDE}, { "mpforce", do_mpforce, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mplog", do_mplog, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mpmset", do_mpmset, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mposet", do_mposet, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mpmadd", do_mpmadd, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mpoadd", do_mpoadd, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "mpswap", do_mpswap, POS_DEAD, 98, LOG_NORMAL, CMD_HIDE}, { "north", do_north, POS_STANDING, -8, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "notice", do_notice, POS_STANDING, 1, LOG_NORMAL, CMD_HIDE}, { "nbanish", do_nban, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_NONE}, { "nominate", do_nominate, POS_RESTING, 10, LOG_NORMAL, CMD_HIDE}, { "notag", do_notag, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "note", do_note, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "open", do_open, POS_RESTING, -8, LOG_NORMAL, CMD_NONE}, { "order", do_order, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "outcast", do_outcast, POS_RESTING, 10, LOG_NORMAL, CMD_HIDE}, { "put", do_put, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "pardon", do_pardon, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "password", do_password, POS_DEAD, 1, LOG_NEVER, CMD_NONE}, { "peace", do_peace, POS_DEAD, MAX_LEVEL-3, LOG_NORMAL, CMD_NONE}, { "peek", do_peek, POS_RESTING, 1, LOG_NORMAL, CMD_HIDE}, { "pick", do_pick, POS_RESTING, -3, LOG_NORMAL, CMD_HIDE}, { "plan", do_plan, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "plant", do_plant, POS_RESTING, 1, LOG_NORMAL, CMD_HIDE}, { "pledge", do_pledge, POS_RESTING, 20, LOG_NORMAL, CMD_HIDE}, { "pload", do_pload, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_NONE}, { "pquit", do_pquit, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_NONE}, { "polymorph", do_polymorph, POS_STANDING, -3, LOG_NORMAL, CMD_HIDE}, { "poof", do_poof, POS_DEAD, MAX_LEVEL-3, LOG_NORMAL, CMD_NONE}, { "port", do_port, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "pose", do_pose, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "practice", do_practice, POS_SLEEPING, 1, LOG_NORMAL, CMD_NONE}, { "prog", do_prog, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "prompt", do_prompt, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "purge", do_purge, POS_DEAD, MAX_LEVEL-3, LOG_NORMAL, CMD_NONE}, { "quaff", do_quaff, POS_FIGHTING, 1, LOG_NORMAL, CMD_NONE}, { "qui", do_qui, POS_DEAD, 1, LOG_NORMAL, CMD_HIDE}, { "quit", do_quit, POS_DEAD, 1, LOG_NORMAL, CMD_BERSERK|CMD_QUIT}, { "reply", do_reply, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "rangecast", do_range_cast, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "reboo", do_reboo, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_HIDE}, { "reboot", do_reboot, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_QUIT}, { "recall", do_recall, POS_FIGHTING, 1, LOG_NORMAL, CMD_NONE}, { "recite", do_recite, POS_FIGHTING, 1, LOG_NORMAL, CMD_HIDE}, { "refresh", do_refresh, POS_DEAD, -8, LOG_NORMAL, CMD_BERSERK}, { "reincarnate", do_reincarnate, POS_STANDING, 1, LOG_NORMAL, CMD_NONE}, { "relog", do_relog, POS_STANDING, 1, LOG_NORMAL, CMD_BERSERK|CMD_QUIT}, { "release", do_release, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_NONE}, { "rename", do_rename, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_NONE}, { "renounce", do_renounce, POS_RESTING, 10, LOG_NORMAL, CMD_HIDE}, { "rent", do_rent, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "remove", do_remove, POS_RESTING, -8, LOG_NORMAL, CMD_NONE}, { "report", do_report, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "request", do_request, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "rescale", do_rescale, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "rescue", do_rescue, POS_FIGHTING, 1, LOG_NORMAL, CMD_HIDE}, { "resetarea", do_resetarea, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "rest", do_rest, POS_SLEEPING, -8, LOG_NORMAL, CMD_NONE}, { "restore", do_restore, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "return", do_return, POS_DEAD, -8, LOG_NORMAL, CMD_NONE}, { "revert", do_revert, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_NONE}, { "south", do_south, POS_STANDING, -8, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "say", do_say, POS_RESTING, -9, LOG_NORMAL, CMD_NONE}, { "sacrifice", do_sacrifice, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "save", do_save, POS_DEAD, 1, LOG_NORMAL, CMD_HIDE}, { "savearea", do_savearea, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "scan", do_scan, POS_RESTING, -8, LOG_NORMAL, CMD_BERSERK}, { "score", do_score, POS_DEAD, -7, LOG_NORMAL, CMD_BERSERK}, { "search", do_search, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "sell", do_sell, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "set", do_set, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "shadow", do_shadow, POS_RESTING, 1, LOG_NORMAL, CMD_HIDE}, { "shoot", do_shoot, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "shout", do_shout, POS_RESTING, -8, LOG_NORMAL, CMD_NONE}, { "show", do_show, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "shutdow", do_shutdow, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_HIDE}, { "shutdown", do_shutdown, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_QUIT}, { "silence", do_silence, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_NONE}, { "sing", do_sing, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "sit", do_sit, POS_SLEEPING, -8, LOG_NORMAL, CMD_NONE}, { "skills", do_skills, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "sla", do_sla, POS_DEAD, MAX_LEVEL-3, LOG_NORMAL, CMD_HIDE}, { "slaughter", do_slaughter, POS_DEAD, MAX_LEVEL-1, LOG_NORMAL, CMD_NONE}, { "slay", do_slay, POS_DEAD, MAX_LEVEL-3, LOG_ALWAYS, CMD_NONE}, { "sleep", do_sleep, POS_SLEEPING, -8, LOG_NORMAL, CMD_NONE}, { "socials", do_socials, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "snatch", do_snatch, POS_RESTING, 1, LOG_NORMAL, CMD_HIDE}, { "sneak", do_sneak, POS_STANDING, -3, LOG_NORMAL, CMD_HIDE}, { "snoop", do_snoop, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_NONE}, { "spam", do_spam, POS_DEAD, -7, LOG_NORMAL, CMD_NONE}, { "speak", do_speak, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "speed", do_speed, POS_DEAD, -9, LOG_NORMAL, CMD_NONE}, { "split", do_split, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "spy", do_spy, POS_STANDING, 1, LOG_NORMAL, CMD_HIDE}, { "stand", do_stand, POS_SLEEPING, -9, LOG_NORMAL, CMD_NONE}, { "stat", do_stat, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "status", do_status, POS_DEAD, -7, LOG_NORMAL, CMD_BERSERK}, { "steal", do_steal, POS_STANDING, 1, LOG_NORMAL, CMD_HIDE}, { "stealth", do_stealth, POS_STANDING, -3, LOG_NORMAL, CMD_HIDE}, { "stop", do_visible, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "strength", do_strength, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "strangle", do_strangle, POS_STANDING, -3, LOG_NORMAL, CMD_HIDE}, { "suicide", do_suicide, POS_DEAD, 1, LOG_NEVER, CMD_NONE}, { "switch", do_switch, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_NONE}, { "tell", do_tell, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "tag", do_tag, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "take", do_get, POS_RESTING, -9, LOG_NORMAL, CMD_HIDE}, { "talk", do_channel_talk, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "tame", do_tame, POS_FIGHTING, 1, LOG_NORMAL, CMD_HIDE}, { "tactical", do_tactical, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "test", do_test, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_HIDE}, { "throw", do_throw, POS_FIGHTING, 1, LOG_NORMAL, CMD_HIDE}, { "tick", do_tick, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_NONE}, { "title", do_title, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "time", do_time, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "timemode", do_timemode, POS_DEAD, MAX_LEVEL, LOG_NORMAL, CMD_NONE}, { "train", do_train, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "track", do_track, POS_STANDING, 1, LOG_NORMAL, CMD_HIDE}, { "trip", do_trip, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "transfer", do_transfer, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "travel", do_travel, POS_STANDING, 1, LOG_NORMAL, CMD_NONE}, { "trivia", do_trivia, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "up", do_up, POS_STANDING, -8, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "unalias", do_unalias, POS_DEAD, -3, LOG_NORMAL, CMD_NONE}, { "unlock", do_unlock, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "usage", do_usage, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "vt102", do_vt100, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "value", do_value, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "version", do_version, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "victory", do_victory_list, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "voice", do_voice, POS_RESTING, 1, LOG_NORMAL, CMD_HIDE}, { "west", do_west, POS_STANDING, -8, LOG_NORMAL, CMD_IDLE|CMD_BERSERK}, { "wake", do_wake, POS_SLEEPING, -9, LOG_NORMAL, CMD_NONE}, { "wear", do_wear, POS_RESTING, -8, LOG_NORMAL, CMD_NONE}, { "weather", do_weather, POS_RESTING, 1, LOG_NORMAL, CMD_NONE}, { "where", do_where, POS_RESTING, -8, LOG_NORMAL, CMD_NONE}, { "whirl", do_whirl, POS_FIGHTING, -3, LOG_NORMAL, CMD_HIDE}, { "who", do_who, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "wield", do_wear, POS_RESTING, -8, LOG_NORMAL, CMD_HIDE}, { "wimpy", do_wimpy, POS_DEAD, 1, LOG_NORMAL, CMD_BERSERK}, { "wisdom", do_wisdom, POS_DEAD, 1, LOG_NORMAL, CMD_NONE}, { "wizhelp", do_wizhelp, POS_DEAD, MAX_LEVEL-3, LOG_NORMAL, CMD_NONE}, { "wizlock", do_wizlock, POS_DEAD, MAX_LEVEL, LOG_ALWAYS, CMD_NONE}, { "wizmap", do_wizmap, POS_DEAD, MAX_LEVEL-2, LOG_NORMAL, CMD_NONE}, { "zap", do_zap, POS_STANDING, 1, LOG_NORMAL, CMD_HIDE}, { "", NULL, POS_DEAD, 0, 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 $M.", "$n looks accusingly at $N.", "$n looks accusingly at you.", "You accuse yourself.", "$n seems to have a bad conscience." }, { "ack", "You gasp and say 'ACK!' at your mistake.", "$n ACKS at $s big mistake.", "You ACK $M.", "$n ACKS $N.", "$n ACKS you.", "You ACK yourself.", "$n ACKS $mself. Must be a bad day." }, { "addict", "You stand and admit to all in the room 'Hi, I'm $n, and I'm a mud addict'", "$n stands and says 'Hi, I'm $n, and I'm a mud addict'", "You tell $N that you are addicted to $S love.", "$n tells $N that $e is addicted to $S love.", "$n tells you that $e is addicted to your love.", "You stand and admit to yourself that you are a mud addict. Maybe you should tell everyone else now?", "$n is mumbling to $mself, probably $e's been mudding too long." }, { "admire", "Admire whom?", NULL, "You admire $N's beauty.", "$n admires $N's beauty.", "$n admires your beauty.", "You admire yourself in a mirror.", "$n admires $mself in a mirror." }, { "airguitar", "You grab your air guitar and play for all you're worth!", "$n bangs $s head, air-guitaring like a mad man!", "You play a most excellent tune for $N on your air-guitar.", "$n plays a most excellent tune for $N on $s air-guitar.", "$n plays a most excellent tune for you on $s air-guitar.", "You spin around in circles, air-guitaring in a total frenzy!", "$n spins around in circles, air-guitaring in a total frenzy!", }, { "applaud", "Clap, clap, clap.", "$n gives a round of applause.", "You clap at $S actions.", "$n claps at $N's actions.", "$n gives you a round of applause. You MUST have done something good!", "You applaud at yourself. Boy, are we conceited!", "$n applauds at $mself. Boy, are we conceited!" }, { "backpat", "Backpat whome?", NULL, "You pat $M on the back for a job well done.", "$n pats $N on the back.", "$n pats you on the back for a job well done.", "You pat yourself on the back vainly.", "$n vainly pats $mself on the back." }, { "ballad", "You raise your clear voice towards the sky.", "$n has begun to sing a bit offkey.", "You sing a ballad to $M.", "$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 $M.", "$n barks at $N.", "$n barks at you.", "You bark at yourself. Woof! Woof!", "$n barks at $mself. Woof! Woof!" }, { "bat", "You bat your long, dark lashes and smile innocently.", "$n bats $s long, dark lashes and smiles innocently.", "You bat your long, dark lashes at $M.", "$n bats $s long, dark lashes at $N, and smiles innocently at $M.", "$n bats $s long, dark lashes and smiles innocently at you.", "Awww.. You're such an adorable being.", "$n looks cross-eyed while batting $s long, dark lashes." }, { "beam", "You beam delightedly at nothing in particular.", "$n beams broadly at nothing in particular.", "You dazzle $N with your smile.", "$n beams at $N broadly, $e must like $M a great deal.", "$n beams at you broadly, $e must like you a great deal.", "Well, aren't you special?", "$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. Looks like $e could use a hand.", }, { "beckon", "You beckon for everyone to follow.", "$n beckons for everyone to follow.", "You beckon for $M to follow - sure hope they do!", "$n beckons $N to follow... hmmm what's going on?", "$n beckons for you to follow.", "You beckon to your shadow to follow.", "$n beckons to $s shadow to follow." }, { "beer", "You down a cold, frosty beer.", "$n downs a cold, frosty beer.", "You draw a cold, frosty beer for $N.", "$n draws a cold, frosty beer for $N.", "$n draws a cold, frosty beer for you.", "You draw yourself a beer.", "$n draws $mself a beer." }, { "bleed", "You bleed all over the room!", "$n bleeds all over the room! Get out of $s way!", "You bleed all over $M!", "$n bleeds all over $N. Better leave, you may be next!", "$n bleeds all over you! YUCK!", "You bleed all over yourself!", "$n bleeds all over $mself." }, { "beg", "You beg the gods for mercy.", "The gods fall down laughing at $n's request for mercy.", "You desperately beg $M for help.", "$n begs $N for assistance!", "$n begs you for help.", "Begging yourself for help wouldn't be very smart.", "$n begs $mself for help, how ingenious." }, { "blink", "You blink in utter disbelief.", "$n blinks in utter disbelief.", "You blink at $M in confusion.", "$n blinks at $N in confusion.", "$n blinks at you in confusion.", "You are sooooooooooooo confused.", "$n blinks at $mself in complete confusion." }, { "blush", "Your cheeks are burning.", "$n blushes.", "Your cheeks turn red seeing $M here.", "$n blushes as $e sees $N here.", "$n blushes as $e sees you here. Such an effect on people!", "You blush at your actions.", "$n blushes at $s actions." }, { "bong", "Are you just gonna stare at it?", NULL, "You pass the bong to $M.", "$n passes the bong to $N.", "$n passes you the bong.", "You light the bong and take a hit.", "$n lights the bong and takes a hit." }, { "bonk", "*** !!BONK!! ***", "$n charges up and goes *** !!BONK!! ***", "You bonk $M on the head for being such a moron.", "$n bonks $N on the head for being such an UTTER moron.", "$n bonks you on the head for being so foolish.", "You bonk yourself on the head, fool that you are!", "$n bonks $mself and grimaces in pain." }, { "bounce", "BOIINNNNNNGG!", "$n bounces around happily.", "You bounce onto $S lap.", "$n bounces onto $N's lap.", "$n bounces onto your lap.", "You bounce your head like a basketball.", "$n plays basketball with $s head." }, { "bow", "You bow deeply.", "$n bows deeply flourishing $s cape.", "You bow before $M.", "$n bows before $N.", "$n bows before you, flourishing $s cape.", "You kiss your toes; how flexable.", "$n folds up like a jack knife and kisses $s own toes." }, { "bungy", "You tie a bungy cord to the mud and jump into the internet.", "$n ties a bungy cord to the mud and jumps into the internet.", "You tie a bungy cord to $N and throw $M off the mud.", "$n ties a bungy cord to $N and throws $M off the mud.", "$n ties a bungy cord to you and throws you off the mud.", "You tie a bungy cord to yourself and jump off the mud .", "$n ties a bungy cord to $mself and jumps off the mud." }, { "burp", "Excuse yourself.", "$n burps loudly.", "You burp loudly to $M in response.", "$n burps loudly in response to $N's remark.", "$n burps loudly in response to your remark.", "You burp at yourself.", "$n burps at $mself. How rude." }, { "bye", "You say goodbye to all in the room.", "$n says goodbye to everyone in the room, including you!", "You say goodbye to all in the room, and especially to $N.", "$n says goodbye to everyone in the room, including you!", "$n says goodbye to everyone in the room, and especially you!", "You say goodbye to all in the room.", "$n says goodbye to everyone in the room, including you!" }, { "cackle", "You throw back your head and cackle with insane glee!", "$n throws back $s head and cackles with insane glee!", "You cackle gleefully at $N", "$n cackles gleefully at $N.", "$n cackles gleefully at you. Better keep your distance from $m.", "You cackle at yourself. Now, THAT'S strange!", "$n is really crazy now! $e cackles at $mself!" }, { "cap", "You tip your cap gallantly.", "$n tips $s cap gallantly.", "You tip your cap to $N gallantly.", "$n tips $s cap gallantly for $N.", "$n tips $s cap to you gallantly.", "You tip your cap over your head for a nap.", "$n tips $s cap over $s head for a nap." }, { "cheek", "Kiss whose cheek?", NULL, "You lean forward and kiss $M gently on the cheek.", "$n leans forward and kisses $N gently on the cheek.", "$n leans forward and kisses you gently on the cheek.", "People might start to talk..", NULL }, { "cheer", "You cheer with great gusto.", "$n cheers with great gusto.", "You cheer at $M 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." }, { "choke", "Choke whom?", NULL, "You grab $M by the neck and shake violently.", "$n grabs $N by the neck and shakes violently.", "$n grabs YOU by the neck and shakes violently. Ouch!", "You grab your own neck, and start shaking violently.", "$n grabs $s own neck and shakes violently." }, { "chuckle", "You chuckle politely.", "$n chuckles politely.", "You chuckle at $S actions.", "$n chuckles at $N's actions.", "$n chuckles at your actions.", "You chuckle at your own joke, since no one else would.", "$n chuckles at $s own joke, since none of you would." }, { "clap", "You clap your hands together.", "$n shows $s approval by clapping $s hands together.", "You clap at $S performance.", "$n claps at $N's performance.", "$n claps at your performance.", "You clap at your own performance.", "$n claps at $s own performance." }, { "clueless", "You chastise everyone in the room for being clueless.", "$n chastises everyone for being clueless.", "You chastise $M for being clueless.", "$n chastises $N for being clueless.", "$n chastises you for being clueless.", "You chastise yourself for being clueless. What a dweeb you are!", "$n chastises $mslef for being clueless. What a dweeb!" }, { "comb", "You comb your hair - perfect.", "$n combs $s hair, how dashing!", "You comb $S hair and make it shine.", "$n patiently combs $N's hair and makes it shine.", "$n combs your hair and makes it shine.", "You pull your hair attempting to comb it.", "$n tries to comb $s tangled hair." }, { "comfort", "Aww, what's wrong?", "$n needs someone to comfort $m.", "You comfort $M.", "$n comforts $N.", "$n comforts you.", "You make a vain attempt to comfort yourself.", "$n has no one to comfort $m but $mself." }, { "cough", "You cough to clear your throat and eyes and nose and....", "$n coughs loudly.", "You cough loudly. It must be $S fault, $E gave you this cold.", "$n coughs loudly, and glares at $N, like it is $S fault.", "$n coughs loudly, and glares at you. Did you give $M that cold?", "You cough loudly. Why don't you take better care of yourself?", "$n coughs loudly. $n should take better care of $mself." }, { "cringe", "You cringe in terror.", "$n cringes in terror!", "You cringe away from $M.", "$n cringes away from $N in mortal terror.", "$n cringes away from you.", "I beg your pardon?", NULL }, { "cry", "Poor baby.", "$n bursts into tears.", "You cry on $S shoulder.", "$n cries on $N's shoulder.", "$n cries on your shoulder.", "You cry to yourself.", "$n sobs quietly to $mself." }, { "cuddle", "Whom do you feel like cuddling today?", NULL, "You cuddle $M warmly.", "$n cuddles $N warmly, you wish someone would cuddle you.", "$n cuddles you warmly.", "Get a life.", NULL }, { "curse", "You swear loudly.", "$n swears: @*&^%@*&!", "You swear at $M.", "$n swears at $N.", "$n swears at you! What did you do?", "You swear at your own mistakes.", "$n starts swearing at $mself for making a mistake." }, { "curtsey", "You curtsey to your audience.", "$n curtseys gracefully.", "You curtsey to $M.", "$n curtseys gracefully to $N.", "$n curtseys gracefully for you.", "You curtsey to your audience (yourself).", "$n curtseys to $mself, since no one is paying attention to $m." }, { "dance", "Feels silly, doesn't it?", "$n tries to break dance, but nearly breaks $s neck!", "You stick a rose between your teeth and sweep $M into a tango!", "$n sticks a rose between $s teeth and sweeps $N into a tango!", "$n sticks a rose between $s teeth and sweeps you into a tango!", "You skip and dance around by yourself.", "$n dances a pas-de-une." }, { "doh", "You say, 'Doh!!' and slap yourself. What an idiot you are!", "$n slaps $mself and says, 'Doh!!!'", "You say, 'Doh!!' and slap yourself. What an idiot you are!", "$n slaps $mself and says, 'Doh!!!'", "$n slaps $mself and says, 'Doh!!!' You made $m feel dumb. Good job!", "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." }, { "dutch", "Going Dutch on whom?", NULL, "You give $N a Dutch kiss.", "$n gives $N a Dutch kiss.", "$n gives you a Dutch kiss.", "You go Dutch on yourself.", "$n goes Dutch 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?)" }, { "eskimo", "Who do you want to eskimo kiss with?", "$n is looking for someone to rub noses with. Any volunteers?", "You rub noses with $M.", "$n rubs noses with $N. You didn't know they were eskimos!", "$n rubs noses with you.", "You become cross-eyed from your attempts at rubbing your nose on yourself!", "$n is trying to rub $s nose on $mself. That must hurt!" }, { "eyebrow", "You raise an eyebrow at the notion.", "$n raises an eyebrow.", "You raise your eyebrow at $M.", "$n raises an eyebrow at $N's weird actions.", "$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." }, { "fakerep", "You report: 7367/7367 hp 1049/1049 mana 2595/2595 mv 497189537 xp.", "$n reports: 7367/7367 hp 1049/1049 mana 2595/2595 mv 497189537 xp.", "You report: 7367/7367 hp 1049/1049 mana 2595/2595 mv 497189537 xp.", "$n reports: 7367/7367 hp 1049/1049 mana 2595/2595 mv 497189537 xp.", "$n reports: 7367/7367 hp 1049/1049 mana 2595/2595 mv 497189537 xp.", "You report: 7367/7367 hp 1049/1049 mana 2595/2595 mv 497189537 xp.", "$n reports: 7367/7367 hp 1049/1049 mana 2595/2595 mv 497189537 xp." }, { "fart", "Where are your manners?", "$n lets off a real rip-roarer ... a greenish cloud envelops $n!", "You fart at $M. Boy, you are sick.", "$n farts in $N's direction. Better flee before $e turns to you!", "$n farts in your direction. You gasp for air.", "You fart at yourself. You deserve it.", "$n farts at $mself. Better $m than you." }, { "flash", "You grin and strut as you open your coat.", "$n rips $s clothes off and parades naked around the room!", "Swiftly you jerk open your jacket, trying to attract $S notice!", "Cover your eyes! $n is exposing $mself to $N! EWWWW!", "You gasp! $n has just revealed $s \"equipment\" to you!", "You sick lil bunny.", "(PERVERT ALERT) $n is trying to flash $mself!" }, { "flip", "You flip head over heels.", "$n flips head over heels.", "You flip $M over your shoulder.", "$n flips $N over $s shoulder.", "$n flips you over $s shoulder. Hmmmm.", "You tumble all over the room.", "$n does some nice tumbling and gymnastics." }, { "flirt", "Wink wink!", "$n flirts -- probably needs a date, huh?", "You flirt with $M trying to get $S attention.", "$n flirts with $N trying to get $S attention.", "$n wants you to show some interest and is flirting with you.", "You flirt with yourself.", "$n flirts with $mself. Hoo boy." }, { "fondle", "Who needs to be fondled?", NULL, "You fondly fondle $M.", "$n fondly fondles $N.", "$n fondly fondles you.", "You fondly fondle yourself, feels funny doesn't it ?", "$n fondly fondles $mself - this is going too far !!" }, { "french", "Kiss whom?", NULL, "You give $N a long and passionate kiss.", "$n kisses $N passionately.", "$n gives you a long and passionate kiss.", "You gather yourself in your arms and try to kiss yourself.", "$n makes an attempt at kissing $mself." }, { "frown", "What's bothering you ?", "$n frowns.", "You frown at what $E did.", "$n frowns at what $N did.", "$n frowns at what you did.", "You frown at yourself. Poor baby.", "$n frowns at $mself. Poor baby." }, { "fuck", "Mind your language!", NULL, "You swear at $N 'FUCK YOU!'", "$n swears at $N, rather rough language is used there!", "$n swears at you 'FUCK YOU!'", "You move in mysterious ways to make love with yourself.", "$n moves in mysterious ways to make love with $mself." }, { "fume", "You grit your teeth and fume with rage.", "$n grits $s teeth and fumes with rage.", "You stare at $M, fuming.", "$n stares at $N, fuming with rage.", "$n stares at you, fuming with rage!", "That's right - hate yourself!", "$n clenches $s fists and stomps $s feet, fuming with anger." }, { "gasp", "You gasp in astonishment.", "$n gasps in astonishment.", "You gasp as you realize what $e did.", "$n gasps as $e realizes what $N did.", "$n gasps as $e realizes what you did.", "You look at yourself and gasp!", "$n takes one look at $mself and gasps in astonishment!" }, { "giggle", "You giggle.", "$n giggles.", "You giggle in $N's presence.", "$n giggles at $N's actions.", "$n giggles at you. Hope it's not contagious!", "You giggle at yourself. You must be nervous or something.", "$n giggles at $mself looking rather jittery." }, { "glare", "You glare at nothing in particular.", "$n glares around $m.", "You glare icily at $M.", "$n glares at $N.", "$n glares icily at you, you feel cold to your bones.", "You glare icily at your feet, they are suddenly very cold.", "$n glares at $s feet, what is bothering $m?" }, { "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 $E gives you a funny look.", "$n tries to grin at $N, but screws up badly.", "$n turns $s lips in a sad attempt at a lopsided grin.", "Your face becomes a ghastly mask as you fail to grin.", "$n's face becomes a strange death mask as $s tries to grin." }, { "grin", "You grin evilly.", "$n grins evilly.", "You grin evilly at $M.", "$n grins evilly at $N.", "$n grins evilly at you with a twinkle in $s eyes.", "You grin at yourself. You must be getting very bad thoughts.", "$n grins at $mself. You must wonder what $e is thinking." }, { "groan", "You groan loudly.", "$n groans loudly.", "You groan at the sight of $M.", "$n groans at the sight of $N.", "$n groans at the sight of you.", "You groan as you realize what you have done.", "$n groans as $e realizes what $e has done." }, { "grope", "Whom do you wish to grope?", NULL, "Well, what sort of noise do you expect here?", "$n gropes $N.", "$n gropes you.", "You grope yourself - YUCK.", "$n gropes $mself - YUCK." }, { "grovel", "You grovel in the dirt.", "$n grovels in the dirt.", "You grovel before $M.", "$n grovels at $N's feet.", "$n grovels in the dirt at your feet.", "That seems a little silly to me.", NULL }, { "growl", "Grrrrrrrrrr ...", "$n growls.", "Grrrrrrrrrr ... take that, $N!", "$n growls at $N. Better leave the room before the fighting starts.", "$n growls at you. Hey, two can play it that way!", "You growl at yourself. Boy, do you feel bitter!", "$n growls at $mself. This could get interesting..." }, { "grumble", "You grumble.", "$n grumbles.", "You grumble to $M.", "$n grumbles to $N.", "$n grumbles to you.", "You grumble under your breath.", "$n grumbles under $s breath." }, { "grunt", "Oink, oink.", "$n grunts like a pig.", "Oink, oink.", "$n grunts to $N. What a pig!", "$n grunts to you. What a pig!", "Oink, oink.", "$n grunts to nobody in particular. What a pig!" }, { "gulp", "ggggggguuuuuuulllllppppp!!!!!", "$n says 'That drink was nice.'", "$N thanks you for the drink.", "$N comsumes a drink from $n.", "$n gives you a refreshing drink which you gulp down.", "You gulp down a refreshing drink.", "$n gulps down a refreshing looking drink." }, { "hand", "Kiss whose hand?", NULL, "You kiss $S hand.", "$n kisses $N's hand. How sweet!", "$n kisses your hand. What a sweetie!", "You kiss your own hand.", "$n kisses $s own hand." }, { "hello", "You say hello to everyone in the room.", "$n says hello to everyone in the room.", "You say tell $M how truly glad you are to see $M.", "$n tells $N 'Hi!'", "$n tells you how truly glad $e is you are here.", "You greet yourself enthusiastically.", "$n greets $mself enthusiastically. How odd." }, { "hangover", "You pop a few aspirin and put on your sunglasses. Ow, your head hurts!", "$n holds $s head and says 'Quit breathing so loud!'", "Won't $N be quiet? Your head is gonna split in two if $E keeps talking!", "$n complains to $N 'Be quiet! I have a hangover!", "$n complains to you 'Be quiet! I have a hangover!", "You shoosh yourself. Be quiet! You have a hangover!", "$n shooshes $mself. Wow, what a hangover that must be!" }, { "highfive", "You jump in the air...oops, better get someone else to join you.", "$n jumps in the air by $mself. Is $e a cheerleader, or just daft?", "You jump in the air and give $M a big highfive!", "$n jumps in the air and gives $N a big highfive!", "$n jumps in the air and gives you a big highfive!", "You jump in the air and congratulate yourself!", "$n jumps in the air and gives $mself a big highfive! Wonder what $e did?" }, { "hooter", "You light up a big, fat hooter.", "$n lights up a big, fat hooter.", "You roll a big, fat hooter for $N.", "$n rolls a big, fat hooter for $N.", "$n rolls a big, fat hooter for YOU!", "You roll yourself a big, fat hooter.", "$n rolls $mself a big, fat hooter." }, { "hop", "You hop around like a little kid.", "$n hops around like a little kid.", "You hop at $N.", "$n hops at $N.", "$n hops at you.", "Maybe in your next life.", NULL }, { "howl", "You howl at the moon.", "$n howls at the moon.", "You howl soulfully at $N.", "$n howls 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 $M 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 huggle $M.", "The world seems to brighten as $n huggles $N.", "$n mesmerises you with love as $e envelopes you in a huggle.", "Get a life.", NULL }, { "hum", "Hmm Hmm Hmm Hmmmmmmm.", "$n hums like a bee with a chest cold.", "You hum a little ditty for $M. Hmm Hmm Hmm Hmmmmmm.", "$n hums a little ditty for $N. Hmm Hmm Hmm Hmmmmmm.", "$n hums a little ditty for you. Hmm Hmm Hmm Hmmmmmm.", "Hmm Hmm Hmmmmmmm.", "$n hums like a bee with a chest cold." }, { "kiss", "Isn't there someone you want to kiss?", NULL, "You kiss $M.", "$n kisses $N.", "$n kisses you.", "All the lonely people :(", NULL }, { "knee", "You raise one knee, preparing to do justice.", "$n cocks one knee threateningly.", "You knee $M hard in the groin.", "$N doubles over in pain as $n knees $M in the groin.", "$n suddenly knees you in the groin, sending you down, writhing in pain!", "What ARE you thinking !?!?!?!?!?!?", "You turn around, shaking your head at $n's attempts at kneeing $mself." }, { "laces", "Tie whose laces?", NULL, "With the greatest of stealth, you tie $S shoelaces together.", "$n sneaks up to $N and ties $S shoelaces together.", "You try to take a step, and you hit the world facedown! Someone must have tied your shoelaces together!", "You tie your own shoelaces together, try to walk, and promptly fall.", "$n cleverly ties $s own shoelaces together, tries to walk, and sprawls flat on the floor." }, { "laugh", "You laugh.", "$n laughs.", "You laugh at $N mercilessly.", "$n laughs at $N mercilessly.", "$n laughs at you mercilessly. Hmmmmph.", "You laugh at yourself. I would, too.", "$n laughs at $mself. Let's all join in!!!" }, { "lag", "You complain about the terrible lag.", "$n starts complaining about the terrible lag.", "You complain to $N about the terrible lag.", "$n complains to $N about the terrible lag.", "$n complains to you about the terrible lag.", "You start muttering about the awful lag.", "$n starts muttering about the awful lag." }, { "lick", "You lick your lips and smile.", "$n licks $s lips and smiles.", "You lick $M.", "$n licks $N.", "$n licks you.", "You lick yourself.", "$n licks $mself - YUCK." }, { "liver", "You look angrily for someone to disembowel.", "$n angrily looks around for someone to molest.", "You rip out $S liver and eat it.", "$n rips out $N's liver and eats it.", "$n rips out your liver and eats it.", "You rip out your own liver and eat it.", "$n rips out $s liver and eats it, how fascinating!" }, { "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 ?" }, { "maim", "Who do you want to maim?", "$n is looking for someone to maim.", "You maim $N with your dull fingernails.", "$n raises $s hand and tries to maim $N to pieces.", "$n raises $s hand and paws at you. You've been maimed!", "You maim yourself with your dull fingernails.", "$n raises $s hand and maims $mself to pieces." }, { "makelove", "Whom do you wish to make love with ?", NULL, "You make love with $N.", "$n makes love with $N.", "$n is making love with you.", "You fold up weirdly and start making love to yourself.", "$n folds up weirdly and starts making love to $mself." }, { "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 the trouble you have in mind.", "$n grins mischievously at $s nasty ideas.", "You grin mischievously at $N, thinking at your plans with $M.", "$n grins mischievously at $N, what is $n up to with $M.", "$n grins mischievously at you. You inch toward the door.", "You grin mischievously at yourself.", "$n grins mischievously at $mself, that could be something interesting!" }, { "moan", "You start to moan.", "$n starts moaning.", "You moan for the loss of $m.", "$n moans for the loss of $N.", "$n moans at the sight of you. Hmmmm.", "You moan at yourself.", "$n makes $mself moan." }, { "moon", "You drop your drawers and moon everyone in the room.", "$n drops $s pants and gives you the vertical smile.", "You bend over and moon $M.", "$n drops $s pants and rudely moons $N.", "$n bends over and gives you the vertical smile.", "You try to moon yourself, but you end up in a big knot.", "$n nearly goes into convulsions while trying to moon $mself." }, { "muhaha", "MUHAHAHAHAHA", "$n laughs diabolically. MUHAHAHAHAHA!", "You laugh at $M diabolically.", "$n laughs at $N diabolically. MUHAHAHAHAHA!", "$n laughs at you diabolically. MUHAHAHAHAHA!", "You must have funny thoughts.", NULL }, { "navel", "Whom would you like to victimize?", NULL, "You lift $N's shirt and blow loudly into $S navel!", "$n lifts $N's shirt and blows loudly into $S navel!", "Yeek! $n lifts your shirt and blows loudly into your navel!", "Careful, people are staring...", "$n looks around furtively, then bends over and blows loudly into $s own navel!!" }, { "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 in agreement.", "You attempt to nod at yourself and get dizzy instead.", "$n nods quietly to $mself. What a wacko." }, { "nudge", "Nudge whom?", NULL, "You nudge $M.", "$n nudges $N.", "$n nudges you.", "You nudge yourself, for some strange reason.", "$n nudges $mself, to keep $mself awake." }, { "nuzzle", "Nuzzle whom?", NULL, "You nuzzle $S neck softly.", "$n softly nuzzles $N's neck.", "$n softly nuzzles your neck.", "I'm sorry, friend, but that's impossible.", NULL }, { "ogle", "Whom do you want to ogle?", NULL, "You ogle $M like $E was a piece of meat.", "$n ogles $N. Maybe you should leave them alone for awhile?", "$n ogles you. Guess what $e is thinking about?", "You ogle yourself. You may just be too wierd for this mud.", "$n ogles $mself. Better hope that $e stops there." }, { "ohno", "Oh no! You did it again!", "Oh no! $n did it again!", "You exclaim, 'Oh no! I did it again!'", "$n exclaims to $N, 'Oh no! I did it again!'", "$n exclaims to you, 'Oh no! I did it again!'", "You exclaim to yourself, 'Oh no! I did it again!'", "$n mumbles to $mself, 'Oh no! I did it again!'" }, { "pat", "Pat whom?", NULL, "You pat $N on $S head.", "$n pats $N on $S head.", "$n pats you on your head.", "You pat yourself on your 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 a naughty look in $s eyes.", "Risking a slap to the face, you give $M a peck on the cheek.", "$n smiles and gives $N a chaste peck on the cheek.", "$n pecks you on the cheek, how sweet!", "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, looking for thieves no doubt.", "You peer at $M quizzically.", "$n peers at $N quizzically.", "$n peers at you quizzically.", "You peer intently about your surroundings.", "$n peers intently about the area, looking for thieves no doubt." }, { "point", "Point at whom?", NULL, "You point at $M meaningfully.", "$n points at $N meaningfully.", "$n points at you meaningfully.", "You point meaningfully at yourself.", "$n points meaningfully at $mself." }, { "poke", "Poke whom?", NULL, "You poke $M in the ribs.", "$n pokes $N in the ribs.", "$n pokes you in the ribs.", "You poke yourself in the ribs, feeling very silly.", "$n pokes $mself in the ribs, looking very sheepish." }, { "ponder", "You sit down and think deeply.", "$n sits down and thinks deeply.", "You ponder what $E is thinking.", "$n tries to ponder what $N is thinking.", "$n ponders what you are thinking, want to help?", "If you don't know, who does?", "$n stares in the distance, pondering a ponderful thought." }, { "possum", "You do your best imitation of a corpse.", "$n hits the ground... DEAD.", "You do your best imitation of a corpse.", "$n hits the ground... DEAD.", "$n hits the ground... DEAD.", "You do your best imitation of a corpse.", "$n hits the ground... DEAD." }, { "pout", "Ah, don't take it so hard.", "$n pouts.", "You pout at $M through lowered lashes.", "$n pouts at $N.", "$n pouts at you through lowered lashes.", "If you want to POUTONIZE spell it out!", NULL }, { "pray", "You feel righteous, and maybe a little foolish.", "$n begs and grovels to the powers that be.", "You crawl in the dust before $M.", "$n falls down and grovels in the dirt before $N.", "$n kisses the dirt at your feet.", "Talk about narcissism ...", "$n mumbles a prayer to $mself." }, { "pretend", "You pretend you are the Imp, and slay everyone in sight!", "$n is pretending $e is the implementor again. *sigh*", "You pretend you are Zolstead, and you demote $N to level 1.", "$n pretends $e is Zolstead, and says, '$N, you're demoted to level 1!'", "$n pretends $e is Zolstead, and says, 'You are demoted to level 1!'", "You pretend you are the implementor, and you demote yourself to level 1.", "$n pretends $e is Zolstead, and demotes $mself to level 1." }, { "puke", "You puke ... chunks everywhere!", "$n pukes.", "You puke on $M.", "$n pukes on $N.", "$n spews vomit and pukes all over your clothing!", "You puke on yourself.", "$n pukes on $s clothes." }, { "punch", "Punch whom?", NULL, "You punch $M playfully.", "$n punches $N playfully.", "$n punches you playfully. OUCH!", "You punch yourself. You deserve it.", "$n punches $mself. Why don't you join in?" }, { "purr", "MMMMEEEEEEEEOOOOOOOOOWWWWWWWWWWWW.", "$n purrs contentedly.", "You purr contentedly rubbing against $N's leg.", "$n purrs contentedly brushing against $N's leg.", "$n purrs contentedly rubbing against your leg.", "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, catching flies in the process.", "You give $M the raspberry ... and spit all over yourself.", "$n gives $N the raspberry... PHBT! What a mess... spit EVERYWHERE.", "You are splattered with spit as $n gives you the raspberry.", "You try to stick your tongue out at yourself... Somehow it isn't the same.", NULL }, { "renandstimpy", "You say, 'Oh Happy Happy, Joy Joy!'", "$n exclaims, 'Oh Happy Happy, Joy Joy!'", "You exclaim, 'Oh Happy Happy, Joy Joy!' at the mere thought of $M.", "$n exclaims, 'Oh Happy Happy, Joy Joy!' as $e sees $N enter the room.", "$n exclaims, 'Oh Happy Happy, Joy Joy!' when $e sees you approach.", "You exclaim, 'Oh Happy Happy, Joy Joy!' at the thought of yourself.", "$n exclaims, 'Oh Happy Happy, Joy Joy!' at the thought of $mself." }, { "roar", "You take a deep breath and roar loadly!", "$n lets out a deafening roar!", "You roar loudly in $N's ear!", "$n roars loudly in $N's ears!", "$n roars loudly at you! Your poor ears, you're all deaf now!", "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 in front of $M.", "$n rolls around on the floor laughing hysterically in front of $N.", "$n rolls around on the floor laughing hysterically in front of 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 $M.", "$n rolls $s eyes at $N.", "$n rolls $s eyes at you.", "You roll your eyes at yourself.", "$n rolls $s eyes at $mself." }, { "rose", "Who would you like to give a rose to ?", "$n is looking for someone to give a rose to.", "You give $M a pretty rose {118}@{128}-{028},{128}-{028}`{128}-", "$n gives $N a pretty rose {118}@{128}-{028},{128}-{028}`{128}-", "$n gives you a pretty rose {118}@{128}-{028},{128}-{028}`{128}-", "You lament that no-one has given you any roses recently.", "$n is hinting that $E would like to be given a rose." }, { "rub", "You rub your eyes. How long have you been at this?", "$n rubs $s eyes. $n must have been playing all day.", "You rub your eyes. Has $N been playing as long as you have?", "$n rubs $s eyes. $n must have been playing all day.", "$n rubs $s eyes. Have you been playing as long as $m?", "You rub your eyes. How long have you been at this?", "$n rubs $s eyes. $n must have been playing all day." }, { "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." }, { "scream", "ARRRRRRRRRRGH!!!!!", "$n screams loudly!", "ARRRRRRRRRRGH!!!!! Yes, it MUST have been $S fault!!!", "$n screams loudly at $N. Better leave before $n blames you, too!!!", "$n screams at you! That's not nice! *sniff*", "You scream at yourself. Yes, that's ONE way of relieving tension!", "$n screams loudly at $mself! Is there a full moon up?" }, { "scuff", "You scuff your feet sheepishly.", "$n scuffs $s feet in the dirt, looking very sheepish.", "You scuff your foot, avoiding $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, "Well, it's worth a try...", "$n tries to seduce $N with a smile.", "$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 $S hand.", "$n shakes $N's hand.", "$n shakes your hand.", "You are shaken by yourself.", "$n shakes and quivers like a bowl full of jelly." }, { "shawl", "You slam your head against the wall, laughing.", "$n slams $s head against the wall, laughing.", "You slam your head against the wall, laughing at $N.", "$n slams $s head against the wall, laughing at $N.", "$n slams $s head against the wall, laughing at you.", "You slam your head against the wall, laughing at your own errors.", "$n slams $s head against the wall, laughing at $s own errors." }, { "shiver", "Brrrrrrrrr.", "$n shivers contentedly.", "You shiver at the thought of fighting $M.", "$n shivers at the thought of fighting $N.", "$n shivers at the suicidal thought of fighting you.", "You shiver to yourself?", "$n shivers because $e's cold." }, { "shrug", "You shrug.", "$n shrugs helplessly.", "You shrug in response to $s question.", "$n shrugs in response to $N's question.", "$n shrugs in response to your question.", "You shrug to yourself.", "$n shrugs to $mself. What a strange person." }, { "sigh", "You sigh.", "$n sighs loudly.", "You sigh as you think of $M.", "$n sighs at the sight of $N.", "$n sighs as $e thinks of you. Touching, huh?", "You sigh at yourself. You MUST be lonely.", "$n sighs at $mself. What a sorry sight." }, { "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 repeatedly, $e seems to enjoy it!" }, { "slither", "You act like a worm and jiggle around.", "You see $n slither around the floor.", "You crawl down and slide up $N's pants.", "You see $n sliding around $N's leg.", "You see $n slithering toward YOU!", "Curling up you slide onto the ground.", "$n slides onto the floor and curls up." }, { "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, what an idiot!" }, { "smile", "You smile happily.", "$n smiles happily.", "You smile at $M.", "$n beams a smile at $N.", "$n smiles at you.", "You smile at yourself.", "$n smiles at $mself." }, { "smirk", "You smirk.", "$n smirks.", "You smirk at $S saying.", "$n smirks at $N's saying.", "$n smirks at your saying.", "You smirk at yourself. Okay ...", "$n smirks at $s own 'wisdom'." }, { "smoke", "You light a cigarette.", "$n lights a cigarette.", "You offer $M a smoke.", "$n offers $M a smoke.", "$n offers you a smoke.", "Stressed?", "$n is very stressed and lights yet another cigaret." }, { "snap", "PRONTO ! You snap your fingers.", "$n snaps $s fingers.", "You snap you fingers at $M.", "$n snaps $s fingers at $N impatiently.", "$n snaps $s fingers at you impatiently. C'mon already!", "You snap yourself to attention.", "$n snaps $mself to attention." }, { "snarl", "You grizzle your teeth and look mean.", "$n snarls angrily.", "You snarl at $M.", "$n snarls at $N.", "$n snarls at you in anger.", "You snarl at yourself.", "$n snarls at $mself." }, { "sneeze", "Gesundheit!", "$n sneezes.", "You sneeze in $N's face. YACK!", "$n sneezes in $N's face. YACK!", "$n sneezes in your face. YACK!", "You sneeze all over yourself.", "$n sneezes all over $mself.", }, { "snicker", "You snicker softly.", "$n snickers softly.", "You snicker with $M about your shared secret.", "$n snickers with $N about their shared secret.", "$n snickers with you about your shared secret.", "You snicker at your own evil thoughts.", "$n snickers at $s own evil thoughts." }, { "sniff", "You sniff sadly. *SNIFF*", "$n sniffs sadly.", "You sniff sadly at the way $E is treating you.", "$n sniffs sadly at the way $N is treating $m.", "$n sniffs sadly at the way you are treating $m.", "You sniff sadly at your lost opportunities.", "$n sniffs sadly at $mself. Something MUST be bothering $m." }, { "snore", "Zzzzzzzzzzzzzzzzz.", "$n snores loudly.", NULL, NULL, NULL, NULL, NULL }, { "snowball", "Whom do you want to throw a snowball at?", NULL, "You throw a snowball in $N's face.", "$n throws a snowball at $N.", "$n throws a snowball at you. Splat!", "You throw a snowball at yourself.", "$n throws a snowball at $mself." }, { "snuggle", "Who?", NULL, "You snuggle $M.", "$n snuggles upon to $N.", "$n snuggles upon to you affectionately.", "You snuggle upon, getting ready to sleep.", "$n snuggles upon, getting ready to sleep." }, { "spank", "Spank whom?", NULL, "You spank $M playfully.", "$n spanks $N playfully.", "$n spanks you playfully. OUCH!", "You spank yourself. Kinky!", "$n spanks $mself. Kinky!" }, { "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", "Where, what, how, whom?", NULL, "You squeeze $M fondly.", "$n squeezes $N fondly.", "$n squeezes you fondly.", "You squeeze yourself - try to relax a little!", "$n squeezes $mself." }, { "stare", "You stare at the sky.", "$n stares at the sky.", "You stare dreamily at $N, completely lost in $S eyes..", "$n stares dreamily at $N.", "$n stares dreamily at you, completely lost in your eyes.", "You stare dreamily at yourself - enough narcissism for now.", "$n stares dreamily at $mself - NARCISSIST!" }, { "stomp", "***STOMP*** ***STOMP***", "$n stomps insanely around the room!", "You stomp $S ass into a bloody mess on the floor.", "$n begins stomping $N's ass into the floor.", "$n must not like you because $e's stomping your ass into the floor.", "You strain your back, reach back, and ram your foot up your ass.", "$n strains $s back, reaches back, and rams $s foot up $s ass." }, { "stroke", "You stroke the air vaguely.", "$n makes vague stroking motions.", "You gently stroke $S inner thigh. $E inhales sharply.", "$N exhales very sharply suddenly.", "$n gently strokes your inner thigh, you inhale sharply.", "You are about to do something you'd rather not be caught doing.", NULL }, { "strut", "Strut your stuff.", "$n struts proudly.", "You strut to get $S attention.", "$n struts, hoping to get $N's attention.", "$n struts, hoping to get your attention.", "You strut to yourself, lost in your own world.", "$n struts to $mself, lost in $s own world." }, { "suffer", "No xp again? You suffer at the hands of fate.", "$n is suffering. Looks like $e can't seem to level.", "You tell $N how you suffer whenever you're away from $M.", "$n tells $N that $e suffers whenever they're apart.", "$n tells you that $e suffers whenever you're apart.", "No xp again? You suffer at the hands of fate.", "$n is suffering. Looks like $e can't seem to level." }, { "sulk", "You sulk.", "$n sulks in the corner.", NULL, NULL, NULL, NULL, NULL }, { "sweep", "You look at your empty arms and sigh.", "$n looks at $s empty arms and sighs.", "You sweep $N in your arms and kiss $M long and deeply.", "$n sweeps $N in $s arms and kisses $M long and deeply.", "$n sweeps you in $s arms and kisses you long and deeply.", "You look at your empty arms and sweep yourself for the kiss.", "$n looks at $s empty arms, sighs, and sweeps $mself in a long kiss." }, { "tap", "You tap your foot impatiently.", "$n taps $s foot impatiently.", "You tap your foot impatiently. Will $N ever be ready?", "$n taps $s foot impatiently as $e waits for $N.", "$n taps $s foot impatiently as $e waits for you.", "You tap yourself on the head. Ouch!", "$n taps $mself on the head." }, { "thank", "Thank you too.", NULL, "You thank $N heartily.", "$n thanks $N heartily.", "$n thanks you heartily.", "You thank yourself since nobody else wants to !", "$n thanks $mself since you won't." }, { "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 $M 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 }, { "tickle", "Whom do you want to tickle?", NULL, "You tickle $N.", "$n tickles $N.", "$n tickles you - hee hee hee.", "You tickle yourself, how funny!", "$n tickles $mself." }, { "tongue", "You slowly give your tongue a nice workout.", "$n gives $s tongue a nice workout... hrrmmm...", "Mmmm... You give $M a good workover with your tongue.", "$n slides $s tongue over $N's body...", "$n slides $s tongue all over your body.", "You slowly slide your tongue all over your body.", "$n slowly slides $s tongue all over $s body... ICK!" }, { "tummy", "You rub your tummy and wish you'd bought a pie at the bakery.", "$n rubs $s tummy and wishes $e'd bought a pie at the bakery.", "You rub your tummy and ask $M for some food.", "$n rubs $s tummy and asks $N for some food.", "$n rubs $s tummy and asks you for some food. Please?", "You rub your tummy and wish you'd bought a pie at the bakery.", "$n rubs $s tummy and wishes $e'd bought a pie at the bakery." }, { "twiddle", "You patiently twiddle your thumbs.", "$n patiently twiddles $s thumbs.", "You twiddle $S ears.", "$n twiddles $N's ears.", "$n twiddles your ears.", "You twiddle your ears like Dumbo.", "$n twiddles $s own ears like Dumbo." }, { "undress", "You start to undress in the shadows, waiting for somebody to notice.", "$n begins to undress in the shadows... Wow! that looks SEXY!", "You undress $M with your eyes... Kinky!", "You feel a raise in temperature as $n lusts after $N.", "Feeling exposed, you sense $n undressing you with $s eyes.", "A mirror would help better!", "You feel a raise in temerature as $n lusts on $mself." }, { "voodoo", "Bad juju like this has to be directed at a person.", "$n plays with $s voodoo dolls.", "You stare daggers at $N, jabbing pins into $S effigy.", "$N writhes in agony as $n jabs pins into a doll.", "You see $n jab pins in a doll, and suddenly you're in agony!", "You jab a pin into your own voodoo doll! AGONY!!!!!!", "$n jabs a pin into a doll, and $e suddenly writhes in agony!" }, { "wave", "You wave.", "$n waves happily.", "You wave goodbye to $N.", "$n waves goodbye to $N.", "$n waves goodbye to you. Have a good journey.", "Are you going on adventures as well?", "$n waves goodbye to $mself." }, { "whistle", "You whistle appreciatively.", "$n whistles appreciatively.", "You whistle at the sight of $M.", "$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." }, { "whip", "You crack your bullwhip menacingly.", "$n cracks a bullwhip menacingly.", "You flick your whip across $N's bare back.", "$n flicks $s whip across $N's bare back.", "$n flicks a whip across your back... the pain... the pleasure!", "You whip yourself into a frenzy!", "$n whips $mself into a frenzy!" }, { "whew", "What a relief.", "$n wipes $s brow and exclaims, 'Whew, that was close.'", NULL, NULL, NULL, NULL, NULL }, { "wiggle", "Your wiggle your bottom.", "$n wiggles $s bottom.", "You wiggle your bottom toward $M.", "$n wiggles $s bottom toward $N.", "$n wiggles $s bottom toward you.", "You wiggle about like a fish.", "$n wiggles about like a fish." }, { "wince", "You wince. Ouch!", "$n winces. Ouch!", "You wince at $M.", "$n winces at $N.", "$n winces at you.", "You wince at yourself. Ouch!", "$n winces at $mself. Ouch!" }, { "wink", "You wink suggestively.", "$n winks suggestively.", "You wink suggestively at $N.", "$n winks at $N.", "$n winks suggestively at you.", "You wink at yourself ?? - what are you up to ?", "$n winks at $mself - something strange is going on..." }, { "wrestle", "You look around for someone to wrestle with.", "$n looks around for someone to wrestle with.", "You wrestle $N to the floor and pin $M there.", "$n wrestles $N to the floor, pinning $M there.", "$n wrestles you to the floor and pins you there!", "You wrestle with your conciense.", "$n makes funny faces while wrestling with $s conscience." }, { "yawn", "You must be tired.", "$n yawns tiredly.", NULL, NULL, NULL, NULL, NULL }, { "", NULL, NULL, NULL, NULL, NULL, NULL, NULL } }; long long get_game_usec( void ) { struct timeval last_time; push_call("get_game_usec()"); gettimeofday(&last_time, NULL); pop_call(); return((long long) last_time.tv_usec + 1000000LL * (long long) 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; bool found = FALSE; long long 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_NPC(ch) && IS_SET(ch->act, PLR_REPEAT)) { if (ch->trust <= 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 jbuf[MAX_STRING_LENGTH]; 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; } for (fch = ch->in_room->first_person ; fch ; fch = fch->next_in_room) { if (fch->position <= POS_SLEEPING) { continue; } if (ch != fch && blocking(fch, ch)) { continue; } if (!can_understand(fch, ch, FALSE)) { continue; } sprintf( jbuf, "%s dumps '%s'", ch->name, argument); ch_printf(fch, "%s%s\n\r", get_color_string(fch, COLOR_SPEACH, VT102_DIM), jbuf); } 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}{128}-----------------------------[Page Buffer Canceled]-----------------------------\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; 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) { 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) { 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] != '-') { if (ch->pcdata->page_buf == NULL) { send_to_char_color("\n\r {128}(-) {058}Return\n\r", 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, "\n\r {128}(-) {058}Return\n\r"), 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; } /* Berserk players can only "kill" or "murder" */ if (IS_AFFECTED(ch, AFF2_BERSERK) && !IS_IMMORTAL(ch)) { if (!found || !IS_SET(cmd_table[cmd].flags, CMD_BERSERK)) { send_to_char("You're Berserk! Kill! Kill! Kill!\n\r", ch); pop_call(); return; } } /* Arrested players are very limited as well. (Presto 02/97) */ if (!IS_NPC(ch) && IS_SET(pvnum_index[ch->pcdata->pvnum]->flags, PVNUM_ARRESTED)) { if ((ch->pcdata->jailtime - (mud->current_time - ch->pcdata->jaildate)) <= 0) { auto_release(ch); pop_call(); return; } if (!found) { send_to_char("You're in jail!\n\r", ch); pop_call(); return; } if (strcasecmp(cmd_table[cmd].name, "say") && strcasecmp(cmd_table[cmd].name, "look") && strcasecmp(cmd_table[cmd].name, "quit") && strcasecmp(cmd_table[cmd].name, "refresh")) { send_to_char("You're in jail!\n\r", ch); pop_call(); return; } } if (!IS_NPC(ch)) { if (IS_SET(ch->act, PLR_AFK)) { REMOVE_BIT(ch->act, PLR_AFK); act( "$n is no longer afk.", ch, NULL, NULL, TO_ROOM ); } } } /* 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 object programs of unknown commands*/ if (!IS_NPC(ch) && ch->desc && !IS_SET(ch->pcdata->interp, INTERP_OPROG)) { OBJ_DATA *obj; OBJ_PROG *prg; for (obj = ch->in_room->first_content ; obj ; obj = obj->next_content) { if (IS_SET(obj->pIndexData->progtypes, TRIG_ROOM_UNKNOWN)) { for (prg = obj->pIndexData->first_prog ; prg ; prg = prg->next) { if (prg->trigger == TRIG_ROOM_UNKNOWN && !str_prefix(command, prg->unknown)) { if (number_percent() <= prg->percentage) { start_object_program( ch, obj, prg, argument); pop_call(); return; } } } } } for (obj = ch->first_carrying ; obj ; obj = obj->next_content) { if (obj->wear_loc != WEAR_NONE && IS_SET(obj->pIndexData->progtypes, TRIG_WEAR_UNKNOWN)) { for (prg = obj->pIndexData->first_prog ; prg ; prg = prg->next) { if (prg->trigger == TRIG_WEAR_UNKNOWN && !str_prefix(command, prg->unknown)) { if (number_percent() <= prg->percentage) { start_object_program( ch, obj, prg, argument); pop_call(); return; } } } } if (IS_SET(obj->pIndexData->progtypes, TRIG_UNKNOWN)) { for (prg = obj->pIndexData->first_prog ; prg ; prg = prg->next) { if (prg->trigger == TRIG_UNKNOWN && !str_prefix(command, prg->unknown)) { if (number_percent() <= prg->percentage) { start_object_program( ch, obj, prg, argument); pop_call(); return; } } } } } } if (!check_social(ch, command, argument) && strcasecmp(command, "!") && strcasecmp( command, ".")) { ch_printf(ch, "Huh? '%s' is not a command.\n\r", command); /* Pets limitations - Scandum */ if (IS_NPC(ch) && IS_AFFECTED(ch, AFF_CHARM) && 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->fighting != NULL) { if (ch->fighting->who->in_room != ch->in_room) { stop_fighting(ch,FALSE); update_pos( ch ); } } /* 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: case POS_INCAP: send_to_char( "You are hurt far too bad for that.\n\r", ch ); break; case POS_STUNNED: send_to_char( "You are too stunned to do that.\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( "Nah... You feel too relaxed...\n\r", ch); break; case POS_SITTING: send_to_char( "Nah... You are too comfortable...\n\r", ch); break; case POS_FIGHTING: send_to_char( "No way! You are still fighting!\n\r", ch); break; } pop_call(); return; } /* Check for objects to respond to command in room */ if (!IS_NPC(ch) && ch->desc && !IS_SET(ch->pcdata->interp, INTERP_OPROG) && !IS_SET(ch->pcdata->interp, INTERP_FORCE)) { OBJ_DATA *obj; OBJ_PROG *prg; for (obj = ch->in_room->first_content ; obj ; obj = obj->next_content) { if (IS_SET(obj->pIndexData->progtypes, TRIG_ROOM_COMMAND)) { for (prg = obj->pIndexData->first_prog ; prg ; prg = prg->next) { if (prg->trigger == TRIG_ROOM_COMMAND && prg->cmd == cmd) { if (number_percent() <= prg->percentage) { start_object_program(ch, obj, prg, argument); pop_call(); return; } } } } } } /* Decrement movement for exertion cmds */ if (cmd_gsn[cmd] != -1 && !IS_IMMORTAL(ch)) { if (ch->move < skill_table[cmd_gsn[cmd]].min_mana) { send_to_char( "You are too tired to do that!\n\r", ch ); pop_call(); return; } else { ch->move -= skill_table[cmd_gsn[cmd]].min_mana; } } /* Check for object programs */ if (!IS_NPC(ch) && ch->desc && !IS_SET(ch->pcdata->interp, INTERP_OPROG) && !IS_SET(ch->pcdata->interp, INTERP_FORCE)) { OBJ_DATA *obj; OBJ_PROG *prg; for (obj = ch->first_carrying ; obj ; obj = obj->next_content) { if (obj->wear_loc != WEAR_NONE && IS_SET(obj->pIndexData->progtypes, TRIG_WEAR_COMMAND)) { for (prg = obj->pIndexData->first_prog ; prg ; prg = prg->next) { if (prg->trigger == TRIG_WEAR_COMMAND && prg->cmd == cmd) { if (number_percent() <= prg->percentage) { start_object_program( ch, obj, prg, argument); pop_call(); return; } } } } if (IS_SET(obj->pIndexData->progtypes, TRIG_COMMAND)) { for (prg = obj->pIndexData->first_prog ; prg ; prg = prg->next) { if (prg->trigger == TRIG_COMMAND && prg->cmd == cmd) { if (number_percent() <= prg->percentage) { start_object_program( ch, obj, prg, 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(ch, "You cannot use quit commands while editing.\n\r"); pop_call(); return; } } (*cmd_table[cmd].do_fun) ( ch, argument ); 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(ch, "(%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 bad 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 (arg == NULL || arg[0] == '\0') { 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)) { switch (number_bits(2)) { case 0: check_social_fast(victim, cmd, ch->name); break; case 1: check_social(victim, "slap", ch->name); break; case 2: check_social(victim, "ponder", ch->name); break; } } } } pop_call(); return TRUE; } /* Return true if an argument is completely numeric. */ bool is_number( char *argument ) { push_call("is_number(%p)",argument); if (*argument == '\0') { pop_call(); return FALSE; } for ( ; *argument != '\0'; argument++ ) { if (!isdigit(*argument) && (*argument != '-') && (*argument != '+')) { pop_call(); return FALSE; } } pop_call(); return TRUE; } bool is_number_argument( char *argument ) { push_call("is_number_argument(%p)",argument); if (*argument != '\0') { for ( ; *argument != '\0'; argument++ ) { if (!isdigit(*argument) && *argument != '-' && *argument != '+' && *argument != '.') { pop_call(); return FALSE; } } } pop_call(); return TRUE; } /* Given a string like 14.foo, Return 14 and 'foo' */ int number_argument( char *argument, char *arg ) { char *pdot; int number; push_call("number_argument(%p,%p)",argument,arg); if ((pdot = strstr(argument, ".")) != NULL) { *pdot = '\0'; number = atol(argument); *pdot = '.'; strcpy(arg, pdot+1); pop_call(); return number; } strcpy(arg, argument); pop_call(); return 1; } /* Pick off one argument from a string and Return the rest. Understands quotes, lowercases. */ char *one_argument( char *argument, char *arg_first ) { char cEnd; push_call("one_argument(%p,%p)",argument,arg_first); if (argument == NULL) { log_string("one_argument: argument == NULL"); dump_stack(); pop_call(); return NULL; } while (*argument == ' ' || *argument == '\n' || *argument == '\r' || *argument == 27) { argument++; } cEnd = ' '; if (*argument == '\'' || *argument == '"') { cEnd = *argument++; } while (*argument != '\0' && *argument != '\n' && *argument != '\r') { if (*argument == cEnd) { argument++; break; } *arg_first = tolower(*argument); arg_first++; argument++; } *arg_first = '\0'; while (*argument == ' ' || *argument == '\n' || *argument == '\r' || *argument == 27) { argument++; } pop_call(); return argument; } char *one_argument_nolower( char *argument, char *arg_first ) { char cEnd; push_call("one_argument(%p,%p)",argument,arg_first); if (argument == NULL) { log_string("one_argument_nolower(), argument is NULL"); pop_call(); return NULL; } while ( *argument==' ' || *argument=='\n' || *argument=='\r' || *argument==27) { argument++; } cEnd = ' '; if ( *argument == '\'' || *argument == '"' ) { cEnd = *argument++; } while ( *argument != '\0' && *argument != '\n' && *argument != '\r' ) { if ( *argument == cEnd ) { argument++; break; } *arg_first = *argument; arg_first++; argument++; } *arg_first = '\0'; while ( *argument==' ' || *argument=='\n' || *argument=='\r' || *argument==27) { argument++; } pop_call(); return argument; } 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 start_object_program ( CHAR_DATA * ch, OBJ_DATA *obj, OBJ_PROG *prg, char *argument) { push_call("start_object_program(%p,%p,%p,%p)",ch,obj,prg,argument); if (ch->desc == NULL || ch->desc->character != ch || IS_NPC(ch)) { pop_call(); return; } /* No lock-ups here including wait oriented char lock-ups */ if (IS_SET(ch->pcdata->interp, INTERP_OPROG) || ch->wait > 0) { pop_call(); return; } if (ch->desc->connected == CON_EDITING || IS_SET(ch->pcdata->interp, INTERP_DUMP)) { pop_call(); return; } SET_BIT(ch->pcdata->interp, INTERP_OPROG); object_program( ch, obj, prg, argument ); REMOVE_BIT(ch->pcdata->interp, INTERP_OPROG); pop_call(); return; } void check_object_prog( CHAR_DATA *ch, OBJ_DATA *obj, OBJ_PROG *prg, char *argument, int if_val ) { push_call("check_object_prog(%p,%p,%p,%p,%p)",ch,obj,prg,argument,if_val); switch( prg->if_symbol ) { case '<': if (if_val < prg->if_value) { object_program( ch, obj, prg->true, argument ); } else { object_program( ch, obj, prg->false , argument); } pop_call(); return; case '>': if (if_val > prg->if_value) { object_program( ch, obj, prg->true, argument ); } else { object_program( ch, obj, prg->false , argument); } pop_call(); return; case '=': if (if_val == prg->if_value) { object_program( ch, obj, prg->true, argument ); } else { object_program( ch, obj, prg->false , argument); } pop_call(); return; case '!': if (if_val != prg->if_value) { object_program( ch, obj, prg->true, argument ); } else { object_program( ch, obj, prg->false , argument); } pop_call(); return; } pop_call(); return; } void object_program ( CHAR_DATA * ch, OBJ_DATA *obj, OBJ_PROG *prg, char *argument) { OBJ_DATA *obj2; int if_val; int cnt; char buf[MAX_STRING_LENGTH], buf2[MAX_STRING_LENGTH]; char *pt, pb[2]; char * const he_she [] = { "it", "he", "she" }; char * const him_her [] = { "it", "him", "her" }; char * const his_her [] = { "its", "his", "her" }; push_call("object_program(%p,%p,%p,%p)",ch,obj,prg,argument); if (prg == NULL || obj == NULL || ch == NULL) { pop_call(); return; } if (ch->desc == NULL || ch->desc->character != ch) { pop_call(); return; } if_val = 0; switch (prg->obj_command) { case OPROG_ECHO: if (!str_suffix("\n\r", prg->argument)) { ch_printf_color(ch, "%s", ansi_justify(prg->argument, get_page_width(ch))); } else { ch_printf_color(ch, "%s\n\r", ansi_justify(prg->argument, get_page_width(ch))); } object_program(ch, obj, prg->true , argument); pop_call(); return; case OPROG_IF_HAS_OBJECT: for (obj2 = ch->first_carrying ; obj2 ; obj2 = obj2->next_content) { if (obj2->pIndexData->vnum == prg->if_value) { break; } } if (obj2) { object_program(ch, obj, prg->true, argument); } else { object_program(ch, obj, prg->false, argument); } pop_call(); return; case OPROG_JUNK: junk_obj(obj); pop_call(); return; case OPROG_GOD_COMMAND: case OPROG_GOD_ARGUMENT: case OPROG_COMMAND: case OPROG_ARGUMENT: pb[1] = '\0'; buf[0] = '\0'; for (pt = prg->argument ; *pt != '\0' ; pt++) { if (*pt != '$') { *pb = *pt; strcat( buf, pb ); } else { pt++; switch (*pt) { case 'f': if (who_fighting(ch)) { one_argument_nolower(ch->fighting->who->name, buf2); strcat(buf, buf2); } break; case 'F': if (who_fighting(ch)) { strcat(buf, get_name(ch->fighting->who)); } break; case 'i': strcat(buf, ch->name); break; case ' ': cat_sprintf(buf, "%s ", ch->name); break; case 'I': strcat(buf, get_name(ch)); break; case 'e': strcat(buf, he_she [URANGE(0, ch->sex, 2)]); break; case 'm': strcat(buf, him_her[URANGE(0, ch->sex, 2)]); break; case 's': strcat(buf, his_her[URANGE(0, ch->sex, 2)]); break; case 'o': strcat(buf, obj->short_descr); break; case '/': strcat(buf, "\n\r"); break; case '$': strcat(buf, "$" ); break; default: cat_sprintf(buf, "%s ", ch->name); log_printf( "[%u] Bad Oprog $var: %c", obj->pIndexData->vnum, *pt); break; } } } switch (prg->obj_command) { case OPROG_GOD_COMMAND: case OPROG_GOD_ARGUMENT: ch->trust = MAX_LEVEL-1; break; } for (buf2[0] = '\0', pt = buf ; *pt != '\0' ; pt++) { if (*pt == '\n') { continue; } if (*pt != '&' && *pt != '\r') { *pb = *pt; strcat( buf2, pb); } else if (*(pt+1) != '\0') { interpret(ch, buf2); buf2[0] = '\0'; } } switch (prg->obj_command) { case OPROG_GOD_ARGUMENT: case OPROG_ARGUMENT: cat_sprintf(buf2, " %s", argument); break; } interpret(ch, buf2); ch->trust = ch->level; object_program(ch, obj, prg->true, argument); pop_call(); return; case OPROG_APPLY: switch (prg->if_check) { case 1: ch->hit = UMIN(ch->max_hit, ch->hit + prg->if_value); if (ch->hit < 0 && ch->fighting == NULL) { ch->trust = ch->level; raw_kill( ch ); } break; case 2: ch->move = URANGE(0, ch->move + prg->if_value, ch->max_move); break; case 3: ch->mana = URANGE(0, ch->mana + prg->if_value, ch->max_mana); break; case 4: ch->alignment = URANGE(-1000, ch->alignment + prg->if_value, 1000); check_zap(ch, TRUE); } object_program(ch, obj, prg->true, argument); break; case OPROG_QUEST_ADD: cnt = get_quest_bits( obj->obj_quest, prg->quest_offset, prg->quest_bits); cnt += prg->if_value; set_quest_bits( &obj->obj_quest, prg->quest_offset, prg->quest_bits, cnt); SET_BIT(obj->extra_flags, ITEM_MODIFIED); object_program( ch, obj, prg->true, argument ); break; case OPROG_QUEST_SET: set_quest_bits( &obj->obj_quest, prg->quest_offset, prg->quest_bits, prg->if_value); SET_BIT(obj->extra_flags, ITEM_MODIFIED); object_program( ch, obj, prg->true, argument ); break; case OPROG_IF: switch( prg->if_check ) { case OIF_USER_CLASS: if_val = ch->class; break; case OIF_USER_POSITION: if_val = ch->position; break; case OIF_USER_GOLD: if_val = ch->gold; break; case OIF_USER_AREA: if_val = ch->in_room->area->low_r_vnum; break; case OIF_USER_ROOM_NUM: if_val = ch->in_room->vnum; break; case OIF_RANDOM_PERCENT: if_val = number_percent(); break; case OIF_USER_WHICH_GOD: if_val = which_god(ch); break; case OIF_USER_ALIGNMENT: if_val = ch->alignment; break; case OIF_USER_LEVEL: if_val = ch->level; break; case OIF_USER_RACE: if_val = ch->race; break; case OIF_USER_SEX: if_val = URANGE(0, ch->sex, 2); break; case OIF_WEAR_LOC: if_val = obj->wear_loc; break; case OIF_USER_PERCENT_MOVE: if_val = ch->move*100/UMAX(1, ch->max_move); break; case OIF_USER_PERCENT_HITPT: if_val = ch->hit*100/UMAX(1, ch->max_hit); break; case OIF_USER_PERCENT_MANA: if_val = ch->mana*100/UMAX(1, ch->max_mana); break; case OIF_MCLASS_WARRIOR: case OIF_MCLASS_GLADIATOR: case OIF_MCLASS_MARAUDER: case OIF_MCLASS_NINJA: case OIF_MCLASS_DRUID: case OIF_MCLASS_SORCERER: case OIF_MCLASS_SHAMAN: case OIF_MCLASS_WARLOCK: if_val = ch->pcdata->mclass[prg->if_check]; break; case OIF_USER_SECTOR: if_val = ch->in_room->sector_type; break; case OIF_TIME_OF_DAY: if_val = mud->time_info->hour; break; case OIF_WEATHER: if_val = (!IS_OUTSIDE(ch) || NO_WEATHER_SECT(ch->in_room->sector_type)) ? -1 : ch->in_room->area->weather_info->sky; break; case OIF_USER_FIGHTING: if_val = (who_fighting(ch) != NULL); break; } check_object_prog(ch, obj, prg, argument, if_val); break; case OPROG_OBJECT_QUEST_IF: if_val = get_quest_bits( obj->obj_quest, prg->quest_offset, prg->quest_bits ); check_object_prog(ch, obj, prg, argument, if_val); break; case OPROG_PLAYER_QUEST_IF: if_val = get_quest_bits(ch->pcdata->quest[obj->pIndexData->area->low_r_vnum/100], prg->quest_offset, prg->quest_bits ); check_object_prog(ch, obj, prg, argument, if_val); break; default: log_printf("object_progam, unknown trigger: %d", prg->obj_command); break; } 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; }