Части кода локального скрипта случайно перестают работать при респауне - PullRequest
0 голосов
/ 25 января 2020

У меня вопрос по игре Roblox. Игра работает нормально, пока персонаж не умрет. Затем случайные части локального скрипта перестают работать. Слишком долго объяснять, поэтому вот ссылка на игру:

https://web.roblox.com/games/4586742374/Times-Tables-Turf-War

Если вам интересно, обойдите доску и посмотрите, как колонны и строки загораются. Все работает Тогда пусть ваш персонаж d ie. Вы можете сделать это либо падая с края доски, либо стоя на платформе противника (если вы играете против кого-то). Более легкий путь - просто падение края. Когда ваш персонаж возрождается, платформы больше не загораются. Это очень странно, так как это буквально кусок кода, который сидит на локальном скрипте, который перестает работать. Может кто-нибудь объяснить, почему это происходит? tx

---- ОБНОВЛЕНИЕ ------

Это, кажется, происходит в высшей степени, когда вы играете против кого-то, а не самостоятельно, поэтому вам придется попробовать это против кого-то или симуляция множества игроков на локальном сервере.

Вот огромная функция, которую я получил, чтобы справиться с тем, что происходит, когда игрок стоит на платформе. Имейте в виду, что это практически первая страница рабочего кода, который я написал в Studio.

----- ОБНОВЛЕНИЕ2 ------------

Я пытался сделать несколько вещей, в том числе переместить скрипт в starterPlayerScripts (не решил проблему). Я думаю, что есть проблема со скриптом, который может загружаться до того, как персонаж будет готов. Кроме того, это не происходит, когда персонаж падает с края, это происходит только тогда, когда персонаж умирает «на земле», то есть со всеми частями тела, распадающимися. Повлияет ли это на способность Roblox правильно читать сценарий?

local hrp = char:WaitForChild("HumanoidRootPart")
game:GetService("RunService").Heartbeat:Connect(function()
    local charpos = hrp.Position
    for k, v in pairs (allParts) do
        if (charpos - v.CFrame.Position).magnitude <= 6 then -- this is what happens if the player is standing on the platform----------------------------------------------------------

            if findEnemyPlat(allPlats[k].Number) then -- if it's an enemy platform, deal damage
                    DealDamage()
            end

            --first grab information from the platform you are standing on
            local column = allPlats[k].Column
            local row =  allPlats[k].Row
            local number = allPlats[k].Number

            --this is what happens if plr standing in platfrom which number matches board
            if column *row  == game.Workspace.TargetNumber.Value then       
                if findAllPlats(allPlats[k].Number) or allPlats[k].Eliminated == true then -- do nothing if plat is scored, and return immediately if eliminated by you so to not score many points
                    return
                else
                    allPlats[k].Eliminated = true
                    points = points + 1
                    numIfScored:InvokeServer(column, row, teamColorReady, points, team, number)
                end
            end

--------------------------------------------------------------------------------------------------------------------------------------------------------
--What happens to the rest of the platforms and cubees when you stand on one platform-------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------

                for k, v in pairs(allPlats) do

--To platforms and Cubes on same COLUMN-----------------------------------------------------------------------------------------------------------------
                if v.Column == column then -- check which platforms are on the same column by comparing the column property of yours with each one
                    --To The Platforms:
                    v.Part.Transparency = 0
                    v.Part.Material = "Neon"
                    v.Part.BrickColor = BrickColor.new("Medium stone grey")

                --To The Cubes one side
                allCubesCol[allPlats[k].Column + 1].Size = Vector3.new(9.9,16,9.9)
                --and the numbers one side
                local model = allCubesCol[allPlats[k].Column + 1]:GetChildren() -- one side
                for k, v in pairs (model) do
                    v.Material = "Neon"
                end
                local green = allCubesCol[allPlats[k].Column + 1]:GetChildren()
                for k, v in pairs (green) do
                    local X = green[k].Position.X
                    local Y = green[k].Position.Y
                    local Z = green[k].Position.Z
                    green[k].Position = Vector3.new(X, 7, Z)
                end

                --To The Cubes other side
                allCubesCol2[allPlats[k].Column + 1].Size = Vector3.new(9.9,16,9.9)
                --and the numbers other side
                local model2 = allCubesCol2[allPlats[k].Column + 1]:GetChildren() -- the other side
                for k, v in pairs (model2) do
                    v.Material = "Neon"
                end
                local yellow = allCubesCol2[allPlats[k].Column + 1]:GetChildren()
                for k, v in pairs (yellow) do
                    local X = yellow[k].Position.X
                    local Y = yellow[k].Position.Y
                    local Z = yellow[k].Position.Z
                    yellow[k].Position = Vector3.new(X, 7, Z)
                end


--To platforms and Cubes on same ROW---------------------------------------------------------------------------------------------------------
                  elseif v.Row == row then -- check which platforms are on the same row by comparing the column property of yours with each one


                --To the Platforms
                v.Part.BrickColor = BrickColor.new("Medium stone grey")
                v.Part.Material = "Neon"
                v.Part.Transparency = 0

                --To the Cubes one side
                allCubesRow[allPlats[k].Row + 1].Transparency = .7
                allCubesRow[allPlats[k].Row + 1].Size = Vector3.new(9.9,16,9.9) 

                -- To the numbers one side
                local model = allCubesRow[allPlats[k].Row + 1]:GetChildren()
                for k, v in pairs (model) do
                    v.Material = "Neon"
                end
                local blue = allCubesRow[allPlats[k].Row + 1]:GetChildren()
                for k,v in pairs (blue) do
                    local X = blue[k].Position.X
                    local Y = blue[k].Position.Y
                    local Z = blue[k].Position.Z
                    blue[k].Position = Vector3.new(X, 7, Z)
                end

                --To the Cubes other side
                allCubesRow2[allPlats[k].Row + 1].Transparency = .7
                allCubesRow2[allPlats[k].Row + 1].Size = Vector3.new(9.9,16,9.9)    

                -- To the numbers other side
                local model2 = allCubesRow2[allPlats[k].Row + 1]:GetChildren()
                for k, v in pairs (model2) do
                    v.Material = "Neon"
                end
                local red = allCubesRow2[allPlats[k].Row + 1]:GetChildren()
                for k,v in pairs (red) do
                    local X = red[k].Position.X
                    local Y = red[k].Position.Y
                    local Z = red[k].Position.Z
                    red[k].Position = Vector3.new(X, 7, Z)
                end
            end
        end

        return  
    else

--------------------------------------------------------------------------

    ----------------------------------------------------------------------
    --

 this is what happens to ALL PLATFROMS and CUBES the player is not on a platform ----------------------------------------------------------------------
    ------------------------------------------------------------------------------------------------------------------------------------------------    


        --Platforms

        v.Material = "Glass" -- restore material
        v.BrickColor = BrickColor.new("Black") -- restore color

        if allPlats[k].Number == findAllPlats(allPlats[k].Number) then -- except if it belongs to a scored platform
                    v.BrickColor = findAllPlatsColor(allPlats[k].Number)
                    v.Material = "Neon"
        end

        --Cubes

        allCubesCol[allPlats[k].Column + 1].Size = Vector3.new(9.9,9.9,9.9) -- restore size
        allCubesCol2[allPlats[k].Column + 1].Size = Vector3.new(9.9,9.9,9.9)
        allCubesRow[allPlats[k].Row + 1].Size = Vector3.new(9.9,9.9,9.9)
        allCubesRow2[allPlats[k].Row + 1].Size = Vector3.new(9.9,9.9,9.9)

        --Numbers

        --green side
            local model = allCubesCol[allPlats[k].Column + 1]:GetChildren() -- restore color and material
                for k, v in pairs (model) do
                    v.BrickColor = BrickColor.new("Ghost grey")
                    v.Material = "Glass"
                end

        --blue side
            local model2 = allCubesRow[allPlats[k].Row + 1]:GetChildren()
                for k, v in pairs (model2) do

                    v.BrickColor = BrickColor.new("Ghost grey")
                    v.Material = "Glass"
                end

        --yellow side
                local model3 = allCubesCol2[allPlats[k].Column + 1]:GetChildren()
                for k, v in pairs (model3) do
                    v.BrickColor = BrickColor.new("Ghost grey")
                    v.Material = "Glass"
                end

        --red side
                local model4 = allCubesRow2[allPlats[k].Row + 1]:GetChildren()
                for k, v in pairs (model4) do
                    v.BrickColor = BrickColor.new("Ghost grey")
                    v.Material = "Glass"
                end


        local green = allCubesCol[allPlats[k].Column + 1]:GetChildren() -- restores position
                for k, v in pairs (green) do
                    local X = green[k].Position.X
                    local Y = green[k].Position.Y
                    local Z = green[k].Position.Z
                    green[k].Position = Vector3.new(X, 5, Z)
                end 

        local blue = allCubesRow[allPlats[k].Row + 1]:GetChildren()
                for k, v in pairs (blue) do
                    local X = blue[k].Position.X
                    local Y = blue[k].Position.Y
                    local Z = blue[k].Position.Z
                    blue[k].Position = Vector3.new(X, 5, Z)
                end


        local yellow = allCubesCol2[allPlats[k].Column + 1]:GetChildren()
                for k, v in pairs (yellow) do
                    local X = yellow[k].Position.X
                    local Y = yellow[k].Position.Y
                    local Z = yellow[k].Position.Z
                    yellow[k].Position = Vector3.new(X, 5, Z)
                end
        local red = allCubesRow2[allPlats[k].Row + 1]:GetChildren()
                for k, v in pairs (red) do
                    local X = red[k].Position.X
                    local Y = red[k].Position.Y
                    local Z = red[k].Position.Z
                    red[k].Position = Vector3.new(X, 5, Z)
                end
    end
end
end)

1 Ответ

0 голосов
/ 27 января 2020

Я не уверен, так ли это, но проверьте, появляется ли скрипт внутри символа, если он не помещает скрипт в StarterPlayerScripts, добавьте некоторые переменные, и все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...