我的游戏中有一个系统,当玩家踩到检查点时,排行榜上的Stage
值将上升,然后该值将被保存到该玩家的userId
中。
我希望有一个button
将该值重置回0
,这是我为它尝试的代码。
local textButton = script.Parent
local Players = game:GetService("Players")
textButton.MouseButton1Up:Connect(function()
local player = game.Players.LocalPlayer
local stage = Players:WaitForChild(player):WaitForChild("leaderstats").Stage
if stage.Value > 1 then
stage.Value = 1
end
end)
我试着调试它将打印命令在不同的地方看到的代码,当我尝试运行打印(stage
)它不显示任何东西。
LocalScripts
无法在服务器上更改该值。要在单击按钮后更改值,应使用RemoteEvents
。这里有一个关于它们的页面:https://create.roblox.com/docs/scripting/networking/remote-events-and-functions要使用RemoteEvent
,首先需要将其放在跨服务器和客户机复制的位置。这方面的一个很好的例子是把它放在ReplicatedStorage
。之后,您需要设置一个脚本来侦听RemoteEvent
的.OnServerEvent
事件。为此,您需要连接一个函数。正如在脚本中看到的,您已经知道如何做到这一点。我就开门见山了。在服务器上,设置一个监听.OnServerEvent
的脚本。接下来,在客户端上编辑脚本以触发客户端,而不是尝试设置该值。回到服务器脚本,并在那里设置该值。该事件还传递Player
对象,因此您可以利用它来实际重置该值。LocalScript
inside yourTextButton
:
local textButton = script.Parent
local Players = game:GetService("Players")
local RemoteEvent = 'RemoteEvent location'
textButton.MouseButton1Up:Connect(function()
RemoteEvent:FireServer()
end)
服务器Script
在任何地方,最好是ServerScriptService
:
RemoteEvent.OnServerEvent:Connect(function(player)
local Players = game:GetService("Players")
local stage = Players:WaitForChild(player):WaitForChild("leaderstats").Stage
if stage.Value > 1 then
stage.Value = 1
end
end)
祝你好运!