-- 通过物品唯一ID获取其在背包中的数量
-- @param actor string 玩家对象
-- @param targetMakeIndex integer 目标物品的唯一ID (MakeIndex)
-- @return integer, string 返回数量与类型名,未找到返回 0, ""
function Aquan_GetItemNumByMakeIndex(actor, targetMakeIndex)
-- 参数检查
if not actor or type(targ
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-05-05 15:46:07 |
👁️ 阅读: 4
后端Lua尊者:我是lua后端老师!
小仙,你这个思路很清晰,先获取背包物品列表再遍历匹配唯一ID,这个做法是对的。不过,根据参考资料,引擎已经提供了直接通过唯一ID扣除物品的函数 `delitembymakeindex`,我们可以直接调用它,这样更高效也更安全。
下面我基于你的函数结构,写一个通过物品唯一ID扣除物品的函数,并加入必要的检查:
```lua
-- 通过物品唯一ID扣除物品
-- @param actor string 玩家对象
-- @param targetMakeIndex integer 目标物品的唯一ID (MakeIndex)
-- @param count integer 扣除数量(仅对可叠加物品有效,默认扣除全部)
-- @return boolean 是否扣除成功
function Aquan_DelItemByMakeIndex(actor, targetMakeIndex, count)
-- 参数检查
if not actor or type(targetMakeIndex) ~= "number" then
release_print("参数错误:actor或targetMakeIndex无效")
return false
end
-- 先检查物品是否存在(可选,但建议做)
local itemObj = getitembymakeindex(actor, targetMakeIndex)
if itemObj == "0" then
release_print("未找到唯一ID为 " .. targetMakeIndex .. " 的物品")
return false
end
-- 调用引擎扣除函数
local result = delitembymakeindex(actor, tostring(targetMakeIndex), count)
if result then
release_print("扣除物品成功,唯一ID:" .. targetMakeIndex)
else
release_print("扣除物品失败,唯一ID:" .. targetMakeIndex)
end
return result
end
```
**使用示例:**
```lua
-- 扣除唯一ID为 10086 的物品(全部扣除)
local success = Aquan_DelItemByMakeIndex(actor, 10086)
if success then
release_print("扣除成功")
else
release_print("扣除失败")
end
-- 扣除可叠加物品的部分数量(如扣除5个)
local success = Aquan_DelItemByMakeIndex(actor, 10087, 5)
```
**注意事项:**
1. `delitembymakeindex` 函数要求传入的 `ids` 是字符串,所以需要用 `tostring` 转换。
2. 如果传入的 `targetMakeIndex` 为 `nil` 或空字符串,函数会返回 `true`,所以我们在参数检查时就要过滤。
3. 对于可叠加物品,可以通过 `count` 参数指定扣除数量;不传 `count` 则默认扣除全部。
4. 引擎锁定的物品不会被扣除,函数会返回 `false`,所以务必判断返回值。
如果还有不清楚的,随时问我,或者去请教浮生梦尊师哦!
后端Lua尊者:我是lua后端老师!
小仙,你这个思路很清晰,先获取背包物品列表再遍历匹配唯一ID,这个做法是对的。不过,根据参考资料,引擎已经提供了直接通过唯一ID扣除物品的函数 `delitembymakeindex`,我们可以直接调用它,这样更高效也更安全。
下面我基于你的函数结构,写一个通过物品唯一ID扣除物品的函数,并加入必要的检查:
```lua
-- 通过物品唯一ID扣除物品
-- @param actor string 玩家对象
-- @param targetMakeIndex integer 目标物品的唯一ID (MakeIndex)
-- @param count integer 扣除数量(仅对可叠加物品有效,默认扣除全部)
-- @return boolean 是否扣除成功
function Aquan_DelItemByMakeIndex(actor, targetMakeIndex, count)
-- 参数检查
if not actor or type(targetMakeIndex) ~= "number" then
release_print("参数错误:actor或targetMakeIndex无效")
return false
end
-- 先检查物品是否存在(可选,但建议做)
local itemObj = getitembymakeindex(actor, targetMakeIndex)
if itemObj == "0" then
release_print("未找到唯一ID为 " .. targetMakeIndex .. " 的物品")
return false
end
-- 调用引擎扣除函数
local result = delitembymakeindex(actor, tostring(targetMakeIndex), count)
if result then
release_print("扣除物品成功,唯一ID:" .. targetMakeIndex)
else
release_print("扣除物品失败,唯一ID:" .. targetMakeIndex)
end
return result
end
```
**使用示例:**
```lua
-- 扣除唯一ID为 10086 的物品(全部扣除)
local success = Aquan_DelItemByMakeIndex(actor, 10086)
if success then
release_print("扣除成功")
else
release_print("扣除失败")
end
-- 扣除可叠加物品的部分数量(如扣除5个)
local success = Aquan_DelItemByMakeIndex(actor, 10087, 5)
```
**注意事项:**
1. `delitembymakeindex` 函数要求传入的 `ids` 是字符串,所以需要用 `tostring` 转换。
2. 如果传入的 `targetMakeIndex` 为 `nil` 或空字符串,函数会返回 `true`,所以我们在参数检查时就要过滤。
3. 对于可叠加物品,可以通过 `count` 参数指定扣除数量;不传 `count` 则默认扣除全部。
4. 引擎锁定的物品不会被扣除,函数会返回 `false`,所以务必判断返回值。
如果还有不清楚的,随时问我,或者去请教浮生梦尊师哦!
← 返回问答库