本文档说明 BiaoGe 插件「匿名拍卖」功能是如何实现的,数据流与蓝龙 CD 同步类似,都基于 SendAddonMessage / CHAT_MSG_ADDON 在团队(RAID)频道内通信。
一、模式定义
拍卖有三种模式,由 BiaoGe.Auction.mod 控制:
-- Core/Module/Auction.lua ~330
mods = {
normal = L["普通模式"],
anonymous = L["匿名模式"],
roll = L["roll点模式"],
}
BiaoGe.Auction.mod = BiaoGe.Auction.mod or "normal"
- 普通模式(normal):出价人显示真实名字。
- 匿名模式(anonymous):出价人显示为「别人(匿名)」,隐藏真实身份。
- roll 模式:仅作兼容,代码里会被强制转回 normal。
二、关键前提:必须第二代(gen == 2)
匿名模式只有在 BiaoGe.Auction.gen == 2 时才可用,否则下拉框里「匿名模式」是禁用的:
-- Core/Module/Auction.lua ~816
if BiaoGe.Auction.gen ~= 2 and mod == "anonymous" then
info.disabled = true
end
团长/ML 发起拍卖时,会把当前 gen 与 mod 一起广播出去。
三、发起拍卖:广播 StartAuction 消息
团长点击开始拍卖时,调用 BG.SendStartAuctionMsg,把 mod 写进消息体并发送:
-- Core/Module/Auction.lua ~348
function BG.SendStartAuctionMsg(isGen2, itemID, money, duration, mod, link, resetThreshold)
local channel, text
if isGen2 then
channel = BGA.aura_env.GetAddonChannelName()
text = format("StartAuction^%s^%s^%s^%s^^%s^%s^%s",
GetTime(), itemID, money, duration, mod, link, resetThreshold)
else
channel = "BiaoGeAuction"
text = format("StartAuction,%s,%s,%s,%s,,%s,%s",
GetTime(), itemID, money, duration, mod, link)
end
C_ChatInfo.SendAddonMessage(channel, text, "RAID")
end
注意第 5 段(^ 分隔)就是 mod,值为 "normal" 或 "anonymous",随消息广播给全团。
四、接收端:团员根据 mod 创建拍卖窗口
团员的插件收到 StartAuction 消息后,按消息里的 mod 创建拍卖窗口 f,窗口对象上的 f.mod 即等于收到的模式:
- 若
mod == "anonymous":该窗口按匿名渲染,出价人显示为「别人(匿名)」。 - 若
mod == "normal":显示真实出价人。
关键:匿名「显示替换」发生在每个团员自己的客户端显示层。WA 字符串(
Auction.lua末尾的!WA:2!...)读取f.mod,当其为"anonymous"时把出价人替换成「别人(匿名)」;拍卖结束后 WA 会显示真实名字。注意:拍卖竞价窗口本身由插件内置(
BGA.Frames)提供,不依赖手动导入 WA 光环。WA 字符串只是给那些「没装 BiaoGe 本体、只装了 WA」的人提供的兼容方案。只要装了表格插件本体,即可正常使用匿名拍卖。
五、团长 / ML 无视匿名
团长或物品分配者(RL/ML)在记账时不会受匿名影响,仍使用更可靠的交易记账看到真实出价人(见更新日志 v2.9:「匿名模式下团长现在可以无视匿名」)。这是插件内置逻辑,无需团员做任何事。
六、数据流总结
团长设置 mod=anonymous + gen=2
│
▼ C_ChatInfo.SendAddonMessage("RAID", "StartAuction^...^anonymous^...")
团员插件收到消息,创建 f,f.mod = "anonymous"
│
▼ WA / 内置窗口读取 f.mod
显示层:出价人 → "别人(匿名)";结束后显示真实名字
团长/ML:直接看到真实出价人(不受匿名影响)
七、相关文件
Core/Module/Auction.lua:模式定义、SendStartAuctionMsg广播、窗口创建BG.HookCreateAuction、WA 字符串。BiaoGe.Auction.mod/BiaoGe.Auction.gen:保存在角色存档里的当前模式与第二代标记。