CDK 配置
CDK 组统一写在 cdk.yml 中。玩家使用 /lmail cdk [CDK] 兑换,成功后可以发送邮件、发送消息并执行指令。
每个玩家对同一个 CDK 组只能成功兑换一次。固定 CDK 直接使用组 ID;随机 CDK 需要先由管理员生成,再交给玩家兑换。
完整配置
yaml
离渊牛批:
fixed-cdk: true
format: '@@@@@@离@@@@@@渊@@@@@@牛@@@@@@批@@@@@@'
mail:
- 'test'
message:
- '§7CDK 兑换成功!'
command:
- '[console]tell %player_name% 你兑换了离渊牛批 CDK'配置项
| 配置项 | 类型 | 说明 |
|---|---|---|
| 顶层节点 | 字符串 | CDK 组 ID。固定 CDK 使用该值作为兑换码,随机 CDK 使用该值区分生成和兑换记录 |
fixed-cdk | 布尔值 | 是否使用固定 CDK。默认值为 true |
format | 字符串 | 随机 CDK 的生成格式,仅在 fixed-cdk: false 时使用 |
mail | 字符串列表 | 兑换成功后尝试发送的邮件模板 ID,可以配置多个 |
message | 字符串列表 | 兑换成功后发送给玩家的消息,可以配置多行 |
command | 字符串列表 | 兑换成功后执行的指令,可以配置多条 |
CDK 组 ID 会被写入玩家的兑换记录。CDK 组开始使用后,不要随意修改顶层节点,否则插件会将修改后的节点视为新的 CDK 组。
固定 CDK
将 fixed-cdk 设置为 true 后,CDK 组 ID 本身就是兑换码,不需要提前生成。
yaml
新手礼包:
fixed-cdk: true
format: ''
mail:
- 'new-player-gift'
message:
- '&a新手礼包兑换成功。'
command: []上面的固定兑换码为 新手礼包,玩家使用以下指令兑换:
text
/lmail cdk 新手礼包固定 CDK 不记录某个兑换码是否已被其他玩家使用,只检查当前玩家是否兑换过该 CDK 组。因此,不同玩家都可以兑换一次,但同一玩家不能重复兑换。
随机 CDK
将 fixed-cdk 设置为 false 后,需要由管理员生成随机兑换码。
yaml
活动礼包:
fixed-cdk: false
format: 'EVENT-AAAA-!!!!'
mail:
- 'event-gift'
message:
- '&a活动礼包兑换成功。'
command:
- '[console]broadcast %player_name% 兑换了活动礼包'生成指令:
text
/lmail createcdk [CDK组ID] [数量]例如:
text
/lmail createcdk 活动礼包 100[数量] 必须是整数,代码允许的范围为 1 至 10000。该指令只能为 fixed-cdk: false 的组生成兑换码,并且仅允许 OP 执行。
生成时会读取该组已有的随机码并进行查重。随机码数量较多时,生成和玩家兑换都需要更多查询,不建议一次生成或长期保留大量随机 CDK。
格式替换符
| 符号 | 生成内容 |
|---|---|
a | 随机小写英文字母 |
A | 随机大写英文字母 |
@ | 随机小写字母、大写字母或数字 |
! | 随机数字 |
| 其他字符 | 原样保留为固定文本 |
例如:
yaml
format: '@@@-离渊牛批-@@@'可能生成:
text
s2V-离渊牛批-2km格式需要提供足够多的随机位。如果格式能够产生的组合数量过少,而生成数量接近或超过可用组合数量,插件会持续尝试生成未重复的兑换码。
随机 CDK 存储
随机 CDK 的存储位置由 config.yml 中的 mysql.enable 决定。
| 存储模式 | CDK 数据位置 | 使用者记录 |
|---|---|---|
| 本地存储 | plugins/LyMailReload/cdkdata/[CDK组ID].yml | 每个兑换码的值为空时表示未使用,兑换后写入玩家名称 |
| MySQL 存储 | LyMailReload_cdk 数据表 | group 保存组 ID,cdk 保存兑换码,user 保存使用者名称;空字符串表示未使用 |
启用 MySQL 存储时,必须安装 LyMySQLCore,并确保 LyMailReload 成功连接数据库。数据库未连接完成时,相关玩家数据和随机 CDK 功能不会生效,玩家登录也会被阻止。
MySQL 开关需要重启服务器。仅执行 /lmail reload 不会切换已经注册的数据存储监听器。
兑换流程
玩家兑换 CDK 时,插件按以下顺序处理:
- 检查玩家数据是否已经加载。
- 检查
config.yml中的 CDK 兑换冷却。 - 优先匹配所有固定 CDK 组。
- 固定 CDK 未匹配时,再从本地文件或数据库查询随机 CDK。
- 检查玩家是否已经兑换过对应的 CDK 组。
- 随机 CDK 还会检查该兑换码是否已经被其他玩家使用。
- 记录玩家的 CDK 组兑换状态。
- 依次发送
mail、message并执行command。
随机 CDK 成功兑换后,该兑换码会绑定兑换玩家的名称,其他玩家不能再次使用。同一个随机 CDK 组即使生成了多个兑换码,每名玩家也只能使用其中一个。
兑换冷却
兑换冷却在 config.yml 中配置,单位为秒:
yaml
cdk-redeem-cd: 5玩家每次执行 /lmail cdk [CDK] 都会进入冷却,包括无效 CDK、已使用 CDK和已经兑换过的组。冷却期间再次兑换时,会发送 config.yml 中的 message.redeem-cd。
不要把冷却时间设置得过短。随机 CDK 兑换需要查询本地文件或数据库,频繁提交会增加服务器消耗。
邮件奖励
mail 填写邮件模板的 id,可以一次尝试发送多个模板:
yaml
mail:
- '金币礼包'
- '活动道具'兑换时会按列表顺序调用邮件发送功能。出现以下情况时,对应邮件不会进入玩家邮箱:
- 邮件模板 ID 不存在。
- 玩家不满足模板的
condition。 - 模板启用了
only-mail,并且玩家以前已经收到过该模板。 - 玩家数据尚未加载。
CDK 的兑换记录在发送邮件前写入。即使某个邮件模板发送失败,CDK 组仍会被记录为已兑换,随机兑换码也可能已经被标记为已使用,玩家无法依靠同一个组或同一个随机码重新领取。
给 CDK 配置邮件前,应确保模板条件适用于所有目标玩家。需要了解邮件模板字段时,请查看邮件模板配置页面。
兑换消息
message 中的每一项都会在兑换成功后发送给玩家:
yaml
message:
- '&aCDK 兑换成功!'
- '&7奖励已经发送到邮箱。'消息支持 & 颜色代码。配置文件中的 § 颜色符号也会直接保留,但建议统一使用 &,便于编辑。
将其设置为空列表可以不发送额外消息:
yaml
message: []兑换指令
command 中可以配置多条指令:
yaml
command:
- '[console]give %player_name% diamond 1'
- '[op]say %player_name% 完成了 CDK 兑换'
- 'spawn'| 写法 | 执行身份 |
|---|---|
[console]指令 | 由控制台执行 |
[op]指令 | 临时以 OP 身份让兑换玩家执行,执行结束后恢复玩家原有 OP 状态 |
| 不带前缀 | 由兑换玩家执行 |
指令会先经过 PlaceholderAPI 变量解析,因此可以使用 %player_name% 等当前服务器能够解析的变量。指令内容不需要填写开头的 /。
虽然邮件模板示例注释中出现了 [player],实际指令处理代码只识别 [console] 和 [op]。需要玩家身份执行时应直接填写指令,不要添加 [player] 前缀。
相关消息
CDK 兑换过程中使用的提示文本位于 config.yml 的 message 节点:
yaml
message:
error-cdk: '&c无效CDK'
used-cdk: '&7该CDK已被使用.'
used-group: '&7你已兑换过该组CDK.'
redeem-cd: '&7兑换冷却中, 请稍后再试.'| 配置项 | 触发条件 |
|---|---|
message.error-cdk | 没有找到匹配的固定 CDK 或随机 CDK |
message.used-cdk | 随机兑换码已经被其他玩家使用 |
message.used-group | 当前玩家已经兑换过该 CDK 组 |
message.redeem-cd | 当前玩家仍处于兑换冷却时间内 |
将某项设置为空字符串时,对应情况不会向玩家发送提示。
重载与修改
修改 cdk.yml 后,使用以下指令重新加载 CDK 组:
text
/lmail reload该指令仅允许 OP 执行。重载会重新读取 cdk.yml 和邮件模板,同时重启自动发送与过期邮件扫描任务,并强制关闭当前打开的邮箱界面。
重载不会清除以下数据:
- 玩家已经兑换过的 CDK 组记录。
- 本地
cdkdata目录中的随机 CDK 和使用者。 - MySQL 数据表中的随机 CDK 和使用者。
删除或重命名 cdk.yml 中的组不会自动清理其历史数据。
注意事项
- 每个玩家对每个 CDK 组只能兑换一次,固定和随机模式都遵循该限制。
- 随机 CDK 只能使用一次,并会在兑换后记录玩家名称。
- 固定 CDK 可以被不同玩家分别兑换一次。
- CDK 组 ID 开始使用后不要随意修改。
- 随机 CDK 不要一次生成过多,避免增加生成、读取和兑换查询成本。
mail中的模板条件不满足时,邮件不会发送,但兑换记录不会回滚。- 本地模式下,玩家 CDK 组兑换记录保存在玩家数据文件中;随机码状态保存在
cdkdata目录中。 - 多服务器环境如果分别使用本地文件,各子服的随机 CDK 与玩家兑换数据不会自动保持一致。
- 需要共享 MySQL 数据时,必须安装
LyMySQLCore并确保数据库连接成功后再开放相关功能。