Writing a gun script, and I have two errors at the moment. The first one, the arms are totally messed up in where the appear, and me changing the radians seems to have little to no effect. Secondly, the player can bizarrely fire without the gun being equipped which is only just arised. It deals damage where I click which is the most suprising thing, as I used a raycast system


--[[SETTINGS]]--

DAMAGE = 30 -- Set this to how much damage you want the gun to do
RPM = 600 -- How many rounds a minute can the gun fire?
FIRING_RATE = 60 / RPM
RELOAD_TIME = 2 -- Set this to how long you want to take to reload
MAX_AMMO = 10 -- Max ammo in a clip
GUN_NAME = "Mah Laser" -- What doy ou want the gun to be called
SOUND = true -- If you want to have sound in your gun, place the sound in the main
SOUND_ID = 132204152
--[[SETTINGS/]]--

local camera = workspace.CurrentCamera
ammo = MAX_AMMO -- How much ammo in a clip do you want?
ammostore = 100 -- How many stored rounds do you want?
main = script.Parent.Main
GUI = script.ScreenGui
local mouse = game.Players.LocalPlayer:GetMouse()
print("Mouse has been gotten")
player = game.Players.LocalPlayer
char = player.Character
lastap = false

-- Weld script by SCARFACIAL (I'm lazy and this is a good script)
local Welds = {}
local Handle = script.Parent:WaitForChild("Handle")

for _,Part in pairs(script.Parent:GetChildren()) do
	if Part:IsA("BasePart") and Part ~= Handle then
		local Weld = Instance.new("Weld")
		Weld.C1 = Part.CFrame:toObjectSpace(Handle.CFrame)
		Welds[Weld] = Part
		Part.Anchored = false
		Part.CanCollide = false
	end
end

Handle.Anchored = false

local function ApplyWelds()
	for Weld, Part in pairs(Welds) do
		Weld.Part0 = Handle
		Weld.Part1 = Part
		Weld.Parent = game:FindFirstChild("JointsServicee") or Handle
	end
end

script.Parent.AncestryChanged:connect(ApplyWelds)
--End of weld


local tool = script.Parent

reloading = false

function reloadGun(name, state, input)
		GUI.Frame.TextBox.Text = ammo .. " / " .. ammostore

    if state == Enum.UserInputState.Begin then
        print("reload key has been pressed")
        if ammostore > 0 and ammo < MAX_AMMO then
            reloading = true
			local difference = MAX_AMMO - ammo
			print(difference)
			ammo = ammo + difference
			ammostore = ammostore - difference
			local gui = Instance.new("TextBox", GUI)
			local i = 0
				gui.FontSize = Enum.FontSize.Size14
				gui.Font = Enum.Font.ArialBold
				gui.TextColor3 = Color3.new(255, 255, 255)
			while i <= 2 do
				gui.Position = UDim2.new()
				local guiDeltaPosition = gui.AbsolutePosition
				gui.Position = UDim2.new(0,mouse.X + 50 - guiDeltaPosition.X,0,mouse.Y - guiDeltaPosition.Y)
				local x = ""
				gui.Text = "Reloading" .. x

				if i == 0.5 then
					x = "."
				elseif
					i == 1 then
					x = ".." 
				elseif 
					i == 1.5 then
					x = "..."
				end
			
				i = i + 0.001
				wait(0.001)
			end
			gui:Destroy()
			
             -- move the lesser of what you have and what you want
			
           --[[ local move = math.min(ammostore, MAX_AMMO)
            ammo = ammo + move
            ammostore = ammostore - move
]]
            wait(RELOAD_TIME)
            reloading = false
        end
    end
end
-- Listen for reload action
local CAS = game:GetService("ContextActionService")
CAS:BindAction("ReloadGun", reloadGun, true, Enum.KeyCode.R, Enum.KeyCode.ButtonX)

local firing = false

tool.Equipped:connect(function(mouse)
	--[[local RA = RightArm
local Torso = Torso
local weld = Instance.new("Weld",RA)
weld.C0 = RA.CFrame:inverse()
weld.C1 = Torso.CFrame:inverse()
weld.Part0 = RA
weld.Part1 = Torso
	]]
	
	---- I need help with this bit
if not lastap then
local la = char["Left Arm"]
local la2 = la:Clone()
la2.Parent = char
la2.Name = "FakeArmLeft"
local ra = char['Right Arm'] -- Da pose
local ra2 = la:Clone()
ra2.Parent = char
ra2.Name = "FakeArmRight"
--Vector3.new(la2.Rotation * CFrame.Angles(math.rad(-10), math.rad(-5), 0))


la2.Rotation = CFrame.Angles(math.rad(-10), math.rad(-5), 0)*la2.Rotation 
la2.Position = CFrame.new(0,-0.7,0.2)*la2.Position  --Y, X, Z

ra2.Rotation = CFrame.Angles(math.rad(-16), math.rad(0), math.rad(90))*ra2.Rotation
ra2.Position = CFrame.new(0.5, 0, 1.3)*ra2.Position -- x y z
local torso = char.Torso

la.Transparency = 1
ra.Transparency = 1
	local weld1 = Instance.new("Weld", la2)
	local weld2 = Instance.new("Weld", ra2)
weld1.C0 = la2.CFrame:inverse()
weld1.C1 = torso.CFrame:inverse()
weld1.Part0 = la2
weld1.Part1 = torso
weld2.C0 = ra2.CFrame:inverse()
weld2.C1 = torso.CFrame:inverse()
weld2.Part0 = ra2
weld2.Part1 = torso
wait(0.1)
else return end
end)

	
	mouse.Icon = "http://www.roblox.com/asset/?id=43910485"

	--Place the GUI

	

	GUI.Parent = player.PlayerGui
	GUI.Frame.TextBox.Text = ammo .. " / " .. ammostore
	--Place the GUI//
	
    print("Equipped")
    local user = tool.Parent

    mouse.Button1Up:connect(function()
        print("Button is up")
        firing = false
    end)
    mouse.Button1Down:connect(function()

        if firing then
            return -- The mouse is already down, and a loop is still running
        end
        local me = {}
        firing = me
        while firing == me and not reloading and ammo > 0 do
			script.Parent.Main.Sound:Play()
			--print(mouse.Position)
            -- Stop if reloading or someone else is firing, or I run out of ammo
            ammo = ammo - 1
            print(ammo .. " shots left")
			print(mouse.Hit)

            local ray = Ray.new(tool.Handle.CFrame.p, (mouse.Hit.p -  main.CFrame.p).unit*300)
            local hit, position = game.Workspace:FindPartOnRay(ray, user)
            print(position)
			script.Parent.Main.Light.Enabled = true

			GUI.Frame.TextBox.Text = ammo .. " / " .. ammostore
	

            print(hit) -- This is used for debugging
            local hitted = hit and hit.Parent and hit.Parent:FindFirstChild("Humanoid")
            if hitted then
                hitted:TakeDamage(DAMAGE)
            end
			
            wait(FIRING_RATE)
			

			script.Parent.Main.Light.Enabled = false
			
        end
    end)


tool.Unequipped:connect(function()
	GUI.Parent = script
	lastap = false
	char.FakeArmRight:Destory()
	char.FakeArmLeft:Destory()
end)