So this has been strangely happening to me recently with my latest project, but I consistently get internalserviceerror when calling userowngamepassasync for the radio pass. It’s gotten so bad to the point that I had to put it in a pcall to stop my gamescript from breaking from time to time. It is also called on character added to give players the radio accessory, and that has just errored for the first time.
Here are some examples of functions I use to check for passes:
GameScript Functions
local function CheckPermissions(player, Type)
if Type == "CheckOwner" then
local Owners = Module.Creators
for o = 1, #Owners do
if Owners[o] == player.UserId then
return true
end
end
elseif Type == "CheckAdmin" then
local Admins = Module.Admins
for a = 1, #Admins do
if Admins[a] == player.UserId then
return true
end
end
elseif Type == "CheckIntern" then
local Interns = Module.Interns
for i = 1, #Interns do
if Interns[i] == player.UserId then
return true
end
end
elseif Type == "CheckMod" then
local Mods = Module.Mods
for i = 1, #Mods do
if Mods[i] == player.UserId then
return true
end
end
end
return false
end
local function CheckGP(player, Pass)
local HasPass = false
local Success, Error = pcall(function()
if MPS:UserOwnsGamePassAsync(player.UserId, Pass) then
HasPass = true
end
end)
if Success then
return HasPass
else
warn("There was an issue checking a player for a pass, Handling Now!")
end
end
local function CheckForRadioAccess(player)
local Radio = false
local Success, Error = pcall(function()
if MPS:UserOwnsGamePassAsync(player.UserId, GPIDS.Radio) or CheckPermissions(player, "CheckOwner") or CheckPermissions(player, "CheckAdmin") or CheckPermissions(player, "CheckIntern") or CheckPermissions(player, "CheckMod") then
Radio = true
end
end)
if Success then
print("Checking "..player.Name.." for radio access")
return Radio
else
warn("There was an issue in checking a player for a radio. Handling Now!")
end
end
as you see I had added that pcall to stop the game from breaking everytime the error happens
Now this is an example of it being used like when players receive roles as murderer, bystander or sheriff:
for x = 1, 1 do
local ran = math.random(1, #PlayersToAssign)
local player = game.Players:FindFirstChild(PlayersToAssign[ran])
if player then
if player.Character ~= nil then
local Main = player.PlayerGui:WaitForChild("Main")
local Back = Main:WaitForChild("Back")
local Spectate = Back:WaitForChild("Spectate")
local Shop = Back:WaitForChild("Shop")
local SpectateFrame = Main:WaitForChild("SpectateFrame")
local ShopFrame = Main:WaitForChild("ShopFrame")
Spectate:Destroy()
Shop:Destroy()
SpectateFrame:Destroy()
ShopFrame:Destroy()
if CheckForRadioAccess(player) then
local RadioGui = game.ReplicatedStorage["UI's"].RadioUi:Clone()
RadioGui.Parent = player.PlayerGui.Main
end
local Role = Instance.new("StringValue")
Role.Name = "Role"
Role.Parent = player.Character
Role.Value = "Murderer"
LastMurderer = player.Name
local spawns = GetMap.SpawnPoints:GetChildren()
local ranspawn = math.random(1, #spawns)
if player.Character:FindFirstChild("Torso") then
player.Character.Torso.CFrame = CFrame.new(spawns[ranspawn].Position)
end
events.ClientMessage:FireClient(player, "AssignRole", "YOU ARE THE MURDERER!", "Murderer")
local GetRagdoll = script.Ragdoll:Clone()
GetRagdoll.Parent = player.Character
GetRagdoll.Disabled = false
player.Character.Humanoid.Died:Connect(function()
UpdateSpectate(player, "OnDeath")
end)
coroutine.resume(coroutine.create(function()
wait(3)
for i = 5, 1, -1 do
wait(1)
events.ClientMessage:FireClient(player, "RecieveWeapon", "Recieving your weapon in", "Murderer", i)
if player.Character:FindFirstChild("Role") == nil then
events.ClientMessage:FireClient(player, "BreakReciever")
break
end
end
wait(1)
if player.Character:FindFirstChild("Role") ~= nil then
local Knife = Tools.Knife:Clone()
Knife.Parent = player.Backpack
end
end))
table.remove(PlayersToAssign, ran)
end
end
end