Pyom.1.00a/
Pyom.1.00a/pysrc/miniboa/
"""
#**************************************************************************
 *  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.                              *
 *                                                                         *
 *  In order to use any part of this Merc Diku Mud, you must comply with   *
 *  both the original Diku license in 'license.doc' as well the Merc       *
 *  license in 'license.txt'.  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.                                                  *
 ***************************************************************************/

#**************************************************************************
*   ROM 2.4 is copyright 1993-1998 Russ Taylor                             *
*   ROM has been brought to you by the ROM consortium                      *
*       Russ Taylor (rtaylor@hypercube.org)                                *
*       Gabrielle Taylor (gtaylor@hypercube.org)                           *
*       Brian Moore (zump@rom.org)                                         *
*   By using this code, you have agreed to follow the terms of the         *
*   ROM license, in the file Rom24/doc/rom.license                         *
***************************************************************************/
#***********
 * Ported to Python by Davion of MudBytes.net
 * Using Miniboa https://code.google.com/p/miniboa/
 * Now using Python 3 version https://code.google.com/p/miniboa-py3/
 ************/
"""
from collections import OrderedDict
from merc import *
from act_info import *
from act_wiz import *
from act_obj import *
from act_enter import *
from act_comm import *
from act_move import *
from alias import *
from healing import do_heal
from magic import do_cast
from fight import *
from skills import do_groups, do_skills, do_spells, do_gain
from settings import LOGALL


class cmd_type:
    def __init__(self, name, do_fun, position, level, log, show):
        self.name=name
        self.do_fun=do_fun
        self.position=position
        self.level=level
        self.log=log
        self.show=show

cmd_table = OrderedDict()

cmd_table['north'] = cmd_type('north', do_north, POS_STANDING, 0, LOG_NEVER, 0)
cmd_table['east'] = cmd_type('east', do_east, POS_STANDING, 0, LOG_NEVER, 0)
cmd_table['south'] = cmd_type('south', do_south, POS_STANDING, 0, LOG_NEVER, 0)
cmd_table['west'] = cmd_type('west', do_west, POS_STANDING, 0, LOG_NEVER, 0)
cmd_table['up'] = cmd_type('up', do_up, POS_STANDING, 0, LOG_NEVER, 0)
cmd_table['down'] = cmd_type('down', do_down, POS_STANDING, 0, LOG_NEVER, 0)
# * Common other commands.
# * Placed here so one and two letter abbreviations work.
cmd_table['at'] = cmd_type('at', do_at, POS_DEAD, L6, LOG_NORMAL, 1)
cmd_table['cast'] = cmd_type('cast', do_cast, POS_FIGHTING, 0, LOG_NORMAL, 1)
cmd_table['auction'] = cmd_type('auction', do_auction, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['buy'] = cmd_type('buy', do_buy, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['channels'] = cmd_type('channels', do_channels, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['exits'] = cmd_type('exits', do_exits, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['get'] = cmd_type('get', do_get, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['goto'] = cmd_type('goto', do_goto, POS_DEAD, L8, LOG_NORMAL, 1)
cmd_table['group'] = cmd_type('group', do_group, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['guild'] = cmd_type('guild', do_guild, POS_DEAD, L4, LOG_ALWAYS, 1)
cmd_table['hit'] = cmd_type('hit', do_kill, POS_FIGHTING, 0, LOG_NORMAL, 0)
cmd_table['inventory'] = cmd_type('inventory', do_inventory, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['kill'] = cmd_type('kill', do_kill, POS_FIGHTING, 0, LOG_NORMAL, 1)
cmd_table['look'] = cmd_type('look', do_look, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['clan'] = cmd_type('clan', do_clantalk, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['music'] = cmd_type('music', do_music, POS_SLEEPING, 0, LOG_NORMAL, 1) 
cmd_table['order'] = cmd_type('order', do_order, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['practice'] = cmd_type('practice', do_practice, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['rest'] = cmd_type('rest', do_rest, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['sit'] = cmd_type('sit', do_sit, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['sockets'] = cmd_type('sockets', do_sockets, POS_DEAD, L4, LOG_NORMAL, 1)
cmd_table['stand'] = cmd_type('stand', do_stand, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['tell'] = cmd_type('tell', do_tell, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['unlock'] = cmd_type('unlock', do_unlock, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['wield'] = cmd_type('wield', do_wear, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['wizhelp'] = cmd_type('wizhelp', do_wizhelp, POS_DEAD, IM, LOG_NORMAL, 1 )
# * Informational commands.
cmd_table['affects'] = cmd_type('affects', do_affects, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['areas'] = cmd_type('areas', do_areas, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['bug'] = cmd_type('bug', do_bug, POS_DEAD, 0, LOG_NORMAL, 1)
#cmd_table['changes'] = cmd_type('changes', do_changes, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['commands'] = cmd_type('commands', do_commands, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['compare'] = cmd_type('compare', do_compare, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['consider'] = cmd_type('consider', do_consider, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['count'] = cmd_type('count', do_count, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['credits'] = cmd_type('credits', do_credits, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['equipment'] = cmd_type('equipment', do_equipment, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['examine'] = cmd_type('examine', do_examine, POS_RESTING, 0, LOG_NORMAL, 1)
# cmd_table['groups'] = cmd_type('groups', do_groups, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['help'] = cmd_type('help', do_help, POS_DEAD, 0, LOG_NORMAL, 1)
#cmd_table['idea'] = cmd_type('idea', do_idea, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['info'] = cmd_type('info', do_groups, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['motd'] = cmd_type('motd', do_motd, POS_DEAD, 0, LOG_NORMAL, 1)
#cmd_table['news'] = cmd_type('news', do_news, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['read'] = cmd_type('read', do_read, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['report'] = cmd_type('report', do_report, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['rules'] = cmd_type('rules', do_rules, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['score'] = cmd_type('score', do_score, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['skills'] = cmd_type('skills', do_skills, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['socials'] = cmd_type('socials', do_socials, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['show'] = cmd_type('show', do_show, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['spells'] = cmd_type('spells', do_spells, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['story'] = cmd_type('story', do_story, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['time'] = cmd_type('time', do_time, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['typo'] = cmd_type('typo', do_typo, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['weather'] = cmd_type('weather', do_weather, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['who'] = cmd_type('who', do_who, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['whois'] = cmd_type('whois', do_whois, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['wizlist'] = cmd_type('wizlist', do_wizlist, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['worth'] = cmd_type('worth', do_worth, POS_SLEEPING, 0, LOG_NORMAL, 1)
# * Configuration commands.
cmd_table['alia'] = cmd_type('alia', do_alia, POS_DEAD, 0, LOG_NORMAL, 0)
cmd_table['alias'] = cmd_type('alias', do_alias, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['autolist'] = cmd_type('autolist', do_autolist, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['autoassist'] = cmd_type('autoassist', do_autoassist, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['autoexit'] = cmd_type('autoexit', do_autoexit, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['autogold'] = cmd_type('autogold', do_autogold, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['autoloot'] = cmd_type('autoloot', do_autoloot, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['autosac'] = cmd_type('autosac', do_autosac, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['autosplit'] = cmd_type('autosplit', do_autosplit, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['brief'] = cmd_type('brief', do_brief, POS_DEAD, 0, LOG_NORMAL, 1)
#cmd_table['channels'] = cmd_type('channels', do_channels, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['combine'] = cmd_type('combine', do_combine, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['compact'] = cmd_type('compact', do_compact, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['description'] = cmd_type('description', do_description, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['delet'] = cmd_type('delet', do_delet, POS_DEAD, 0, LOG_ALWAYS, 0)
cmd_table['delete'] = cmd_type('delete', do_delete, POS_STANDING, 0, LOG_ALWAYS, 1)
cmd_table['nofollow'] = cmd_type('nofollow', do_nofollow, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['noloot'] = cmd_type('noloot', do_noloot, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['nosummon'] = cmd_type('nosummon', do_nosummon, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['outfit'] = cmd_type('outfit', do_outfit, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['password'] = cmd_type('password', do_password, POS_DEAD, 0, LOG_NEVER, 1)
cmd_table['prompt'] = cmd_type('prompt', do_prompt, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['scroll'] = cmd_type('scroll', do_scroll, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['title'] = cmd_type('title', do_title, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['unalias'] = cmd_type('unalias', do_unalias, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['wimpy'] = cmd_type('wimpy', do_wimpy, POS_DEAD, 0, LOG_NORMAL, 1)
# Communication commands.
cmd_table['afk'] = cmd_type('afk', do_afk, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['answer'] = cmd_type('answer', do_answer, POS_SLEEPING, 0, LOG_NORMAL, 1)
# cmd_table['auction'] = cmd_type('auction', do_auction, POS_SLEEPING, 0, LOG_NORMAL, 1) */
cmd_table['deaf'] = cmd_type('deaf', do_deaf, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['emote'] = cmd_type('emote', do_emote, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['pmote'] = cmd_type('pmote', do_pmote, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['.'] = cmd_type('.',  do_gossip,  POS_SLEEPING, 0,  LOG_NORMAL, 0 )
cmd_table['gossip'] = cmd_type('gossip', do_gossip, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table[','] = cmd_type(',', do_emote, POS_RESTING, 0, LOG_NORMAL, 0)
cmd_table['grats'] = cmd_type('grats', do_grats, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['gtell'] = cmd_type('gtell', do_gtell, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table[';'] = cmd_type(';',  do_gtell,   POS_DEAD,    0,  LOG_NORMAL, 0)
#cmd_table['music'] = cmd_type('music', do_music, POS_SLEEPING, 0, LOG_NORMAL, 1) */
#cmd_table['note'] = cmd_type('note', do_note, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['pose'] = cmd_type('pose', do_pose, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['question'] = cmd_type('question', do_question, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['quote'] = cmd_type('quote', do_quote, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['quiet'] = cmd_type('quiet', do_quiet, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['reply'] = cmd_type('reply', do_reply, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['replay'] = cmd_type('replay', do_replay, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['say'] = cmd_type('say', do_say, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table["'"] = cmd_type("'",      do_say,     POS_RESTING,     0,  LOG_NORMAL, 0)
cmd_table['shout'] = cmd_type('shout', do_shout, POS_RESTING, 3, LOG_NORMAL, 1)
#cmd_table['unread'] = cmd_type('unread', do_unread, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['yell'] = cmd_type('yell', do_yell, POS_RESTING, 0, LOG_NORMAL, 1)
# * Object manipulation commands.
cmd_table['brandish'] = cmd_type('brandish', do_brandish, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['close'] = cmd_type('close', do_close, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['drink'] = cmd_type('drink', do_drink, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['drop'] = cmd_type('drop', do_drop, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['eat'] = cmd_type('eat', do_eat, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['envenom'] = cmd_type('envenom', do_envenom, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['fill'] = cmd_type('fill', do_fill, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['give'] = cmd_type('give', do_give, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['heal'] = cmd_type('heal', do_heal, POS_RESTING, 0, LOG_NORMAL, 1) 
cmd_table['hold'] = cmd_type('hold', do_wear, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['list'] = cmd_type('list', do_list, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['lock'] = cmd_type('lock', do_lock, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['open'] = cmd_type('open', do_open, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['pick'] = cmd_type('pick', do_pick, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['pour'] = cmd_type('pour', do_pour, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['put'] = cmd_type('put', do_put, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['quaff'] = cmd_type('quaff', do_quaff, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['recite'] = cmd_type('recite', do_recite, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['remove'] = cmd_type('remove', do_remove, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['sell'] = cmd_type('sell', do_sell, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['take'] = cmd_type('take', do_get, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['sacrifice'] = cmd_type('sacrifice', do_sacrifice, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['junk'] = cmd_type('junk', do_sacrifice, POS_RESTING, 0, LOG_NORMAL, 0)
cmd_table['tap'] = cmd_type('tap', do_sacrifice, POS_RESTING, 0, LOG_NORMAL, 0)   
#cmd_table['unlock'] = cmd_type('unlock', do_unlock, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['value'] = cmd_type('value', do_value, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['wear'] = cmd_type('wear', do_wear, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['zap'] = cmd_type('zap', do_zap, POS_RESTING, 0, LOG_NORMAL, 1)

# * Combat commands.

cmd_table['backstab'] = cmd_type('backstab', do_backstab, POS_FIGHTING, 0, LOG_NORMAL, 1)
cmd_table['bash'] = cmd_type('bash', do_bash, POS_FIGHTING, 0, LOG_NORMAL, 1)
cmd_table['bs'] = cmd_type('bs', do_backstab, POS_FIGHTING, 0, LOG_NORMAL, 0)
cmd_table['berserk'] = cmd_type('berserk', do_berserk, POS_FIGHTING, 0, LOG_NORMAL, 1)
cmd_table['dirt'] = cmd_type('dirt', do_dirt, POS_FIGHTING, 0, LOG_NORMAL, 1)
cmd_table['disarm'] = cmd_type('disarm', do_disarm, POS_FIGHTING, 0, LOG_NORMAL, 1)
cmd_table['flee'] = cmd_type('flee', do_flee, POS_FIGHTING, 0, LOG_NORMAL, 1)
cmd_table['kick'] = cmd_type('kick', do_kick, POS_FIGHTING, 0, LOG_NORMAL, 1)
cmd_table['murde'] = cmd_type('murde', do_murde, POS_FIGHTING, 0, LOG_NORMAL, 0)
cmd_table['murder'] = cmd_type('murder', do_murder, POS_FIGHTING, 5, LOG_ALWAYS, 1)
cmd_table['rescue'] = cmd_type('rescue', do_rescue, POS_FIGHTING, 0, LOG_NORMAL, 0)
cmd_table['trip'] = cmd_type('trip', do_trip, POS_FIGHTING, 0, LOG_NORMAL, 1)
# * Miscellaneous commands.
cmd_table['enter'] = cmd_type('enter', do_enter, POS_STANDING, 0, LOG_NORMAL, 1)
cmd_table['follow'] = cmd_type('follow', do_follow, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['gain'] = cmd_type('gain', do_gain, POS_STANDING, 0, LOG_NORMAL, 1)
cmd_table['go'] = cmd_type('go', do_enter, POS_STANDING, 0, LOG_NORMAL, 0)
# cmd_table['group'] = cmd_type('group', do_group, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['groups'] = cmd_type('groups', do_groups, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['hide'] = cmd_type('hide', do_hide, POS_RESTING, 0, LOG_NORMAL, 1)
#cmd_table['play'] = cmd_type('play', do_play, POS_RESTING, 0, LOG_NORMAL, 1)
#cmd_table['practice'] = cmd_type('practice', do_practice, POS_SLEEPING, 0, LOG_NORMAL, 1) */
cmd_table['qui'] = cmd_type('qui', do_qui, POS_DEAD, 0, LOG_NORMAL, 0)
cmd_table['quit'] = cmd_type('quit', do_quit, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['recall'] = cmd_type('recall', do_recall, POS_FIGHTING, 0, LOG_NORMAL, 1)
cmd_table["/"] = cmd_type("/", do_recall,  POS_FIGHTING,    0,  LOG_NORMAL, 0)
cmd_table['rent'] = cmd_type('rent', do_rent, POS_DEAD, 0, LOG_NORMAL, 0)
cmd_table['save'] = cmd_type('save', do_save, POS_DEAD, 0, LOG_NORMAL, 1)
cmd_table['sleep'] = cmd_type('sleep', do_sleep, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['sneak'] = cmd_type('sneak', do_sneak, POS_STANDING, 0, LOG_NORMAL, 1)
cmd_table['split'] = cmd_type('split', do_split, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['steal'] = cmd_type('steal', do_steal, POS_STANDING, 0, LOG_NORMAL, 1)
cmd_table['train'] = cmd_type('train', do_train, POS_RESTING, 0, LOG_NORMAL, 1)
cmd_table['visible'] = cmd_type('visible', do_visible, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['wake'] = cmd_type('wake', do_wake, POS_SLEEPING, 0, LOG_NORMAL, 1)
cmd_table['where'] = cmd_type('where', do_where, POS_RESTING, 0, LOG_NORMAL, 1)
#* Immortal commands.
cmd_table['advance'] = cmd_type('advance', do_advance, POS_DEAD,   ML,  LOG_ALWAYS, 1)
cmd_table['dump'] = cmd_type('dump', do_dump,    POS_DEAD,   ML,  LOG_ALWAYS, 0)
cmd_table['trust'] = cmd_type('trust', do_trust,   POS_DEAD,   ML,  LOG_ALWAYS, 1)
cmd_table['violate'] = cmd_type('violate', do_violate, POS_DEAD,   ML,  LOG_ALWAYS, 1)
#cmd_table['allow'] = cmd_type('allow', do_allow, POS_DEAD, L2, LOG_ALWAYS, 1)
#cmd_table['ban'] = cmd_type('ban', do_ban, POS_DEAD, L2, LOG_ALWAYS, 1)
#cmd_table['deny'] = cmd_type('deny', do_deny, POS_DEAD, L1, LOG_ALWAYS, 1)
cmd_table['disconnect'] = cmd_type('disconnect', do_disconnect, POS_DEAD, L3, LOG_ALWAYS, 1)
#cmd_table['flag'] = cmd_type('flag', do_flag, POS_DEAD, L4, LOG_ALWAYS, 1)
cmd_table['freeze'] = cmd_type('freeze', do_freeze, POS_DEAD, L4, LOG_ALWAYS, 1)
#cmd_table['permban'] = cmd_type('permban', do_permban, POS_DEAD, L1, LOG_ALWAYS, 1)
cmd_table['protect'] = cmd_type('protect', do_protect, POS_DEAD, L1, LOG_ALWAYS, 1)
cmd_table['reboo'] = cmd_type('reboo', do_reboo, POS_DEAD, L1, LOG_NORMAL, 0)
cmd_table['reboot'] = cmd_type('reboot', do_reboot, POS_DEAD, L1, LOG_ALWAYS, 1)
cmd_table['set'] = cmd_type('set', do_set, POS_DEAD, L2, LOG_ALWAYS, 1)
cmd_table['mset'] = cmd_type('mset', do_mset, POS_DEAD, L2, LOG_ALWAYS, 1)
cmd_table['sset'] = cmd_type('sset', do_sset, POS_DEAD, L2, LOG_ALWAYS, 1)
cmd_table['oset'] = cmd_type('oset', do_oset, POS_DEAD, L2, LOG_ALWAYS, 1)
cmd_table['shutdow'] = cmd_type('shutdow', do_shutdow, POS_DEAD, L1, LOG_NORMAL, 0)
cmd_table['shutdown'] = cmd_type('shutdown', do_shutdown, POS_DEAD, L1, LOG_ALWAYS, 1)
#cmd_table['sockets'] = cmd_type('sockets', do_sockets, POS_DEAD, L4, LOG_NORMAL, 1) */
cmd_table['wizlock'] = cmd_type('wizlock', do_wizlock, POS_DEAD, L2, LOG_ALWAYS, 1)
cmd_table['force'] = cmd_type('force', do_force, POS_DEAD, L7, LOG_ALWAYS, 1)
cmd_table['load'] = cmd_type('load', do_load, POS_DEAD, L4, LOG_ALWAYS, 1)
cmd_table['mload'] = cmd_type('m load', do_mload, POS_DEAD, L4, LOG_ALWAYS, 1)
cmd_table['oload'] = cmd_type('oload', do_oload, POS_DEAD, L4, LOG_ALWAYS, 1)
cmd_table['newlock'] = cmd_type('newlock', do_newlock, POS_DEAD, L4, LOG_ALWAYS, 1)
cmd_table['nochannels'] = cmd_type('nochannels', do_nochannels, POS_DEAD, L5, LOG_ALWAYS, 1)
cmd_table['noemote'] = cmd_type('noemote', do_noemote, POS_DEAD, L5, LOG_ALWAYS, 1)
cmd_table['noshout'] = cmd_type('noshout', do_noshout, POS_DEAD, L5, LOG_ALWAYS, 1)
cmd_table['notell'] = cmd_type('notell', do_notell, POS_DEAD, L5, LOG_ALWAYS, 1)
cmd_table['pecho'] = cmd_type('pecho', do_pecho, POS_DEAD, L4, LOG_ALWAYS, 1) 
cmd_table['pardon'] = cmd_type('pardon', do_pardon, POS_DEAD, L3, LOG_ALWAYS, 1)
cmd_table['purge'] = cmd_type('purge', do_purge, POS_DEAD, L4, LOG_ALWAYS, 1)
cmd_table['restore'] = cmd_type('restore', do_restore, POS_DEAD, L4, LOG_ALWAYS, 1)
cmd_table['sla'] = cmd_type('sla', do_sla, POS_DEAD, L3, LOG_NORMAL, 0)
cmd_table['slay'] = cmd_type('slay', do_slay, POS_DEAD, L3, LOG_ALWAYS, 1)
cmd_table['teleport'] = cmd_type('teleport', do_transfer, POS_DEAD, L5, LOG_ALWAYS, 1)   
cmd_table['transfer'] = cmd_type('transfer', do_transfer, POS_DEAD, L5, LOG_ALWAYS, 1)
# cmd_table['at'] = cmd_type('at', do_at, POS_DEAD, L6, LOG_NORMAL, 1) */
cmd_table['poofin'] = cmd_type('poofin', do_bamfin, POS_DEAD, L8, LOG_NORMAL, 1)
cmd_table['poofout'] = cmd_type('poofout', do_bamfout, POS_DEAD, L8, LOG_NORMAL, 1)
cmd_table['gecho'] = cmd_type('gecho', do_echo, POS_DEAD, L4, LOG_ALWAYS, 1)
# cmd_table['goto'] = cmd_type('goto', do_goto, POS_DEAD, L8, LOG_NORMAL, 1) */
cmd_table['holylight'] = cmd_type('holylight', do_holylight,   POS_DEAD,   IM,  LOG_NORMAL, 1)
cmd_table['incognito'] = cmd_type('incognito', do_incognito,   POS_DEAD,   IM,  LOG_NORMAL, 1)
cmd_table['invis'] = cmd_type('invis', do_invis,   POS_DEAD,   IM,  LOG_NORMAL, 0)
cmd_table['log'] = cmd_type('log', do_log, POS_DEAD, L1, LOG_ALWAYS, 1)
cmd_table['memory'] = cmd_type('memory', do_memory,  POS_DEAD,   IM,  LOG_NORMAL, 1)
cmd_table['mwhere'] = cmd_type('mwhere', do_mwhere,  POS_DEAD,   IM,  LOG_NORMAL, 1)
cmd_table['owhere'] = cmd_type('owhere', do_owhere,  POS_DEAD,   IM,  LOG_NORMAL, 1)
cmd_table['peace'] = cmd_type('peace', do_peace, POS_DEAD, L5, LOG_NORMAL, 1)
#cmd_table['penalty'] = cmd_type('penalty', do_penalty, POS_DEAD, L7, LOG_NORMAL, 1)
cmd_table['echo'] = cmd_type('echo', do_recho, POS_DEAD, L6, LOG_ALWAYS, 1)
cmd_table['return'] = cmd_type('return', do_return, POS_DEAD, L6, LOG_NORMAL, 1)
cmd_table['snoop'] = cmd_type('snoop', do_snoop, POS_DEAD, L5, LOG_ALWAYS, 1)
cmd_table['stat'] = cmd_type('stat', do_stat,    POS_DEAD,   IM,  LOG_NORMAL, 1)
cmd_table['mstat'] = cmd_type('stat', do_mstat,    POS_DEAD,   IM,  LOG_NORMAL, 1)
cmd_table['ostat'] = cmd_type('stat', do_ostat,    POS_DEAD,   IM,  LOG_NORMAL, 1)
cmd_table['string'] = cmd_type('string', do_string, POS_DEAD, L5, LOG_ALWAYS, 1)
cmd_table['switch'] = cmd_type('switch', do_switch, POS_DEAD, L6, LOG_ALWAYS, 1)
cmd_table['wizinvis'] = cmd_type('wizinvis', do_invis,   POS_DEAD,   IM,  LOG_NORMAL, 1)
cmd_table['vnum'] = cmd_type('vnum', do_vnum, POS_DEAD, L4, LOG_NORMAL, 1)
cmd_table['mfind'] = cmd_type('mfind', do_mfind, POS_DEAD, L4, LOG_NORMAL, 1)
cmd_table['ofind'] = cmd_type('ofind', do_ofind, POS_DEAD, L4, LOG_NORMAL, 1)
cmd_table['zecho'] = cmd_type('zecho', do_zecho, POS_DEAD, L4, LOG_ALWAYS, 1)
cmd_table['clone'] = cmd_type('clone', do_clone, POS_DEAD, L5, LOG_ALWAYS, 1)
cmd_table['wiznet'] = cmd_type('wiznet', do_wiznet,  POS_DEAD,   IM,  LOG_NORMAL, 1)
cmd_table['immtalk'] = cmd_type('immtalk', do_immtalk, POS_DEAD,   IM,  LOG_NORMAL, 1)
cmd_table['imotd'] = cmd_type('imotd', do_imotd,       POS_DEAD,       IM,  LOG_NORMAL, 1)
cmd_table[':'] = cmd_type(':', do_immtalk, POS_DEAD,   IM,  LOG_NORMAL, 0)
cmd_table['smote'] = cmd_type('smote', do_smote,   POS_DEAD,   IM,  LOG_NORMAL, 1)
cmd_table['prefi'] = cmd_type('prefi', do_prefi,   POS_DEAD,   IM,  LOG_NORMAL, 0)
cmd_table['prefix'] = cmd_type('prefix', do_prefix,  POS_DEAD,   IM,  LOG_NORMAL, 1)

#A little python vooodoo to make do_functions methods of char_data
for k,cmd in cmd_table.items():
    setattr(CHAR_DATA, cmd.do_fun.__name__, cmd.do_fun )


def interpret(ch, argument):
     # Strip leading spaces.
    argument = argument.lstrip()
    command = ''

    # No hiding.
    REMOVE_BIT(ch.affected_by, AFF_HIDE)

    # * Implement freeze command.
    if not IS_NPC(ch) and IS_SET(ch.act, PLR_FREEZE):
        ch.send("You're totally frozen!\n")
        return
    # * Grab the command word.
    # * Special parsing so ' can be a command,
    # *   also no spaces needed after punctuation.
    logline = argument
    if not argument[0].isalpha() and not argument[0].isdigit():
        command = argument[0]
        argument = argument[:1].lstrip()
    else:
        argument, command = read_word(argument)
    #* Look for command in command table.
    trust = ch.get_trust()
    cmd = prefix_lookup(cmd_table, command)
    if cmd != None:
        if cmd.level > trust:
            cmd = None
 
    #* Log and snoop.
    if (not IS_NPC(ch) and IS_SET(ch.act, PLR_LOG)) or LOGALL or (cmd and cmd.log == LOG_ALWAYS):
        if cmd and cmd.log != LOG_NEVER:
            log_buf = "Log %s: %s" % (ch.name, logline)
            wiznet(log_buf,ch,None,WIZ_SECURE,0,ch.get_trust())
            print (log_buf + "\n")
    if ch.desc and ch.desc.snoop_by:
        ch.desc.snoop_by.send("% ")
        ch.desc.snoop_by.send(logline)
        ch.desc.snoop_by.send("\n")
    if not cmd:
        #* Look for command in socials table.
        if not check_social(ch, command, argument):
            ch.send("Huh?\n")
        return
    #* Character not in position for command?
    if ch.position < cmd.position:
        if ch.position == POS_DEAD:
            ch.send("Lie still; you are DEAD.\n")
        elif ch.position ==  POS_MORTAL \
        or ch.position ==  POS_INCAP:
            ch.send("You are hurt far too bad for that.\n")
        elif ch.position == POS_STUNNED:
            ch.send("You are too stunned to do that.\n")
        elif ch.position == POS_SLEEPING:
            ch.send("In your dreams, or what?\n")
        elif ch.position == POS_RESTING:
            ch.send("Nah... You feel too relaxed...\n")
        elif ch.position == POS_SITTING:
            ch.send("Better stand up first.\n")
        elif ch.position == POS_FIGHTING:
            ch.send("No way!  You are still fighting!\n")
        return

    # Dispatch the command.
    cmd.do_fun(ch, argument)
    return

def check_social(ch, command, argument):
    cmd = None
    for social in social_list:
        if social.name.lower().startswith(command):
            cmd = social
    if not cmd:
        return False
    if not IS_NPC(ch) and IS_SET(ch.comm, COMM_NOEMOTE):
        ch.send("You are anti-social!\n")
        return True
    
    if ch.position == POS_DEAD:
        ch.send("Lie still; you are DEAD.\n")
        return True
    if ch.position == POS_INCAP or ch.position == POS_MORTAL:
        ch.send("You are hurt far too bad for that.\n")
        return True
    if ch.position == POS_STUNNED:
        ch.send("You are too stunned to do that.\n")
        return True
    if ch.position == POS_SLEEPING:
        #* I just know this is the path to a 12" 'if' statement.  :(
        #* But two players asked for it already!  -- Furey
            if cmd.name != "snore":
                ch.send("In your dreams, or what?\n")
                return True
    holder, arg = read_word(argument)
    victim = ch.get_char_room(arg)
    if not arg:
        act(cmd.others_no_arg, ch, None, victim, TO_ROOM)
        act(cmd.char_no_arg, ch, None, victim, TO_CHAR)
    elif not victim:
        ch.send("They aren't here.\n")
    elif victim == ch:
        act(cmd.others_auto, ch, None, victim, TO_ROOM)
        act(cmd.char_auto, ch, None, victim, TO_CHAR)
    else:
        act(cmd.others_found, ch, None, victim, TO_NOTVICT)
        act(cmd.char_found, ch, None, victim, TO_CHAR)
        act(cmd.vict_found, ch, None, victim, TO_VICT)

        if not IS_NPC(ch) and IS_NPC(victim) \
        and not IS_AFFECTED(victim, AFF_CHARM) \
        and IS_AWAKE(victim) and victim.desc == None:
            num = random.randit(0,12)
            if num in [0, 1, 2, 3, 4, 5, 6, 7, 8]:
                act(cmd.others_found, victim, None, ch, TO_NOTVICT)
                act(cmd.char_found, victim, None, ch, TO_CHAR)
                act(cmd.vict_found, victim, None, ch, TO_VICT)
                
            elif num in [9, 10, 11, 12]:
                act("$n slaps $N.", victim, None, ch, TO_NOTVICT)
                act("You slap $N.", victim, None, ch, TO_CHAR)
                act("$n slaps you.", victim, None, ch, TO_VICT)
    return True;