This is a yielding function. When called, it will pause the Lua thread that called the function until a result is ready to be returned, without interrupting other scripts.
UserHasBadgeAsync checks whether a player owns a badge given the
Player/UserId|UserId and the badge’s id. Such a query can only be made under the following conditions:
- This function must be called from the server, i.e. in a
ModuleScripteventually required by a Script.
- The player in question must be present in the server.
Any badge for any game can be queried, no matter who created the badge or which game it is used for. There are a number of applications of UserHasBadge:
- A restricted door that can only be opened by players who own a badge (see code sample)
- A basic way of determining if a player has played another game
- Very simple progress saving. However, it is recommended developers use
DataStoreServicefor saving as it is more scale-able and robust (remember - players can delete their own badges).
The UserId of the Player who will be checked for ownership of the specified badge.
The badgeId of the badge whose ownership will be checked.
A bool indicating if the specified user has the specified badge.
Creating a Badge Restricted Door
This code sample creates a restricted door in the Workspace that can only be used by players who own the badge associated with BADGE_ID.
local Players = game:GetService("Players") local BadgeService = game:GetService("BadgeService") local BADGE_ID = 1 -- change this -- create a door part local door = Instance.new("Part") door.Anchored = true door.Size = Vector3.new(7, 10, 1) door.Position = Vector3.new(0, 5, 0) door.Parent = game.Workspace local debounce = false local function hit() if not debounce then debounce = true if hit then local player = Players:GetPlayerFromCharacter(hit.Parent) -- if player exists and owns the badge if player and BadgeService:UserHasBadgeAsync(player.UserId, BADGE_ID) then -- open the door door.Transparency = 0.5 door.CanCollide = false -- wait wait(3) -- close the door door.Transparency = 0 door.CanCollide = true end end -- cooldown wait(0.5) debounce = false end end door.Touched:Connect(hit)