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