Skip to content

CDK 模板

CDK 模板决定兑换码长什么样、能用几次、谁能用、过期时间、兑换后执行什么奖励。

推荐把模板放在文件夹里:

text
plugins/GTCDK/templates/
  基础/开服礼包.yml
  基础/VIP礼包.yml
  高级/系数礼包.yml

GTCDK 会递归读取 templates/ 下的所有 .yml 文件,可以按活动、档位、渠道自由分层。

最小模板

yaml
name: "&a开服礼包"
description:
  - "&7输入 CDK 后领取一次。"
code:
  prefix: "GT"
  groups: 4
  group-length: 4
  charset: "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"
  separator: "-"
usage:
  total: 1
  per-player: 1
  expire-seconds: 0
conditions:
  - "%player_level% >= 0"
actions:
  - "[item] DIAMOND 3"
  - "[money] give 100"
  - "[message] &a你领取了开服礼包。"
gui:
  material: "CHEST"
  slot: 20

效果:

  • 生成的兑换码类似 GT-ABCD-EFGH-JKLM-NPQR
  • 每个兑换码总共只能用 1 次。
  • 每名玩家最多使用 1 次。
  • 不过期。
  • 兑换后给 3 个钻石、100 金币和提示消息。

code 生成规则

yaml
code:
  prefix: "VIP"
  groups: 4
  group-length: 4
  charset: "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"
  separator: "-"
字段说明
prefixCDK 前缀
groups分几组
group-length每组长度
charset随机字符池
separator分隔符

推荐字符池去掉容易混淆的 IO01,玩家复制和手输都会舒服很多。

usage 使用次数

yaml
usage:
  total: 1
  per-player: 1
  expire-seconds: 604800
字段说明
total这个 CDK 总共可被使用多少次
per-player每名玩家最多使用多少次
expire-seconds生成后多少秒过期,0 表示不过期

常用写法:

yaml
# 一人一码,一码一次
usage:
  total: 1
  per-player: 1
  expire-seconds: 0

# 公共福利码,全服可用 100 次,每人 1 次
usage:
  total: 100
  per-player: 1
  expire-seconds: 86400

conditions 条件

30 级以上才能兑换:

yaml
conditions:
  - "%player_level% >= 30"

有权限或等级达到 30:

yaml
conditions:
  - "hasPermission('gtcdk.vip') || %player_level% >= 30"

只允许指定职业:

yaml
conditions:
  - "%player_class% == WARRIOR"

条件适合做 VIP 礼包、等级礼包、职业礼包、活动资格礼包。

actions 奖励动作

yaml
actions:
  - "[item] DIAMOND 3"
  - "[money] give 100"
  - "[message] &a兑换成功。"
  - "[sound] ENTITY_PLAYER_LEVELUP 1 1"

常用动作:

动作说明
[item] DIAMOND 3给原版物品
[item] ni:ruby 1给 NI 物品
[item] mm:LEGEND_SWORD 1给 MM 物品
[item] ce:gear_core 1给 CraftEngine 物品
[money] give 100给金币
[console] say {player}控制台命令
[player] me 兑换成功玩家命令
[op] some command玩家临时 OP 命令
[message] 文本发送消息
[sound] 音效 音量 音调播放声音

GUI 保存物品

模板里可以直接写 [item],也可以在管理 GUI 里把奖励物品放进去保存。

适合 GUI 保存的情况:

  • 物品有复杂 NBT。
  • 物品来自其他插件生成。
  • 物品 Lore、附魔、PDC、CustomModelData 需要原样保留。

流程:

  1. 执行 /gtcdk 打开主界面。
  2. 进入 CDK 管理。
  3. 选择模板。
  4. 进入奖励物品编辑。
  5. 把要发给玩家的物品放进去。
  6. 点击保存。

保存后,玩家兑换 CDK 会获得这组物品。

VIP 礼包

yaml
name: "&6VIP 礼包"
description:
  - "&7权限或等级满足后才可兑换。"
code:
  prefix: "VIP"
  groups: 4
  group-length: 4
  charset: "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"
  separator: "-"
usage:
  total: 1
  per-player: 1
  expire-seconds: 604800
conditions:
  - "hasPermission('gtcdk.vip') || %player_level% >= 30"
actions:
  - "[item] EMERALD 5"
  - "[message] &6VIP 礼包兑换成功。"
gui:
  material: "EMERALD"
  slot: 21

效果:

  • 兑换码 7 天后过期。
  • gtcdk.vip 权限或等级达到 30 可兑换。
  • 兑换后给 5 个绿宝石。

系数礼包

系数可以根据权限放大奖励倍率。

yaml
name: "&6系数礼包"
description:
  - "&7奖励可按权限放大。"
code:
  prefix: "RATE"
  groups: 4
  group-length: 4
  charset: "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"
  separator: "-"
usage:
  total: 1
  per-player: 1
  expire-seconds: 0
conditions:
  - "%player_level% >= 0"
actions:
  - "[message] &a领取成功,奖励倍率:{reward_multiplier}"
coefficients:
  reward:
    base: 1.0
    min: 1.0
    max: 3.0
    permissions:
      "gtcdk.vip": 1.2
      "gtcdk.svip": 1.5
gui:
  material: "CHEST"

效果:

  • 普通玩家倍率 1.0。
  • gtcdk.vip 权限时倍率 1.2。
  • gtcdk.svip 权限时倍率 1.5。
  • 最大不超过 3.0。

批量生成流程

  1. 写好模板文件。
  2. 执行 /gtcdk reload
  3. 打开 /gtcdk
  4. 进入 CDK 管理。
  5. 选择模板。
  6. 输入生成数量。
  7. 导出或复制生成结果。

常见问题

模板不显示

检查:

  1. 文件是否放在 plugins/GTCDK/templates/ 下。
  2. 文件后缀是否为 .yml
  3. /gtcdk reload 是否报错。
  4. YAML 缩进是否正确。

CDK 被重复使用

检查:

  1. usage.total 是否大于 1。
  2. usage.per-player 是否大于 1。
  3. 存储是否正常。
  4. 多服是否共用同一个数据库。

条件不生效

检查:

  1. PAPI 变量是否能正常解析。
  2. 权限节点是否真实存在。
  3. 字符串条件是否和变量返回值一致。