We now have object creation support via MUX-style @create. Next up is room creation, exit creation and linking, and finally @pcreate.
This commit is contained in:
parent
977864c649
commit
a34bdc2889
5 changed files with 103 additions and 29 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
import global_defines
|
||||||
|
|
||||||
class ObjectClass(models.Model):
|
class ObjectClass(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -40,18 +41,11 @@ class Object(models.Model):
|
||||||
field. The different otypes denote an object's behaviors.
|
field. The different otypes denote an object's behaviors.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Do not mess with the default types (0-5).
|
|
||||||
OBJECT_TYPES = (
|
|
||||||
(0, 'NOTHING'),
|
|
||||||
(1, 'PLAYER'),
|
|
||||||
(2, 'ROOM'),
|
|
||||||
(3, 'THING'),
|
|
||||||
(4, 'EXIT'),
|
|
||||||
(5, 'GARBAGE'),
|
|
||||||
)
|
|
||||||
|
|
||||||
name = models.CharField(maxlength=255)
|
name = models.CharField(maxlength=255)
|
||||||
type = models.SmallIntegerField(choices=OBJECT_TYPES)
|
#owner = models.ForeignKey('self', related_name="owner")
|
||||||
|
#zone = models.ForeignKey('self', related_name="zone")
|
||||||
|
#home = models.ForeignKey('self', related_name="home")
|
||||||
|
type = models.SmallIntegerField(choices=global_defines.OBJECT_TYPES)
|
||||||
description = models.TextField(blank=True)
|
description = models.TextField(blank=True)
|
||||||
location = models.ForeignKey('self', related_name="olocation", blank=True, null=True)
|
location = models.ForeignKey('self', related_name="olocation", blank=True, null=True)
|
||||||
|
|
||||||
|
|
@ -65,7 +59,7 @@ class Object(models.Model):
|
||||||
# A dictionary of attributes assocated with the object. The keys are the
|
# A dictionary of attributes assocated with the object. The keys are the
|
||||||
# attribute's names.
|
# attribute's names.
|
||||||
attrib_list = {}
|
attrib_list = {}
|
||||||
|
|
||||||
def __cmp__(self, other):
|
def __cmp__(self, other):
|
||||||
"""
|
"""
|
||||||
Used to figure out if one object is the same as another.
|
Used to figure out if one object is the same as another.
|
||||||
|
|
@ -179,7 +173,16 @@ class Object(models.Model):
|
||||||
elif otype is 'g':
|
elif otype is 'g':
|
||||||
return self.is_garbage()
|
return self.is_garbage()
|
||||||
|
|
||||||
|
def flag_string(self):
|
||||||
|
"""
|
||||||
|
Returns the flag string for an object. This abbreviates all of the flags
|
||||||
|
set on the object into a list of single-character flag characters.
|
||||||
|
"""
|
||||||
|
# TODO: Once we add a flag system, add the other flag types here.
|
||||||
|
type_string = global_defines.OBJECT_TYPES[self.type][1][0]
|
||||||
|
return type_string
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "%s(%d)" % (self.name, self.id,)
|
return "%s(#%d%s)" % (self.name, self.id, self.flag_string())
|
||||||
|
|
||||||
import functions_db
|
import functions_db
|
||||||
|
|
|
||||||
|
|
@ -20,22 +20,25 @@ def cmd_look(cdat):
|
||||||
if len(args) == 0:
|
if len(args) == 0:
|
||||||
target_obj = session.pobject.location
|
target_obj = session.pobject.location
|
||||||
else:
|
else:
|
||||||
results = functions_db.local_and_global_search(pobject, ''.join(args))
|
results = functions_db.local_and_global_search(pobject, ''.join(args), searcher=pobject)
|
||||||
|
|
||||||
if len(results) > 1:
|
if len(results) > 1:
|
||||||
session.msg("More than one match found (please narrow target):")
|
session.msg("More than one match found (please narrow target):")
|
||||||
for result in results:
|
for result in results:
|
||||||
session.msg(" %s(#%s)" % (result.name, result.id,))
|
session.msg(" %s" % (result,))
|
||||||
|
return
|
||||||
elif len(results) == 0:
|
elif len(results) == 0:
|
||||||
session.msg("I don't see that here.")
|
session.msg("I don't see that here.")
|
||||||
|
return
|
||||||
else:
|
else:
|
||||||
target_obj = results[0]
|
target_obj = results[0]
|
||||||
|
|
||||||
retval = "%s%s%s(#%i)%s\r\n%s" % (
|
retval = "%s%s%s(#%i%s)%s\r\n%s" % (
|
||||||
ansi["normal"],
|
ansi["normal"],
|
||||||
ansi["hilite"],
|
ansi["hilite"],
|
||||||
target_obj.name,
|
target_obj.name,
|
||||||
target_obj.id,
|
target_obj.id,
|
||||||
|
target_obj.flag_string(),
|
||||||
ansi["normal"],
|
ansi["normal"],
|
||||||
target_obj.description,
|
target_obj.description,
|
||||||
)
|
)
|
||||||
|
|
@ -57,15 +60,15 @@ def cmd_look(cdat):
|
||||||
if con_players:
|
if con_players:
|
||||||
session.msg("%sPlayers:%s" % (ansi["hilite"], ansi["normal"],))
|
session.msg("%sPlayers:%s" % (ansi["hilite"], ansi["normal"],))
|
||||||
for player in con_players:
|
for player in con_players:
|
||||||
session.msg('%s(#%s)' %(player.name, player.id,))
|
session.msg('%s' %(player,))
|
||||||
if con_things:
|
if con_things:
|
||||||
session.msg("%sThings:%s" % (ansi["hilite"], ansi["normal"],))
|
session.msg("%sThings:%s" % (ansi["hilite"], ansi["normal"],))
|
||||||
for thing in con_things:
|
for thing in con_things:
|
||||||
session.msg('%s(#%s)' %(thing.name, thing.id,))
|
session.msg('%s' %(thing,))
|
||||||
if con_exits:
|
if con_exits:
|
||||||
session.msg("%sExits:%s" % (ansi["hilite"], ansi["normal"],))
|
session.msg("%sExits:%s" % (ansi["hilite"], ansi["normal"],))
|
||||||
for exit in con_exits:
|
for exit in con_exits:
|
||||||
session.msg('%s(#%s)' %(exit.name, exit.id,))
|
session.msg('%s' %(exit,))
|
||||||
|
|
||||||
def cmd_quit(cdat):
|
def cmd_quit(cdat):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ def cmd_dig(cdat):
|
||||||
Digs a new room out.
|
Digs a new room out.
|
||||||
"""
|
"""
|
||||||
session = cdat['session']
|
session = cdat['session']
|
||||||
uinput= cdat['uinput']
|
uinput= cdat['uinput']['splitted']
|
||||||
roomname = ''.join(uinput[1:])
|
roomname = ''.join(uinput[1:])
|
||||||
|
|
||||||
if roomname == '':
|
if roomname == '':
|
||||||
|
|
@ -22,6 +22,24 @@ def cmd_dig(cdat):
|
||||||
newroom.name = roomname
|
newroom.name = roomname
|
||||||
newroom.type = "Room"
|
newroom.type = "Room"
|
||||||
|
|
||||||
|
def cmd_create(cdat):
|
||||||
|
"""
|
||||||
|
Creates a new object of type 'THING'.
|
||||||
|
"""
|
||||||
|
session = cdat['session']
|
||||||
|
server = session.server
|
||||||
|
uinput= cdat['uinput']['splitted']
|
||||||
|
thingname = ''.join(uinput[1:])
|
||||||
|
|
||||||
|
if thingname == '':
|
||||||
|
session.msg("You must supply a room name!")
|
||||||
|
else:
|
||||||
|
# Create and set the object up.
|
||||||
|
odat = {"name": thingname, "type": 3, "location": session.pobject.location, "owner": session.pobject}
|
||||||
|
new_object = functions_db.create_object(server, odat)
|
||||||
|
|
||||||
|
session.msg("You create a new object: %s" % (new_object,))
|
||||||
|
|
||||||
def cmd_nextfree(cdat):
|
def cmd_nextfree(cdat):
|
||||||
"""
|
"""
|
||||||
Returns the next free object number.
|
Returns the next free object number.
|
||||||
|
|
@ -55,8 +73,8 @@ def cmd_teleport(cdat):
|
||||||
# a direct teleport, @tel <destination>.
|
# a direct teleport, @tel <destination>.
|
||||||
if len(eq_args) > 1:
|
if len(eq_args) > 1:
|
||||||
# Equal sign teleport.
|
# Equal sign teleport.
|
||||||
victim = functions_db.local_and_global_search(pobject, eq_args[0])
|
victim = functions_db.local_and_global_search(pobject, eq_args[0], searcher=pobject)
|
||||||
destination = functions_db.local_and_global_search(pobject, eq_args[1])
|
destination = functions_db.local_and_global_search(pobject, eq_args[1], searcher=pobject)
|
||||||
|
|
||||||
if len(victim) == 0:
|
if len(victim) == 0:
|
||||||
session.msg("I can't find the victim to teleport.")
|
session.msg("I can't find the victim to teleport.")
|
||||||
|
|
@ -89,12 +107,12 @@ def cmd_teleport(cdat):
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# Direct teleport (no equal sign)
|
# Direct teleport (no equal sign)
|
||||||
results = functions_db.local_and_global_search(pobject, search_str)
|
results = functions_db.local_and_global_search(pobject, search_str, searcher=pobject)
|
||||||
|
|
||||||
if len(results) > 1:
|
if len(results) > 1:
|
||||||
session.msg("More than one match found (please narrow target):")
|
session.msg("More than one match found (please narrow target):")
|
||||||
for result in results:
|
for result in results:
|
||||||
session.msg(" %s(#%s)" % (result.name, result.id,))
|
session.msg(" %s" % (result,))
|
||||||
elif len(results) == 0:
|
elif len(results) == 0:
|
||||||
session.msg("I don't see that here.")
|
session.msg("I don't see that here.")
|
||||||
return
|
return
|
||||||
|
|
@ -128,7 +146,7 @@ def cmd_find(cdat):
|
||||||
if len(results) > 0:
|
if len(results) > 0:
|
||||||
session.msg("Name matches for: %s" % (searchstring,))
|
session.msg("Name matches for: %s" % (searchstring,))
|
||||||
for result in results:
|
for result in results:
|
||||||
session.msg(" %s(#%s)" % (result.name, result.id,))
|
session.msg(" %s" % (result,))
|
||||||
session.msg("%d matches returned." % (len(results),))
|
session.msg("%d matches returned." % (len(results),))
|
||||||
else:
|
else:
|
||||||
session.msg("No name matches found for: %s" % (searchstring,))
|
session.msg("No name matches found for: %s" % (searchstring,))
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import sets
|
import sets
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from apps.objects.models import Object
|
from apps.objects.models import Object
|
||||||
|
import functions_db
|
||||||
|
|
||||||
def get_nextfree_dbnum():
|
def get_nextfree_dbnum():
|
||||||
"""
|
"""
|
||||||
|
|
@ -28,7 +29,7 @@ def list_search_object_namestr(searchlist, ostring, dbref_only=False):
|
||||||
else:
|
else:
|
||||||
return [prospect for prospect in searchlist if prospect.name_match(ostring)]
|
return [prospect for prospect in searchlist if prospect.name_match(ostring)]
|
||||||
|
|
||||||
def local_and_global_search(object, ostring, local_only=False):
|
def local_and_global_search(object, ostring, local_only=False, searcher=None):
|
||||||
"""
|
"""
|
||||||
Searches an object's location then globally for a dbref or name match.
|
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.
|
local_only: Only compare the objects in the player's location if True.
|
||||||
|
|
@ -46,6 +47,8 @@ def local_and_global_search(object, ostring, local_only=False):
|
||||||
# If the object the invoker is in matches, add it as well.
|
# If the object the invoker is in matches, add it as well.
|
||||||
if object.location.dbref_match(ostring) or ostring == 'here':
|
if object.location.dbref_match(ostring) or ostring == 'here':
|
||||||
local_matches.append(object.location)
|
local_matches.append(object.location)
|
||||||
|
elif ostring == 'me' and searcher:
|
||||||
|
local_matches.append(searcher)
|
||||||
|
|
||||||
return local_matches
|
return local_matches
|
||||||
|
|
||||||
|
|
@ -92,6 +95,45 @@ def get_object_from_dbref(server, dbref):
|
||||||
"""
|
"""
|
||||||
return server.object_list.get(dbref, False)
|
return server.object_list.get(dbref, False)
|
||||||
|
|
||||||
|
def create_object(server, odat):
|
||||||
|
"""
|
||||||
|
Create a new object. odat is a dictionary that contains the following keys.
|
||||||
|
REQUIRED KEYS:
|
||||||
|
* type: Integer representing the object's type.
|
||||||
|
* name: The name of the new object.
|
||||||
|
* location: Reference to another object for the new object to reside in.
|
||||||
|
* owner: The creator of the object.
|
||||||
|
OPTIONAL KEYS:
|
||||||
|
* home: Reference to another object to home to. If not specified, use
|
||||||
|
location key for home.
|
||||||
|
"""
|
||||||
|
new_object = Object()
|
||||||
|
new_object.name = odat["name"]
|
||||||
|
new_object.type = odat["type"]
|
||||||
|
|
||||||
|
#if odat["home"]:
|
||||||
|
# new_object.home = odat["home"]
|
||||||
|
#else:
|
||||||
|
# new_object.home = odat["location"]
|
||||||
|
|
||||||
|
#if odat["owner"].zone:
|
||||||
|
# new_object.zone = odat["owner"].zone
|
||||||
|
#else:
|
||||||
|
# new_object.zone = None
|
||||||
|
|
||||||
|
#if odat["type"] is 1:
|
||||||
|
# new_object.owner = new_object
|
||||||
|
#else:
|
||||||
|
# new_object.owner = odat["owner"]
|
||||||
|
|
||||||
|
new_object.save()
|
||||||
|
|
||||||
|
# Add the object to our server's dictionary of objects.
|
||||||
|
server.add_object_to_cache(new_object)
|
||||||
|
new_object.move_to(server, odat['location'])
|
||||||
|
|
||||||
|
return new_object
|
||||||
|
|
||||||
def create_user(cdat, uname, email, password):
|
def create_user(cdat, uname, email, password):
|
||||||
"""
|
"""
|
||||||
Handles the creation of new users.
|
Handles the creation of new users.
|
||||||
|
|
@ -112,9 +154,8 @@ def create_user(cdat, uname, email, password):
|
||||||
user.save
|
user.save
|
||||||
|
|
||||||
# Create a player object of the same ID in the Objects table.
|
# 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)
|
odat = {"id": uid, "name": uname, "type": 1, "location": start_room_obj, "owner": None}
|
||||||
user_object.save()
|
user_object = functions_db.create_object(server, odat)
|
||||||
server.add_object_to_cache(user_object)
|
|
||||||
|
|
||||||
# Activate the player's session and set them loose.
|
# Activate the player's session and set them loose.
|
||||||
session.login(user)
|
session.login(user)
|
||||||
|
|
|
||||||
9
evennia/trunk/global_defines.py
Normal file
9
evennia/trunk/global_defines.py
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Do not mess with the default types (0-5).
|
||||||
|
OBJECT_TYPES = (
|
||||||
|
(0, 'NOTHING'),
|
||||||
|
(1, 'PLAYER'),
|
||||||
|
(2, 'ROOM'),
|
||||||
|
(3, 'THING'),
|
||||||
|
(4, 'EXIT'),
|
||||||
|
(5, 'GARBAGE'),
|
||||||
|
)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue