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

Humanoid root part CFrame change working fine in studio, works perfectly in studio, but not in-game?

Asked by 3 years ago

Serverside

local values = game:GetService('ReplicatedStorage').Values
wait(1)
local players = game.Players:GetPlayers()
local interval = 1
local length = 30
local minimum = 0

local roundEnded = false



local roundDuration = values:FindFirstChild('roundDuration')
local roundMax = roundDuration.Value

local mapFolder = game:GetService('ReplicatedStorage').Maps

-- Insert maps into table

local maps = {}

for _,map in pairs(mapFolder:GetChildren()) do
    table.insert(maps,1,map)
end

function servercountdown()
    -- Countdown script
    while wait(interval) do
        for i = length,minimum,-1 do
            local intermissionTime = game:GetService('ReplicatedStorage').Values:WaitForChild('IntermissionTime')
            intermissionTime.Value = i
            wait(1)
        end
        wait(2)
        local map = maps[math.random(1,#maps)]

        map.Parent = workspace
        for _,player in pairs(players) do
            print(player.Name)
            player.Character.HumanoidRootPart.CFrame = map.PrimaryPart.CFrame
        end
        for i = roundMax,minimum,-1 do
            roundDuration.Value -= 1
            wait(1)
            if roundDuration.Value == 110 then
                for _,player in pairs(game.Players:GetChildren()) do
                    local gunclone = game.ReplicatedStorage["Laser Gun"]:Clone()
                    gunclone.Parent = player.Backpack
                end
            end
            if roundDuration.Value == 0 then
                print("Round ended")
                map.Parent = game.ReplicatedStorage
                for _,player in pairs(players) do
                    print(player.Name)
                    player.Character.HumanoidRootPart.CFrame = workspace.SpawnLocation.CFrame
                end
                roundEnded = true
                for _,player in pairs(game.Players:GetChildren()) do
                    local lasergun = player.Character:FindFirstChild("Laser Gun") or player.Backpack:FindFirstChild("Laser Gun")
                    if not lasergun then
                        print("Laser gun not found, couldn't destroy.")
                    else
                        lasergun:Destroy()
                    end
                end
            end
        end
    end
end

local svrcountdown = coroutine.create(servercountdown)

local success,errormessage = coroutine.resume(svrcountdown)

while wait() do
    if roundEnded == true then
        local newsvrcountdown = coroutine.create(servercountdown)
        local success2,errormessage2 = coroutine.resume(newsvrcountdown)
        if success2 then
            game.ReplicatedStorage.Values.IntermissionTime.Value = 30
            game.ReplicatedStorage.Values.roundDuration.Value = 120
            roundEnded = false
        else
            warn(errormessage2)
        end
    end
end

Client-side

local screenGUI = script.Parent.Parent
script.Parent.ResetOnSpawn = false
wait(1)

local values = game:GetService('ReplicatedStorage').Values

local intermissionTime
local roundEnded = false
local roundDuration

local text = script.Parent.Frame.Intermission.Text

function setIntermission()
    while wait(.069) do
        intermissionTime = values:FindFirstChild('IntermissionTime')
        roundDuration = values:FindFirstChild('roundDuration')
        script.Parent.Frame.Intermission.Text = "Intermission: "..intermissionTime.Value.." seconds left."
        if intermissionTime.Value == 0 then
            print("Intermission over")
            script.Parent.Frame.Intermission.Text = "Game started!"
            wait(2)
            break
        end
    end
    while wait(.069) do
        roundDuration = values:FindFirstChild('roundDuration')
        script.Parent.Frame.Intermission.Text = "Time Left: "..roundDuration.Value.." seconds."
        if roundDuration.Value == 0 then
            print("Round over")
            script.Parent.Frame.Intermission.Text = "Game over!"
            wait(2)
            roundEnded = true
            break
        end
    end
end

local intermissionCoro = coroutine.create(setIntermission)

local success,errormessage = coroutine.resume(intermissionCoro)

if success then
    print('Coroutine ran successfully!')
else
    print("Coroutine SUCKS!")
end

while wait() do
    local newCoro = coroutine.create(setIntermission)
    if roundEnded == true then
        print("Round Over, starting coroutine")
        local success2,errormessage2 = coroutine.resume(newCoro)

        if success2 then
            print('Coroutine ran successfully!')
            roundEnded = false
        else
            print("Coroutine SUCKS!")
            warn(errormessage)
        end
    end
end

Works as scripted in studio as well as in-game except the teleport / humanoidrootpart cframe change isnt working in-game :/

0
i have the same problem but with datastores. Datastore gets data perfectly in roblox studio but it doesnt work in game. I think it may be roblox issues but idk kujekmarek 24 — 3y
0
you have to enable API services person above me AcrylixDev 119 — 3y
0
you have to enable API services person above me AcrylixDev 119 — 3y
0
you have to enable API services person above me game settings > security > enable api services AcrylixDev 119 — 3y
View all comments (2 more)
0
you have to enable API services person above me game settings > security > enable api services AcrylixDev 119 — 3y
0
sorry it lagged and it posted multiple times AcrylixDev 119 — 3y

Answer this question