I have made a gun script and there are a few problems. The first one is that it shoots out of the bottom of the gun and the second one is the gun isn't automatic. How can I do that? Here is my script local tool = script.Parent -- Getting the tool local player = game:GetService("Players").LocalPlayer -- Getting the player local mouse = player:GetMouse() -- Getting the mouse local sound = tool:WaitForChild("Gunfire") local torso = "" -- Nothing for now. local reloading = false -- Variable to check if we are currently reloading local contextActionService = game:GetService("ContextActionService") -- Allow us to cater for Mobile players local bodytype = nil -- Nil for now but will check whether player is R6 or R15 local difference = 0 -- Difference between position of head and mouse local replicatedstorage = game:GetService("ReplicatedStorage") local gungui = tool:WaitForChild("GunGUI") local bullets = tool:WaitForChild("Bullets") local reloadtime = 3 -- Remote Events local equipAnimation = replicatedstorage:WaitForChild("EquipAnimation") local headshot = replicatedstorage:WaitForChild("Headshot") local reload2 = replicatedstorage:WaitForChild("Reload") local shootevent = replicatedstorage:WaitForChild("ShootEvent") local unequipanimation = replicatedstorage:WaitForChild("UnequipAnimation") -- Remote Functions local checkBodyType = replicatedstorage:WaitForChild("CheckBodyType") local fetchBulletsLeft = replicatedstorage:WaitForChild("FetchBulletsLeft") -- Find Body Type function findBodyType() -- Used to determine whether a player is R6 or R15 bodytype = checkBodyType:InvokeServer(tool) -- Invoking the Remotefunction to do a check on the server print(bodytype) end -- Reloading function function reload() reloading = true reload2:FireServer(tool.reload) mouse.Icon = "http://www.roblox.com/asset?id=936489163" player.PlayerGui:WaitForChild("GunGUI").Bullets.Text = "Reloading!" wait(reloadtime) bullets.Value = 6 player.PlayerGui:WaitForChild("GunGUI").Bullets.Text = "Bullets: "..bullets.Value mouse.Icon = "http://www.roblox.com/asset?id=936803874" equipAnimation:FireServer(tool.shoot) reloading = false end -- When the tool is equipped, the following event will run tool.Equipped:Connect(function(mouse) gungui:Clone().Parent = player.PlayerGui -- We are cloning the Gun GUI into the player's PlayerGUI findBodyType() -- Calling the function above to check the body type. equipAnimation:FireServer(tool.shoot) -- Calling the equip animation remoteevent so that the server can play the animation mouse.Icon = "http://www.roblox.com/asset?id=936803874" mouse.Button1Down:Connect(function() if bullets.Value <=0 or reloading == true then -- Don't do anything else local head = game.Workspace[player.Name].Head.CFrame.lookVector local mouse = CFrame.new(game.Workspace[player.Name].Head.Position,mouse.Hit.p).lookVector difference = (head-mouse) local ray = Ray.new(tool.Handle.CFrame.p,(player:GetMouse().Hit.p - tool.Handle.CFrame.p).unit*300) local part,position = game.Workspace:FindPartOnRay(ray,player.Character,false,true) sound:Play() if difference.magnitude < 1.33 then shootevent:FireServer(tool,position,part) bullets.Value = bullets.Value - 1 end end end) local reloadMobileButton = contextActionService:BindAction("ReloadBtn",reload,true,"r") contextActionService:SetPosition("ReloadBtn",UDim2.new(0.72,-25,0.20,-25)) contextActionService:SetImage("ReloadBtn","http://www.roblox.com/asset/?id=10952419") end) tool.Unequipped:Connect(function() mouse.Icon = "" unequipanimation:FireServer(tool.shoot) player.PlayerGui.GunGUI:Destroy() contextActionService:UnbindAction("ReloadBtn") end) headshot.OnClientEvent:Connect(function() player.PlayerGui.GunGUI.Headshot:TweenPosition(UDim2.new(0.5,-100,0.5,-25), "Out","Quint",0.3) wait(1.5) player.PlayerGui.GunGUI.Headshot:TweenPosition(UDim2.new(-1,0,0.5,-25), "In","Quint",0.4) wait(0.5) player.PlayerGui.GunGUI.Headshot.Position = UDim2.new(1.5,0,0.5,-25) end)
Here is the other one in Server Script Service if you need to know about it local serverStorage = game:GetService("ServerStorage") local replicatedStorage = game:GetService("ReplicatedStorage") local KOValue = "Kills" local WOValue = "Wipeouts" local damage = 30 replicatedStorage.ShootEvent.OnServerEvent:Connect(function(player,tool,position,part) if game.Workspace[player.Name].Humanoid.Health <= 0 then -- The player is dead, do not do anything else local distance = (tool.Handle.CFrame.p - position).magnitude if game.Workspace:FindFirstChild(player.Name.."'s Trajectory") then game.Workspace:FindFirstChild(player.Name.."'s Trajectory"):Destroy() end local trajectory = Instance.new("Part",game.Workspace) local smoke = serverStorage.SmokeParticle:Clone() smoke.Parent = tool.Handle trajectory.BrickColor = BrickColor.new("Institutional white") trajectory.Material = "SmoothPlastic" trajectory.Name = player.Name.."'s Trajectory" trajectory.Transparency = 0.5 trajectory.Anchored = true trajectory.Locked = true trajectory.CanCollide = false trajectory.Size = Vector3.new(0.3,0.3,distance) for i = 0,distance,6 do trajectory.CFrame = CFrame.new(tool.Handle.CFrame.p,position) * CFrame.new(0,0,-distance / 2) wait(0.0001) end smoke:Destroy() if part then if part.Name == "Head" or part:IsA("Hat") and part.Parent:FindFirstChild("Humanoid").Health > 0 then -- Boom headshot replicatedStorage.Headshot:FireClient(player) damage = 50 end local humanoid = part.Parent:FindFirstChild("Humanoid") if not humanoid then humanoid = part.Parent.Parent:FindFirstChild("Humanoid") else humanoid:TakeDamage(damage) if humanoid.Health <= 0 then player.leaderstats[KOValue].Value = player.leaderstats[KOValue].Value + 1 game.Players[humanoid.Parent.Name].leaderstats[WOValue].Value = game.Players[humanoid.Parent.Name].leaderstats[WOValue].Value + 1 end end wait(0.25) if trajectory then trajectory:Destroy() end end end end)
replicatedStorage.EquipAnimation.OnServerEvent:Connect(function(player,animation) local newAnim = game.Workspace[player.Name].Humanoid:LoadAnimation(animation) newAnim:Play() replicatedStorage.UnequipAnimation.OnServerEvent:Connect(function(player,animation) newAnim:Stop() for i,v in pairs(game.Workspace:GetChildren()) do if v.Name == player.Name.."'s Trajectory" then v:Destroy() end end end) replicatedStorage.Reload.OnServerEvent:Connect(function(player,animation) newAnim:Stop() local reloadAnim = game.Workspace[player.Name].Humanoid:LoadAnimation(animation) reloadAnim:Play() end) end)
function checkBodyType(player,tool) if game.Workspace[player.Name]:FindFirstChild("LowerTorso") then -- R15 tool.shoot.AnimationId = "rbxassetid://936531673" tool.reload.AnimationId = "rbxassetid://937806099" return "R15" end if game.Workspace[player.Name]:FindFirstChild("Torso") then -- R6 tool.shoot.AnimationId = "rbxassetid://1000874313" tool.reload.AnimationId = "rbxassetid://937933712" return "R6" end end replicatedStorage.CheckBodyType.OnServerInvoke = checkBodyType And the leaderboard script is this game.Players.PlayerAdded:Connect(function(player) local leaderstats = Instance.new("IntValue",player) leaderstats.Name = "leaderstats"
local kills = Instance.new("IntValue",leaderstats)
kills.Name = "Kills"
kills.Value = 0
local wipeouts = Instance.new("IntValue",leaderstats)
wipeouts.Name = "Wipeouts"
wipeouts.Value = 0
-- Data saving code goes here if you need it
end) Thank you for reading.

7 comments
Please put the code in a code block.
^
You didn't make that code.
omg put it in a code block no ones gonna read it that huge thing
also dont request for people making your gun to be automatic
Who made it then.
The gun probably shoots out of the bottom because the front surface is there, or you have the gun trying to shoot downwards