--local script
local gunModel = script.Parent.Parent
local remoteEvent = gunModel.Gun:WaitForChild("RemoteEvent")
local currentPlayer, mouse, connection
local canFire = true
local cooldownTime = 0.25
local lastFireTime = 0
local function canFireCheck()
return (tick() - lastFireTime >= cooldownTime)
end
local function fireRemoteEvent()
if not canFire or not canFireCheck() then return end
lastFireTime = tick()
local camera = workspace.CurrentCamera
local mousePos = mouse.Hit.Position
local origin = camera.CFrame.Position
local direction = (mousePos - origin).Unit * 1000
local raycastParams = RaycastParams.new()
raycastParams.FilterDescendantsInstances = {currentPlayer.Character}
raycastParams.FilterType = Enum.RaycastFilterType.Exclude
local rayResult = workspace:Raycast(origin, direction, raycastParams)
local hitPosition = rayResult and rayResult.Position or (origin + direction)
if rayResult then
remoteEvent:FireServer(rayResult.Instance, rayResult.Position)
else
remoteEvent:FireServer(nil, hitPosition)
end
local attachment0 = Instance.new("Attachment")
local attachment1 = Instance.new("Attachment")
local trailPart0 = Instance.new("Part")
trailPart0.Size = Vector3.new(0.1, 0.1, 0.1)
trailPart0.Anchored = true
trailPart0.CanCollide = false
trailPart0.Transparency = 1
trailPart0.CFrame = CFrame.new(origin)
trailPart0.Parent = workspace
attachment0.Parent = trailPart0
local trailPart1 = Instance.new("Part")
trailPart1.Size = Vector3.new(0.1, 0.1, 0.1)
trailPart1.Anchored = true
trailPart1.CanCollide = false
trailPart1.Transparency = 1
trailPart1.CFrame = CFrame.new(hitPosition)
trailPart1.Parent = workspace
attachment1.Parent = trailPart1
local beam = Instance.new("Beam")
beam.Attachment0 = attachment0
beam.Attachment1 = attachment1
beam.Color = ColorSequence.new(Color3.new(1, 1, 0))
beam.LightEmission = 1
beam.Width0 = 0.1
beam.Width1 = 0.1
beam.FaceCamera = true
beam.Segments = 2
beam.Parent = trailPart0
-- Clean up
game:GetService("Debris"):AddItem(trailPart0, 0.2)
game:GetService("Debris"):AddItem(trailPart1, 0.2)
canFire = false
task.wait(cooldownTime)
canFire = true
end
gunModel.Equipped:Connect(function()
currentPlayer = game.Players.LocalPlayer
mouse = currentPlayer:GetMouse()
connection = gunModel.Activated:Connect(fireRemoteEvent)
end)
gunModel.Unequipped:Connect(function()
if connection then
connection:Disconnect()
end
currentPlayer, mouse, connection = nil
end)
To embed this program on your website, copy the following code and paste it into your website's HTML: