You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Roblox开发遇Attempt to index nil with 'leaderstats'错误求解决方案

问题排查与修复方案

核心错误原因

你遇到的两个报错本质是同一个问题导致的:
客户端LocalScript中的GuiButton.MouseButton1Click事件不会返回玩家对象作为参数,你代码中回调函数里写的player变量实际是nil,所以对nil索引leaderstats、调用FindFirstChild都会触发空引用报错。

修复说明

  1. 客户端LocalScript中要获取当前操作的本地玩家,直接调用game.Players.LocalPlayer即可。
  2. 用WaitForChild代替直接索引,避免玩家刚进入游戏时leaderstats还没加载完成导致的时序报错。
  3. 额外注意:金币扣除、单位生成的逻辑不要放在客户端执行,必须通过RemoteEvent通知服务端处理,否则会出现数据不同步、其他玩家看不到你生成的炮塔、容易被作弊修改的问题。

修正后的客户端代码

local button = script.Parent
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- 提前获取RemoteEvent,你需要先在ReplicatedStorage里新建一个RemoteEvent,命名为SpawnGuardEvent
local spawnGuardEvent = ReplicatedStorage:WaitForChild("SpawnGuardEvent")
local spawner = workspace:WaitForChild("ts1")

button.MouseButton1Click:Connect(function()
    -- 正确获取本地玩家
    local localPlayer = Players.LocalPlayer
    -- 等待leaderstats和Cash加载,避免时序问题
    local leaderstats = localPlayer:WaitForChild("leaderstats")
    local cash = leaderstats:WaitForChild("Cash")
    -- 客户端先做前置判断,减少不必要的服务端请求
    if cash.Value >= 250 then
        -- 通知服务端处理扣钱和生成逻辑
        spawnGuardEvent:FireServer(spawner.HumanoidRootPart.CFrame)
    else
        button.BackgroundColor3 = Color3.new(1, 0, 0)
        button.Text = "Too Expensive"
        task.wait(0.5)
        button.Text = "Guard [250$]"
        button.BackgroundColor3 = Color3.new(0.603922, 0.603922, 0.603922)
    end
end)

配套服务端代码(需要放在ServerScriptService中生效)

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local spawnGuardEvent = ReplicatedStorage:WaitForChild("SpawnGuardEvent")

spawnGuardEvent.OnServerEvent:Connect(function(player, spawnCFrame)
    -- 服务端二次校验,防止作弊
    local leaderstats = player:FindFirstChild("leaderstats")
    if not leaderstats then return end
    local cash = leaderstats:FindFirstChild("Cash")
    if not cash or cash.Value < 250 then return end
    -- 扣除金币
    cash.Value -= 250
    -- 生成炮塔/单位
    local clone = ReplicatedStorage.Allies.Guard:Clone()
    clone.Parent = workspace
    clone.HumanoidRootPart.CFrame = spawnCFrame
end)

内容的提问来源于stack exchange,提问作者Sinster009

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:45:08