Как сделать скрипт 2x Cash Gamepass 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("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

person JUB0T    schedule 23.03.2021    source источник


Ответы (2)


local player = Players.LocalPlayer
if MPS:UserOwnsGamePassAsync(player.UserId, id) then

...

Здесь вы присваиваете player значение nil, которое вы не можете индексировать, но делаете.

Из руководства по Roblox:

Players.LocalPlayer

NotReplicated

Этот элемент не реплицируется через границу сервера / клиента Roblox.

LocalPlayer - это свойство только для чтения, которое относится к игроку, на клиенте которого запущена игра.

Это свойство определяется только для сценариев LocalScripts (и требуемых сценариев ModuleScripts), поскольку они выполняются на клиенте. Для сервера (на котором объекты Script запускают свой код) это свойство равно нулю.

person Piglet    schedule 23.03.2021
comment
Есть ли способ исправить? - person JUB0T; 23.03.2021
comment
да, вы читали руководство ... developer.roblox.com/ ru-us / article / Roblox-Client-Server-Model. - person Piglet; 23.03.2021
comment
у вас также есть доступ к игрокам на стороне сервера. просто нет LocalPlayer ... - person Piglet; 23.03.2021

Итак, я нашел способ решить эту проблему и получил ответ на свой вопрос. Вот как я это сделал. Я сделал 3 скрипт в ServerScriptService с именами CashGiver5, CashGiver10 и CashGiverHandler вот скрипты, которые я добавил к каждому скрипту. 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 каждую секунду. поэтому сценарий Handler уничтожает один из сценариев, когда игрок добавляется в игру.

person JUB0T    schedule 23.03.2021