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

Posted

技术标签:

【中文标题】如何制作基础系统? -- Roblox Lua【英文标题】:How to make a base system? -- Roblox Lua 【发布时间】:2022-01-24 02:06:12 【问题描述】:

我正在尝试创建一个系统,当玩家加入时,他们会获得一个基地,然后其他玩家就无法使用该基地。

这是我在脚本的父模块中的模块:

local Functions = 

function Functions.findOpenBase(plr)
    local bases = workspace.Bases
    for i,v in pairs(bases:GetChildren()) do
        if v:IsA("Part") then
            print("Searching..")
            if plr.alreadyOwnsBase.Value == false then
                if v.Owner.Value ~= nil then
                    print("Base found!")
                    v.Owner.Value = plr.Name
                    plr.alreadyOwnsBase.Value = true
                else
                    warn("error")
                    plr:Kick("error finding base, Please Rejoin.")
                end
            end
        else
            print("cannot claim another base")
        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)

有什么解决办法吗?

【问题讨论】:

错误是2个玩家加入时只有一个被分配了一个基地 【参考方案1】:

对我来说,脚本中的模块:

local Functions = 
function Functions.findOpenBase(plr)
    -- check it first.
    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
                    -- get it, jump the loop
                    break
                end
            else
                print("cannot claim another base")
            end
        end
    end
    -- and plr.alreadyOwnsBase.Value is the flag of the result
    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)
        -- check the flag
        if plr.alreadyOwnsBase.Value then
            print(plr.Name)
        end
    end
end)

【讨论】:

那行不通 所以,当你跑到plr:Kick("errorfinding base, Please Rejoin.")时,你应该创建一个新的base。

以上是关于如何制作基础系统? -- Roblox Lua的主要内容,如果未能解决你的问题,请参考以下文章

在 LocalScript (Roblox LUA) 中创建抽象对象

Roblox Lua开发

Roblox Lua 中的褪色球

Lua (Roblox) 如何从 Localscript 调用某些东西

循环中的 Roblox Studio Lua if 语句

无法在 ROBLOX Lua 中解析 JSON