mirror of
https://github.com/evennia/evennia.git
synced 2026-03-19 06:16:31 +01:00
92 lines
2.8 KiB
Python
Executable file
92 lines
2.8 KiB
Python
Executable file
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.
|
|
"""
|
|
name = models.CharField(maxlength=255)
|
|
description = models.TextField()
|
|
|
|
def __str__(self):
|
|
return "%s(%d)" % (self.name, self.id,)
|
|
|
|
class Admin:
|
|
list_display = ('name', 'description',)
|
|
|
|
class Attribute(models.Model):
|
|
"""
|
|
Attributes are things that are specific to different types of objects. For
|
|
example, a drink container needs to store its fill level, whereas an exit
|
|
needs to store its open/closed/locked/unlocked state. These are done via
|
|
attributes, rather than making different classes for each object type and
|
|
storing them directly. The added benefit is that we can add/remove attributes
|
|
on the fly as we like.
|
|
"""
|
|
name = models.CharField(maxlength=255)
|
|
value = models.CharField(maxlength=255)
|
|
object = models.ForeignKey("Object")
|
|
|
|
def __str__(self):
|
|
return "%s(%d)" % (self.name, self.id,)
|
|
|
|
class Admin:
|
|
list_display = ('name', 'value',)
|
|
|
|
class Object(models.Model):
|
|
"""
|
|
The Object class is very generic. We put all of our common attributes
|
|
here and anything very particular into the attribute field. Notice the otype
|
|
field. The different otypes denote an object's behaviors.
|
|
"""
|
|
|
|
# Do not mess with the default types (0-4).
|
|
OBJECT_TYPES = (
|
|
(0, 'NOTHING'),
|
|
(1, 'PLAYER'),
|
|
(2, 'ROOM'),
|
|
(3, 'THING'),
|
|
(4, 'EXIT'),
|
|
)
|
|
|
|
name = models.CharField(maxlength=255)
|
|
type = models.SmallIntegerField(choices=OBJECT_TYPES)
|
|
description = models.TextField(blank=True)
|
|
location = models.ForeignKey('self', related_name="olocation", blank=True, null=True)
|
|
contents = models.ManyToManyField("Object", related_name="object", blank=True, null=True)
|
|
attributes = models.ManyToManyField(Attribute, related_name="attributes", blank=True, null=True)
|
|
|
|
def __str__(self):
|
|
return "%s(%d)" % (self.name, self.id,)
|
|
|
|
def is_type(self, typename):
|
|
"""
|
|
Do a string comparison of user's input and the object's type class object's
|
|
name.
|
|
"""
|
|
return self.type.name == typename
|
|
|
|
def set_type(self, typename):
|
|
"""
|
|
Sets a object's type.
|
|
"""
|
|
pass
|
|
|
|
class Admin:
|
|
list_display = ('name',)
|
|
"""
|
|
class Player(models.Model):
|
|
#
|
|
# Model representation of our players.
|
|
#
|
|
# Link back to our Django User class for password, username, email, etc.
|
|
account = models.ForeignKey(User)
|
|
location = models.ForeignKey(Object, related_name="plocation")
|
|
is_connected = models.BooleanField()
|
|
last_connected = models.DateTimeField()
|
|
contents = models.ManyToManyField(Object)
|
|
attributes = models.ManyToManyField(Attribute)
|
|
|
|
def __str__(self):
|
|
return "%s(%d)" % (self.name, self.id,)
|
|
"""
|