if name == "随机传送石" then
if hasbuff(actor, 10001) then
send(actor, "战斗状态下禁止使用[随机传送石]")
return false
else
map(actor, mapId)
return true
end
end这么写的话物品会被扣除
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-07-11 19:22:25 |
👁️ 阅读: 0
我是lua后端老师!
小仙,你这段代码确实会扣除物品,因为你在`stdmodefunc`触发里使用了`return false`。在996引擎中,`stdmodefunc`触发器的返回值控制着物品是否被消耗:
- **返回 `true`**:物品正常使用,会被扣除。
- **返回 `false`**:物品使用失败,**不会被扣除**。
你的代码逻辑是:当玩家有10001号buff时,发送提示并`return false`,这原本是想阻止使用且不扣物品。但是,**`map(actor, mapId)`执行成功后,整个函数返回了`true`**,这会导致引擎认为物品使用成功,从而扣除物品。
你需要确保在**所有**不希望扣除物品的分支都返回`false`。修改后的正确写法如下:
```lua
if name == "随机传送石" then
if hasbuff(actor, 10001) then
sendmsg(actor, "战斗状态下禁止使用[随机传送石]", 4) -- 使用sendmsg发送提示
return false -- 使用失败,不扣除物品
else
map(actor, mapId) -- 执行传送
return true -- 使用成功,扣除物品
end
end
```
**关键点:**
1. `hasbuff`判断为真时,必须`return false`。
2. 只有成功执行了传送逻辑(`map`函数)后,才`return true`。
3. 建议将`send`函数替换为`sendmsg`,并指定消息类型(如`4`代表普通聊天框显示),这样提示更明显。
下次写触发逻辑时,一定要想清楚每个分支该返回`true`还是`false`哦!不懂的可以随时问我,或者请教浮生梦尊师!
我是lua后端老师!
小仙,你这段代码确实会扣除物品,因为你在`stdmodefunc`触发里使用了`return false`。在996引擎中,`stdmodefunc`触发器的返回值控制着物品是否被消耗:
- **返回 `true`**:物品正常使用,会被扣除。
- **返回 `false`**:物品使用失败,**不会被扣除**。
你的代码逻辑是:当玩家有10001号buff时,发送提示并`return false`,这原本是想阻止使用且不扣物品。但是,**`map(actor, mapId)`执行成功后,整个函数返回了`true`**,这会导致引擎认为物品使用成功,从而扣除物品。
你需要确保在**所有**不希望扣除物品的分支都返回`false`。修改后的正确写法如下:
```lua
if name == "随机传送石" then
if hasbuff(actor, 10001) then
sendmsg(actor, "战斗状态下禁止使用[随机传送石]", 4) -- 使用sendmsg发送提示
return false -- 使用失败,不扣除物品
else
map(actor, mapId) -- 执行传送
return true -- 使用成功,扣除物品
end
end
```
**关键点:**
1. `hasbuff`判断为真时,必须`return false`。
2. 只有成功执行了传送逻辑(`map`函数)后,才`return true`。
3. 建议将`send`函数替换为`sendmsg`,并指定消息类型(如`4`代表普通聊天框显示),这样提示更明显。
下次写触发逻辑时,一定要想清楚每个分支该返回`true`还是`false`哦!不懂的可以随时问我,或者请教浮生梦尊师!
← 返回问答库