Roblox Studio基础刀剑购买系统报错:尝试比较实例与数值,功能无法正常运行
Roblox Studio基础刀剑购买系统报错:尝试比较实例与数值,功能无法正常运行
嘿,我一眼就瞅出你代码里的问题啦!核心原因是你搞错了IntValue的使用方式——你直接拿price这个实例对象去和数值比较,Lua根本没法这么干,自然就运行失败了。
问题分析
你定义的local price = script.Parent.Price,这个price是一个IntValue实例,不是它存储的具体价格数字。而你的条件判断里写的是:
if ls.Money.Value >= price or ls.Money.Value == price then
这里相当于拿玩家的货币数值(数字)和一个IntValue对象比,Lua会直接报错,导致后续逻辑完全不执行。
修复方案
把所有用到price的地方,都改成price.Value,这样才能获取到IntValue里存储的价格数值。另外你的条件判断其实可以简化,>=已经包含等于的情况了,不用分开写。
修正后的完整代码如下:
local lp = game.Players.LocalPlayer local ls = lp.leaderstats local backpack = lp.Backpack local rp = game:GetService("ReplicatedStorage") local price = script.Parent.Price script.Parent.MouseButton1Click:Connect(function() -- 这里改成price.Value,同时简化条件判断 if ls.Money.Value >= price.Value then local tool = rp.Tools.ClassicSword:Clone() tool.Parent = backpack -- 这里也要改成price.Value ls.Money.Value = ls.Money.Value - price.Value print("Player has enough money to purchase tool, player currency now is " .. ls.Money.Value) else -- 可以加个提示告诉玩家钱不够,体验更好 print("Player doesn't have enough money!") end end)
额外小建议
- 注意:这种修改玩家货币的操作,目前是在客户端执行的,很容易被玩家作弊修改。如果是正式项目,建议把购买逻辑放到服务器脚本里,通过RemoteEvent来触发,这样更安全。
- 可以给按钮加个点击反馈,比如买完后灰置几秒,防止玩家重复点击刷道具。
备注:内容来源于stack exchange,提问作者Gamer2VR
相关产品推荐
相关产品推荐

