装备洗练系统:锁定指定词条 + 消耗指数增长 + 最优词条记忆
本帖最后由 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
快了快了,马上就能用VV了
快了快了,马上就能用VV了 快了快了,马上就能用VV了
页:
[1]