Refactored and fixed a lot of bugs. Creates the database but still does not properly load the settings file.

This commit is contained in:
Griatch 2015-01-08 01:25:32 +01:00
parent c96c5a1fc7
commit 0c9bf08c5a
15 changed files with 150 additions and 80 deletions

View file

@ -448,13 +448,15 @@ def init_game_directory(path):
# testing the main library import. If there are errors in importing
# the main library, it should show here.
importlib.import_module("evennia")
evennia = importlib.import_module("evennia")
evennia.init()
# check all dependencies
from evennia.utils.utils import check_evennia_dependencies
if not check_evennia_dependencies:
sys.exit()
# set up the Evennia executables and log file locations
global SERVER_PY_FILE, PORTAL_PY_FILE
global SERVER_LOGFILE, PORTAL_LOGFILE, HTTP_LOGFILE
@ -766,13 +768,13 @@ def error_check_python_modules():
mod, fromlist = path, "None"
if split:
mod, fromlist = path.rsplit('.', 1)
__import__(mod, fromlist=[fromlist])
__import__(mod, fromlist=[fromlist])
# core modules
imp(settings.COMMAND_PARSER)
imp(settings.SEARCH_AT_RESULT)
imp(settings.SEARCH_AT_MULTIMATCH_INPUT)
imp(settings.CONNECTION_SCREEN_MODULE, split=False)
imp(settings.CONNECTION_SCREEN_MODULE)
#imp(settings.AT_INITIAL_SETUP_HOOK_MODULE, split=False)
for path in settings.LOCK_FUNC_MODULES:
imp(path, split=False)

View file

@ -12,54 +12,117 @@ See www.evennia.com for full documentation.
"""
if False:
# Delayed loading of properties
######################################################################
# set Evennia version in __version__ property
######################################################################
import os
try:
__version__ = "Evennia"
with os.path.join(open(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), "VERSION.txt", 'r') as f:
__version__ += " %s" % f.read().strip()
except IOError:
__version__ += " (unknown version)"
del os
# Typeclasses
DefaultPlayer = None
DefaultGuest = None
DefaultObject = None
DefaultCharacter = None
DefaultRoom = None
DefaultExit = None
Channel = None
Script = None
######################################################################
# Start Evennia API
# (easiest is to import this module interactively to explore it)
######################################################################
# Database models
ObjectDB = None
PlayerDB = None
ScriptDB = None
ChannelDB = None
Msg = None
# help entries
from help.models import HelpEntry
# commands
Command = None
default_cmds = None
syscmdkeys = None
# players
from players.player import DefaultPlayer
# search functions
search_object = None
search_script = None
search_player = None
search_channel = None
search_help = None
# create functions
create_object = None
create_script = None
create_player = None
create_channel = None
create_message = None
# utilities
lockfuncs = None
tickerhandler = None
logger = None
utils = None
gametime = None
ansi = None
spawn = None
managers = None
import os
try:
__version__ = "Evennia"
with os.path.join(open(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), "VERSION.txt", 'r') as f:
__version__ += " %s" % f.read().strip()
except IOError:
__version__ += " (unknown version)"
del os
def init():
"""
This is called only after Evennia has fully initialized all its models.
"""
def imp(path, variable=True):
"Helper function"
mod, fromlist = path, "None"
if variable:
mod, fromlist = path.rsplit('.', 1)
return __import__(mod, fromlist=[fromlist])
global DefaultPlayer, DefaultObject, DefaultGuest, DefaultCharacter, DefaultRoom, DefaultExit, Channel, Script
global ObjectDB, PlayerDB, ScriptDB, ChannelDB, Msg
global Command, default_cmds, syscmdkeys
global search_object, search_script, search_player, search_channel, search_help
global create_object, create_script, create_player, create_channel, create_message
global lockfuncs, tickerhandler, logger, utils, gametime, ansi, spawn, managers
from players.players import DefaultPlayer
from players.players import DefaultGuest
from objects.objects import DefaultObject
from objects.objects import DefaultCharacter
from objects.objects import DefaultRoom
from objects.objects import DefaultExit
from comms.comms import Channel
from scripts.scripts import Script
# Database models
from objects.models import ObjectDB
from players.models import PlayerDB
from scripts.models import ScriptDB
from comms.models import ChannelDB
from comms.models import Msg
# commands
from commands.command import Command
from commands.cmdset import CmdSet
# (default_cmds is created below)
# locks
# search functions
from utils.search import search_object
from utils.search import search_script
from utils.search import search_player
from utils.search import search_channel
from utils.search import search_help
# create functions
from utils.create import create_object
from utils.create import create_script
from utils.create import create_player
from utils.create import create_channel
from utils.create import create_message
# utilities
from locks import lockfuncs
# scripts
from scripts.scripts import Script
# comms
from comms.models import Msg, ChannelDB
from comms.comms import Channel
# objects
from objects.objects import DefaultObject, DefaultCharacter, DefaultRoom, DefaultExit
# utils
from utils.search import *
from utils.create import *
from scripts.tickerhandler import TICKER_HANDLER as tickerhandler
from utils import logger
from utils import utils
@ -67,25 +130,7 @@ if False:
from utils import ansi
from utils.spawner import spawn
######################################################################
# API containers and helper functions
######################################################################
def help(header=False):
"""
Main Evennia API.
ev.help() views API contents
ev.help(True) or ev.README shows module instructions
See www.evennia.com for the full documentation.
"""
if header:
return __doc__
else:
import ev
names = [str(var) for var in ev.__dict__ if not var.startswith('_')]
return ", ".join(names)
# API containers
class _EvContainer(object):
"""

View file

@ -1814,7 +1814,7 @@ class CmdExamine(ObjManipCommand):
obj_name = objdef['name']
obj_attrs = objdef['attrs']
self.player_mode = utils.inherits_from(caller, "evennia.players.player.Player") or \
self.player_mode = utils.inherits_from(caller, "evennia.players.players.Player") or \
"player" in self.switches or obj_name.startswith('*')
if self.player_mode:
try:

View file

@ -26,6 +26,7 @@ from evennia.commands.default.muxcommand import MuxPlayerCommand
from evennia.utils import utils, create, search, prettytable
from settings import MAX_NR_CHARACTERS, MULTISESSION_MODE
# limit symbol import for API
__all__ = ("CmdOOCLook", "CmdIC", "CmdOOC", "CmdPassword", "CmdQuit",
"CmdCharCreate", "CmdEncoding", "CmdSessions", "CmdWho",

View file

@ -17,7 +17,7 @@ from django.conf import settings
from django.utils.unittest import TestCase
from evennia.server.serversession import ServerSession
from evennia.objects.objects import DefaultObject, DefaultCharacter
from evennia.players.player import DefaultPlayer
from evennia.players.players import DefaultPlayer
from evennia.utils import create, ansi
from evennia.server.sessionhandler import SESSIONS

View file

@ -5,7 +5,7 @@ Player that are controlled by the server.
"""
from django.conf import settings
from evennia.players.player import DefaultPlayer
from evennia.players.players import DefaultPlayer
from evennia.scripts.scripts import Script
from evennia.commands.command import Command
from evennia.commands.cmdset import CmdSet

View file

@ -663,7 +663,7 @@ class DefaultPlayer(PlayerDB):
pass
class Guest(DefaultPlayer):
class DefaultGuest(DefaultPlayer):
"""
This class is used for guest logins. Unlike Players, Guests and their
characters are deleted after disconnection.
@ -681,7 +681,7 @@ class Guest(DefaultPlayer):
A Guest's characters aren't meant to linger on the server. When a
Guest disconnects, we remove its character.
"""
super(Guest, self).at_disconnect()
super(DefaultGuest, self).at_disconnect()
characters = self.db._playable_characters
for character in filter(None, characters):
character.delete()
@ -690,7 +690,7 @@ class Guest(DefaultPlayer):
"""
We repeat at_disconnect() here just to be on the safe side.
"""
super(Guest, self).at_server_shutdown()
super(DefaultGuest, self).at_server_shutdown()
characters = self.db._playable_characters
for character in filter(None, characters):
character.delete()
@ -700,5 +700,5 @@ class Guest(DefaultPlayer):
Guests aren't meant to linger on the server, either. We need to wait
until after the Guest disconnects to delete it, though.
"""
super(Guest, self).at_post_disconnect()
super(DefaultGuest, self).at_post_disconnect()
self.delete()

View file

@ -280,17 +280,17 @@ PLAYER_TYPECLASS_PATHS = ["typeclasses", "contrib"]
CHANNEL_TYPECLASS_PATHS = ["typeclasses", "contrib"]
# Typeclass for player objects (linked to a character) (fallback)
BASE_PLAYER_TYPECLASS = "typeclasses.player.Player"
BASE_PLAYER_TYPECLASS = "typeclasses.players.Player"
# Typeclass and base for all objects (fallback)
BASE_OBJECT_TYPECLASS = "typeclasses.object.Object"
BASE_OBJECT_TYPECLASS = "typeclasses.objects.Object"
# Typeclass for character objects linked to a player (fallback)
BASE_CHARACTER_TYPECLASS = "typeclasses.character.Character"
BASE_CHARACTER_TYPECLASS = "typeclasses.characters.Character"
# Typeclass for rooms (fallback)
BASE_ROOM_TYPECLASS = "typeclasses.room.Room"
BASE_ROOM_TYPECLASS = "typeclasses.rooms.Room"
# Typeclass for Exit objects (fallback).
BASE_EXIT_TYPECLASS = "typeclasses.exit.Exit"
BASE_EXIT_TYPECLASS = "typeclasses.exits.Exit"
# Typeclass for Channel (fallback).
BASE_CHANNEL_TYPECLASS = "typeclasses.channel.Channel"
BASE_CHANNEL_TYPECLASS = "typeclasses.channels.Channel"
# Typeclass for Scripts (fallback). You usually don't need to change this
# but create custom variations of scripts on a per-case basis instead.
BASE_SCRIPT_TYPECLASS = "typeclasses.scripts.Script"
@ -399,7 +399,7 @@ CLIENT_DEFAULT_HEIGHT = 45 # telnet standard is 24 but does anyone use such
# This enables guest logins, by default via "connect guest"
GUEST_ENABLED = False
# Typeclass for guest player objects (linked to a character)
BASE_GUEST_TYPECLASS = "typeclasses.player.Guest"
BASE_GUEST_TYPECLASS = "typeclasses.players.Guest"
# The permission given to guests
PERMISSION_GUEST_DEFAULT = "Guests"
# The default home location used for guests.

View file

@ -174,10 +174,11 @@ channels = search_channels
# category - limit the search to a particular help topic
# """
search_help_entry = HelpEntry.objects.search_help
search_help_entries = search_help_entry
help_entry_search = search_help_entry
help_entries = search_help_entries
search_help = HelpEntry.objects.search_help
search_help_entry = search_help
search_help_entries = search_help
help_entry_search = search_help
help_entries = search_help
# Locate Attributes

View file

@ -6,10 +6,23 @@ Player object. A Player is what chats on default channels but has no
other in-game-world existance. Rather the Player puppets Objects (such
as Characters) in order to actually participate in the game world.
Guest
Guest players are simple low-level accounts that are created/deleted
on the fly and allows users to test the game without the committment
of a full registration. Guest accounts are deactivated by default; to
activate them, add the following line to your settings file:
GUEST_ENABLED = True
You will also need to modify the connection screen to reflect the
possibility to connect with a guest account. The setting file accepts
several more options for customizing the Guest account system.
"""
from evennia import DefaultPlayer
from evennia import DefaultPlayer, DefaultGuest
class Player(DefaultPlayer):
"""
@ -79,3 +92,11 @@ class Player(DefaultPlayer):
"""
pass
class Guest(DefaultGuest):
"""
This class is used for guest logins. Unlike Players, Guests and their
characters are deleted after disconnection.
"""
pass