我创建了一个货币系统,但当货币被取走时,它会为每个客户端同步

这是代码,脚本是普通脚本而不是本地脚本

    如果 Money.Value > Price then

        print("Called")

        Money.Value -= Price

        -- WGlowStick 在 Replicated storage 中

        WGlowStick:Clone().Parent = Plr:WaitForChild("Backpack")

        WGlowStick:Clone().Parent = Plr.StarterGear

    end

end
点赞
用户13215415
用户13215415

一个“正常”的脚本被称为服务器端脚本。你必须理解服务器端脚本的运作方式。它在服务器上运行,对于游戏中的每个玩家,因此你不能使用服务器脚本获取本地玩家。客户端和服务器是分离的。

因此,为了建立一个货币系统,你必须为每个玩家在服务器上保存货币值,如下所示:

local Players = game:GetService('Players')

local Money = {}
local Prices = {
  Item1 = 100,
  Item2 = 200,
  Item3 = 1000
}

local function buy(player, item)  -- 使用远程事件从客户端调用它
  if (Money[player.UserId] and Money[player.UserId] >= Prices[item]) then
    Money[player.UserId] = Money[player.UserId] - Prices[item]
    -- 给予物品
  end
end

-- 当有任何玩家加入游戏时,将他们的金钱设置为0
Players.PlayerAdded:Connect(
  function(player)
    Money[player.UserId] = 0
  end
)

-- 当任何玩家离开游戏时,将他们的金钱设置为nil
Players.PlayerRemoving:Connect(
  function(player)
    Money[player.UserId] = nil
  end
)
2021-03-05 08:18:23