Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How to award badges through a local script?

Asked by 7 years ago

Is there a way to do this since badges are handled on the server side? Here is my local script if it helps.

local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://636749560"
local animtrack = nil
local canplay = true
local playe = game.Players.LocalPlayer
local char = game.Players.LocalPlayer.Character
local badgeID = 637991953
local badgeService = game:GetService("BadgeService")

function processCommand(message,recipient)
    if message == "/e dab" then
        print("part1")
        if canplay then
            print("part2")
            canplay = false
            animtrack = game.Players.LocalPlayer.Character.Humanoid:LoadAnimation(animation)
            print("part3")
            animtrack:Play()
            badgeService:AwardBadge(playe.userId, badgeID)
            print("part4")
            canplay = true
        end
    end
end

playe.Chatted:connect(processCommand)

Thanks!

1 answer

Log in to vote
0
Answered by
legosweat 334 Moderation Voter
7 years ago

You can do this just as easy in a ServerScript. If anything, you can have a RemoteEvent/RemoteFunction to connect to that LocalScript and a ServerScript.

So that's what I'm going to do.

Essentially, just replace where you give the badge to the call of the RemoteEvent/RemoteFunction. Which calls the function in the ServerScript where it awards the player.

I tried my best to not improve your code and at the same time get the point across.

Example:

LocalScript-

local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://636749560"
local animtrack = nil
local canplay = true
local playe = game.Players.LocalPlayer
local char = playe.Character
local badgeID = 637991953

-- Set up the RemoteEvent (It will be in Lighting)
local Lighting = game:GetService("Lighting")
local Event = Lighting:WaitForChild("RemoteEvent")

function processCommand(message,recipient)
    if message == "/e dab" then
        print("part1")
        if canplay then
            canplay = false
            animtrack = game.Players.LocalPlayer.Character.Humanoid:LoadAnimation(animation)
            animtrack:Play()
        -- Call to the server
        -- We're going to give it some arguments that the AwardBadge function needs 
        -- So it needs the UserID and BadgeID
        Event:FireServer(playe.userId, badgeID) -- Fires the arguments to the server
            canplay = true
        end
    end
end

playe.Chatted:connect(processCommand)

ServerScript:

local badgeService = game:GetService("BadgeService")
-- Set up the RemoteEvent (It will be in Lighting)
local Lighting = game:GetService("Lighting")
local Event = Lighting:WaitForChild("RemoteEvent")

function Award(id, badgeid) -- The function in which awards the player
    badgeService:AwardBadge(id, badgeid) -- Awards the player - BOOM! :D
end

Event.OnServerEvent:connect(Award) -- This listens to when the :FireServer() is called

Sorry if this was spoon feeding, I try my best not too.

0
Thanks! Tybearic 18 — 7y
0
It says on line 37 that there is an infinite yield possible? Could you help me with this? Tybearic 18 — 7y
0
Wait NVM figured it out. Tybearic 18 — 7y
Ad

Answer this question