tibaiwan1888 发表于 2026-6-5 00:06:45

装备洗练系统:锁定指定词条 + 消耗指数增长 + 最优词条记忆

本帖最后由 tibaiwan1888 于 2026-6-5 00:08 编辑

-- Reforge.lua
-- 支持锁定词条、消耗随次数指数增长、自动记录历史最优

local Identify = require("IdentifySystem")

local M = {}

-- 每次洗练的消耗计算(指数曲线,越洗越贵)
local BASE_COST = 100-- 基础消耗(元宝)
local COST_MUL= 1.3-- 每次乘以1.3

local function calcCost(times)
    return math.floor(BASE_COST * (COST_MUL ^ times))
end

-- 评分函数:根据词条value加权求和,用于比较优劣
local SCORE_WEIGHT = {
    atk=2.0, crit=2.5, pen=2.0, vamp=1.8,
    def=1.2, hp=1.0, all=1.5
}

local function scoreAffixes(affixes)
    local total = 0
    for _, a in ipairs(affixes) do
      local w = SCORE_WEIGHT or 1.0
      total = total + a.value * w
    end
    return total
end

-- 洗练会话:每个装备独立维护状态
function M.newSession(equip)
    return {
      equip       = equip,         -- 原始装备数据
      current   = equip.affixes, -- 当前词条
      best      = equip.affixes, -- 历史最优
      bestScore   = scoreAffixes(equip.affixes),
      times       = 0,             -- 已洗次数
      locked      = {},            -- 锁定的词条index集合
    }
end

-- 锁定/解锁某个词条槽位(index: 1~5)
function M.toggleLock(session, index)
    session.locked = not session.locked
end

-- 执行一次洗练
-- 返回 { newAffixes, cost, improved }
function M.reforge(session, quality)
    local cost = calcCost(session.times)
    session.times = session.times + 1

    -- 只重新鉴定未锁定的槽位
    local unlockCount = 0
    for i, a in ipairs(session.current) do
      if not session.locked then unlockCount = unlockCount + 1 end
    end

    -- 对未锁定位重新生成
    local newPart = Identify.identify(quality, unlockCount)
    local result= {}
    local newIdx= 1
    for i, a in ipairs(session.current) do
      if session.locked then
            table.insert(result, a)         -- 保留锁定词条
      else
            table.insert(result, newPart or a)
            newIdx = newIdx + 1
      end
    end

    session.current = result

    -- 更新最优记录
    local score    = scoreAffixes(result)
    local improved = score > session.bestScore
    if improved then
      session.best      = result
      session.bestScore = score
    end

    return { affixes = result, cost = cost, improved = improved, score = score }
end

-- 回滚到历史最优
function M.rollback(session)
    session.current = session.best
    return session.best
end






完整交互示例:

local Reforge= require("Reforge")
local Identify = require("IdentifySystem")

-- 玩家拥有一件史诗装备
local equip = {
    name    = "裂魂剑",
    quality = 4,
    affixes = Identify.identify(4),
}

local session = Reforge.newSession(equip)

print("=== 原始词条 ===")
for i, a in ipairs(session.current) do
    print(i .. ". " .. a.desc)
end

-- 玩家锁定第1、3条,只洗其余
Reforge.toggleLock(session, 1)
Reforge.toggleLock(session, 3)

-- 洗3次
for i = 1, 3 do
    local r = Reforge.reforge(session, 4)
    print(string.format("\n第%d次洗练 消耗:%d 得分:%.1f %s",
      i, r.cost, r.score, r.improved and "★最优" or ""))for j, a in ipairs(r.affixes) do
      local lock = session.locked and "[锁]" or "    "
      print(lock .. j .. ". " .. a.desc)
    end
end

-- 不满意,回滚到最优
local best = Reforge.rollback(session)
print("\n=== 已回滚到历史最优 ===")
for i, a in ipairs(best) do
    print(i .. ". " .. a.desc)
end

return M

qq154886255 发表于 2026-6-5 09:51:29

快了快了,马上就能用VV了

qq154886255 发表于 2026-6-5 10:11:42


快了快了,马上就能用VV了

jz9005 发表于 2026-6-5 10:26:26

快了快了,马上就能用VV了
页: [1]
查看完整版本: 装备洗练系统:锁定指定词条 + 消耗指数增长 + 最优词条记忆