Ok, this is the hyper laser gun, I have made a few modifications to it, and it does damage to humanoids but it wont kill them and when it does damage i can pull out another weapon and then it starts damaging them again back from full health, why tho?
----------------- --| Constants |-- ----------------- local SHOT_SPEED = 1000 local SHOT_TIME = 100 local NOZZLE_OFFSET = Vector3.new(0, 0.5, 5) ----------------- --| Variables |-- ----------------- local PlayersService = game:GetService('Players') local DebrisService = game:GetService('Debris') local Tool = script.Parent local Handle = Tool:WaitForChild('Handle') local holdtrack local rl local firetrack local FireAnim = script.Parent:WaitForChild('FireAni') local FireSound = Handle:WaitForChild('Fire') local idleAnim = script.Parent:WaitForChild('idle') local reloadAnim = script.Parent:WaitForChild('Reload') local ReloadSound = Handle:WaitForChild('Reload') local HitFadeSound = script:WaitForChild('HitFade') local PointLight = Handle:WaitForChild('PointLight') local Character = nil local Humanoid = nil local Player = nil local BaseShot = nil ----------------- --| Functions |-- ----------------- -- Returns a character ancestor and its Humanoid, or nil local function FindCharacterAncestor(subject) if subject and subject ~= game.Workspace then local humanoid = subject:FindFirstChild('Humanoid') if humanoid then return subject, humanoid else return FindCharacterAncestor(subject.Parent) end end return nil end -- Removes any old creator tags and applies new ones to the specified target local function ApplyTags(target) while target:FindFirstChild('creator') do target.creator:Destroy() end local creatorTag = Instance.new('ObjectValue') creatorTag.Value = Player creatorTag.Name = 'creator' --NOTE: Must be called 'creator' for website stats local iconTag = Instance.new('StringValue') iconTag.Value = Tool.TextureId iconTag.Name = 'icon' iconTag.Parent = creatorTag creatorTag.Parent = target DebrisService:AddItem(creatorTag, 4) end -- Returns all objects under instance with Transparency local function GetTransparentsRecursive(instance, partsTable) local partsTable = partsTable or {} for _, child in pairs(instance:GetChildren()) do if child:IsA('BasePart') or child:IsA('Decal') then table.insert(partsTable, child) end GetTransparentsRecursive(child, partsTable) end return partsTable end local function SelectionBoxify(instance) local selectionBox = Instance.new('SelectionBox') selectionBox.Adornee = instance selectionBox.Color = BrickColor.new('New Yeller') selectionBox.Parent = instance return selectionBox end local function Light(instance) local light = PointLight:Clone() light.Range = light.Range + 2 light.Parent = instance end local function FadeOutObjects(objectsWithTransparency, fadeIncrement) repeat local lastObject = nil for _, object in pairs(objectsWithTransparency) do object.Transparency = object.Transparency + fadeIncrement lastObject = object end wait() until lastObject.Transparency == 0 or not lastObject end local function Dematerialize(character, humanoid, firstPart) humanoid.WalkSpeed = 16 local parts = {} for _, child in pairs(character:GetChildren()) do if child:IsA('BasePart') then child.Anchored = true table.insert(parts, child) end end local selectionBoxes = {} local firstSelectionBox = SelectionBoxify(firstPart) Light(firstPart) wait(0.05) for _, part in pairs(parts) do if part ~= firstPart then table.insert(selectionBoxes, SelectionBoxify(part)) Light(part) end end local objectsWithTransparency = GetTransparentsRecursive(character) FadeOutObjects(objectsWithTransparency, 0) wait(0.5) humanoid.Health = 0 DebrisService:AddItem(character, 2) end local function OnTouched(shot, otherPart) local character, humanoid = FindCharacterAncestor(otherPart) if character and humanoid and character ~= Character then humanoid.Health = 0 if humanoid.Health >= 0 then game.ReplicatedStorage.ManEvent:FireServer() end ApplyTags(humanoid) if shot then local hitFadeSound = shot:FindFirstChild(HitFadeSound.Name) if hitFadeSound then hitFadeSound.Parent = humanoid.Torso hitFadeSound:Play() end shot:Destroy() end end end local function OnEquipped() Character = Tool.Parent Humanoid = Character:WaitForChild('Humanoid') Player = PlayersService:GetPlayerFromCharacter(Character) holdtrack = Humanoid:LoadAnimation(idleAnim) holdtrack:Play() end local function OnActivated() if Tool.Enabled and Humanoid.Health > 0 then Tool.Enabled = false FireSound:Play() firetrack = Humanoid:LoadAnimation(FireAnim) firetrack:Play() local handleCFrame = Handle.CFrame local firingPoint = handleCFrame.p + handleCFrame:vectorToWorldSpace(NOZZLE_OFFSET) local shotCFrame = CFrame.new(firingPoint, Humanoid.TargetPoint) local laserShotClone = BaseShot:Clone() laserShotClone.CFrame = shotCFrame + (shotCFrame.lookVector * (BaseShot.Size.Z / 2)) local bodyVelocity = Instance.new('BodyVelocity') bodyVelocity.velocity = shotCFrame.lookVector * SHOT_SPEED bodyVelocity.Parent = laserShotClone laserShotClone.Touched:connect(function(otherPart) OnTouched(laserShotClone, otherPart) end) DebrisService:AddItem(laserShotClone, SHOT_TIME) laserShotClone.Parent = Tool wait(0.6) -- FireSound length ReloadSound:Play() rl = Humanoid:LoadAnimation(reloadAnim) rl:Play() ReloadSound:Stop() wait(0.25) -- ReloadSound length Tool.Enabled = true end end local function OnUnequipped() if holdtrack then holdtrack:Stop() end end -------------------- --| Script Logic |-- -------------------- BaseShot = Instance.new('Part') BaseShot.Name = 'Effect' BaseShot.FormFactor = Enum.FormFactor.Custom BaseShot.Size = Vector3.new(0.2, 0.2, 3) BaseShot.CanCollide = false BaseShot.BrickColor = BrickColor.new('New Yeller') SelectionBoxify(BaseShot) Light(BaseShot) HitFadeSound:Clone().Parent = BaseShot Tool.Equipped:connect(OnEquipped) Tool.Unequipped:connect(OnUnequipped) Tool.Activated:connect(OnActivated)