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.
