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

如何优化DCSS法术训练脚本,实现仅训练单个记忆法术?

DCSS RC脚本优化:单法术优先训练,停止其他法术训练

你的问题根源是每个法术的训练逻辑独立触发,导致多个法术同时拉动不同学派的训练,分散了训练效率。下面是修改后的完整脚本,核心思路是统一管理所有待训练法术,选出最急需的那个集中训练,其他所有相关学派先停掉:

修改后的完整代码

-- 所有法术训练配置列表:{法术名, 学派A, 学派B, 学派C, 失败阈值}
local spellTrainingList = {
    {"Passwall", "Earth Magic", "Earth Magic", "Earth Magic", 1},
    {"Mephitic Cloud", "Conjurations", "Air Magic", "Alchemy", 5},
    {"Ensorcelled Hibernation", "Hexes", "Ice Magic", "Ice Magic", 1},
    {"Corpse Rot", "Air", "Necromancy", "Poison", 5},
    -- 把你剩下的20+个法术配置补充到这里
}

function ready()
    -- 初始化逻辑,可留空或添加其他初始化操作
end

-- 辅助函数:找出当前法术成本最低的最优训练学派
local function getBestSchoolForSpell(schoolA, schoolB, schoolC)
    local costA = tonumber(you.skill_cost(schoolA))
    local costB = tonumber(you.skill_cost(schoolB))
    local costC = tonumber(you.skill_cost(schoolC))
    
    local minCost = math.min(costA, costB, costC)
    if costA == minCost then
        return schoolA
    elseif costB == minCost then
        return schoolB
    else
        return schoolC
    end
end

-- 主逻辑:仅训练优先级最高的单个法术,停止其他所有学派训练
local function trainSingleSpellOnly()
    -- 1. 收集所有符合训练条件的法术:已记忆且失败率超过设定阈值
    local candidateSpells = {}
    for _, spellConfig in ipairs(spellTrainingList) do
        local spellName, schoolA, schoolB, schoolC, failChance = unpack(spellConfig)
        if spells.memorised(spellName) and spells.fail(spellName) > failChance then
            table.insert(candidateSpells, {
                name = spellName,
                bestSchool = getBestSchoolForSpell(schoolA, schoolB, schoolC),
                failRate = spells.fail(spellName)
            })
        end
    end

    -- 2. 没有符合条件的法术时,停止所有相关学派训练
    if #candidateSpells == 0 then
        local allSchools = {}
        for _, spellConfig in ipairs(spellTrainingList) do
            allSchools[spellConfig[2]] = true
            allSchools[spellConfig[3]] = true
            allSchools[spellConfig[4]] = true
        end
        for school, _ in pairs(allSchools) do
            you.train_skill(school, 0)
        end
        return
    end

    -- 3. 选出最急需训练的法术:这里按失败率从高到低排序,可改为按配置的优先级
    table.sort(candidateSpells, function(a, b)
        return a.failRate > b.failRate
    end)
    local selectedSpell = candidateSpells[1]

    -- 4. 先停止所有相关学派的训练,避免同时训练多个
    local allSchools = {}
    for _, spellConfig in ipairs(spellTrainingList) do
        allSchools[spellConfig[2]] = true
        allSchools[spellConfig[3]] = true
        allSchools[spellConfig[4]] = true
    end
    for school, _ in pairs(allSchools) do
        you.train_skill(school, 0)
    end

    -- 5. 仅给选中法术的最优学派开启训练
    you.train_skill(selectedSpell.bestSchool, 1)
end

-- 执行主训练逻辑
trainSingleSpellOnly()

关键修改说明

  • 统一配置管理:把分散的SetSpellTraining改成数组存储,方便后续遍历和维护所有法术配置。
  • 单法术优先级选择:先筛选出需要训练的法术,按失败率(可自行改为配置的优先级)选出最急需的那个,确保集中资源训练。
  • 全局停训再开启:先停止所有相关学派的训练,再只给选中的法术开启最优学派训练,彻底避免多法术同时训练的情况。
  • 兼容原有逻辑:最优学派的选择逻辑和你原来的代码一致,保证训练收益最大化。

内容的提问来源于stack exchange,提问作者IK IDK everything

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:38:21