Lua 哇,Weakaruas跟踪多个敌军单位

Lua 哇,Weakaruas跟踪多个敌军单位,lua,lua-table,world-of-warcraft,Lua,Lua Table,World Of Warcraft,在《魔兽世界》中,我已经研究了一段时间Weakaura,它将跟踪玩家损坏的敌方单位数量。这遇到的一个主要问题是,在团队中,未经过滤的战斗日志事件会强制光环在团队中的任何人执行动作时触发,这可能会导致大量的帧丢失。我唯一能遇到的另一个选择是战斗日志事件,但是它不会在敌人死亡时触发,因此不会从列表中删除 我的问题:有没有办法在UI线程以外的线程上收集这些数据,以防止丢失帧?在另一个线程上收集此数据时,数据是否能够用于向用户显示信息 以下是当前使用的触发器(这些触发器都按预期工作) 触发1 类型-自定

在《魔兽世界》中,我已经研究了一段时间Weakaura,它将跟踪玩家损坏的敌方单位数量。这遇到的一个主要问题是,在团队中,未经过滤的
战斗日志事件
会强制光环在团队中的任何人执行动作时触发,这可能会导致大量的帧丢失。我唯一能遇到的另一个选择是
战斗日志事件
,但是它不会在敌人死亡时触发,因此不会从列表中删除

我的问题:有没有办法在UI线程以外的线程上收集这些数据,以防止丢失帧?在另一个线程上收集此数据时,数据是否能够用于向用户显示信息

以下是当前使用的触发器(这些触发器都按预期工作)

触发1

类型-自定义

事件类型-事件

事件-战斗日志事件未过滤

自定义触发器:

function(...)
    ADDS = ADDS or {}; -- Where enemy units are stored

    local _, _, event, _, src, _, _, _, dest, _, _, _ = select(1, ...);
    local player = UnitGUID("player");

    -- Attempts to only read data coming from the player casting harmful abilities
    if ((event == "SPELL_DAMAGE") and (src == player)) then

        -- Checks if the enemy unit is already being tracked and that it is NOT
        -- a part of your group (prevents friendly fire events from adding a friendly
        -- unit to this list)
        if ((not tContains(ADDS, dest)) and (not tContains(GROUP, dest))) then
            table.insert(ADDS, dest);
        end
    elseif event=="UNIT_DIED" then -- Remove a unit if it has died
        for i = #ADDS, 1, -1 do
            if ADDS[i] == dest then
                table.remove(ADDS, i);
            end
        end
    end

    return true;
end
上述代码块是帧被丢弃的原因。下一个触发器仅仅是在战斗开始或结束时重置列表的一种方法(非常确定的是,此块中没有任何内容会导致帧丢失,但希望将其包括在内以防万一)

触发2

类型-自定义

事件类型-事件

事件-禁用玩家恢复,启用玩家恢复

function(...)
    GROUP = GROUP or {};

    local size = GetNumGroupMembers();

    if (size == 0) then
        GROUP = {};
    end

    if (size ~= #GROUP and size ~= 0) then
        for i = 1, size do
            local name = GetRaidRosterInfo(i);

            if (name ~= nil) then
                local guid = UnitGUID(name);

                if (not tContains(GROUP, guid)) then
                    table.insert(GROUP, guid);
                end
            end
        end
    end

    ADDS = {};
    return true;
end