diff --git a/evennia/trunk/apps/objects/models.py b/evennia/trunk/apps/objects/models.py index a0d726a273..aaf6d509ba 100755 --- a/evennia/trunk/apps/objects/models.py +++ b/evennia/trunk/apps/objects/models.py @@ -37,10 +37,10 @@ class Object(models.Model): zone = models.ForeignKey('self', related_name="obj_zone", blank=True, null=True) home = models.ForeignKey('self', related_name="obj_home", blank=True, null=True) type = models.SmallIntegerField(choices=global_defines.OBJECT_TYPES) - description = models.TextField(blank=True) + description = models.TextField(blank=True, null=True) location = models.ForeignKey('self', related_name="obj_location", blank=True, null=True) - flags = models.TextField(blank=True) - nosave_flags = models.TextField(blank=True) + flags = models.TextField(blank=True, null=True) + nosave_flags = models.TextField(blank=True, null=True) date_created = models.DateField(editable=False, auto_now_add=True) def __cmp__(self, other): @@ -118,7 +118,14 @@ class Object(models.Model): """ Returns an object's flag list. """ - return '%s %s' % (self.flags, self.nosave_flags) + flags = self.flags + nosave_flags = self.nosave_flags + if not flags: + flags = "" + if not nosave_flags: + nosave_flags = "" + + return '%s %s' % (flags, nosave_flags) def clear_attribute(self, attribute): """ @@ -224,7 +231,11 @@ class Object(models.Model): flag: (str) Flag name """ - return flag in self.flags or flag in self.nosave_flags + # For whatever reason, we have to do this so things work + # in SQLite. + flags = str(self.flags).split() + nosave_flags = str(self.nosave_flags).split() + return flag in flags or flag in nosave_flags def set_flag(self, flag, value): """ @@ -260,12 +271,12 @@ class Object(models.Model): # Setting a flag. if functions_db.is_unsavable_flag(flag): # Not a savable flag (CONNECTED, etc) - flags = self.nosave_flags.split() + flags = str(self.nosave_flags).split() flags.append(flag) self.nosave_flags = ' '.join(flags) else: # Is a savable flag. - flags = self.flags.split() + flags = str(self.flags).split() flags.append(flag) self.flags = ' '.join(flags) self.save() @@ -284,13 +295,19 @@ class Object(models.Model): """ Returns an object's home. """ - return self.home + try: + return self.home + except: + return None def get_location(self): """ Returns an object's location. """ - return self.location + try: + return self.location + except: + return False def get_attribute_value(self, attrib, default=False): """ @@ -330,7 +347,10 @@ class Object(models.Model): """ Returns the object that is marked as this object's zone. """ - return self.zone + try: + return self.zone + except: + return None def move_to(self, target): """ diff --git a/evennia/trunk/commands_general.py b/evennia/trunk/commands_general.py index 7ddfc7eb35..2f589d798f 100644 --- a/evennia/trunk/commands_general.py +++ b/evennia/trunk/commands_general.py @@ -40,7 +40,7 @@ def cmd_look(cdat): if len(args) == 0: target_obj = pobject.get_location() else: - results = functions_db.local_and_global_search(pobject, ' '.join(args), searcher=pobject) + results = functions_db.local_and_global_search(pobject, ' '.join(args)) if len(results) > 1: session.msg("More than one match found (please narrow target):") @@ -101,7 +101,7 @@ def cmd_examine(cdat): if len(args) == 0: target_obj = pobject.get_location() else: - results = functions_db.local_and_global_search(pobject, ' '.join(args), searcher=pobject) + results = functions_db.local_and_global_search(pobject, ' '.join(args)) if len(results) > 1: session.msg("More than one match found (please narrow target):") diff --git a/evennia/trunk/commands_staff.py b/evennia/trunk/commands_staff.py index 9d99087bc2..4282e0676c 100644 --- a/evennia/trunk/commands_staff.py +++ b/evennia/trunk/commands_staff.py @@ -5,10 +5,10 @@ import cmdhandler import session_mgr from apps.objects.models import Object """ -Staff commands may be a bad description for this file, but it'll do for now. -Any command here is prefixed by an '@' sign, usually denoting a builder, staff -or otherwise manipulative command that doesn't fall within the scope of -normal gameplay. +Staff commands may be a bad description for this file, but it'll do for +now. Any command here is prefixed by an '@' sign, usually denoting a +builder, staff or otherwise manipulative command that doesn't fall within +the scope of normal gameplay. """ def cmd_destroy(cdat): @@ -28,7 +28,7 @@ def cmd_destroy(cdat): session.msg("Destroy what?") return else: - results = functions_db.local_and_global_search(pobject, ' '.join(args), searcher=pobject) + results = functions_db.local_and_global_search(pobject, ' '.join(args)) if len(results) > 1: session.msg("More than one match found (please narrow target):") @@ -76,7 +76,7 @@ def cmd_name(cdat): elif len(eq_args) < 2: session.msg("What would you like to name that object?") else: - results = functions_db.local_and_global_search(pobject, searchstring, searcher=pobject) + results = functions_db.local_and_global_search(pobject, searchstring) if len(results) > 1: session.msg("More than one match found (please narrow target):") @@ -176,7 +176,7 @@ def cmd_open(cdat): # an un-linked exit, @open . if len(eq_args) > 1: # Opening an exit to another location via @open =[,]. - destination = functions_db.local_and_global_search(pobject, eq_args[1], searcher=pobject) + destination = functions_db.local_and_global_search(pobject, eq_args[1]) if len(destination) == 0: session.msg("I can't find the location to link to.") @@ -220,8 +220,8 @@ def cmd_teleport(cdat): # a direct teleport, @tel . if len(eq_args) > 1: # Equal sign teleport. - victim = functions_db.local_and_global_search(pobject, eq_args[0], searcher=pobject) - destination = functions_db.local_and_global_search(pobject, eq_args[1], searcher=pobject) + victim = functions_db.local_and_global_search(pobject, eq_args[0]) + destination = functions_db.local_and_global_search(pobject, eq_args[1]) if len(victim) == 0: session.msg("I can't find the victim to teleport.") @@ -254,7 +254,7 @@ def cmd_teleport(cdat): else: # Direct teleport (no equal sign) - results = functions_db.local_and_global_search(pobject, search_str, searcher=pobject) + results = functions_db.local_and_global_search(pobject, search_str) if len(results) > 1: session.msg("More than one match found (please narrow target):") @@ -293,7 +293,7 @@ def cmd_set(cdat): session.msg("Set what?") return - victim = functions_db.local_and_global_search(pobject, eq_args[0], searcher=pobject) + victim = functions_db.local_and_global_search(pobject, eq_args[0]) if len(victim) == 0: session.msg("I don't see that here.") @@ -359,7 +359,7 @@ def cmd_find(cdat): session.msg("No search pattern given.") return - results = functions_db.list_search_object_namestr(server.object_list.values(), searchstring) + results = functions_db.global_object_name_search(searchstring) if len(results) > 0: session.msg("Name matches for: %s" % (searchstring,)) diff --git a/evennia/trunk/commands_unloggedin.py b/evennia/trunk/commands_unloggedin.py index cb1322879c..c789b97087 100644 --- a/evennia/trunk/commands_unloggedin.py +++ b/evennia/trunk/commands_unloggedin.py @@ -14,7 +14,7 @@ def cmd_connect(cdat): uname = cdat['uinput']['splitted'][1] password = cdat['uinput']['splitted'][2] - account = User.objects.filter(username=uname) + account = User.objects.filter(username__iexact=uname) autherror = "Invalid username or password!" # No username match diff --git a/evennia/trunk/functions_db.py b/evennia/trunk/functions_db.py index 7e91a5676e..15a2cfe27b 100644 --- a/evennia/trunk/functions_db.py +++ b/evennia/trunk/functions_db.py @@ -9,7 +9,7 @@ def get_server_config(configname): """ Returns a server config value. """ - return ConfigValue.objects.get(conf_key=configname).conf_value + return ConfigValue.objects.get(conf_key__iexact=configname).conf_value def is_unsavable_flag(flagname): """ @@ -55,6 +55,12 @@ def get_nextfree_dbnum(): print 'NOTGARB' return int(Object.objects.order_by('-id')[0].id + 1) +def global_object_name_search(ostring): + """ + Searches through all objects for a name match. + """ + return Object.objects.filter(name__icontains=ostring).exclude(type=6) + def list_search_object_namestr(searchlist, ostring, dbref_only=False): """ Iterates through a list of objects and returns a list of @@ -65,7 +71,7 @@ def list_search_object_namestr(searchlist, ostring, dbref_only=False): else: return [prospect for prospect in searchlist if prospect.name_match(ostring)] -def local_and_global_search(object, ostring, local_only=False, searcher=None): +def local_and_global_search(searcher, ostring, local_only=False, dbref_only=False): """ Searches an object's location then globally for a dbref or name match. local_only: Only compare the objects in the player's location if True. @@ -78,11 +84,11 @@ def local_and_global_search(object, ostring, local_only=False, searcher=None): if len(dbref_match) > 0: return dbref_match - local_matches = list_search_object_namestr(object.location.get_contents(), search_query) + local_matches = list_search_object_namestr(searcher.get_location().get_contents(), search_query) + list_search_object_namestr(searcher.get_contents(), search_query) # If the object the invoker is in matches, add it as well. - if object.location.dbref_match(ostring) or ostring == 'here': - local_matches.append(object.location) + if searcher.get_location().dbref_match(ostring) or ostring == 'here': + local_matches.append(searcher.get_location()) elif ostring == 'me' and searcher: local_matches.append(searcher) @@ -132,15 +138,17 @@ def create_object(odat): new_object.name = odat["name"] new_object.type = odat["type"] - # If this is a player, set him to own himself. + # If this is a player, we don't want him owned by anyone. + # The get_owner() function will return that the player owns + # himself. if odat["type"] == 1: new_object.owner = None new_object.zone = None else: new_object.owner = odat["owner"] - if new_object.owner.zone: - new_object.zone = new_object.owner.zone + if new_object.get_owner().get_zone(): + new_object.zone = new_object.get_owner().get_zone() # If we have a 'home' key, use that for our home value. Otherwise use # the location key. diff --git a/evennia/trunk/settings.py b/evennia/trunk/settings.py index c033e6e3c0..77cdf5f547 100755 --- a/evennia/trunk/settings.py +++ b/evennia/trunk/settings.py @@ -9,8 +9,8 @@ ADMINS = ( MANAGERS = ADMINS -DATABASE_ENGINE = 'mysql' # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'. -DATABASE_NAME = 'evennia' # Or path to database file if using sqlite3. +DATABASE_ENGINE = 'sqlite3' # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'. +DATABASE_NAME = 'evennia.sql' # Or path to database file if using sqlite3. DATABASE_USER = 'evennia' # Not used with sqlite3. DATABASE_PASSWORD = 'CvAPpy:FFRTmTMHf' # Not used with sqlite3. DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.