Roblox大亨游戏Lua脚本报错求助:无法比较数值与实例
核心错误与修复步骤
你的脚本存在多个关键问题,以下是逐一修复后的完整代码,以及对应的问题解释:
local TycoonModel = script.Parent.Parent.Parent local Mainitems = TycoonModel:FindFirstChild("Mainitems") local ButtonTwo = script.Parent local Buttons = script.Parent.Parent local Price = script.Parent.Price -- 确保Price是IntValue类型的实例 local CashButton2 = Mainitems.CashButton2 local CashButton2Script = CashButton2.CashButton2Script local ScreenPart2 = CashButton2.ScreenPart2 local ButtonPart2 = CashButton2.ButtonPart2 local Values = TycoonModel:FindFirstChild("Values") -- 监听按钮触摸事件 ButtonPart2.Touched:Connect(function(Hit) -- 验证触摸者是玩家角色 local humanoid = Hit.Parent:FindFirstChildOfClass("Humanoid") if not humanoid then return end local player = game.Players:GetPlayerFromCharacter(Hit.Parent) if not player then return end -- 获取玩家的现金数据 local leaderstats = player:FindFirstChild("leaderstats") if not leaderstats then print("玩家未创建leaderstats") return end local Cash = leaderstats:FindFirstChild("Cash") if not Cash then print("玩家未创建Cash值") return end -- 获取玩家的提示UI local NotEnough = player.PlayerGui:FindFirstChild("NotEnoughCash"):FindFirstChild("NotEnoughNote") if not NotEnough then print("未找到玩家的NotEnoughNote UI") return end -- 修正逻辑判断:现金足够才解锁 if Cash.Value >= Price.Value then Cash.Value -= Price.Value ButtonPart2.Transparency = 0 ButtonPart2.CanCollide = true ScreenPart2.Transparency = 0 ScreenPart2.CanCollide = true CashButton2Script.Disabled = false print("物品解锁成功") else print("玩家现金不足") NotEnough.Visible = true task.wait(3) NotEnough.Visible = false end end)
关键问题解释
类型匹配错误(报错根源)
原代码中if Cash.Value <= Price then直接用Price实例和数字比较,正确做法是取Price.Value(假设Price是IntValue实例),否则会触发number <= Instance的类型不匹配错误。玩家实例获取错误
原代码local player = game:GetService("Players")获取的是Players服务,不是具体玩家。需通过Touched事件的Hit参数,从角色的Humanoid反向查找玩家:game.Players:GetPlayerFromCharacter(Hit.Parent)。Leaderstats创建逻辑错误
原代码在按钮脚本中直接创建leaderstats和Cash,这会导致每个按钮触发时重复创建,且无法关联到正确玩家。正确做法是在PlayerAdded事件中统一为每个玩家创建leaderstats(建议放在ServerScriptService的脚本中):game.Players.PlayerAdded:Connect(function(player) local leaderstats = Instance.new("Folder") leaderstats.Name = "leaderstats" leaderstats.Parent = player local Cash = Instance.new("IntValue") Cash.Name = "Cash" Cash.Value = 0 -- 初始现金 Cash.Parent = leaderstats end)UI引用错误
原代码NotEnough = game.StarterGui.NotEnoughCash.NotEnoughNote修改的是StarterGui中的模板,不会影响玩家当前界面。需获取玩家自己的PlayerGui中的UI实例:player.PlayerGui:FindFirstChild("NotEnoughCash"):FindFirstChild("NotEnoughNote")。逻辑判断颠倒
原代码用Cash.Value <= Price判断是否解锁,这会导致现金越少越能解锁,完全逻辑颠倒。修正为Cash.Value >= Price.Value,确保现金充足时才执行解锁逻辑。触摸事件未过滤
原代码没有判断触摸者是否为玩家角色,导致场景中其他物体碰到按钮也会触发事件。新增Humanoid检查,确保只有玩家角色触发。
内容的提问来源于stack exchange,提问作者hellomaties

