快速入门指南
本文档将指导进行 CCXC Engine 系统的初始配置和基本使用,主要面向管理后台的功能模块介绍。
概述
CCXC Engine 提供 Puzzle Hunt 平台的信息发布、用户组织、题目开发、比赛流程等功能。
项目配置
CCXC Engine 采用单项目架构,即每个独立运行的 CCXC Engine 实例中运行一个 Puzzle Hunt 活动。
在一切开始之前,我们必须配置基本信息来初始化项目。
项目信息设置
进入管理后台,你将看到管理后台主界面。
在左侧的导航栏中选择【高级】 -> 【系统设置】。你将看到以下界面:
修改这个界面上你能看到的所有内容!
站内文章管理
现在主站的“关于”还是空的,接下来我们添加这些文章。
在左侧的导航栏选择【系统】 -> 【站内文章】进入文章管理界面。你可以对站内文章进行管理。
初始化的时候这里应该是空空如也
必须创建以下三篇文章
文章路径 | 可见性 | 功能说明 |
---|---|---|
about | 公开 | 网站"关于"页面,介绍项目背景和信息 |
userterms | 隐藏 | 用户注册时的服务条款页面 |
privacypolicy | 隐藏 | 用户注册时的隐私政策页面 |
如下图所示,你可以使用 Markdown 编写文章内容。在 隐藏此文章 前打上勾,这篇文章就不会出现在左侧导航栏。
提示
这一步完成后,你就可以开放你的主站,让选手注册并报名。
成员管理
出一个 Puzzle Hunt 是个庞大的工程,我们需要团队合作!
在左侧的导航栏选择【高级】 -> 【成员管理】。可以看到团队成员界面。
这个界面里至少应该已经有你自己了。
你可以在这里将用户设置为出题组成员或是管理员。
无论是出题组成员还是管理员都能进入管理后台,但是只有管理员可以操作“高级”菜单中的设置或指令。
出题
Puzzle Hunt 一定要有题目
添加题目分区
题目一定要有分区
这倒不是 Puzzle Hunt 的规矩,而是 CCXC Engine 是这么设定的。
首先,我们通过【出题】 -> 【题目分区】来创建题目分区。
希望你看到这里时已经想好了你的 Puzzle Hunt 应该怎么分区。
对于那些正常的,有小题和 Meta (也可以没有 Meta 或者全是 Meta)构成的分区,我们称之为“普通分区”。你只需要输入分区名称。
有一些特殊情况,你可能需要隐藏分区,例如:
- 解锁完 1~6 区了,接下来还剩 Meta meta 和 Final meta,但是这俩也不好放一个区,也不好放两个区啊。
- 你可以建一个隐藏分区来放这两道题
- 第三区有特殊机制,除了普通的小题还有特殊的小题,但是只有普通的小题才会触发解锁 Meta 或者下个区。
- 你可以建一个隐藏分区来放特殊的小题。(之后你需要二次开发让系统按照特殊机制同时返回普通小题和特殊小题)
- 第四区有特殊机制,“哇,我的每道小题都被炸碎啦!”你会获得一些空白的小题(它们是真正的小题用来提交答案推进进度)和一堆碎片(它们不应该影响进度,也不需要回答)
- 你可以建一个隐藏分区来放碎片。(之后你需要二次开发,提供一个独立的 API 让前端获取碎片列表。当然,你也可以使用“题目文章”功能来实现这些碎片)
注意
分区简介会通过 API 返回给前端,虽然现在的谜题前端没有展示,但是熟练掌握查看 DevTools 的选手可能会看到。
所以填写简介内容时要慎重!
确定解锁参数
进入 【出题】 -> 【基本设置】
上方是信用点相关,下方是解锁相关
默认解锁流程中每个区包含三个参数:
- 做题宽度:这个分区解锁的时候,有多少题默认解锁
- 解锁 Meta 题目数量:这个分区的题目答对多少题时,会解锁 Meta
- 解锁下一分区题目数量:这个分区的题目答对多少题时,会解锁下一分区
所有的非隐藏分区都会按顺序解锁。全部的分区 Meta 回答正确后,会解锁 Final meta。
修改完数值要点“更新数值”按钮才能生效!
提示
如果以上流程不满足你的需求,你需要进行二次开发来自定义解锁流程。
编写题目
终于要开始编写题目了。进入 【出题】 -> 【题目管理】。
点击“新建题目”就能看到题目编辑器了。
关于题目类型
题目分为五种类型,每道题目必须符合其中一种:
- 小题
- 分区 Meta
- Meta Meta
- Final Meta
- 不计分题目
其中,我们将 Meta Meta 定义为弱于分区 Meta 但是高于 Final Meta 的一档。但是具体解锁逻辑和动作需要二次开发时在代码中编写。
关于内容类型
每道题目的形式必须是以下几种类型之一:
- 图片
- HTML
- VUE SFC模块
- 独立编译的VUE SFC模块(通过上传)
切换不同的内容类型时,编辑器也会切换到对应的形式。
其中,HTML 类型的题目会提供一个 HTML 编辑器,可以自由编写任意 HTML 代码。但是 <script>
标签不支持 src
参数。
VUE SFC模块 类型的题目会有 HTML
和 脚本
两部分。其中 HTML
部分中填写 VUE 单文件组件中的 <template>
和 <style>
两部分(需要有标签);脚本
部分中填写 <script>
部分(不需要 <script></script>
标签)。并且还需遵循特定格式。详情查看:VUE 题目
独立编译的VUE SFC模块 类型的题目需要编译为指定的格式。你可以通过 CCXC Engine 谜题开发模板 进行编写。详情查看:上传题目模块
我应如何选择题目形式
题目形式 | 适合何种题目 |
---|---|
图片 | 题目只包含一张图,或者什么都没有 |
HTML | 题目内容是静态富文本 |
VUE SFC模块 | 题目内容存在交互,但是不需要引入第三方模块 |
独立编译的VUE SFC模块 | 题目内容存在交互,并且需要引入第三方模块 |
关于Flavor text
在“题目描述”中,可以填写 Markdown 格式的文档。
虽然一般来说,这里是填 Flavor text 的地方。但是在 Markdown 里直接写 HTML,也能正确渲染。所以作为题目正文也未尝不可。
关于答案
题目一定要有答案!
如果你对上面这句话不认同,请查看 高级判题脚本
编写剧情
题目文章的主要功能是用来编写剧情。通过 【出题】 -> 【题目文章】你可以看到这个管理界面。
题目文章的不同之处在于:它带有进度锁。队伍必须达到对应的进度,才能读取对应的文章。
默认模式下的题目文章关键字,以及对应的进度锁:
你可以直接创建这些关键字的文章,它们会自动起作用。
关键字 | 解锁条件 | 说明 |
---|---|---|
g{pgid}-prologue | {pgid} 分区已解锁 | 分区前的提示剧情 |
g{pgid}-end | {pgid} 分区 Meta 已完成 | 分区完成后的剧情 |
main-open | 1 区 Meta 已完成 | 在 1 区为新手区时展示正篇开场剧情 |
finalend | Final meta 已完成 | 当 Final meta 解出时自动跳转,用于展示结局剧情 |
其中,pgid
是分区编号,例如:g1-prologue
, g5-end
题目文章可以直接用 Markdown 编写。也同样具有 VUE 模式,详情查看:题目文章
你可以建立任意的题目文章,但是要让它们起作用,必须进行二次开发才行。
比赛前
内测
你可以招募内测组,赋予内测组权限后,这些用户将被允许先于比赛开启进入谜题前端,看到题目。
内测组的组建方法:
- 召集内测组成员,让他们各自注册帐号,并完成组队。
- 在【系统】 -> 【用户管理】中将内测组的成员都“设为内测”。在页面上以用户角色标签右侧的皇冠图案展示。如下图:
- 让内测组成员重新登录系统,他们会在主页上看到一个写着 “emmmmmm” 的按钮,点击即可进入谜题前端,开始内测。
什么,没看见?再仔细找找?
提示
一般来说,你应该将自己和出题组全员都设置为内测组。这样你就可以一边编写题目,一边查看题目的渲染效果。
公告
通过【系统】 -> 【公告】进入公告管理。
- 你可以用 Markdown 编写公告。
- 比赛开始后,新公告会在谜题前端下方的工具栏上提示。
提示
我们建议你在开赛前发出第一篇公告。
清空内测的痕迹
内测时候可能系统已经产生了许多内测组进度,首杀记录等数据。我们强烈建议你在正式开赛前清空它们。
具体来说你需要清空下面几个表:answer_log
, message
, oracle
, progress
, temp_anno
这些操作无法在管理面板上进行,你需要亲自去数据库操作。
比赛中
- 也许祈祷开赛时服务器不要崩溃才是你必须做的事?
比赛中你需要时刻关注比赛进度,查看用户提交的答案记录。回复选手发送的站内信提问,以及回复人工提示请求。
这些都可以在导航栏的【比赛】区域中找到。
赛后
循环使用
你可能希望清空本次比赛的数据,然后用于下一届使用。
警告
在你进行任何清空数据库操作时,都要记得先备份!
如果你希望用户应该重新注册,那么你可以直接删除数据库,然后重启后端服务器,数据库会自动重建出一个空白的来。
如果你希望保留用户:
- 清空除
user
以外的所有表 - 将
user
表中roleid
为2
或3
的都修改成1
- 进入 【高级】 -> 【成员管理】 将管理员和出题组改成下一届的成员。
- 进入 【高级】 -> 【清理缓存】,点击“全部”按钮。