你正在使用过时的浏览器,可能无法正确显示此网站或其他网站。
你应该升级浏览器或使用
其他浏览器。
🧩插件 zAuctionHouse
4.0.1.0
- 固定关键的跨服务器重复,卖出的物品重新出现在卖家的物品中(多服务器/Redis)。当 purchased-item.give-item: true,购买在广播 ItemBought 事件前将数据库行设置为 DELETED;在其他服务器上,ItemBoughtListener 通过 selectItem 重新获取该项目(过滤已删除的行),结果为空,并在删除列表中的列表前退出。因此,幽灵列表在所有非买家服务器上依然存活,卖家仍然在/ah销售中看到了它。监听器现在无条件地从内存存储中移除列表(类似于 ItemRemovedListener),独立于数据库查找。ItemBoughtMessage 被丰富了卖家的 UUID/姓名、商品显示、价格和买家姓名,因此实时卖家通知(包括买家百分比,远程服务器上已经失效)无需数据库往返即可正常运行
- 固定购买物品在其他服务器上没有显示,购买的物品 purchased-item.give-item: false(多服务器 / Redis)。ItemBoughtListener从远程服务器的列表中移除了该物品,但从未将其添加到内存内已购买的商店,因此更换服务器的买家在重启前无法看到购买。远程服务器现在会将商品重新添加到购买中(买家-服务器购买已在本地完成此操作;买家服务器忽略自身消息)。对于 give-item: true,消息会标记 govenToBuyer,使远程服务器完全跳过(始终为空的)数据库查找
- 固定购买崩溃或超时可能导致物品在多服务器(Redis)环境中永久无法购买。锁钥匙拍卖:lock:<id>通过TTL到期,但物品哈希字段状态=LOCKED依然存在(直到物品TTL,~30天),因此checkAvailable报告该物品永久锁定。锁状态现在对锁钥匙的存在进行关键:没有活锁钥匙的锁定状态被视为过期锁并恢复。为了防止这种恢复导致双重购买,PurchaseService现在在收费前会在锁定下重新验证权威数据库状态——即该行已被删除或买家终止购买且未被提取
- 固定现在,多服务器(Redis)设置中,过期功能已实现集群识别。之前 ExpireService 将已列为 - > 过期的物品移动到本地,没有集群协调,因此在其他服务器上出售的物品残影可能会被卖家以过期物品身份复活(并被领回 = 重复)。在分布式配置中,LISTED -> EXPIRED 过渡现在锁定该项目,重新读取权威数据库状态(跳过其他地方出售的物品),执行移动并广播,使所有节点收敛。单服务器设置保留了原始的快速路径
- 固定ItemRepository 可以在物品过期时覆盖已售出或移除的物品。LISTED-> 过期更新现在用 HERE storage_type = 'LISTED' 来保护,因此过期更新永远无法覆盖其他服务器已设置为 DELETED/BOUGHT 的行
- 新增内容DonutAuction 迁移 - 使用 /ah admin migrate donutauction confirm(别名 donut、donutsmp、da)将数据从 DonutAuction 插件(由 EliVB 开发)迁移到 zAuctionHouse V4。直接读取插件/DonutAuction/ah.data,因此无需数据库配置;活跃拍卖作为挂牌物品导入,过期拍卖作为可回收的过期物品,而未认领的待付款(现金,非物品)则被跳过。旧版Base64项堆栈通过加固类允许列表进行反序列化,以防止恶意数据文件
- 固定跨服务器购买可能会因 IllegalArgumentException 而失败:名称不能为空(多服务器 / Redis)。当买家购买了卖家从未登录过该后端节点的商品时,getSellerName() 返回空值,并直接传递给经济服务商的 withdraw() 调用(以及购买通知中的 %seller% 占位符),从而中止了购买。卖家名称现在会在经济调用前从共享数据库中解析,回退到卖家的UUID字符串(并提示控制台警告确认所有服务器共享同一MySQL数据库),即使查询失败,空名称也无法进入下游代码
- 固定在资本主义(增值税风格)下购买失败或收费错误——购买前的余额检查只验证买家能负担得起标价,而非价格加上资本主义税,因此持有正好标价的玩家通过了检查,含税取款可能会失败。当启用资本主义税时,PurchaseService和ZAUCTIONHOUSE_LISTED_ITEMS按钮现在可以检查包含税的必要余额
- 固定物品在购买失败后卡在“正在购买”状态,原因是资金不足——物品在资金检查前被标记为IS_BEING_PURCHASED,但只有失败时才解锁(未恢复状态),所以在多服务器(Redis)设置中,物品会卡住,无法再购买。状态现在恢复并广播给集群,然后解锁
- 固定购买或理赔过程中的经济错误导致的资金损失——买方取款、卖方押金和理赔押金现在都被包裹在错误处理中:如果买方被收费但卖方押金抛弃,买方自动获得退款;失败的理赔存款会被记录并跳过,而不是默默失去钱
- 固定过期的挂牌仍然可以在拍卖行中展示和计数。由于过期处理得较为懒散,物品可能在过期后仍保持可用(尤其是在缓存过期时),并持续显示在主列表、逐类别计数和zauctionhouse_listed_items占位符中。现在每个显示瓶颈处都应用一个 Item.isActivelyListed() 谓词(可用且未过期),与已过期的商品互动时,它会被移到玩家的过期物品上,而不是打开确认库存或重新显示
- 固定出售、过期、购买、上架和合并物品列表按钮忽略了他们背包的玩家背包设置——分页物品和空格占位符总是被渲染到宝箱的界面中,即使背包配置为玩家背包。这些按钮现在在配置后会将物品渲染到玩家自己的物品栏区域(PR #25)
- 固定拍卖搜索按钮在没有搜索活动时,总是显示硬编码的英文无字(%)search_query%,忽略服务器语言。ZAUCTIONHOUSE_SEARCH按钮现在在库存/auction.yml搜索按钮中读取一个可配置的无值选项,并且每个语言都有本地化默认值(None / Aucune / Ninguna / Nessuna / ไม่มี),因此空搜索文本可以翻译和自定义
- 新增内容拍卖搜索按钮上的可配置%search_active%值——ZAUCTIONHOUSE_SEARCH按钮现在在库存/auction.yml中读取活跃值(默认为true)和非活跃值(默认为false)选项,因此搜索处于/未激活状态时,按%search_active%返回的值可以自定义(例如启用/禁用、是/否),而不是硬编码的true/false
- 变了已将所需的zMenu API更新为1.1.1.6——确保你的服务器运行的是zMenu 1.1.1.6或更新版本
- 修复了销售历史中日志ID警告中“找不到物品”的垃圾信息。从V3迁移的日志创建时item_id = 0(因为与V4项目无直接对应),导致每个条目都显示警告。此类记录现在在SQL层面被过滤掉。
- 新增了历史设置config.yml:
- history.max条目 - 限制每位玩家显示的历史条目数量(默认:500条,0条 - 无限)。
- history.expire-after-days - 隐藏超过指定天数的条目(默认:0 - 未过期)。
- 对于拥有大量事务的服务器来说,它有助于减轻数据库负载并加快历史记录的加载速度。
- 为管理员增加了日志管理命令:
- /AH 管理员日志会清除 <days> — 删除所有超过指定天数的日志。
- /ah 管理员会记录玩家<player>——删除特定玩家的所有日志。
- /ah 管理员日志清除迁移——删除所有从 V3 迁移的日志(item_id = 0)。
- 所有操作均异步执行,并报告已删除记录的数量。
- 修复了/ah中多服务器(Redis)构建中出售的“幽灵”物品。此前,如果玩家在服务器No1删除物品并前往服务器No2,该物品可以保持“已购买”状态并锁定销售槽位。已经进行了三项修正:
- ItemRemovedListener 现在在收到消息后立即从内存中移除该项,无需等待对数据库的异步请求。
- 如果本地删除已经完成,RemoveService将不再通过Redis恢复项目状态。
- getPlayerSellingItems 现在会进一步过滤状态为 DELETED 的物品。
- 更改了Discord的webhook %expires_at%占位符,改用动态Discord时间戳(<t:unix_seconds:f>)代替预先格式化的日期。Discord会自动显示每个用户当地时区的日期。没有保质期的商品仍会使用正常的日期。
- 新增了对Discord webhook自定义物品图片的支持:
- 该discord.yml新增了一个自定义图片板块。
- 你可以针对特定物品覆盖 %item_image_url%。
- 支持与categories.yml/rules.yml格式相同的规则:材料、名称、背景、自定义模型数据、Oraxen、Itemsadder、Nexo、mmoitems等。
- 使用第一匹配规则。
- 如果没有匹配,则根据物体的材料使用标准图像。
- 图像颜色现在通过URL缓存,因此相同材质的不同自定义项目不再冲突。
- 新增了对类别的禁令支持——允许即使特定物品符合纳入规则,也可以排除类别中的某些物品。例如,下界合金锄通常会出现在“工具”类别中,但如果它有特定的自定义模型数据(例如300),可以通过禁用规则排除。使用与常规规则相同的规则类型(材料、标签、背景、自定义模型数据等)。
- 新增内容广播系统——当物品上架或购买时,向所有在线玩家发送消息。可根据事件类型(卖/买)配置,并有排除卖家/买家的选项。支持使用MiniMessage格式的按类别覆盖消息,使用%seller%、%buyer%、%items%、%price%、%category%占位符。默认禁用,广播时config.yml启用
- 新增内容玩家选项系统——由数据库支持的可扩展的每位玩家偏好系统。玩家可以通过 /ah 选项(打开 GUI)或 /ah 选项<option_name>[value](命令切换)来切换选项。选项缓存在内存中,只有在与默认值不同时才存储在数据库中。目前支持broadcast_sell和broadcast_purchase选择退出广播消息
- 新增内容选项库存(/ah option)——27槽图形界面,每个广播选项都有切换按钮,显示当前状态(启用/禁用)
- 新增内容管理员选项命令 - /ah admin option 设置 <player> <option> <value> 用于设置玩家选项,/ah 管理员选项列表 <player> 查看玩家选项,/ah admin option reset <player> 将所有选项重置为默认
- 新增 %zauctionhouse_option_<option_name>% 占位API占位符——返回玩家选项值的真/假(例如,%zauctionhouse_option_broadcast_sell%)
- 新增了“拍卖行领取”按钮:该按钮能够以动态占位符的形式显示各经济体中尚未领取的款项,玩家可以直接在拍卖界面进行领取操作。
- 新增了可配置的加载项,该加载项会在获取资金数据的过程中显示出来。
- 新增了“不显示小数”的价格格式——该格式下,价格将不显示小数部分(例如:10000.50会显示为10000)。
- 新增了 %price-price-without-decimal%占位符——用于显示商品描述中不带小数的价格。
- 已添加:现在可以从控制台执行“ah admin forceopen”命令了。
- 新增了时区配置选项——用户可以自行指定所有日期占位符(%date%、%formatted-expire-date%、%expires_at%)所使用的时区。该功能支持所有的Java时区标识符,例如Europe/Paris、America/New_York、UTC等。默认情况下,系统会使用服务器的默认时区。
- 已修复:/ah管理员界面中的“历史记录”选项不再会加载所有离线玩家的信息,从而避免了玩家众多的服务器出现延迟现象。
- 已修复在Folia/Canvas模式下,updateListedItems功能出现崩溃的问题。原来,与库存管理相关的操作是在异步线程中执行的,而不是在主线程中处理。
- 已修复“sell”命令中与经济系统相关的参数配置问题。之前,当该参数的索引未进行配置时,系统会忽略默认值,从而导致经济系统名称为空。
- 新增内容ZAUCTIONHOUSE_CLAIM按钮——显示每个经济体的待处理资金,带有动态占位符,允许玩家直接从拍卖图形界面领取
- 新增内容可配置的领取按钮加载物品,显示在获取待处理资金数据时
- 新增内容PRICE_WITHOUT_DECIMAL 价格格式——显示不含小数位的价格(例如,10000.50 - > 10000)
- 添加 %price-price-但无小数%占位符——在物品背景中显示无小数点的价格
- 新增了 /ah 管理员强制开放,现在可以在控制台执行
- 新增时区配置选项——允许更改所有日期占位符的时区(%date%、%formatted-expire-date%、%expires_at%)。支持所有 Java 时区 ID(例如,欧洲/巴黎,美国/New_York,UTC)。默认设置为自动(服务器时区)
- 修复了/ah管理员打开和/ah管理员历史标签的完成功能,不再加载所有离线玩家,避免了多人服务器的延迟
- 修复了 Folia/Canvas 上 updateListedItems 崩溃的问题——库存持有者的访问运行在异步线程上,而不是主 tick 线程
- 卖出命令的固定经济名称参数配置——当经济参数索引未配置时,默认值被忽略,导致经济名称为空
- 新增内容ZelAuction 迁移 - 使用 /ah admin migrate zelauction confirm 从 ZelAuction 插件迁移数据到 zAuctionHouse V4
- 新增内容搜索系统——玩家可以直接通过拍卖行的图形界面或/ah搜索<查询)按名称、材料、背景故事或卖家搜索物品>
- 新增内容ZAUCTIONHOUSE_SEARCH 按钮 - 打开基于聊天的搜索输入,支持高级过滤操作符
- 新增内容ZAUCTIONHOUSE_CLEAR_SEARCH按钮——清除活跃搜索筛选,仅在搜索处于激活状态时显示
- 新增了 /ah 搜索<query>命令——无需先打开 GUI 即可直接从聊天中搜索项目
- 新增内容带有运算符的高级搜索筛选器:~(包含)、=(精确)、~=(包含,忽略大小写)、==(精确,忽略大小写)
- 新增内容可搜索字段:姓名、材料、背景故事、卖家(例如,卖家=缺口,姓名~钻石)
- 新增 /ah 管理员强制打开<player> <inventory> [page] - 在特定页面为玩家打开任意库存。支持所有库存名称(例如拍卖、管理员销售物品、历史记录、管理员日志等),并支持标签页完成。页面默认为1
- 新增了重置搜索搜索配置选项——启用(默认:true)时,每次玩家打开拍卖行时搜索过滤器都会清除,符合现有的重置类别开机行为
- 修复:当找不到玩家时显示的提示信息的修改
- 修复:更新至最新的zMenu及Sarah版本
- 固定宣称占位符,他可以断开某些玩家的连接
- 固定广播消息
- 固定的ZSellButton