这是一个针对 World of Warcraft 3.3.5、TradeSkillMaster 2.8.3 和 TradeSkillMaster_AuctionDB 2.3.10 的兼容性补丁。
它用于规避拍卖行扫描接近结束时出现的错误:
Interface\AddOns\TradeSkillMaster\Core\Threading.lua:28:
memory allocation error: block too big
AuctionDB 会按照拍卖堆叠数量逐个创建价格样本。原代码虽然打算把每种物品限制在 5000 个样本以内,但检查发生在处理整条拍卖记录之前;单条异常大的堆叠仍可能一次插入远超 5000 个元素。
某些 3.3.5 私服允许远大于原版预期的堆叠数量。完整扫描或 GetAll 扫描处理这些拍卖时,Lua 可能尝试申请过大的内存块并报错。
本补丁在以下三条数据路径中真正执行每种物品最多 5000 个价格样本的限制:
- GetAll 扫描
- 普通/分组扫描
- 外部导入的拍卖数据
拍卖总数量 quantity 仍按完整数量保存;只有用于市场价计算的价格样本数量受到原设计的 5000 条上限约束。
已实际验证:
- WoW 客户端:3.3.5
- TradeSkillMaster:2.8.3
- TradeSkillMaster_AuctionDB:2.3.10
- 中文客户端:zhCN
其他版本的文件结构或函数实现可能不同,不建议直接覆盖。
- 在 GitHub 项目页面点击 Code。
- 选择 Download ZIP。
- 解压下载的 ZIP,找到其中的
Scanning.lua。
也可以只下载仓库根目录中的 Scanning.lua 文件。
- 完全退出游戏,确认任务管理器中没有
Wow.exe。 - 打开 WoW 游戏目录。
- 进入:
Interface\AddOns\TradeSkillMaster_AuctionDB\Modules\
- 将原文件备份为:
Scanning.lua.original
- 把本项目中的
Scanning.lua复制到该目录,覆盖原文件。 - 启动游戏,打开拍卖行并重新进行扫描。
完整目标路径应类似:
<魔兽世界目录>\Interface\AddOns\TradeSkillMaster_AuctionDB\Modules\Scanning.lua
本补丁不会修改或删除 WTF 目录中的 SavedVariables,因此不会主动清空 AuctionDB 历史价格、TSM 分组、操作或价格公式。
- 完全退出游戏。
- 删除补丁版
Scanning.lua。 - 将备份的
Scanning.lua.original改回Scanning.lua。
也可以重新安装原版 TradeSkillMaster_AuctionDB 2.3.10。重新安装或更新插件后,本补丁可能会被覆盖。
该补丁已在此前稳定复现扫描末尾 memory allocation error: block too big 的环境中连续观察数天,拍卖行扫描能够正常完成,错误未再次出现。
- 不要通过删除或注释
TradeSkillMaster\Core\Threading.lua第 28 行来隐藏错误;该位置只负责重新抛出后台任务中的实际异常。 - 建议修改前备份原始文件。
- 如果使用不同版本的 TSM/AuctionDB,请先比较源码,不要直接覆盖。
- 插件更新后请检查补丁是否仍然需要,并重新验证兼容性。
Scanning.lua 基于 TradeSkillMaster_AuctionDB 2.3.10 的原始文件修改,原项目版权声明保留。此仓库未对原项目代码重新授权,也未声明与 TradeSkillMaster 官方存在关联。