【问题标题】:How do i make 2x cash gamepass script Roblox我如何制作 2x 现金游戏通行证脚本 Roblox
【发布时间】:2021-06-19 21:14:52
【问题描述】:

所以我正在制作一个每分钟给你 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("Player Will Be Given 5 Cash")
end)

Give10Cash.OnServerEvent:Connect(function()
    print("Player Will Be Given 10 Cash")
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("Player Owns 2x Cash")
    else
        print("Players Doesnt Owns 2x Cash")
        game.ReplicatedStorage:WaitForChild("Give5Cash"):FireServer()
    end 
    
    wait(5)
end

【问题讨论】:

    标签: lua roblox


    【解决方案1】:
    local player = Players.LocalPlayer
    if MPS:UserOwnsGamePassAsync(player.UserId, id) then
    

    ...

    在这里,您为 player 分配一个 nil 值,您可能不会索引但会这样做。

    来自Roblox manual

    Players.LocalPlayer

    未复制

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

    LocalPlayer 是一个只读属性,它指的是播放器 客户端正在运行游戏。

    此属性仅针对 LocalScripts(和 ModuleScripts 他们需要),因为它们在客户端上运行。对于服务器(在其上 脚本对象运行它们的代码),此属性为零。

    【讨论】:

    【解决方案2】:

    所以我想出了一个解决这个问题的方法,我已经得到了我的问题的答案。 这是我的做法 我在ServerScriptService 中制作了3 脚本,名称分别为CashGiver5CashGiver10CashGiverHandler 这是我添加到每个脚本中的脚本。 CashGiver5:

    while wait(1) do
        print("Giving Player 5 Cash ")
        for i, player in pairs(game.Players:GetPlayers()) do
            player:WaitForChild("leaderstats").Cash.Value += 5
        end
    end
    

    CashGiver10:

    while wait(1) do
        print("Giving Player 10 Cash ")
        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 的基本脚本。 因此,当玩家被添加到游戏中时,处理程序脚本会销毁其中一个脚本。

    【讨论】:

      猜你喜欢
      • 2020-11-08
      • 2011-05-16
      • 2019-11-08
      • 2022-01-18
      • 2021-07-20
      • 2021-12-28
      • 2020-03-12
      • 2013-06-16
      • 2020-10-17
      相关资源
      最近更新 更多