世界教程介绍


世界教程是一个虽小但可以正常运作的MUD风格的游戏世界,可以通过拆解它来学习Evennia。游戏包含一个单人任务,你可以探索20个房间,寻找一把神秘武器的下落。

源码带有丰富的文档,你可以在 contrib/tutorial_world 中找到全部内容。

世界教程展示了以下一些特点:
  • 教程命令,在每间房间和一些特殊对象上有“幕后”帮助
  • 隐藏的出口
  • 带有多个自定义交互功能的对象
  • 大面积的房间
  • 具有气象的房间
  • 需要光源的黑暗房间
  • 解谜物体
  • 多房间的谜题
  • 攻击性小怪,具有游荡、追踪及战斗状态AI引擎
  • 武器,也可被小怪使用
  • 带有攻击、防御命令的简单战斗系统
  • 对象生成器
  • 陷阱传送房


安装

世界教程由 contrib/tutorial_world/ 中的几个模块构成,包括自定义类型类房间和物体、相关命令和一些使物体动作起来的自定义脚本

这些可复用的部件通过名为 build.ev 的批处理脚本组合成一个可正常运作的游戏区域(对这样一个小游戏来说,“世界”这个字也许是太大了)。安装教程需要以超级用户(用户#1)登录到服务器,然后运行:
@batchcommand contrib.tutorial_world.build
世界会建立起来(这可能需要一段时间,即使系统看上去像是卡死了也不要重新运行这条命令)。完成后你会回到虚空,在那里有一个名为“教程”的新出口。

另一种方法是
@batchcommand/interactive contrib.tutorial_world.build
使用 /interactive 参数可以让你按自己的步调一步步地执行建造操作,这样就可以看清具体发生了些什么。

想要以“正确”的方式玩教程就不能使用你的超级用户身份。这是因为许多游戏系统会忽略超级用户的存在,因而不会正常工作。请你注销然后重新登入,在登录界面创建一个新的非超级用户角色来玩游戏。当然,如果你喜欢的话以后你还可以以超级用户的身份登入来研究幕后隐藏了些什么东西。


玩游戏

要融入这个微型任务的意境,你要想象自己是一个追寻荣誉与财富的冒险家。你听说了海岸边一座城堡废墟的传闻:在城堡深处有一位武勇的公主与她强大的魔法武器埋葬在了一起 —— 如果这是真的,将会有价值丰厚的回报。当然啦,这是一次无法抗拒的冒险机会!

你到达海岸时雷雨正在肆虐,狂风和雨点狂啸着打在你的脸上,你身处荒原与大海的交界处,站在高高的岩石海岸上...
  • 观察每一件东西。
  • 有些对象的交互方式不止一种,使用普通的 help 命令来了解哪些命令可在任何时间使用。(使用 tutorial 命令可以了解幕后的情形)。
  • 想要战斗,你需要先找到武器。
  • slash(砍)是普通攻击。
  • stab(刺)会造成更多的伤害但命中率较低。
  • defend(防守)会降低敌人下次攻击对你造成伤害的几率。
  • 如果你觉得可能在战斗中被打死,你可以逃走,虽然可能会被追杀。
  • 被击败也是成长的一部分...


卸载

卸载世界教程基本上就是删除它包含的所有房间和对象。首先,离开教程区域。
@find tut#01
@find tut#17
这会定位 build.ev 所创建的第一个和最后一个房间 —— “介绍”和“出口”。如果是正常安装,在这两个数字之间创建的所有东西都应该是属于教程的。记住他们的数据库号(dbref),假定是5和80,接下来我们只需要删除该范围内的所有对象就行了:
@del 5-80
你会看到一些错误信息,因为有些对象已被自动删除了,当删除命令执行到它们时就无法找到它们,这没什么问题。命令执行完的时候你应该已经完全删除了教程。


注意

在阅读和学习代码时请记住,世界教程的设计有一个非常特别的要求:要能够轻松安装,而且不会永久性地影响服务器其余部分。因此,它想方设法只使用临时性的解决方案,而且可以对自身进行清理。不能对基础类型类做永久修改使得教程中处理事物的方式有时会比真正所需的要复杂。

在你编写自己游戏的时候当然不用考虑这些 —— 你只需要定义基础类型类,让它们按你规划的方式一直工作就可以了。