Skip to content

玩家悬赏

悬赏模板放在:

text
plugins/GTCommission/bounties/

服主只需要开放允许玩家发布的模板。玩家不能绕过模板自定义任务类型、最高接取人数、奖励档位或可用经济。

基础模板

yaml
bounties:
  monster_hunt:
    enabled: true
    name: "&c怪物讨伐悬赏"
    description:
      - "&7发布后由其他玩家接取并完成。"
    type: KILL_ENTITY
    target-mode: INPUT
    target-suggestions: [ZOMBIE, SKELETON, CREEPER, SPIDER]
    objective-amount: 30
    icon: IRON_SWORD
    expire-hours: 24
    max-hunters: 10
    escrow: MONEY
    reward-options: [1000, 5000, 10000]
    custom-reward:
      enabled: true
      minimum: 100
      maximum: 1000000
      step: 100
    allow-multiple-choice: true
    default-multiple: true
    deposit-options: [0, 100, 500, 1000]
    share-options: [1, 2, 3]
    tip-options: [500, 1000, 5000]
    economies: [money, points]
字段说明
enabled是否允许发布该模板
namedescription发布界面的名称和说明,支持 PAPI
type悬赏任务类型,与普通任务类型一致
target-mode发布时如何选择目标
targetFIXED 模式的固定目标
target-suggestionsINPUT 模式提供的目标建议
objective-amount完成一份悬赏所需进度
icon悬赏图标
expire-hours发布后多少小时过期
max-hunters最多同时接取人数
escrow奖励托管方式
reward-options玩家可选的单份奖励档位
custom-reward.enabled是否允许发布者输入自定义奖励
custom-reward.minimum自定义奖励最小值
custom-reward.maximum自定义奖励最大值
custom-reward.step自定义奖励递增单位
allow-multiple-choice发布者能否选择多人同时接取
default-multiple默认是否允许多人同时接取
deposit-options每名接取者可选押金档位
share-options可发布的悬赏份数
tip-options后续可追加的每份小费档位
economies本模板允许使用的经济 ID

目标选择方式

模式用途
FIXED使用模板里的 target,玩家不能修改
PLAYER从在线玩家 GUI 中选择目标
INPUT玩家输入目标,GUI 显示 target-suggestions 作为提示
HELD_ITEM使用发布者当前主手物品作为目标
ITEMS打开背包选择 GUI,可选择多种物品并分别设置数量

目标选择界面会使用 messages.yml -> display.targets 的中文名称。玩家输入“僵尸”时,插件会在模板的 target-suggestions 中找到对应的 ZOMBIE,实际记录和进度匹配仍使用 ZOMBIE

物资征集示例:

yaml
bounties:
  material_request:
    enabled: true
    name: "&6物资征集悬赏"
    type: SUBMIT_ITEM
    target-mode: ITEMS
    objective-amount: 64
    icon: CHEST
    expire-hours: 48
    max-hunters: 10
    escrow: MONEY
    reward-options: [1000, 5000, 10000]
    custom-reward:
      enabled: true
      minimum: 100
      maximum: 1000000
      step: 100
    allow-multiple-choice: true
    default-multiple: true
    deposit-options: [0, 100, 500]
    share-options: [1, 2, 3]
    tip-options: [500, 1000, 5000]
    economies: [money, points]

发布者在物品选择界面左键背包物品后输入数量,可以连续添加多种物品。右键已选中的同类物品可从清单移除。记录的是完整物品数据,不只比较材质,因此带名称、Lore、NBT 的物品不会被普通同材质物品代替。

奖励托管

MONEY 表示从发布者选择的经济账户中扣除奖励。Vault 经济直接调用接口,PlayerPoints、DreamPoints 调用各自接口,自定义经济按配置好的查询变量和增减命令处理。

yaml
escrow: MONEY
reward-options: [1000, 5000, 10000]
economies: [money, points]

发布界面会同时显示 reward-options 的快捷档位和“自定义奖励数量”按钮。自定义输入必须位于 minimummaximum 之间,并以 minimum 为起点按 step 递增。例如最小值为 100、步长为 100 时,可填写 100200300,不能填写 250

ITEM_HAND 表示把发布者主手物品作为奖励托管:

yaml
escrow: ITEM_HAND

物品奖励固定为 1 份,避免把同一件托管物品重复发给多个完成者。押金和小费仍使用模板选择的经济。

多人接取与悬赏份数

发布者可以控制同一悬赏是否允许多人同时接取:

  • 允许多人:不超过 max-hunters 的玩家可以同时接取。
  • 单人接取:有玩家接取后,其他人不能再接取。

share-options 控制奖励份数。每名玩家只能完成其中一份:

  • 1 份:第一名完成并提交的玩家获得奖励,其他接取者自动取消。
  • 多份:前几名完成者依次领取,达到份数后关闭悬赏并取消剩余接取者。

这里以成功提交为准,不以先接取为准。收集物品悬赏需要玩家背包满足全部物品要求后提交;其他类型在进度达到要求时结算。

接取押金

yaml
deposit-options: [0, 100, 500, 1000]

发布者选择其中一档作为每名玩家的接取押金。接取时立即扣除:

  • 玩家成功完成时退还自己的押金。
  • 悬赏名额全部完成后,未获奖的接取者自动取消并退还押金。
  • 悬赏正常过期或被系统关闭时,按实际结算结果处理退款。

跨服使用 MySQL 或 Redis 时,奖励与退款都带有唯一结算记录。玩家换服上线后仍会收到未发放的奖励或退款,不会因为多个子服同时处理而重复到账。

追加小费

主配置:

yaml
bounty:
  tip-min-unaccepted-minutes: 30

悬赏发布后达到这个时间,并且仍然无人接取,发布者可以在悬赏详情中追加小费。小费按“每份”计算,追加时会一次托管剩余份数所需的总金额。

yaml
tip-options: [500, 1000, 5000]

模板中的数值会显示为建议档位。发布者也可以在输入框中填写正整数。已有玩家接取后不能再追加,防止接取过程中临时改变结算金额。

玩家操作

发布悬赏:

text
/gtbounty publish

查看大厅:

text
/gtbounty

大厅中:

  • 左键未接取的悬赏:接取。
  • 左键自己已接取的物资悬赏:尝试提交物品。
  • 右键悬赏:查看完整需求、奖励、押金、人数与剩余时间。

发布者管理

查看自己发布的悬赏:

text
/gtbounty mine

也可以直接输入:

text
/gtmybounty

“我的悬赏”会列出当前保存的开放、已完成、已过期和已取消记录。点击其中一条可以查看需求、托管奖励、完成份数、曾接取玩家、当前接取玩家和已完成玩家。开放中的悬赏会显示取消按钮。

发布流程中点击“取消发布”只会放弃当前填写内容,不会扣除奖励或手续费,聊天栏会提示已经取消。

取消已发布悬赏的规则在主配置中设置:

yaml
bounty:
  cancel:
    free-minutes: 30
    fee:
      amount: 100
      economy: money
      system-percent: 10
配置说明
cancel.free-minutes发布后多少分钟内可以免费取消,填 0 表示发布后立即开始收费
cancel.fee.amount超过免费时间后取消一次收取的固定手续费,填 0 表示不收费
cancel.fee.economy手续费使用的经济 ID,必须在 economy.currencies 中存在
cancel.fee.system-percent系统保留的手续费比例,剩余部分平均发给接取者

取消成功后:

  • 尚未发出的托管奖励和小费全部退回发布者。
  • 当前仍在接取的玩家全额退还押金,并自动取消该悬赏。
  • 超过免费时间时,先从发布者指定币种账户扣除手续费。
  • 手续费扣除系统抽成后,平均发给所有曾经接取过该悬赏的玩家;不能整除的零头由系统保留。
  • 没有任何玩家接取过时,不产生玩家分成。
  • 余额不足、经济不可用、悬赏已关闭或已经被其他子服结算时,取消失败,不会改变悬赏状态。

本地、MySQL 和 Redis 都会锁定取消结果。同一条悬赏不会在一个子服取消、另一个子服同时完成。

全局限制

yaml
bounty:
  max-published-per-player: 5
  max-accepted-per-player: 10
  default-expire-hours: 24
  allow-publisher-accept: false
  refund-on-expire-percent: 100
  tip-min-unaccepted-minutes: 30
  cancel:
    free-minutes: 30
    fee:
      amount: 100
      economy: money
      system-percent: 10
配置说明
max-published-per-player每名玩家最多保留多少条自己发布的悬赏
max-accepted-per-player每名玩家最多同时接取多少条悬赏
default-expire-hours模板未填写 expire-hours 时的默认时长
allow-publisher-accept发布者能否接取自己发布的悬赏
refund-on-expire-percent过期时发布者未发出奖励的退还比例
tip-min-unaccepted-minutes无人接取多久后允许追加小费
cancel.free-minutes发布后免费取消的分钟数
cancel.fee.amount超过免费时间后的固定取消手续费
cancel.fee.economy取消手续费使用的经济 ID
cancel.fee.system-percent手续费由系统保留的百分比

正式开放前建议用两名测试玩家完整跑一次发布、接取、完成、押金退还和过期退款。