角色连接方式¶
> login Foobar password123
Evennia 支持多种方式让玩家连接到游戏。这使得 Evennia 可以模拟其他服务器的行为,或者为自定义解决方案打开可能性。
更改登录界面¶
可以通过修改 mygame/server/conf/connection_screens.py
并重新加载来实现。如果你不喜欢默认的登录界面,可以参考以下两个贡献模块:
自定义登录命令¶
当玩家连接到游戏时,会运行 CMD_LOGINSTART
系统命令。默认情况下,这是 CmdUnconnectedLook,它显示欢迎界面。其他命令在 UnloggedinCmdSet 中定义了登录体验。因此,如果你想自定义它,只需替换或移除这些命令。
# 在 mygame/commands/mylogin_commands.py 中
from evennia import syscmdkeys, default_cmds, Command
class MyUnloggedinLook(Command):
# 这将成为连接时调用的第一个命令
key = syscmdkeys.CMD_LOGINSTART
def func(self):
# ...
接下来,将其添加到 UnloggedinCmdSet
的正确位置:
# 在 mygame/commands/default_cmdsets.py 中
from commands.mylogin_commands import MyUnloggedinLook
# ...
class UnloggedinCmdSet(default_cmds.UnloggedinCmdSet):
# ...
def at_cmdset_creation(self):
super().at_cmdset_creation
self.add(MyUnloggedinLook())
reload
后,你的替代命令将被使用。查看默认命令,你可以更改有关登录的一切。
多会话模式和多角色游戏¶
可以同时连接到给定账户的会话数量及其工作方式由 MULTISESSION_MODE
设置决定:
MULTISESSION_MODE=0
:每个账户一个会话。当用新会话连接时,旧会话将断开。这是默认模式,模拟许多经典 mud 代码库。┌──────┐ │ ┌───────┐ ┌───────┐ ┌─────────┐ │Client├─┼──►│Session├───►│Account├──►│Character│ └──────┘ │ └───────┘ └───────┘ └─────────┘
MULTISESSION_MODE=1
:每个账户多个会话,来自每个会话的输入/输出被视为相同。对于玩家来说,这意味着他们可以从多个客户端连接到游戏,并在所有客户端中看到相同的输出。在一个客户端中给出的命令的结果(即,通过一个会话)将返回给所有连接的会话/客户端,没有区别。│ ┌──────┐ │ ┌───────┐ │Client├─┼──►│Session├──┐ └──────┘ │ └───────┘ └──►┌───────┐ ┌─────────┐ │ │Account├──►│Character│ ┌──────┐ │ ┌───────┐ ┌──►└───────┘ └─────────┘ │Client├─┼──►│Session├──┘ └──────┘ │ └───────┘ │
MULTISESSION_MODE=2
:每个账户多个会话,每个会话一个角色。在此模式下,控制一个对象/角色将仅将控制链接回进行控制的特定会话。也就是说,来自该会话的输入将使用该对象/角色的 CmdSet,传出的消息(例如look
的结果)将仅传回给进行控制的会话。如果另一个会话尝试控制相同的角色,旧会话将自动解除控制。从玩家的角度来看,这意味着他们可以打开单独的游戏客户端,并使用一个游戏账户在每个客户端中玩不同的角色。│ ┌───────┐ ┌──────┐ │ ┌───────┐ │Account│ ┌─────────┐ │Client├─┼──►│Session├──┐ │ │ ┌►│Character│ └──────┘ │ └───────┘ └──┼───────┼──┘ └─────────┘ │ │ │ ┌──────┐ │ ┌───────┐ ┌──┼───────┼──┐ ┌─────────┐ │Client├─┼──►│Session├──┘ │ │ └►│Character│ └──────┘ │ └───────┘ │ │ └─────────┘ │ └───────┘
MULTISESSION_MODE=3
:每个账户和角色多个会话。这是完整的多控制模式,多个会话不仅可以连接到玩家账户,还可以同时控制单个角色。从用户的角度来看,这意味着可以打开多个客户端窗口,有些用于控制不同的角色,有些则像模式 1 一样共享角色的输入/输出。此模式的其他工作方式与模式 2 相同。│ ┌───────┐ ┌──────┐ │ ┌───────┐ │Account│ ┌─────────┐ │Client├─┼──►│Session├──┐ │ │ ┌►│Character│ └──────┘ │ └───────┘ └──┼───────┼──┘ └─────────┘ │ │ │ ┌──────┐ │ ┌───────┐ ┌──┼───────┼──┐ │Client├─┼──►│Session├──┘ │ │ └►┌─────────┐ └──────┘ │ └───────┘ │ │ │Character│ │ │ │ ┌►└─────────┘ ┌──────┐ │ ┌───────┐ ┌──┼───────┼──┘ ▼ │Client├─┼──►│Session├──┘ │ │ └──────┘ │ └───────┘ └───────┘ │
请注意,即使多个会话控制一个角色,该角色也只有一个实例。
模式 0
是默认的,模拟了许多传统代码库的工作方式,特别是在 DIKU 世界中。更高模式的等效性通常被“黑客”用来允许玩家拥有多个角色。
MAX_NR_SIMULTANEOUS_PUPPETS = 1
此设置限制了你的账户可以同时控制的不同角色的数量。这用于限制真正的多角色游戏。除非 MULTISESSION_MODE
也设置为 >1
,否则设置为高于 1 的值没有意义。设置为 None
表示没有限制。
角色创建和自动控制¶
当玩家首次创建账户时,Evennia 会自动创建一个同名的 Character
控制对象。当玩家登录时,他们将自动控制此角色。此默认设置将账户-角色分离隐藏起来,并立即将玩家放入游戏中。此默认行为类似于许多传统 MU 服务器的工作方式。
要控制此行为,你需要调整设置。以下是默认设置:
AUTO_CREATE_CHARACTER_WITH_ACCOUNT = True
AUTO_PUPPET_ON_LOGIN = True
MAX_NR_CHARACTERS = 1
有一个默认的 charcreate
命令。它遵循 MAX_NR_CHARACTERS
;如果你创建自己的角色创建命令,也应遵循这一点。至少需要设置为 1
。设置为 None
表示没有限制。有关如何制作更高级角色生成系统的想法,请参阅 初学者教程。
如果你选择不自动创建角色,则需要提供角色生成,并且最初将没有(初始)角色进行控制。在这两种设置中,登录后你将最初进入 ooc
模式。这是放置角色生成屏幕/菜单的好地方(例如,可以替换 CmdOOCLook 以触发正常的 ooc-look 之外的内容)。
一旦创建了角色,如果设置了自动控制,则每次登录时将自动控制你最近控制的角色。如果未设置,你将始终从 OOC 开始(并应能够选择要控制的角色)。