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

Roblox脚本报错attempt to index number with 'Spawner'寻求解决

解决“attempt to index number with 'Spawner'”报错

ServerScriptService.Main.Mob:28: attempt to index number with 'Spawner'

问题根源

报错出现在第28行 newMob.HumanoidRootPart.CFrame = map.Spawner.CFrame,说明此时map变量是数字类型,而非你预期的包含Spawner属性的地图对象。核心原因是调用mob.Spawn函数时参数顺序传错了——你大概率把quantity(数字类型的生成数量)和map(对象类型的地图实例)的位置搞反了,导致map参数接收到的是数字,自然无法访问Spawner属性。

另外你的代码还有两处逻辑/语法错误需要修正:

  • mob.Move函数错误使用script.Parent获取怪物对象,克隆后的怪物和脚本父级无关,应该用传入的mob参数
  • zombieHumanoid.Died:Connect()语法错误,Connect方法必须传入一个函数,当前写法没有绑定任何处理逻辑

解决方案

  1. 检查mob.Spawn的调用代码:确保调用时参数顺序为 mob.Spawn(怪物名称, 生成数量, 地图对象),示例:
    mob.Spawn("Zombie", 5, workspace.Map)
    
  2. 修正mob.Move函数的逻辑与语法:
    • 改用传入的mob参数获取怪物的Humanoid
    • 正确绑定Died事件的处理函数

修正后的完整代码

local ServerStorage = game:GetService("ServerStorage")
local mob = {}

function mob.Move(mobObj, map)
    -- 使用传入的mobObj参数获取Humanoid
    local zombieHumanoid = mobObj.Humanoid

    -- 正确绑定Died事件的处理函数
    zombieHumanoid.Died:Connect(function()
        mobObj:Destroy()
    end)
end

function mob.Spawn(name, quantity, map)
    local mobExists  = ServerStorage.Mobs:FindFirstChild(name)

    if mobExists then
        for i=1 , quantity do
            task.wait(0.5)
            local newMob = mobExists:Clone()
            newMob.HumanoidRootPart.CFrame = map.Spawner.CFrame
            newMob.Parent = map.Mob

            coroutine.wrap(mob.Move)(newMob, map)
        end
    else
        warn("Requested mob does not exist:", name)
    end
end

return mob

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:45:04