Твоя проблема, скорее всего, связана с тем, что функция `UserOwnsGamePassAsync` работает асинхронно, и результат её выполнения не доступен сразу. Это значит, что ты пытаешься использовать результат проверки владельца геймпаса до того, как она завершится.
Чтобы исправить это, нужно использовать `await` или обработку результата с помощью функции `callback`, чтобы убедиться, что результат проверки доступен перед продолжением выполнения кода.
Вот исправленная версия твоего кода с использованием `:andThen` для обработки асинхронного вызова:
```lua
local ms = game:GetService("MarketplaceService")
game.Players.PlayerAdded:Connect(function(plr)
-- Используем асинхронную проверку через :andThen
ms:UserOwnsGamePassAsync(plr.UserId, 1064646395):andThen(function(hasGamePass)
if hasGamePass then
script.Parent.Text = "Gold"
else
script.Parent.Text = "Gold (100 R)"
end
script.Parent.MouseButton1Click:Connect(function()
ms:UserOwnsGamePassAsync(plr.UserId, 1064646395):andThen(function(hasGamePass)
if hasGamePass then
script.Parent.Text = "Gold"
local parts = game.Workspace.Rock:GetChildren()
for i = 1, #parts do
local part = parts[i]
if part:IsA("Part") then
part.Transparency = 1
end
end
game.Workspace.Rock.Gold .Transparency = 0
else
script.Parent.Text = "Gold (100 R)"
ms:PromptGamePassPurchase(plr, 1064646395)
end
end)
end)
end)
end)
```
Что изменилось:
1. Вместо того, чтобы сразу использовать `ms:UserOwnsGamePassAsync()`, я использую `:andThen`, чтобы гарантировать, что результат будет получен до выполнения следующего шага. Это нужно, чтобы асинхронная операция завершилась перед продолжением выполнения кода.
2. Для проверки геймпаса используется обработчик результата внутри `andThen`, что позволяет корректно отработать логику.
Теперь код должен корректно проверять, есть ли у игрока геймпасс, и на основе этого выполнять дальнейшие действия.