if _G.IsClient then local module = {} function module.fire(barrel) spawn(function() local bullet = _G.Remotes.Shoot:InvokeServer(barrel) bullet = game.Workspace:WaitForChild(bullet) if not bullet then return end bullet.CFrame = barrel.CFrame * CFrame.Angles(0,math.rad(-90),0) bullet.Velocity = bullet.CFrame.LookVector * 1000 --bullet.BodyVelocity.Velocity = bullet.Velocity end) end return module elseif _G.IsServer then -- SERVER-SIDE function touched(touched,team,player,bullet,barrel) if not touched or not touched.Parent then return end local humanoid = touched.Parent:FindFirstChildWhichIsA("Humanoid") if humanoid then if humanoid.Parent:FindFirstChild("Team") and humanoid.Parent.Team.Value == game.Teams.Loon then humanoid.Health = humanoid.Health - 25 bullet:Destroy() end end local object local part if touched.Parent:IsA("Model") and touched.Parent:HasTag("Combat") then object = touched.Parent part = object.PrimaryPart else part = touched object = touched end if object:HasTag("Combat") then if not object:HasTag("P_"..player.UserId) then if not object:GetAttribute("Health") then local max = part.Size.Magnitude/1.5 if object:IsA("Model") then max = object:GetExtentsSize().Magnitude/1.5 end object:SetAttribute("Health",max) object:SetAttribute("MaxHealth",max) end local health = object:GetAttribute("Health") local max = object:GetAttribute("MaxHealth") health = health - 3 --part.Transparency = 1-(health/max) if barrel.BlastPressure.Value ~= -1 then local explosion = Instance.new("Explosion") explosion.BlastPressure = barrel.BlastPressure.Value explosion.DestroyJointRadiusPercent = barrel.Destruction.Value explosion.Parent = part explosion.Position = part.Position end object:SetAttribute("Health",health) if health < 0 then _G.Methods.break_part(object,player) object.Parent = game.Workspace.Hidden -- stop busted mechanics please end bullet:Destroy() end end end function fire(barrel,team,player) if not barrel then return end local bullet = _G.Storage[barrel.Parent.Name.."Bullet"]:Clone() delay(1.8,function() if bullet and bullet.Parent then bullet:Destroy() end end) bullet.CFrame = CFrame.new(0,1000000000,0) bullet.Parent = game.Workspace local connection = bullet.Touched:Connect(function(part) touched(part,team,player,bullet,barrel) end) bullet.CFrame = barrel.CFrame * CFrame.Angles(0,math.rad(-90),0) bullet.Velocity = bullet.CFrame.LookVector * 1000 bullet.Anchored = false bullet:SetAttribute("Team",team.Name) if player then bullet:SetNetworkOwner(player) --[[delay(0,function() bullet:SetNetworkOwnershipAuto() end)]] bullet:SetAttribute("Owner",player.UserId) end bullet:FindFirstChildWhichIsA("Sound"):Play() bullet.Name = bullet.Name .. tostring(math.random(1,1000000)) return bullet.Name end _G.Remotes.Shoot.OnServerInvoke = function(player,barrel) return fire(barrel,player.Team,player) end return getfenv() end