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

Changing a player's HumanoidRigType in-game?

Asked by
zane21225 243 Moderation Voter
3 years ago

I am making this button for my obby that will essentially change the player's HumanoidRigType to R15 or R6. (In case some people prefer R15, etc.)

When the HumanoidRigType changes, it just kills the player and reverts to the HumanoidRigType that the player just had, rather than changing it.

I assumed that I'd need a ServerScript to change a player's HumanoidRigType, so I whipped up a quick RemoteEvent that I can call via my LocalScript.

The location of the script is in a Gui in ScreenGui (in StarterGui), (which if you didn't know) transfers to a player's PlayerGui after they join.

Below is the script:

-- Variables:

local eventsFolder = game:GetService('ReplicatedStorage').RemoteEvents
local changeRigTypeEvent = eventsFolder:WaitForChild('ChangeHumanoidRigType')
local freezePlayerToggleEvent = eventsFolder:WaitForChild('FreezePlayerToggle')

local AreYouSure = script.Parent.AreYouSure
local Button = script.Parent.Button
local LRCTextLabel = script.Parent.LoadingRigChange

-- Tweening Function:

local function tweenAreYouSure(inout)
    if inout == 'in' then
        AreYouSure:TweenPosition(UDim2.new(0.319,0,0.285,0), "In", "Bounce", 1)
    elseif inout == 'out' then
        AreYouSure:TweenPosition(UDim2.new(0.319, 0, 1.05, 0), "Out", "Bounce", 1)
    end
end

-- OnClicked Functions:

local function onClicked1()
    freezePlayerToggleEvent:FireServer('on')
    for i = 10, 1, -1 do
        wait(0.05)
        Button.ImageTransparency = Button.ImageTransparency + .1
        Button.TextLabel.TextTransparency = Button.TextLabel.TextTransparency + 0.1
    end
    Button.Visible = false
    tweenAreYouSure('in')
end

local function onClicked2() --cancel
    tweenAreYouSure('out')
    Button.Visible = true
    for i = 10, 1, -1 do
        wait(0.05)
        Button.ImageTransparency = Button.ImageTransparency - 0.1
        Button.TextLabel.TextTransparency = Button.TextLabel.TextTransparency - 0.1
    end
    freezePlayerToggleEvent:FireServer('off')
end

local function onClicked3() --change rig type
    local loadingTime1 = math.random(1,8)
    print('The loading cycle will repeat '..loadingTime1..' time(s)')
    tweenAreYouSure('out')
    LRCTextLabel:TweenPosition(UDim2.new(0.046, 0, 0.408, 0), "In", "Linear", 0.25)
    for i = loadingTime1, 1, -1 do
        LRCTextLabel.Text = 'Loading'
        LRCTextLabel.Text = 'Loading.'
        LRCTextLabel.Text = 'Loading..'
        LRCTextLabel.Text = 'Loading...'
    end
    changeRigTypeEvent:FireServer() -- where it calls the event
end

-- Calling onClicked Functions:
Button.MouseButton1Click:Connect(onClicked1)
AreYouSure.Cancel.MouseButton1Click:Connect(onClicked2)
AreYouSure.Yes.MouseButton1Click:Connect(onClicked3)

Please note that everything works except for changing the player's HumanoidRigType.

Below is the script that is receiving the event that changed the humanoid's RigType:

(ignore the freeze toggle it's for something else)

-- Variables:
local ReplicatedStorage = game:GetService('ReplicatedStorage')
local EventsFolder = ReplicatedStorage:WaitForChild('RemoteEvents')

-- Event Functions:

function changePlayerRigType(player) --function that changes rig type
    local humanoid = player.Character.Humanoid
    if humanoid.RigType ~= Enum.HumanoidRigType.R15 then
        humanoid.RigType = Enum.HumanoidRigType.R15
    elseif humanoid.RigType ~= Enum.HumanoidRigType.R6 then
        humanoid.RigType = Enum.HumanoidRigType.R6
    end
end

function freezeToggle(player, onOff)
    if onOff == 'off' then
        player.Character.Humanoid.JumpPower = 50
        player.Character.WalkSpeed = 16
    elseif onOff == 'on' then
        player.Character.Humanoid.JumpPower = 0
        player.Character.Humanoid.WalkSpeed = 0
    else
        warn('Something is wrong with data being transferred to the event.')
    end
end

-- Calling Events:

EventsFolder.ChangeHumanoidRigType.OnServerEvent:Connect(changePlayerRigType)
EventsFolder.FreezePlayerToggle.OnServerEvent:Connect(freezeToggle)

I looked on Google before posting this question, and it seems as other people are also wanting answers for this! Thanks for helping.

Answer this question