Skip to content

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

[数量] 必须是整数,代码允许的范围为 110000。该指令只能为 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 时,插件按以下顺序处理:

  1. 检查玩家数据是否已经加载。
  2. 检查 config.yml 中的 CDK 兑换冷却。
  3. 优先匹配所有固定 CDK 组。
  4. 固定 CDK 未匹配时,再从本地文件或数据库查询随机 CDK。
  5. 检查玩家是否已经兑换过对应的 CDK 组。
  6. 随机 CDK 还会检查该兑换码是否已经被其他玩家使用。
  7. 记录玩家的 CDK 组兑换状态。
  8. 依次发送 mailmessage 并执行 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.ymlmessage 节点:

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 并确保数据库连接成功后再开放相关功能。