Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- LocalScript ---
- local PS = game:GetService("Players")
- local player = PS.LocalPlayer
- local mouse = player:GetMouse()
- local tool = script.Parent
- local heal = tool:WaitForChild("Heal")
- local highlights = {} -- Table to store the selection box instances
- local beam = nil -- Initialize the beam variable
- local currentTarget = nil -- Track the current player being hovered over
- local QuantityLabel = player.PlayerGui:WaitForChild("BackpackGui").Frame.quantityLabel
- tool.Equipped:Connect(function()
- -- Create selection boxes for all players
- for _, v in ipairs(PS:GetPlayers()) do
- if v ~= player then
- local char = v.Character
- if char and char:IsA("Model") then
- local charPart = char
- if charPart then
- local highlight = Instance.new("SelectionBox")
- highlight.Color3 = Color3.fromRGB(0, 249, 0)
- highlight.LineThickness = 0.1
- highlight.Adornee = charPart
- highlight.Parent = charPart
- highlights[v] = highlight
- end
- end
- end
- end
- if not beam then
- beam = Instance.new("Beam")
- beam.Color = ColorSequence.new(Color3.fromRGB(0, 249, 0)) -- Set the beam color to green
- beam.Parent = workspace
- end
- mouse.Move:Connect(function()
- local targetPlayer = nil
- -- Check if the mouse is hovering over any player's character
- for _, v in ipairs(PS:GetPlayers()) do
- if v ~= player then
- local char = v.Character
- if char and char:IsA("Model") then
- local charPart = char:FindFirstChild("HumanoidRootPart")
- if charPart then
- local mouseHit = mouse.Hit.p
- local charPos = charPart.Position
- local distance = (mouseHit - charPos).Magnitude
- -- If the mouse is within a certain distance of the player's character, consider it a hover
- if distance <= 5 then
- targetPlayer = v
- break
- end
- end
- end
- end
- end
- if targetPlayer ~= currentTarget then
- -- Remove the beam if a new target is being hovered
- if beam then
- if beam.Attachment0 then
- beam.Attachment0:Destroy()
- end
- if beam.Attachment1 then
- beam.Attachment1:Destroy()
- end
- end
- if targetPlayer then
- -- Create and attach an attachment to the player's and the closest player's root parts
- local attachment0 = Instance.new("Attachment")
- attachment0.Parent = player.Character.HumanoidRootPart
- local attachment1 = Instance.new("Attachment")
- attachment1.Parent = targetPlayer.Character.HumanoidRootPart
- -- Set the Attachments as the end points of the beam
- if beam then
- beam.Attachment0 = attachment0
- beam.Attachment1 = attachment1
- end
- end
- currentTarget = targetPlayer
- end
- end)
- end)
- tool.Unequipped:Connect(function()
- -- Remove selection boxes when unequipping the tool
- for _, highlight in pairs(highlights) do
- highlight:Destroy()
- end
- highlights = {}
- -- Remove the beam attachments and destroy the beam when unequipping the tool
- if beam then
- if beam.Attachment0 then
- beam.Attachment0:Destroy()
- end
- if beam.Attachment1 then
- beam.Attachment1:Destroy()
- end
- beam:Destroy()
- beam = nil
- end
- currentTarget = nil
- end)
- tool.AncestryChanged:Connect(function(_, parent)
- -- Remove selection boxes and the beam when the tool is destroyed
- if not parent then
- for _, highlight in pairs(highlights) do
- highlight:Destroy()
- end
- highlights = {}
- if beam then
- if beam.Attachment0 then
- beam.Attachment0:Destroy()
- end
- if beam.Attachment1 then
- beam.Attachment1:Destroy()
- end
- beam:Destroy()
- beam = nil
- end
- currentTarget = nil
- end
- end)
- tool.Activated:Connect(function()
- if currentTarget then
- heal:FireServer(currentTarget)
- else
- -- If no other player is targeted by the mouse hover, heal the player using the tool
- heal:FireServer(player)
- if tool:WaitForChild("stacks").Value == 0 then
- QuantityLabel.Visible = false
- end
- end
- end)
- tool:WaitForChild("stacks").Changed:Connect(function(Value)
- QuantityLabel.Text = "Quantity: "..Value
- end)
- QuantityLabel.Text = "Quantity: "..tool.stacks.Value
- tool.Equipped:Connect(function()
- QuantityLabel.Visible = true
- end)
- tool.Unequipped:Connect(function()
- QuantityLabel.Visible = false
- end)
- --- Script ---
- local tool = script.Parent
- local heal = tool:WaitForChild("Heal")
- local remainingUses = 3 -- Variable to track the remaining uses
- local RunService = game:GetService("RunService")
- local function playHealEffect(character)
- local core = game.ReplicatedStorage:FindFirstChild("healingcore") -- Assuming the part is in ReplicatedStorage
- if core then
- local rootPart = character:FindFirstChild("HumanoidRootPart")
- if rootPart then
- core = core:Clone()
- core.Parent = rootPart
- core.CFrame = rootPart.CFrame -- Set the initial CFrame to match the HumanoidRootPart
- local weld = Instance.new("WeldConstraint")
- weld.Parent = core
- weld.Part0 = core
- weld.Part1 = rootPart
- wait(2) -- Wait for 2 seconds
- weld:Destroy() -- Remove the WeldConstraint
- core:Destroy() -- Destroy the part after 2 seconds
- end
- end
- end
- heal.OnServerEvent:Connect(function(player, target)
- local char = target.Character
- local hum = char:WaitForChild("Humanoid")
- if hum and hum.Health < hum.MaxHealth and remainingUses > 0 then
- hum.Health += 50
- remainingUses -= 1
- script.Parent.Sound.Playing = true
- playHealEffect(char) -- Call the function to play the heal effect
- if remainingUses <= 0 then
- tool.stacks.Value -= 1
- if tool.stacks.Value == 0 then
- player.Character.Humanoid:UnequipTools()
- wait(0.0000000000000000001)
- tool:Destroy()
- end
- end
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement