我想将两个不同的魔兽世界事件联系在一起。我需要来自两个事件的一些信息,并将它们存储在一个简单的表中。同样重要的是,如果第一个事件被触发,第二个事件的数据仅存储 !
在我的情况下,它是来自COMBAT_LOG_EVENT_UNFILTERED的生物的名称以及从COMBAT_TEXT_UPDATE获得的声望。 只有通过杀死一个生物才能存储声誉。我目前正在使用临时表来链接它们。它存储第一个事件的名称,并在第二个事件中可读。这是简化的代码:
nehFragger_ReputationDB = {} -- The actual database for my AddOn.
local tempKillLog = {} -- A table that I use to link the different events.
function nehFraggerFrame_OnLoad(frame)
frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
frame:RegisterEvent("COMBAT_TEXT_UPDATE")
end
function nehFraggerFrame_OnEvent(frame, event, ...)
local arg1, eventType, arg3, arg4, sourceName, arg6, arg7, destGUID, destName = select(1, ...)
if (event == "COMBAT_LOG_EVENT_UNFILTERED") then
if (eventType == "PARTY_KILL") then
tempKillLog.creatureGUID = destGUID -- The unique identifier of the creature.
tempKillLog.creatureName = destName -- The creature name that I need.
end
end
local eventType, faction, reputation = select(1, ...)
if (event == "COMBAT_TEXT_UPDATE") then
if (eventType == "FACTION") then
local GUID = TempKillLog.creatureGUID
if (string.upper(string.sub(GUID, 1 , 8)) == "CREATURE") then -- Make sure the link-table data really is a creature.
local creatureName = tempKillLog.creatureName -- The name from my link-table.
local reputationGain = reputation -- The reputation that I need.
-- Simply store the stuff to the database table for this faction:
nehFragger_ReputationDB[faction] = {}
nehFragger_ReputationDB[faction].creatureName = creatureName
nehFragger_ReputationDB[faction].reputationGain = reputationGain
end
end
end
end
这有点...... (见下文)有几个问题。
我的问题是:
是否有可能
- 为一般的不同事件的来源(例如destGUID
COMBAT_LOG_EVENT
)获取一些唯一标识符以连接这些事件
- 或者是否有更简单的方法来获得杀戮的声誉(包括生物和声誉信息),就像我的AddOn一样?
需要考虑的其他事项:
我还尝试在两个事件中使用当前时间来检查这些是否在0.01秒内被触发。这会消除我遇到的大量问题,但在某些情况下仍然会失败。例如,如果你通过杀死一个生物完成这些新的军团世界任务中的一个,然后获得任务本身的声誉。这仍然在时间范围内,无论它有多小。
另一个问题是,如果你一次杀死多个(比方说5个)生物,那么第一个事件COMBAT_LOG_EVENT_UNFILTERED
会先连续发射5次,然后第二个事件COMBAT_TEXT_UPDATE
会发射5次。在这种情况下,我nehFragger_ReputationDB
中的所有5个日志都获得了正确的声望,但所有这些日志都被杀死/处理了最后一个生物的名字...
我真的想使用GUID
两个事件来链接它们,但是我无法得到第二个事件之一 - 如果存在一个事件。在我看来,这将是最清洁,最安全的方式
或者,就像已经提到的那样,为此专门举办魔兽世界。但我找不到一个。
我希望有人可以在这里帮助我,或者提供一些思考的食物。