historical/OLD-SCRIPTS-NO-LONGER-GOOD.git/Tec-99_Realistic_Gun.txt
2024-01-16 11:20:27 -06:00

1153 lines
No EOL
36 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--[[
Smith and Wesson M&P 45, chambered in .45 ACP ammunition.
The standard magazine holds 10 rounds, although magazines that could hold 14 rounds were also made but looked incredibly stupid.
Credit to litozinnamon for the crosshairs and bullethole decals. I used them without permission. Not like I asked him, anyhow.
]]
plr=game:service'Players'.LocalPlayer
ch,char=plr.Character,plr.Character
hum=ch.Humanoid
tor,torso,rootpart,rj=ch.Torso,ch.Torso,ch.HumanoidRootPart,ch.HumanoidRootPart.RootJoint
m,mouse=plr:GetMouse(),plr:GetMouse()
cfn,ang,mr,int=CFrame.new,CFrame.Angles,math.rad,Instance.new
bc=BrickColor.new
head=ch.Head
cam=workspace.CurrentCamera
rj.C0=cfn()
rj.C1=cfn()
sheathed=false
jammed=false
local minimumsize = Vector3.new(0.7,0.7,0.7) --Minimumsize for a part to get divided,higher numbers = less detailed and bigger/less bricks
local surface_between_splitted_parts = 'SmoothNoOutlines' --the surface between splitted parts
--local fragmented = workspace:FindFirstChild("Fragmented")
local fragmentable = workspace --all fragmentable objects should be stored in here
local list = {}
local brickcount = 0
--local m = Instance.new("Hint",workspace)
local storage = {}
local fillup = 1000 --it constantly generates new parts until it reaches this number(hacky way to prevent lagspikes if there is a large explosion),change it to 0 if you don´t want it to generate (useless) parts.
local maximumstorage = 2000 --it will recycle parts if the number of parts in the storage doesnt exceed this number
local storage_position = Vector3.new(0,0,5000) --place them somewhere off the map
local stored_partsize = Vector3.new(1,1,1) --make them small
local parts_created_per_frame = 5 --number of parts being created per frame to fill up the storage
function fragmentate(cframe,size,color,explosion_position,explosion_blastradius,backsurface,bottomsurface,frontsurface,leftsurface,rightsurface,topsurface,transparency,reflectance)
local xi = size.X >= minimumsize.X*(1+explosion_blastradius/16) and 2 or 1 --to reduce the lagg in large explosions we increase minimumsize based on the explosionradius...
local yi = size.Y >= minimumsize.Y*(1+explosion_blastradius/16) and 2 or 1
local zi = size.Z >= minimumsize.Z*(1+explosion_blastradius/16) and 2 or 1
if xi == 1 and yi == 1 and zi == 1 or (cframe.p-explosion_position).magnitude > size.magnitude/2 + explosion_blastradius then --don´t fragmentate parts, that are too small to fragmentate or too far away from the explosion
if xi == 1 and yi == 1 and zi == 1 then return end --optional
if #storage > 0 then
local p = storage[1]
p.BrickColor = color
p.Size = size
p.BackSurface = backsurface
p.BottomSurface = bottomsurface
p.FrontSurface = frontsurface
p.LeftSurface = leftsurface
p.RightSurface = rightsurface
p.TopSurface = topsurface
p.Transparency = transparency
p.CFrame = cframe
p.Reflectance = reflectance
table.remove(storage,1)
else
local p = Instance.new("Part",fragmentable)
p.BrickColor = color
p.FormFactor = "Custom"
p.Size = size
p.BackSurface = backsurface
p.BottomSurface = bottomsurface
p.FrontSurface = frontsurface
p.LeftSurface = leftsurface
p.RightSurface = rightsurface
p.TopSurface = topsurface
p.Transparency = transparency
if p.Transparency>0.285 then
p.Anchored = false
else
p.Anchored=true
p.Material='Wood'
end
p.CFrame = cframe
p.Reflectance = reflectance
end
--p:MakeJoints()
-- m.Text = m.Text+1
return --stop the function
end
local mody = math.random(-125,125)/1000 --some randomization
for y = 1,yi do
if math.random()> 0.5 then
local modx = math.random(-125,125)/1000
for x = 1,xi do
local modz = math.random(-125,125)/1000
for z = 1,zi do --offset = x/xi-0.75+modx)
fragmentate(cframe*CFrame.new(size.X*(xi==1 and 0 or x/xi-0.75+modx),size.Y*(yi==1 and 0 or y/yi-0.75+mody),size.Z*(zi==1 and 0 or z/zi-0.75+modz)), --maths
Vector3.new(xi == 2 and size.X*(1-2*math.abs(x/xi-0.75+modx)) or size.X,yi == 2 and size.Y*(1-2*math.abs(y/yi-0.75+mody)) or size.Y,
zi == 2 and size.Z*(1-2*math.abs(z/zi-0.75+modz)) or size.Z or agent767_was_here),color,explosion_position,explosion_blastradius,
z~=zi and surface_between_splitted_parts or backsurface,y==2 and surface_between_splitted_parts or bottomsurface,
z==2 and surface_between_splitted_parts or frontsurface,x==2 and surface_between_splitted_parts or leftsurface,x~=xi and surface_between_splitted_parts or rightsurface,
y~=yi and surface_between_splitted_parts or topsurface,transparency,reflectance)
end
end
else
local modz = math.random(-125,125)/1000
for z = 1,zi do
local modx = math.random(-125,125)/1000
for x = 1,xi do
fragmentate(cframe*CFrame.new(size.X*(xi==1 and 0 or x/xi-0.75+modx),size.Y*(yi==1 and 0 or y/yi-0.75+mody),size.Z*(zi==1 and 0 or z/zi-0.75+modz)),
Vector3.new(xi == 2 and size.X*(1-2*math.abs(x/xi-0.75+modx)) or size.X,yi == 2 and size.Y*(1-2*math.abs(y/yi-0.75+mody)) or size.Y,
zi == 2 and size.Z*(1-2*math.abs(z/zi-0.75+modz)) or size.Z),color,explosion_position,explosion_blastradius,
z~=zi and surface_between_splitted_parts or backsurface,y==2 and surface_between_splitted_parts or bottomsurface,
z==2 and surface_between_splitted_parts or frontsurface,x==2 and surface_between_splitted_parts or leftsurface,x~=xi and surface_between_splitted_parts or rightsurface,
y~=yi and surface_between_splitted_parts or topsurface,transparency,reflectance)
end
end
end
end
end
function start_fragmentation(position,radius)
local search = Region3.new(position-Vector3.new(radius,radius,radius)*1.1,position+Vector3.new(radius,radius,radius)*1.1)
repeat
local finish = false
local parts = workspace:FindPartsInRegion3WithIgnoreList(search,list,100) --maximum number of parts that FindPartsInRegion3 can find is 100, so we have to do this to find them all
for i = 1,#parts do
table.insert(list,1,parts[i])
end
finish = true
until #parts < 100 and finish
print(#list)
local t = tick()
for i = 1,#list do
local p = list[i]
if p:IsDescendantOf(fragmentable) and p:GetMass()<3000 and p.Transparency>0.285 and p.Name~='Base' and p:IsDescendantOf(ch)==false then
fragmentate(p.CFrame,p.Size,p.BrickColor,position,radius,p.BackSurface,p.BottomSurface,p.FrontSurface,p.LeftSurface,p.RightSurface,p.TopSurface,p.Transparency,p.Reflectance)
if #storage < maximumstorage and p.Shape == "Block" then --recycle them
p.Anchored = false
p.FormFactor = "Custom"
p.Size = stored_partsize
p.Position = storage_position
table.insert(storage,1,p)
else --storage is full
p:Destroy()
end
-- m.Text = m.Text-1
end
if p:IsDescendantOf(fragmentable) and p:GetMass()<53000 and p.Transparency<0.05 and p.Name~='Base' and tostring(p.Material)=='Enum.Material.Wood' and p:IsDescendantOf(ch)==false then
fragmentate(p.CFrame,p.Size,p.BrickColor,position,radius,p.BackSurface,p.BottomSurface,p.FrontSurface,p.LeftSurface,p.RightSurface,p.TopSurface,p.Transparency,p.Reflectance)
if #storage < maximumstorage and p.Shape == "Block" then --recycle them
p.Anchored = true
p.Material='Wood'
p.FormFactor = "Custom"
p.Size = stored_partsize
p.Position = storage_position
table.insert(storage,1,p)
else --storage is full
p:Destroy()
end
-- m.Text = m.Text-1
end
end
list = {}
-- print(tick()-t)
end
--[[
spawn(function()
while wait() do --oh noes,a loop! So inefficient!
if #storage < fillup then
for i = 1, parts_created_per_frame do --creates parts to fill up the storage
local p = Instance.new("Part",fragmentable)
p.Anchored = false
p.FormFactor = "Custom"
p.Size = stored_partsize
p.Position = storage_position
table.insert(storage,1,p)
end
end
end
end)
]]
--local blankn=22416261
--172121567
crosshairs={
{38140824};
{38140833};
{38140839};
{38140843};
{38140852};
{38140910};
{38140915};
{38140923};
{38140928};
{38140931};
{38208259};
{38208275};
{38208284};
{38208303};
{38208310};
{38208325};
{38208330};
{38208352};
{38208359};
{38208377}
}
bulletholes={
172274695;
172274721
}
for _,v in pairs(crosshairs) do
game:service'ContentProvider':Preload('rbxassetid://' .. tostring(v[1]-1))
end
currentIco=2
switchIco=function(num)
if num<20 then
else
num=20
end
mouse.Icon='rbxassetid://' .. tostring(crosshairs[num][1]-1)
currentIco=num
end
switchIco(currentIco)
heldDown=false
spreadint=1
--[[Settings]]--
recoil=false -- Set to true for added realism
magCapacity=20 -- How much a magazine can hold at once
magAmmo=20 -- How much ammo is in the mag
crosshairSpread=5
spread=1
pAmmunition=true -- more damage if true
jamRate=500 -- How often the gun jams(the more the less) (no less than 1)
primaryColor='Really black'
secondaryColor='Really black'
slideReflectance=0.01
slideMaterial='Plastic'
--[[Attachments]]--
silencer=true
highCapMag=false -- High capacity magazine
laser=true
automatic=false
grip=true
getSound=function(id)
game:service'ContentProvider':Preload('rbxassetid'..tostring(id))
local s=int("Sound",ch.Head)
s.SoundId='rbxassetid://' .. tostring(id)
s.Volume=1
return s
end
local fireSound=getSound(151997297--[[10209842]])
fireSound.Pitch=1.3
--1.8
local releaseSound=getSound(10209813)
releaseSound.Pitch=4
local reloadSound=getSound(10209636)
reloadSound.Pitch=3
local magazinelockSound=getSound(152206337)
magazinelockSound.Pitch=1.4
local slideBackSound=getSound(152206263)
slideBackSound.Pitch=2.5
local slideForwardSound=getSound(152206302)
slideForwardSound.Pitch=2.5
local emptySound=getSound(2697295)
emptySound.Pitch=5
local glassBreakSound=getSound(144884907)
local woodImpact=getSound(142082171)
local fleshImpact=getSound(144884872)
fleshImpact.Pitch=1.7
if ch:findFirstChild("Tec-99") then
ch['Tec-99']:Destroy()
end
local tube=int("Model",ch)
tube.Name='Tec-99'
local hopper=Instance.new('HopperBin',plr.Backpack)
hopper.Name=tube.Name
Weld = function(p0,p1,x,y,z,rx,ry,rz,par)--recommend to use this with my weld. use this function only with arm lockers.
p0.Position = p1.Position
local w = Instance.new('Motor',par or p0)
w.Part0 = p1
w.Part1 = p0
w.C0 = CFrame.new(x or 0,y or 0,z or 0)*CFrame.Angles(rx or 0,ry or 0,rz or 0)
w.MaxVelocity = .1
return w
end
function clerp(c1,c2,sp)
local R1,R2,R3 = c1:toEulerAnglesXYZ()
local R21,R22,R23 = c2:toEulerAnglesXYZ()
return CFrame.new(
c1.X + (c2.X-c1.X)*sp,
c1.Y + (c2.Y-c1.Y)*sp,
c1.Z + (c2.Z-c1.Z)*sp)*CFrame.Angles(
R1 + (R21-R1)*sp,
R2 + (R22-R2)*sp,
R3 + (R23-R3)*sp
)
end
tweenTable={}
Tween = function(Weld, Stop, Step,a)
ypcall(function()
local func = function()
local Start = Weld.C1
local X1, Y1, Z1 = Start:toEulerAnglesXYZ()
local Stop = Stop
local X2, Y2, Z2 = Stop:toEulerAnglesXYZ()
if not Step then Step=0.1 end
table.insert(tweenTable,{th=0,Weld=Weld,Step=Step,Start=Start,X1=X1,Y1=Y1,Z1=Z1,Stop=Stop,X2=X2,Y2=Y2,Z2=Z2})
end
if a then coroutine.wrap(func)() else func() end
end)
end
weld=function(p0,p1,c0)
local w=Instance.new("Weld",p0)
w.Part0=p0
w.Part1=p1
w.C0=c0
return w
end
cp=function(parent,color,size,anchored,cancollide)
local newp=Instance.new("Part",parent)
newp.TopSurface='SmoothNoOutlines'
newp.BottomSurface='SmoothNoOutlines'
newp.FrontSurface='SmoothNoOutlines'
newp.BackSurface='SmoothNoOutlines'
newp.RightSurface='SmoothNoOutlines'
newp.LeftSurface='SmoothNoOutlines'
newp.FormFactor="Custom"
newp.BrickColor=bc(color)
newp.Size=size
newp.Anchored=anchored
newp.CanCollide=cancollide
newp:BreakJoints()
return newp
end
initializeJoints=function()
rabr = cp(tube,'White',Vector3.new(1,1,1),false,false) rabr.Transparency = 1 rabr.Name='Locker'
rabr.Position = torso.Position
rw = Weld(rabr,torso,1.5,.5,0,0,0,0) rw.Parent = tube rw.Name = 'rw'
w = Instance.new("Weld",tube)
w.Part0,w.Part1 = ch['Right Arm'],rabr
w.C1 = CFrame.new(0,-.5,0)
labr = cp(tube,'White',Vector3.new(1,1,1),false,false) labr.Transparency = 1 labr.Name='Locker'
labr.Position = torso.Position
lw = Weld(labr,torso,-1.5,.5,0,0,0,0) lw.Parent = tube lw.Name = 'lw'
ww = Instance.new("Weld",tube)
ww.Part0,ww.Part1 = ch['Left Arm'],labr
ww.C1 = CFrame.new(0,-.5,0)
end
initializeJoints()
--[[ leg locks
rabl = cp(tube,'White',Vector3.new(1,1,1),false,false) rabl.Transparency = 1 rabl.Name='Locker'
rabl.Position = torso.Position
rwl = Weld(rabl,torso,0.5,-1.5,0,0,0,0) rwl.Parent = tube rwl.Name = 'rwl'
wl = Instance.new("Weld",tube)
wl.Part0,wl.Part1 = ch['Right Leg'],rabl
wl.C1 = CFrame.new(0,-.5,0)
labl = cp(tube,'White',Vector3.new(1,1,1),false,false) labl.Transparency = 1 labl.Name='Locker'
labl.Position = torso.Position
lwl = Weld(labl,torso,-0.5,-1.5,0,0,0,0) lwl.Parent = tube lwl.Name = 'lwl'
wwl = Instance.new("Weld",tube)
wwl.Part0,wwl.Part1 = ch['Left Leg'],labl
wwl.C1 = CFrame.new(0,-.5,0)
]]
--weld(ch['HumanoidRootPart'],torso,cfn())
local counter=Instance.new('ScreenGui',plr.PlayerGui)
local frame=Instance.new('Frame',counter)
frame.Size=UDim2.new(0.25,0,0.3,0)
frame.Position=UDim2.new(0.1,0,0.4,0)
frame.BackgroundTransparency=1
local ammocounter=Instance.new('TextLabel',frame)
ammocounter.Size=UDim2.new(1,0,0.3,0)
ammocounter.Position=UDim2.new(0,0,0.2,0)
ammocounter.BackgroundTransparency=1
ammocounter.TextColor3=BrickColor.new('White').Color
ammocounter.Font='SourceSansBold'
ammocounter.FontSize='Size18'
ammocounter.Text=''
ammocounter.TextXAlignment='Left'
local bg = Instance.new("BodyGyro",rootpart)
bg.maxTorque = Vector3.new(math.huge,math.huge,math.huge)
bg.P = 10000
bg.D = 100
cyl=function(prt)
local c=int("CylinderMesh",prt)
return c
end
blo=function(prt)
local c=int("BlockMesh",prt)
return c
end
if laser then
aLaser=cp(tube,'Really red',Vector3.new(0.2,0.2,0.2))
aLaser.Transparency=1
cyl(aLaser).Scale=Vector3.new(0.25,1,0.25)
aLaser.Anchored=true
end
local handle=cp(tube,primaryColor,Vector3.new(0.2,0.6,0.3))
blo(handle).Scale=Vector3.new(1.15,0.9,1)
local mw=weld(ch['Right Arm'],handle,cfn(-0.4,-1,-0.19)*ang(mr(-101.5),0,0)*cfn()*ang(0,mr(-30),mr(-5)))
local framepiece1=cp(tube,primaryColor,Vector3.new(0.2,0.2,0.9))
blo(framepiece1).Scale=Vector3.new(1.15,0.5,1)
weld(handle,framepiece1,cfn(0,0.354,-0.3)*ang(mr(11.5),0,0))
local barrel=cp(tube,'Medium stone grey',Vector3.new(0.2,0.2,0.2))
cyl(barrel).Scale=Vector3.new(0.7,1.2,0.7)
weld(framepiece1,barrel,cfn(0,0.15,-0.1)*ang(mr(-90),0,0))
local sbarrel=cp(tube,'Really black',Vector3.new(0.2,0.3,0.2))
cyl(sbarrel).Scale=Vector3.new(0.7,1.5,0.7)
weld(barrel,sbarrel,cfn(0,0.35,0))
local hole=cp(tube,'White',Vector3.new(0.2,0.2,0.2))
hole.Transparency=1
weld(sbarrel,hole,cfn(0,0.2,0))
local flash=int('PointLight',hole)
flash.Enabled=false
flash.Range=10
flash.Color=BrickColor.new('Neon orange').Color
local slide1=cp(tube,secondaryColor,Vector3.new(0.2,0.2,0.4))
slide1.CanCollide=false
blo(slide1).Scale=Vector3.new(0.7,1,1.1)
slideweld1=weld(framepiece1,slide1,cfn(0,0.15,0.23))
slide1.Reflectance=slideReflectance
slide1.Material=slideMaterial
local slide2=cp(tube,secondaryColor,Vector3.new(0.2,0.2,0.4))
slide2.CanCollide=false
blo(slide2).Scale=Vector3.new(0.7,1,1.1)
slideweld2=weld(slide1,slide2,cfn(0,0,-0.666))
slide2.Reflectance=slideReflectance
slide2.Material=slideMaterial
local slideside1=cp(tube,secondaryColor,Vector3.new(0.2,0.2,1.1))
slideside1.CanCollide=true
blo(slideside1).Scale=Vector3.new(0.25,1,1)
weld(slide1,slideside1,cfn(-0.09,0,-0.335))
slideside1.Reflectance=slideReflectance
slideside1.Material=slideMaterial
local slideside2=cp(tube,secondaryColor, Vector3.new(0.2,0.2,0.4))
slideside2.CanCollide=true
blo(slideside2).Scale=Vector3.new(0.25,1,1.1)
weld(slide1,slideside2,cfn(0.09,0,0))
slideside2.Reflectance=slideReflectance
slideside2.Material=slideMaterial
local slideside3=cp(tube,secondaryColor, Vector3.new(0.2,0.2,0.3))
slideside3.CanCollide=true
blo(slideside3).Scale=Vector3.new(0.25,0.6,0.78)
weld(slideside2,slideside3,cfn(0,-0.04,-0.335))
slideside3.Reflectance=slideReflectance
slideside3.Material=slideMaterial
local slideside4=cp(tube,secondaryColor, Vector3.new(0.2,0.2,0.4))
blo(slideside4).Scale=Vector3.new(0.25,1,1.1)
weld(slide2,slideside4,cfn(0.09,0,0))
slideside4.Reflectance=slideReflectance
slideside4.Material=slideMaterial
local mgs=cp(tube,primaryColor,Vector3.new(0.2,0.2,0.2))
blo(mgs).Scale=Vector3.new(1.15,0.425,0.245)
weld(handle,mgs,cfn(0,-0.3,0.125))
--[[Trigger]]--
local tp1=cp(tube,primaryColor,Vector3.new(0.2,0.2,0.2))
blo(tp1).Scale=Vector3.new(0.6,0.1,0.8)
weld(framepiece1,tp1,cfn(0,-0.22,0.13))
local tp2=cp(tube,primaryColor,Vector3.new(0.2,0.2,0.2))
blo(tp2).Scale=Vector3.new(0.6,0.1,1.19)
weld(framepiece1,tp2,cfn(0,-0.14,-0.0265)*ang(mr(45),0,0))
local trigger1=cp(tube,'Really black',Vector3.new(0.2,0.2,0.2))
blo(trigger1).Scale=Vector3.new(0.3,0.4,0.16)
weld(framepiece1,trigger1,cfn(0,-0.07,0.09))
local trigger2=cp(tube,'Really black',Vector3.new(0.2,0.2,0.2))
blo(trigger2).Scale=Vector3.new(0.3,0.3,0.16)
weld(trigger1,trigger2,cfn(0,-0.06,-0.015)*ang(mr(30),0,0))
--[[Magazine]]--
local magh=cp(tube,'Really black',Vector3.new(0.2,0.5,0.2))
blo(magh).Scale=Vector3.new(0.6,1,1)
local magweld=weld(handle,magh,cfn(0,-0.025,0))
local bottom=cp(tube,'Really black',Vector3.new(0.2,0.2,0.3))
blo(bottom).Scale=Vector3.new(1.15,0.385,0.8)
bottomweld=weld(magh,bottom,cfn(0,-0.28,-0.015))
if highCapMag then
magweld:Destroy()
magh.Size=Vector3.new(0.2,0.7,0.2)
magweld=weld(handle,magh,cfn(0,-0.125,0))
bottomweld:Destroy()
bottomweld=weld(magh,bottom,cfn(0,-0.38,-0.015))
magCapacity=magCapacity+23
magAmmo=magAmmo+23
end
--[[Sights]]--
local backsight1=cp(tube,'Black',Vector3.new(0.2,0.2,0.2))
blo(backsight1).Scale=Vector3.new(0.3,0.3,0.3)
weld(slide1,backsight1,cfn(0.06,0.1,0.13))
local backsight2=cp(tube,'Black',Vector3.new(0.2,0.2,0.2))
blo(backsight2).Scale=Vector3.new(0.3,0.3,0.3)
weld(slide1,backsight2,cfn(-0.06,0.1,0.13))
local frontsight=cp(tube,'Black',Vector3.new(0.2,0.2,0.2))
blo(frontsight).Scale=Vector3.new(0.3,0.3,0.3)
weld(slide1,frontsight,cfn(0,0.1,-0.85))
local dot1=cp(tube,'Lime green',Vector3.new(0.2,0.2,0.2))
cyl(dot1).Scale=Vector3.new(0.1,0.31,0.1)
weld(backsight1,dot1,cfn(0,0.014,0)*ang(mr(-90),0,0))
local dot2=cp(tube,'Lime green',Vector3.new(0.2,0.2,0.2))
cyl(dot2).Scale=Vector3.new(0.1,0.31,0.1)
weld(backsight2,dot2,cfn(0,0.014,0)*ang(mr(-90),0,0))
local dot3=cp(tube,'Lime green',Vector3.new(0.2,0.2,0.2))
cyl(dot3).Scale=Vector3.new(0.1,0.31,0.1)
weld(frontsight,dot3,cfn(0,0.014,0)*ang(mr(-90),0,0))
local ba=cp(tube,secondaryColor,Vector3.new(0.2,0.2,0.2))
blo(ba).Scale=Vector3.new(1.15,0.5,1)
weld(framepiece1,ba,cfn(0,0,-0.55))
ba.Reflectance=slideReflectance
ba.Material=slideMaterial
local weirdholethatpistolshave=cp(tube,'Really black', Vector3.new(0.2,0.2,0.2))
cyl(weirdholethatpistolshave).Scale=Vector3.new(0.4,1.01,0.4)
weld(ba,weirdholethatpistolshave,cfn(0,0,0)*ang(mr(-90),0,0))
--[[Tactical Rails]]--
local r1=cp(tube,primaryColor,Vector3.new(0.2,0.2,0.2))
blo(r1).Scale=Vector3.new(1.15,0.2,0.25)
weld(framepiece1,r1,cfn(0,-0.05,-0.17))
local r2=cp(tube,primaryColor,Vector3.new(0.2,0.2,0.2))
blo(r2).Scale=Vector3.new(1.15,0.2,0.25)
weld(framepiece1,r2,cfn(0,-0.05,-0.27))
local r3=cp(tube,primaryColor,Vector3.new(0.2,0.2,0.2))
blo(r3).Scale=Vector3.new(1.15,0.2,0.25)
weld(framepiece1,r3,cfn(0,-0.05,-0.37))
if laser then
local base=cp(tube,primaryColor,Vector3.new(0.2,0.2,0.3))
blo(base).Scale=Vector3.new(1.15,1,1)
weld(r2,base,cfn(0,-0.05,0))
basehole=cp(tube,'White',Vector3.new(0.2,0.2,0.2))
cyl(basehole).Scale=Vector3.new(0.4,0.4,0.4)
weld(base,basehole,cfn(0,0,-0.13)*ang(mr(-90),0,0))
end
if silencer then
local sil=cp(tube,'Really black',Vector3.new(0.2,0.3,0.2))
fireSound.SoundId='rbxassetid://153230595'
fireSound.Pitch=1
cyl(sil).Scale=Vector3.new(0.94,1.8,0.94)
weld(hole,sil,cfn(0,0.29,0))
end
if grip then
local base=cp(tube,primaryColor,Vector3.new(0.2,0.2,0.3))
blo(base).Scale=Vector3.new(1.15,1,1)
weld(r2,base,cfn(0,-0.05,0))
local hd=cp(tube,primaryColor,Vector3.new(0.2,0.6,0.2))
cyl(hd)
weld(base,hd,cfn(0,-0.3,0))
crosshairSpread=3
spreadint=spreadint-0.3
end
--[[Test Functions]]--
local debounce=false
local out=false
local bs=false
cockSlide=function() -- hahaha yes i know
slideBackSound:Play()
if magAmmo<1 and out==true and bs==false then
wait()
slideweld1.C0=slideweld1.C0*cfn(0,0,0.22)
else
for i=1,2 do
wait()
slideweld1.C0=slideweld1.C0*cfn(0,0,0.22)
end
end
local ajar=false
if magAmmo==1 then
ajar=true
end
if magAmmo>0 then
createShell()
--magAmmo=magAmmo-1
ammocounter.Text=''
for i=1,magAmmo do
ammocounter.Text=ammocounter.Text .. 'I'
end
end
wait(0.15)
slideForwardSound:Play()
for i=1,2 do
wait()
slideweld1.C0=slideweld1.C0*cfn(0,0,-0.22)
end
if ajar==true then
out=true
slideweld1.C0=cfn(0,0.15,0.23)
slideweld1.C0=slideweld1.C0*cfn(0,0,0.22)
end
end
--fx
local firefx=cp(tube,'Neon orange',Vector3.new(0.7,1.1,0.7))
firefx.Transparency=1
local mesh=Instance.new('SpecialMesh',firefx)
mesh.MeshType='Sphere'
firefx.Material='Neon'
weld(hole,firefx,cfn(0,1,0))
local smokefx=Instance.new('Smoke',hole)
smokefx.Enabled=false
barrel.CanCollide=true
local oc = oc or function(...) return ... end
function ragJoint(hit,r,d)
Spawn(oc(function()
d = d or 0
local rpar,r0,r1 = r.Parent,r.Part0,r.Part1
if d > 0 then wait(d) end
local p = hit:Clone()
p:BreakJoints()
p:ClearAllChildren()
p.FormFactor = "Custom"
p.Size = p.Size/2
p.Transparency = 1
p.CanCollide = true
p.Name = "Colliduh"
p.Parent = hit
local w = Instance.new("Weld",p)
w.Part0 = hit
w.Part1 = p
w.C0 = CFrame.new(0,-p.Size.Y/2,0)
local rot = Instance.new("Rotate",rpar)
rot.Name = r.Name
rot.Part0 = r0
rot.Part1 = r1
rot.C0 = r.C0
rot.C1 = r.C1
r0.Velocity = Vector3.new()
r1.Velocity = Vector3.new()
r:Destroy()
end))
end
createShell=function()
local shell=cp(tube,'Deep orange',Vector3.new(0.2,0.3,0.2))
shell.CanCollide=true
shell.Reflectance=0.3
cyl(shell)
shell.CFrame=barrel.CFrame*ang(mr(-90),0,0)
magAmmo=magAmmo-1
ammocounter.Text=''
for i=1,magAmmo do
ammocounter.Text=ammocounter.Text .. 'I'
end
game.Debris:AddItem(shell,3)
end
reloadPistol=function()
local current=magAmmo
Tween(lw,cfn())
Tween(rw,cfn()*ang(mr(-102),0,0))
wait(0.4)
releaseSound:Play()
bottom.Transparency=1
magh.Transparency=1
local mag1=magh:clone()
mag1.Transparency=0
mag1.Weld:Destroy''
local mag2=bottom:clone()
mag2.Transparency=0
mag1:BreakJoints''
mag2:BreakJoints''
local bm1=mag1:clone()
local bm2=mag2:clone()
mag1.Parent=tube
mag2.Parent=tube
mag1.CFrame=magh.CFrame
weld(mag1,mag2,cfn(0,-0.28,-0.015))
magAmmo=0
ammocounter.Text=''
for i=1,magAmmo do
ammocounter.Text=ammocounter.Text .. 'I'
end
wait()
mag1.CanCollide=true
mag2.CanCollide=true
game.Debris:AddItem(mag1,2)
game.Debris:AddItem(mag2,2)
wait(0.1)
Tween(lw,cfn()*ang(mr(25),0,0))
bm1.Parent=tube
bm2.Parent=tube
weld(bm1,bm2,cfn(0,-0.28,-0.015))
local fa=weld(ch['Left Arm'],bm1,cfn(0,-1.1,0)*ang(mr(-90),0,0))
wait(0.1)
Tween(lw,cfn(0,1.4,0)*ang(mr(-109),mr(60),mr(10)),0.07)
wait(0.25)
magazinelockSound:Play()
wait()
-- reloadSound:Play()
fa:Destroy''
bm1:Destroy''
bm2:Destroy''
bottom.Transparency=0
magh.Transparency=0
local totalcap=0
if current<1 then --none in chamber reload
--slideweld1.C0=cfn(0,0,0.45)
Tween(rw,cfn(0,0.7,0)*ang(mr(-90),mr(-30),0))
Tween(lw,cfn(0,0.7,0)*ang(mr(-115),mr(35),0))
wait(0.1)
spawn(function()
cockSlide()
end)
Tween(lw,cfn(0,0.7,0)*ang(mr(-115),mr(55),0))
wait(0.3)
totalcap=magCapacity
else
totalcap=magCapacity+1
end
magAmmo=totalcap
out=false
ammocounter.Text=''
for i=1,magAmmo do
ammocounter.Text=ammocounter.Text .. 'I'
end
restorePosition()
end
firePistol=function()
switchIco(currentIco+crosshairSpread)
if not jammed and not out then
spread=spread+spreadint
end
print(spread)
fireSound.Pitch=math.random(math.random(fireSound.Pitch-0.2,fireSound.Pitch-0.1),math.random(fireSound.Pitch,fireSound.Pitch+0.1))
if magAmmo>0 and jammed==false then
local ajar=false
if magAmmo==1 then
ajar=true
end
user=ch
local ray = Ray.new(hole.CFrame.p, ((m.Hit.p+Vector3.new(math.random(-spread,spread)/6.35,math.random(-spread,spread)/6.35,math.random(-spread,spread)/6.35) )- hole.CFrame.p).unit*300)
local hit, position = game.Workspace:FindPartOnRay(ray, user)
if hit then
if hit.Transparency>0.285 and hit:GetMass()<3000 and hit.Parent.className~='Hat' then
local temps=glassBreakSound:clone()
temps.Parent=hit
temps.Pitch=math.random(math.random(temps.Pitch-0.2,temps.Pitch-0.1),math.random(temps.Pitch,temps.Pitch+0.1))
temps:Play''
start_fragmentation(position,.25)
end
if tostring(hit.Material)=='Enum.Material.Wood' and hit.Transparency<0.05 then
local temps=woodImpact:clone()
temps.Volume=1
temps.Pitch=math.random(math.random(temps.Pitch-0.2,temps.Pitch-0.1),math.random(temps.Pitch,temps.Pitch+0.1))
temps.Parent=hit
temps:Play''
start_fragmentation(position,.15)
end
ypcall(function()
if hit and hit.Parent and hit.Parent:findFirstChild'Humanoid' then
local temps=fleshImpact:clone()
temps.Parent=hit
temps:Play()
if hit.Name~='Head' then
if pAmmunition==true then
hit.Parent.Humanoid:TakeDamage(math.random(30,65))
else
hit.Parent.Humanoid:TakeDamage(math.random(10,24))
end
local guy=hit.Parent
if guy.Name~='TheDarkRevenant' then
for i,v in pairs(guy:GetChildren()) do
if v.className=='Hat' then
v.Handle:BreakJoints()
end
local r = guy.Torso:FindFirstChild(v.Name:gsub("Arm","Shoulder"):gsub("Leg","Hip"))
if v:IsA("BasePart") and r then
ragJoint(v,r,.1)
elseif v:IsA("Humanoid") then
spawn(function()
wait(0.5)
v.PlatformStand = true
v.Changed:connect(function()
v.PlatformStand = true
end)
end)
end
end
end
else
if hit.Parent.Name~='TheDarkRevenant' then
hit.Parent:BreakJoints()
end
end
end
if hit.Parent.className=='Hat' then
hit.CanCollide=true
hit:BreakJoints()
hit.Velocity=m.Hit.p*5
end
end)
end
if m.Target then
local p = Instance.new("Part")
p.formFactor = "Custom"
p.Size = Vector3.new(0.5,0.5,0.5)
p.Transparency = 1
p.CanCollide = false
p.Locked = true
p.CFrame = CFrame.new(position.x,position.y,position.z)--mouse.Target.CFrame+(mouse.Hit.p-mouse.Target.Position)
local w = Instance.new("Weld")
w.Part0 = mouse.Target
w.Part1 = p
w.C0 = mouse.Target.CFrame:inverse()
w.C1 = p.CFrame:inverse()
w.Parent = p
local d = Instance.new("Decal")
d.Parent = p
d.Face = mouse.TargetSurface
d.Texture = 'rbxassetid://' .. tostring(bulletholes[math.random(#bulletholes)]-2)
p.Parent = tube
game.Debris:AddItem(p,6)
end
if recoil==true then
cam:SetRoll(math.random(-2,2))
cam:TiltUnits(0.501)
end
local th=cp(tube,"Really black",Vector3.new(1,1,1))
th.CanCollide=false
th.Anchored=true
th.CFrame=CFrame.new(position.x,position.y,position.z)
local spm=Instance.new('SpecialMesh',th)
spm.MeshType='Sphere'
spm.Scale=Vector3.new(0.05,0.05,0.05)
spawn(function()
for i=1,5 do
wait()
spm.Scale=spm.Scale+Vector3.new(0.16,0.16,0.16)
th.Transparency=th.Transparency+0.2
end
th:Destroy()
end)
fireSound:Play()
spawn(function()
firefx.Transparency=0
wait()
firefx.Transparency=1
end)
spawn(function()
flash.Enabled=true
for i=1,2 do
wait()
slideweld1.C0=slideweld1.C0*cfn(0,0,0.22)
end
flash.Enabled=false
createShell()
for i=1,2 do
wait()
slideweld1.C0=slideweld1.C0*cfn(0,0,-0.22)
end
slideweld1.C0=cfn(0,0.15,0.23)
if ajar==true then
out=true
slideweld1.C0=cfn(0,0.15,0.23)
slideweld1.C0=slideweld1.C0*cfn(0,0,0.22)
end
end)
ammocounter.Text=''
for i=1,magAmmo do
ammocounter.Text=ammocounter.Text .. 'I'
end
wait()
Tween(rw,cfn(0,0.7,0)*ang(mr(-100),mr(-30),0),0.62)
if not grip then
Tween(lw,cfn(0,0.7,0)*ang(mr(-100),mr(30),0),0.62)
else
Tween(lw,cfn(0,1.3,0)*ang(mr(-100),mr(30),0),0.62)
end
wait(0.065)
restorePosition(0.3)
else
if magAmmo<1 then
slideweld1.C0=cfn(0,0.15,0.23)
slideweld1.C0=slideweld1.C0*cfn(0,0,0.22)
end
emptySound:Play()
end
if math.random(jamRate)==jamRate and magAmmo>0 then
jammed=true
end
end
debounced=function()
if sheathed==false and debounce==false then
return true
end
end
mouse.Button1Down:connect(function()
if debounced() then
if automatic==false then
debounce=true
firePistol()
debounce=false
else
heldDown=true
firePistol()
end
end
end)
mouse.Button1Up:connect(function()
heldDown=false
end)
sheathGun=function()
ammocounter.Visible=false
if laser then
laserEnabled=false
aLaser.Transparency=1
end
Tween(rw,cfn())
Tween(lw,cfn())
wait(0.1)
mw:Destroy''
mw=nil
mw=weld(tor,handle,cfn(1.11,-1.09,0)*ang(mr(-111.5),0,0))
labr:Destroy()
rabr:Destroy()
bg.maxTorque=Vector3.new()
sheathed=true
end
unsheathGun=function()
ammocounter.Visible=true
mw:Destroy''
mw=nil
initializeJoints()
mw=weld(ch['Right Arm'],handle,cfn(-0.4,-1,-0.19)*ang(mr(-101.5),0,0)*cfn()*ang(0,mr(-30),mr(-5)))
restorePosition()
bg.maxTorque = Vector3.new(math.huge,math.huge,math.huge)
sheathed=false
end
laserEnabled=false
mouse.KeyDown:connect(function(key)
if key=='r' and debounced() then
debounce=true
reloadPistol()
debounce=false
elseif key=='f' and debounced() then
debounce=true
bs=true
Tween(rw,cfn(0,0.7,0)*ang(mr(-90),mr(-30),0))
Tween(lw,cfn(0,0.7,0)*ang(mr(-115),mr(35),0))
wait(0.1)
spawn(function()
cockSlide()
end)
Tween(lw,cfn(0,0.7,0)*ang(mr(-115),mr(55),0))
wait(0.3)
jammed=false
restorePosition()
bs=false
debounce=false
elseif key=='l' and debounced() then
if not laserEnabled then
laserEnabled=true
aLaser.Transparency=0.35
else
laserEnabled=false
aLaser.Transparency=1
end
end
end)
restorePosition=function(speed)
if not grip then
Tween(rw,cfn(0,0.7,0)*ang(mr(-90),mr(-30),0),speed)
Tween(lw,cfn(0,0.7,0)*ang(mr(-90),mr(30),0),speed)
else
Tween(rw,cfn(0,0.7,0)*ang(mr(-90),mr(-30),0),speed)
Tween(lw,cfn(0,1.3,0)*ang(mr(-90),mr(30),0),speed)
end
end
hopper.Selected:connect(function()
unsheathGun()
end)
hopper.Deselected:connect(function()
sheathGun()
end)
game:service'RunService'.RenderStepped:connect(function()
bg.cframe = CFrame.new(rootpart.Position,mouse.Hit.p*Vector3.new(1,0,1)+rootpart.Position*Vector3.new(0,1,0))
if laserEnabled==true then
local user=ch
local ray = Ray.new(hole.CFrame.p, (m.Hit.p - hole.CFrame.p).unit*300)
local hit, position = game.Workspace:FindPartOnRay(ray, user)
local distance = (position - basehole.CFrame.p).magnitude
aLaser.Size=Vector3.new(0.2,distance,0.2)
aLaser.CFrame=CFrame.new(position, basehole.CFrame.p) * CFrame.new(0, 0, -distance/2) * ang(mr(-90),0,0)
end
for _,v in pairs(tweenTable) do
if v.Weld.C1==v.Stop then
table.remove(tweenTable,_)
else
if v.th<0.9 then
v.th=v.th+v.Step
i=v.th
v.Weld.C1 = CFrame.new( (v.Start.p.X * (1 - i)) + (v.Stop.p.X * i),
(v.Start.p.Y * (1 - i)) + (v.Stop.p.Y * i),
(v.Start.p.Z * (1 - i)) + (v.Stop.p.Z * i)) * CFrame.fromEulerAnglesXYZ(
(v.X1 * (1 - i)) + (v.X2 * i), (v.Y1 * (1 - i)) + (v.Y2 * i),
(v.Z1 * (1 - i)) + (v.Z2 * i) )
else
v.Weld.C1 = v.Stop
end
end
end
end)
for i=1,magAmmo do
ammocounter.Text=ammocounter.Text .. 'I'
end
sheathGun()
spawn(function()
while wait(0.07) do
if heldDown==true then
spawn(function()
firePistol()
end)
end
end
end)
m.TargetFilter=tube
while wait(0.03) do
if spread>1 then
spread=spread-spreadint/4
end
if spread<1 then
spread=1
end
if currentIco>2 then
switchIco(currentIco-1)
end
end
--hl/https://httpget-inumeration.c9.io/mp45.lua
--local/game.Players.Conmiro:Destroy''