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

Roblox剑术游戏地图加载脚本报错:attempt to get length of a nil value

解决ServerScriptService.GameLoop:13: attempt to get length of a nil value报错

错误根源

报错指向代码第13行的#config.maps,说明你从ModuleScript导入的config对象里,maps字段是nil——Lua不允许对空值取长度,因此触发报错。

排查与修复步骤

1. 检查ModuleScript的内容

你的config来自script.Parent.ModuleScript,必须确保这个ModuleScript正确定义了maps表,且指向真实存在的地图资源。示例正确的ModuleScript写法:

local config = {}
-- 假设地图都存在ServerStorage的Maps文件夹中
local ServerStorage = game:GetService("ServerStorage")
local mapsFolder = ServerStorage:WaitForChild("Maps") -- 等待文件夹加载完成
config.maps = mapsFolder:GetChildren()

-- 也可以手动指定地图列表
-- config.maps = {
--     ServerStorage.Map1,
--     ServerStorage.Map2,
-- }
return config
  • 确认没有拼写错误(比如把maps写成map)
  • 确认地图对象确实存在,路径无误

2. 增加空值防御检查

在使用config.maps前先判断有效性,避免直接报错:
修改代码中地图选择的部分:

print("Selecting Map")
-- 先检查config.maps是否有效
if not config.maps or #config.maps == 0 then
    warn("没有可用地图!")
    wait(5)
    continue -- 跳过本轮循环,重新等待玩家
end
local selectedMap = config.maps[math.random(1, #config.maps)]

3. 确认ModuleScript的位置

检查script.Parent.ModuleScript路径是否正确:如果GameLoop脚本在ServerScriptService里,ModuleScript必须和它同级(也在ServerScriptService下)。如果ModuleScript在其他位置,要调整require路径,比如require(game.ServerStorage.ModuleScript)。

4. 避免资源加载延迟

如果地图是动态加载的,脚本运行时可能还未加载完成,建议在ModuleScript里用WaitForChild等待资源就绪,避免因加载顺序问题导致maps为空。

修复后的完整代码示例

local config = require(script.Parent.ModuleScript)
local ServerStorage = game:GetService("ServerStorage")
local intermissionCooldown = 20

while true do
    local players = game.Players:GetPlayers()
    if #players < 5 then
        wait(1)
        print("玩家数量不足,无法开始游戏")
    else
        print("游戏即将开始!")
        wait(intermissionCooldown)
        print("正在选择地图")
        
        -- 新增空值检查
        if not config.maps or #config.maps == 0 then
            warn("配置中没有可用地图!")
            wait(5)
            continue
        end
        
        local selectedMap = config.maps[math.random(1, #config.maps)]
        print("已选地图,5秒后开始回合")
        wait(5)
        
        -- 额外检查选中的地图是否有效
        if not selectedMap then
            warn("选中的地图无效!")
            continue
        end
        
        local currentMap = selectedMap:Clone()
        currentMap.Name = "Map"
        currentMap.Parent = workspace
    end
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:13:27