出售权限折扣与倍率
设置普通、VIP、SVIP 出售价,理解规则优先级、权限授权、金额精度和跨服配置。
适用版本:0.1.0+build.107 及以后。转换菜单、内置一键出售按钮和 /emc sellall 使用同一规则;购买、自动补料、退款和转账不受影响。
配置示例
在 plugins/LIEMC/config.yml 中配置:
sell-pricing:
# true 开启,false 按原价;插件默认 false。
enabled: true
# 没有命中权限时按原价的80%回收。
default-multiplier: 0.8
# 任意非空 Bukkit 权限节点均可使用。
permission-rules:
- permission: "liemc.sell.vip"
# 整数,越大越优先。
priority: 10
# VIP 按原价90%回收。
multiplier: 0.9
- permission: "liemc.sell.svip"
priority: 20
# SVIP 按原价100%回收。
multiplier: 1.0
修改后执行 /emc reload,关闭旧菜单再打开。假设物品单价为 10 EMC,出售 10 个时:普通玩家获得 80、VIP 获得 90、SVIP 获得 100 EMC。
匹配规则
- 未开启功能:固定倍率
1。 - 开启但没有权限命中:使用
default-multiplier。 - 多条命中:只选
priority最大者;优先级相同时取列表靠前者,不相加、不叠乘,也不是自动取最高倍率。 - 优先级为整数,允许
-2147483648至2147483647;缺失或非法时按0。 - 倍率范围为
0.0001至1000。非法默认倍率回退1;权限为空或倍率非法的规则忽略。 - 权限变化会在下一笔交易重新检查;已打开的 GUI 显示需重开刷新。
- 示例权限
liemc.sell.vip与liemc.sell.svip默认不授予,包括 OP。自定义权限按 Bukkit/权限插件的实际判定结果处理。
倍率大于 1 会让出售价格高于购买原价,可能产生反复买卖套利。通常折扣应配置在 0 到 1 之间,且不能为 0。
授予权限
安装 LuckPerms 后,在控制台执行(将“玩家名”替换为实际名称):
lp user 玩家名 permission set liemc.sell.vip true
也可给现有权限组授予同一节点。命令格式见 LuckPerms 权限命令文档。LIEMC 不要求使用 LuckPerms,其他支持 Bukkit 权限的插件同样可用。
界面与消息变量
在 item-display.default-lore 或商品独立 lore 中加入:
- "&7购买单价:&e{emc}"
- "&7出售单价:&a{sell_emc}"
- "&7出售倍率:&f{sell_multiplier}x({sell_percent}%)"
{sell_emc} 是当前玩家出售一个物品的报价,不改变 {emc} 的含义。{sell_multiplier}、{sell_percent}、{sell_permission} 也可用于 GUI 按钮;未命中权限或功能关闭时,{sell_permission} 为空。
出售成功消息另外支持 {base_amount} 原总价、{amount} 折后结算金额。一键出售还支持 {stacks} 堆数、{items} 个数。已有自定义 Lore 和消息不覆盖,按需手动添加变量。
金额精度与安全
先按十进制汇总整笔商品原价,再应用一次倍率,四舍五入到四位小数。结果为零、非有限数或超出货币范围时拒绝出售并保留物品。
PlayerPoints 只接受整数,会将整笔折后金额向上取整;批量出售金额不一定等于“已取整的单件报价 × 件数”。Vault 最终精度取决于所接经济插件。
结算时先预留本次物品;入账失败会恢复原槽位,菜单已关闭或槽位已被占用时返还背包,装不下则掉落。经济回调关闭菜单、重入出售或在原槽位放入新物品,不会重复支付或清除新物品。
sell-pricing 是各服本地规则,不通过商品数据库广播。多服需要同步这一配置,并分别执行 /emc reload。