Evennia 图解指南

本文旨在通过图解方式展示 Evennia 服务器的核心架构与运行机制,帮助您理解各组件如何协同工作。

两大核心组件

Evennia门户与服务器

图中展示的是您从我们这里下载的 Evennia 核心部分,它本身不会直接运行游戏。接下来我们将创建缺失的”拼图块”,但首先让我们了解现有组件。

Evennia 由两个独立进程组成:Portal 和 Server

  • Portal 管理所有外部连接(Telnet/WebSocket/SSH等),不涉及数据库或游戏状态。其与 Server 的通信采用协议无关格式,使得 Server 可以完全重启而不断开用户连接。

  • Server 是核心游戏引擎,采用异步框架 Twisted,负责游戏世界和数据库的所有逻辑。

  • Web服务器 与 Server 同进程运行,提供游戏网站服务。

初始化游戏目录

创建游戏目录

安装Evennia 后,使用 evennia 命令创建游戏目录(如 mygame)。这是图中深灰色部分,也是您实现游戏梦想的地方!

初始化过程会:

  1. mygame/ 生成Python模板文件

  2. 完成所有配置链接

  3. 创建数据库后即可启动服务器

启动后可通过 telnet localhost:4000 或浏览器访问 http://localhost:4001 连接游戏。

数据库系统

数据库结构

Evennia 使用 Django 实现全持久化数据库。如图示:

  • ObjectDB Python类对应数据库表

  • 类属性对应表的列(如名称字段)

  • 每行数据代表一个游戏实体(如角色/物品)

  • db_typeclass_path 字段指向具体的子类,这是 Typeclass系统 的核心

图中示例显示 Trigger 位于 Dungeon 场景中,携带十字弩 Old Betsy

从数据库到Python对象

Python类继承

简化版的Python类继承结构:

  • Objects 代表游戏内可见实体

  • 子类实现具体功能(如 Crossbow 特有逻辑)

  • 新建实体时自动创建数据库记录

  • 查询数据库返回的是可操作的Python对象

属性系统

属性存储

Attribute 系统实现灵活数据存储:

  • 每个属性包含键/值对

  • 通过外键关联到 ObjectDB

  • 支持序列化任意Python数据(如图中的技能字典)

  • 可直接通过 Trigger 对象访问”strength”等属性

游戏控制机制

会话与账号

多会话控制

玩家通过 Sessions 连接游戏:

  • Account 存储账号信息(如密码)

  • 单个账号可通过多客户端同时连接(不同 Session

  • 支持同时操控多个游戏角色(如 TriggerSir Hiss

  • 可通过 连接风格 配置控制权限

命令系统

命令结构

Commands 是玩家与游戏交互的核心方式:

  • 每个命令处理输入解析与执行逻辑

  • 可通过继承实现通用解析(如图中 DIKUCommand

  • 示例:look/get/emote 等指令

命令集

角色命令集 场景命令集

命令通过 CommandSet 组织:

  • 可附加到任意游戏实体

  • 场景中的命令可覆盖角色自带命令(如图中不同颜色命令)

  • 实现动态游戏机制(如黑暗场景中修改 look 行为)

命令集合并

命令合并

支持动态合并多个命令集:

  • 采用类似 集合论 的合并逻辑

  • 优先级可自定义配置

  • 非破坏性合并(离开场景后恢复原命令集)

  • 支持复杂状态叠加(如黑暗+战斗+醉酒状态)

探索更多

本文仅展示部分核心功能,完整内容请参考: