课时 24 · 装备合成系统

课时 24 · 装备合成系统(功能开发实战):实现带概率与失败处理的合成功能。示例跑在 996 新三端引擎里,接口按本地官方文档逐个核对。

教程/第四部分 · 功能开发实战更新于 2026-10-073 个小节 教程第 29 / 41 篇 功能实战

本课的代码跑在 996 引擎里,用到的是服务端接口(changeexp、 SetInt 这类),在线运行器里没有这些函数。 每个函数的签名都能在 文档检索 里按名字查到原文。

本课目标

  • 实现带概率与失败处理的合成功能。

知识讲解

需求:两件低级装备合成一件高级装备,成功率 80%,失败时材料消耗、返还部分碎片。核心流程:检测材料(checkitems)→ 扣除材料(takeitem)→ 概率判定(math.random)→ 成功发装备(giveitem)/失败给碎片 → 公告提示(sendmsg/sendcentermsg)。

示例:装备合成(核心)

local SUCCESS_RATE = 80   -- 成功率 80%
local MAT_NAME = '低级装备碎片'
local MAT_COUNT = 5
local TARGET_NAME = '高级装备'

function clicknpc(actor, npcId, script)
    if npcId ~= 3001 then return false end

    -- 1. 检测材料
    local ok = checkitems(actor, MAT_NAME .. '#' .. MAT_COUNT, 0, 0)
    if not ok then
        sendmsg(actor, 1, '{"Msg":"材料不足,需要 ' .. MAT_COUNT .. ' 个' .. MAT_NAME .. '","Type":1}')
        return true
    end

    -- 2. 扣除材料
    takeitem(actor, MAT_NAME, MAT_COUNT, 0, '装备合成')

    -- 3. 概率判定
    math.randomseed(os.time())
    if math.random(1, 100) <= SUCCESS_RATE then
        giveitem(actor, TARGET_NAME, 1)
        sendmsg(actor, 1, '{"Msg":"合成成功!获得 ' .. TARGET_NAME .. '","Type":1}')
    else
        giveitem(actor, '合成碎片', 1)
        sendmsg(actor, 1, '{"Msg":"合成失败,返还 1 个合成碎片","Type":1}')
    end
    return true
end

说明:成功装备若需继承材料属性(属性继承),请在 giveitem 后查 接口\物品操作 目录的「修改物品自定义属性」类接口补充;概率与材料配置应放入脚本顶部配置区,便于后续调整。

练习任务

  • 完善合成系统:① 增加「材料不足」「成功率提示」文案;② 把成功率与材料配置提取为表;③ 加全服公告(sendmsg type=2)提示极品合成成功。

参考:验收要点

  • 材料检测与扣除数量一致,失败时材料不扣除;
  • 成功/失败两条分支都有反馈;
  • 全服公告仅在成功时发送,失败不刷屏;
  • 连续合成 100 次统计成功率接近 80%。
本篇依据
  • 《996 新三端 Lua 开发教学技术手册》课时 24

参数与取值以你本机版本的官方帮助文档为准,不同版本之间有过调整。