如何制作Roblox的双倍现金游戏通行证脚本

所以我正在制作一个脚本,每分钟给你5个现金,我还为脚本制作了一个游戏通行证,如果有人拥有游戏通行证,则与非游戏通行证持有者相比,他们的金钱将翻倍。这是我的脚本 我没有任何脚本来给现金,但第二个脚本块中的问题在于,控制台打印错误:

09:10:57.466 ServerScriptService.CashGiver:6: attempt to index nil with'UserId' - Server - CashGiver:6

local Give5Cash = game.ReplicatedStorage:WaitForChild("Give5Cash")
local Give10Cash = game.ReplicatedStorage:WaitForChild("Give10Cash")

Give5Cash.OnServerEvent:Connect(function()
print("玩家将获得5现金")
end)

Give10Cash.OnServerEvent:Connect(function()
print("玩家将获得10现金")
end)
while wait() do
local MPS = game:GetService("MarketplaceService")
local id = 16031172
local player = game.Players.LocalPlayer

if MPS:UserOwnsGamePassAsync(player.UserId, id) then
game.ReplicatedStorage:WaitForChild("Give10Cash"):FireServer()
print("玩家拥有双倍现金")
else
print("玩家没有双倍现金")
game.ReplicatedStorage:WaitForChild("Give5Cash"):FireServer()
end

wait(5)
end
点赞
用户2858170
用户2858170
local player = Players.LocalPlayer
if MPS:UserOwnsGamePassAsync(player.UserId, id) then

在这里,你将 player 赋值为 nil,而你还使用了它。

根据Roblox手册

Players.LocalPlayer

NotReplicated

这个项目不会跨越Roblox的服务器/客户端边界复制

LocalPlayer 是一个只读属性,它引用了正在运行游戏的玩家。

这个属性只针对 LocalScripts(和被它们所需的 ModuleScripts)进行定义,因为它们运行在客户机上。对于服务器(Script对象在其中运行它们的代码),这个属性为nil。

2021-03-23 09:07:11
用户12398332
用户12398332

所以我找到了解决这个问题的方法,并且已经得到了我的问题的答案。我在 ServerScriptService 中创建了 CashGiver5CashGiver10CashGiverHandler 三个脚本,如下所示。

CashGiver5

while wait(1) do
    print("给玩家5个现金")
    for i, player in pairs(game.Players:GetPlayers()) do
        player:WaitForChild("leaderstats").Cash.Value += 5
    end
end

CashGiver10

while wait(1) do
    print("给玩家10个现金")
    for i, player in pairs(game.Players:GetPlayers()) do
        player:WaitForChild("leaderstats").Cash.Value += 10
    end
end

CashGiverHandler

local MarketPlace = game:GetService("MarketplaceService")

game.Players.PlayerAdded:Connect(function(player)
    local g = 16031172 -- DOUBLE CASH ID

    local Give5Script = game.ServerScriptService.CashGiver5
    local Give10Script = game.ServerScriptService.CashGiver10

    if MarketPlace:UserOwnsGamePassAsync(player.UserId, g) then
        Give5Script:Destroy()
    else
        Give10Script:Destroy()
    end
end)

脚本的作用是什么?

基本上, CashGiver 脚本是每秒给玩家 Cash 的基本脚本。当玩家加入游戏时,Handler 脚本会销毁其中一个或两个脚本。

2021-03-23 10:30:12