diff --git a/evennia/trunk/apps/objects/models.py b/evennia/trunk/apps/objects/models.py index 6ca004b48a..7c48b503b1 100755 --- a/evennia/trunk/apps/objects/models.py +++ b/evennia/trunk/apps/objects/models.py @@ -1,7 +1,6 @@ from django.db import models from django.contrib.auth.models import User - class ObjectClass(models.Model): """ Each object class can have different behaviors to apply to it. @@ -111,12 +110,11 @@ class Object(models.Model): # self.location.contents_list.remove(self) #target.contents_list.append(self) - cached_object = server.get_object_from_dbref(self.id) + cached_object = functions_db.get_object_from_dbref(server, self.id) cached_object.location = target cached_object.save() def dbref_match(self, oname): - import functions_db """ Check if the input (oname) can be used to identify this particular object by means of a dbref match. @@ -132,7 +130,6 @@ class Object(models.Model): return is_match def name_match(self, oname): - import functions_db """ See if the input (oname) can be used to identify this particular object. Check the # sign for dbref (exact) reference, and anything else is a @@ -184,3 +181,5 @@ class Object(models.Model): def __str__(self): return "%s(%d)" % (self.name, self.id,) + +import functions_db diff --git a/evennia/trunk/commands_unloggedin.py b/evennia/trunk/commands_unloggedin.py index db724d5981..cf7cf9a4e8 100644 --- a/evennia/trunk/commands_unloggedin.py +++ b/evennia/trunk/commands_unloggedin.py @@ -1,4 +1,5 @@ from django.contrib.auth.models import User +import functions_db """ Commands that are available from the connect screen. @@ -30,10 +31,11 @@ def do_create(cdat): Handle the creation of new accounts. """ session = cdat['session'] - server = cdat['server'] uname = cdat['uinput']['splitted'][1] email = cdat['uinput']['splitted'][2] password = cdat['uinput']['splitted'][3] + + # Search for a user object with the specified username. account = User.objects.filter(username=uname) if not account.count() == 0: @@ -41,7 +43,7 @@ def do_create(cdat): elif len(password) < 3: session.msg("Your password must be 3 characters or longer.") else: - server.create_user(session, uname, email, password) + functions_db.create_user(cdat, uname, email, password) def do_quit(cdat): """ diff --git a/evennia/trunk/functions_db.py b/evennia/trunk/functions_db.py index cbc1cc63a3..e54def5a3d 100644 --- a/evennia/trunk/functions_db.py +++ b/evennia/trunk/functions_db.py @@ -1,6 +1,23 @@ import sets +from django.contrib.auth.models import User from apps.objects.models import Object +def get_nextfree_dbnum(): + """ + Figure out what our next free database reference number is. + """ + # First we'll see if there's an object of type 5 (GARBAGE) that we + # can recycle. + nextfree = Object.objects.filter(type__exact=5) + if nextfree: + # We've got at least one garbage object to recycle. + #return nextfree.id + return nextfree[0].id + else: + # No garbage to recycle, find the highest dbnum and increment it + # for our next free. + return Object.objects.order_by('-id')[0].id + 1 + def list_search_object_namestr(searchlist, ostring, dbref_only=False): """ Iterates through a list of objects and returns a list of @@ -68,3 +85,38 @@ def session_from_dbref(session_list, dbstring): return results[0] else: return False + +def get_object_from_dbref(server, dbref): + """ + Returns an object when given a dbref. + """ + return server.object_list.get(dbref, False) + +def create_user(cdat, uname, email, password): + """ + Handles the creation of new users. + """ + session = cdat['session'] + server = cdat['server'] + start_room = int(server.get_configvalue('player_dbnum_start')) + start_room_obj = get_object_from_dbref(server, start_room) + + # The user's entry in the User table must match up to an object + # on the object table. The id's are the same, we need to figure out + # the next free unique ID to use and make sure the two entries are + # the same number. + uid = get_nextfree_dbnum() + user = User.objects.create_user(uname, email, password) + # It stinks to have to do this but it's the only trivial way now. + user.id = uid + user.save + + # Create a player object of the same ID in the Objects table. + user_object = Object(id=uid, type=1, name=uname, location=start_room_obj) + user_object.save() + server.add_object_to_cache(user_object) + + # Activate the player's session and set them loose. + session.login(user) + print 'Registration: %s' % (session,) + session.push("Welcome to %s, %s.\n\r" % (server.get_configvalue('site_name'), session.name,)) diff --git a/evennia/trunk/server.py b/evennia/trunk/server.py index 4133f25395..05dc95f377 100755 --- a/evennia/trunk/server.py +++ b/evennia/trunk/server.py @@ -6,6 +6,7 @@ from django.db import models from apps.config.models import ConfigValue, CommandAlias from apps.objects.models import Object, Attribute from django.contrib.auth.models import User +import functions_db # ## Begin: Time Functions @@ -144,40 +145,7 @@ class Server(dispatcher): Adds an object to the cached object list. """ self.object_list[object.id] = object - - def get_object_from_dbref(self, dbref): - """ - Returns an object when given a dbref. - """ - return self.object_list.get(dbref, False) - - def create_user(self, session, uname, email, password): - """ - Handles the creation of new users. - """ - start_room = int(self.get_configvalue('player_dbnum_start')) - start_room_obj = self.get_object_from_dbref(start_room) - - # The user's entry in the User table must match up to an object - # on the object table. The id's are the same, we need to figure out - # the next free unique ID to use and make sure the two entries are - # the same number. - uid = self.get_nextfree_dbnum() - user = User.objects.create_user(uname, email, password) - # It stinks to have to do this but it's the only trivial way now. - user.id = uid - user.save - - # Create a player object of the same ID in the Objects table. - user_object = Object(id=uid, type=1, name=uname, location=start_room_obj) - user_object.save() - self.add_object_to_cache(user_object) - - # Activate the player's session and set them loose. - session.login(user) - print 'Registration: %s' % (session,) - session.push("Welcome to %s, %s.\n\r" % (self.get_configvalue('site_name'), session.name,)) - + def announce_all(self, message, with_ann_prefix=True): """ Announces something to all connected players. @@ -196,21 +164,6 @@ class Server(dispatcher): """ return self.configvalue[configname] - def get_nextfree_dbnum(self): - """ - Figure out what our next free database reference number is. - """ - # First we'll see if there's an object of type 5 (GARBAGE) that we - # can recycle. - nextfree = Object.objects.filter(type__exact=5) - if nextfree: - # We've got at least one garbage object to recycle. - #return nextfree.id - return nextfree[0].id - else: - # No garbage to recycle, find the highest dbnum and increment it - # for our next free. - return Object.objects.order_by('-id')[0].id + 1 """ END Server CLASS """ diff --git a/evennia/trunk/sessions.py b/evennia/trunk/sessions.py index 7d17a26c18..43f6d5b970 100755 --- a/evennia/trunk/sessions.py +++ b/evennia/trunk/sessions.py @@ -5,6 +5,7 @@ import cmdhandler from apps.objects.models import Object from django.contrib.auth.models import User import commands_general +import functions_db class PlayerSession(async_chat): """ @@ -78,7 +79,7 @@ class PlayerSession(async_chat): """ After the user has authenticated, handle logging him in. """ - self.pobject = self.server.get_object_from_dbref(user.id) + self.pobject = functions_db.get_object_from_dbref(self.server, user.id) self.name = user.username self.logged_in = True self.conn_time = time.time()