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

ProximityPrompt's Distance not changing back to 5. Why?

Asked by
vxnnisu 17
2 years ago

Hey there! I'm making a survival game where you can pick up items and throw/drop them, and I'm trying to fix this bug for the past 2 days where if you pick up and drop different items after another one, the MaxActivationDistance on the ProximityPrompt doesn't change, and stays 0 making it so that you can't pick it up anymore. I will give the script's name, location, type for more info.

Script Inside Block:

script.Parent.ProximityPrompt.Triggered:Connect(function(plr)
    if game.ReplicatedStorage.CurrItem.Value == "" then
        game.ReplicatedStorage.CurrItem.Value = script.Parent.Name
        game.ReplicatedStorage.ClientBlock:FireClient(plr, script.Parent)
    end
end)

game.ReplicatedStorage.ReturnTrue.Event:Connect(function()
    if game.ReplicatedStorage.ItemLocation.Value == script.Parent.Name then
        script.Parent.ProximityPrompt.MaxActivationDistance = 5
    end
end)

The things inside the block are a ProximityPrompt, and a Normal Script, located in Workspace.

Script Inside ServerScriptService:

local CanThrowBlock = false

local function Takeblock(plr, block)
    if game.ReplicatedStorage.CurrItem.Value == block.Name then
        local weld = Instance.new("Weld")
        local Char = plr.Character
        local Torso = Char:WaitForChild("Torso")
        weld.Parent = Torso
        weld.Part0 = Torso
        weld.Part1 = block
        block.CFrame = Torso.CFrame
        block.Position = block.Position + Torso.CFrame.LookVector
        weld.Name = "BlockWeld"
        block.ProximityPrompt.MaxActivationDistance = 0
        block.CanCollide = false
        wait(.5)
        CanThrowBlock = true
    end
end

local function ThrowBlock(plr, block)
    if CanThrowBlock == true then
        local Char = plr.Character
        local Torso = Char:WaitForChild("Torso")
        local weld = Torso:WaitForChild("BlockWeld")
        game.ReplicatedStorage.ItemLocation.Value = block.Name
        game.ReplicatedStorage.ReturnTrue:Fire(plr)
        weld:Destroy()
        weld.Part1.CanCollide = true
        weld.Part1.Velocity = weld.Part1.CFrame.LookVector * 50
        game.ReplicatedStorage.CurrItem.Value = ""
        CanThrowBlock = false
    end
end

local function DropBlock(plr, block)
    if CanThrowBlock == true then
        local Char = plr.Character
        local Torso = Char:WaitForChild("Torso")
        local weld = Torso:WaitForChild("BlockWeld")
        game.ReplicatedStorage.ItemLocation.Value = block.Name
        game.ReplicatedStorage.ReturnTrue:Fire(plr)
        weld:Destroy()
        weld.Part1.CanCollide = true
        game.ReplicatedStorage.CurrItem.Value = ""
        CanThrowBlock = false
    end
end

game.ReplicatedStorage.TakeBlock.OnServerEvent:Connect(Takeblock)
game.ReplicatedStorage.ThrowBlock.OnServerEvent:Connect(ThrowBlock)
game.ReplicatedStorage.DropBlock.OnServerEvent:Connect(DropBlock)

Already said where located.

LocalScript inside StarterGui:

local plr = game.Players.LocalPlayer
local char = plr.Character or plr.CharacterAdded:Wait()
local uis = game:GetService("UserInputService")
local hum = char:WaitForChild("Humanoid")
local anim1 = hum:LoadAnimation(script.HoldingAnim)
local anim2 = hum:LoadAnimation(script.ThrowAnim)
local anim3 = hum:LoadAnimation(script.DropAnim)
local CanGrabBlock = true
local tapped = false

uis.InputBegan:Connect(function(input, gameProcessedEvent)
    if tapped == true then
    game.ReplicatedStorage.ThrowBlock:FireServer(plr)
    anim1:Stop()
    wait(1)
    CanGrabBlock = true
    end
end)

function Block(plr, block)
    if CanGrabBlock == true then
        CanGrabBlock = false
        anim1:Play()
        game.ReplicatedStorage.TakeBlock:FireServer(plr, block)
        uis.InputBegan:Connect(function(input, gameProcessedEvent)
            local function keypressed(actionName, userInputState, inputObject)
                if userInputState == Enum.UserInputState.Begin then
                    if input.KeyCode == Enum.KeyCode.R then
                        game.ReplicatedStorage.ThrowBlock:FireServer(plr, block)
                        anim1:Stop()
                        anim3:Play()
                        wait(1)
                        CanGrabBlock = true
                end
                    if input.KeyCode == Enum.KeyCode.E then
                        game.ReplicatedStorage.DropBlock:FireServer(plr, block)
                        anim1:Stop()
                        anim2:Play()
                        wait(1)
                        CanGrabBlock = true
                    end
                end
            end
            game.ContextActionService:BindAction("Throw", keypressed, true, Enum.KeyCode.R)
            game.ContextActionService:SetPosition("Throw", UDim2.new(.5,0,.25,0))
            game.ContextActionService:BindAction("Drop", keypressed, true, Enum.KeyCode.E)
            game.ContextActionService:SetPosition("Drop", UDim2.new(.10,0,.25,0))
        end)
    end
end

game.ReplicatedStorage.ClientBlock.OnClientEvent:Connect(Block)

Already said the type, and location. Inside the LocalScript is 3 animations, but that doesn't matter I don't think.

There is multiple important events inside ReplicatedStorage, here they are.

ClientDrop (RemoteEvent), DropBlock (RemoteEvent), ReturnTrue (BindableEvent), TakeBlock (RemoteEvent), ThrowBlock (RemoteEvent)

There is StringValues in ReplicatedStorage also, so here's that

CurrItem, ItemLocation

I would greatly appreciate if this was fixed, it has made a hault to a game I've been developing. Thank you so much and even if you weren't planning on helping me, I appreciate you reading.

Thanks.

Answer this question