local npc = {}
function npc.main(actor, param1, param2, param3, str)
sendluamsg(actor, 10713, 105, 1, 0, getplaydef(actor, "T88"))
end
local CharacterFashionMap = {
["[N]沈沧海-A"] = {"时装1_1","时装1_","[N]沈沧海"},
["[N]沈沧海-B"] = {"时装1_2","时装1_"
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-01 16:56:01 |
👁️ 阅读: 17
我是lua后端老师!
小仙,我来帮你为这段代码添加详细的注释,解释每一部分的作用。这段代码看起来是一个时装激活和穿戴系统的NPC脚本。
```lua
-- 定义一个NPC脚本模块
local npc = {}
-- NPC主函数,当玩家点击NPC时触发
-- actor: 玩家对象(字符串形式的玩家ID)
-- param1, param2, param3: 参数(通常由客户端传递)
-- str: 字符串参数
function npc.main(actor, param1, param2, param3, str)
-- 发送Lua消息给客户端,显示当前T88变量的值
-- 10713: 消息ID
-- 105: 子消息ID
-- 1: 操作类型
-- 0: 保留参数
-- getplaydef(actor, "T88"): 获取玩家的T88自定义变量值
sendluamsg(actor, 10713, 105, 1, 0, getplaydef(actor, "T88"))
end
-- 角色时装映射表
-- 键:角色时装名称(如"[N]沈沧海-A")
-- 值:包含三个元素的数组
-- 1. 时装标识(如"时装1_1")
-- 2. 时装前缀(如"时装1_")
-- 3. 角色基础名称(如"[N]沈沧海")
local CharacterFashionMap = {
["[N]沈沧海-A"] = {"时装1_1","时装1_","[N]沈沧海"},
["[N]沈沧海-B"] = {"时装1_2","时装1_","[N]沈沧海"},
["[N]沈沧海-C"] = {"时装1_3","时装1_","[N]沈沧海"},
["[N]沈沧海-D"] = {"时装1_4","时装1_","[N]沈沧海"},
["[N]沈沧海-E"] = {"时装1_5","时装1_","[N]沈沧海"},
["[N]谢必安-A"] = {"时装2_1","时装2_","[N]谢必安"},
["[N]谢必安-B"] = {"时装2_2","时装2_","[N]谢必安"},
["[N]谢必安-C"] = {"时装2_3","时装2_","[N]谢必安"},
["[N]谢必安-D"] = {"时装2_4","时装2_","[N]谢必安"},
["[N]谢必安-E"] = {"时装2_5","时装2_","[N]谢必安"},
["[N]范无救-A"] = {"时装3_1","时装3_","[N]范无救"},
["[N]范无救-B"] = {"时装3_2","时装3_","[N]范无救"},
["[N]范无救-C"] = {"时装3_3","时装3_","[N]范无救"},
["[N]范无救-D"] = {"时装3_4","时装3_","[N]范无救"},
["[N]范无救-E"] = {"时装3_5","时装3_","[N]范无救"},
["[N]李霜凌-A"] = {"时装4_1","时装4_","[N]李霜凌"},
["[N]李霜凌-B"] = {"时装4_2","时装4_","[N]李霜凌"},
["[N]李霜凌-C"] = {"时装4_3","时装4_","[N]李霜凌"},
["[N]李霜凌-D"] = {"时装4_4","时装4_","[N]李霜凌"},
["[N]李霜凌-E"] = {"时装4_5","时装4_","[N]李霜凌"},
["[N]金昭锋-A"] = {"时装5_1","时装5_","[N]金昭锋"},
["[N]金昭锋-B"] = {"时装5_2","时装5_","[N]金昭锋"},
["[N]金昭锋-C"] = {"时装5_3","时装5_","[N]金昭锋"},
["[N]金昭锋-D"] = {"时装5_4","时装5_","[N]金昭锋"},
["[N]金昭锋-E"] = {"时装5_5","时装5_","[N]金昭锋"},
["[R]陈浪屿-A"] = {"时装6_1","时装6_","[R]陈浪屿"},
["[R]陈浪屿-B"] = {"时装6_2","时装6_","[R]陈浪屿"},
["[R]陈浪屿-C"] = {"时装6_3","时装6_","[R]陈浪屿"},
["[R]陈浪屿-D"] = {"时装6_4","时装6_","[R]陈浪屿"},
["[R]陈浪屿-E"] = {"时装6_5","时装6_","[R]陈浪屿"},
["[R]苏汐瑶-A"] = {"时装7_1","时装7_","[R]苏汐瑶"},
["[R]苏汐瑶-B"] = {"时装7_2","时装7_","[R]苏汐瑶"},
["[R]苏汐瑶-C"] = {"时装7_3","时装7_","[R]苏汐瑶"},
["[R]苏汐瑶-D"] = {"时装7_4","时装7_","[R]苏汐瑶"},
["[R]苏汐瑶-E"] = {"时装7_5","时装7_","[R]苏汐瑶"},
["[SR]黄机刃-A"] ={ "时装8_1","时装8_","[SR]黄机刃"},
["[SR]黄机刃-B"] ={ "时装8_2","时装8_","[SR]黄机刃"},
["[SR]黄机刃-C"] ={ "时装8_3","时装8_","[SR]黄机刃"},
["[SR]黄机刃-D"] ={ "时装8_4","时装8_","[SR]黄机刃"},
["[SR]黄机刃-E"] ={ "时装8_5","时装8_","[SR]黄机刃"},
["[SR]白械羽-A"] ={ "时装9_1","时装9_","[SR]白械羽"},
["[SR]白械羽-B"] ={ "时装9_2","时装9_","[SR]白械羽"},
["[SR]白械羽-C"] ={ "时装9_3","时装9_","[SR]白械羽"},
["[SR]白械羽-D"] ={ "时装9_4","时装9_","[SR]白械羽"},
["[SR]白械羽-E"] ={ "时装9_5","时装9_","[SR]白械羽"},
["[SSR]神吕布-A"] = {"时装10_1","时装10_","[SSR]神吕布"},
["[SSR]神吕布-B"] = {"时装10_2","时装10_","[SSR]神吕布"},
["[SSR]神吕布-C"] = {"时装10_3","时装10_","[SSR]神吕布"},
["[SSR]神吕布-D"] = {"时装10_4","时装10_","[SSR]神吕布"},
["[SSR]神吕布-E"] = {"时装10_5","时装10_","[SSR]神吕布"},
["[SSR]神貂蝉-A"] = {"时装11_1","时装11_","[SSR]神貂蝉"},
["[SSR]神貂蝉-B"] = {"时装11_2","时装11_","[SSR]神貂蝉"},
["[SSR]神貂蝉-C"] = {"时装11_3","时装11_","[SSR]神貂蝉"},
["[SSR]神貂蝉-D"] = {"时装11_4","时装11_","[SSR]神貂蝉"},
["[SSR]神貂蝉-E"] = {"时装11_5","时装11_","[SSR]神貂蝉"},
["[SSSR]金·螭-A"] = {"时装12_1","时装12_","[SSSR]金·螭"},
["[SSSR]金·螭-B"] = {"时装12_2","时装12_","[SSSR]金·螭"},
["[SSSR]金·螭-C"] = {"时装12_3","时装12_","[SSSR]金·螭"},
["[SSSR]金·螭-D"] = {"时装12_4","时装12_","[SSSR]金·螭"},
["[SSSR]金·螭-E"] = {"时装12_5","时装12_","[SSSR]金·螭"}
}
-- NPC链接函数,处理客户端发送的请求
-- actor: 玩家对象
-- param1, param2, param3: 参数
-- str: 字符串参数(通常是角色时装名称或时装编号)
function npc.link(actor, param1, param2, param3, str)
-- param3 == 1: 激活时装操作
if param3 == 1 then
-- 获取玩家的T88变量值(存储时装激活状态)
local szbl = getplaydef(actor, "T88")
-- 检查该时装是否未激活(格式:时装标识:0)
if string.find(szbl, CharacterFashionMap[str][1]..":0") then
-- 尝试扣除对应时装道具(格式:角色时装名称#数量)
if takes(actor,str.."#"..1,0,0,"系统扣除") then
-- 构建旧字符串(未激活状态)和新字符串(已激活状态)
local oldStr = CharacterFashionMap[str][1]..":0"
local newStr = CharacterFashionMap[str][1]..":1"
-- 替换T88变量中的状态
local newSzbl, count = string.gsub(szbl, oldStr, newStr)
setplaydef(actor, "T88", newSzbl)
-- 发送更新后的状态给客户端
sendluamsg(actor, 10713, 105, 2, 0, newSzbl)
-- 发送成功激活提示消息
sendmsg(actor, 1, '{"Msg":"<font color=\'#ff0000\'>系统提示:</font><font color=\'#00FF00\'>恭喜您成功激活['.. str .. ']!</font>","Type":9}')
-- 统计该角色所有时装的激活数量
local szqtjc = 0
for i = 1, 5 do
if string.find(newSzbl, CharacterFashionMap[str][2].. i ..":1", 1, true) ~= nil then
szqtjc = szqtjc + 1
end
-- 先删除所有可能的称号
deprivetitle(actor,CharacterFashionMap[str][3].."·点亮-"..i)
end
-- 如果有时装激活,授予对应的称号
if szqtjc > 0 then
confertitle(actor,CharacterFashionMap[str][3].."·点亮-"..szqtjc,1)
end
else
-- 扣除道具失败,打印调试信息
release_print("扣除失败")
end
end
-- param3 == 2: 穿戴时装操作
elseif param3 == 2 then
-- 统计指定时装编号的所有部件激活数量
local szqtjc = 0
local testStr = getplaydef(actor, "T88")
for i = 1, 5 do
if string.find(testStr, "时装"..str.."_".. i ..":1", 1, true) ~= nil then
szqtjc = szqtjc + 1
end
end
-- 如果5个部件全部激活(集齐一套)
if szqtjc == 5 then
-- 删除当前穿戴的时装(位置17通常是时装位置)
delbodyitem(actor, 17)
-- 给予并穿戴新的时装
giveonitem(actor, 17, "时装"..str, 1)
-- 发送穿戴成功提示
sendmsg(actor, 1, '{"Msg":"<font color=\'#ff0000\'>系统提示:</font><font color=\'#00FF00\'>恭喜您成功穿戴时装!</font>","Type":9}')
end
end
end
-- 返回NPC模块,供引擎调用
return npc
```
**代码功能总结:**
1. **npc.main函数**:显示玩家当前的时装激活状态
2. **CharacterFashionMap映射表**:定义角色与时装部件的对应关系
3. **npc.link函数**:处理两个主要操作:
- **激活时装**:消耗道具激活单个时装部件,更新状态变量,授予称号
- **穿戴时装**:当集齐一套时装(5个部件)时,自动穿戴完整时装
**系统逻辑:**
- 使用T88变量存储时装激活状态(格式:时装X_Y:状态,0=未激活,1=已激活)
- 每个角色有5个时装部件(A-E),集齐一套后可穿戴完整时装
- 激活时装部件会授予对应的称号,称号等级随激活数量变化
小仙,这个脚本设计得挺有意思的,是一个完整的时装收集系统!如果你对某个具体函数或逻辑有疑问,随时问我哦!
← 返回问答库