如何检查玩家是否已经在另一个桌子/房间里? - Lua

我有一个名为Rooms的表/字典,当客户端想要加入房间时,我会检查房间UID是否匹配:Rooms[i]["UID"] == Data,如果UID匹配,我会检查玩家是否已经在房间中,如果没有,我会将玩家添加到他们想要加入的特定房间中,但我遇到了一些问题。

local Rooms = {
    [1] = {
        ["Name"] = "test1",
        ["Players"] = {},
        ["UID"] = game:GetService("HttpService"):GenerateGUID(true)
    },
    [2] = {
        ["Name"] = "test2",
        ["Players"] = {},
        ["UID"] = game:GetService("HttpService"):GenerateGUID(true)
    }
}
RemoteEvent.OnServerEvent:Connect(function(Player, Key, Data)
    if Key == "Join" then
        for i = 1, #Rooms do
            if Rooms[i]["UID"] == Data then
                if #Rooms[i]["Players"] > 0 then
                    for a = 1, #Rooms[i]["Players"] do
                        if Rooms[a]["Players"][a] == Player then
                            print("你已经在这个房间里了")
                        else
                            RemoteEvent:FireClient(Player, "Success")
                            table.insert(Rooms[a]["Players"], Player)
                        end
                    end
                else
                    RemoteEvent:FireClient(Player, "Success")
                    table.insert(Rooms[i]["Players"], Player)
                end
            end
        end
    end
end)

现在的问题是,我的代码让玩家加入了两个房间。例如:玩家加入了房间[1]并尝试再次加入房间[1],它会打印“你已经在这个房间里了”,这很完美! 但是,当玩家想要移动到房间[2]时,它不会检查玩家是否已经在不同的房间中。

简而言之:

  • 玩家加入了房间[1]。
  • 输出:玩家加入了房间[1]。
  • 玩家再次加入了房间[1]。
  • 输出:你已经在这个房间里了。
  • 玩家加入了房间[2]。
  • 输出(错误):玩家加入了房间[2]。

玩家不应该加入房间[2],因为他们没有离开房间[1],但我该如何检查玩家是否在其他房间中?

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

点赞
stackoverflow用户17060604
stackoverflow用户17060604

尝试这个:

RemoteEvent.OnServerEvent:Connect(function(Player, Key, Data)
    if Key == "Join" then
        local targetRoomNum = nil
        for i, room in pairs(Rooms) do
            if room["UID"] == Data then
                targetRoomNum = i
            end

            for _, playerInRoom in pairs(room["Players"]) do
                if playerInRoom == Player then
                    print("您已经在一个房间中")
                    return
                end
            end
        end

        if targetRoomNum then
            RemoteEvent:FireClient(Player, "Success")
            table.insert(Rooms[targetRoomNum]["Players"], Player)
        else
            print("未找到房间")
        end
    end
end)
2021-11-21 07:49:02