null nil true true 0.0939477235 -0.206212491 0.560361266 0.837946475 -0.0272410847 0.545072019 -0.0256806612 0.995679021 0.0892403126 -0.545147896 -0.0887763947 0.833626151 Luger http://www.roblox.com/asset/?id=95356596 false Firescript -- Made by Stickmasterluke -- edited by fusroblox local GoreOn=true function WaitForChild(parent,child) while not parent:FindFirstChild(child) do print("2waiting for " .. child) wait() end return parent[child] end local GunObject = { Tool = script.Parent, Handle = WaitForChild(script.Parent,'Handle'), check = true, GunDamage = 20, -- Base output damage per shot. FireRate = .2, -- How often the weapon can fire. Automatic = false, -- hold down to continue firing Range = 250, -- Max distance that the weapon can fire. Spread = 1, -- The bigger the spread, the more inaccurate the shots will be. ClipSize = 8, -- Shots in a clip ReloadTime = 3, -- Time it takes to reload the tool. StartingClips = 10, -- If you want infinit clips, remove the IntValue named "Clips" from the tool. SegmentLength = 40, -- How long the shot segments are, or the speed of the shot. FadeDelayTime = 1/60, BarrelPos = CFrame.new(0, 0, - 1.2), -- L, F, U Rate = 1/30, --local Colors = {BrickColor.new("Bright red"), BrickColor.new("Really red"), BrickColor.new("Dusty Rose"), BrickColor.new("Medium red")} Colors = {BrickColor.new("Bright yellow"),BrickColor.new("Mid gray"), BrickColor.new("Medium stone grey"), BrickColor.new("Dark stone grey")}, FlashColors = {"Medium red", "Dusty Rose", "Bright red", "Really red"}, Reloading = false, Debris = game:GetService("Debris"), Ammo, Clips, LaserObj, SparkEffect, ShellPart, --tool children DownVal=WaitForChild(script.Parent, 'Down'), AimVal=WaitForChild(script.Parent, 'Aim'), ReloadingVal=WaitForChild(script.Parent, 'Reloading'), DoFireAni = WaitForChild(script.Parent,'DoFireAni'), --handlechildren Fire, } --[[Member functions]] function GunObject:Initialize() self.Fire=WaitForChild(self.Handle, 'Fire') self.Ammo = self.Tool:FindFirstChild("Ammo") if self.Ammo ~= nil then self.Ammo.Value = self.ClipSize end self.Clips = self.Tool:FindFirstChild("Clips") if self.Clips ~= nil then self.Clips.Value = self.StartingClips end self.Tool.Equipped:connect(function() self.Tool.Handle.Fire:Stop() self.Tool.Handle.Reload:Stop() end) self.Tool.Unequipped:connect(function() self.Tool.Handle.Fire:Stop() self.Tool.Handle.Reload:Stop() end) self.LaserObj = Instance.new("Part") self.LaserObj.Name = "Bullet" self.LaserObj.Anchored = true self.LaserObj.CanCollide = false self.LaserObj.Shape = "Block" self.LaserObj.formFactor = "Custom" self.LaserObj.Material = Enum.Material.Plastic self.LaserObj.Locked = true self.LaserObj.TopSurface = 0 self.LaserObj.BottomSurface = 0 --local tshellmesh=WaitForChild(script.Parent,'BulletMesh'):Clone() --tshellmesh.Scale=Vector3.new(4,4,4) --tshellmesh.Parent=self.LaserObj local tSparkEffect = Instance.new("Part") tSparkEffect.Name = "Effect" tSparkEffect.Anchored = false tSparkEffect.CanCollide = false tSparkEffect.Shape = "Block" tSparkEffect.formFactor = "Custom" tSparkEffect.Material = Enum.Material.Plastic tSparkEffect.Locked = true tSparkEffect.TopSurface = 0 tSparkEffect.BottomSurface = 0 self.SparkEffect=tSparkEffect local tshell = Instance.new('Part') tshell.Name='effect' tshell.FormFactor='Custom' tshell.Size=Vector3.new(1, 0.4, 0.33) tshell.BrickColor=BrickColor.new('Bright yellow') tshellmesh=WaitForChild(script.Parent,'BulletMesh'):Clone() tshellmesh.Parent=tshell self.ShellPart = tshell self.DownVal.Changed:connect(function() while self.DownVal.Value and self.check and not self.Reloading do self.check = false local humanoid = self.Tool.Parent:FindFirstChild("Humanoid") local plr1 = game.Players:GetPlayerFromCharacter(self.Tool.Parent) if humanoid ~= nil and plr1 ~= nil then if humanoid.Health > 0 then local spos1 = (self.Tool.Handle.CFrame * self.BarrelPos).p delay(0, function() self:SendBullet(spos1, self.AimVal.Value, self.Spread, self.SegmentLength, self.Tool.Parent, self.Colors[1], self.GunDamage, self.FadeDelayTime) end) else self.check = true break end else self.check = true break end wait(self.FireRate) self.check = true if not self.Automatic then break end end end) self.ReloadingVal.Changed:connect(function() if self.ReloadingVal.Value then self:Reload() end end) end function GunObject:Reload() self.Reloading = true self.ReloadingVal.Value = true if self.Clips ~= nil then if self.Clips.Value > 0 then self.Clips.Value = Clips.Value - 1 else self.Reloading = false self.ReloadingVal.Value = false return end end self.Tool.Handle.Reload:Play() for i = 1, self.ClipSize do wait(self.ReloadTime/self.ClipSize) self.Ammo.Value = i end self.Reloading = false self.Tool.Reloading.Value = false end function GunObject:SpawnShell() local tshell=self.ShellPart:Clone() tshell.CFrame=self.Handle.CFrame tshell.Parent=Workspace game.Debris:AddItem(tshell,2) end function KnockOffHats(tchar) for _,i in pairs(tchar:GetChildren()) do if i:IsA('Hat') then i.Parent=game.Workspace end end end function KnockOffTool(tchar) for _,i in pairs(tchar:GetChildren()) do if i:IsA('Tool') then i.Parent=game.Workspace end end end function GunObject:SendBullet(boltstart, targetpos, fuzzyness, SegmentLength, ignore, clr, damage, fadedelay) if self.Ammo.Value <=0 then return end self.Ammo.Value = self.Ammo.Value - 1 self:SpawnShell() self.Fire.Pitch = (math.random() * .5) + .75 self.Fire:Play() self.DoFireAni.Value = not self.DoFireAni.Value print(self.Fire.Pitch) local boltdist = self.Range local clickdist = (boltstart - targetpos).magnitude local targetpos = targetpos + (Vector3.new(math.random() - .5, math.random() - .5, math.random() - .5) * (clickdist/100) * self.fuzzyness) local boltvec = (targetpos - boltstart).unit local totalsegments = math.ceil(boltdist/SegmentLength) local lastpos = boltstart for i = 1, totalsegments do local newpos = (boltstart + (boltvec * (boltdist * (i/totalsegments)))) local segvec = (newpos - lastpos).unit local boltlength = (newpos - lastpos).magnitude local bolthit, endpos = CastRay(lastpos, segvec, boltlength, ignore, false) DrawBeam(lastpos, endpos, clr, fadedelay, self.LaserObj) if bolthit ~= nil then local h = bolthit.Parent:FindFirstChild("Zombie") if h ~= nil then local plr = game.Players:GetPlayerFromCharacter(self.Tool.Parent) if plr ~= nil then local creator = Instance.new("ObjectValue") creator.Name = "creator" creator.Value = plr creator.Parent = h end if hit.Parent:FindFirstChild("BlockShot") then hit.Parent:FindFirstChild("BlockShot"):Fire(newpos) delay(0, function() self:HitEffect(endpos, BrickColor.new('Medium stone grey'),5) end) else if(hit.Name=='Head') then KnockOffHats(hit.Parent) elseif hit.Name=='Left Leg' or hit.Name=='Right Leg' then h.WalkSpeed=h.WalkSpeed/1.5 elseif hit.Name=='Left Arm' or hit.Name=='Right Arm' then KnockOffTool(hit.Parent) end if GoreOn then delay(0,function() self:HitEffect(endpos, BrickColor.new('Bright red'),20) end) end h:TakeDamage(damage) end else delay(0, function() self:HitEffect(endpos, BrickColor.new('Medium stone grey'),5) end) end break end lastpos = endpos wait(Rate) end if self.Ammo.Value < 1 then self:Reload() end end function GunObject:MakeSpark(pos,tcolor) local effect=self.SparkEffect:Clone() effect.BrickColor = tcolor effect.CFrame = CFrame.new(pos) effect.Parent = game.Workspace local effectVel = Instance.new("BodyVelocity") effectVel.maxForce = Vector3.new(99999, 99999, 99999) effectVel.velocity = Vector3.new(math.random() * 15 * SigNum(math.random( - 10, 10)), math.random() * 15 * SigNum(math.random( - 10, 10)), math.random() * 15 * SigNum(math.random( - 10, 10))) effectVel.Parent = effect effect.Size = Vector3.new(math.abs(effectVel.velocity.x)/30, math.abs(effectVel.velocity.y)/30, math.abs(effectVel.velocity.z)/30) wait() effectVel:Destroy() local effecttime = .5 game.Debris:AddItem(effect, effecttime * 2) local startTime = time() while time() - startTime < effecttime do if effect ~= nil then effect.Transparency = (time() - startTime)/effecttime end wait() end if effect ~= nil then effect.Parent = nil end end function GunObject:HitEffect(pos,tcolor,numSparks) for i = 0, numSparks, 1 do Spawn(function() self:MakeSpark(pos,tcolor) end) end end --[[/Member functions]] --[[Static functions]] function Round(number, decimal) decimal = decimal or 0 local mult = 10^decimal return math.floor(number * mult + .5)/mult end function SigNum(num) if num == 0 then return 1 end return math.abs(num)/num end --this is a little bad, but shouldn't really be part of the 'class' of the gun local Intangibles = {shock=1, bolt=1, bullet=1, plasma=1, effect=1, laser=1, handle=1, effects=1, flash=1,} function CheckIntangible(hitObj) print(hitObj.Name) return Intangibles[(string.lower(hitObj.Name))] or hitObj.Transparency == 1 end function CastRay(startpos, vec, length, ignore, delayifhit) if length > 999 then length = 999 end hit, endpos2 = game.Workspace:FindPartOnRay(Ray.new(startpos, vec * length), ignore) if hit ~= nil then if CheckIntangible(hit) then if delayifhit then wait() end hit, endpos2 = CastRay(endpos2 + (vec * .01), vec, length - ((startpos - endpos2).magnitude), ignore, delayifhit) end end return hit, endpos2 end function DrawBeam(beamstart, beamend, clr, fadedelay, templatePart) local dis = 2 --(beamstart - beamend).magnitude local tlaser=templatePart:Clone() tlaser.BrickColor = clr tlaser.Size = Vector3.new(.12, .12, dis + .2) tlaser.CFrame = CFrame.new((beamend+beamstart)/2, beamstart) * CFrame.new(0, 0, - dis/2) tlaser.Parent = game.Workspace game.Debris:AddItem(tlaser, fadedelay) end --[[/Static functions]] GunObject:Initialize() false LocalScript -- Made by Stickmasterluke -- edited by fusroblox function WaitForChild(obj, name) while not obj:FindFirstChild(name) do wait() print("1waiting for " .. name) end return obj:FindFirstChild(name) end local function FindCharacterAncestor(subject) if subject and subject ~= Workspace then if subject:FindFirstChild('Humanoid') then return subject else return FindCharacterAncestor(subject.Parent) end end return nil end local Tool = script.Parent local GunObj ={ Reloading = "http://www.roblox.com/asset/?id=94155503", Cursors = { "http://www.roblox.com/asset/?id=94154683", -- black "http://www.roblox.com/asset/?id= 94154829", -- red "http://www.roblox.com/asset/?id=94155503", "http://www.roblox.com/asset/?id=94155569" }, ClipSize = 8, Equipped = false, Player = game.Players.localPlayer, Ammo = WaitForChild(script.Parent,"Ammo"), Clips, Gui = WaitForChild(Tool,"AmmoHud"), NumberImages={}, IdleAni, MyMouse } local ChestWeld Tool.Equipped:connect(function(mouse) GunObj:OnEquipped(mouse) end) local initialized=false function GunObj:Initialize() if initialized then return end initialized=true self.Ammo.Changed:connect(function()self:UpdateGui()end) WaitForChild(Tool, "Reloading") print('got to connections!!!!! ') Tool.Reloading.Changed:connect(function() self:UpdateGui() end) Tool.Unequipped:connect(function() self:OnUnequipped() end) Tool.DoFireAni.Changed:connect(PlayFireAni) self.NumberImages['0']=94105090 self.NumberImages['1']=94099941 self.NumberImages['2']=94105282 self.NumberImages['3']=94105353 self.NumberImages['4']=94105393 self.NumberImages['5']=94105402 self.NumberImages['6']=94105413 self.NumberImages['7']=94105478 self.NumberImages['8']=94105560 self.NumberImages['9']=94105576 local bar=WaitForChild(self.Gui,'Bar') self:UpdateNumbers(self.ClipSize..'', WaitForChild(bar,'TotalAmmo')) end function GunObj:UpdateNumbers(data,frame) if string.len(data)==0 then data= '0'..data end if string.len(data)==1 then data= '0'..data end local digit=WaitForChild(WaitForChild(frame,'1'),'digit') if digit.Image ~='http://www.roblox.com/asset/?id='..self.NumberImages[string.sub(data,1,1)] then local ndigit=digit:Clone() ndigit.Position=UDim2.new(ndigit.Position.X.Scale,ndigit.Position.X.Offset,ndigit.Position.Y.Scale,ndigit.Position.Y.Offset-65) ndigit.Image='http://www.roblox.com/asset/?id='..self.NumberImages[string.sub(data,1,1)] ndigit.Parent=digit.Parent ndigit:TweenPosition(digit.Position, "Out", "Quad", .1) digit.Name='oldDigit' digit:TweenPosition(UDim2.new(digit.Position.X.Scale,digit.Position.X.Offset,digit.Position.Y.Scale,digit.Position.Y.Offset+65), "Out", "Quad", .25) game.Debris:AddItem(digit,1) end digit=WaitForChild(WaitForChild(frame,'2'),'digit') if digit.Image ~='http://www.roblox.com/asset/?id='..self.NumberImages[string.sub(data,2,2)] then ndigit=digit:Clone() ndigit.Position=UDim2.new(ndigit.Position.X.Scale,ndigit.Position.X.Offset,ndigit.Position.Y.Scale,ndigit.Position.Y.Offset-65) ndigit.Image='http://www.roblox.com/asset/?id='..self.NumberImages[string.sub(data,2,2)] ndigit.Parent=digit.Parent ndigit:TweenPosition(UDim2.new(digit.Position.X.Scale,digit.Position.X.Offset,digit.Position.Y.Scale,0), "Out", "Quad", .25) digit.Name='oldDigit' digit:TweenPosition(UDim2.new(digit.Position.X.Scale,digit.Position.X.Offset,digit.Position.Y.Scale,digit.Position.Y.Offset+65), "Out", "Quad", .25) game.Debris:AddItem(digit,1) end end function GunObj:UpdateGui() if self.Equipped then local Player = game.Players.localPlayer if Player ~= nil then if self.Ammo == nil then --self.Gui.Bar.GunLabel.Text ="Futuro Heavy Pistol" --self.Gui.Bar.AmmoLabel.Text = "" else --self.Gui.Bar.GunLabel.Text ="Futuro Heavy Pistol" --self.Gui.Bar.AmmoLabel.Text = tostring(self.Ammo.Value).."/"..tostring(self.ClipSize) self:UpdateNumbers(tostring(self.Ammo.Value),WaitForChild(self.Gui.Bar,'AmmoLeft')) end if Tool.Reloading.Value then --self.Gui.Bar.AmmoLabel.Text = "Reloading" end end end end function GunObj:CursorUpdate(mouse) local reloadCounter=0 while self.Equipped do if Tool.Reloading.Value then reloadCounter=reloadCounter+1 if reloadCounter%20<10 then mouse.Icon = self.Cursors[3] else mouse.Icon = self.Cursors[4] end elseif mouse.Target and FindCharacterAncestor(mouse.Target) then mouse.Icon = self.Cursors[2] else mouse.Icon = self.Cursors[1] end wait(1/30) end end local InReload=false function GunObj:OnEquipped(mouse) self:Initialize() if mouse ~= nil then self.Equipped = true local Player = game.Players.LocalPlayer if Player ~= nil then local humanoid=WaitForChild(Player.Character,'Humanoid') if not self.IdleAni then self.IdleAni = humanoid:LoadAnimation(WaitForChild(script.Parent,'idle')) self.IdleAni:Play() end local plrgui = WaitForChild(Player,"PlayerGui") self.Gui.Parent = plrgui mouse.Button1Down:connect(function() if not Tool.Down.Value then Tool.Aim.Value = mouse.Hit.p Tool.Down.Value = true while Tool.Down.Value do Tool.Aim.Value = mouse.Hit.p wait() end end end) mouse.Button1Up:connect(function() Tool.Down.Value = false end) mouse.KeyDown:connect(function(key) if key=='r' and not Tool.Reloading.Value and not Tool.Down.Value and self.Ammo.Value ~=8 and self.Ammo.Value ~=0 and not InReload then Tool.Reloading.Value=true end end) --mouse.Icon = self.Cursors[1] Tool.Reloading.Changed:connect(function(val) if mouse ~= nil and self.Equipped then if val then --mouse.Icon = self.Cursors.Reloading else --mouse.Icon = self.Cursors[1] end local Player = game.Players.LocalPlayer if Player ~= nil then local gui = WaitForChild(Player.PlayerGui, "AmmoHud") local humanoid=WaitForChild(Player.Character,'Humanoid') self:UpdateGui() if Tool.Reloading.Value then --gui.Bar.AmmoLabel.Text = "Reloading" end end end end) self:UpdateGui() MyMouse=mouse Spawn(function() self:CursorUpdate(mouse) end ) end end end function GunObj:OnUnequipped() if self.IdleAni then self.IdleAni:Stop() self.IdleAni:Destroy() self.IdleAni=nil end self.Gui.Parent = Tool self.Equipped = false print('in unequipp') if ChestWeld then print('chestweldexists') ChestWeld:Destroy() end local Player = game.Players.localPlayer if Player ~= nil then local gui = WaitForChild(Player.PlayerGui,"AmmoHud") --gui.Bar.GunLabel.Text = "" --gui.Bar.AmmoLabel.Text = "" end end function PlayFireAni() wait(.1) local aniTrack = WaitForChild(Tool.Parent,"Humanoid"):LoadAnimation(Tool.FireAni) aniTrack:Play(0,1,1) end local function weldBetween(a, b) local weld = Instance.new("Weld") weld.Part0 = a weld.Part1 = b weld.C0 = CFrame.new() weld.C1 = b.CFrame:inverse() * a.CFrame weld.Parent = a return weld; end function PlayReloadAni() InReload=true local aniTrack = WaitForChild(Tool.Parent,"Humanoid"):LoadAnimation(Tool.Reload) local torso=WaitForChild(Tool.Parent,'Torso') local oldWeld for _,i in pairs(WaitForChild(Tool.Parent,'Right Arm'):GetChildren()) do if i:IsA('Weld') and i.Part1==Tool.Handle then oldWeld=i end end if not oldWeld then print('What... no old weld!') return end ChestWeld= weldBetween(torso,Tool.Handle) oldWeld.Part1=nil aniTrack:Play(0,1,2) wait(4) oldWeld.Part1=Tool.Handle ChestWeld:Destroy() ChestWeld=nil InReload=false end Tool.Reloading.Changed:connect(function() if Tool.Reloading.Value then PlayReloadAni() end end) false -0.5 0.5 0 0 -0.5 0.5 4 0 107 -0.300000012 0 -0.300000012 0 0 -1 0 1 -0 1 0 -0 true 0.5 0.300000012 -0.5 0.5 0 0 -0.5 0.5 0 0 true 256 Handle 0 -0.5 0.5 0 0 0 0 0 -0.5 0.5 3 0 0 0 0 0 3 1 0.510000467 1.18000245 1.34999704 2 2 http://www.roblox.com/asset/?id=95356090 5 Mesh 0 0 0 1.79999995 1.79999995 1.79999995 http://www.roblox.com/asset/?id=95387789 1 1 1 false Fire 0.821169138 false http://www.roblox.com/asset/?id=95309366 1 false Reload 1 false http://www.roblox.com/asset/?id=95309699 1 Aim 7370.47461 -428.252258 -6819.59961 Ammo 25 Down false NoClips 0 Reloading false http://www.roblox.com/Asset?ID=95383980 FireAni DoFireAni false AmmoHud false 4288914085 1 4279970357 1 true false Bar 1 -200 1 -170 0 200 0 60 0 0 true 1 false 4288914085 1 4279970357 1 false false AmmoLeft 0 10 0 5 0 65 0 50 0 0 true 1 false 4288914085 1 4279970357 1 false false 1 0 0 0 0 0 30 0 40 0 0 true 1 false 4288914085 1 4279970357 1 false false http://www.roblox.com/asset/?id=94130434 ImageLabel 0 0 0 0 1 0 1 0 0 true 2 false 4288914085 1 4279970357 1 false false http://www.roblox.com/asset/?id=94099941 digit 0.0500000007 0 0.0500000007 0 0.899999976 0 0.899999976 0 0 true 2 false 4288914085 1 4279970357 1 false false 2 1 -30 0 0 0 30 0 40 0 0 true 1 false 4288914085 1 4279970357 1 false false http://www.roblox.com/asset/?id=94130434 ImageLabel 0 0 0 0 1 0 1 0 0 true 2 false 4288914085 1 4279970357 1 false false http://www.roblox.com/asset/?id=94099941 digit 0.0500000007 0 0.0500000007 0 0.899999976 0 0.899999976 0 0 true 2 false 4288914085 1 4279970357 1 false false http://www.roblox.com/asset/?id=94100300 slash 0.5 -20 0 5 0 30 0 40 0 true 2 false 4288914085 1 4279970357 1 false false TotalAmmo 0.5 10 0 5 0 65 0 50 0 0 true 1 false 4288914085 1 4279970357 1 true false 1 0 0 0 0 0 30 0 40 0 0 true 1 false 4288914085 1 4279970357 1 false false http://www.roblox.com/asset/?id=94130434 ImageLabel 0 0 0 0 1 0 1 0 0 true 2 false 4288914085 1 4279970357 1 false false http://www.roblox.com/asset/?id=94099941 digit 0.0500000007 0 0.0500000007 0 0.899999976 0 0.899999976 0 0 true 2 false 4288914085 1 4279970357 1 false false 2 1 -30 0 0 0 30 0 40 0 0 true 1 false 4288914085 1 4279970357 1 false false http://www.roblox.com/asset/?id=94130434 ImageLabel 0 0 0 0 1 0 1 0 0 true 2 false 4288914085 1 4279970357 1 false false http://www.roblox.com/asset/?id=94099941 digit 0.0500000007 0 0.0500000007 0 0.899999976 0 0.899999976 0 0 true 2 http://www.roblox.com/Asset?ID=95383474 idle http://www.roblox.com/Asset?ID=95384819 Reload 2 2 http://www.roblox.com/asset/?id=95387759 5 BulletMesh 0 0 0 3 3 3 http://www.roblox.com/asset/?id=95387789 1 1 1 null 0 -0.314913273 -0.104227833 1.40682602 0.999961853 -0.00053252076 -0.00872084685 -0 0.998140872 -0.0609494448 0.00873709004 0.0609471202 0.998102784 70 -0.300000012 0 -0.300000012 1 0 0 0 1 0 0 0 1 ThumbnailCamera