/**************************************************************************/ // interp.cpp - main game interpreter and related code /*************************************************************************** * The Dawn of Time v1.69r (c)1997-2004 Michael Garratt * * >> A number of people have contributed to the Dawn codebase, with the * * majority of code written by Michael Garratt - www.dawnoftime.org * * >> To use this source code, you must fully comply with all the licenses * * in licenses.txt... In particular, you may not remove this copyright * * notice. * *************************************************************************** * >> Original Diku Mud copyright (c)1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, & Katja Nyboe. * * >> Merc Diku Mud improvements copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * >> ROM 2.4 is copyright 1993-1995 Russ Taylor and has been brought to * * you by the ROM consortium: Russ Taylor(rtaylor@pacinfo.com), * * Gabrielle Taylor(gtaylor@pacinfo.com) & Brian Moore(rom@rom.efn.org) * * >> Oblivion 1.2 is copyright 1996 Wes Wagner * **************************************************************************/ #include "include.h" // dawn standard includes #include "interp.h" #include "security.h" #include "clan.h" #ifdef IMC #include "imc.h" #endif bool check_disabled (char_data *ch, const struct cmd_type *command); #define END_MARKER "END" // for load_disabled() and save_disabled() bool check_social(char_data *ch, char *command, char *argument, bool global); /* * Command logging types. */ #define LOG_ALWAYS 0 /* always logged into the system log */ #define LOG_PALWAYS 1 // always log players only into the system log // dont log NPC's use of the command #define LOG_OLC 3 /* ALWAYS Logged into OLC log files */ #define LOG_NORMAL 5 /* Logged into log files (when LOG ALL is on */ /* or a player log is on... if plog on, also */ /* logged into their own player log. */ #define LOG_PLOGONLY 7 /* only logged into players log file when */ /* player is being logged, not logged into */ /* main system. */ #define LOG_DONT_LOG 8 /* not logged but can be snooped - eg directions */ #define LOG_NEVER 10 /* Never logged - only thing not snoopable */ bool fLogAll = false; // Log-all switch. char last_command[MSL]; // Global variable to hold the last command char last_input[MSL]; // Global variable to hold the last input int com_category_lookup(char *name); /**************************************************************************/ // Command table. struct cmd_type cmd_table [] = { /* * Common movement commands. */ { "north", do_north, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "east", do_east, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "south", do_south, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "west", do_west, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "up", do_up, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "ne", do_northeast, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "northeast", do_northeast, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "se", do_southeast, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "southeast", do_southeast, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "sw", do_southwest, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "southwest", do_southwest, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "nw", do_northwest, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "northwest", do_northwest, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "down", do_down, POS_STANDING, 0, LOG_DONT_LOG, 0 }, // for speedwalking abbreviations { "t", do_northeast, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "g", do_southeast, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "f", do_southwest, POS_STANDING, 0, LOG_DONT_LOG, 0 }, { "r", do_northwest, POS_STANDING, 0, LOG_DONT_LOG, 0 }, /* commands put here to make them run first * - none of these show on help menus - * * Placed here so one and two letter abbreviations work. */ { "wiz", do_wizhelp, POS_DEAD, IM, LOG_NORMAL, 0 }, { "wizgrantlist", do_wizgrantlist, POS_DEAD, ADMIN, LOG_NORMAL, 0 }, { "got", do_goto, POS_DEAD, L8, LOG_NORMAL, 0 }, { "at", do_at, POS_DEAD, L7, LOG_NORMAL, 1 }, { "bu", do_buy, POS_RESTING, 0, LOG_NORMAL, 0 }, { "ba", do_backstab, POS_FIGHTING, 0, LOG_NORMAL, 0 }, { "ban", do_ban, POS_DEAD, ADMIN-1, LOG_ALWAYS, 0 }, { ":", do_immtalk, POS_DEAD, IM, LOG_NORMAL, 0 }, { "affec", do_affects, POS_DEAD, 0, LOG_NORMAL, 0 }, { "autolis", do_autolist, POS_DEAD, 0, LOG_NORMAL, 0 }, { "bec", do_bec, POS_DEAD, 0, LOG_NORMAL, 0 }, { "c", do_cast_redirect, POS_FIGHTING, 0, LOG_NORMAL, 0 }, { "chat", do_chat, POS_DEAD, 0, LOG_NORMAL, 0 }, { "cas", do_cast, POS_FIGHTING, 0, LOG_NORMAL, 0 }, { "com", do_commune, POS_FIGHTING, 0, LOG_NORMAL, 0 }, { "class", do_class, POS_DEAD, COUNCIL, LOG_ALWAYS, 0 }, { "sum", do_summon, POS_FIGHTING, 0, LOG_NORMAL, 0 }, { "charinf", do_charinfo, POS_DEAD, IM, LOG_ALWAYS, 0 }, { "channe", do_channel, POS_STANDING, 0, LOG_NORMAL, 0 }, { "command", do_commands, POS_DEAD, 0, LOG_NORMAL, 0 }, { "compar", do_compare, POS_RESTING, 0, LOG_NORMAL, 0 }, { "enveno", do_envenom, POS_RESTING, 0, LOG_NORMAL, 0 }, { "exit", do_exits, POS_RESTING, 0, LOG_NORMAL, 0 }, { "ge", do_get, POS_RESTING, 0, LOG_NORMAL, 0 }, { "grou", do_group, POS_SLEEPING, 0, LOG_NORMAL, 0 }, { "inventor", do_inventory, POS_DEAD, 0, LOG_NORMAL, 0 }, { "iwher", do_iwhere, POS_DEAD, IM, LOG_NORMAL, 0 }, { "loo", do_look, POS_RESTING, 0, LOG_NORMAL, 0 }, { "lis", do_list, POS_RESTING, 0, LOG_NORMAL, 0 }, { "kil", do_kill, POS_FIGHTING, 0, LOG_NORMAL, 0 }, { "mwher", do_mwhere, POS_DEAD, IM, LOG_NORMAL, 0 }, { "mot", do_motd, POS_DEAD, 0, LOG_NORMAL, 0 }, { "mob", do_mob, POS_DEAD, 0, LOG_NEVER, 0 }, { "mq", do_mobqueue, POS_DEAD, 0, LOG_NEVER, 0 }, { "orde", do_order, POS_RESTING, 0, LOG_PALWAYS, 0 }, { "pinf", do_pinfo, POS_DEAD, L7, LOG_NORMAL, 0 }, { "practic", do_practice, POS_SLEEPING, 0, LOG_NORMAL, 0 }, { "prefi", do_prefi, POS_DEAD, IM, LOG_NORMAL, 0 }, { "res", do_rest, POS_SLEEPING, 0, LOG_NORMAL, 0 }, { "recit", do_recite, POS_RESTING, 0, LOG_NORMAL, 0 }, { "retel", do_retell, POS_DEAD, 0, LOG_NORMAL, 0 }, { "repl", do_reply, POS_DEAD, 0, LOG_NORMAL, 0 }, { "sa", do_say, POS_RESTING, 0, LOG_NORMAL, 0 }, { "soc", do_globalsocial, POS_SLEEPING, DIS,LOG_NORMAL, 0 }, // gs is already enabled { "socket", do_sockets, POS_DEAD, L4, LOG_NORMAL, 0 }, { "secon", do_second, POS_RESTING, 0, LOG_NORMAL, 0 }, { "sl", do_sleep, POS_SLEEPING, 0, LOG_NORMAL, 0 }, { "stan", do_stand, POS_SLEEPING, 0, LOG_NORMAL, 0 }, { "scor", do_score, POS_DEAD, 0, LOG_NORMAL, 0 }, { "tel", do_tell, POS_SLEEPING, 0, LOG_NORMAL, 0 }, { "unloc", do_unlock, POS_RESTING, 0, LOG_NORMAL, 0 }, { "wh", do_who, POS_DEAD, 0, LOG_NORMAL, 0 }, { "wiel", do_wear, POS_RESTING, 0, LOG_NORMAL, 0 }, { "seevnu", do_seevnum, POS_DEAD, IM, LOG_NORMAL, 0 }, { "wor", do_worth, POS_SLEEPING, 0, LOG_NORMAL, 0 }, /* all commands - sorted alphabetically */ { "'", do_say, POS_RESTING, 0, LOG_NORMAL, 0 }, { "\"", do_whisper, POS_RESTING, 0, LOG_NORMAL, 0 }, { "\\", do_speedwalk, POS_STANDING, 0, LOG_NORMAL, 0 }, { ",", do_emote, POS_RESTING, 0, LOG_NORMAL, 0 }, { ".", do_ooc, POS_DEAD, 0, LOG_NORMAL, 0 }, { ">", do_retell, POS_DEAD, 0, LOG_NORMAL, 0 }, { "[", do_admintalk, POS_DEAD, ADMIN, LOG_NORMAL, 0 }, { "]", do_hightalk, POS_DEAD, ML-1, LOG_NORMAL, 0 }, { "=", do_codetalk, POS_DEAD, IM, LOG_NORMAL, 0 }, { "-", do_mythostalk, POS_DEAD, IM, LOG_NORMAL, 0 }, { "/", do_recall, POS_FIGHTING, 0, LOG_NORMAL, 0 }, { "add", do_add, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "affects", do_affects, POS_DEAD, 0, LOG_NORMAL, 1 }, { "afk", do_afk, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "alia", do_alia, POS_DEAD, 0, LOG_NORMAL, 0 }, { "alias", do_alias, POS_DEAD, 0, LOG_NORMAL, 1 }, { "alignstat", do_alignstats, POS_DEAD, 0, LOG_NORMAL, 1 }, { "amote", do_amote, POS_RESTING, 0, LOG_NORMAL, 0 }, { "answer", do_answer, POS_DEAD, 0, LOG_NORMAL, 1 }, { "ansi", do_colour, POS_DEAD, 0, LOG_NORMAL, 0 }, { "apply", do_apply, POS_STANDING, 0, LOG_NORMAL, 1 }, { "append", do_append, POS_DEAD, 0, LOG_NORMAL, 0 }, { "areas", do_areas, POS_DEAD, 0, LOG_NORMAL, 1 }, { "areasalpha", do_areasalpha, POS_DEAD, 0, LOG_NORMAL, 1 }, { "askname", do_askname, POS_RESTING, 0, LOG_NORMAL, 1 }, { "attune", do_attune, POS_STANDING, 0, LOG_NORMAL, 1 }, { "autoanswer", do_autoanswer, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "autoassist", do_autoassist, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autodamage", do_autodamage, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autoexit", do_autoexit, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autoexamine", do_autoexamine, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autogold", do_autogold, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autokeepalive", do_autokeepalive, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autolandonrest", do_autolandonrest, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autolist", do_autolist, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autoloot", do_autoloot, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autopeek", do_autopeek, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autopkassist", do_autopkassist, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autorecall", do_autorecall, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autoreformat", do_autoreformat, POS_DEAD, IM, LOG_NORMAL, 1 }, { "autoself", do_autoself, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autosubdue", do_autosubdue, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autosplit", do_autosplit, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autotrack", do_autotrack, POS_DEAD, 0, LOG_NORMAL, 1 }, { "autowhoinvislogin",do_autowhoinvislogin, POS_DEAD, IM, LOG_NORMAL, 1 }, { "autowizilogin", do_autowizilogin, POS_DEAD, IM, LOG_NORMAL, 1 }, { "autowraptells", do_autowraptells, POS_DEAD, 0, LOG_NORMAL, 1 }, { "awareness", do_awareness, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "backstab", do_backstab, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "bank", do_bank, POS_STANDING, 0, LOG_ALWAYS, 1 }, { "bash", do_bash, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "battlelag", do_battlelag, POS_DEAD, 0, LOG_NORMAL, 1 }, { "berserk", do_berserk, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "becomeactive", do_becomeactive, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "brandish", do_brandish, POS_RESTING, 0, LOG_NORMAL, 1 }, { "brief", do_brief, POS_DEAD, 0, LOG_NORMAL, 1 }, { "bs", do_backstab, POS_FIGHTING, 0, LOG_NORMAL, 0 }, { "bug", do_bug, POS_DEAD, 0, LOG_NORMAL, 1 }, { "buy", do_buy, POS_RESTING, 0, LOG_NORMAL, 1 }, { "brew", do_brew, POS_RESTING, 0, LOG_NORMAL, 1 }, { "build", do_build, POS_RESTING, 0, LOG_NORMAL, 1 }, { "bury", do_bury, POS_STANDING, 0, LOG_NORMAL, 1 }, { "bypassduel", do_bypassduel, POS_RESTING, 0, LOG_ALWAYS, 1 }, { "cannibalize", do_cannibalize, POS_STANDING, IM, LOG_NORMAL, 1 }, { "cast", do_cast, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "changes", do_changes, POS_DEAD, 0, LOG_NORMAL, 1 }, { "channels", do_channels, POS_DEAD, 0, LOG_NORMAL, 1 }, { "circle", do_circle, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "close", do_close, POS_RESTING, 0, LOG_NORMAL, 1 }, { "claw", do_claw, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "classstats", do_classstats, POS_DEAD, 0, LOG_NORMAL, 1 }, { "classinfo", do_classinfo, POS_DEAD, 0, LOG_NORMAL, 1 }, { "clantalk", do_clantalk, POS_DEAD, 0, LOG_NORMAL, 1 }, { "cranks", do_clanranks, POS_DEAD, 0, LOG_NORMAL, 0 }, { "clanranks", do_clanranks, POS_DEAD, 0, LOG_NORMAL, 1 }, { "color", do_colour, POS_DEAD, 0, LOG_NORMAL, 0 }, { "colour", do_colour, POS_DEAD, 0, LOG_NORMAL, 1 }, { "collect", do_collect, POS_STANDING, 0, LOG_NORMAL, 1 }, { "cook", do_cook, POS_RESTING, 0, LOG_NORMAL, 1 }, { "combine", do_combine, POS_DEAD, 0, LOG_NORMAL, 1 }, { "commands", do_commands, POS_DEAD, 0, LOG_NORMAL, 0 }, { "commune", do_commune, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "compact", do_compact, POS_DEAD, 0, LOG_NORMAL, 1 }, { "compare", do_compare, POS_DEAD, 0, LOG_NORMAL, 1 }, { "consider", do_consider, POS_RESTING, 0, LOG_NORMAL, 1 }, { "continue", do_continue, POS_RESTING, 0, LOG_NORMAL, 0 }, { "count", do_count, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "cskinfo", do_cskinfo, POS_DEAD, 0, LOG_NORMAL, 0 }, { "cspinfo", do_cspinfo, POS_DEAD, 0, LOG_NORMAL, 0 }, { "credits", do_credits, POS_DEAD, 0, LOG_NORMAL, 1 }, { "ctalk", do_clantalk, POS_DEAD, 0, LOG_NORMAL, 0 }, { "ctime", do_compile_time, POS_DEAD, 0, LOG_NORMAL, 1 }, { "dawnftp", do_dawnftp, POS_DEAD, 0, LOG_NORMAL, 1 }, { "delet", do_delet, POS_DEAD, 0, LOG_ALWAYS, 0 }, { "delete", do_delete, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "demote", do_demote, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "description", do_description, POS_DEAD, 0, LOG_NORMAL, 1 }, { "diagnose", do_diagnose, POS_STANDING, 0, LOG_NORMAL, 1 }, { "dig", do_dig, POS_STANDING, 0, LOG_NORMAL, 1 }, { "dirt", do_dirt, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "disarm", do_disarm, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "dismount", do_dismount, POS_STANDING, 0, LOG_NORMAL, 1 }, { "donate", do_donate, POS_STANDING, 0, LOG_NORMAL, 1 }, { "drink", do_drink, POS_RESTING, 0, LOG_NORMAL, 1 }, { "drag", do_drag, POS_STANDING, IM, LOG_ALWAYS, 1 }, { "draw", do_draw, POS_RESTING, 0, LOG_NORMAL, 1 }, { "drop", do_drop, POS_RESTING, 0, LOG_NORMAL, 1 }, { "duel", do_duel, POS_STANDING, 0, LOG_ALWAYS, 1 }, { "acceptduel", do_acceptduel, POS_STANDING, 0, LOG_ALWAYS, 1 }, { "declineduel", do_declineduel, POS_RESTING, 0, LOG_ALWAYS, 1 }, { "declineooc", do_declineooc, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "eat", do_eat, POS_RESTING, 0, LOG_NORMAL, 1 }, { "emote", do_emote, POS_RESTING, 0, LOG_NORMAL, 1 }, { "empty", do_empty, POS_RESTING, 0, LOG_NORMAL, 1 }, { "enter", do_enter, POS_STANDING, 0, LOG_NORMAL, 1 }, { "envenom", do_envenom, POS_RESTING, 0, LOG_NORMAL, 1 }, { "equipment", do_equipment, POS_DEAD, 0, LOG_NORMAL, 1 }, { "examine", do_examine, POS_RESTING, 0, LOG_NORMAL, 1 }, { "exits", do_exits, POS_RESTING, 0, LOG_NORMAL, 1 }, { "fill", do_fill, POS_RESTING, 0, LOG_NORMAL, 1 }, { "fullexits", do_fullexits, POS_DEAD, 0, LOG_NORMAL, 1 }, { "forget", do_forget, POS_RESTING, 0, LOG_NORMAL, 1 }, { "fork", do_fork, POS_STANDING, IM, LOG_NORMAL, 1 }, { "flee", do_flee, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "flame", do_flame, POS_DEAD, IM, LOG_NORMAL, 1 }, { "flourish", do_flourish, POS_STANDING, IM, LOG_NORMAL, 1 }, { "flip", do_flip, POS_RESTING, 0, LOG_NORMAL, 1 }, { "fly", do_fly, POS_RESTING, 0, LOG_NORMAL, 1 }, { "follow", do_follow, POS_RESTING, 0, LOG_NORMAL, 1 }, { "for", do_force, POS_DEAD, L7, LOG_ALWAYS, 0 }, { "forage", do_forage, POS_STANDING, 0, LOG_NORMAL, 1 }, { "freevnum", do_freevnum, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "gain", do_gain, POS_RESTING, 0, LOG_NORMAL, 1 }, { "gamble", do_gamble, POS_SITTING, 0, LOG_ALWAYS, 1 }, { "gamesettings", do_gamesettings, POS_DEAD, 0, LOG_NORMAL, 1 }, { "get", do_get, POS_RESTING, 0, LOG_NORMAL, 1 }, { "genname", do_genname, POS_DEAD, 0, LOG_NORMAL, 1 }, { "give", do_give, POS_RESTING, 0, LOG_NORMAL, 1 }, { "glance", do_glance, POS_RESTING, 0, LOG_NORMAL, 1 }, { "gs", do_globalsocial, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "go", do_enter, POS_STANDING, 0, LOG_NORMAL, 0 }, { "goooc", do_goooc, POS_STANDING, 0, LOG_ALWAYS, 1 }, { "gore", do_gore, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "gouge", do_gouge, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "gprompt", do_gprompt, POS_DEAD, 0, LOG_NORMAL, 1 }, { "grab", do_grab, POS_STANDING, 0, LOG_NORMAL, 1 }, { "grats", do_grats, POS_DEAD, IM, LOG_NORMAL, 1 }, { "group", do_group, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "groups", do_skillgroups, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "heal", do_heal, POS_DEAD, 0, LOG_NORMAL, 1 }, { "help", do_help, POS_DEAD, 0, LOG_NORMAL, 1 }, { "helpcat", do_helpcat, POS_DEAD, 0, LOG_NORMAL, 1 }, { "helplist", do_helplist, POS_DEAD, 0, LOG_NORMAL, 1 }, { "helpprev", do_helpprev, POS_DEAD, 0, LOG_NORMAL, 1 }, { "helpnext", do_helpnext, POS_DEAD, 0, LOG_NORMAL, 1 }, // { "helphistory", do_helphistory, POS_DEAD, 0, LOG_NORMAL, 1 }, { "herbalism", do_herbalism, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "herblore", do_herblore, POS_SITTING, IM, LOG_ALWAYS, 1 }, { "hide", do_hide, POS_RESTING, 0, LOG_NORMAL, 1 }, { "history", do_history, POS_DEAD, 1, LOG_NORMAL, 1 }, { "hit", do_kill, POS_FIGHTING, 0, LOG_NORMAL, 0 }, { "hlook", do_hlook, POS_DEAD, 1, LOG_NORMAL, 1 }, { "hold", do_hold, POS_RESTING, 0, LOG_NORMAL, 1 }, { "ic", do_ic, POS_DEAD, IM, LOG_NORMAL, 1 }, { "ictime", do_time, POS_DEAD, 0, LOG_NORMAL, 1 }, { "ideas", do_idea, POS_DEAD, 0, LOG_NORMAL, 1 }, { "info", do_skillgroups, POS_DEAD, 0, LOG_NORMAL, 1 }, { "introduce", do_introduce, POS_RESTING, 0, LOG_NORMAL, 1 }, { "inventory", do_inventory, POS_DEAD, 0, LOG_NORMAL, 1 }, { "invitelist", do_invitelist, POS_DEAD, 0, LOG_NORMAL, 1 }, { "ispell", do_ispell, POS_DEAD, 0, LOG_NORMAL, 1 }, { "kick", do_kick, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "kill", do_kill, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "kneel", do_kneel, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "knock", do_knock, POS_SITTING, 0, LOG_NORMAL, 1 }, { "lay", do_lay_on_hands, POS_STANDING, 0, LOG_NORMAL, 1 }, { "lag", do_lag, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "language", do_language, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "land", do_land, POS_RESTING, 0, LOG_NORMAL, 1 }, { "laston", do_laston, POS_DEAD, 0, LOG_NORMAL, 1 }, { "lastonreload", do_lastonreload, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "letter", do_letter, POS_DEAD, 0, LOG_NORMAL, 1 }, { "lines", do_scroll, POS_DEAD, 0, LOG_NORMAL, 1 }, { "list", do_list, POS_RESTING, 0, LOG_NORMAL, 1 }, { "loc", do_lockers, POS_RESTING, 0, LOG_ALWAYS, 0 }, { "lock", do_lock, POS_RESTING, 0, LOG_NORMAL, 1 }, { "lockers", do_lockers, POS_RESTING, 0, LOG_ALWAYS, 1 }, { "look", do_look, POS_RESTING, 0, LOG_NORMAL, 1 }, { "lore", do_lore, POS_RESTING, 0, LOG_NORMAL, 1 }, { "losepet", do_losepet, POS_RESTING, 0, LOG_NORMAL, 1 }, { "mccp", do_mccp, POS_DEAD, 0, LOG_NORMAL, 1 }, { "metric", do_metric, POS_DEAD, 0, LOG_NORMAL, 1 }, { "misc", do_misc, POS_DEAD, 0, LOG_NORMAL, 1 }, { "mixflask", do_mixflask, POS_RESTING, 0, LOG_ALWAYS, 1 }, // mix herbs in a flask { "mode", do_mode, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "moon", do_weather, POS_RESTING, 0, LOG_NORMAL, 1 }, { "moot", do_moot, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "motd", do_motd, POS_DEAD, 0, LOG_NORMAL, 1 }, { "msp", do_msp, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "mudstats", do_mudstats, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "mudftp", do_dawnftp, POS_DEAD, 0, LOG_NORMAL, 1 }, { "mxp", do_mxp, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "mxpreflect", do_mxpreflect, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "name_b4short", do_name_b4short, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "name_only_4known",do_name_only_4known,POS_DEAD, 0, LOG_ALWAYS, 1 }, { "needlepoint", do_needlepoint, POS_STANDING, 0, LOG_ALWAYS, 1 }, { "news", do_news, POS_DEAD, 0, LOG_NORMAL, 1 }, { "newbietalk", do_newbietalk, POS_DEAD, 0, LOG_NORMAL, 1 }, { "nofollow", do_nofollow, POS_DEAD, 0, LOG_NORMAL, 1 }, { "nomisc", do_nomisc, POS_DEAD, 0, LOG_NORMAL, 1 }, { "nosummon", do_nosummon, POS_DEAD, 0, LOG_NORMAL, 1 }, { "nocharm", do_nocharm, POS_DEAD, 0, LOG_NORMAL, 1 }, { "nonames", do_nonames, POS_DEAD, 0, LOG_NORMAL, 1 }, { "noheromsg", do_noheromsg, POS_DEAD, HE-1, LOG_NORMAL, 1 }, { "notes", do_note, POS_DEAD, 0, LOG_NORMAL, 1 }, { "noteach", do_noteach, POS_DEAD, 0, LOG_NORMAL, 1 }, { "nspeak", do_nspeak, POS_SLEEPING, 0, LOG_ALWAYS, 1 }, { "ntalk", do_ntalk, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "ntell", do_ntell, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "nreply", do_nreply, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "ooc", do_ooc, POS_DEAD, 0, LOG_NORMAL, 1 }, { "open", do_open, POS_RESTING, 0, LOG_NORMAL, 1 }, { "order", do_order, POS_RESTING, 0, LOG_PALWAYS, 1 }, { "outcast", do_outcast, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "outfit", do_outfit, POS_RESTING, 0, LOG_NORMAL, 1 }, { "ownerlist", do_ownerlist, POS_DEAD, IM, LOG_NORMAL, 1 }, { "panic", do_panic, POS_DEAD, 0, LOG_NORMAL, 1 }, { "password", do_password, POS_DEAD, 0, LOG_NEVER, 1 }, { "peek", do_peek, POS_RESTING, 0, LOG_NORMAL, 1 }, { "pick", do_pick, POS_RESTING, 0, LOG_NORMAL, 1 }, { "place", do_place, POS_STANDING, 0, LOG_ALWAYS, 1 }, { "pkinfo", do_pkinfo, POS_DEAD, 0, LOG_NORMAL, 1 }, { "pmote", do_pmote, POS_RESTING, 0, LOG_PALWAYS, 0 }, { "pour", do_pour, POS_RESTING, 0, LOG_NORMAL, 1 }, { "pose", do_pose, POS_RESTING, DIS, LOG_NORMAL, 1 }, // needs to be enabled if used { "pounce", do_pounce, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "practice", do_practice, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "pray", do_pray, POS_RESTING, 0, LOG_NORMAL, 1 }, { "promote", do_promote, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "prompt", do_prompt, POS_DEAD, 0, LOG_NORMAL, 1 }, { "push", do_push, POS_STANDING, IM, LOG_ALWAYS, 1 }, { "put", do_put, POS_RESTING, 0, LOG_NORMAL, 1 }, { "quaff", do_quaff, POS_RESTING, 0, LOG_NORMAL, 1 }, { "question", do_question, POS_DEAD, 0, LOG_NORMAL, 1 }, { "quester", do_quester, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "qpoints", do_qpoints, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "qui", do_qui, POS_DEAD, 0, LOG_NORMAL, 0 }, { "quiet", do_quiet, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "quit", do_quit, POS_DEAD, 0, LOG_NORMAL, 1 }, { "racestats", do_racestats, POS_DEAD, 0, LOG_NORMAL, 1 }, { "raceinfo", do_raceinfo, POS_DEAD, 0, LOG_NORMAL, 1 }, { "ride", do_ride, POS_STANDING, 0, LOG_NORMAL, 1 }, { "read", do_read, POS_RESTING, 0, LOG_NORMAL, 1 }, { "recall", do_recall, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "recite", do_recite, POS_RESTING, 0, LOG_NORMAL, 1 }, { "remove", do_remove, POS_RESTING, 0, LOG_NORMAL, 1 }, { "rent", do_rent, POS_RESTING, 0, LOG_NORMAL, 1 }, { "replay", do_replay, POS_DEAD, 0, LOG_NORMAL, 1 }, { "replaychannels", do_replaychannels, POS_DEAD, 0, LOG_NORMAL, 1 }, { "replayroom", do_replayroom, POS_DEAD, 0, LOG_NORMAL, 1 }, { "reply", do_reply, POS_DEAD, 0, LOG_NORMAL, 1 }, { "report", do_report, POS_DEAD, 0, LOG_NORMAL, 1 }, { "requestooc", do_requestooc, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "requestletgain", do_requestletgain, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "rpsheet", do_rpsheet, POS_DEAD, 0, LOG_NORMAL, 1 }, { "rptell", do_rptell, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "rpreply", do_rpreply, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "cletgain", do_cancelletgain, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "rletgain", do_requestletgain, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "cancelletgain", do_cancelletgain, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "rescue", do_rescue, POS_FIGHTING, 0, LOG_NORMAL, 0 }, { "rest", do_rest, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "retell", do_retell, POS_DEAD, 0, LOG_NORMAL, 1 }, { "retreat", do_retreat, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "rules", do_rules, POS_DEAD, 0, LOG_NORMAL, 1 }, { "save", do_save, POS_DEAD, 0, LOG_NORMAL, 1 }, { "rsay", do_rsay, POS_RESTING, 0, LOG_NORMAL, 0 }, // remembered say for mobprogs { "say", do_say, POS_RESTING, 0, LOG_NORMAL, 1 }, { "saymote", do_saymote, POS_RESTING, 0, LOG_NORMAL, 1 }, { "sayto", do_sayto, POS_RESTING, 0, LOG_NORMAL, 1 }, { "scan", do_sscan, POS_STANDING, 0, LOG_NORMAL, 1 }, { "score", do_score, POS_DEAD, 0, LOG_NORMAL, 1 }, { "scroll", do_scroll, POS_DEAD, 0, LOG_NORMAL, 1 }, { "scribe", do_scribe, POS_RESTING, 0, LOG_NORMAL, 1 }, { "search", do_search, POS_STANDING, 0, LOG_NORMAL, 1 }, { "set", do_set, POS_DEAD, L3, LOG_ALWAYS, 1 }, { "setage", do_setage, POS_RESTING, 0, LOG_ALWAYS, 1 }, { "setdeity", do_setdeity, POS_DEAD, L2, LOG_NORMAL, 1 }, { "setichour", do_setichour, POS_DEAD, ML, LOG_NORMAL, 1 }, { "setrooms", do_setrooms, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "second", do_second, POS_DEAD, 0, LOG_NORMAL, 1 }, { "seek", do_seek, POS_DEAD, 0, LOG_NORMAL, 1 }, { "sell", do_sell, POS_RESTING, 0, LOG_NORMAL, 1 }, { "shadow", do_shadow, POS_STANDING, IM, LOG_NORMAL, 1 }, { "sharpen", do_sharpen, POS_RESTING, IM, LOG_ALWAYS, 1 }, { "show", do_show, POS_RESTING, 0, LOG_NORMAL, 1 }, { "showaffects", do_showaffects, POS_DEAD, 0, LOG_NORMAL, 1 }, { "showmisc", do_showmisc, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "sheathe", do_sheathe, POS_STANDING, 0, LOG_NORMAL, 1 }, { "sit", do_sit, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "skills", do_skills, POS_DEAD, 0, LOG_NORMAL, 1 }, { "skillgroups", do_skillgroups, POS_DEAD, 0, LOG_NORMAL, 1 }, { "slice", do_slice, POS_RESTING, 0, LOG_NORMAL, 1 }, { "sleep", do_sleep, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "smote", do_smote, POS_DEAD, 0, LOG_NORMAL, 0 }, { "sneak", do_sneak, POS_STANDING, 0, LOG_NORMAL, 1 }, { "social", do_globalsocial, POS_SLEEPING, DIS,LOG_NORMAL, 1 }, // gs is already enabled { "socials", do_socials, POS_DEAD, 0, LOG_NORMAL, 1 }, { "socshow", do_socshow, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "spells", do_spells, POS_DEAD, 0, LOG_NORMAL, 1 }, { "spinfo", do_spinfo, POS_DEAD, 0, LOG_NORMAL, 1 }, { "sinfo", do_sinfo, POS_DEAD, 0, LOG_NORMAL, 1 }, { "sing", do_sing, POS_DEAD, IM, LOG_NORMAL, 1 }, // Beginning of bards { "speedwalk", do_speedwalk, POS_STANDING, 0, LOG_ALWAYS, 1 }, { "split", do_split, POS_RESTING, 0, LOG_NORMAL, 1 }, { "stand", do_stand, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "steal", do_steal, POS_STANDING, 0, LOG_NORMAL, 1 }, { "story", do_story, POS_DEAD, 0, LOG_NORMAL, 1 }, { "study", do_study, POS_RESTING, 0, LOG_NORMAL, 1 }, { "surrender", do_surrender, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "subdue", do_subdue, POS_RESTING, 0, LOG_ALWAYS, 1 }, { "summon", do_summon, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "take", do_get, POS_RESTING, 0, LOG_NORMAL, 1 }, { "tame", do_tame, POS_STANDING, 0, LOG_NORMAL, 1 }, { "teach", do_teach, POS_RESTING, 0, LOG_NORMAL, 1 }, { "tell", do_tell, POS_DEAD, 0, LOG_NORMAL, 1 }, { "tether", do_tether, POS_STANDING, 0, LOG_NORMAL, 1 }, { "throw", do_throw, POS_STANDING, 0, LOG_NORMAL, 1 }, { "date", do_time, POS_DEAD, 0, LOG_NORMAL, 1 }, { "time", do_time, POS_DEAD, 0, LOG_NORMAL, 1 }, { "title", do_title, POS_DEAD, 0, LOG_NORMAL, 1 }, { "train", do_train, POS_RESTING, 0, LOG_NORMAL, 1 }, { "tracks", do_tracks, POS_DEAD, 0, LOG_NORMAL, 1 }, { "trip", do_trip, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "typo", do_typo, POS_DEAD, 0, LOG_NORMAL, 1 }, { "unalias", do_unalias, POS_DEAD, 0, LOG_NORMAL, 1 }, { "unlock", do_unlock, POS_RESTING, 0, LOG_NORMAL, 1 }, { "unread", do_unread, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "untether", do_untether, POS_STANDING, 0, LOG_NORMAL, 1 }, { "uptime", do_uptime, POS_DEAD, 0, LOG_NORMAL, 1 }, { "value", do_value, POS_RESTING, 0, LOG_NORMAL, 1 }, { "vanish", do_vanish, POS_STANDING, 0, LOG_NORMAL, 1 }, { "visible", do_visible, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "unhide", do_visible, POS_SLEEPING, 0, LOG_NORMAL, 0 }, // visible alias { "vote", do_vote, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "wake", do_wake, POS_SLEEPING, 0, LOG_NORMAL, 1 }, { "wear", do_wear, POS_RESTING, 0, LOG_NORMAL, 1 }, { "weather", do_weather, POS_RESTING, 0, LOG_NORMAL, 1 }, { "whisper", do_whisper, POS_RESTING, 0, LOG_NORMAL, 1 }, { "who", do_who, POS_DEAD, 0, LOG_NORMAL, 1 }, { "whois", do_whois, POS_DEAD, 0, LOG_NORMAL, 1 }, { "whoformat", do_whoformat, POS_DEAD, IM, LOG_NORMAL, 1 }, { "wield", do_wear, POS_RESTING, 0, LOG_NORMAL, 1 }, { "wimpy", do_wimpy, POS_DEAD, 0, LOG_NORMAL, 1 }, { "wizlist", do_wizlist, POS_DEAD, 0, LOG_NORMAL, 1 }, { "worship", do_worship, POS_STANDING, IM, LOG_NORMAL, 1 }, { "worth", do_worth, POS_SLEEPING, 0, LOG_NORMAL, 1 }, // worth aliases { "money", do_worth, POS_SLEEPING, 0, LOG_NORMAL, 0 }, { "gold", do_worth, POS_SLEEPING, 0, LOG_NORMAL, 0 }, { "silver", do_worth, POS_SLEEPING, 0, LOG_NORMAL, 0 }, { "yell", do_yell, POS_RESTING, 0, LOG_NORMAL, 1 }, { "testyell", do_testyell, POS_RESTING, IM, LOG_NORMAL, 1 }, { "zap", do_zap, POS_RESTING, 0, LOG_NORMAL, 1 }, // Putting Weapon skills down here so they don't interfere with other commands { "boneshatter", do_boneshatter, POS_FIGHTING, IM, LOG_ALWAYS, 0 }, { "charge", do_charge, POS_STANDING, IM, LOG_ALWAYS, 0 }, { "conceal", do_conceal, POS_RESTING, IM, LOG_ALWAYS, 0 }, { "cutoff", do_cutoff, POS_FIGHTING, IM, LOG_ALWAYS, 0 }, { "dervish", do_dervish, POS_FIGHTING, IM, LOG_ALWAYS, 0 }, { "entangle", do_entangle, POS_FIGHTING, IM, LOG_ALWAYS, 0 }, { "hobble", do_hobble, POS_FIGHTING, IM, LOG_ALWAYS, 0 }, { "hurl", do_hurl, POS_FIGHTING, IM, LOG_ALWAYS, 0 }, { "overhead", do_overhead, POS_FIGHTING, IM, LOG_ALWAYS, 0 }, { "shieldcleave", do_shieldcleave, POS_FIGHTING, IM, LOG_ALWAYS, 0 }, { "vault", do_vault, POS_STANDING, IM, LOG_ALWAYS, 0 }, // new mapping features - mortal { "automap", do_automap, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "autoreset", do_autoreset, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "autosaymote", do_autosaymote, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "autosaycolourcodes", do_autosaycolourcodes, POS_DEAD,0, LOG_ALWAYS, 1 }, { "autovote", do_autovote, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "map", do_map, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "mapclear", do_mapclear, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "nomapexits", do_nomapexits, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "nomapblanks", do_nomapblanks, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "areamap", do_areamap, POS_DEAD, IM+1,LOG_ALWAYS, 1 }, { "scalemap", do_scalemap, POS_DEAD, IM+1,LOG_ALWAYS, 1 }, { "scalemxp", do_scalemxp, POS_DEAD, IM+1,LOG_ALWAYS, 1 }, // new mapping features - immortal only { "mapnum", do_mapnum, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "fullmap", do_fullmap, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "amap", do_amap, POS_DEAD, IM, LOG_ALWAYS, 1 }, /* * --== Immortal commands ==-- * * ML MAX_LEVEL = implementor (100) * L1 MAX_LEVEL - 1 = creator (99) * L2 MAX_LEVEL - 2 = supreme being (98) * L3 MAX_LEVEL - 3 = deity (97) * L4 MAX_LEVEL - 4 = god (96) * L5 MAX_LEVEL - 5 = immortal (95) * L6 MAX_LEVEL - 6 = demigod (94) * L7 MAX_LEVEL - 7 = angel (93) * L8 MAX_LEVEL - 8 = avatar (92) * IM LEVEL_IMMORTAL = angel (92) * HE LEVEL_HERO = hero (91) */ /* first imm commands that dont show up on wizhelp menu */ { "dump", do_dump, POS_DEAD, ML, LOG_ALWAYS, 0 }, { "reboo", do_reboo, POS_DEAD, L2, LOG_NORMAL, 0 }, { "shutdow", do_shutdow, POS_DEAD, L2, LOG_NORMAL, 0 }, { "sla", do_sla, POS_DEAD, L3, LOG_NORMAL, 0 }, { "invis", do_wizinvis, POS_DEAD, IM, LOG_NORMAL, 0 }, /* immortal commands on the menus */ { "admintalk", do_admintalk, POS_DEAD, ADMIN, LOG_NORMAL, 1 }, { "addclan", do_addclan, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "addcourt", do_addcourt, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "addmoot", do_addmoot, POS_DEAD, ADMIN, LOG_ALWAYS, 1 }, { "addscript", do_addscript, POS_DEAD, ADMIN, LOG_ALWAYS, 1 }, { "advance", do_advance, POS_DEAD, L1, LOG_ALWAYS, 1 }, { "allow", do_allow, POS_DEAD, L2, LOG_ALWAYS, 1 }, { "allow", do_allow, POS_DEAD, L3, LOG_ALWAYS, 0 }, { "allowimmtalk", do_allowimmtalk, POS_DEAD, ADMIN, LOG_ALWAYS, 1 }, { "anote", do_anote, POS_DEAD, ADMIN+1,LOG_NORMAL, 1 }, { "anote", do_anote, POS_DEAD, ADMIN, LOG_NORMAL, 0 }, { "atell", do_atell, POS_DEAD, IM, LOG_NORMAL, 1 }, { "atlevel", do_atlevel, POS_DEAD, L6, LOG_NORMAL, 1 }, { "ban", do_ban, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "banedit", do_banedit, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "bardify", do_bardify, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "breaktell", do_breaktell, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "boon", do_boon, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "castatlevel", do_castatlevel, POS_FIGHTING, IM, LOG_ALWAYS, 1 }, { "chardesc", do_chardescript, POS_DEAD, 1, LOG_ALWAYS, 1 }, { "charhistory", do_charhistory, POS_DEAD, 1, LOG_ALWAYS, 1 }, { "charinfo", do_charinfo, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "charnotes", do_charnotes, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "checkbug", do_checkbug, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "checkclanbank", do_checkclanbank, POS_DEAD, ADMIN, LOG_ALWAYS, 1 }, { "checkcode", do_checkcode, POS_DEAD, ML-1, LOG_ALWAYS, 1 }, { "checkdead", do_checkdead, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "checkhelps", do_checkhelp, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "checklog", do_checklog, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "checkirc", do_checkirc, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "checkbalance", do_checkbalance, POS_DEAD, ADMIN, LOG_ALWAYS, 1 }, { "checkexits", do_checkexits, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "checkmoblog", do_checkmoblog, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "checkooc", do_checkooc, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "checkmultilog", do_checkmultilog, POS_DEAD, ADMIN, LOG_ALWAYS, 1 }, { "checknewbie", do_checknewbie, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "checknsup", do_checknsupport, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "checkntalk", do_checkntalk, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "checktypos", do_checktypos, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "checkban", do_checkban, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "cinfo", do_cinfo, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "clist", do_clanlist, POS_DEAD, IM, LOG_NORMAL, 1 }, { "clanlist", do_clanlist, POS_DEAD, IM, LOG_NORMAL, 0 }, { "class", do_class, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "createspell", do_createspell, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "clone", do_clone, POS_DEAD, L5, LOG_ALWAYS, 1 }, { "cwhere", do_cwhere, POS_DEAD, IM, LOG_NORMAL, 1 }, { "codetalk", do_codetalk, POS_DEAD, IM, LOG_NORMAL, 0 }, { "clear_createcount",do_clear_createcount,POS_DEAD,ML-1, LOG_ALWAYS, 1 }, { "councillist", do_councillist, POS_DEAD, IM+1, LOG_ALWAYS, 1 }, { "delmoot", do_delmoot, POS_DEAD, ADMIN, LOG_ALWAYS, 1 }, { "delscript", do_delscript, POS_DEAD, ADMIN, LOG_ALWAYS, 1 }, { "delquest", do_delquest, POS_DEAD, IM, LOG_NORMAL, 1 }, { "deny", do_deny, POS_DEAD, L2, LOG_ALWAYS, 1 }, { "disable", do_disable, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "disconnect", do_disconnect, POS_DEAD, L3, LOG_ALWAYS, 1 }, { "disallowpkill", do_disallowpkill, POS_DEAD, ADMIN, LOG_ALWAYS, 1 }, { "dlook", do_dlook, POS_DEAD, 1, LOG_NORMAL, 1 }, { "dofor", do_for, POS_DEAD, ADMIN+1,LOG_ALWAYS, 1 }, { "dream", do_dream, POS_DEAD, IM, LOG_NORMAL, 0 }, { "echo", do_echo, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "editcharnote", do_editcharnotes, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "exitlist", do_exitlist, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "exlist", do_exitlist, POS_DEAD, L4, LOG_ALWAYS, 0 }, { "fadein", do_fadein, POS_DEAD, IM, LOG_NORMAL, 1 }, { "fadeout", do_fadeout, POS_DEAD, IM, LOG_NORMAL, 1 }, { "flag", do_flag, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "freeze", do_freeze, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "force", do_force, POS_DEAD, L7, LOG_ALWAYS, 1 }, { "mforce", do_mforce, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "nforce", do_nforce, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "forcetick", do_forcetick, POS_DEAD, L1, LOG_ALWAYS, 1 }, { "gecho", do_gecho, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "got", do_goto, POS_DEAD, L8, LOG_NORMAL, 0 }, { "goecho", do_goecho, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "goto", do_goto, POS_DEAD, L8, LOG_NORMAL, 1 }, { "herbedit", do_herbedit, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "holylist", do_holylist, POS_DEAD, IM, LOG_NORMAL, 1 }, { "holylight", do_holylight, POS_DEAD, IM, LOG_NORMAL, 1 }, { "holyname", do_holyname, POS_DEAD, IM, LOG_NORMAL, 1 }, { "holyspeech", do_holyspeech, POS_DEAD, IM, LOG_NORMAL, 1 }, { "holywalk", do_holywalk, POS_DEAD, IM, LOG_NORMAL, 1 }, { "holyvnum", do_holyvnum, POS_DEAD, IM, LOG_NORMAL, 1 }, { "hotreboot", do_hotreboot, POS_DEAD, ADMIN, LOG_ALWAYS, 1 }, { "hightalk", do_hightalk, POS_DEAD, ML-1, LOG_NORMAL, 1 }, { "ignoremulti", do_ignoremultilogins,POS_DEAD, ADMIN, LOG_ALWAYS, 1 }, { "hideareas", do_hide_hidden_areas,POS_DEAD, IM, LOG_NORMAL, 1 }, { "immtalk", do_immtalk, POS_DEAD, IM, LOG_NORMAL, 1 }, { "immget", do_immget, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "immtitle", do_immtitle, POS_DEAD, IM, LOG_NORMAL, 1 }, { "immwiznet", do_immwiznet, POS_DEAD, IM, LOG_NORMAL, 1 }, { "immwiznetc", do_immwiznetc, POS_DEAD, IM, LOG_NORMAL, 1 }, { "imotd", do_imotd, POS_DEAD, IM, LOG_NORMAL, 1 }, { "incognito", do_incognito, POS_DEAD, IM, LOG_NORMAL, 1 }, { "inote", do_inote, POS_DEAD, IM, LOG_NORMAL, 1 }, { "inroom", do_inroom, POS_DEAD, L7, LOG_ALWAYS, 1 }, { "iwizi", do_iwizi, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "iwhere", do_iwhere, POS_DEAD, IM, LOG_NORMAL, 1 }, { "jail", do_jail, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "ktell", do_ktell, POS_DEAD, IM, LOG_NORMAL, 1 }, { "lastoncouncil", do_lastoncouncil, POS_DEAD, ML-1, LOG_ALWAYS, 1 }, { "lastonremove", do_lastonremove, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "lastonstats", do_lastonstats, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "langedit", do_langedit, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "letgain", do_letgain, POS_DEAD, L7, LOG_ALWAYS, 1 }, { "lethero", do_lethero, POS_DEAD, L3, LOG_ALWAYS, 1 }, { "listscripts", do_listscripts, POS_DEAD, ADMIN, LOG_ALWAYS, 1 }, { "listquest", do_listquest, POS_DEAD, IM, LOG_NORMAL, 1 }, { "load", do_load, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "localechos", do_localecho, POS_DEAD, 1, LOG_ALWAYS, 0 }, { "localecho", do_localecho, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "log", do_log, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "memory", do_memory, POS_DEAD, IM, LOG_NORMAL, 1 }, { "mixedit", do_mixedit, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "mixshow", do_mixshow, POS_DEAD, IM, LOG_NORMAL, 1 }, { "mythostalk", do_mythostalk, POS_DEAD, IM, LOG_NORMAL, 0 }, { "mwhere", do_mwhere, POS_DEAD, IM, LOG_NORMAL, 1 }, { "mpdump", do_mpdump, POS_DEAD, IM, LOG_NORMAL, 1 }, { "mplist", do_mplist, POS_DEAD, 2, LOG_ALWAYS, 1 }, { "mpstat", do_mpstat, POS_DEAD, IM, LOG_NORMAL, 1 }, { "mudclientstats", do_mudclientstats, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "mxpinfo", do_mxpinfo, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "newbielock", do_newbielock, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "noble", do_noble, POS_DEAD, L1, LOG_ALWAYS, 1 }, { "nochannel", do_nochannels, POS_DEAD, 2, LOG_ALWAYS, 0 }, { "nochannels", do_nochannels, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "noemote", do_noemote, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "norp", do_norp, POS_DEAD, L7, LOG_ALWAYS, 1 }, { "noshout", do_noshout, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "notell", do_notell, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "noterestrict", do_noterestrict, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "nopray", do_nopray, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "nsupport", do_nsupport, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "owhere", do_owhere, POS_DEAD, IM, LOG_NORMAL, 1 }, { "listletgain", do_list_letgains, POS_DEAD, L7, LOG_ALWAYS, 1 }, { "listmoot", do_listmoot, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "clearletgain", do_clearletgain, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "offletgain", do_offlineletgain, POS_DEAD, L7, LOG_ALWAYS, 1 }, { "offlineletgain", do_offlineletgain, POS_DEAD, L7, LOG_ALWAYS, 0 }, { "offmoot", do_offmoot, POS_DEAD, IM, LOG_NORMAL, 1 }, { "declinelet", do_declineletgain, POS_DEAD, L7, LOG_ALWAYS, 1 }, { "declineletgain", do_declineletgain, POS_DEAD, L7, LOG_ALWAYS, 0 }, { "page", do_page, POS_DEAD, L5, LOG_ALWAYS, 1 }, { "pdisable", do_pdisable, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "peace", do_peace, POS_DEAD, L5, LOG_NORMAL, 1 }, { "pecho", do_pecho, POS_DEAD, L5, LOG_ALWAYS, 1 }, { "penalty", do_penalty, POS_DEAD, L8, LOG_NORMAL, 1 }, { "penable", do_penable, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "permban", do_permban, POS_DEAD, L2, LOG_ALWAYS, 1 }, { "permban", do_permban, POS_DEAD, L3, LOG_ALWAYS, 0 }, { "permrawcol", do_permrawcolour, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "pinfo", do_pinfo, POS_DEAD, L8, LOG_NORMAL, 1 }, { "playerlock", do_playerlock, POS_DEAD, L2, LOG_ALWAYS, 1 }, { "pload", do_pload, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "poofin", do_bamfin, POS_DEAD, L8, LOG_NORMAL, 1 }, { "poofout", do_bamfout, POS_DEAD, L8, LOG_NORMAL, 1 }, { "prefix", do_prefix, POS_DEAD, IM, LOG_NORMAL, 1 }, { "pracsystester", do_pracsystester, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "protect", do_protect, POS_DEAD, L1, LOG_ALWAYS, 1 }, { "purge", do_purge, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "qdie", do_qdie, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "rawcolour", do_rawcolour, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "reboot", do_reboot, POS_DEAD, L2, LOG_ALWAYS, 1 }, { "rebootresolver", do_rebootresolver, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "removequester", do_removequester, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "rename", do_rename, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "resolve", do_resolve, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "restore", do_restore, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "release", do_release, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "return", do_return, POS_DEAD, L6, LOG_NORMAL, 1 }, { "return", do_return, POS_DEAD, 1, LOG_ALWAYS, 0 }, { "rpobjload", do_rp_obj_load, POS_DEAD, 1, LOG_ALWAYS, 0 }, { "rpsupport", do_rpsupport, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "runscript", do_runscript, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "rwhere", do_rwhere, POS_DEAD, L6, LOG_NORMAL, 1 }, { "seevnum", do_seevnum, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "send", do_send, POS_DEAD, 1, LOG_ALWAYS, 1 }, { "setalliance", do_setalliance, POS_DEAD, L5, LOG_ALWAYS, 1 }, { "setrace", do_setrace, POS_DEAD, L5, LOG_ALWAYS, 1 }, { "settendency", do_settendency, POS_DEAD, L5, LOG_ALWAYS, 1 }, { "sgive", do_sgive, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "short", do_short, POS_DEAD, L7, LOG_ALWAYS, 1 }, { "showaffectprofile",do_showaffectprofile,POS_DEAD, L6, LOG_ALWAYS, 1 }, { "showban", do_showban, POS_DEAD,COUNCIL-1, LOG_NORMAL, 0 }, { "shutdown", do_shutdown, POS_DEAD, L2, LOG_ALWAYS, 1 }, { "silently", do_silently, POS_DEAD, L5, LOG_ALWAYS, 1 }, { "slay", do_slay, POS_DEAD, L3, LOG_ALWAYS, 1 }, { "snoop", do_snoop, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "snote", do_snote, POS_DEAD, IM, LOG_NORMAL, 1 }, { "sockets", do_sockets, POS_DEAD, L4, LOG_NORMAL, 1 }, { "social_import", do_social_import, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "socedit", do_socialedit, POS_DEAD, COUNCIL,LOG_ALWAYS, 0 }, { "socialedit", do_socialedit, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "spdebug", do_spelldebug, POS_DEAD, ML, LOG_NORMAL, 1 }, { "stat", do_stat, POS_DEAD, IM, LOG_NORMAL, 1 }, { "string", do_string, POS_DEAD, HE, LOG_ALWAYS, 1 }, { "stripaff", do_strip_affects, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "stransfer", do_stransfer, POS_DEAD, L5, LOG_ALWAYS, 1 }, { "switch", do_switch, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "switchprefix", do_switchprefix, POS_DEAD, L6, LOG_ALWAYS, 1 }, { "oextended", do_oextended, POS_DEAD, HE, LOG_ALWAYS, 1 }, { "olcwizi", do_olcwizi, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "owizi", do_owizi, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "tadvance", do_tadvance, POS_DEAD, L1, LOG_ALWAYS, 1 }, { "teleport", do_transfer, POS_DEAD, L5, LOG_ALWAYS, 1 }, { "telnetga", do_telnetga, POS_DEAD, 0, LOG_ALWAYS, 0 }, { "telnetga", do_telnetga, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "trapset", do_trapset, POS_DEAD, 1, LOG_ALWAYS, 1 }, { "trapshow", do_trapshow, POS_DEAD, 1, LOG_NORMAL, 1 }, { "trapremove", do_trapremove, POS_DEAD, 1, LOG_ALWAYS, 1 }, { "transfer", do_transfer, POS_DEAD, L7, LOG_ALWAYS, 1 }, { "trust", do_trust, POS_DEAD, L1, LOG_ALWAYS, 1 }, { "testhelps", do_testhelps, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "tgive", do_tgive, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "tremove", do_tremove, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "ttimer", do_ttimer, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "tjunk", do_tjunk, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "toprpers", do_toprp, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "twhere", do_twhere, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "undeny", do_undeny, POS_DEAD, L2, LOG_ALWAYS, 1 }, { "unletgain", do_unletgain, POS_DEAD, L3, LOG_ALWAYS, 1 }, { "unlethero", do_unlethero, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "update", do_update, POS_DEAD, L1, LOG_ALWAYS, 1 }, { "updatemagic", do_updatemagic, POS_DEAD, L1, LOG_ALWAYS, 1 }, { "webpass", do_webpass, POS_DEAD, IM, LOG_NORMAL, 1 }, { "where", do_where, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "whovis", do_whovis, POS_DEAD, IM, LOG_NORMAL, 1 }, { "whoinvis", do_whoinvis, POS_DEAD, IM, LOG_NORMAL, 1 }, // { "who1234", do_who1234, POS_DEAD, IM, LOG_ALWAYS, 1 }, // { "who4321", do_who4321, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "whotext", do_whotext, POS_DEAD, AML, LOG_ALWAYS, 1 }, { "wizhelp", do_wizhelp, POS_DEAD, IM, LOG_NORMAL, 1 }, { "wizinvis", do_wizinvis, POS_DEAD, IM, LOG_NORMAL, 1 }, { "wizlistedit", do_wizlistedit, POS_DEAD, L2, LOG_ALWAYS, 1 }, { "wiznet", do_wiznet, POS_DEAD, IM, LOG_NORMAL, 1 }, { "wiznetc", do_wiznetc, POS_DEAD, IM, LOG_NORMAL, 1 }, { "wiznet2", do_wiznet2, POS_DEAD, IM, LOG_NORMAL, 1 }, { "wiznet2c", do_wiznet2c, POS_DEAD, IM, LOG_NORMAL, 1 }, { "wiznet3", do_wiznet3, POS_DEAD, IM, LOG_NORMAL, 1 }, { "wiznet3c", do_wiznet3c, POS_DEAD, IM, LOG_NORMAL, 1 }, { "wiznetdefault", do_wiznetdefault, POS_DEAD, IM, LOG_NORMAL, 1 }, { "violate", do_violate, POS_DEAD, L2, LOG_ALWAYS, 1 }, { "visualdebug", do_visualdebug, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "vnum", do_vnum, POS_DEAD, L6, LOG_NORMAL, 1 }, { "vnummap", do_vnummap, POS_DEAD,COUNCIL-1, LOG_ALWAYS, 1 }, { "xpen", do_xpen, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "zecho", do_zecho, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "zoecho", do_zoecho, POS_DEAD, L4, LOG_ALWAYS, 1 }, { "notenet", do_notenet, POS_DEAD, IM, LOG_ALWAYS, 1 }, // OLC { "skillgroupedit", do_skillgroupedit, POS_DEAD, ML, LOG_ALWAYS, 0 }, { "skgroupedit", do_skillgroupedit, POS_DEAD, ML, LOG_ALWAYS, 0 }, { "skgrpedit", do_skillgroupedit, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "gameedit", do_gameedit, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "asave", do_asave, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "aslist", do_aslist, POS_DEAD, 0, LOG_OLC, 1 }, { "alist", do_alist, POS_DEAD, 0, LOG_OLC, 1 }, { "aroomlist", do_aroomlist, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "autobalance", do_autobalance, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "bolist", do_bolist, POS_DEAD, 0, LOG_OLC, 1 }, { "bollist", do_bollist, POS_DEAD, 0, LOG_OLC, 1 }, { "bovlist", do_bovlist, POS_DEAD, 0, LOG_OLC, 1 }, { "bmlist", do_bmlist, POS_DEAD, 0, LOG_OLC, 1 }, { "bmllist", do_bmllist, POS_DEAD, 0, LOG_OLC, 1 }, { "bmvlist", do_bmvlist, POS_DEAD, 0, LOG_OLC, 1 }, { "hlist", do_hlist, POS_DEAD, 0, LOG_OLC, 1 }, { "resets", do_resets, POS_DEAD, 0, LOG_OLC, 1 }, { "redit", do_redit, POS_DEAD, 0, LOG_OLC, 1 }, { "rlist", do_rlist, POS_DEAD, 0, LOG_OLC, 1 }, { "brlist", do_brlist, POS_DEAD, 0, LOG_OLC, 1 }, { "rpurge", do_rpurge, POS_DEAD, 0, LOG_OLC, 1 }, { "medi", do_huh, POS_DEAD, 0, LOG_NORMAL, 0 }, { "medit", do_medit, POS_DEAD, 0, LOG_OLC, 1 }, { "mlist", do_mlist, POS_DEAD, 0, LOG_OLC, 1 }, { "mobloglist", do_mobloglist, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "mxpmodlist", do_mxpmodlist, POS_DEAD, ADMIN, LOG_ALWAYS, 1 }, { "mobhelp", do_mobhelp, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "ifhelp", do_ifhelp, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "aedit", do_aedit, POS_DEAD, 0, LOG_OLC, 1 }, { "ashow", do_ashow, POS_DEAD, 0, LOG_OLC, 1 }, { "oedit", do_oedit, POS_DEAD, 0, LOG_OLC, 1 }, { "olist", do_olist, POS_DEAD, 0, LOG_OLC, 1 }, { "oshow", do_oshow, POS_DEAD, 0, LOG_OLC, 1 }, { "hedit", do_hedit, POS_DEAD, 0, LOG_OLC, 1 }, { "hsave", do_hsave, POS_DEAD, 0, LOG_OLC, 1 }, { "mshow", do_mshow, POS_DEAD, 0, LOG_OLC, 1 }, { "mpshow", do_mpshow, POS_DEAD, 0, LOG_OLC, 1 }, { "rshow", do_rshow, POS_DEAD, 0, LOG_OLC, 1 }, { "mpedit", do_mpedit, POS_DEAD, 0, LOG_OLC, 1 }, { "vlist", do_vlist, POS_DEAD, 0, LOG_OLC, 1 }, { "olcgoto", do_olcgoto, POS_DEAD, 0, LOG_ALWAYS, 1 }, { "pkill", do_pkill, POS_FIGHTING, 0, LOG_NORMAL, 1 }, { "pknote", do_pknote, POS_DEAD, 0, LOG_NORMAL, 1 }, { "pbackstab", do_pbackstab, POS_FIGHTING, 0, LOG_NORMAL, 0 }, { "pbs", do_pbackstab, POS_FIGHTING, 0, LOG_NORMAL, 0 }, { "pip", do_huh, POS_DEAD, ADMIN, LOG_ALWAYS, 0 }, { "pipe", do_pipe, POS_DEAD, ADMIN, LOG_ALWAYS, 0 }, { "syste", do_huh, POS_DEAD, ADMIN, LOG_ALWAYS, 0 }, { "system", do_system, POS_DEAD, ADMIN, LOG_ALWAYS, 0 }, { "crashloo", do_huh, POS_DEAD, ML, LOG_ALWAYS, 0 }, { "crashloop", do_crashloop, POS_DEAD, ML, LOG_ALWAYS, 0 }, { "mpreset", do_mpreset, POS_DEAD, 1, LOG_ALWAYS, 1 }, { "mpinfo", do_mpinfo, POS_DEAD, 1, LOG_ALWAYS, 1 }, { "mptrace", do_mptrace, POS_DEAD, 1, LOG_ALWAYS, 1 }, { "showplayerlist", do_showplayerlist, POS_DEAD, ML, LOG_ALWAYS, 0 }, { "reducelaston", do_reducelaston, POS_DEAD, COUNCIL-1,LOG_ALWAYS, 1 }, { "remort", do_remort, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "resetroo", do_huh, POS_DEAD, COUNCIL-2,LOG_NORMAL, 0 }, { "resetroom", do_resetroom, POS_DEAD, COUNCIL-2,LOG_ALWAYS, 1 }, { "resetare", do_huh, POS_DEAD, COUNCIL-1,LOG_NORMAL, 0 }, { "resetarea", do_resetarea, POS_DEAD, COUNCIL-1,LOG_ALWAYS, 1 }, { "rinfo", do_rinfo, POS_DEAD, COUNCIL,LOG_NORMAL, 1 }, { "showplayerlist", do_showplayerlist, POS_DEAD, ML, LOG_ALWAYS, 0 }, { "commandsnoop", do_commandsnoop, POS_DEAD, COUNCIL,LOG_ALWAYS, 0 }, { "comedit", do_comedit, POS_DEAD, ML-1, LOG_ALWAYS, 1 }, { "csnoop", do_commandsnoop, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "dedit", do_dedit, POS_DEAD, COUNCIL,LOG_ALWAYS, 1 }, { "owritepassw", do_huh, POS_DEAD, ML-1, LOG_ALWAYS, 0 }, { "overwritepassw", do_huh, POS_DEAD, ML-1, LOG_ALWAYS, 0 }, { "overwritepassword",do_overwritepasswd,POS_DEAD, ML-1, LOG_ALWAYS, 0 }, { "owritepassword", do_overwritepasswd, POS_DEAD, ML-1, LOG_ALWAYS, 0 }, { "owritepasswd", do_overwritepasswd, POS_DEAD, ML-1, LOG_ALWAYS, 1 }, { "objrestrict", do_objrestrict, POS_DEAD, LEVEL_HERO,LOG_ALWAYS, 1 }, { "savedeitydb", do_savedeities, POS_DEAD, ML-1, LOG_ALWAYS, 1 }, { "saveherbs", do_saveherbs, POS_DEAD, COUNCIL-2,LOG_ALWAYS, 1 }, { "savemixdb", do_savemixdb, POS_DEAD, COUNCIL-2,LOG_ALWAYS, 1 }, { "relookup", do_relookup, POS_DEAD, ADMIN, LOG_ALWAYS, 1 }, { "raceedit", do_raceedit, POS_DEAD,RACEEDIT_MINTRUST, LOG_OLC,1 }, { "npcinfo", do_npcinfo, POS_DEAD, IM, LOG_OLC, 1 }, { "racelist", do_racelist, POS_DEAD, COUNCIL,LOG_OLC, 1 }, { "classedit", do_classedit, POS_DEAD, COUNCIL,LOG_OLC, 1 }, { "write_skills", do_write_skills, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "write_languages",do_write_languages ,POS_DEAD, ML, LOG_ALWAYS, 1 }, { "cedit", do_classedit, POS_DEAD, ML, LOG_OLC, 1 }, { "clanedit", do_clanedit, POS_DEAD, ML, LOG_OLC, 1 }, // { "write_dynamic_inc", do_write_dynamic_include, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "write_classes", do_write_classes, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "read_classes", do_read_classes, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "write_skillgroups",do_write_skillgroups, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "read_nameprofiles",do_read_nameprofiles,POS_DEAD, ML, LOG_ALWAYS, 1 }, { "write_nameprofiles",do_write_nameprofiles,POS_DEAD, ML, LOG_ALWAYS, 1 }, { "saveclans", do_saveclans, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "loadclans", do_loadclans, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "write_comtable", do_write_commandtable,POS_DEAD,ML-1, LOG_ALWAYS, 1 }, { "saveraces", do_saveraces, POS_DEAD, RACEEDIT_MINTRUST, LOG_ALWAYS, 1 }, { "savequestdb", do_savequestdb, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "savegameset", do_save_gamesettings, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "loadgameset", do_load_gamesettings, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "saveautostat", do_save_autostat_files, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "loadautostat", do_load_autostat_files, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "savecorpses", do_save_corpses, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "loadcorpses", do_load_corpses, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "material_list", do_material_list, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "sedit", do_sedit, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "sshow", do_sshow, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "spsklist", do_spellskilllist, POS_DEAD, IM, LOG_ALWAYS, 1 }, { "qedit", do_qedit, POS_DEAD, IM+2, LOG_ALWAYS, 1 }, { ":", do_immtalk, POS_DEAD, 0, LOG_NORMAL, 0 }, { "immtalk", do_immtalk, POS_DEAD, 0, LOG_NORMAL, 0 }, { "saycolour", do_saycolour, POS_DEAD, IM, LOG_NORMAL, 1 }, { "saycolor", do_saycolour, POS_DEAD, IM, LOG_NORMAL, 0 }, { "motecolour", do_motecolour, POS_DEAD, IM, LOG_NORMAL, 1 }, { "motecolor", do_motecolour, POS_DEAD, IM, LOG_NORMAL, 0 }, { "textsearch", do_textsearch, POS_DEAD, IM, LOG_ALWAYS, 0 }, { "debugroom", do_debugroom, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "debugmob", do_debugmob , POS_DEAD, ML, LOG_ALWAYS, 1 }, { "debugobject", do_debugobject, POS_DEAD, ML, LOG_ALWAYS, 1 }, { "makecorefile", do_makecorefile, POS_DEAD, DIS, LOG_ALWAYS, 1 }, // { "manual_colour_convert", do_manual_colour_convert, POS_DEAD, DIS, LOG_ALWAYS, 1 }, { "detect_oldstyle_note_writing", do_detect_oldstyle_note_writing, POS_DEAD,0,LOG_ALWAYS,0 }, /* * End of list. */ { "", 0, POS_DEAD, 0, LOG_NORMAL, 0 } }; // memory tracking system extern int nAllocString; extern int nAllocPerm; extern bool interpret_not_used; /**************************************************************************/ /* * The main entry point for executing commands. * Can be recursively called from 'at', 'order', 'force'. */ void interpret( char_data *ch, char *argument ) { char command[MIL]; char logline[MSL]; char argall[MIL]; int cmd; int trust; bool found; interpret_not_used=false; // memory checking int string_count = nAllocString; int perm_count = nAllocPerm; char cmd_copy[MIL]; char buf[MSL]; // Implement freeze command. if ( !IS_NPC(ch) && IS_SET(ch->act, PLR_FREEZE) ) { ch->println("You're totally frozen!"); return; } // SMASH THAT PESKY !!SOUND // Admins are exempt cause we're better :) hehehe if ( !IS_NULLSTR( argument ) && str_len(argument) > 7 ) { if ( !IS_ADMIN( ch )) { if ( !str_infix( "!!SOUND", argument ) || !str_infix( "!!MUSIC", argument )) { ch->println("Invalid input, don't try and defraud the MSP trigger."); return; } } } strcpy(argall, argument); // Strip leading spaces. while ( is_space(*argument) ){ argument++; } // if no command remains, do nothing if ( IS_NULLSTR(argument) ){ return; } // wiznet memory debuging strcpy(cmd_copy, argument); /* * Grab the command word. * Special parsing so ' can be a command, * also no spaces needed after punctuation. */ strcpy( logline, argument ); if ( !is_alpha(argument[0]) && (!is_digit(argument[0]) || (argument[0]=='0') )) { command[0] = argument[0]; command[1] = '\0'; argument++; while ( is_space(*argument) ){ argument++; } }else if((argument[0]=='m' || argument[0]=='M') && (argument[1]=='q' || argument[1]=='Q')){ command[0] = 'm'; // support mq12 syntax command[1] = 'q'; command[2] = '\0'; argument+=2; while ( is_space(*argument) ){ argument++; } }else{ argument = one_argument( argument, command ); } { // MOB TRIGGER COMMAND char_data *rch=ch->in_room->people; int number_in_room=ch->in_room->number_in_room; // note: number_in_room is used to prevent a mobprog on two mobs in // a room creating an endless loop by removing themself from // the room and putting themselves back in the room - Kal, June 01 for ( ;rch && --number_in_room>=0; rch= rch->next_in_room ) { if ( IS_NPC(rch) && HAS_TRIGGER( rch, TRIG_COMMAND )) { if (mp_cmd_trigger( argall, rch, ch, NULL, NULL, TRIG_COMMAND )){ return; } } } } // 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 )) { if(cmd_table[cmd].level <= trust || (trust==ML && AML==ML && cmd_table[cmd].level-1 <= trust)) { // complete the command name sprintf(&logline[str_len(logline)], " (%s)", cmd_table[cmd].name); found = true; break; } } } // dyn stuff placed here if ( !IS_IMMORTAL( ch )) { if ( IS_SET( cmd_table[cmd].flags, CMD_OOC ) && !IS_OOC(ch)) { ch->println("You can only use this command while in an OOC room."); return; } if ( IS_SET( cmd_table[cmd].flags, CMD_IC ) && IS_OOC(ch)) { ch->println("You can only use this command while you are IC."); return; } if ( IS_SET( cmd_table[cmd].flags, CMD_NO_TREEFORM ) && IS_AFFECTED2( ch, AFF2_TREEFORM)) { ch->println("You can't do this while in the form of a tree."); return; } if ( IS_SET( cmd_table[cmd].flags, CMD_NO_STONE_GARGOYLE) && IS_AFFECTED2( ch, AFF2_STONE_GARGOYLE)) { ch->println( "Not while you are a statue." ); return; } if ( IS_SET( cmd_table[cmd].flags, CMD_NO_STOCKADE ) && IS_AFFECTED2( ch, AFF2_STOCKADE)) { ch->printlnf( "The stocks prevent you from doing that." ); return; } } if ( !IS_ADMIN( ch )) { if ( IS_SET( cmd_table[cmd].flags, CMD_NO_ORDER ) && IS_SET( ch->dyn, DYN_IS_BEING_ORDERED )) { ch->println("You can't be ordered to do that."); ch->master->println("Not going to happen."); return; } } // check it isn't for a restricted council if (cmd_table[cmd].level>=LEVEL_IMMORTAL){ // If we have any council restriction limit it if(cmd_table[cmd].council && !IS_ADMIN(ch)){ if( TRUE_CH(ch)->pcdata && IS_SET( TRUE_CH(ch)->pcdata->council, cmd_table[cmd].council)) { // council restricted command, in council }else{ ch->println("This command can only be used by a select group of councils."); return; } } } // Log and snoop. // - removed (so snoop gets directions) if( cmd_table[cmd].log == LOG_NEVER && !(IS_NPC(ch) && IS_SET(ch->act,ACT_MOBLOG)) ){ strcpy( logline, "NOT SNOOPABLE" ); } if (cmd_table[cmd].log < LOG_DONT_LOG) // log might be required { if (cmd_table[cmd].log == LOG_OLC) { char buffilename[MSL]; if (!IS_UNSWITCHED_MOB(ch)) { sprintf(buffilename, OLC_LOGS_DIR"%.8s.olc", lowercase(ch->name)); append_logentry_to_file( ch, buffilename, logline); } append_logentry_to_file( ch, OLC_LOGFILE, logline); } if ( (!IS_NPC(ch) && IS_SET(ch->act, PLR_LOG)) || fLogAll || cmd_table[cmd].log == LOG_ALWAYS || (!IS_NPC(ch) && cmd_table[cmd].log == LOG_PALWAYS) ) { if (TRUE_CH(ch)!=ch){ sprintf( log_buf, "Log %s (%s)[%d]: %s", ch->name, TRUE_CH(ch)->name, ch->in_room_vnum(), logline ); }else{ sprintf( log_buf, "Log %s<%d,%d>[%d]: %s", ch->name, ch->vnum(), ch->level, ch->in_room_vnum(), logline ); } if ((cmd_table[cmd].log != LOG_NEVER) && (fLogAll || (cmd_table[cmd].log == LOG_ALWAYS)) || (!IS_NPC(ch) && cmd_table[cmd].log == LOG_PALWAYS)) { log_string( log_buf ); } if (!IS_SET(cmd_table[cmd].flags, CMD_NO_WIZNET_SECURE) && ( (cmd_table[cmd].log != LOG_NEVER) && ((cmd_table[cmd].log == LOG_ALWAYS)) || (!IS_NPC(ch) && cmd_table[cmd].log == LOG_PALWAYS) ) ) { wiznet(log_buf,ch,NULL,WIZ_SECURE,0,get_trust(ch)); } if (!IS_NPC(ch) && IS_SET(ch->act, PLR_LOG)) { sprintf( log_buf, "PlayerLog %s: %s", ch->name, logline ); wiznet(log_buf,ch,NULL,WIZ_PLAYER_LOG,0,get_trust(ch)); append_playerlog( ch, logline); } } } if ( !found ){ bool procured = false; // look for command in the socials table. if ( check_social( ch, command, argument, false ) ) { procured=true; } // look for the command as a language if(language_dynamic_command(ch, command, argument)) { procured=true; } #ifdef IMC if( imc_command_hook( ch, command, argument ) ) procured=true; #endif if ( !procured ) { do_huh(ch, command); if (ch->level<2){ append_datetime_ch_to_file( ch, NEWBIE_HUH_FILE, argall); } } return; } else if (check_disabled (ch, &cmd_table[cmd])) { // a normal valid command.. check if it is globally disabled ch->printlnf("The '%s' command has been temporarily disabled.", cmd_table[cmd].name); return; } // Character not in position for command? if ( ch->position < cmd_table[cmd].position ) { switch( ch->position ) { case POS_DEAD: ch->println("Lie still; you are DEAD."); break; case POS_MORTAL: case POS_INCAP: ch->println("You are hurt far too bad for that."); break; case POS_STUNNED: ch->println("You are too stunned to do that."); break; case POS_SLEEPING: if(IS_NPC(ch)){ ch->printlnf( "In your dreams, or what? (you can't '%s' while sleeping)", command); }else{ ch->println("In your dreams, or what?"); } if (IS_NEWBIE(ch)) ch->println("(try waking up first - type wake)"); break; case POS_RESTING: ch->println("Nah... You feel too relaxed..."); if (IS_NEWBIE(ch)) ch->println("(try standing up first - type stand)"); break; case POS_SITTING: ch->println("Better stand up first."); break; case POS_KNEELING: ch->println("Better get off your knees and stand up first."); if (IS_NEWBIE(ch)) ch->println("(try standing up first - type stand)"); break; case POS_FIGHTING: ch->println("No way! You are still fighting!"); break; } return; } // Record the command sprintf (last_command, "[%5d] %s in [%5d] %s: %s", IS_NPC(ch) ? ch->pIndexData->vnum : 0, IS_NPC(ch) ? ch->short_descr : ch->name, ch->in_room ? ch->in_room->vnum : 0, ch->in_room ? ch->in_room->name : "(not in a room)", logline); // Record the moblog command if( IS_NPC(ch) && IS_SET(ch->act,ACT_MOBLOG) ){ append_timestring_to_file( MOBLOG_LOGFILE, FORMATF("[%5d] '%s' in room %d begin command '%s'", (ch->pIndexData?ch->pIndexData->vnum:0), ch->name, (ch->in_room? ch->in_room->vnum:0), logline)); } // Dispatch the command. (*cmd_table[cmd].do_fun) ( ch, argument ); // wiznet memcheck if (string_count < nAllocString) { sprintf(buf, "Memcheck : Increase in strings :: %s : %s", ch->name, cmd_copy) ; wiznet(buf, NULL, NULL, WIZ_MEMCHECK,0, get_trust(ch)==MAX_LEVEL?MAX_LEVEL:0); } if (perm_count < nAllocPerm) { sprintf(buf, "Increase in perms :: %s : %s", ch->name, cmd_copy) ; wiznet(buf, NULL, NULL, WIZ_MEMCHECK, 0, get_trust(ch)==MAX_LEVEL?MAX_LEVEL:0); } // Record that the command was the last done, but it is finished sprintf (last_command, "(Finished) [%5d] %s in [%5d] %s: %s", IS_NPC(ch) ? ch->pIndexData->vnum : 0, IS_NPC(ch) ? ch->short_descr : ch->name, ch->in_room ? ch->in_room->vnum : 0, ch->in_room ? ch->in_room->name : "(not in a room)", logline); tail_chain( ); return; } /**************************************************************************/ // allow beckon to work with just bec - instead of becomeactive void do_bec(char_data *ch, char *argument) { if(!check_social( ch, "bec", argument, false)){ ch->println("To use becomeactive, type more than the first 3 characters of the command."); }; } /**************************************************************************/ // Return true if an argument is completely numeric. bool is_number( const char *arg ) { if ( *arg == '\0' ) return false; if ( *arg == '+' || *arg == '-' ) arg++; for ( ; *arg != '\0'; arg++ ) { if ( !is_digit( *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'; if(!is_number(ltrim_string(argument))){ *pdot = '.'; strcpy( arg, argument ); return 1; } number = atoi( argument ); *pdot = '.'; strcpy( arg, pdot+1 ); return number; } } strcpy( arg, argument ); return 1; } /**************************************************************************/ // Given a string like 14*foo, return 14 and 'foo' int mult_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( const char *argument, char *arg_first ) { char cEnd; while ( is_space(*argument) ) argument++; cEnd = ' '; if ( *argument == '\'' || *argument == '"' ){ cEnd = *argument++; } while ( *argument != '\0' ) { if( (is_space(cEnd) && is_space(*argument)) || *argument== cEnd ){ argument++; break; } *arg_first = LOWER(*argument); arg_first++; argument++; } *arg_first = '\0'; while ( is_space(*argument) ){ argument++; } return (char *)argument; } /**************************************************************************/ void do_wizhelp( char_data *ch, char *argument ) { int cmd; int col = 0; int level = 0; bool fShowAll=true; argument=rtrim_string(argument); if(!IS_NULLSTR(argument)) { if ( is_number( argument )){ level = atoi( argument ); }else{ fShowAll=false; } } if ( level < LEVEL_IMMORTAL ){ level = 0; } for ( cmd = 0; cmd_table[cmd].name[0] != '\0'; cmd++ ) { int clevel=cmd_table[cmd].level; if(AML==ML && cmd_table[cmd].level==ML+1){ clevel=ML; } if(!fShowAll){ if(str_infix(argument,cmd_table[cmd].name)) continue; } if ( cmd_table[cmd].level >= LEVEL_HERO && clevel <= get_trust( ch ) && cmd_table[cmd].show) { if ( !level ){ ch->printf("%-18s[%3d] ", cmd_table[cmd].name, clevel ); if ( ++col % 3 == 0 ){ ch->println(""); } }else{ if ( cmd_table[cmd].level <= get_trust( ch ) && clevel == level && cmd_table[cmd].show ) { ch->printf( "%-18s[%3d] ",cmd_table[cmd].name, cmd_table[cmd].level ); if ( ++col % 3 == 0 ){ ch->println(""); } } } } } if ( col % 6 != 0 ){ ch->println(""); } ch->println("Type '`=Cwiz <level>`x' to filter by level, '`=Cwiz <partofword>`x' to filter on words."); return; } /**************************************************************************/ void do_wizgrantlist( char_data *ch, char *argument ) { int cmd; int level = 0; bool fShowAll=true; argument=rtrim_string(argument); if(!IS_NULLSTR(argument)) { if ( is_number( argument )){ level = atoi( argument ); }else{ fShowAll=false; } } if ( level < LEVEL_IMMORTAL ) level = 0; for ( cmd = 0; cmd_table[cmd].name[0] != '\0'; cmd++ ) { if(!fShowAll){ if(str_infix(argument,cmd_table[cmd].name)) continue; } if ( cmd_table[cmd].level >= LEVEL_HERO && cmd_table[cmd].level <= get_trust( ch ) && cmd_table[cmd].show) { if ( !level ) { ch->printlnf("%s[%3d] %s", mxp_create_send(ch,FORMATF("comedit %s", cmd_table[cmd].name), FORMATF("%-25s", cmd_table[cmd].name)), cmd_table[cmd].level, flag_string(grantgroup_flags, cmd_table[cmd].grantgroups)); } else if ( cmd_table[cmd].level <= get_trust( ch ) && cmd_table[cmd].level == level && cmd_table[cmd].show ) { ch->printlnf("%s[%3d] %s", mxp_create_send(ch,FORMATF("comedit %s", cmd_table[cmd].name), FORMATF("%-25s", cmd_table[cmd].name)), cmd_table[cmd].level, flag_string(grantgroup_flags, cmd_table[cmd].grantgroups)); } } } ch->println("Type '`=Cwizgrant <level>`x' to filter by level, '`=Cwizgrant <partofword>`x' to filter on words."); ch->println("PLEASE NOTE: The grant system is incomplete."); return; } /**************************************************************************/ /* Syntax is: disable - shows disabled commands disable <command> - toggles disable status of command */ void do_disable (char_data *ch, char *argument) { int i; DISABLED_DATA *p,*q; if (IS_NPC(ch)) { ch->println("RETURN first."); return; } if (IS_NULLSTR(argument)) // Nothing specified. Show disabled commands. { if (!disabled_first) // Any disabled at all ? { ch->println("There are no commands disabled."); return; } ch->println("Disabled commands:"); ch->println("Command Level Disabled by For"); for (p = disabled_first; p; p = p->next) { ch->printlnf("%-12s %5d %-12s %-12s", p->command->name, p->level, p->disabled_by, p->disabled_for); } return; } // command given // First check if it is one of the 'All' disabled commands for (p = disabled_first; p ; p = p->next) if (!str_cmp(argument, p->command->name)&& !str_cmp("All", p->disabled_for)) break; if (p) // this command is disabled { // Optional: The level of the imm to enable the command must // equal or exceed level of the one that disabled it if (get_trust(ch) < p->level){ ch->println("This command was disabled by a higher power."); return; } // Remove if (disabled_first == p){ // node to be removed == head ? disabled_first = p->next; }else{ // Find the node before this one for (q = disabled_first; q->next != p; q = q->next){ // empty for loop in order to find the end of the list } q->next = p->next; } free_string (p->disabled_by); // free name of disabler free_string (p->disabled_for); // free name who for free_mem (p,sizeof(DISABLED_DATA)); // free node save_disabled(); // save to disk ch->printlnf("Command '%s' `Benabled`x for All.",argument); } else // not a disabled command, check if that command exists { // IQ test if (!str_cmp(argument,"disable")) { ch->println("You cannot disable the disable command."); return; } // Search for the command for (i = 0; cmd_table[i].name[0] != '\0'; i++) if (!str_cmp(cmd_table[i].name, argument)) break; // Found? if (cmd_table[i].name[0] == '\0') { ch->println("No such command."); return; } // Can the imm use this command at all ? if (cmd_table[i].level > get_trust(ch)) { ch->println("You dont have access to that command; you cannot disable it."); return; } // Disable the command p = (DISABLED_DATA *)alloc_mem (sizeof(DISABLED_DATA)); p->command = &cmd_table[i]; p->disabled_by = str_dup (ch->name); // save name of disabler p->level = get_trust(ch); // save trust p->disabled_for = str_dup ("All"); // disable for everyone p->next = disabled_first; disabled_first = p; // add before the current first element ch->printlnf("Command '%s' `RDISABLED`x for All.",argument); save_disabled(); // save to disk } } /**************************************************************************/ /* Syntax is: pdisable - shows personally disabled commands pdisable <command> <name|All> - toggles disable status of command */ bool check_parse_name args( ( char *name ) ); void do_pdisable (char_data *ch, char *argument) { char argname[MIL]; char argcommand[MIL]; int i; DISABLED_DATA *p; char buf[100]; if (IS_NPC(ch)) { ch->println("RETURN first."); return; } if (!argument[0]) // Nothing specified. Show disabled commands. { ch->println("Syntax: pdisable command name."); if (!disabled_first){ // Any disabled at all ? ch->println("There are no commands disabled."); return; } ch->println("Pdisabled commands:"); ch->println("Command Level Disabled by For"); for (p = disabled_first; p; p = p->next) { ch->printlnf("%-12s %5d %-12s %-12s", p->command->name, p->level, p->disabled_by, p->disabled_for); } ch->println("syntax: pdisable <command> <name|All>"); return; } // split command into name and command argument = one_argument( argument, argcommand ); one_argument( argument, buf ); strcpy(argname,capitalize(buf)); if(IS_NULLSTR(argname)){ ch->printlnf("You must specify a name for who the command '%s' is personally disabled.", argcommand); return; } if (!check_parse_name(argname)) { ch->printf("The name you specified '%s' may not be a legal name!\n", argname); } // command given // First check if it is one of the disabled commands for a person for(p = disabled_first; p ; p = p->next){ if (!str_cmp(argcommand, p->command->name) && !str_cmp(argname, p->disabled_for)) break; } if(p){ // this command is already disabled ch->println("Use penable to enable the command."); return; }else{ // not a disabled command, check if that command exists // IQ tests if (!str_cmp(argcommand,"disable")) { ch->println("You cannot disable the disable command."); return; } if (!str_cmp(argcommand,"pdisable")) { ch->println("You cannot disable the pdisable command."); return; } if (!str_cmp(argcommand,"penable")) { ch->println("You cannot disable the penable command."); return; } // Search for the command for (i = 0; cmd_table[i].name[0] != '\0'; i++){ if (!str_cmp(cmd_table[i].name, argcommand)){ break; } } // Found? if (cmd_table[i].name[0] == '\0'){ ch->printlnf("No such command '%s'.", argcommand); return; } // Can the imm use this command at all ? if (cmd_table[i].level > get_trust(ch)) { ch->println("You dont have access to that command; you cannot disable it."); return; } // Disable the command p = (DISABLED_DATA *)alloc_mem (sizeof(DISABLED_DATA)); p->command = &cmd_table[i]; p->disabled_by = str_dup(ch->name); // save name of disabler p->level = ADMIN; // disable the command at admin level p->disabled_for = str_dup(argname); // disable for person p->next = disabled_first; disabled_first = p; // add before the current first element ch->printlnf("Command '%s' disabled for '%s'.", argcommand, argname); save_disabled(); // save to disk } } /**************************************************************************/ /* Syntax is: penable - shows personally disabled commands penable <command> <name|All> - toggles disable status of command */ void do_penable (char_data *ch, char *argument) { char argname[MIL]; char argcommand[MIL]; DISABLED_DATA *p,*q; char buf[100]; if (IS_NPC(ch)) { ch->println("RETURN first."); return; } if (!argument[0]) /* Nothing specified. Show disabled commands. */ { ch->println("Syntax: penable command name."); if (!disabled_first) /* Any disabled at all ? */ { ch->println("There are no commands disabled."); return; } ch->println("Pdisabled commands:"); ch->println("Command Level Disabled by For"); for (p = disabled_first; p; p = p->next) { ch->printlnf("%-12s %5d %-12s %-12s", p->command->name, p->level, p->disabled_by, p->disabled_for); } return; } /* split command into name and command */ argument = one_argument( argument, argcommand ); one_argument( argument, buf ); strcpy(argname, capitalize(buf)); /* command given */ /* First check if it is one of the disabled commands for a person*/ for (p = disabled_first; p ; p = p->next) if (!str_cmp(argcommand, p->command->name) && !str_cmp(argname, p->disabled_for)) break; if (p) /* this command is disabled */ { /* Optional: The level of the imm to enable the command must equal or exceed level of the one that disabled it */ if (get_trust(ch) < p->level) { ch->println("This command was disabled by a higher power."); return; } /* Remove */ if (disabled_first == p) /* node to be removed == head ? */ disabled_first = p->next; else /* Find the node before this one */ { for (q = disabled_first; q->next != p; q = q->next); /* empty for */ q->next = p->next; } free_string (p->disabled_by); /* free name of disabler */ free_string (p->disabled_for); /* free name who for */ free_mem (p,sizeof(DISABLED_DATA)); /* free node */ save_disabled(); /* save to disk */ ch->println("Command enabled."); } else /* not a disabled command, check if that command exists */ { ch->println("Use pdisable to disable that command."); return; } } /**************************************************************************/ /* Check if that command is disabled Note that we check for equivalence of the do_fun pointers; this means that disabling 'chat' will also disable the '.' command */ bool check_disabled (char_data *ch, const struct cmd_type *command) { DISABLED_DATA *p; for (p = disabled_first; p ; p = p->next) if ((p->command->do_fun == command->do_fun) && (!strcmp(ch->name, p->disabled_for) || !strcmp("All", p->disabled_for) )) return true; return false; } /**************************************************************************/ /* Load disabled commands */ void load_disabled() { FILE *fp; DISABLED_DATA *p; char *name; int i; disabled_first = NULL; logf("Loading disabled commands from %s...", DISABLED_FILE); fp = fopen (DISABLED_FILE, "r"); if (!fp) // No disabled file.. no disabled commands: return; name = fread_word (fp); while (str_cmp(name, END_MARKER)) // as long as name is NOT END_MARKER :) { // Find the command in the table for (i = 0; cmd_table[i].name[0] ; i++) if (!str_cmp(cmd_table[i].name, name)) break; if (!cmd_table[i].name[0]) // command does not exist? { bugf(" Skipping unknown command (%s) in '%s' file.", name, DISABLED_FILE); fread_number(fp); // level fread_word(fp); // disabled_by fread_word(fp); // disabled_for } else // add new disabled command { p = (DISABLED_DATA *)alloc_mem(sizeof(DISABLED_DATA)); p->command = &cmd_table[i]; p->level = fread_number(fp); p->disabled_by = str_dup(fread_word(fp)); p->disabled_for = str_dup(fread_word(fp)); p->next = disabled_first; disabled_first = p; } name = fread_word(fp); } fclose (fp); } /**************************************************************************/ // Save disabled commands void save_disabled() { FILE *fp; DISABLED_DATA *p; if (!disabled_first) /* delete file if no commands are disabled */ { unlink (DISABLED_FILE); return; } fp = fopen (DISABLED_FILE, "w"); if (!fp) { bugf("Could not open '%s' for writing", DISABLED_FILE); return; } for (p = disabled_first; p ; p = p->next) fprintf (fp, "%s %d %s %s\n", p->command->name, p->level, p->disabled_by, p->disabled_for); fprintf (fp, "%s\n",END_MARKER); fclose (fp); } /**************************************************************************/ // By Kerenos and Kalahn void do_commands( char_data *ch, char *argument ) { int i, j, col=0; int maxcat, mincat; int cat_index=-1; char buf[MIL]; bool fShowAll=true; bool infix_searching=false; bool empty_section=false; argument=rtrim_string(argument); // find out if we are filtering by a category only, infix searching, or showing all if( !IS_NULLSTR(argument)) { if (( cat_index= com_category_lookup( argument )) != -1 ){ fShowAll=false; }else{ infix_searching=true; } } // find the maximum category maxcat=0; mincat=200; for ( i = 0; !IS_NULLSTR(cmd_table[i].name); i++ ) { maxcat=UMAX(maxcat, cmd_table[i].category); mincat=UMIN(mincat, cmd_table[i].category); } // output BUFFER *output= new_buf(); BUFFER *section_buffer= new_buf(); add_buf(output,"`?`#"); // get the random colour for title bars if ( fShowAll ) { sprintf( buf,"`^%s`x", makef_titlebar("CATEGORIES")); add_buf(output,buf); } int last_col=1; for (j=mincat;j<=maxcat;j++) { if ( fShowAll ){ add_buf( section_buffer,"\r\n"); } col=0; if (!IS_RP_SUPPORT(ch) && j == COMCAT_RPSUPPORT) continue; if (!IS_NEWBIE_SUPPORT(ch) && j == COMCAT_NSUPPORT) continue; if (!IS_NOBLE(ch) && j == COMCAT_NOBLE) continue; if (!HAS_SECURITY(ch,1) && j == COMCAT_OLC) continue; if ( fShowAll ){ sprintf( buf,"`^%s`x", makef_titlebar(com_category_indexlookup(j))); add_buf(section_buffer,buf); empty_section=infix_searching; }else{ // we are doing a category only filter if ( j!=cat_index){ continue; } sprintf( buf,"`^%s`x", makef_titlebar(com_category_indexlookup(j))); add_buf(section_buffer,buf); empty_section=false; } for(i=0; !IS_NULLSTR(cmd_table[i].name); i++) { if (cmd_table[i].category!=j) { continue; } if(!fShowAll) { if( cmd_table[i].category != cat_index) continue; } if(infix_searching){ if(str_infix(argument,cmd_table[i].name)){ continue; } } if ( cmd_table[i].level < LEVEL_HERO && cmd_table[i].level <= get_trust( ch ) && cmd_table[i].show ) { strcpy(buf, str_width(cmd_table[i].name, 15)); add_buf( section_buffer, buf); empty_section=false; if (++col%5==0){ add_buf( section_buffer,"\r\n"); } } } if(!empty_section && !(j==CAT_UNDEFINED && col==0) ){ // only show sections with content when infix searching // also: if listing the whole lot and there is nothing in the // undefined category, don't show the header for it. add_buf( output,buf_string(section_buffer)); last_col=col; } // reset the buffer free_buf(section_buffer); section_buffer= new_buf(); } // add the blank bar at the bottom if (last_col%6!=0){ add_buf( output,"\r\n"); } sprintf( buf,"`^%s`x", makef_titlebar("-")); add_buf( output,buf); // show them the list ch->sendpage(buf_string(output)); free_buf(output); free_buf(section_buffer); } /**************************************************************************/ // returns -1 if the category can't be found int com_category_lookup(char *name) { int flag; // first attempt exact match for ( flag = 0; com_category_types[flag].name!= NULL; flag++) { if (LOWER(name[0]) == LOWER(com_category_types[flag].name[0]) && !str_cmp( name, com_category_types[flag].name)) return com_category_types[flag].bit; } // now attempt a prefix match for ( flag = 0; com_category_types[flag].name!= NULL; flag++) { if (LOWER(name[0]) == LOWER(com_category_types[flag].name[0]) && !str_prefix( name, com_category_types[flag].name)) return com_category_types[flag].bit; } // bugf("com_category_lookup(): Invalid category name '%s'!", name); return -1; }; /**************************************************************************/ char *com_category_indexlookup(int index) { int flag; if(com_category_types[index].bit==index) { return (com_category_types[index].name); } for (flag = 0; com_category_types[flag].name; flag++) { if(com_category_types[flag].bit==index) { return (com_category_types[flag].name); } } // bugf("com_category_indexlookup(): Invalid index %d!", index); return (""); }; /**************************************************************************/