所以我试图在凌晨 1 点制作一个 Roblox 游戏,因为谁不这样做,我遇到了一个小问题:我有一个变量不会在我的服务器脚本中更新,即使我可以看到它在资源管理器中更新并且领导者统计数据。
我的栽培切换脚本(文本按钮下的本地脚本):
local button = script.Parent
local cultivating = game.Players.LocalPlayer.leaderstats.Cultivating
button.MouseButton1Click:Connect(function()
if cultivating.Value == false then
cultivating.Value = true
button.Text = "Stop Cultivating"
else
cultivating.Value = false
button.Text = "Start Cultivating"
end
end)
我的leaderstats脚本(serverscriptservice下的服务器脚本):
game.Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local qi = Instance.new("IntValue")
qi.Name = "Qi"
qi.Value = 0
qi.Parent = leaderstats
local cultivating = Instance.new("BoolValue")
cultivating.Name = "Cultivating"
cultivating.Value = true
cultivating.Parent = leaderstats
end)
我的栽培脚本(serverscriptservice下的服务器脚本):
game.Players.PlayerAdded:Connect(function(player)
local leaderstats = player:WaitForChild("leaderstats")
local qi = leaderstats:WaitForChild("Qi")
local cultivating = leaderstats:WaitForChild("Cultivating")
while true do
if cultivating.Value == true then
qi.Value += 1
end
wait(0.5)
end
end)
我知道这可能是一个愚蠢的问题,在你运行“否决”按钮之前,请记住现在是凌晨 2:03,我已经要求 chatgpt 和 claude ai 来帮助我,但他们都失败了。基本上,变量“栽培”是由本地脚本更新的,该脚本可以工作,但不会在栽培脚本内更新。
如果我在修炼的话,我预计它会每0.5秒给我1气。
我尝试使用人工智能来帮助我(浪费时间),尝试使用一堆打印语句进行调试,并得出结论,这确实是脚本内的变量没有更新。我什至尝试在循环内声明变量但没有成功。
在您的栽培切换脚本中,您是否更改了客户端而不是服务器上的
cultivating
值。这就是为什么您的服务器端栽培脚本不会更新,因为 cultivating
永远不会在服务器上更新,而是在客户端上更新,因此服务器端脚本无法检测到它。
Roblox 使用 客户端-服务器模型,因此要在服务器上进行通信,需要使用
RemoteEvent
告诉服务器用户正在培养,然后使用该信息添加 qi
。
RemoteEvent 对象促进跨客户端-服务器边界的异步、单向通信,而无需产生响应。这种通信可以从一个客户端定向到服务器,从服务器定向到特定客户端,或从服务器定向到所有客户端。
— https://create.roblox.com/docs/reference/engine/classes/RemoteEvent
这种情况下,你可以通过Client→Server远程事件来告诉服务器有用户正在修炼。
您应该在脚本中进行的更改包括: