根据浮生梦老师前端课程内容,你的代码问题在于获取称号数据的方式不正确。
**问题分析:**
1. `SL:GetMetaValue("TITLES")` 返回的是称号数据表,不是单个称号的状态
2. 不能直接通过称号名称作为参数获取单个称号状态
**正确获取方式:**
```lua
-- 获取所有称号数据
local titleListData = SL:GetMetaValue("TITLES") --称号数据
-- 将哈希表转换为数组进行遍历
local titleList = SL:HashToSortArray(titleListData, function(a, b)
return a.index < b.index
end)
if not titleList then
titleList = {}
end
```
**修改你的 hasTitle 函数:**
```lua
function baixiaosheng.hasTitle(titleName)
-- 获取所有称号数据
local titleListData = SL:GetMetaValue("TITLES")
if not titleListData then
return false
end
-- 遍历称号数据查找指定称号
local titleList = SL:HashToSortArray(titleListData, function(a, b)
return a.index < b.index
end)
for _, titleData in ipairs(titleList) do
-- 获取称号名称进行比较
local name = SL:GetMetaValue("ITEM_NAME", titleData.id)
if name == titleName then
return true
end
end
return false
end
```
**或者更简单的方式(通过称号ID判断):**
```lua
function baixiaosheng.hasTitle(titleId)
local titleListData = SL:GetMetaValue("TITLES")
if not titleListData then
return false
end
-- 直接检查称号ID是否存在
return titleListData[titleId] ~= nil
end
```
**建议修改:**
1. 使用称号ID而不是名称进行判断
2. 先获取所有称号数据,再遍历查找
3. 参考官方示例中的称号处理逻辑
**示例参考(来自课程资料):**
```lua
-- 获取激活的称号
local activateId = SL:GetMetaValue("ACTIVATE_TITLE")
-- 获取所有称号数据
local titleListData = SL:GetMetaValue("TITLES")
-- 处理称号列表
local titleList = SL:HashToSortArray(titleListData, function(a, b)
return a.index < b.index
end)
```
这样修改后,你的代码就能正确检测玩家是否拥有指定称号了。