课时 28 · 综合项目:狂暴之力
课时 28 · 综合项目:狂暴之力(功能开发实战):完整实现传奇经典功能,贯通服务端与客户端。示例跑在 996 新三端引擎里,接口按本地官方文档逐个核对。
本课的代码跑在 996 引擎里,用到的是服务端接口(changeexp、 SetInt 这类),在线运行器里没有这些函数。 每个函数的签名都能在 文档检索 里按名字查到原文。
本课目标
- 完整实现传奇经典功能,贯通服务端与客户端。
知识讲解
需求:狂暴之力——玩家支付货币购买限时增益,生效期间获得属性加成与特殊称号,到期自动失效并提醒。本案例贯通本章全部技能:触发与按钮双入口、余额检测、定时生效、属性加成、到期提醒。
实现要点:一、入口:NPC 点击触发(clicknpc)+ 客户端按钮事件(GUI/SL 事件,课时 30 展开);二、购买:querymoney 检测余额 → changemoney 扣除 → setontimer 挂生效定时器;三、生效:定时器回调内启用属性加成并提示;四、到期:定时器结束回调清除加成并全服/个人提醒。
示例:狂暴之力(核心)
local KUANGBAO_PRICE = 5000 -- 价格(货币 id=1)
local KUANGBAO_TIME = 3600 -- 持续 1 小时(秒)——setontimer 与 changehumability 都按秒
function clicknpc(actor, npcId, script)
if npcId ~= 5001 then return false end -- 狂暴使者
if GetInt(0, actor, 'kb_active') == 1 then
sendmsg(actor, 1, '{"Msg":"狂暴之力正在生效中","Type":1}')
return true
end
-- 余额检测
if querymoney(actor, 1) < KUANGBAO_PRICE then
sendmsg(actor, 1, '{"Msg":"货币不足","Type":1}')
return true
end
-- 购买并生效
changemoney(actor, 1, '-', KUANGBAO_PRICE, '购买狂暴之力', true)
SetInt(0, actor, 'kb_active', 1)
-- 5=攻击下限 6=攻击上限(接口/人物相关/调整人物属性)
-- 第 4 个参数是持续秒数,到点由引擎自动撤销,不需要自己写撤销逻辑
changehumability(actor, 5, 50, KUANGBAO_TIME)
changehumability(actor, 6, 50, KUANGBAO_TIME)
setontimer(actor, 9, KUANGBAO_TIME, 1) -- 只用来通知到期,属性不靠它清
sendcentermsg(actor, 180, 251, '狂暴之力已生效!', 0, 5)
return true
end
-- 到期回调
function ontimer9(actor)
SetInt(0, actor, 'kb_active', 0)
-- 属性已由 changehumability 的时限撤销,这里只清标记
sendmsg(actor, 1, '{"Msg":"狂暴之力已到期","Type":1}')
end
说明:属性增减用 changehumability(actor, 属性ID, 数值, 持续秒数)(接口/人物相关),属性 ID 表在文档正文里(5=攻击下限、6=攻击上限、11=MaxHP……);给了持续秒数就由引擎按时撤销,比手写「购买时加、到期时减」更不容易出错。
练习任务
- 完成狂暴之力完整版:① 购买时校验货币并防重复购买;② 到期自动清除加成且只清除一次;③ 增加到期前 30 秒提醒(第二个定时器);④ 补一个客户端入口(按钮点击,结合课时 30 知识,先写出按钮创建与事件注册骨架)。
参考:验收要点
- 生效期间重复点击 NPC 提示「正在生效中」;
- 到期后属性恢复、可再次购买;
- 到期前 30 秒有倒计时或提示;
- 客户端按钮与服务端 NPC 入口调用同一套购买逻辑。
知识讲解
本章接口来源:本地 showdoc 服务端 260831 文档;示例里的引擎接口已全部替换为文档中的真实函数名。变量用 SetInt、GetInt、SetStr、GetStr;属性用 changehumability;货币用 querymoney、changemoney;物品用 checkitems、takeitem、giveitem、getbagitemcount;经验用 changeexp。
- 《996 新三端 Lua 开发教学技术手册》课时 28
参数与取值以你本机版本的官方帮助文档为准,不同版本之间有过调整。