/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * Envy Diku Mud improvements copyright (C) 1994 by Michael Quan, David * * Love, Guilherme 'Willie' Arnold, and Mitchell Tse. * * * * In order to use any part of this Envy Diku Mud, you must comply with * * the original Diku license in 'license.doc', the Merc license in * * 'license.txt', as well as the Envy license in 'license.nvy'. * * In particular, you may not remove either of these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ #define unix 1 #if defined( macintosh ) #include <types.h> #else #include <sys/types.h> #endif #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" bool check_social args( ( CHAR_DATA *ch, char *command, char *argument ) ); bool check_alias args( ( CHAR_DATA *ch, char *command, char *argument ) ); void add_alias args( ( CHAR_DATA *ch, ALIAS_DATA *pAl, char *old, char *new ) ); bool can_use_cmd args( ( int cmd, CHAR_DATA *ch, int trust ) ); /* * Command logging types. */ #define LOG_NORMAL 0 #define LOG_ALWAYS 1 #define LOG_NEVER 2 /* * Altrag was here. */ #define LOG_BUILD 3 /* * God Levels - Check them out in merc.h */ #define L_HER LEVEL_HERO /* * Log-all switch. */ bool fLogAll = FALSE; /* * Command table. */ struct cmd_type cmd_table [ ] = { /* * Common movement commands. */ { "north", do_north, POS_STANDING, 0, LOG_NORMAL }, { "east", do_east, POS_STANDING, 0, LOG_NORMAL }, { "south", do_south, POS_STANDING, 0, LOG_NORMAL }, { "west", do_west, POS_STANDING, 0, LOG_NORMAL }, { "up", do_up, POS_STANDING, 0, LOG_NORMAL }, { "down", do_down, POS_STANDING, 0, LOG_NORMAL }, /* XOR */ { "push", do_push, POS_STANDING, 0, LOG_NORMAL }, { "drag", do_drag, POS_STANDING, 0, LOG_NORMAL }, /* * Common other commands. * Placed here so one and two letter abbreviations work. */ { "accept", do_accept, POS_STANDING, 0, LOG_NORMAL }, { "buy", do_buy, POS_STANDING, 0, LOG_NORMAL }, { "declare", do_declare, POS_STANDING, 0, LOG_NORMAL }, { "cast", do_cast, POS_FIGHTING, 0, LOG_NORMAL }, { "challenge", do_challenge, POS_STANDING, 0, LOG_NORMAL }, { "deposit", do_deposit, POS_RESTING, 0, LOG_NORMAL }, { "dual", do_dual, POS_RESTING, 0, LOG_NORMAL }, { "exits", do_exits, POS_RESTING, 0, LOG_NORMAL }, { "flip", do_flip, POS_FIGHTING, 0, LOG_NORMAL }, { "get", do_get, POS_RESTING, 0, LOG_NORMAL }, { "palm", do_palm, POS_RESTING, 0, LOG_NORMAL }, { "inventory", do_inventory, POS_DEAD, 0, LOG_NORMAL }, { "invoke", do_invoke, POS_RESTING, 0, LOG_NORMAL }, { "kill", do_kill, POS_FIGHTING, 0, LOG_NORMAL }, { "look", do_look, POS_RESTING, 0, LOG_NORMAL }, { "lure", do_lure, POS_FIGHTING, 0, LOG_NORMAL }, { "order", do_order, POS_RESTING, 0, LOG_NORMAL }, { "rest", do_rest, POS_SLEEPING, 0, LOG_NORMAL }, { "repair", do_repair, POS_RESTING, 0, LOG_NORMAL }, { "sing", do_cast, POS_FIGHTING, 0, LOG_NORMAL }, { "sleep", do_sleep, POS_SLEEPING, 0, LOG_NORMAL }, { "stand", do_stand, POS_SLEEPING, 0, LOG_NORMAL }, { "tell", do_tell, POS_RESTING, 0, LOG_NORMAL }, { "track", do_track, POS_STANDING, 0, LOG_NORMAL }, { "war ", do_war, POS_STANDING, 0, LOG_NORMAL }, { "wield", do_wear, POS_RESTING, 0, LOG_NORMAL }, { "wizhelp", do_wizhelp, POS_DEAD, 0, LOG_NORMAL }, { "mpasound", do_mpasound, POS_DEAD, 0, LOG_NORMAL }, { "mpjunk", do_mpjunk, POS_DEAD, 0, LOG_NORMAL }, { "mpecho", do_mpecho, POS_DEAD, 0, LOG_NORMAL }, { "mpechoat", do_mpechoat, POS_DEAD, 0, LOG_NORMAL }, { "mpechoaround", do_mpechoaround,POS_DEAD, 0, LOG_NORMAL }, { "mpkill", do_mpkill ,POS_DEAD, 0, LOG_NORMAL }, { "mpmload", do_mpmload ,POS_DEAD, 0, LOG_NORMAL }, { "mpoload", do_mpoload ,POS_DEAD, 0, LOG_NORMAL }, { "mppurge", do_mppurge ,POS_DEAD, 0, LOG_NORMAL }, { "mpgoto", do_mpgoto ,POS_DEAD, 0, LOG_NORMAL }, { "mpat", do_mpat ,POS_DEAD, 0, LOG_NORMAL }, { "mptransfer", do_mptransfer ,POS_DEAD, 0, LOG_NORMAL }, { "mpforce", do_mpforce ,POS_DEAD, 0, LOG_NORMAL }, { "mpteleport", do_mpteleport, POS_DEAD, 0, LOG_NORMAL }, /* * Informational commands. */ { "affected", do_affectedby, POS_DEAD, 0, LOG_NORMAL }, { "raffected", do_raffect, POS_DEAD, 0, LOG_NORMAL }, { "areas", do_areas, POS_DEAD, 0, LOG_NORMAL }, { "bug", do_bug, POS_DEAD, 0, LOG_NORMAL }, { "commands", do_commands, POS_DEAD, 0, LOG_NORMAL }, { "compare", do_compare, POS_RESTING, 0, LOG_NORMAL }, { "consider", do_consider, POS_RESTING, 0, LOG_NORMAL }, { "credits", do_credits, POS_DEAD, 0, LOG_NORMAL }, { "enter", do_enter, POS_STANDING, 0, LOG_NORMAL }, { "equipment", do_equipment, POS_DEAD, 0, LOG_NORMAL }, { "examine", do_examine, POS_RESTING, 0, LOG_NORMAL }, { "finger", do_finger, POS_DEAD, 0, LOG_ALWAYS }, { "forge", do_forge, POS_STANDING, 30, LOG_ALWAYS }, { "help", do_help, POS_DEAD, 0, LOG_NORMAL }, { "idea", do_idea, POS_DEAD, 0, LOG_NORMAL }, { "report", do_report, POS_DEAD, 0, LOG_NORMAL }, { "pagelength", do_pagelen, POS_DEAD, 0, LOG_NORMAL }, { "read", do_look, POS_RESTING, 0, LOG_NORMAL }, { "scan", do_scan, POS_STANDING, 0, LOG_NORMAL }, { "score", do_score, POS_DEAD, 0, LOG_NORMAL }, { "scent", do_scent, POS_RESTING, 0, LOG_NORMAL }, { "slist", do_slist, POS_DEAD, 0, LOG_NORMAL }, { "socials", do_socials, POS_DEAD, 0, LOG_NORMAL }, { "time", do_time, POS_DEAD, 0, LOG_NORMAL }, { "typo", do_typo, POS_DEAD, 0, LOG_NORMAL }, { "weather", do_weather, POS_RESTING, 0, LOG_NORMAL }, { "worth", do_worth, POS_DEAD, 0, LOG_NORMAL }, { "who", do_who, POS_DEAD, 0, LOG_NORMAL }, { "wizlist", do_immlist, POS_DEAD, 0, LOG_NORMAL }, { "champlist", do_champlist, POS_DEAD, 0, LOG_NORMAL }, { "newbie", do_newbie, POS_DEAD, 0, LOG_NORMAL }, /* * Clan commands. */ { "induct", do_induct, POS_STANDING, 0, LOG_ALWAYS }, { "outcast", do_outcast, POS_STANDING, 0, LOG_ALWAYS }, { "setlev", do_setlev, POS_STANDING, 0, LOG_ALWAYS }, { "cinfo", do_cinfo, POS_DEAD, 0, LOG_NORMAL }, /* { "assasinate", do_assasinate, POS_STANDING, 30, LOG_ALWAYS },*/ { "farsight", do_farsight, POS_SLEEPING, 30, LOG_NORMAL }, { "cquest", do_clanquest, POS_DEAD, 0, LOG_NORMAL }, /* * Guild commands */ { "guild", do_guild, POS_DEAD, 0, LOG_ALWAYS }, { "unguild", do_unguild, POS_DEAD, 0, LOG_ALWAYS }, { "setrank", do_setrank, POS_DEAD, 0, LOG_ALWAYS }, { "gdt", do_gdt, POS_SLEEPING, 0, LOG_NORMAL }, { "guildtalk", do_gdt, POS_SLEEPING, 0, LOG_NORMAL }, { "guilds", do_guilds, POS_DEAD, 0, LOG_NORMAL }, /* * Configuration commands. */ { "alias", do_alias, POS_DEAD, 0, LOG_NORMAL }, { "auto", do_auto, POS_DEAD, 0, LOG_NORMAL }, { "autoexit", do_autoexit, POS_DEAD, 0, LOG_NORMAL }, { "autoloot", do_autoloot, POS_DEAD, 0, LOG_NORMAL }, { "autocoins", do_autocoins, POS_DEAD, 0, LOG_NORMAL }, { "autosac", do_autosac, POS_DEAD, 0, LOG_NORMAL }, { "blank", do_blank, POS_DEAD, 0, LOG_NORMAL }, { "brief", do_brief, POS_DEAD, 0, LOG_NORMAL }, { "channels", do_channels, POS_DEAD, 0, LOG_NORMAL }, { "combine", do_combine, POS_DEAD, 0, LOG_NORMAL }, { "autosplit", do_autosplit, POS_DEAD, 0, LOG_NORMAL }, { "ansi", do_ansi, POS_DEAD, 0, LOG_NORMAL }, { "fullname", do_fullname, POS_DEAD, 0, LOG_NORMAL }, { "combat", do_combat, POS_DEAD, 0, LOG_NORMAL }, { "telnetga", do_telnetga, POS_DEAD, 0, LOG_NORMAL }, { "config", do_config, POS_DEAD, 0, LOG_NORMAL }, { "description", do_description, POS_DEAD, 0, LOG_NORMAL }, { "email", do_email, POS_DEAD, 0, LOG_NORMAL }, { "password", do_password, POS_DEAD, 0, LOG_NEVER }, { "plan", do_plan, POS_DEAD, 0, LOG_NORMAL }, { "pr", do_practice, POS_SLEEPING, 0, LOG_NORMAL }, { "prompt", do_prompt, POS_DEAD, 0, LOG_NORMAL }, { "title", do_title, POS_DEAD, 0, LOG_NORMAL }, { "wimpy", do_wimpy, POS_DEAD, 0, LOG_NORMAL }, /* { "qjoin", do_questflag, POS_DEAD, 0,LOG_NORMAL },*/ /* * Communication commands. */ { "answer", do_answer, POS_SLEEPING, 0, LOG_NORMAL }, { "auction", do_auction, POS_RESTING, 0, LOG_NORMAL }, { "bid", do_bid, POS_RESTING, 0, LOG_NORMAL }, { "chat", do_chat, POS_SLEEPING, 0, LOG_NORMAL }, { ".", do_chat, POS_SLEEPING, 0, LOG_NORMAL }, { "emote", do_emote, POS_RESTING, 0, LOG_NORMAL }, { ",", do_emote, POS_RESTING, 0, LOG_NORMAL }, { "gtell", do_gtell, POS_DEAD, 0, LOG_NORMAL }, { ";", do_gtell, POS_DEAD, 0, LOG_NORMAL }, { "music", do_music, POS_SLEEPING, 0, LOG_NORMAL }, { "note", do_note, POS_SLEEPING, 0, LOG_NORMAL }, #if 0 { "pose", do_pose, POS_RESTING, 0, LOG_NORMAL }, #endif { "quest", do_quest, POS_RESTING, 0, LOG_NORMAL }, { "question", do_question, POS_SLEEPING, 0, LOG_NORMAL }, { "reply", do_reply, POS_SLEEPING, 0, LOG_NORMAL }, { "say", do_say, POS_RESTING, 0, LOG_NORMAL }, { "'", do_say, POS_RESTING, 0, LOG_NORMAL }, { "shout", do_shout, POS_RESTING, 3, LOG_NORMAL }, { "yell", do_yell, POS_RESTING, 0, LOG_NORMAL }, { "clantalk", do_clan, POS_DEAD, 0, LOG_NORMAL }, { "clans", do_clans, POS_DEAD, 0, LOG_NORMAL }, { "class", do_class, POS_DEAD, 0, LOG_NORMAL }, { ">", do_class, POS_DEAD, 0, LOG_NORMAL }, { "ooc", do_ooc, POS_DEAD, 0, LOG_NORMAL }, { "]", do_ooc, POS_DEAD, 0, LOG_NORMAL }, { "guard", do_guard, POS_DEAD, L_CON, LOG_NORMAL }, { "[", do_guard, POS_DEAD, L_CON, LOG_NORMAL }, { "conference", do_conference, POS_DEAD, L_IMP, LOG_ALWAYS }, { "info", do_info, POS_DEAD, L_DIR, LOG_ALWAYS }, { "vent", do_vent, POS_DEAD, 0, LOG_NORMAL }, { "/", do_vent, POS_DEAD, 0, LOG_NORMAL }, { "clear_alias", do_clear, POS_DEAD, 0, LOG_NORMAL }, /* * Object manipulation commands. */ { "brandish", do_brandish, POS_RESTING, 0, LOG_NORMAL }, { "close", do_close, POS_RESTING, 0, LOG_NORMAL }, { "donate", do_donate, POS_RESTING, 0, LOG_NORMAL }, { "drink", do_drink, POS_RESTING, 0, LOG_NORMAL }, { "drop", do_drop, POS_RESTING, 0, LOG_NORMAL }, { "eat", do_eat, POS_RESTING, 0, LOG_NORMAL }, { "fill", do_fill, POS_RESTING, 0, LOG_NORMAL }, { "give", do_give, POS_RESTING, 0, LOG_NORMAL }, { "hold", do_wear, POS_RESTING, 0, LOG_NORMAL }, { "join", do_join, POS_RESTING, 0, LOG_NORMAL }, { "list", do_list, POS_STANDING, 0, LOG_NORMAL }, { "lock", do_lock, POS_RESTING, 0, LOG_NORMAL }, { "open", do_open, POS_RESTING, 0, LOG_NORMAL }, { "patch", do_patch, POS_STANDING, 26, LOG_NORMAL }, { "pick", do_pick, POS_RESTING, 0, LOG_NORMAL }, { "put", do_put, POS_RESTING, 0, LOG_NORMAL }, { "quaff", do_quaff, POS_RESTING, 0, LOG_NORMAL }, { "raise", do_raise, POS_STANDING, 0, LOG_NORMAL }, { "recall", do_lowrecall, POS_STANDING, 0, LOG_NORMAL }, { "recite", do_recite, POS_RESTING, 0, LOG_NORMAL }, { "remove", do_remove, POS_RESTING, 0, LOG_NORMAL }, { "remor", do_remor, POS_STANDING, 0, LOG_NORMAL }, { "remort", do_remort, POS_STANDING, 0, LOG_NORMAL }, { "retrieve", do_retrieve, POS_STANDING, 2, LOG_NORMAL }, { "sell", do_sell, POS_STANDING, 0, LOG_NORMAL }, { "take", do_get, POS_RESTING, 0, LOG_NORMAL }, { "sacrifice", do_sacrifice, POS_RESTING, 0, LOG_NORMAL }, { "separate", do_separate, POS_RESTING, 0, LOG_NORMAL }, { "store", do_store, POS_STANDING, 2, LOG_NORMAL }, { "unlock", do_unlock, POS_RESTING, 0, LOG_NORMAL }, { "value", do_value, POS_STANDING, 0, LOG_NORMAL }, { "wear", do_wear, POS_RESTING, 0, LOG_NORMAL }, { "zap", do_zap, POS_RESTING, 0, LOG_NORMAL }, { "stare", do_stare, POS_RESTING, 0, LOG_NORMAL }, { "alchemy", do_alchemy, POS_RESTING, 0, LOG_ALWAYS }, { "antidote", do_antidote, POS_RESTING, 0, LOG_NORMAL }, { "scribe", do_scribe, POS_RESTING, 0, LOG_ALWAYS }, { "gravebind", do_gravebind, POS_RESTING, 0, LOG_NORMAL }, { "flamehand", do_flamehand, POS_RESTING, 0, LOG_NORMAL }, { "frosthand", do_frosthand, POS_RESTING, 0, LOG_NORMAL }, { "chaoshand", do_chaoshand, POS_RESTING, 0, LOG_NORMAL }, /* * Combat commands. */ { "backstab", do_backstab, POS_STANDING, 0, LOG_NORMAL }, { "bladepalm", do_bladepalm, POS_FIGHTING, 0, LOG_NORMAL }, { "bs", do_backstab, POS_STANDING, 0, LOG_NORMAL }, { "df", do_drowfire, POS_FIGHTING, 0, LOG_NORMAL }, { "disarm", do_disarm, POS_FIGHTING, 0, LOG_NORMAL }, { "flee", do_flee, POS_FIGHTING, 0, LOG_NORMAL }, { "retreat", do_retreat, POS_FIGHTING, 0, LOG_NORMAL }, { "flury", do_flury, POS_FIGHTING, 0, LOG_NORMAL }, { "kick", do_kick, POS_FIGHTING, 0, LOG_NORMAL }, { "high kick", do_high_kick, POS_FIGHTING, 0, LOG_NORMAL }, { "jump kick", do_jump_kick, POS_FIGHTING, 0, LOG_NORMAL }, { "spin kick", do_spin_kick, POS_FIGHTING, 0, LOG_NORMAL }, { "feed", do_feed, POS_FIGHTING, 0, LOG_NORMAL }, { "flying kick", do_flyingkick, POS_FIGHTING, 0, LOG_NORMAL }, { "punch", do_punch, POS_FIGHTING, 0, LOG_NORMAL }, { "jab punch", do_jab_punch, POS_FIGHTING, 0, LOG_NORMAL }, { "kidney punch", do_kidney_punch,POS_FIGHTING, 0, LOG_NORMAL }, { "cross punch", do_cross_punch, POS_FIGHTING, 0, LOG_NORMAL }, { "roundhouse punch",do_roundhouse_punch,POS_FIGHTING,0, LOG_NORMAL }, { "uppercut punch", do_uppercut_punch,POS_FIGHTING, 0, LOG_NORMAL }, { "murde", do_murde, POS_FIGHTING, 5, LOG_NORMAL }, { "murder", do_murder, POS_FIGHTING, 5, LOG_ALWAYS }, { "nerve", do_nerve, POS_FIGHTING, 0, LOG_NORMAL }, { "rescue", do_rescue, POS_FIGHTING, 0, LOG_NORMAL }, { "throw", do_throw, POS_STANDING, 0, LOG_NORMAL }, { "trip", do_trip, POS_FIGHTING, 0, LOG_NORMAL }, { "triple", do_triple, POS_STANDING, 0, LOG_NORMAL }, { "drain life", do_drain_life, POS_FIGHTING, 0, LOG_NORMAL }, { "mental drain", do_mental_drain,POS_FIGHTING, 0, LOG_NORMAL }, { "shriek", do_shriek, POS_FIGHTING, 0, LOG_NORMAL }, { "snatch", do_snatch, POS_FIGHTING, 0, LOG_NORMAL }, { "spit", do_spit, POS_FIGHTING, 0, LOG_NORMAL }, { "stun", do_stun, POS_FIGHTING, 0, LOG_NORMAL }, { "berserk", do_berserk, POS_FIGHTING, 0, LOG_NORMAL }, { "soulstrike", do_soulstrike, POS_FIGHTING, 0, LOG_NORMAL }, { "multiburst", do_multiburst, POS_FIGHTING, 0, LOG_NORMAL }, { "bite", do_bite, POS_FIGHTING, 0, LOG_NORMAL }, { "howl of fear", do_howl_of_fear,POS_FIGHTING, 0, LOG_NORMAL }, { "frenzy", do_frenzy, POS_FIGHTING, 0, LOG_NORMAL }, /* * Miscellaneous commands. */ { "account", do_account, POS_RESTING, 0, LOG_NORMAL }, { "adrenaline rush",do_rush, POS_RESTING, 0, LOG_NORMAL }, { "afk", do_afk, POS_DEAD, 0, LOG_NORMAL }, { "afkmes", do_afkmes, POS_DEAD, 0, LOG_NORMAL }, { "bash door", do_bash, POS_STANDING, 0, LOG_NORMAL }, { "chameleon power",do_chameleon, POS_STANDING, 0, LOG_NORMAL }, { "follow", do_follow, POS_RESTING, 0, LOG_NORMAL }, { "group", do_group, POS_SLEEPING, 0, LOG_NORMAL }, { "globe", do_globedarkness, POS_STANDING, 0, LOG_NORMAL }, { "heighten senses",do_heighten, POS_STANDING, 0, LOG_NORMAL }, { "enhance reflexes",do_reflex, POS_STANDING, 0, LOG_NORMAL }, { "hide", do_hide, POS_RESTING, 0, LOG_NORMAL }, { "iron grip", do_irongrip, POS_STANDING, 0, LOG_NORMAL }, { "ironfist", do_ironfist, POS_STANDING, 0, LOG_NORMAL }, { "poison weapon", do_poison_weapon,POS_SLEEPING, 0, LOG_NORMAL }, { "practice", do_practice, POS_SLEEPING, 0, LOG_NORMAL }, { "qui", do_qui, POS_DEAD, 0, LOG_NORMAL }, { "quit", do_quit, POS_DEAD, 0, LOG_NORMAL }, { "rage", do_rage, POS_DEAD, 0, LOG_NORMAL }, { "remote", do_remote, POS_RESTING, 0, LOG_NORMAL }, { "<", do_remote, POS_RESTING, 0, LOG_NORMAL }, { "rent", do_rent, POS_DEAD, 0, LOG_NORMAL }, { "save", do_save, POS_DEAD, 1, LOG_NORMAL }, { "shadow", do_shadow_walk, POS_STANDING, 0, LOG_NORMAL }, { "sleep", do_sleep, POS_SLEEPING, 0, LOG_NORMAL }, { "sneak", do_sneak, POS_STANDING, 0, LOG_NORMAL }, { "spells", do_spells, POS_SLEEPING, L_IMP, LOG_NORMAL}, { "split", do_split, POS_RESTING, 0, LOG_NORMAL }, { "steal", do_steal, POS_STANDING, 0, LOG_NORMAL }, { "train", do_train, POS_RESTING, 0, LOG_NORMAL }, { "visible", do_visible, POS_SLEEPING, 0, LOG_NORMAL }, { "wake", do_wake, POS_SLEEPING, 0, LOG_NORMAL }, { "ward", do_ward, POS_STANDING, 1, LOG_ALWAYS }, { "where", do_where, POS_RESTING, 0, LOG_NORMAL }, { "withdraw", do_withdraw, POS_RESTING, 0, LOG_NORMAL }, { "pray", do_pray, POS_RESTING, 0, LOG_NORMAL }, { "delet", do_delet, POS_STANDING, 0, LOG_NORMAL }, { "delete", do_delete, POS_STANDING, 0, LOG_ALWAYS }, { "pkill", do_pkill, POS_DEAD, 0, LOG_NORMAL }, /* * Artifactor commands */ { "indestructable", do_indestructable, POS_STANDING, 0, LOG_NORMAL }, { "remake", do_remake, POS_STANDING, 0, LOG_NORMAL }, /* * Immortal commands. */ /* { "vnum", do_vnum, POS_DEAD, L_DIR, LOG_NORMAL }, */ /* { "load", do_load, POS_DEAD, L_DIR, LOG_NORMAL }, */ { "advance", do_advance, POS_DEAD, L_IMP, LOG_ALWAYS }, { "allow", do_allow, POS_DEAD, L_DIR, LOG_ALWAYS }, { "astat", do_astat, POS_DEAD, L_JUN, LOG_NORMAL }, { "astrip", do_astrip, POS_DEAD, L_JUN, LOG_NORMAL }, { "at", do_at, POS_DEAD, L_APP, LOG_NORMAL }, { "authorize", do_authorize, POS_DEAD, L_APP, LOG_ALWAYS }, { "bamfmes", do_bamf, POS_DEAD, L_APP, LOG_NORMAL }, { "banlist", do_banlist, POS_DEAD, L_GOD, LOG_NORMAL }, { "bodybag", do_bodybag, POS_DEAD, L_APP, LOG_ALWAYS }, { "changes", do_changes, POS_DEAD, L_DIR, LOG_NORMAL }, { "clandesc", do_clandesc, POS_DEAD, L_SEN, LOG_NORMAL }, { "cloak", do_cloak, POS_DEAD, L_DIR, LOG_NORMAL }, { "clone", do_clone, POS_DEAD, L_SEN, LOG_NORMAL }, { "countcommands", do_countcommands,POS_DEAD, L_IMP, LOG_NORMAL }, { "cset", do_cset, POS_DEAD, L_IMP, LOG_BUILD }, { "deny", do_deny, POS_DEAD, L_IMP, LOG_ALWAYS }, { "desc_check", do_desc_check, POS_DEAD, L_IMP, LOG_NORMAL }, { "desc_clean", do_descript_clean, POS_DEAD, L_IMP,LOG_NORMAL }, { "detract", do_detract, POS_DEAD, L_IMP, LOG_ALWAYS }, { "disconnect", do_disconnect, POS_DEAD, L_GOD, LOG_ALWAYS }, { "echo", do_echo, POS_DEAD, L_JUN, LOG_ALWAYS }, { "empower", do_empower, POS_DEAD, L_IMP, LOG_ALWAYS }, { "force", do_force, POS_DEAD, L_DIR, LOG_ALWAYS }, { "freeze", do_freeze, POS_DEAD, L_DIR, LOG_ALWAYS }, { "goto", do_goto, POS_DEAD, L_APP, LOG_NORMAL }, { "hero", do_hero, POS_DEAD, 100, LOG_NORMAL }, { "hlist", do_hlist, POS_DEAD, L_APP, LOG_NORMAL }, { "holylight", do_holylight, POS_DEAD, L_APP, LOG_NORMAL }, #if defined ( HOTREBOOT ) { "hotreboo", do_hotreboo, POS_DEAD, L_DIR, LOG_ALWAYS }, { "hotreboot", do_hotreboot, POS_DEAD, L_DIR, LOG_ALWAYS }, #endif { "ideas", do_ideas, POS_DEAD, L_DIR, LOG_ALWAYS }, { "imc", do_imc, POS_DEAD, L_APP, LOG_NORMAL }, { "immtalk", do_immtalk, POS_DEAD, L_APP, LOG_NORMAL }, { "shieldify", do_shieldify, POS_STANDING, L_CON, LOG_NORMAL }, { "doubleexp", do_doubleexp, POS_DEAD, L_DIR, LOG_NORMAL }, { "log", do_log, POS_DEAD, L_CON, LOG_ALWAYS }, { "memory", do_memory, POS_DEAD, L_GOD, LOG_NORMAL }, { "mfind", do_mfind, POS_DEAD, L_JUN, LOG_NORMAL }, { "mload", do_mload, POS_DEAD, L_DEM, LOG_BUILD }, { "mpstat", do_mpstat, POS_DEAD, L_APP, LOG_NORMAL }, { "mpcommands", do_mpcommands, POS_DEAD, L_APP, LOG_NORMAL }, { "mset", do_mset, POS_DEAD, L_DIR, LOG_BUILD }, { "mstat", do_mstat, POS_DEAD, L_JUN, LOG_NORMAL }, { "mwhere", do_mwhere, POS_DEAD, L_JUN, LOG_NORMAL }, { "newban", do_newban, POS_DEAD, L_GOD, LOG_ALWAYS }, { "newcorpse", do_newcorpse, POS_DEAD, L_GOD, LOG_ALWAYS }, { "newlock", do_newlock, POS_DEAD, L_IMP, LOG_ALWAYS }, { "noemote", do_noemote, POS_DEAD, L_GOD, LOG_NORMAL }, { "notell", do_notell, POS_DEAD, L_GOD, LOG_NORMAL }, { "nukerep", do_nukerep, POS_DEAD, L_GOD, LOG_NORMAL }, { "numlock", do_numlock, POS_DEAD, L_CON, LOG_ALWAYS }, { "ofind", do_ofind, POS_DEAD, L_JUN, LOG_NORMAL }, { "oload", do_oload, POS_DEAD, L_JUN, LOG_BUILD }, { "opstat", do_opstat, POS_DEAD, L_APP, LOG_NORMAL }, { "oset", do_oset, POS_DEAD, L_DIR, LOG_BUILD }, { "ostat", do_ostat, POS_DEAD, L_JUN, LOG_NORMAL }, { "owhere", do_owhere, POS_DEAD, L_JUN, LOG_NORMAL }, { "pardon", do_pardon, POS_DEAD, L_IMP, LOG_ALWAYS }, { "peace", do_peace, POS_DEAD, L_DEM, LOG_NORMAL }, { "permban", do_permban, POS_DEAD, L_DIR, LOG_ALWAYS }, { "plist", do_playerlist, POS_DEAD, L_APP, LOG_NORMAL }, { "pload", do_pload, POS_DEAD, L_DIR, LOG_ALWAYS }, { "purge", do_purge, POS_DEAD, L_DEM, LOG_NORMAL }, { "qecho", do_qecho, POS_DEAD, L_GOD, LOG_ALWAYS }, { "qset", do_qset, POS_DEAD, L_GOD, LOG_ALWAYS }, { "racelist", do_racelist, POS_DEAD, L_APP, LOG_NORMAL }, { "rebuild", do_rebuild, POS_DEAD, L_DIR, LOG_ALWAYS }, { "reboo", do_reboo, POS_DEAD, L_DIR, LOG_NORMAL }, { "reboot", do_reboot, POS_DEAD, L_DIR, LOG_ALWAYS }, { "recho", do_recho, POS_DEAD, L_JUN, LOG_ALWAYS }, { "restore", do_restore, POS_DEAD, L_GOD, LOG_ALWAYS }, { "restrict", do_restrict, POS_DEAD, L_GOD, LOG_NORMAL }, { "rpstat", do_rpstat, POS_DEAD, L_APP, LOG_NORMAL }, { "rset", do_rset, POS_DEAD, L_DIR, LOG_BUILD }, { "rstat", do_rstat, POS_DEAD, L_JUN, LOG_NORMAL }, { "seize", do_seize, POS_DEAD, L_DIR, LOG_ALWAYS }, { "shutdow", do_shutdow, POS_DEAD, L_CON, LOG_NORMAL }, { "shutdown", do_shutdown, POS_DEAD, L_CON, LOG_ALWAYS }, { "silence", do_silence, POS_DEAD, L_GOD, LOG_NORMAL }, { "sla", do_sla, POS_DEAD, L_GOD, LOG_NORMAL }, { "slay", do_slay, POS_DEAD, L_GOD, LOG_ALWAYS }, { "slaymes", do_slaymes, POS_DEAD, L_GOD, LOG_NORMAL }, { "slookup", do_slookup, POS_DEAD, L_DIR, LOG_NORMAL }, { "snoop", do_snoop, POS_DEAD, L_DIR, LOG_ALWAYS }, { "sset", do_sset, POS_DEAD, L_DIR, LOG_ALWAYS }, { "sstat", do_sstat, POS_DEAD, L_DIR, LOG_NORMAL }, { "sstime", do_sstime, POS_DEAD, L_CON, LOG_ALWAYS }, { "tempban", do_tempban, POS_DEAD, L_GOD, LOG_ALWAYS }, { "todo", do_todo, POS_DEAD, L_DIR, LOG_ALWAYS }, { "transfer", do_transfer, POS_DEAD, L_JUN, LOG_ALWAYS }, { "transmes", do_trmes, POS_DEAD, L_JUN, LOG_NORMAL }, { "trust", do_trust, POS_DEAD, L_IMP, LOG_ALWAYS }, { "typos", do_typos, POS_DEAD, L_SEN, LOG_ALWAYS }, { "users", do_users, POS_DEAD, L_DIR, LOG_NORMAL }, { "vused", do_vused, POS_DEAD, L_DIR, LOG_NORMAL }, { "whotype", do_whotype, POS_DEAD, L_CON, LOG_NORMAL }, { "wizify", do_wizify, POS_DEAD, L_CON, LOG_ALWAYS }, { "wizlock", do_wizlock, POS_DEAD, L_IMP, LOG_ALWAYS }, { "wizinvis", do_invis, POS_DEAD, L_DIR, LOG_NORMAL }, { "wiznet", do_wiznet, POS_DEAD, L_JUN, LOG_NORMAL }, { "wrlist", do_wrlist, POS_DEAD, L_JUN, LOG_NORMAL }, { ":", do_immtalk, POS_DEAD, L_APP, LOG_NORMAL }, { "=", do_imc, POS_DEAD, L_APP, LOG_NORMAL }, { "-", do_hero, POS_DEAD, 100, LOG_NORMAL }, /*{ "fighting", do_fighting, POS_DEAD, L_GOD, LOG_NORMAL },*/ { "switch", do_switch, POS_DEAD, L_DIR, LOG_ALWAYS }, { "return", do_return, POS_DEAD, L_DIR, LOG_NORMAL }, /*{ "pwhere", do_pwhere, POS_DEAD, 105, LOG_NORMAL },*/ /* { "bamfin", do_bamfin, POS_DEAD, L_APP, LOG_NORMAL }, { "bamfout", do_bamfout, POS_DEAD, L_APP, LOG_NORMAL }, */ /* * Here because they interefeared with something */ { "gorge", do_gorge, POS_STANDING, 0, LOG_NORMAL }, { "gouge", do_gouge, POS_FIGHTING, 0, LOG_NORMAL }, { "circle", do_circle, POS_FIGHTING, 0, LOG_NORMAL }, { "rake", do_rake, POS_FIGHTING, 0, LOG_NORMAL }, { "headbutt", do_headbutt, POS_FIGHTING, 0, LOG_NORMAL }, { "transport", do_transport, POS_RESTING, 0, LOG_NORMAL }, /* { "immlist", do_immlist, POS_DEAD, 0, LOG_NORMAL },*/ /* * OLC 1.1b */ { "aedit", do_aedit, POS_DEAD, L_IMP, LOG_BUILD }, { "cedit", do_cedit, POS_DEAD, L_CON, LOG_BUILD }, { "hedit", do_hedit, POS_DEAD, L_APP, LOG_BUILD }, { "redit", do_redit, POS_DEAD, L_CON, LOG_BUILD }, { "oedit", do_oedit, POS_DEAD, L_IMP, LOG_BUILD }, { "medit", do_medit, POS_DEAD, L_IMP, LOG_BUILD }, { "asave", do_asave, POS_DEAD, L_APP, LOG_NORMAL }, { "alist", do_alist, POS_DEAD, L_CON, LOG_NORMAL }, { "resets", do_resets, POS_DEAD, L_CON, LOG_NORMAL }, { "mreset", do_mreset, POS_DEAD, L_CON, LOG_NORMAL }, { "sedit", do_sedit, POS_DEAD, L_CON, LOG_BUILD }, { "spedit", do_spedit, POS_DEAD, L_IMP, LOG_ALWAYS }, { "rename_obj", do_rename_obj, POS_DEAD, L_APP, LOG_ALWAYS }, { "race_edit", do_race_edit, POS_DEAD, L_IMP, LOG_ALWAYS }, { "nedit", do_nedit, POS_DEAD, L_CON, LOG_BUILD }, /* * End of list. */ { "", 0, POS_DEAD, 0, LOG_NORMAL } }; /* * The social table. * Add new socials here. * Alphabetical order is not required. */ /* New socials contributed by Katrina and Binky */ /* const struct social_type social_table [ ] = { { "dammit", "You curse like a drunken sailor for how the fates have treated you.", "$n slams $s weapon on the ground and yells, 'Dammit Dammit DAMMIT!'", "You throw your hands up in disgust and let the verbal barbs fly at $N!", "$n curses $N to eternity while throwing a fit.", "$n curses you out like never before, $e must be pretty ticked off.", "You curse your own stupidity! Bah!", "$n curses $mself!" }, { "oral", "Answer: &YORAL SEX!! &PAnd lots of it!", "$n yells, &C'Answer: ORAL SEX!! And lots of it!'", "Answer: &YORAL SEX!! &PAnd lots of it!", "$n yells, &C'Answer: ORAL SEX!! And lots of it!'", "$n yells, &C'Answer: ORAL SEX!! And lots of it!'", "You remind yourself of the answer, &YORAL SEX!", "$n yells, &C'Answer: ORAL SEX!! And lots of it!'" }, { "autostrip", "You drool in ecstasy as Mel Gibson strips naked in front of you!", "$n drools in ecstasy as Mel Gibson peels off all his clothes!", "You grab $N and start to rip $S clothes off!", "$n grabs $N and starts to rip $S clothes off!", "$n grabs you and attempts to rip off all your clothes!", "You suddenly feel adventurous and begin to rip your clothes off!", "$n moans as $e begins to take off all $s clothing..." }, { "pounce", "You crouch low to the ground, looking for someone to pounce on...", "$n pounces up and down like a mad man!", "You pounce onto $N's lap playfully.", "$n pounces onto $N's lap playfully.", "$n crouches low to the ground, looking for someone to pounce on...", "You attempt to pounce on yourself. Not too swift...", "$n attempts to pounce on $mself! Not too swift..." }, { "accuse", "Accuse whom?", "$n is in an accusing mood.", "You look accusingly at $M.", "$n looks accusingly at $N.", "$n looks accusingly at you.", "You accuse yourself.", "$n seems to have a bad conscience." }, { "ack", "You gasp and say 'ACK!' at your mistake.", "$n ACKS at $s big mistake.", "You ACK $M.", "$n ACKS $N.", "$n ACKS you.", "You ACK yourself.", "$n ACKS $mself. Must be a bad day." }, { "addict", "You stand and admit to all in the room, 'Hi, I'm $n, and I'm a mud addict.'", "$n stands and says, 'Hi, I'm $n, and I'm a mud addict.'", "You tell $M that you are addicted to $S love.", "$n tells $N that $e is addicted to $S love.", "$n tells you that $e is addicted to your love.", "You stand and admit to all in the room, 'Hi, I'm $n, and I'm a mud addict.'", "$n stands and says, 'Hi, I'm $n, and I'm a mud addict.'", }, { "agree", "You seem to be in an agreeable mood.", "$n seems to agree.", "You agree with $M.", "$n agrees with $N.", "$n agrees with you.", "Well I hope you would agree with yourself!", "$n agrees with $mself, of course." }, { "apologize", "You apologize for your behavior.", "$n apologizes for $s rude behavior.", "You apologize to $M.", "$n apologizes to $N.", "$n apologizes to you.", "You apologize to yourself.", "$n apologizes to $mself. Hmmmm." }, { "bark", "Woof! Woof!", "$n barks like a dog.", "You bark at $M.", "$n barks at $N.", "$n barks at you.", "You bark at yourself. Woof! Woof!", "$n barks at $mself. Woof! Woof!" }, { "beg", "You beg the gods for mercy.", "The gods fall down laughing at $n's request for mercy.", "You desperately try to squeeze a few coins from $M.", "$n begs $N for a gold piece!", "$n begs you for money.", "Begging yourself for money doesn't help.", "$n begs $mself for money." }, { "blah", "You say 'BLAH!'", "$n says 'BLAH!'", "You tell $M that everything is just blah.", "$n tells $N that everything is just blah.", "$n tells you that everything is just blah.", "You scream 'BLAH BLAH BLAH!'", "$n screams 'BLAH BLAH BLAH!'" }, { "bleed", "You bleed all over the room!", "$n bleeds all over the room! Get out of $s way!", "You bleed all over $M!", "$n bleeds all over $N. Better leave, you may be next!", "$n bleeds all over you! YUCK!", "You bleed all over yourself!", "$n bleeds all over $mself." }, { "blink", "You blink in utter disbelief.", "$n blinks in utter disbelief.", "You blink at $M in confusion.", "$n blinks at $N in confusion.", "$n blinks at you in confusion.", "You are sooooooooooooo confused", "$n blinks at $mself in complete confusion." }, { "blush", "Your cheeks are burning.", "$n blushes.", "You get all flustered up seeing $M.", "$n blushes as $e sees $N here.", "$n blushes as $e sees you here. Such an effect on people!", "You blush at your own folly.", "$n blushes as $e notices $s boo-boo." }, { "bonk", "BONK.", "$n spells 'potato' like Dan Quayle: 'B-O-N-K'.", "You bonk $M for being a numbskull.", "$n bonks $N. What a numbskull.", "$n bonks you. BONK BONK BONK!", "You bonk yourself.", "$n bonks $mself." }, { "bounce", "BOIINNNNNNGG!", "$n bounces around.", "You bounce onto $S lap.", "$n bounces onto $N's lap.", "$n bounces onto your lap.", "You bounce your head like a basketball.", "$n plays basketball with $s head." }, { "bow", "You bow deeply.", "$n bows deeply.", "You bow before $M.", "$n bows before $N.", "$n bows before you.", "You kiss your toes.", "$n folds up like a jack knife and kisses $s own toes." }, { "brb", "You announce that you will be right back.", "$n says in a stern voice, 'I'll be back!'", "You announce to $M that you will be right back.", "$n says to $N in a stern voice, 'I'll be back!'", "$n says to you in a stern voice, 'I'll be right back!'", "You mumble to yourself, 'I'll be right back'", "$n mumbles to $mself, 'I'll be right back, won't I?'" }, { "burp", "You burp loudly.", "$n burps loudly.", "You burp loudly to $M in response.", "$n burps loudly in response to $N's remark.", "$n burps loudly in response to your remark.", "You burp at yourself.", "$n burps at $mself. What a sick sight." }, { "bye", "You say goodbye to all in the room.", "$n says goodbye to everyone in the room.", "You say goodbye to $N.", "$n says goodbye to $N.", "$n says goodbye to you.", "You say goodbye to yourself. Contemplating suicide?", "$n says goodbye to $mself. Is $e contemplating suicide?" }, { "cackle", "You throw back your head and cackle with insane glee!", "$n throws back $s head and cackles with insane glee!", "You cackle gleefully at $N", "$n cackles gleefully at $N.", "$n cackles gleefully at you. Better keep your distance from $m.", "You cackle at yourself. Now, THAT'S strange!", "$n is really crazy now! $e cackles at $mself." }, { "cheer", "ZIS BOOM BAH! BUGS BUNNY BUGS BUNNY RAH RAH RAH!", "$n says 'BUGS BUNNY BUGS BUNNY RAH RAH RAH!'", "You cheer loudly: 'Go $N Go!'", "$n cheers loudly: 'Go $N Go!'", "$n cheers you on!", "You cheer yourself up.", "$n cheers $mself on." }, { "chuckle", "You chuckle politely.", "$n chuckles politely.", "You chuckle at $S joke.", "$n chuckles at $N's joke.", "$n chuckles at your joke.", "You chuckle at your own joke, since no one else would.", "$n chuckles at $s own joke, since none of you would." }, { "clap", "You clap your hands together.", "$n shows $s approval by clapping $s hands together.", "You clap at $S performance.", "$n claps at $N's performance.", "$n claps at your performance.", "You clap at your own performance.", "$n claps at $s own performance." }, { "comfort", "Do you feel uncomfortable?", NULL, "You comfort $M.", "$n comforts $N.", "$n comforts you.", "You make a vain attempt to comfort yourself.", "$n has no one to comfort $m but $mself." }, { "cough", "You cough to clear your throat and eyes and nose and....", "$n coughs loudly.", "You cough loudly. It must be $S fault, $E gave you this cold.", "$n coughs loudly, and glares at $N, like it is $S fault.", "$n coughs loudly, and glares at you. Did you give $M that cold?", "You cough loudly. Why don't you take better care of yourself?", "$n coughs loudly. $n should take better care of $mself." }, { "cringe", "You cringe in terror.", "$n cringes in terror!", "You cringe away from $M.", "$n cringes away from $N in mortal terror.", "$n cringes away from you.", "I beg your pardon?", NULL }, { "cry", "Waaaaah ...", "$n bursts into tears.", "You cry on $S shoulder.", "$n cries on $N's shoulder.", "$n cries on your shoulder.", "You cry to yourself.", "$n sobs quietly to $mself." }, { "cuddle", "Whom do you feel like cuddling today?", NULL, "You cuddle $M.", "$n cuddles $N.", "$n cuddles you.", "You must feel very cuddly indeed ... :)", "$n cuddles up to $s shadow. What a sorry sight." }, { "curse", "You swear loudly for a long time.", "$n swears: @*&^%@*&!", "You swear at $M.", "$n swears at $N.", "$n swears at you! Where are $s manners?", "You swear at your own mistakes.", "$n starts swearing at $mself. Why don't you help?" }, { "curtsey", "You curtsey to your audience.", "$n curtseys gracefully.", "You curtsey to $M.", "$n curtseys gracefully to $N.", "$n curtseys gracefully for you.", "You curtsey to your audience (yourself).", "$n curtseys to $mself, since no one is paying attention to $m." }, { "dance", "Feels silly, doesn't it?", "$n tries to break dance, but nearly breaks $s neck!", "You sweep $M into a romantic waltz.", "$n sweeps $N into a romantic waltz.", "$n sweeps you into a romantic waltz.", "You skip and dance around by yourself.", "$n dances a pas-de-une." }, { "dive", "You dive into the ocean.", "$n dives into the ocean.", "You dive behind $M and hide.", "$n dives behind $N and hides.", "$n dives behind you and hides.", "You take a dive.", "$n takes a dive." }, { "doh", "You say, 'Doh!!' and hit your forehead. What an idiot you are!", "$n hits $mself in the forehead and says, 'Doh!!!'", "You say, 'Doh!!' and hit your forehead. What an idiot you are!", "$n hits $mself in the forehead and says, 'Doh!!!'", "$n hits $mself in the forehead and says, 'Doh!!!'", "You hit yourself in the forehead and say, 'Doh!!!'", "$n hits $mself in the forehead and says, 'Doh!!!'" }, */ /* * This one's for Baka, Penn, and Onethumb! */ /* { "drool", "You drool on yourself.", "$n drools on $mself.", "You drool all over $N.", "$n drools all over $N.", "$n drools all over you.", "You drool on yourself.", "$n drools on $mself." }, { "duck", "Whew! That was close!", "$n is narrowly missed by a low-flying dragon.", "You duck behind $M. Whew! That was close!", "$n ducks behind $N to avoid the fray.", "$n ducks behind you to avoid the fray.", "You duck behind yourself. Oww that hurts!", "$n tries to duck behind $mself. $n needs help getting untied now." }, { "eyebrow", "You raise an eyebrow.", "$n raises an eyebrow.", "You raise an eyebrow at $M.", "$n raises an eyebrow at $N.", "$n raises an eyebrow at you.", "You raise an eyebrow at yourself. That hurt!", "$n raises an eyebrow at $mself. That must have hurt!" }, { "faint", "You feel dizzy and hit the ground like a board.", "$n's eyes roll back in $s head and $e crumples to the ground.", "You faint into $S arms.", "$n faints into $N's arms.", "$n faints into your arms. How romantic.", "You look down at your condition and faint.", "$n looks down at $s condition and faints dead away." }, { "fakerep", "You report: 12874/13103 hp 9238/10230 mana 2483/3451 mv 2.31E13 xp.", "$n reports: 12874/13103 hp 9238/10230 mana 2483/3451 mv 2.31E13 xp.", "You report: 12874/13103 hp 9238/10230 mana 2483/3451 mv 2.31E13 xp.", "$n reports: 12874/13103 hp 9238/10230 mana 2483/3451 mv 2.31E13 xp.", "$n reports: 12874/13103 hp 9238/10230 mana 2483/3451 mv 2.31E13 xp.", "You report: 12874/13103 hp 9238/10230 mana 2483/3451 mv 2.31E13 xp.", "$n reports: 12874/13103 hp 9238/10230 mana 2483/3451 mv 2.31E13 xp." }, { "fart", "Where are your manners?", "$n lets off a real rip-roarer ... a greenish cloud envelops $n!", "You fart at $M. Boy, you are sick.", "$n farts in $N's direction. Better flee before $e turns to you!", "$n farts in your direction. You gasp for air.", "You fart at yourself. You deserve it.", "$n farts at $mself. Better $m than you." }, { "flex", "You flex your bulging muscles at the beach crowd.", "$n flexes $s muscles and puts yours to shame!", "You flex your bulging muscles at $M.", "$n flexes $s muscles at $N.", "$n flexes $s muscles at you. $n must be trying to impress you.", "You flex your muscles at yourself. Wow, you are HUGE!", "$n flexes $s muscles at $mself. How narcissistic!" }, { "flip", "You flip head over heels.", "$n flips head over heels.", "You flip $M over your shoulder.", "$n flips $N over $s shoulder.", "$n flips you over $s shoulder. Hmmmm.", "You tumble all over the room.", "$n does some nice tumbling and gymnastics." }, { "flirt", "Wink wink!", "$n flirts -- probably needs a date, huh?", "You flirt with $M.", "$n flirts with $N.", "$n wants you to show some interest and is flirting with you.", "You flirt with yourself.", "$n flirts with $mself. Hoo boy." }, { "frag", "You say, 'FRAG FRAG FRAG FRAG!!!'", "$n says, 'FRAG FRAG FRAG FRAG!!!'", "You glare at $N and say, 'FRAG FRAG FRAG FRAG!!!'", "$n glares at $N and says, 'FRAG FRAG FRAG FRAG!!!'", "$n glares at you and says, 'FRAG FRAG FRAG FRAG!!!'", "You mutter angrily to yourself, 'FRAG FRAG FRAG FRAG!!!'", "$n mutters angrily to $mself, 'FRAG FRAG FRAG FRAG!!!'" }, { "fondle", "Who needs to be fondled?", NULL, "You fondly fondle $M.", "$n fondly fondles $N.", "$n fondly fondles you.", "You fondly fondle yourself, feels funny doesn't it ?", "$n fondly fondles $mself - this is going too far !!" }, { "french", "Kiss whom?", NULL, "You give $N a long and passionate kiss.", "$n kisses $N passionately.", "$n gives you a long and passionate kiss.", "You gather yourself in your arms and try to kiss yourself.", "$n makes an attempt at kissing $mself." }, { "frown", "What's bothering you ?", "$n frowns.", "You frown at what $E did.", "$n frowns at what $N did.", "$n frowns at what you did.", "You frown at yourself. Poor baby.", "$n frowns at $mself. Poor baby." }, { "fruff", "You turn into a fruff monster and look for someone to fruff.", "$n turns into a fruff monster and looks around for a fruff victim.", "You fruff $N until $E starts to giggle out loud.", "$n fruffs you and you giggle out loud!", "You find no one and fruff yourself.", "Finding no one, $n fruffs $mself." }, { "gasp", "You gasp in astonishment.", "$n gasps in astonishment.", "You gasp as you realize what $e did.", "$n gasps as $e realizes what $N did.", "$n gasps as $e realizes what you did.", "You look at yourself and gasp!", "$n takes one look at $mself and gasps in astonishment!" }, { "ghug", "GROUP HUG! GROUP HUG!", "$n hugs you all in a big group hug. How sweet!", "GROUP HUG! GROUP HUG!", "$n hugs you all in a big group hug. How sweet!", "$n hugs you all in a big group hug. How sweet!", "GROUP HUG! GROUP HUG!", "$n hugs you all in a big group hug. How sweet!" }, { "giggle", "You giggle.", "$n giggles.", "You giggle in $S presence.", "$n giggles at $N's actions.", "$n giggles at you. Hope it's not contagious!", "You giggle at yourself. You must be nervous or something.", "$n giggles at $mself. $e must be nervous or something." }, { "glare", "You glare at nothing in particular.", "$n glares around $m.", "You glare icily at $M.", "$n glares at $N.", "$n glares icily at you, you feel cold to your bones.", "You glare icily at your feet, they are suddenly very cold.", "$n glares at $s feet, what is bothering $m?" }, { "goose", "You honk like a goose.", "$n honks like a goose.", "You goose $S luscious bottom.", "$n gooses $N's soft behind.", "$n squeezes your tush. Oh my!", "You goose yourself.", "$n gooses $mself. Yuck." }, { "grimace", "You contort your face in disgust.", "$n grimaces is disgust.", "You grimace in disgust at $M.", "$n grimaces in disgust at $N.", "$n grimaces in disgust at you.", "You grimace at yourself in disgust.", "$n grimaces at $mself in disgust." }, { "grin", "You grin evilly.", "$n grins evilly.", "You grin evilly at $M.", "$n grins evilly at $N.", "$n grins evilly at you. Hmmm. Better keep your distance.", "You grin at yourself. You must be getting very bad thoughts.", "$n grins at $mself. You must wonder what's in $s mind." }, { "groan", "You groan loudly.", "$n groans loudly.", "You groan at the sight of $M.", "$n groans at the sight of $N.", "$n groans at the sight of you.", "You groan as you realize what you have done.", "$n groans as $e realizes what $e has done." }, { "grovel", "You grovel in the dirt.", "$n grovels in the dirt.", "You grovel before $M.", "$n grovels in the dirt before $N.", "$n grovels in the dirt before you.", "That seems a little silly to me.", NULL }, { "growl", "Grrrrrrrrrr ...", "$n growls.", "Grrrrrrrrrr ... take that, $N!", "$n growls at $N. Better leave the room before the fighting starts.", "$n growls at you. Hey, two can play it that way!", "You growl at yourself. Boy, do you feel bitter!", "$n growls at $mself. This could get interesting..." }, { "grumble", "You grumble.", "$n grumbles.", "You grumble to $M.", "$n grumbles to $N.", "$n grumbles to you.", "You grumble under your breath.", "$n grumbles under $s breath." }, { "grunt", "GRNNNHTTTT.", "$n grunts like a pig.", "GRNNNHTTTT.", "$n grunts to $N. What a pig!", "$n grunts to you. What a pig!", "GRNNNHTTTT.", "$n grunts to $mself. What a pig!" }, { "highfive", "You jump in the air...oops, better get someone else to join you.", "$n jumps in the air by $mself. Is $e a cheerleader, or just daft?", "You jump in the air and give $M a big highfive!", "$n jumps in the air and gives $N a big highfive!", "$n jumps in the air and gives you a big highfive!", "You jump in the air and congratulate yourself!", "$n jumps in the air and gives $mself a big highfive! Wonder what $e did?" }, { "hmm", "You Hmmmm out loud.", "$n thinks, 'Hmmmm.'", "You gaze thoughtfully at $M and say 'Hmmm.'", "$n gazes thoughtfully at $N and says 'Hmmm.'", "$n gazes thoughtfully at you and says 'Hmmm.'", "You Hmmmm out loud.", "$n thinks, 'Hmmmm.'" }, { "hug", "Hug whom?", NULL, "You hug $M.", "$n hugs $N.", "$n hugs you.", "You hug yourself.", "$n hugs $mself in a vain attempt to get friendship." }, { "kiss", "Isn't there someone you want to kiss?", NULL, "You kiss $M.", "$n kisses $N.", "$n kisses you.", "All the lonely people :(", NULL }, { "lag", "You complain about the lag, your hitpoints, your mana...", "$n has lost $s link because of the lag.", "You complain to $N about the lag, your hitpoints, your mana...", "$n has lost $s link because of the lag.", "$n has lost $s link because of the lag.", "You complain about the lag, your hitpoints, your mana...", "$n has lost $s link because of the lag." }, { "lapdance", "You look around for someone to lapdance.", "$n looks around for someone to lapdance.", "You lapdance $M making $M pop into a sweat!", "$n lapdances $N till they beg for mercy!", "$n lapdances you slowly to the beat of Latin music!", "You lapdance yourself. Kinky!", "$n lapdances $mself. You wonder, 'Are they really that lonely?'", }, { "laugh", "You laugh.", "$n laughs.", "You laugh at $N mercilessly.", "$n laughs at $N mercilessly.", "$n laughs at you mercilessly. Hmmmmph.", "You laugh at yourself. I would, too.", "$n laughs at $mself. Let's all join in!!!" }, { "lick", "You lick your lips and smile.", "$n licks $s lips and smiles.", "You lick $M.", "$n licks $N.", "$n licks you.", "You lick yourself.", "$n licks $mself - YUCK." }, { "liege", "You kneel down on the ground, looking for someone to liege.", "$n kneels to the ground, looking for someone to liege.", "You kneel before $M and say, 'My liege!'", "$n kneels before $N and says, 'My liege!'", "$n kneels before you and says, 'My liege!'", "You liege yourself, how silly!", "$n lieges $mself, how strange." }, { "massage", "Massage what? Thin air?", NULL, "You gently massage $N's shoulders.", "$n massages $N's shoulders.", "$n gently massages your shoulders. Ahhhhhhhhhh ...", "You practice yoga as you try to massage yourself.", "$n gives a show on yoga positions, trying to massage $mself." }, { "mmm", "You go mmMMmmMMmmMMmm.", "$n says, 'mmMMmmMMmmMMmm.'", "You go mmMMmmMMmmMMmm.", "$n says, 'mmMMmmMMmmMMmm.'", "$n thinks of you and says, 'mmMMmmMMmmMMmm.'", "You think of yourself, and go mmMMmmMMmmMMmm.", "$n thinks of $mself and says, 'mmMMmmMMmmMMmm.'" }, { "mock", "You mock nothing in general.", "$n mocks nothing in general.", "You look at $M, smile, and say 'I mock you.'", "$n mocks $N mercilessly.", "$n looks at you, smiles, and says 'I mock you.'", "You mock yourself alot.", "$n mocks $mself just cause $e can." }, { "moan", "You start to moan.", "$n starts moaning.", "You moan for the loss of $M.", "$n moans for the loss of $N.", "$n moans at the sight of you. Hmmmm.", "You moan at yourself.", "$n makes $mself moan." }, { "muhaha", "You laugh diabolically. MUHAHAHAHAHAHA!", "$n laughs diabolically. MUHAHAHAHAHAHA!", "You laugh at $M diabolically. MUHAHAHAHAHAHA!", "$n laughs at $N diabolically. MUHAHAHAHAHAHA!", "$n laughs at you diabolically. MUHAHAHAHAHAHA!", "Muhaha at yourself?? Wierd.", NULL }, { "ni", "You exclaim proudly, 'I am a knight that goes NI!'", "$n exclaims proudly, 'I am a knight that goes NI!'", "You exclaim proudly to $M, 'I am a knight that goes NI!'", "$n exclaims proudly to $N, 'I am a knight that goes NI!'", "$n proudly exclaims to you, 'I am a knight that goes NI!'", "You exclaim proudly, 'I am a knight that goes NI!'", "$n exclaims proudly, 'I am a knight that goes NI!'" }, { "nibble", "Nibble on whom?", NULL, "You nibble on $N's ear.", "$n nibbles on $N's ear.", "$n nibbles on your ear.", "You nibble on your OWN ear.", "$n nibbles on $s OWN ear." }, { "nod", "You nod affirmative.", "$n nods affirmative.", "You nod in recognition to $M.", "$n nods in recognition to $N.", "$n nods in recognition to you. You DO know $m, right?", "You nod at yourself. Are you getting senile?", "$n nods at $mself. $e must be getting senile." }, { "nudge", "Nudge whom?", NULL, "You nudge $M.", "$n nudges $N.", "$n nudges you.", "You nudge yourself, for some strange reason.", "$n nudges $mself, to keep $mself awake." }, { "ooo", "You go ooOOooOOooOOoo.", "$n says, 'ooOOooOOooOOoo.'", "You go ooOOooOOooOOoo.", "$n says, 'ooOOooOOooOOoo.'", "$n thinks of you and says, 'ooOOooOOooOOoo.'", "You go ooOOooOOooOOoo.", "$n says, 'ooOOooOOooOOoo.'" }, { "pet", "Pat whom?", NULL, "You pat $N on $S head.", "$n pats $N on $S head.", "$n pats you on your head.", "You pat yourself on your head. Aren't you proud?", "$n pats $mself on the head. $e is proud of $mself!" }, { "peer", "You peer intently about your surroundings.", "$n peers intently about the area, looking for thieves no doubt.", "You peer at $M quizzically.", "$n peers at $N quizzically.", "$n peers at you quizzically.", "You peer intently about your surroundings.", "$n peers intently about the area, looking for thieves no doubt." }, { "pinch", "You toss a pinch of salt over your shoulder.", "$n tosses a pinch of salt over $s shoulder.", "You pinch $S rosy cheeks.", "$n pinches $N's rosy cheeks.", "$n pinches your chubby cheeks.", "You need a pinch of salt.", "$n needs a pinch of salt." }, { "point", "Point at whom?", NULL, "You point at $M accusingly.", "$n points at $N accusingly.", "$n points at you accusingly.", "You point proudly at yourself.", "$n points proudly at $mself." }, { "poke", "Poke whom?", NULL, "You poke $M in the ribs.", "$n pokes $N in the ribs.", "$n pokes you in the ribs.", "You poke yourself in the ribs, feeling very silly.", "$n pokes $mself in the ribs, looking very sheepish." }, { "pounce", "You crouch low to the ground, looking for someone to pounce on...", "$n pounces up and down like a mad man!", "You pounce onto $N's lap playfully.", "$n pounces onto $N's lap playfully.", "$n crouches low to the ground, looking for someone to pounce on...", "You attempt to pounce on yourself. Not too swift...", "$n attempts to pounce on $mself! Not too swift..." }, { "ponder", "You ponder the question.", "$n sits down and thinks deeply.", NULL, NULL, NULL, NULL, NULL }, { "pout", "Ah, don't take it so hard.", "$n pouts.", "Ah, don't take it so hard.", "$n pouts at $N. What did $N do?", "$n pouts at you. What did you do to $m?", "Ah, don't take it so hard.", "$n pouts." }, { "pray", "You feel righteous, and maybe a little foolish.", "$n begs and grovels to the powers that be.", "You crawl in the dust before $M.", "$n falls down and grovels in the dirt before $N.", "$n kisses the dirt at your feet.", "Talk about narcissism ...", "$n mumbles a prayer to $mself." }, { "puke", "You puke ... chunks everywhere!", "$n pukes.", "You puke on $M.", "$n pukes on $N.", "$n spews vomit and pukes all over your clothing!", "You puke on yourself.", "$n pukes on $s clothes." }, { "raise", "You raise your hand in response.", "$n raises $s hand in response.", "You raise your hand in response.", "$n raises $s hand in response.", "$n raises $s hand in response to you.", "You raise your hand in response.", "$n raises $s hand in response." }, { "rofl", "You roll on the floor laughing hysterically.", "$n rolls on the floor laughing hysterically.", "You laugh your head off at $S remark.", "$n rolls on the floor laughing at $N's remark.", "$n can't stop laughing at your remark.", "You roll on the floor and laugh at yourself.", "$n laughs at $mself. Join in the fun." }, { "roflmao", "You roll on the floor, laughing your ass off!", "$n rolls on the floor, laughing $s ass off!", "You roll on the floor, laughing your ass off at $M!", "$n rolls on the floor, laughing $s ass off at $N!", "$n rolls on the floor, laughing $s ass off at YOU!", "You roll on the floor, laughing your ass off at yourself!", "$n rolls on the floor, laughing $s ass off at $mself...Strange." }, { "roll", "You roll your eyes.", "$n rolls $s eyes.", "You roll your eyes at $M.", "$n rolls $s eyes at $N.", "$n rolls $s eyes at you.", "You roll your eyes at yourself.", "$n rolls $s eyes at $mself." }, { "ruffle", "You've got to ruffle SOMEONE.", NULL, "You ruffle $N's hair playfully.", "$n ruffles $N's hair playfully.", "$n ruffles your hair playfully.", "You ruffle your hair.", "$n ruffles $s hair." }, { "sad", "You put on a glum expression.", "$n looks particularly glum today. *sniff*", "You give $M your best glum expression.", "$n looks at $N glumly. *sniff* Poor $n.", "$n looks at you glumly. *sniff* Poor $n.", "You bow your head and twist your toe in the dirt glumly.", "$n bows $s head and twists $s toe in the dirt glumly." }, { "salute", "You salute smartly.", "$n salutes smartly.", "You salute $M.", "$n salutes $N.", "$n salutes you.", "Huh?", NULL }, { "scream", "ARRRRRRRRRRGH!!!!!", "$n screams loudly!", "ARRRRRRRRRRGH!!!!! Yes, it MUST have been $S fault!!!", "$n screams loudly at $N. Better leave before $e blames you, too!!!", "$n screams at you! That's not nice! *sniff*", "You scream at yourself. Yes, that's ONE way of relieving tension!", "$n screams loudly at $mself! Is there a full moon up?" }, { "shake", "You shake your head.", "$n shakes $s head.", "You shake $S hand.", "$n shakes $N's hand.", "$n shakes your hand.", "You are shaken by yourself.", "$n shakes and quivers like a bowl full of jelly." }, { "shrug", "You shrug.", "$n shrugs helplessly.", "You shrug in response to $s question.", "$n shrugs in response to $N's question.", "$n shrugs in respopnse to your question.", "You shrug to yourself.", "$n shrugs to $mself. What a strange person." }, { "sigh", "You sigh.", "$n sighs loudly.", "You sigh as you think of $M.", "$n sighs at the sight of $N.", "$n sighs as $e thinks of you. Touching, huh?", "You sigh at yourself. You MUST be lonely.", "$n sighs at $mself. What a sorry sight." }, { "slobber", "You slobber all over the floor.", "$n slobbers all over the floor.", "You slobber all over $M.", "$n slobbers all over $N.", "$n slobbers all over you.", "You slobber all down your front.", "$n slobbers all over $mself." }, { "smile", "You smile happily.", "$n smiles happily.", "You smile at $M.", "$n beams a smile at $N.", "$n smiles at you.", "You smile at yourself.", "$n smiles at $mself." }, { "smirk", "You smirk.", "$n smirks.", "You smirk at $S saying.", "$n smirks at $N's saying.", "$n smirks at your saying.", "You smirk at yourself. Okay ...", "$n smirks at $s own 'wisdom'." }, { "slap", "You look around for someone to slap.", "$n looks around for someone to slap.", "You slap $M.", "$n slaps $N.", "$n slaps you.", "You slap yourself across the face.", "$n slaps $mself across the face." }, { "smooch", "You are searching for someone to smooch.", "$n is looking for someone to smooch.", "You give $M a nice, wet smooch.", "$n and $N are smooching in the corner.", "$n smooches you passionately on the lips.", "You smooch yourself.", "$n smooches $mself. Yuck." }, { "sneeze", "Gesundheit!", "$n sneezes.", NULL, NULL, NULL, NULL, NULL }, { "snicker", "You snicker softly.", "$n snickers softly.", "You snicker with $M about your shared secret.", "$n snickers with $N about their shared secret.", "$n snickers with you about your shared secret.", "You snicker at your own evil thoughts.", "$n snickers at $s own evil thoughts." }, { "sniff", "You sniff sadly. *SNIFF*", "$n sniffs sadly.", "You sniff sadly at the way $E is treating you.", "$n sniffs sadly at the way $N is treating $m.", "$n sniffs sadly at the way you are treating $m.", "You sniff sadly at your lost opportunities.", "$n sniffs sadly at $mself. Something MUST be bothering $m." }, { "spank", "Spank whom?", NULL, "You spank $M playfully.", "$n spanks $N playfully.", "$n spanks you playfully. OUCH!", "You spank yourself. Kinky!", "$n spanks $mself. Kinky!" }, { "squeeze", "Where, what, how, whom?", NULL, "You squeeze $M fondly.", "$n squeezes $N fondly.", "$n squeezes you fondly.", "You squeeze yourself - try to relax a little!", "$n squeezes $mself." }, { "strip", "You show some of your shoulder as you begin your performance.", "$n shows $s bare shoulder and glances seductively around the room.", "You show some of your shoulder as you begin your performance.", "$n shows $s bare shoulder and glances seductively at $N.", "$n shows $s bare shoulder and glances seductively at you.", "You show some of your shoulder as you begin your performance.", "$n shows $s bare shoulder and glances seductively around the room." }, { "strut", "Strut your stuff.", "$n struts proudly.", "You strut to get $S attention.", "$n struts, hoping to get $N's attention.", "$n struts, hoping to get your attention.", "You strut to yourself, lost in your own world.", "$n struts to $mself, lost in $s own world." }, { "swoon", "You swoon in ecstacy.", "$n swoons in ecstacy.", "You swoon in ecstacy at the thought of $M.", "$n swoons in ecstacy at the thought of $N.", "$n swoons in ecstacy as $e thinks of you.", "You swoon in ecstacy.", "$n swoons in ecstacy." }, { "tackle", "You can't tackle the AIR!", NULL, "You run over to $M and bring $M down!", "$n runs over to $N and tackles $M to the ground!", "$n runs over to you and tackles you to the ground!", "You wrap your arms around yourself, and throw yourself to the ground.", "$n wraps $s arms around $mself and brings $mself down!?" }, { "tap", "You tap your foot impatiently.", "$n taps $s foot impatiently.", "You tap your foot impatiently. Will $E ever be ready?", "$n taps $s foot impatiently as $e waits for $N.", "$n taps $s foot impatiently as $e waits for you.", "You tap yourself on the head. Ouch!", "$n taps $mself on the head." }, { "thank", "Thank you too.", NULL, "You thank $N heartily.", "$n thanks $N heartily.", "$n thanks you heartily.", "You thank yourself since nobody else wants to !", "$n thanks $mself since you won't." }, { "think", "You think about times past and friends forgotten.", "$n thinks deeply and is lost in thought.", "You think about times past and friends forgotten.", "$n thinks deeply and is lost in thought.", "$n thinks deeply and is lost in thought. Maybe $e is thinking of you?", "You think about times past and friends forgotten.", "$n thinks deeply and is lost in thought." }, { "tickle", "Whom do you want to tickle?", NULL, "You tickle $N - $E starts giggling.", "$n tickles $N - $E starts giggling.", "$n tickles you - hee hee hee.", "You tickle yourself, how funny!", "$n tickles $mself." }, { "twiddle", "You patiently twiddle your thumbs.", "$n patiently twiddles $s thumbs.", "You twiddle $S ears.", "$n twiddles $N's ears.", "$n twiddles your ears.", "You twiddle your ears like Dumbo.", "$n twiddles $s own ears like Dumbo." }, { "wave", "You wave.", "$n waves happily.", "You wave goodbye to $N.", "$n waves goodbye to $N.", "$n waves goodbye to you. Have a good journey.", "Are you going on adventures as well?", "$n waves goodbye to $mself." }, { "wedgie", "You look around for someone to wedgie.", "$n is looking around for someone to wedgie! Run!", "You wedgie $M. Must be fun! ", "$n wedgies $N to the heavens.", "$n wedgies you! Ouch!", "You delight in pinning your underwear to the sky.", "$n wedgies $mself and revels with glee." }, { "whine", "You whine like the great whiners of the century.", "$n whines 'I want to be a god already. I need more hitpoints..I...'", "You whine to $M like the great whiners of the century.", "$n whines to $N 'I want to be an immortal already. I need more hp...I..'", "$n whines to you 'I want to be an immortal already. I need more hp...I...'", "You whine like the great whiners of the century.", "$n whines 'I want to be a god already. I need more hitpoints..I...'" }, { "wince", "You wince. Ouch!", "$n winces. Ouch!", "You wince at $M.", "$n winces at $N.", "$n winces at you.", "You wince at yourself. Ouch!", "$n winces at $mself. Ouch!" }, { "wink", "You wink suggestively.", "$n winks suggestively.", "You wink suggestively at $N.", "$n winks at $N.", "$n winks suggestively at you.", "You wink at yourself ?? - what are you up to ?", "$n winks at $mself - something strange is going on..." }, { "worship", "You worship the powers that be.", "$n worships the powers that be.", "You drop to your knees in homage of $M.", "$n prostrates $mself before $N.", "$n believes you are all powerful.", "You worship yourself.", "$n worships $mself - ah, the conceitedness of it all." }, { "yawn", "You must be tired.", "$n yawns.", "You must be tired.", "$n yawns at $N. Maybe you should let them go to bed?", "$n yawns at you. Maybe $e wants you to go to bed with $m?", "You must be tired.", "$n yawns." }, { "", NULL, NULL, NULL, NULL, NULL, NULL, NULL } }; */ /* * The main entry point for executing commands. * Can be recursively called from 'at', 'order', 'force'. */ void interpret( CHAR_DATA *ch, char *argument ) { char command [ MAX_INPUT_LENGTH ]; char logline [ MAX_INPUT_LENGTH ]; int cmd; int trust; bool found; if ( ch->wait > 0 ) return; /* * Strip leading spaces. */ while ( isspace( *argument ) ) argument++; if ( argument[0] == '\0' ) return; /* * Implement freeze command. */ if ( !IS_NPC( ch ) && IS_SET( ch->act, PLR_FREEZE ) ) { send_to_char(AT_LBLUE, "You're totally frozen!\n\r", ch ); return; } /* * Implement stun. */ if ( IS_STUNNED( ch, STUN_COMMAND ) || IS_STUNNED( ch, STUN_TOTAL ) ) { send_to_char(AT_LBLUE, "You're too stunned to do anything!\n\r", ch ); return; } /* * Grab the command word. * Special parsing so ' can be a command, * also no spaces needed after punctuation. */ strcpy( logline, argument ); if ( !isalpha( argument[0] ) && !isdigit( argument[0] ) ) { command[0] = argument[0]; command[1] = '\0'; argument++; while ( isspace( *argument ) ) argument++; } else { argument = one_argument( argument, command ); } /* * Look for command in command table. */ found = FALSE; trust = get_trust( ch ); for ( cmd = 0; cmd_table[cmd].name[0] != '\0'; cmd++ ) { if ( command[0] == cmd_table[cmd].name[0] && !str_prefix( command, cmd_table[cmd].name ) && can_use_cmd(cmd, ch, trust) ) { found = TRUE; break; } } /* * Log and snoop. */ if ( cmd_table[cmd].log == LOG_NEVER ) strcpy( logline, "XXXXXXXX XXXXXXXX XXXXXXXX" ); /* * Builder Logs. * Added by Altrag. */ if ( cmd_table[cmd].log == LOG_BUILD ) { sprintf( log_buf, "%s: %s", ch->name, logline ); log_string( log_buf, CHANNEL_BUILD , get_trust( ch ) ); wiznet( log_buf, ch, NULL, WIZ_SECURE, 0, get_trust( ch ) ); } if ( ( !IS_NPC( ch ) && IS_SET( ch->act, PLR_LOG ) ) || fLogAll || cmd_table[cmd].log == LOG_ALWAYS ) { sprintf( log_buf, "%s: %s", ch->name, logline ); log_string( log_buf, ( ch->level == L_IMP ? CHANNEL_NONE : CHANNEL_GOD ), ( ( ch->level > 100 ) ? get_trust( ch ) : -1 ) ); wiznet( log_buf, ch, NULL, WIZ_SECURE, 0, get_trust( ch ) ); } if ( ch->desc && ch->desc->snoop_by ) { sprintf( log_buf, "%s%%", ch->name ); write_to_buffer( ch->desc->snoop_by, log_buf, 0 ); write_to_buffer( ch->desc->snoop_by, logline, 0 ); write_to_buffer( ch->desc->snoop_by, "\n\r", 2 ); } /* * Hiding stuff... - Decklarean */ if ( IS_AFFECTED(ch,AFF_HIDE) ) { /*Things you can do while hiding*/ if ( str_cmp( cmd_table[cmd].name, "pick" ) && str_cmp( cmd_table[cmd].name, "chameleon power") && str_cmp( cmd_table[cmd].name, "save" ) && str_cmp( cmd_table[cmd].name, "visible" ) && str_cmp( cmd_table[cmd].name, "inventory") && str_cmp( cmd_table[cmd].name, "equipment") && str_cmp( cmd_table[cmd].name, "where" ) && str_cmp( cmd_table[cmd].name, "who" ) && str_cmp( cmd_table[cmd].name, "open" ) && str_cmp( cmd_table[cmd].name, "hide" ) && str_cmp( cmd_table[cmd].name, "sleep" ) && str_cmp( cmd_table[cmd].name, "stand" ) && str_cmp( cmd_table[cmd].name, "rest" ) && str_cmp( cmd_table[cmd].name, "peek" ) && str_cmp( cmd_table[cmd].name, "shadow" ) && str_cmp( cmd_table[cmd].name, "sneak" ) && str_cmp( cmd_table[cmd].name, "worth" ) && str_cmp( cmd_table[cmd].name, "affected" ) && str_cmp( cmd_table[cmd].name, "look" ) && str_cmp( cmd_table[cmd].name, "tell" ) && str_cmp( cmd_table[cmd].name, "score" ) ) { /*If you are sneaking you can move these directions while hiding*/ if ( IS_AFFECTED(ch,AFF_SNEAK) && ( !str_cmp( cmd_table[cmd].name, "north" ) || !str_cmp( cmd_table[cmd].name, "east" ) || !str_cmp( cmd_table[cmd].name, "south" ) || !str_cmp( cmd_table[cmd].name, "west" ) || !str_cmp( cmd_table[cmd].name, "up" ) || !str_cmp( cmd_table[cmd].name, "down" ) ) ) { /* check and see if they are chameleon and remove it if they are trying to move*/ if ( is_affected(ch, gsn_chameleon) ) { send_to_char(AT_BLUE, "You return to your normal coloration.\n\r", ch ); affect_strip ( ch, gsn_chameleon ); } /* If they aren't hidding remove the hide bit */ if ( !is_affected(ch, gsn_hide ) ) REMOVE_BIT( ch->affected_by, AFF_HIDE ); } else { /* remove all the hidding stuff */ if ( is_affected(ch, gsn_chameleon) ) { send_to_char(AT_BLUE, "You return to your normal coloration.\n\r", ch ); affect_strip ( ch, gsn_chameleon); } if ( is_affected(ch, gsn_hide) ) { send_to_char(AT_BLUE, "You stop hiding.\n\r", ch); affect_strip ( ch, gsn_hide ); } REMOVE_BIT( ch->affected_by, AFF_HIDE ); } } } if ( IS_AFFECTED2(ch,AFF_BERSERK) && trust < LEVEL_IMMORTAL) { if ( !found || (str_cmp( cmd_table[cmd].name, "flee" ) && str_cmp( cmd_table[cmd].name, "look" ) && str_cmp( cmd_table[cmd].name, "get" ) && str_cmp( cmd_table[cmd].name, "wield") && str_cmp( cmd_table[cmd].name, "dual" ) && str_cmp( cmd_table[cmd].name, "score")) ) { send_to_char( AT_BLOOD, "You cannot do that in such a rage!\n\r",ch); return; } } if ( !found ) { /* * Look for command in socials table. */ if ( IS_NPC(ch) || !check_alias( ch, command, argument ) ) if ( !check_social( ch, command, argument ) ) send_to_char(C_DEFAULT, "Huh?\n\r", ch ); return; } /* * Character not in position for command? */ if ( ch->position < cmd_table[cmd].position ) { switch( ch->position ) { case POS_DEAD: send_to_char(AT_RED, "Lie still; you are DEAD.\n\r", ch ); break; case POS_MORTAL: case POS_INCAP: send_to_char(AT_RED, "You are hurt far too bad for that.\n\r", ch ); break; case POS_STUNNED: send_to_char(AT_WHITE, "You are too stunned to do that.\n\r", ch ); break; case POS_SLEEPING: send_to_char(AT_BLUE, "In your dreams, or what?\n\r", ch ); break; case POS_RESTING: send_to_char(AT_BLUE, "Nah... You feel too relaxed...\n\r", ch ); break; case POS_FIGHTING: send_to_char(AT_BLOOD, "No way! You are still fighting!\n\r", ch ); break; } return; } /* if ( IS_NPC(ch) ) { char combuf [MAX_STRING_LENGTH]; char filname[MAX_INPUT_LENGTH]; extern int port; sprintf(combuf, "%s: [%d] %s %s\n\r", ctime( ¤t_time), ch->pIndexData->vnum, command, argument); sprintf(filname, "comlog%d.txt", port ); append_file( ch, filname, combuf ); } */ /* * Dispatch the command. */ if ( IS_SET( ch->act, PLR_AFK ) ) /* if player was afk, remove afk */ { REMOVE_BIT( ch->act, PLR_AFK ); send_to_char( AT_YELLOW, "You are no longer AFK.\n\r", ch ); } if ( !strcmp( cmd_table[cmd].name, "sing" ) && prime_class(ch) != CLASS_BARD ) { send_to_char( C_DEFAULT, "What do you think you are, a BARD???\n\r", ch ); return; } else if ( !strcmp( cmd_table[cmd].name, "cast" ) && prime_class(ch) == CLASS_BARD ) { send_to_char( C_DEFAULT, "You're a bard, SING!\n\r", ch ); return; } /* Here checks if ch is fighting in the arena **/ if ( ch == arena.fch || ch == arena.sch ) arena_master( ch, cmd_table[cmd].name, argument ); /** Do arena_master so we can look at arg and send info over channel then we come back and process command **/ (*cmd_table[cmd].do_fun) ( ch, argument ); tail_chain( ); return; } bool can_use_cmd( int cmd, CHAR_DATA *ch, int trust ) { if ( trust <= 0 ) trust = get_trust(ch); if ( !IS_NPC(ch) ) { if ( is_name(NULL, cmd_table[cmd].name, ch->pcdata->empowerments) ) return TRUE; if ( is_name(NULL, cmd_table[cmd].name, ch->pcdata->detractments) ) return FALSE; } return (cmd_table[cmd].level <= trust); } bool check_alias( CHAR_DATA *ch, char *command, char *argument ) { ALIAS_DATA *al; char arg[MAX_STRING_LENGTH]; char newarg[MAX_STRING_LENGTH]; bool found; arg[0] = '\0'; newarg[0] = '\0'; /* if ( argument[0] != '\0' ) argument = one_argument( argument, arg );*/ while ( isspace(*argument) ) argument++; strcpy( arg, argument ); if ( IS_NPC( ch ) ) return FALSE; if ( !(ch->pcdata->alias_list) ) return FALSE; found = FALSE; for ( al = ch->pcdata->alias_list; al; al = al->next ) { if ( !str_cmp( al->old, command ) ) { /* if ( arg[0] != '\0' ) {*/ strcpy( newarg, al->new ); strcat( newarg, " " ); strcat( newarg, arg ); interpret( ch, newarg ); /* } else interpret( ch, al->new );*/ found = TRUE; break; } } return found; } bool check_social( CHAR_DATA *ch, char *command, char *argument ) { CHAR_DATA *victim; char arg [ MAX_INPUT_LENGTH ]; char buf [ MAX_STRING_LENGTH ]; /* int cmd;*/ bool found; SOCIAL_DATA *pSocial; found = FALSE; /* for ( cmd = 0; social_table[cmd].name[0] != '\0'; cmd++ ) { if ( command[0] == social_table[cmd].name[0] && !str_prefix( command, social_table[cmd].name ) ) { found = TRUE; break; } } */ for(pSocial = social_first;pSocial;pSocial = pSocial->next) { if ( command[0] == pSocial->name[0] && !str_prefix( command, pSocial->name) ) { found = TRUE; break; } } if ( !found ) return FALSE; if ( !IS_NPC( ch ) && IS_SET( ch->act, PLR_NO_EMOTE ) ) { send_to_char(AT_LBLUE, "You are anti-social!\n\r", ch ); return TRUE; } switch ( ch->position ) { case POS_DEAD: send_to_char(AT_RED, "Lie still; you are DEAD.\n\r", ch ); return TRUE; case POS_INCAP: case POS_MORTAL: send_to_char(AT_RED, "You are hurt far too badly for that.\n\r", ch ); return TRUE; case POS_STUNNED: send_to_char(AT_WHITE, "You are too stunned to do that.\n\r", ch ); return TRUE; case POS_SLEEPING: /* * I just know this is the path to a 12" 'if' statement. :( * But two players asked for it already! -- Furey */ if ( !str_cmp( pSocial->name, "snore" ) ) break; send_to_char(AT_BLUE, "In your dreams, or what?\n\r", ch ); return TRUE; } one_argument( argument, arg ); victim = NULL; if ( arg[0] == '\0' ) { act(AT_PINK, pSocial->char_no_arg, ch, NULL, victim, TO_CHAR); act(AT_PINK, pSocial->others_no_arg, ch, NULL, victim, TO_ROOM); } else if ( !( victim = get_char_room( ch, arg ) ) ) { if ( !( victim = get_char_world( ch, arg ) ) ) send_to_char(AT_WHITE, "They aren't here.\n\r", ch ); else { if ((ch->in_room->vnum == ROOM_VNUM_HELL) && (ch->level < LEVEL_IMMORTAL)) { send_to_char(AT_WHITE, "What do you think this is, a vacation?\n\r" ,ch); } else { sprintf( buf, "From a great distance, %s", pSocial->char_found); act(AT_PINK, buf, ch, NULL, victim, TO_CHAR); sprintf( buf, "From a great distance, %s", pSocial->vict_found); act(AT_PINK, buf, ch, NULL, victim, TO_VICT); sprintf( buf, "From a great distance, %s", pSocial->others_found ); act(AT_PINK, buf, ch, NULL, victim, TO_NOTVICT); } } } else if ( victim == ch ) { act(AT_PINK, pSocial->char_auto, ch, NULL, victim, TO_CHAR); act(AT_PINK, pSocial->others_auto, ch, NULL, victim, TO_ROOM); } else { act(AT_PINK, pSocial->char_found, ch, NULL, victim, TO_CHAR); act(AT_PINK, pSocial->vict_found, ch, NULL, victim, TO_VICT); act(AT_PINK, pSocial->others_found, ch, NULL, victim, TO_NOTVICT); if ( !IS_NPC( ch ) && IS_NPC( victim ) && !IS_AFFECTED( victim, AFF_CHARM ) && IS_AWAKE( victim ) && ( !victim->pIndexData->mobprogs ) ) { switch ( number_bits( 4 ) ) { case 0: if ( ( victim->level < ch->level ) && !( victim->fighting ) ) multi_hit( victim, ch, TYPE_UNDEFINED ); break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: act(AT_PINK, pSocial->char_found, victim, NULL, ch, TO_CHAR ); act(AT_PINK, pSocial->vict_found, victim, NULL, ch, TO_VICT ); act(AT_PINK, pSocial->others_found, victim, NULL, ch, TO_NOTVICT ); break; case 9: case 10: case 11: case 12: act(AT_PINK, "You slap $N.", victim, NULL, ch, TO_CHAR ); act(AT_PINK, "$n slaps you.", victim, NULL, ch, TO_VICT ); act(AT_PINK, "$n slaps $N.", victim, NULL, ch, TO_NOTVICT ); break; } } } return TRUE; } /* * Return true if an argument is completely numeric. */ bool is_number( char *arg ) { if ( *arg == '\0' ) return FALSE; if ( *arg == '+' || *arg == '-' ) arg++; for ( ; *arg != '\0'; arg++ ) { if ( !isdigit( *arg ) ) return FALSE; } return TRUE; } /* * Given a string like 14.foo, return 14 and 'foo' */ int number_argument( char *argument, char *arg ) { char *pdot; int number; for ( pdot = argument; *pdot != '\0'; pdot++ ) { if ( *pdot == '.' ) { *pdot = '\0'; number = atoi( argument ); *pdot = '.'; strcpy( arg, pdot+1 ); return number; } } strcpy( arg, argument ); return 1; } /* * Pick off one argument from a string and return the rest. * Understands quotes. */ char *one_argument( char *argument, char *arg_first ) { char cEnd; while ( isspace( *argument ) ) argument++; cEnd = ' '; if ( *argument == '\'' || *argument == '"' ) cEnd = *argument++; while ( *argument != '\0' ) { if ( *argument == cEnd ) { argument++; break; } *arg_first = LOWER( *argument ); arg_first++; argument++; } *arg_first = '\0'; while ( isspace( *argument ) ) argument++; return argument; } void do_clear( CHAR_DATA *ch, char *argument ) { ALIAS_DATA *pA1; ALIAS_DATA *pA1_next; if( !ch->pcdata->alias_list ) { send_to_char( AT_WHITE, "You have no alias' to clear.\n\r", ch ); return; } for ( pA1 = ch->pcdata->alias_list; pA1; pA1 = pA1_next ) { pA1_next = pA1->next; /*free_string(pA1->old); free_string(pA1->new); free_mem(pA1, sizeof( *pA1 ));*/ free_alias(pA1); } send_to_char( AT_WHITE, "All aliases have been erased.\n\r", ch ); ch->pcdata->alias_list = NULL; return; } void do_alias( CHAR_DATA *ch, char *argument ) { char arg[MAX_STRING_LENGTH]; char arg1[MAX_STRING_LENGTH]; ALIAS_DATA *al; ALIAS_DATA *oAl; smash_tilde( argument ); argument = one_argument( argument, arg ); strcpy( arg1, argument ); if ( arg[0] == '\0' ) { if ( !ch->pcdata->alias_list ) { send_to_char( AT_WHITE, "You have no alias' set.\n\r", ch ); return; } send_to_char( AT_WHITE, "Your currently set alias' are:\n\r", ch ); for ( al = ch->pcdata->alias_list; al; al = al->next ) { sprintf( log_buf, " %-10s &B%s&w\n\r", al->old, al->new ); send_to_char( AT_RED, log_buf, ch ); } send_to_char( AT_WHITE, "\n\r", ch ); return; } if ( arg1[0] == '\0' && ( !( ch->pcdata->alias_list ) ) ) { send_to_char( AT_WHITE, "You have no command alias' to remove!\n\r", ch ); return; } if ( arg1[0] != '\0' ) { for ( oAl = ch->pcdata->alias_list; oAl; oAl = oAl->next ) { if ( is_name( NULL, arg1, oAl->old ) || !str_prefix( arg, arg1 ) ) { send_to_char( AT_WHITE, "You cannot alias other alias' into your [new] string.\n\r", ch ); return; } } } for ( al = ch->pcdata->alias_list; al; al = al->next ) if ( !str_cmp( al->old, arg ) ) break; if ( arg1[0] == '\0' ) { if ( !al ) { send_to_char( C_DEFAULT, "Alias does not exist.\n\r", ch ); return; } if ( al == ch->pcdata->alias_list ) ch->pcdata->alias_list = al->next; else { for ( oAl = ch->pcdata->alias_list; oAl; oAl = oAl->next ) if ( oAl->next == al ) break; if ( !oAl ) { sprintf( log_buf, "Do_alias: bad alias - ch (%s) - [%s]", ch->name, arg ); bug( log_buf, 0 ); send_to_char(C_DEFAULT, "Alias does not exist.\n\r", ch ); return; } oAl->next = al->next; } /*free_string( al->old ); free_string( al->new ); free_mem( al, sizeof( *al ) );*/ free_alias( al ); act( AT_WHITE, "Alias '$t' cleared.\n\r", ch, arg, NULL, TO_CHAR ); return; } if ( al ) { free_string( al->new ); al->new = str_dup( arg1 ); sprintf( log_buf, "Alias '%s' remade.\n\r", arg ); send_to_char( AT_WHITE, log_buf, ch ); return; } /* al = alloc_perm( sizeof( *al ) ); al->old = str_dup( arg ); al->new = str_dup( arg1 ); al->next = ch->pcdata->alias_list; ch->pcdata->alias_list = al; */ add_alias( ch, al, arg, arg1 ); sprintf( log_buf, "Alias '%s' added.\n\r", arg ); send_to_char( AT_WHITE, log_buf, ch ); return; } void add_alias( CHAR_DATA *ch, ALIAS_DATA *pAl, char *old, char *new ) { pAl = alloc_perm( sizeof( *pAl ) ); pAl->old = str_dup( old ); pAl->new = str_dup( new ); pAl->next = ch->pcdata->alias_list; ch->pcdata->alias_list = pAl; return; } void do_countcommands( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; int scnt; int skill[MAX_CLASS]; int spell[MAX_CLASS]; int iclass; for ( iclass = 0; iclass < MAX_CLASS; iclass++ ) { skill[iclass] = 0; spell[iclass] = 0; } for ( scnt = 0; skill_table[scnt].name[0] != '\0'; scnt++ ) { for ( iclass = 0; iclass < MAX_CLASS; iclass++ ) { if ( skill_table[scnt].skill_level[iclass] < L_APP ) { if ( skill_table[scnt].spell_fun == spell_null ) skill[iclass]++; else spell[iclass]++; } } } sprintf(buf, "Command table size: %d\n\r" "Social table size: %d\n\r" "GSkill table size: %d\n\r" "Skill table size: %d\n\r", /* -1 from each for blank index entry at end. */ sizeof( cmd_table) / sizeof( cmd_table[0]) - 1, top_social, /*sizeof(social_table) / sizeof(social_table[0]) -1,*/ sizeof(gskill_table) / sizeof(gskill_table[0]) , scnt); /* Someone wanna explain why theres an error with sizeof(skill_table)?? */ send_to_char(AT_PINK, buf, ch ); for ( iclass = 0; iclass < MAX_CLASS; iclass++ ) { sprintf( buf, "%-15s: Skills %2d + Spells %2d = Total %2d\n\r", class_table[iclass].who_long, skill[iclass], spell[iclass], skill[iclass]+spell[iclass] ); send_to_char(AT_PINK, buf, ch ); } return; } void do_afk( CHAR_DATA *ch, char *argument ) { if ( IS_NPC( ch ) ) return; send_to_char( AT_YELLOW, "You announce that you are going AFK.\n\r", ch ); act( AT_YELLOW, "$n announces, 'I am going AFK.'", ch, NULL, NULL, TO_ROOM ); SET_BIT( ch->act, PLR_AFK ); return; } void do_pkill( CHAR_DATA *ch, char *argument ) { if ( IS_NPC( ch ) ) return; if(argument[0] == '\0' ) { send_to_char( AT_WHITE, "Syntax: &Rpkill yes&W To choose to become a PKILLER forever!\n\r", ch ); send_to_char( AT_WHITE, "This is NOT a reversible choice. Type HELP PK.\n\r", ch ); return; } if (!str_cmp( argument, "yes" ) ) { if ( ch->level < 20 ) { send_to_char( AT_WHITE, "You must be at least level 20 to choose the path of PKILL.\n\r", ch ); return; } if ( IS_SET( ch->act, PLR_PKILLER ) ) { send_to_char( AT_WHITE, "You have already chosen the path of pkilling.\n\r", ch ); return; } send_to_char( AT_RED, "You are now a PKILLER! Beware, the path you have chosen is not one of the weak minded.\n\r", ch); act( AT_RED, "$n has made a lifelong decision, to join forces with Pkillers throughout the Storm!", ch , NULL, NULL, TO_ROOM ); SET_BIT( ch->act, PLR_PKILLER ); do_help( ch, "pk" ); return; } else { send_to_char( AT_WHITE, "Syntax: &Rpkill yes&W To choose to become a PKILLER forever!\n\r", ch ); send_to_char( AT_WHITE, "This is NOT a reversible choice. Type HELP PK.\n\r", ch ); return; } } void arena_master( CHAR_DATA *ch, char *argument, char *arg2 ) { char arg [ MAX_STRING_LENGTH ]; /* char buf [ MAX_STRING_LENGTH ]; */ bool same_room = FALSE; one_argument( arg2, arg ); /* Check if two people are still in arena fighting */ if ( !arena.fch || !arena.sch ) return; /* Check if fch and sch are in same room */ if ( arena.fch->in_room == arena.sch->in_room ) same_room = TRUE; /* if ( !str_cmp( "cast", argument ) ) { } arena_chann( buf2, 0, 0 ); */ return; }