title: If i unequip a gun while it's shooting (in burst and auto) it stops working -ROBLOX STUDIO
body: <p>Pls find a way to fix it :/ I'm not really good at scripting stuff.<br />
  There is another script: Server script. But i don't think it's the cause of this problem.<br />
  I will post it anyways</p>
  <p>Btw it's for a shooter game that I'm making (just to add some workds soo i can post it)</p>
  <p>When it breaks it send's out this:</p>
  <pre class="lang-none prettyprint-override"><code>  19:31:45.103  Humanoid is not a valid member of Backpack &quot;Players.xxfilippoxx33.Backpack&quot;  -  Client  -  Gun_Script:178
    19:31:45.103  Stack Begin  -  Studio
    19:31:45.103  Script 'Players.xxfilippoxx33.Backpack.Assualt Rifle.Gun_Script', Line 178 - function fire  -  Studio  -  Gun_Script:178
    19:31:45.104  Script 'Players.xxfilippoxx33.Backpack.Assualt Rifle.Gun_Script', Line 314 - function onButton1Down  -  Studio  -  Gun_Script:314
    19:31:45.104  Script 'Players.xxfilippoxx33.Backpack.Assualt Rifle.Gun_Script', Line 367  -  Studio  -  Gun_Script:367
    19:31:45.104  Stack End  -  Studio
  </code></pre>
  <p>Here is the local script</p>
  <pre><code>--// Created by Nightrains            
  
  local localPlayer = game.Players.LocalPlayer
  local sp = script.Parent
  
  --// Wait For Children
  
  sp:WaitForChild(&quot;Handle&quot;)
  sp:WaitForChild(&quot;Ammo&quot;)
  
  sp.Handle:WaitForChild(&quot;Equip&quot;)
  sp.Handle:WaitForChild(&quot;Fire&quot;)
  sp.Handle:WaitForChild(&quot;Reload&quot;)
  sp.Handle:WaitForChild(&quot;Trigger&quot;)
  sp.Handle:WaitForChild(&quot;PointLight&quot;)
  
  --// Gun Configuration
  
  local CanTeamkill = false
  local FirstPersonArms = true
  local HeadshotDamage = true
  local IgnoreHats = true
  
  local ClipSize=30
  local ReloadTime=2.3
  local Firerate=.3
  local MinSpread=0.15
  local MaxSpread=0.15
  local SpreadRate=0.3
  local BaseDamage= 20
  local Spread=0.15
  local automatic=false
  local burst=true
  local shot=false            --Shotgun
  local BarrlePos=Vector3.new(-2.5,.60,0)
  local Cursors={&quot;rbxasset://textures\\GunCursor.png&quot;}
  local ReloadCursor=&quot;rbxasset://textures\\GunWaitCursor.png&quot;
  -------------------------------------
  local equiped=false
  
  
  local enabled=true
  local reloading=false
  local down=false
  local r=game:service(&quot;RunService&quot;)
  
  local Bullet=Instance.new(&quot;Part&quot;)
  Bullet.Name=&quot;Bullet&quot;
  Bullet.BrickColor=BrickColor.new(&quot;Bright yellow&quot;)
  Bullet.Anchored=true
  Bullet.CanCollide=false
  Bullet.Locked=true
  Bullet.Size=Vector3.new(1,1,1)
  Bullet.formFactor=0
  Bullet.TopSurface=0
  Bullet.BottomSurface=0
  Bullet.Material = Enum.Material.Neon
  local Mesh=Instance.new(&quot;SpecialMesh&quot;)
  Mesh.Parent=Bullet
  Mesh.MeshType=&quot;Brick&quot;
  Mesh.Name=&quot;Mesh&quot;
  Mesh.Scale=Vector3.new(.15,.15,1)
  
  local pointLight = sp.Handle.PointLight
  
  local Debris = game:GetService(&quot;Debris&quot;)
  
  local gunServer = game:GetService(&quot;ReplicatedStorage&quot;):WaitForChild(&quot;GunRemotes&quot;)
  
  local remote = {
      TagHumanoid = gunServer:WaitForChild(&quot;TagHumanoid&quot;),
      FireServer = gunServer:WaitForChild(&quot;FireServer&quot;),
      TakeDamage = gunServer:WaitForChild(&quot;TakeDamage&quot;),
      PlaySound = gunServer:WaitForChild(&quot;PlaySound&quot;),
  }
  local ContextActionService = game:GetService(&quot;ContextActionService&quot;)
  
  -------------------------------------------------------------------------------
  
  game.Workspace.ChildAdded:Connect(function(child)
      if child.Name == localPlayer.Name..&quot;Bullet&quot; then
          child.Transparency = 1
      end
  end)
  
  local function reload(mouse)
      remote.PlaySound:FireServer(sp.Handle.Reload)
      reloading=true
      mouse.Icon=ReloadCursor
      while sp.Ammo.Value&lt;ClipSize and reloading and enabled do
          wait(ReloadTime/ClipSize)
          if reloading then
              sp.Ammo.Value=sp.Ammo.Value+1
          else
              break
          end
      end
      mouse.Icon=Cursors[1]
      reloading=false
  end
  
  local function reload_Mob()
      remote.PlaySound:FireServer(sp.Handle.Reload)
      reloading=true
      while sp.Ammo.Value&lt;ClipSize and reloading and enabled do
          wait(ReloadTime/ClipSize)
          if reloading then
              sp.Ammo.Value=sp.Ammo.Value+1
          else
              break
          end
      end
      reloading=false
  end
  script.Parent.Equipped:Connect(function()
      ContextActionService:SetPosition(&quot;ReloadButton&quot;,UDim2.new(0.72,-25,0.20,-25))
  end)
  
  script.Parent.Unequipped:Connect(function()
      ContextActionService:SetPosition(&quot;ReloadButton&quot;,UDim2.new(2.72,-9,0.20,-80))
  end)
  
  local function onKeyDown(key,mouse)
      key=key:lower()
      if key==&quot;r&quot; and not reloading then
          reload(mouse)
      end
  end
  
  function onButtonPress()
      wait(0.1)   
      if onButtonPress() and not reloading then
      if script.Parent.Ammo.Value &lt; 30 then
          wait(0.1)
          reload_Mob()
      end
          script.Parent:reload(button)
      end
  end 
  
  local mobilebutton = ContextActionService:BindAction(&quot;ReloadButton&quot;,onButtonPress,true,&quot;R&quot;)
  ContextActionService:SetPosition(&quot;ReloadButton&quot;,UDim2.new(2.72,-90,.20,-25))
  
  local function getIgnoreList()
      local list = {localPlayer.Character}
      for _,child in pairs(game.Workspace:GetDescendants()) do
          if child:IsA(&quot;BasePart&quot;) then
              if not child.CanCollide then
                  if child.Name == &quot;Handle&quot; and IgnoreHats then
                      table.insert(list,child)
                  elseif child.Name ~= &quot;Handle&quot; and not child.Parent:FindFirstChild(&quot;Humanoid&quot;) then
                      table.insert(list,child)
                  end
              end
          end
      end
      return list
  end
  
  local function bulletEffect(bullet,distance)
      if distance &gt; 40 then
          local bulletLength = distance/2
          bullet.Mesh.Scale=Vector3.new(.15,.15,bulletLength)
          bullet.Mesh.Offset=Vector3.new(0,0,bulletLength/2)
          while bullet.Mesh.Offset.Z &gt; (bulletLength/2)*-1 do
              wait()
              bullet.Mesh.Offset=Vector3.new(0,0,bullet.Mesh.Offset.Z-20) 
          end
      else
          bullet.Mesh.Scale=Vector3.new(.15,.15,distance)
          bullet.Mesh.Offset=Vector3.new(0,0,distance/2)
          wait(0.03)
      end
      bullet:Destroy()
  end
  
  local function fire(aim)
      if sp.Parent.Humanoid.Health &lt; 1 then
          return
      end
      remote.PlaySound:FireServer(sp.Handle.Fire)
      
      t=r.Stepped:wait()
      last6=last5
      last5=last4
      last4=last3
      last3=last2
      last2=last
      last=t
      local bullet=Bullet:clone()
      local startpoint=sp.Handle.CFrame*BarrlePos
      local ray = Ray.new(startpoint, (aim - startpoint).unit * 300)
      local hit, position = workspace:FindPartOnRayWithIgnoreList(ray, getIgnoreList(), false, true)
      local distance = (startpoint - position).magnitude
      bullet.Parent=game.Workspace.CurrentCamera
      
      remote.FireServer:FireServer(startpoint,position,pointLight)
      
      if hit~=nil then
          local humanoid=hit.Parent:FindFirstChild(&quot;Humanoid&quot;)
          if not humanoid then
              humanoid = hit.Parent.Parent:FindFirstChild(&quot;Humanoid&quot;)
          end
          if humanoid~=nil then
              local damage=math.random(BaseDamage-(BaseDamage*.25),BaseDamage+(BaseDamage*.25))
              local headshot = false
              if hit.Name==&quot;Head&quot; and HeadshotDamage then
                  damage=damage*1.3
                  --headshot = true
              else
                  damage=damage*.75
              end
              if humanoid.Health&gt;0 then
                  local eplr=game.Players:playerFromCharacter(humanoid.Parent)
                  local plr=game.Players:playerFromCharacter(sp.Parent)
                  if eplr~=nil and plr~=nil then
                      if CanTeamkill then
                          remote.TagHumanoid:FireServer(humanoid)
                          remote.TakeDamage:FireServer(humanoid,damage,headshot)
                      else
                          if eplr.TeamColor~=plr.TeamColor or eplr.Neutral or plr.Neutral then
                              remote.TagHumanoid:FireServer(humanoid)
                              remote.TakeDamage:FireServer(humanoid,damage,headshot)
                          end 
                      end
                  else
                      remote.TagHumanoid:FireServer(humanoid)
                      remote.TakeDamage:FireServer(humanoid,damage,headshot)
                  end
              end
          end
      end
      if distance &gt; 40 then
          bullet.CFrame=CFrame.new(startpoint, position) * CFrame.new(0, 0, -distance / 2)
      else
          bullet.CFrame=CFrame.new(startpoint, position) * CFrame.new(0, 0, -distance)
      end
      spawn(function()
          bulletEffect(bullet,distance)
      end)
  end
  
  
  local ObjectLocalTransparencyModifier
  local RunService = game:GetService(&quot;RunService&quot;)
  local LocalObjects = {}
  local function setArmsTransparency(Limb)
      if FirstPersonArms then
          local value = {Object = Limb, Transparency = 0, AutoUpdate = true}  
          pcall(function()
              local ObjectFound = false
              for i, v in pairs(LocalObjects) do
                  if v == value then
                      ObjectFound = true
                  end
              end
              if not ObjectFound then
                  table.insert(LocalObjects, value)
                  if ObjectLocalTransparencyModifier then
                      ObjectLocalTransparencyModifier:disconnect()
                  end
                  ObjectLocalTransparencyModifier = RunService.RenderStepped:connect(function()
                      local Camera = game:GetService(&quot;Workspace&quot;).CurrentCamera
                      for i, v in pairs(LocalObjects) do
                          if v.Object and v.Object.Parent then
                              local CurrentTransparency = v.Object.LocalTransparencyModifier
                              local ViewDistance = (Camera.CoordinateFrame.p - sp.Parent.Head.Position).Magnitude
                              if ((not v.AutoUpdate and (CurrentTransparency == 1 or CurrentTransparency == 0)) or v.AutoUpdate) then
                                  if ((v.Distance and ViewDistance &lt;= v.Distance) or not v.Distance) then
                                      v.Object.LocalTransparencyModifier = v.Transparency
                                  else
                                      v.Object.LocalTransparencyModifier = 0
                                  end
                              end
                          else
                              table.remove(LocalObjects, i)
                          end
                      end
                  end)
              end
          end)
      end
  end
  
  local function onButton1Up(mouse)
      down=false
  end
  
  local  function onButton1Down(mouse)
      local h=sp.Parent:FindFirstChild(&quot;Humanoid&quot;)
      if not enabled or reloading or down or h==nil then
          return
      end
      if sp.Ammo.Value&gt;0 and h.Health&gt;0 then
          down=true
          enabled=false
          while down do
              if sp.Ammo.Value&lt;=0 then
                  break
              end
              if burst then
                  local startpoint=sp.Handle.CFrame*BarrlePos
                  local mag=(mouse.Hit.p-startpoint).magnitude
                  local rndm=Vector3.new(math.random(-(Spread/10)*mag,(Spread/10)*mag),math.random(-(Spread/10)*mag,(Spread/10)*mag),math.random(-(Spread/10)*mag,(Spread/10)*mag))
                  fire(mouse.Hit.p+rndm)
                  sp.Ammo.Value=sp.Ammo.Value-1
                  if sp.Ammo.Value&lt;=0 then
                      break
                  end
                  wait(.05)
                  local startpoint=sp.Handle.CFrame*BarrlePos
                  local mag2=((mouse.Hit.p+rndm)-startpoint).magnitude
                  local rndm2=Vector3.new(math.random(-(.1/10)*mag2,(.1/10)*mag2),math.random(-(.1/10)*mag2,(.1/10)*mag2),math.random(-(.1/10)*mag2,(.1/10)*mag2))
                  fire(mouse.Hit.p+rndm+rndm2)
                  sp.Ammo.Value=sp.Ammo.Value-1
                  if sp.Ammo.Value&lt;=0 then
                      break
                  end
                  wait(.05)
                  fire(mouse.Hit.p+rndm+rndm2+rndm2)
                  sp.Ammo.Value=sp.Ammo.Value-1
              elseif shot then
                  sp.Ammo.Value=sp.Ammo.Value-1
                  local startpoint=sp.Handle.CFrame*BarrlePos
                  local mag=(mouse.Hit.p-startpoint).magnitude
                  local rndm=Vector3.new(math.random(-(Spread/10)*mag,(Spread/10)*mag),math.random(-(Spread/10)*mag,(Spread/10)*mag),math.random(-(Spread/10)*mag,(Spread/10)*mag))
                  fire(mouse.Hit.p+rndm)
                  local mag2=((mouse.Hit.p+rndm)-startpoint).magnitude
                  local rndm2=Vector3.new(math.random(-(.2/10)*mag2,(.2/10)*mag2),math.random(-(.2/10)*mag2,(.2/10)*mag2),math.random(-(.2/10)*mag2,(.2/10)*mag2))
                  fire(mouse.Hit.p+rndm+rndm2)
                  local rndm3=Vector3.new(math.random(-(.2/10)*mag2,(.2/10)*mag2),math.random(-(.2/10)*mag2,(.2/10)*mag2),math.random(-(.2/10)*mag2,(.2/10)*mag2))
                  fire(mouse.Hit.p+rndm+rndm3)
                  local rndm4=Vector3.new(math.random(-(.2/10)*mag2,(.2/10)*mag2),math.random(-(.2/10)*mag2,(.2/10)*mag2),math.random(-(.2/10)*mag2,(.2/10)*mag2))
                  fire(mouse.Hit.p+rndm+rndm4)
              else
                  sp.Ammo.Value=sp.Ammo.Value-1
                  local startpoint=sp.Handle.CFrame*BarrlePos
                  local mag=(mouse.Hit.p-startpoint).magnitude
                  local rndm=Vector3.new(math.random(-(Spread/10)*mag,(Spread/10)*mag),math.random(-(Spread/10)*mag,(Spread/10)*mag),math.random(-(Spread/10)*mag,(Spread/10)*mag))
                  fire(mouse.Hit.p+rndm)
              end
              wait(Firerate)
              if not automatic then
                  break
              end
          end 
          enabled=true
      else
          remote.PlaySound:FireServer(sp.Handle.Trigger)
      end
  end
  
  local function onEquippedLocal(mouse)
      remote.PlaySound:FireServer(sp.Handle.Equip)
      if mouse==nil then
          print(&quot;Mouse not found&quot;)
          return 
      end
      local Limbs = {&quot;Right Arm&quot;, &quot;RightHand&quot;, &quot;RightUpperArm&quot;, &quot;RightLowerArm&quot;,
          &quot;Left Arm&quot;, &quot;LeftHand&quot;, &quot;LeftUpperArm&quot;, &quot;LeftLowerArm&quot;}
      for i, v in pairs(Limbs) do
          local Limb = sp.Parent:FindFirstChild(v)
          setArmsTransparency(Limb)
      end
      mouse.Icon=Cursors[1]
      mouse.KeyDown:connect(function(key) onKeyDown(key,mouse) end)
      mouse.Button1Down:connect(function() onButton1Down(mouse) end)
      mouse.Button1Up:connect(function() onButton1Up(mouse) end)
      
      equiped=true
      if #Cursors&gt;1 then
          while equiped do
              t=r.Stepped:wait()
              local action=sp.Parent:FindFirstChild(&quot;Pose&quot;)
              if action~=nil then
                  if sp.Parent.Pose.Value==&quot;Standing&quot; then
                      Spread=MinSpread
                  else
                      Spread=MinSpread+((4/10)*(MaxSpread-MinSpread))
                  end
              else
                  Spread=MinSpread
              end
              if t-last&lt;SpreadRate then
                  Spread=Spread+.1*(MaxSpread-MinSpread)
              end
              if t-last2&lt;SpreadRate then
                  Spread=Spread+.1*(MaxSpread-MinSpread)
              end
              if t-last3&lt;SpreadRate then
                  Spread=Spread+.1*(MaxSpread-MinSpread)
              end
              if t-last4&lt;SpreadRate then
                  Spread=Spread+.1*(MaxSpread-MinSpread)
              end
              if t-last5&lt;SpreadRate then
                  Spread=Spread+.1*(MaxSpread-MinSpread)
              end
              if t-last6&lt;SpreadRate then
                  Spread=Spread+.1*(MaxSpread-MinSpread)
              end
              if not reloading then
                  local percent=(Spread-MinSpread)/(MaxSpread-MinSpread)
                  for i=0,#Cursors-1 do
                      if percent&gt;(i/(#Cursors-1))-((1/(#Cursors-1))/2) and percent&lt;(i/(#Cursors-1))+((1/(#Cursors-1))/2) then
                          mouse.Icon=Cursors[i+1]
                      end
                  end
              end
              wait(Firerate*.9)
          end
      end
  end
  local function onUnequippedLocal(mouse)
      
      if ObjectLocalTransparencyModifier then
          ObjectLocalTransparencyModifier:disconnect()
      end
      local camera = game.Workspace.CurrentCamera
      if (camera.focus.p - camera.CoordinateFrame.p).magnitude &lt;= 1 then
          for i, v in pairs(LocalObjects) do
              if v.Object then
                  v.Object.LocalTransparencyModifier = 1
              end
          end
      end
      LocalObjects = {}
      
      equiped=false
      reloading=false
  end
  sp.Equipped:connect(onEquippedLocal)
  sp.Unequipped:connect(onUnequippedLocal)
  </code></pre>
  <p>SERVER SCRIPT</p>
  <pre><code>--PUT ME IN ServerScriptService.
  
  local replicatedStorage = game.ReplicatedStorage
  local debris = game:GetService(&quot;Debris&quot;)
  
  local folder = Instance.new(&quot;Folder&quot;,replicatedStorage)
  folder.Name = &quot;GunRemotes&quot;
  
  local Bullet=Instance.new(&quot;Part&quot;)
  Bullet.Name=&quot;Bullet&quot;
  Bullet.BrickColor=BrickColor.new(&quot;Bright yellow&quot;)
  Bullet.Anchored=true
  Bullet.CanCollide=false
  Bullet.Locked=true
  Bullet.Size=Vector3.new(1,1,1)
  Bullet.formFactor=0
  Bullet.TopSurface=0
  Bullet.BottomSurface=0
  Bullet.Transparency = 1
  Bullet.Material = Enum.Material.Neon
  local Mesh=Instance.new(&quot;SpecialMesh&quot;)
  Mesh.Parent=Bullet
  Mesh.MeshType=&quot;Brick&quot;
  Mesh.Name=&quot;Mesh&quot;
  Mesh.Scale=Vector3.new(.15,.15,1)
  
  local function remote(name)
      local create = Instance.new(&quot;RemoteEvent&quot;,folder)
      create.Name = name
      return create
  end
  
  local fireServer = remote(&quot;FireServer&quot;)
  fireServer.OnServerEvent:connect(function(player,startpoint,pos)
      local newBullet = Bullet:Clone()
      newBullet.Name = player.Name..&quot;Bullet&quot;
      local distance=(startpoint-pos).magnitude
      local bulletLength = distance/2
      if distance &gt; 40 then
          newBullet.CFrame=CFrame.new(startpoint, pos) * CFrame.new(0, 0, -distance / 2)
          newBullet.Mesh.Scale=Vector3.new(.15,.15,bulletLength)
          newBullet.Mesh.Offset=Vector3.new(0,0,bulletLength/2)
      else
          newBullet.CFrame=CFrame.new(startpoint, pos) * CFrame.new(0, 0, -distance)
          newBullet.Mesh.Scale=Vector3.new(.15,.15,distance)
          newBullet.Mesh.Offset=Vector3.new(0,0,distance/2)
      end
      newBullet.Transparency = 0
      newBullet.Parent = game.Workspace
      if distance &gt; 40 then
          while newBullet.Mesh.Offset.Z &gt; (bulletLength/2)*-1 do
              wait()
              newBullet.Mesh.Offset=Vector3.new(0,0,newBullet.Mesh.Offset.Z-20) 
          end
      else
          wait(0.03)
      end
      newBullet:Destroy()
  end)
  fireServer.OnServerEvent:connect(function(_,_,_,light)
      light.Enabled = true
      wait(.05)
      light.Enabled = false
  end)
  
  remote(&quot;TagHumanoid&quot;).OnServerEvent:connect(function(player,humanoid)
      local tag = Instance.new(&quot;ObjectValue&quot;)
      tag.Value = player
      tag.Name = &quot;creator&quot;
      tag.Parent = humanoid
      delay(2,function()
          if tag ~= nil then
              tag.Parent = nil
          end
      end)
  end)
  
  remote(&quot;TakeDamage&quot;).OnServerEvent:connect(function(player,humanoid,damage,head)
      humanoid:TakeDamage(damage)
      if humanoid.Health &lt; 1 and head then
          humanoid.Parent.Head:Destroy()
      end
  end)
  
  remote(&quot;PlaySound&quot;).OnServerEvent:connect(function(player,sound)
      sound:Play()
  end)
  
  remote(&quot;HumanoidSpeed&quot;).OnServerEvent:connect(function(player,humanoid,speed)
      humanoid.WalkSpeed = speed
  end)
  </code></pre>