如何让这个脚本不那么卡? lua

我正在开发一个混淆器,但是当我添加字符串解码算法时,由于以下脚本,它会变得非常卡顿:

local addEnc = ""
local shouldAdd = true
newScript:gsub(".", function(c)
    if c == ")" then
        if shouldAdd == true then
            addEnc = addEnc .. ")" .. MyAlgorithm
            shouldAdd = false
        else
            addEnc = addEnc .. c
        end
    else
        addEnc = addEnc .. c
    end
end)

这个脚本处理小些的脚本还好,但是当您混淆真正大的脚本时,它会花费很长时间。因此,基本上这个脚本在第一个)之后添加了解码算法。是否有任何方法可以使其不再那么卡?

点赞
用户14274597
用户14274597

您正在浏览整个字符串,仅仅为了将某个东西连接到第一个“)”之后。 您可以使用newScript:find('%)')来查找第一个“)”的位置,然后简单地连接这些部分:

local index = newScript:find'%)'return newScript:sub1,index).. MyAlgorithm..newScript :sub(index + 1

%)中的是因为它是Lua字符串模式中的特殊字符。另外,您可以使用:find(')',1,true)来禁用模式匹配并使用严格的查找。

2021-07-29 17:15:33
用户7396148
用户7396148

你正在使用 gsub 进行其标准用途,但方式非常非标准。

相比使用函数,你可以直接这样写:

newScript:gsub('%)', ')' .. MyAlgorithm, 1)

这里的 1 可以防止 gsub 继续将 ) 替换为 ")" .. MyAlgorithm


示例

newScript = "((hello)!)"
MyAlgorithm = "world"

print(newScript:gsub('%)', ')' .. MyAlgorithm, 1))

输出

((hello)world!)

2021-07-29 17:43:12