Roblox游戏报错:attempt to compare number < Instance 排查求助
解决Roblox报错:attempt to compare number < Instance
问题说明
开发Roblox游戏时,需通过客户端触发RemoteEvent将背包默认容量设为10(当前为0),以此触发事件并避免脚本代码冗余丢失。目前仅遇到报错:attempt to compare number < Instance,其余功能正常。
已做排查
- 客户端传入值为数字10
- 服务器端脚本已将参数类型声明为
number - 尝试修改参数名、移除
maxCapacityFC ~= nil判断,错误未消除 - 查阅Roblox开发者论坛未找到有效解决方案
代码展示
服务器端脚本
remoteEvents:FindFirstChild("FixBackpackCapacity").OnServerEvent:Connect(function(player, maxCapacityFC : number) if maxCapacityFC ~= nil and maxCapacityFC > 0 then player:FindFirstChild(player.EquippedBackpack.Value):FindFirstChild("MaxCapacity").Value = maxCapacityFC end end)
客户端脚本
game:GetService("ReplicatedStorage").RemoteEvents.FixBackpackCapacity:FireServer(player, 10)
错误原因
Roblox的RemoteEvent:FireServer()方法无需手动传入player参数,服务器端OnServerEvent回调的第一个参数会自动填充为触发事件的玩家实例。当前客户端脚本多传了player,导致参数顺序错位:服务器端的maxCapacityFC实际接收的是客户端传入的player实例,而非数字10。在执行maxCapacityFC > 0判断时,出现了「实例与数字比较」的非法操作,触发报错。
解决方案
修改客户端脚本,移除FireServer中的player参数,正确调用方式如下:
修改后的客户端脚本
game:GetService("ReplicatedStorage").RemoteEvents.FixBackpackCapacity:FireServer(10)
可选优化(服务器端)
添加实例存在性判断,避免FindFirstChild返回nil引发后续错误:
remoteEvents:FindFirstChild("FixBackpackCapacity").OnServerEvent:Connect(function(player, maxCapacityFC : number) if typeof(maxCapacityFC) == "number" and maxCapacityFC > 0 then local backpack = player:FindFirstChild(player.EquippedBackpack.Value) if backpack then local maxCapacity = backpack:FindFirstChild("MaxCapacity") if maxCapacity then maxCapacity.Value = maxCapacityFC end end end end)
补充备注
- 移除
maxCapacityFC ~= nil判断后仍触发错误,是因为参数类型本身错误(为Instance而非number),与是否为nil无关 - 代码位置正确,问题根源为客户端RemoteEvent调用时参数顺序错误
内容的提问来源于stack exchange,提问作者Error404
相关产品推荐
相关产品推荐

