批处理器¶
构建游戏世界是一项巨大的工作,尤其是在开始阶段。必须创建房间,编写描述,详细说明对象并将其放置在合适的位置。在许多传统的 MUD 设置中,您必须在线上逐行完成所有这些操作,通过 Telnet 会话进行。
Evennia 已经通过将主要编码工作转移到外部 Python 模块上,减少了很多工作。但如果能够在外部执行一些或全部构建工作,那将会有所帮助。于是,Evennia 的 批处理器 应运而生(目前有两个)。这些处理器允许您作为游戏管理员,在正常文本文件(批处理文件)中完全离线构建游戏,处理器能够理解这些文件。然后,当您准备好时,可以使用处理器将其全部读取到 Evennia(并导入数据库中)一次性完成。
当然,如果您愿意,仍然可以完全在线构建——对于学习和小型构建项目来说,这无疑是最简单的方法。但是,对于重大的构建工作,使用批量处理器的优势是显而易见的:
现代桌面文本编辑器的舒适性难以超越;与传统 MUD 的行输入相比,您可以获得更好的概述及更多功能。此外,意外按下 Return 键不会立即将内容提交到数据库。
您可以在批处理文件上运行外部拼写检查器。对于其中一个批处理器(处理 Python 代码的那个),您还可以在文件上运行外部调试程序和代码分析器,以在导入到 Evennia 之前捕获问题。
批处理文件(只要保留它们)是您工作的记录。如果您决定重新构建世界,它们将成为一个自然的起点。
如果您是 Evennia 开发者,使用批处理文件是重置数据库后快速设置测试游戏的快捷方式。
如果您决定将全部或部分世界分发给其他人,批处理文件也可能派上用场。
存在两个批处理器,批量-命令 处理器和批量-代码 处理器。第一个是两者中较简单的一个。它不需要任何编程知识——您只需在文本文件中列出游戏内命令。另一方面,代码处理器功能更加强大,但也更复杂——它允许您使用 Evennia 的 API 用完整的 Python 代码来编码您的世界。
关于文件编码的说明¶
正如前面提到的,两个处理器都将文本文件作为输入,然后进行处理。只要您坚持使用标准的 ASCII 字符集(基本上是普通的英语字符),您通常就不必太担心此部分。
然而,许多语言使用一些超出简单 ASCII
表的字符。常见的例子有各种撇号和变音符号,以及希腊字母或西里尔字母等完全不同的符号。
首先,我们需要明确的是,Evennia 本身很好地处理国际字符。它(和 Django)在内部使用 unicode 字符串。
问题在于,当读取像批处理文件这样的文本文件时,我们需要知道如何将存储在其中的字节数据解码为通用 Unicode。这意味着我们需要一个 编码(映射),以了解文件存储其数据的方式。世界上有许多许多字节编码,名称各异,比如 Latin-1
、ISO-8859-3
或 ARMSCII-8
,仅举几个例子。问题在于,仅通过查看文件几乎无法确定使用了哪种编码(这只是一堆字节!)。您必须 知道。
结合这个小介绍,应该清楚的是,Evennia 无法猜测,但必须在尝试加载批处理文件时 假设 编码。文本编辑器和 Evennia 必须使用同一种“语言”。Evennia 默认首先会尝试国际 UTF-8
编码,但您可以通过自定义设置文件中的 ENCODINGS
列表,让 Evennia 尝试不同的编码序列。Evennia 将使用列表中第一个未引发任何错误的编码。只有当没有编码可用时,服务器才会放弃并返回错误信息。
您通常可以更改文本编辑器的编码(这取决于您的编辑器),否则您需要将编辑器的编码添加到 Evennia 的 ENCODINGS
列表中。如果您不确定,请使用您选择的编辑器编写一个包含许多非 ASCII 字母的测试文件,然后导入以确保它按预期工作。
有关编码的更多帮助,请参见条目 文本编码,以及维基百科文章 此处。
批处理代码处理器的脚注:仅仅因为 Evennia 可以解析您的文件和您花哨的特殊字符,并不意味着 Python 允许它们的使用。Python 语法只能在 字符串 内允许国际字符,而在所有其他源代码中只允许 ASCII
集字符。