插件(WoW,Lua)引起了致命错误。

这个插件在聊天中搜索特定的单词,然后将它们发送到指定的聊天框。它很有效,但是随机出现错误并导致游戏崩溃。

此应用程序遇到了关键错误:
ERROR #132 (0x85100084) Fatal Exception
Program: C:\WoW\Wow.exe
Exception: 0xC0000005 (ACCESS_VIOLATION) at 0023: 00416DB0

“0x00416DB0”处的指令引用了“0x1F97FFFE”处的内存。
无法读取内存。

它崩溃后,我打开 CheatEngine 浏览该区域,看看里面有什么。

1F97FFFE: http://i.imgur.com/D7XKi2D.jpg
00416DB0: http://i.imgur.com/duTM315.jpg

下面是插件代码:

--事件 CHAT_MSG_CHANNEL
if event == "CHAT_MSG_CHANNEL" then
    if TriggerEnabled then
        local arg1 = string.lower(arg1)
        local found, dump = false, false

        for k,v in pairs(lsus.Triggers) do
            if not found then
                for k,v in pairs(lsus.NegTriggers) do
                    if (string.find(arg1, v)) then
                        dump = true
                    end
                end

                if (string.find(arg1, v)) and not dump then
                    local output = " [\124Hplayer:" .. arg2 .. ":1:WHISPER\124h" .. arg2 .. "\124h\124r]: " .. arg1:gsub(v, "\124c0000FF00\124h" .. string.upper(v) .. "\124h\124r")
                    print(output, 0.41, 0.80, 0.94)
                    found = true
                end
            end
        end
    end
end

--打印函数
function print(msg, r, g, b)
    if not r then
        ChatFrame1:AddMessage(msg)
    else
        ChatFrame1:AddMessage(msg, r, g, b)
    end
end

谁能帮我解决这个导致游戏崩溃的问题?

点赞
用户1847592
用户1847592

也许这不是你的情况,但是尝试使用 string.find(arg1, v, 1, true) 而不是 string.find(arg1, v) 来避免由于模式中的魔法字符导致的意外行为。

-- 示例:
local str = 'string.find hangs on this string'
string.find(str, '.*.*.*.*.*.*.*.*.*.*.*#')
2013-03-05 21:17:41