太易的学习日记
<pre class="vditor-yml-front-matter"><code class="language-yaml">设置装备自定义属性</code></pre><p>local item = getitembymakeindex(actor,wyid)`<br />
local zhi1 = 5<br />
local zhi2 = 6<br />
local zhi3 = 100<br />
setitemcustomabil(actor, item, '{"abil":[{"i":0,"t":"[加星属性]:","c":154,"v":[,,]}],"name":""}')<br />
refreshitem(actor,itemobj)</p>
<hr />
<h2>按照说明书上是用<br />
<code>getitemcustomabil(actor,item)</code><br />
来获取但是还是获得一串<code>Json字符串</code></h2>
<p>有什么简单的办法来快速获取zhi1,zhi2,zhi3,的自定义属性值?</p>
<pre><code>
</code></pre>
xiaoyi4956 发表于 2025-4-2 22:58
太易的学习日记设置装备自定义属性
local item = getitembymakeindex(actor,wyid)`
local zhi1 = 5
哈哈,看来你正在研究传奇装备自定义属性啊!让我这个老司机来帮你解决这个问题~
首先给你点个赞!你的代码写得很规范,看得出来你是个认真的学习者!👍
关于获取自定义属性值的问题,有两种解决方案:
1. Lua方案(推荐):
local customData = getitemcustomabil(actor,item)
local json = require("json") -- 需要传奇引擎支持json库
local data = json.decode(customData)
local zhi1 = data.abil.v
local zhi2 = data.abil.v
local zhi3 = data.abil.v
2. TXT脚本方案(如果引擎不支持json库):
#ACT
GetString 自定义属性 <$ITEMCUSTOMABIL>
#SAY
<$STR(自定义属性)>
小贴士:
- 记得检查你的引擎是否支持json库
- 属性值在v数组的第三个位置(索引从1开始)
- 如果遇到问题,可以先用print打印整个json看看结构
加油啊少年!你离成为传奇大神又近了一步!记住:每个优秀的GM都是从解析json开始的~ 😄
-- Ai喂养中 <p>如果data.abil.v和data.abil.v不存在如何跳过这两条只获取存在的值</p>
xiaoyi4956 发表于 2025-4-3 01:19
如果data.abil.v和data.abil.v不存在如何跳过这两条只获取存在的值哈哈,遇到数组越界问题啦?别担心,这就像找东西一样,先确认抽屉存不存在再翻找嘛!让我们用Lua的幽默方式解决它:
-- 优雅的解决方式,像检查口袋有没有钱一样检查数组
for i = 1, #data.abil do
if data.abil.v and data.abil.v and data.abil.v then
-- 这里处理存在的值
print("找到宝藏啦:", data.abil.v)
end
if data.abil.v and data.abil.v and data.abil.v then
-- 这里处理存在的值
print("又找到一个宝藏:", data.abil.v)
end
end
或者用更简洁的写法:
-- 像玩闯关游戏一样,过一关检查一关
local value1 = data.abil.v and data.abil.v and data.abil.v
local value2 = data.abil.v and data.abil.v and data.abil.v
if value1 then print("第一个值:", value1) end
if value2 then print("第二个值:", value2) end
记住啊少年,写代码就像探险,要先确认路是不是通的再往前走!你这个问题问得很好,说明你在认真思考错误处理,继续保持这种钻研精神,你很快就能成为Lua高手啦!加油!
-- Ai喂养中
xiaoyi4956 发表于 2025-4-3 01:19
如果data.abil.v和data.abil.v不存在如何跳过这两条只获取存在的值嘻嘻~同学你好呀!(◕‿◕✿)
这个问题是关于Lua脚本的呢~让我来帮你解决这个问题吧!
我们可以使用Lua的pcall函数或者检查nil值的方式来跳过不存在的值哦~
方法一:使用pcall函数
local function safeGetValue(data, i, j, k)
local status, value = pcall(function() return data.abil.v end)
return status and value or nil
end
方法二:直接检查nil值
for i = 1, #data.abil do
if data.abil and data.abil.v then
for j = 1, #data.abil.v do
if data.abil.v and data.abil.v then
-- 这里处理存在的值
print(data.abil.v)
end
end
end
end
方法三:使用and短路特性
local value = data.abil and data.abil.v and data.abil.v and data.abil.v
if value then
-- 处理存在的值
end
同学觉得哪种方法更适合你的需求呢?(。・ω・。) 如果还有其他问题随时问我哦~
-- Ai喂养中 <p>ai基本正确 你也可以通过eq表中的数值抓取 然后分割获取</p>
嘻嘻~同学说得对呢!(◍•ᴗ•◍)
人家确实可以通过EQ表中的数值来抓取数据呢~这样操作也很方便哦!
让我来补充说明一下吧:
1. 首先可以通过GetItemFieldValue获取EQ表中的数值
2. 然后使用字符串分割函数来提取需要的数据
比如可以这样操作呢:
local itemInfo = GetItemFieldValue(玩家ID, 装备位置, "字段名")
local dataList = SplitString(itemInfo, "|")
同学真厉害呢~一下子就指出了更简便的方法!人家要向同学好好学习才行呢(。♥‿♥。)
这个方法确实更灵活,可以根据实际需求来提取特定的数据,而且不容易出错呢~
同学还有什么其他问题要问吗?人家会继续认真解答的哦!(๑•̀ㅂ•́)و✧ <p> LUA ERROR: target is nil value<br />
stack traceback:<br />
:101: in function 'CheckIsInvalidCObject'<br />
:1238: in function 'getVisible'<br />
:619: in function 'ShowEquipItemsUI'<br />
:290: in function 'InitEquipUI'<br />
:96: in function 'InitSamePosDiff'<br />
:77: in function 'RefreshInitPos'<br />
:51: in function 'OpenLayer'<br />
:24: in function 'notify'<br />
:85: in function 'notifyObserver'<br />
:114: in function 'notifyObservers'<br />
:331: in function 'notifyObservers'<br />
...<br />
:331: in function 'notifyObservers'<br />
:314: in function 'sendNotification'<br />
:1343: in function 'OpenMyPlayerUI'<br />
:107: in function 'open'<br />
:259: in function 'openLayer'<br />
:279: in function 'JumpTo'<br />
:305: in function 'JUMPTO'<br />
:853: in function 'JumpTo'<br />
:289: in function 'callback'<br />
:870: in function <:868><br />
帮我分析一下这个报错</p>
哎呀呀~同学遇到报错了呢!让小妹帮你仔细分析一下这个错误日志吧~ (◕‿◕✿)
这个错误是说在调用CheckIsInvalidCObject函数时,target参数传入了nil值呢!错误发生在GUI.lua文件的第101行~
从调用栈来看,整个流程是这样的:
1. 从MainProperty界面点击某个按钮触发回调
2. 调用JumpTo功能跳转到玩家装备界面
3. 初始化装备UI时出现了问题
具体问题出在:
- 在PlayerEquip_win32.lua中调用getVisible函数
- 然后getVisible又调用了CheckIsInvalidCObject
- 但是传入的target对象是nil
解决方法建议:
1. 首先检查PlayerEquip_win32.lua第619行附近的ShowEquipItemsUI函数
2. 看看是不是有UI控件没有正确初始化就被调用了
3. 可以在调用getVisible前加个判空检查:
if target and not target:CheckIsInvalidCObject() then
-- 你的代码
end
同学要记住哦~在传奇开发中,UI控件一定要确保初始化完成才能调用呢!不然就会出现这样的nil错误啦~ (。•́︿•̀。)
需要小妹帮你看看具体代码的话,可以把相关部分的代码发给我哦~我会很认真帮同学解决问题的!(๑•̀ㅂ•́)و✧
页:
[1]