Renamed new properties, altered validate_name, fixed minor issue with an accidentally changed kwarg name.
This commit is contained in:
parent
dfd5ee3f8e
commit
db4973ee21
2 changed files with 27 additions and 16 deletions
|
|
@ -273,7 +273,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
|
||||||
objects = AccountManager()
|
objects = AccountManager()
|
||||||
|
|
||||||
# Used by account.create_character() to choose default typeclass for characters.
|
# Used by account.create_character() to choose default typeclass for characters.
|
||||||
player_character_typeclass = settings.BASE_CHARACTER_TYPECLASS
|
default_character_typeclass = settings.BASE_CHARACTER_TYPECLASS
|
||||||
|
|
||||||
# properties
|
# properties
|
||||||
@lazy_property
|
@lazy_property
|
||||||
|
|
@ -795,18 +795,26 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
|
||||||
|
|
||||||
def get_character_slots(self) -> typing.Optional[int]:
|
def get_character_slots(self) -> typing.Optional[int]:
|
||||||
"""
|
"""
|
||||||
Returns the number of character slots this account has.
|
Returns the number of character slots this account has, or
|
||||||
|
None if there are no limits.
|
||||||
|
|
||||||
By default, that's settings.MAX_NR_CHARACTERS but this makes it easy to override.
|
By default, that's settings.MAX_NR_CHARACTERS but this makes it easy to override.
|
||||||
Maybe for your game, players can be rewarded with more slots, somehow.
|
Maybe for your game, players can be rewarded with more slots, somehow.
|
||||||
|
|
||||||
If it returns None, then there are no limits on character slots.
|
Returns:
|
||||||
|
int (optional): The number of character slots this account has, or None
|
||||||
|
if there are no limits.
|
||||||
"""
|
"""
|
||||||
return settings.MAX_NR_CHARACTERS
|
return settings.MAX_NR_CHARACTERS
|
||||||
|
|
||||||
def get_available_character_slots(self) -> typing.Optional[int]:
|
def get_available_character_slots(self) -> typing.Optional[int]:
|
||||||
"""
|
"""
|
||||||
Returns the number of character slots this account has available.
|
Returns the number of character slots this account has available, or None if
|
||||||
|
there are no limits.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
int (optional): The number of open character slots this account has, or None
|
||||||
|
if there are no limits.
|
||||||
"""
|
"""
|
||||||
if (slots := self.get_character_slots()) is None:
|
if (slots := self.get_character_slots()) is None:
|
||||||
return None
|
return None
|
||||||
|
|
@ -834,7 +842,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
|
||||||
Args:
|
Args:
|
||||||
key (str, optional): If not given, use the same name as the account.
|
key (str, optional): If not given, use the same name as the account.
|
||||||
typeclass (str, optional): Typeclass to use for this character. If
|
typeclass (str, optional): Typeclass to use for this character. If
|
||||||
not given, use settings.BASE_CHARACTER_TYPECLASS.
|
not given, use self.default_character_class.
|
||||||
permissions (list, optional): If not given, use the account's permissions.
|
permissions (list, optional): If not given, use the account's permissions.
|
||||||
ip (str, optional): The client IP creating this character. Will fall back to the
|
ip (str, optional): The client IP creating this character. Will fall back to the
|
||||||
one stored for the account if not given.
|
one stored for the account if not given.
|
||||||
|
|
@ -854,7 +862,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
|
||||||
character_permissions = kwargs.pop("permissions", self.permissions)
|
character_permissions = kwargs.pop("permissions", self.permissions)
|
||||||
|
|
||||||
# Load the appropriate Character class
|
# Load the appropriate Character class
|
||||||
character_typeclass = kwargs.pop("typeclass", self.player_character_typeclass)
|
character_typeclass = kwargs.pop("typeclass", self.default_character_typeclass)
|
||||||
Character = class_from_module(character_typeclass)
|
Character = class_from_module(character_typeclass)
|
||||||
|
|
||||||
if "location" not in kwargs:
|
if "location" not in kwargs:
|
||||||
|
|
@ -1015,10 +1023,10 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
|
||||||
|
|
||||||
if account and _AUTO_CREATE_CHARACTER_WITH_ACCOUNT:
|
if account and _AUTO_CREATE_CHARACTER_WITH_ACCOUNT:
|
||||||
# Auto-create a character to go with this account
|
# Auto-create a character to go with this account
|
||||||
call_kwargs = {}
|
|
||||||
if "character_typeclass" in kwargs:
|
character, errs = account.create_character(
|
||||||
call_kwargs["character_typeclass"] = kwargs["character_typeclass"]
|
typeclass=kwargs.get("character_typeclass", account.default_character_typeclass)
|
||||||
character, errs = account.create_character(**call_kwargs)
|
)
|
||||||
if errs:
|
if errs:
|
||||||
errors.extend(errs)
|
errors.extend(errs)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ This is the v1.0 develop version (for ref in doc building).
|
||||||
"""
|
"""
|
||||||
import time
|
import time
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
import typing
|
||||||
|
|
||||||
import inflect
|
import inflect
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
@ -2529,8 +2530,8 @@ class DefaultCharacter(DefaultObject):
|
||||||
# Normalize to latin characters and validate, if necessary, the supplied key
|
# Normalize to latin characters and validate, if necessary, the supplied key
|
||||||
key = cls.normalize_name(key)
|
key = cls.normalize_name(key)
|
||||||
|
|
||||||
if not cls.validate_name(key):
|
if (val_err := cls.validate_name(key, account=account)):
|
||||||
errors.append(_("Invalid character name."))
|
errors.append(val_err)
|
||||||
return obj, errors
|
return obj, errors
|
||||||
|
|
||||||
# Set the supplied key as the name of the intended object
|
# Set the supplied key as the name of the intended object
|
||||||
|
|
@ -2604,18 +2605,20 @@ class DefaultCharacter(DefaultObject):
|
||||||
return latin_name
|
return latin_name
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def validate_name(cls, name):
|
def validate_name(cls, name, account=None) -> typing.Optional[str]:
|
||||||
"""
|
"""
|
||||||
Validate the character name prior to creating. Overload this function to add custom validators
|
Validate the character name prior to creating. Overload this function to add custom validators
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
name (str) : The name of the character
|
name (str) : The name of the character
|
||||||
|
Kwargs:
|
||||||
|
account (DefaultAccount, optional) : The account creating the character.
|
||||||
Returns:
|
Returns:
|
||||||
valid (bool) : True if character creation should continue; False if it should fail
|
error (str, optional) : A non-empty error message if there is a problem, otherwise False.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
if account and cls.objects.filter_family(db_key__iexact=name):
|
||||||
return True # Default validator does not perform any operations
|
return f"|rA character named '|w{name}|r' already exists.|n"
|
||||||
|
|
||||||
def basetype_setup(self):
|
def basetype_setup(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue