From c4114938cc24527c43fd8890354ac6fbf5d639f6 Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 20 Oct 2009 20:38:24 +0000 Subject: [PATCH] Many small but useful bug fixes in various modules. /Griatch --- src/cmdhandler.py | 57 +++++++++++++++++++------------ src/commands/comsys.py | 28 ++++++++++++++- src/commands/general.py | 2 +- src/commands/objmanip.py | 8 ++--- src/config_defaults.py | 2 +- src/script_parents/basicobject.py | 2 +- 6 files changed, 67 insertions(+), 32 deletions(-) diff --git a/src/cmdhandler.py b/src/cmdhandler.py index 6f20f6a107..491f46067f 100755 --- a/src/cmdhandler.py +++ b/src/cmdhandler.py @@ -7,6 +7,7 @@ something. from traceback import format_exc from django.conf import settings from django.contrib.contenttypes.models import ContentType +from objects.models import Object import defines_global import cmdtable import statetable @@ -207,6 +208,7 @@ def match_alias(command): if command.command_alternatives: command_alternatives = [] for command_alternative in command.command_alternatives: + # create correct command_alternative tuples for storage command_alternatives.append( (alias_mgr.CMD_ALIAS_LIST.get( command_alternative[0], command_alternative[0]), @@ -292,17 +294,33 @@ def match_exits(command,test=False): logger.log_errmsg("cmdhandler.match_exits(): Object '%s' has no location." % source_object) return - + # get all exits at location exits = location.get_contents(filter_type=defines_global.OTYPE_EXIT) - Object = ContentType.objects.get(app_label="objects", - model="object").model_class() - exit_matches = Object.objects.list_search_object_namestr(exits, - command.command_string, - match_type="exact") + + # /not sure why this was done this way when one can import Object. + # Object = ContentType.objects.get(app_label="objects", + # model="object").model_class() + + exit_matches = None + if command.command_alternatives: + # we have command alternatives (due to spaces in command definition). + # if so we replace the command_string appropriately. + for cmd_alternative in command.command_alternatives: + # the alternatives are ordered longest -> shortest. + exit_matches = Object.objects.list_search_object_namestr(exits, + cmd_alternative[0], + match_type="exact") + if exit_matches: + command.command_string = cmd_alternative[0] + command.command_argument = cmd_alternative[1] + break + if not exit_matches: + exit_matches = Object.objects.list_search_object_namestr(exits, + command.command_string, + match_type="exact") if exit_matches: if test: - return True - + return True # Only interested in the first match. targ_exit = exit_matches[0] # An exit's home is its destination. If the exit has a None home value, @@ -351,6 +369,7 @@ def command_table_lookup(command, command_table, eval_perms=True, # with this particular command table. command.command_string = cmd_alternative[0] command.command_argument = cmd_alternative[1] + break if not cmdtuple: # None of the alternatives match, go with the default one-word name cmdtuple = command_table.get_command_tuple(command.command_string) @@ -360,14 +379,14 @@ def command_table_lookup(command, command_table, eval_perms=True, if test: # Check if this is just a test. return True - # Check locks + # Check uselocks if neighbor and not neighbor.scriptlink.use_lock(command.source_object): # send an locked error message only if lock_desc is defined lock_msg = neighbor.get_attribute_value("use_lock_msg") if lock_msg: command.source_object.emit_to(lock_msg) raise ExitCommandHandler - return False + return False # If there is a permissions element to the entry, check perms. if eval_perms and cmdtuple[1]: if not command.source_object.has_perm_list(cmdtuple[1]): @@ -387,27 +406,21 @@ def match_neighbor_ctables(command,test=False): any commands. """ source_object = command.source_object - if source_object.location != None: - neighbors = source_object.location.get_contents() + location = source_object.get_location() + if location: + # get all objects, including the current room + neighbors = location.get_contents() + [location] for neighbor in neighbors: if command_table_lookup(command, neighbor.scriptlink.command_table, test=test, neighbor=neighbor): - # Test for a use-lock. + # If there was a command match, set the scripted_obj attribute # for the script parent to pick up. if test: return True command.scripted_obj = neighbor - return True - - # Check the object's location for command matches. - if command_table_lookup(command, - source_object.location.scriptlink.command_table, - test=test, neighbor=source_object.location): - command.scripted_obj = source_object.location - return True - + return True # No matches return False diff --git a/src/commands/comsys.py b/src/commands/comsys.py index 196c2da0db..ca2b4d1c22 100644 --- a/src/commands/comsys.py +++ b/src/commands/comsys.py @@ -239,6 +239,11 @@ def cmd_clist(command): @clist Lists all available channels in the game. + + [[clist]] + + This is the same as @clist - it shows all + available channels in game. """ session = command.session source_object = command.source_object @@ -260,7 +265,7 @@ def cmd_clist(command): #s += "** End of Channel List **" source_object.emit_to(s) GLOBAL_CMD_TABLE.add_command("@clist", cmd_clist, help_category="Comms") - +GLOBAL_CMD_TABLE.add_command("clist", cmd_clist, help_category="Comms") def cmd_cdestroy(command): """ @@ -385,6 +390,27 @@ def cmd_cemit(command): Allows the user to send a message over a channel as long as they own or control it. It does not show the user's name unless they provide the /sendername switch. + + [[channel_commands]] + + Useful channel commands + (see their help pages for detailed help and options) + + - Listing channels + clist - show all channels available to you + comlist - show channels you listen to + + - Joining/parting channels + addcom - add your alias for a channel + delcom - remove alias for channel + (leave channel if no more aliases) + allcom - view, on/off or remove all your channels + clearcom - removes all channels + + - Other + who - list who's online + off - silence channel temporarily + on - turn silenced channel back on """ source_object = command.source_object diff --git a/src/commands/general.py b/src/commands/general.py index 0cc36a902d..510eb44c78 100644 --- a/src/commands/general.py +++ b/src/commands/general.py @@ -765,7 +765,7 @@ def cmd_help(command): # add the 'See also:' footer topics = HelpEntry.objects.find_topicsuggestions(source_object, - topicstr) + topic.get_topicname()) if topics: if len(topics) > 5: topics = topics[:5] diff --git a/src/commands/objmanip.py b/src/commands/objmanip.py index 2ee3b30297..21ed6b0415 100644 --- a/src/commands/objmanip.py +++ b/src/commands/objmanip.py @@ -1000,7 +1000,6 @@ def cmd_dig(command): room_parent = None exit_names = [None,None] exit_parents = [None,None] - exit_aliases = [[], []] #deal with arguments arg_list = args.split("=",1) @@ -1019,13 +1018,10 @@ def cmd_dig(command): rarg = arg_list[1] exits = rarg.split(",",1) for ie, exi in enumerate(exits): - aliaslist = exi.split(";") - name_and_parent = aliaslist.pop(0) #pops the first index - exit_aliases[ie] = aliaslist #what remains are the aliases try: - exit_names[ie], exit_parents[ie] = [s.strip() for s in name_and_parent.split(":",1)] + exit_names[ie], exit_parents[ie] = [s.strip() for s in exi.split(":",1)] except ValueError: - exit_names[ie] = name_and_parent.strip() + exit_names[ie] = exi.strip() #start creating things. if not room_name: diff --git a/src/config_defaults.py b/src/config_defaults.py index f90a45de17..6427d0780e 100644 --- a/src/config_defaults.py +++ b/src/config_defaults.py @@ -67,7 +67,7 @@ DATABASE_HOST = '' DATABASE_PORT = '' # How many words a single command name may have (e.g. 'push button' instead of 'pushbutton') -# (commands with switches always accept only one word in the name, e.g. @sethelp/add) +# (commands with switches can always only have one word in the name, e.g. @sethelp/add) COMMAND_MAXLEN = 3 ## Command aliases diff --git a/src/script_parents/basicobject.py b/src/script_parents/basicobject.py index 3791af5237..a5ae17a88d 100644 --- a/src/script_parents/basicobject.py +++ b/src/script_parents/basicobject.py @@ -179,7 +179,7 @@ class EvenniaBasicObject(object): for player in con_players: retval +='\n\r%s' % (player.get_name(show_dbref=show_dbrefs),) if not con_things == []: - retval += "\n\r%sContents:%s" % (ANSITable.ansi["hilite"], + retval += "\n\r%sYou see:%s" % (ANSITable.ansi["hilite"], ANSITable.ansi["normal"]) for thing in con_things: retval += '\n\r%s' % (thing.get_name(show_dbref=show_dbrefs),)