You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Lua实现字符串随机或按名称列表循环变更?

实现字符串的随机/列表驱动式内存替换

针对你的需求,我们可以从两种场景修改原脚本:从指定列表中随机选取替换字符串,或是生成完全随机的字符串,以下是具体实现:

一、基于指定名称列表随机变更

先定义一个包含所有候选字符串的列表,每次替换时随机从中选取一项:

-- 初始化随机数种子(确保每次运行随机结果不同)
math.randomseed(os.time())

-- 定义要替换的目标字符串列表
local string_to_find = 'o(*_*)o'
local replacement_list = {
    '^1o(*_*)o',
    '^2(^_^)',
    '^3(*^_^*)',
    '^4o_O',
    '^5(-_-;)'
}

ms = createMemScan()
ms.firstScan(soExactValue, vtString, 0, string_to_find, "" , 0, 0xffffffffffffffff, "", fsmNotAligned, "1", false, false, false, false)
ms.waitTillDone()

f=createFoundList(ms);
f.initialize();

for i = 0, f.Count - 1 do
    -- 从列表中随机选取一个替换字符串
    local random_str = replacement_list[math.random(#replacement_list)]
    writeString(f.Address[i], random_str)
    -- 保留原脚本的终止符写入逻辑
    writeBytes(("0x" .. f.Address[i]) + 4, 0)
end

f.destroy()
ms.destroy()

关键修改点:

  • 添加math.randomseed(os.time())初始化随机数生成器,避免每次随机结果重复
  • 用replacement_list存储所有可选的替换字符串
  • 在循环中通过math.random(#replacement_list)随机获取列表索引,选取对应字符串

二、生成完全随机的字符串

如果需要无规则的随机字符串,可以编写一个随机字符串生成函数,自定义字符集和长度:

math.randomseed(os.time())

local string_to_find = 'o(*_*)o'

-- 生成随机字符串的函数:指定长度和可选字符集
function generateRandomString(length, char_set)
    -- 默认字符集:包含字母、数字和常用表情符号
    char_set = char_set or 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789(*_^)o_O^~'
    local result = ''
    for _ = 1, length do
        -- 随机选取字符集中的一个字符
        local rand_index = math.random(#char_set)
        result = result .. char_set:sub(rand_index, rand_index)
    end
    return result
end

ms = createMemScan()
ms.firstScan(soExactValue, vtString, 0, string_to_find, "" , 0, 0xffffffffffffffff, "", fsmNotAligned, "1", false, false, false, false)
ms.waitTillDone()

f=createFoundList(ms);
f.initialize();

for i = 0, f.Count - 1 do
    -- 生成长度为8的随机字符串(可自定义长度)
    local random_str = generateRandomString(8)
    writeString(f.Address[i], random_str)
    writeBytes(("0x" .. f.Address[i]) + 4, 0)
end

f.destroy()
ms.destroy()

关键修改点:

  • 新增generateRandomString函数,支持自定义字符集和字符串长度
  • 循环中调用函数生成随机字符串,替换固定的目标字符串

注意事项

  • 如果是在Cheat Engine中运行脚本,确保math.randomseed的初始化逻辑正常(部分环境可能需要额外处理随机种子)
  • 原脚本中的writeBytes(("0x" .. f.Address[i]) + 4, 0)是针对特定内存结构的终止符写入,若你的目标字符串长度变化,可能需要调整偏移量+4的数值,避免破坏内存结构

内容的提问来源于stack exchange,提问作者Manuel Castro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 05:35:00