如何制作一个基础系统?-- Roblox Lua

我正在尝试制作一个系统,当玩家加入游戏时,他们将获得一个基础,其他玩家将无法使用该基础。

这是我在脚本中创建的模块:

local Functions = {}

function Functions.findOpenBase(plr)
    local bases = workspace.Bases
    for i,v in pairs(bases:GetChildren()) do
        if v:IsA("Part") then
            print("正在搜索..")
            if plr.alreadyOwnsBase.Value == false then
                if v.Owner.Value ~= nil then
                    print("找到基础!")
                    v.Owner.Value = plr.Name
                    plr.alreadyOwnsBase.Value = true
                else
                    warn("错误")
                    plr:Kick("发现错误,请重新加入游戏。")
                end
            end
        else
            print("无法申领另一个基础")
        end
    end
end

return Functions

然后这是我的处理程序脚本:

local module = require(script.Functions)

game.Players.PlayerAdded:Connect(function(plr)
    local alreadyOwnsBase = Instance.new("BoolValue", plr)
    alreadyOwnsBase.Name = "alreadyOwnsBase"
    alreadyOwnsBase.Value = false
    if plr then
        module.findOpenBase(plr)
        print(plr.Name)
    end
end)

有没有什么解决方案?

原文链接 https://stackoverflow.com/questions/70455993

点赞
stackoverflow用户11253604
stackoverflow用户11253604

对我而言,模块是作为脚本的父级内部的:

local Functions = {}
function Functions.findOpenBase(plr)
    -- 首先进行检查
    if plr.alreadyOwnsBase.Value == false then
        local bases = workspace.Bases
        for i,v in pairs(bases:GetChildren()) do
            print("Searching..")
            if v:IsA("Part") then
                if v.Owner.Value ~= nil then
                    print("Base found!")
                    v.Owner.Value = plr.Name
                    plr.alreadyOwnsBase.Value = true
                    -- 找到后就跳过循环
                    break
                end
            else
                print("cannot claim another base")
            end
        end
    end
    -- plr.alreadyOwnsBase.Value 是结果的标记
    if plr.alreadyOwnsBase.Value == false then
        warn("error")
        plr:Kick("error finding base, Please Rejoin.")
    end
end

return Functions

处理器脚本:

local module = require(script.Functions)

game.Players.PlayerAdded:Connect(function(plr)
    local alreadyOwnsBase = Instance.new("BoolValue", plr)
    alreadyOwnsBase.Name = "alreadyOwnsBase"
    alreadyOwnsBase.Value = false
    if plr then
        module.findOpenBase(plr)
        -- 检查标记
        if plr.alreadyOwnsBase.Value then
            print(plr.Name)
        end
    end
end)
2021-12-23 01:38:24