如何让其他团员看到的你”蓝龙永远显示没打过(无CD)

蓝龙CD同步_如何伪装

本文说明一种”伪装”修改:让你在团队中广播给队友的蓝龙(世界BOSS)CD 状态固定为”无CD”,无论你本地实际打没打过。队友的显示完全来自你广播的 cd^bossID:num 消息里的值(1 = 有CD,0 = 无CD),因此只需改动你发出去的数据即可,本地 RaidCD 是否真的有CD 不影响队友所见。

说明:以下为修改思路与示例代码,未直接改动源码。需要生效时再按指示编辑 Core/Module/WorldBossCD.lua

1. 唯一需要改动的位置

Core/Module/WorldBossCD.lua 里的 GetWorldBossCDMsg() 函数,约第 334–348 行:

function GetWorldBossCDMsg()
    if BiaoGe[FBCD][realmID][player] then
        for k, v in pairs(BiaoGe[FBCD][realmID][player]) do
            if v.isWorldBoss then
                local bossID = v.fbId
                bossInfo[bossID] = 1   -- ← 这一行决定广播值(有CD)
            end
        end
    end
    local msg = "cd^"
    for bossID, num in pairs(bossInfo) do
        msg = msg .. bossID .. ":" .. num .. ","
    end
    return msg
end

bossInfo 在初始化时所有世界BOSS(蓝龙=116、卡扎克=117、末日行者=119、末日领主=118)都默认是 0,只有这里把”有CD”的条目设成 1。因此控制广播值的就是 bossInfo[bossID] = 1 这一行。

2. 方案 A:只伪装蓝龙(其他 BOSS 仍如实显示)

bossInfo[bossID] = 1 改成按 bossID 判断,遇到蓝龙(116)强制为 0:

if v.isWorldBoss then
    local bossID = v.fbId
    bossInfo[bossID] = (bossID == 116) and 0 or 1
end

效果:无论你打没打过蓝龙,队友那边蓝龙都显示”无CD”;卡扎克、末日行者、末日领主卡扎克照常显示你的真实状态。

3. 方案 B:所有世界 BOSS 都伪装成没打过

直接把 bossInfo[bossID] = 1 改成 bossInfo[bossID] = 0,或者直接删掉这行赋值(因为初始化本就是 0)。效果是你对所有队友来说,全部世界BOSS都显示”无CD”。

4. 对自己本地面板的影响与可选修改

上述改动只影响发送出去的数据。队友端 CHAT_MSG_ADDON 解析后 BG.worldBossRaidCD[sender][bossID] = 0,按钮显示绿底”无CD”,完全达成目的。

自己面板的显示由 UpdateMyWorldBossCD()(约第 366–372 行)用本地 bossInfo 渲染,不受广播值影响:

local function UpdateMyWorldBossCD()
    GetWorldBossCDMsg()
    for bossID, cd in pairs(bossInfo) do
        BG.worldBossRaidCD[player] = BG.worldBossRaidCD[player] or {}
        BG.worldBossRaidCD[player][bossID] = cd
    end
end
  • 如果你自己也想让本地面板把自己看成”无CD”,把 UpdateMyWorldBossCD() 里同样的赋值逻辑也改成 0 即可(其实它调用了 GetWorldBossCDMsg(),只要方案 A/B 已生效,本地 bossInfo 也会是 0,本地面板自然跟着显示无CD,通常无需额外改)。
  • 如果你只想”骗队友”而自己仍想看到真实状态,则不改动 UpdateMyWorldBossCD 的本地逻辑即可(注意它复用 GetWorldBossCDMsg,若要本地真实、对外伪装,需把对外广播与本地渲染拆成两套 bossInfo 来源,见第 6 节进阶)。

5. 生效范围与触发

  • 进团时的 VersionCheck 回复、人数变化的 GROUP_ROSTER_UPDATE 重发、本地世界BOSS变化时的补发,都会走同一个 GetWorldBossCDMsg(),所以改这一处即全局生效,无需动其它发送逻辑。
  • 队友若已在线,重发后会立即刷新;新进团的队友会在 VersionCheck 后收到你的伪装数据。

6. 进阶:做成可随时切换的开关(可选)

如果以后想随时在”真实 / 伪装”之间切换,而不是写死,可加一个本地变量控制这行赋值,例如:

-- 在合适的位置定义,例如 BG.Init 内
BiaoGe.fakeBlueDragonNoCD = BiaoGe.fakeBlueDragonNoCD or false

然后:

if v.isWorldBoss then
    local bossID = v.fbId
    if bossID == 116 and BiaoGe.fakeBlueDragonNoCD then
        bossInfo[bossID] = 0
    else
        bossInfo[bossID] = 1
    end
end

再在选项界面加一个勾选框绑定 BiaoGe.fakeBlueDragonNoCD,即可通过界面开关控制是否伪装。这属于功能增强,基础需求只改第 2 / 3 节那一行即可满足。

注意事项

  • 该伪装仅改变团队内插件显示的 CD 状态,不会也不能改变游戏服务器真实的副本锁定记录。
  • 仅 titan / 60 服版本启用此功能(文件头 if not BG.IsTitan then return end),其它版本无此模块。
  • 修改后建议 /reload 重载界面,并在团队中确认队友侧显示符合预期。