在 ROBLOX Studio 中启用过滤的情况下在客户端放置块

Placing blocks client-side with filtering enabled in ROBLOX Studio

我正在尝试让我的迷你游戏场所在启用过滤的情况下工作(在客户端完成的任何操作,例如创建部件,都不会影响服务器端)。目前唯一坏掉的是一个小游戏。

迷你游戏的玩法包括玩家放下方块以防止因减压而被吸进 space。

块的放置是在客户端完成的,因此显然它不能在启用过滤的情况下正常工作。我已经尝试通过一个远程事件来解决这个问题,每次玩家尝试放置一个块时都会调用该事件,参数是被放置的块和它被放置的 CFrame。但是,每次我通过本地服务器测试它时,它都会告诉我参数 'part' 为零,即使我确实给了它。

以下是相关脚本中的相关代码: 服务器脚本:

pBEvent.OnServerEvent:connect(function(player,partToPlace,position)
    partToPlace.Parent=sp.Blocks
    partToPlace.CFrame=position
    wait()
    partToPlace:MakeJoints()
    partToPlace.Anchored=false
end)

本地脚本:

m.Button1Down:connect(function()
    if m.Target and m.Target.Name == script.Parent.Parent.Name and amount.Value > 0 and db == false or m.Target.Name == "Part" and db == false and amount.Value > 0 then
        db = true 
        amount.Value = amount.Value - 1
        local lastpos = drag.CFrame
        local dragc = drag:Clone()
        dragc.Anchored = true

        dragc.Name = game.Players.LocalPlayer.Name

        dragc.Transparency = 0
        dragc.ff:Destroy()
        event:FireServer(dragc,lastpos)
    end
end)

您将 dragc 传递给服务器,它是 drag 的克隆,但代码中不存在 drag。尝试克隆 m.Target:

m.Button1Down:connect(function()
    if m.Target and m.Target.Name == script.Parent.Parent.Name and amount.Value > 0 and db == false or m.Target.Name == "Part" and db == false and amount.Value > 0 then
        db = true 
        amount.Value = amount.Value - 1
        local lastpos = m.Target.CFrame
        local dragc = m.Target:Clone()
        dragc.Anchored = true

        dragc.Name = game.Players.LocalPlayer.Name

        dragc.Transparency = 0
        dragc.ff:Destroy()
        event:FireServer(dragc,lastpos)
    end
 end)