批处理器


构造游戏世界需要大量的工作,初期尤为如此。需要建立房间、写描述信息、定义物体并把它们放在合适的地方。对于多数传统的MUD游戏,你必须通过telnet在线将命令一行行地写进去。

Evennia将主要的编码工作移到了外部的Python模块中,已经减少了大量此类输入工作。如果能将部分或全部的建造工作也移到外部的话,对建造是很有帮助的。因此我们向你介绍Evennia的批处理器(有两个)。批处理器可以让游戏管理员在完全脱机的情况下使用批处理格式在普通文本文件(批处理文件)中构建游戏,当你全都准备好了,再用处理器将它一次性全部读入Evennia(并存入数据库)就大功告成了。

当然如果你喜欢的话,你依然能以完全在线的方式建造 —— 这在学习或构建小项目时是最简便的,但对于大型的建造工作,使用批处理器的优点很多:
  • 没有便捷的、现代化的文本编辑器很难完成工作;相对于传统mud的按行输入,你可以有更好的全局观和更多的功能。另外,不小心错按回车也不会立即将东西提交到数据库中。
  • 你可以对批处理文件运行外部的拼写检查器。对于其中一个批量处理器(Python代码批处理器),在输入Evennia之前,你还可以对你的文件运行外部的调试器和代码分析器以查找问题。
  • 批处理文件是你工作的记录(只要你保存他们)。如果你想要重新开始,他们可以成为新的起点,能够迅速重建你的世界。
  • 如果你是Evennia的开发者,使用批处理文件可以在重置数据库后快速搭建起测试游戏。
  • 如果你要将全部或部分游戏世界交给其他人,批处理文件可以派上用处。

Evennia有两种批处理器,命令批处理器和代码处批理器。第一个较为简单,它的优势是你不需要懂任何编程,基本上只要在文本文件中列出游戏命令就行了。另一方面,代码批处理器更强大但也更复杂 —— 它可以让你使用丰富的Python代码来调用Evennia的API以编写你的世界。

如果你打算在批处理文件中使用国际字符,最好阅读以下关于文件编码的内容。


关于文件编码的注意事项

如前面提到的,两种批处理器都使用文本文件作为输入,然后依顺序处理它们。如果你完全使用标准ASCII字符集(基本上是普通的英文字符),你就不必费心看这部分了。

有许多语言使用的字符会超出简单的ASCII码表。常见的例子有各种引号、变音符号,以及如希腊或西里尔字母之类的完全不同的符号。

首先我们应该知道Evennia本身就能很好地处理国际字符。它(和Django)在内部使用unicode字符串。

问题是,在读取批处理文件之类的文本文件时,我们需要知道如何将存储在其中的字节数据转换为unicode。因此,我们需要知道文件存储数据的编码(映射)。世界各地使用的字节编码有很多种,它们的名字难以理解,如Latin-1、ISO-8859-3或ARMSCII-8,这只是其中的几个例子。问题是,只看文件是无法知道它是用哪种编码保存的(那只是一串字节!)。你必须明白这点。

通过以上说明应该可以了解,Evennia在加载批处理文件时无法猜出文件的编码,这就必须指定它。可以这么说,文本编辑器和Evennia必须使用同一种“语言”。 Evennia会首先尝试UTF-8编码,但你可以通过设定 settings 文件中 ENCODINGS 列表来指定Evennia尝试的编码次序。 Evennia会使用列表中第一个不引发错误的编码,如果全都无法工作,服务器会放弃并返回一个错误消息。

通常,你可以更改文本编辑器的编码(这取决于你的文本编辑器),否则你需要将编辑器的编码添加到Evennia的 ENCODINGS 列表中。如果你无法确定编码,你可以在文本编辑器中用很多非ASCII字符写一个测试文件,然后导入,看看它是否能像预想的一样工作。

在条目“文本编码”中可以找到更多与编码相关的帮助信息,还可以查询维基百科的这篇文章。

代码批处理器要注意:Evennia能分析你文件中的特殊字符并不代表在Python允许使用它们。Python语法只允许在字符串中出现国际字符,在源代码的其他所有地方都只允许使用ASCII码字符。


(原文:https://github.com/Evennia/evennia/wiki/Batch Processors    翻译:卢铱俊)