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

Player left with highlight after disabled?

Asked by 2 years ago

So basically i have code where if you hold down q then you can see players through walls using the highlight feature that has been created recently but my problem is where when its disabled one of the dummys is still left using it now i tested it with more characters it just seems to iterate through twice and not more

local UserInputService = game:GetService("UserInputService")
local CurrentCamera = workspace.CurrentCamera

local Keycode = Enum.KeyCode.Q 

local ActivationSound = script:WaitForChild("SoundEffect")

local FillColor = Color3.fromRGB(28, 255, 43)
local OutlineColor = Color3.fromRGB(13, 13, 13)

function PlayerHeat(Removal)    
    for i, model in pairs(workspace:GetChildren()) do
        if model:FindFirstChild("Humanoid") and model ~= script.Parent then
            local Character = model

            if Removal and Character:FindFirstChildOfClass("Highlight") then
                for i, model in pairs(workspace:GetChildren()) do
                    if model:FindFirstChild("HumanoidRootPart") then
                        print(model)
                        print(model:FindFirstChildOfClass("Highlight"))

                        model:FindFirstChildOfClass("Highlight"):Destroy()
                        if not game.Lighting:FindFirstChild("HeatCorrection") then return end
                        game.Lighting:FindFirstChild("HeatCorrection"):Destroy()
                    end
                end
            end

            local NewHighlight = Instance.new("Highlight")

            NewHighlight.Adornee = Character
            NewHighlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
            NewHighlight.Enabled = true
            NewHighlight.FillColor = FillColor
            NewHighlight.OutlineColor = OutlineColor
            NewHighlight.FillTransparency = 0
            NewHighlight.OutlineTransparency = 0

            NewHighlight.Parent = Character
        end
    end
    local CorrectionClone = script.ColorCorrection:Clone()
    CorrectionClone.Name = "HeatCorrection"
    CorrectionClone.Parent = game.Lighting
end

function FieldOfViewMod(FOV)
    CurrentCamera.FieldOfView = FOV
end

UserInputService.InputBegan:Connect(function(input, processed)
    if processed then return end

    if input.KeyCode == Keycode then
        PlayerHeat(false)
        FieldOfViewMod(45)
        ActivationSound:Play()
    end
end)

UserInputService.InputEnded:Connect(function(input, processed)
    if processed then return end

    if input.KeyCode == Keycode then
        PlayerHeat(true)
        FieldOfViewMod(70)
        return
    end
end)

1 answer

Log in to vote
0
Answered by
Leamir 3138 Moderation Voter Community Moderator
2 years ago

Hello, ragdollkiiing2!

The only problem with the code is that when removing, you are using return if there is no HeatCorrection in lighting, which is probably what is breaking the code, as it works as a break for the loop.

To fix it, you can replace it with continue, which just stops current iteration on the loop

local UserInputService = game:GetService("UserInputService")
local CurrentCamera = workspace.CurrentCamera

local Keycode = Enum.KeyCode.Q 

local ActivationSound = script:WaitForChild("SoundEffect")

local FillColor = Color3.fromRGB(28, 255, 43)
local OutlineColor = Color3.fromRGB(13, 13, 13)

function PlayerHeat(Removal)    
    for i, model in pairs(workspace:GetChildren()) do
        if model:FindFirstChild("Humanoid") and model ~= script.Parent then
            local Character = model

            if Removal and Character:FindFirstChildOfClass("Highlight") then
                for i, model in pairs(workspace:GetChildren()) do
                    if model:FindFirstChild("HumanoidRootPart") then
                        print(model)
                        print(model:FindFirstChildOfClass("Highlight"))

                        model:FindFirstChildOfClass("Highlight"):Destroy()
                        if not game.Lighting:FindFirstChild("HeatCorrection") then continue end
                        game.Lighting:FindFirstChild("HeatCorrection"):Destroy()
                    end
                end
            end

            local NewHighlight = Instance.new("Highlight")

            NewHighlight.Adornee = Character
            NewHighlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
            NewHighlight.Enabled = true
            NewHighlight.FillColor = FillColor
            NewHighlight.OutlineColor = OutlineColor
            NewHighlight.FillTransparency = 0
            NewHighlight.OutlineTransparency = 0

            NewHighlight.Parent = Character
        end
    end
    local CorrectionClone = script.ColorCorrection:Clone()
    CorrectionClone.Name = "HeatCorrection"
    CorrectionClone.Parent = game.Lighting
end

function FieldOfViewMod(FOV)
    CurrentCamera.FieldOfView = FOV
end

UserInputService.InputBegan:Connect(function(input, processed)
    if processed then return end

    if input.KeyCode == Keycode then
        PlayerHeat(false)
        FieldOfViewMod(45)
        ActivationSound:Play()
    end
end)

UserInputService.InputEnded:Connect(function(input, processed)
    if processed then return end

    if input.KeyCode == Keycode then
        PlayerHeat(true)
        FieldOfViewMod(70)
        return
    end
end)

If this solves your question, please mark it as the Accepted Answer

Ad

Answer this question