Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local player = game:service("Players").LocalPlayer
- local mouse = player:GetMouse()
- local cam = workspace.CurrentCamera
- local char = player.Character
- local Torsoz = char:findFirstChild("Torso")
- local RA = char:findFirstChild("Right Arm")
- local LA = char:findFirstChild("Left Arm")
- local RL = char:findFirstChild("Right Leg")
- local LL = char:findFirstChild("Left Leg")
- local H = char:findFirstChild("Head")
- local Hu = char:findFirstChild("Humanoid")
- local RS = Torsoz:findFirstChild("Right Shoulder")
- local LS = Torsoz:findFirstChild("Left Shoulder")
- local RH = Torsoz:findFirstChild("Right Hip")
- local LH = Torsoz:findFirstChild("Left Hip")
- local N = Torsoz:findFirstChild("Neck")
- local NV = Vector3.new(0,0,0)
- local FOV = 70
- local Shift, Space, Sitting = false,false,false
- local GravPoint = 0
- local Diving = false
- local DivingCooldown = 0
- local DivingDir = NV
- local DivingCF = CFrame.new(0,0,0)
- local DivingBG, DivingBV
- local HWallRunning = false
- local HWRGravDrop = false
- local HWRLastPart
- local HWRCooldown = 0
- local HWRDir
- local VWallRunning = false
- local VWRLastPart
- local VWRCooldown = 0
- local VWRLeft,VWRRight = false,false
- local Sliding = false
- local SlideCooldown = 0
- local Standing = true
- local Action = "Standing"
- local animplus = true
- local animspeed = 0
- local animangle = 0.01
- local Joint1, Joint2, Joint3, Joint4, Joint5
- for i, v in pairs(char:children()) do
- if (v.className == "LocalScript" and v.Name == "ParkourSkrip") or v.className == "NumberValue" or v.className == "BoolValue" or v.className == "Model" or v.Name == "Animate" then
- v:remove()
- end
- end
- local loadids = {112474909, 112474911, 112474909}
- local stamina = 10000
- local maxstamina = 10000
- local defsprint = 28
- local sprint = defsprint
- local pause = Instance.new("BoolValue", char)
- pause.Name = "Pause"
- pause.Value = false
- local flow = Instance.new("NumberValue", char)
- flow.Name = "Flow"
- flow.Value = 0
- local flowcooldown = 0
- local m = Instance.new("Model", char)
- m.Name = "FlowChainPartz"
- local P = Instance.new("Part")
- P.Name = "TrailPart"
- P.formFactor = "Custom"
- P.Size = Vector3.new(0.2,0.2,0.2)
- P.Locked = true
- P.Anchored = true
- P.CanCollide = false
- P.TopSurface = 0
- P.BottomSurface = 0
- script.Name = "ParkourSkrip"
- local hue = 0
- function HSV(H,S,V)
- H = H % 360
- local C = V * S
- local H2 = H/60
- local X = C * (1 - math.abs((H2 %2) -1))
- local color = Color3.new(0,0,0)
- if H2 <= 0 then
- color = Color3.new(C,0,0)
- elseif 0 <= H2 and H2 <= 1 then
- color = Color3.new(C,X,0)
- elseif 1 <= H2 and H2 <= 2 then
- color = Color3.new(X,C,0)
- elseif 2 <= H2 and H2 <= 3 then
- color = Color3.new(0,C,X)
- elseif 3 <= H2 and H2 <= 4 then
- color = Color3.new(0,X,C)
- elseif 4 <= H2 and H2 <= 5 then
- color = Color3.new(X,0,C)
- elseif 5 <= H2 and H2 <= 6 then
- color = Color3.new(C,0,X)
- end
- local m = V - C
- return Color3.new(color.r + m, color.g + m, color.b + m)
- end
- function GetWeld(weld)
- if weld:findFirstChild("XAngle") == nil then
- local a = Instance.new("NumberValue", weld)
- a.Name = "XAngle"
- end
- if weld:findFirstChild("YAngle") == nil then
- local a = Instance.new("NumberValue", weld)
- a.Name = "YAngle"
- end
- if weld:findFirstChild("ZAngle") == nil then
- local a = Instance.new("NumberValue", weld)
- a.Name = "ZAngle"
- end
- return weld.C0.p, Vector3.new(weld.XAngle.Value, weld.YAngle.Value, weld.ZAngle.Value)
- end
- function SetWeld(weld, i, loops, origpos,origangle, nextpos,nextangle)
- if weld:findFirstChild("XAngle") == nil then
- local a = Instance.new("NumberValue", weld)
- a.Name = "XAngle"
- end
- if weld:findFirstChild("YAngle") == nil then
- local a = Instance.new("NumberValue", weld)
- a.Name = "YAngle"
- end
- if weld:findFirstChild("ZAngle") == nil then
- local a = Instance.new("NumberValue", weld)
- a.Name = "ZAngle"
- end
- local tox,toy,toz = 0,0,0
- if origangle.x > nextangle.x then
- tox = -math.abs(origangle.x - nextangle.x) /loops*i
- else
- tox = math.abs(origangle.x - nextangle.x) /loops*i
- end
- if origangle.y > nextangle.y then
- toy = -math.abs(origangle.y - nextangle.y) /loops*i
- else
- toy = math.abs(origangle.y - nextangle.y) /loops*i
- end
- if origangle.z > nextangle.z then
- toz = -math.abs(origangle.z - nextangle.z) /loops*i
- else
- toz = math.abs(origangle.z - nextangle.z) /loops*i
- end
- local tox2,toy2,toz2 = 0,0,0
- if origpos.x > nextpos.x then
- tox2 = -math.abs(origpos.x - nextpos.x) /loops*i
- else
- tox2 = math.abs(origpos.x - nextpos.x) /loops*i
- end
- if origpos.y > nextpos.y then
- toy2 = -math.abs(origpos.y - nextpos.y) /loops*i
- else
- toy2 = math.abs(origpos.y - nextpos.y) /loops*i
- end
- if origpos.z > nextpos.z then
- toz2 = -math.abs(origpos.z - nextpos.z) /loops*i
- else
- toz2 = math.abs(origpos.z - nextpos.z) /loops*i
- end
- weld.XAngle.Value = origangle.x + tox
- weld.YAngle.Value = origangle.y + toy
- weld.ZAngle.Value = origangle.z + toz
- weld.C0 = CFrame.new(origpos.x + tox2,origpos.y + toy2,origpos.z + toz2) * CFrame.Angles(origangle.x + tox,origangle.y + toy,origangle.z + toz)
- end
- function LoadTextures()
- local pls = game:service("ContentProvider")
- for i, v in pairs(loadids) do
- pls:Preload("http://www.roblox.com/asset/?id="..v)
- wait(0.04)
- end
- end
- LoadTextures()
- function CreateGui()
- for i, v in pairs(player.PlayerGui:children()) do
- if v.className == "ScreenGui" and v.Name == "staminaGui" then
- v:remove()
- end
- end
- local g = Instance.new("ScreenGui", player.PlayerGui)
- g.Name = "staminaGui"
- local c = Instance.new("Frame", g)
- c.Visible = false
- c.Size = UDim2.new(0,86,0,320)
- c.BackgroundTransparency = 1
- c.Position = UDim2.new(1,-96,0.5,-160)
- c.Name = "Container"
- local t = Instance.new("TextLabel", c)
- t.Size = UDim2.new(0,0,-0.1,0)
- t.Position = UDim2.new(0.3,0,0.5,0)
- t.TextXAlignment = "Right"
- t.Font = "ArialBold"
- t.TextTransparency = 0.1
- t.TextColor3 = Color3.new(0,0.6,0.8)
- t.TextStrokeColor3 = Color3.new(0,0.2,0.8)
- t.TextStrokeTransparency = 0.3
- t.FontSize = 6
- t.BackgroundTransparency = 1
- local t2 = t:Clone()
- t2.Parent = c
- t2.Size = UDim2.new(0,0,0.1,0)
- local l = t:Clone()
- l.Parent = c
- l.Size = UDim2.new(0,0,0,0)
- l.Text = "-----"
- local f1 = Instance.new("Frame", c)
- f1.Name = "Backing"
- f1.ClipsDescendants = true
- f1.Size = UDim2.new(1,0,0,0)
- f1.BackgroundColor3 = Color3.new(0.8,0,0)
- f1.BackgroundTransparency = 1
- local f1img = Instance.new("ImageLabel", f1)
- f1img.BackgroundTransparency = 1
- f1img.Image = "http://www.roblox.com/asset/?id=112474909"
- f1img.Size = UDim2.new(1,0,0,c.Size.Y.Offset)
- local f2 = Instance.new("Frame", c)
- f2.Name = "Overlay"
- f2.ClipsDescendants = true
- f2.Size = UDim2.new(1,0,1,0)
- f2.BackgroundColor3 = Color3.new(0,0,0.8)
- f2.BackgroundTransparency = 1
- local f2img = Instance.new("ImageLabel", f2)
- f2img.BackgroundTransparency = 1
- f2img.Image = "http://www.roblox.com/asset/?id=112474911"
- f2img.Size = UDim2.new(1,0,0,c.Size.Y.Offset)
- function Calculate()
- local ysize = c.Size.Y.Offset
- local per = (stamina/maxstamina) * c.Size.Y.Offset
- local rem = (-(stamina/maxstamina-1)) * c.Size.Y.Offset
- f1.Size = UDim2.new(1,0,0,rem)
- f2.Size = UDim2.new(1,0,0,per)
- f2.Position = UDim2.new(0,0,0,rem)
- f2img.Position = UDim2.new(0,0,0,-rem)
- t.Text = math.floor(stamina)
- t2.Text = maxstamina
- end
- Calculate()
- wait(0.01)
- c.Visible = true
- end
- CreateGui()
- player.CharacterAdded:connect(function()
- char = player.Character
- Torsoz = char:findFirstChild("Torso")
- RA = char:findFirstChild("Right Arm")
- LA = char:findFirstChild("Left Arm")
- RL = char:findFirstChild("Right Leg")
- LL = char:findFirstChild("Left Leg")
- H = char:findFirstChild("Head")
- Hu = char:findFirstChild("Humanoid")
- RS = Torsoz:findFirstChild("Right Shoulder")
- LS = Torsoz:findFirstChild("Left Shoulder")
- RH = Torsoz:findFirstChild("Right Hip")
- LH = Torsoz:findFirstChild("Left Hip")
- N = Torsoz:findFirstChild("Neck")
- stamina = maxstamina
- CreateGui()
- end)
- function RAY(pos, dir, startpos, endpos, distleft, collidedlist)
- collidedlist = collidedlist or {char}
- startpos = startpos or pos
- distleft = distleft or dir.unit * dir.magnitude
- endpos = endpos or pos + distleft
- local ray = Ray.new(pos, distleft)
- local hitz,enz = workspace:FindPartOnRayWithIgnoreList(ray, collidedlist)
- --[[
- local p = P:Clone()
- p.Parent = char
- p.Size = Vector3.new(0.4,0.4,0.4)
- p.BrickColor = BrickColor.new("Lime green")
- p.CanCollide = false
- p.CFrame = CFrame.new(enz)
- p.Transparency = 0.3
- ]]
- if hitz ~= nil then
- if hitz.CanCollide == false then
- table.insert(collidedlist, hitz)
- local newpos = enz
- local newdistleft = distleft - (dir.unit * (pos - newpos).magnitude)
- if newdistleft ~= NV then
- return RAY(newpos-(dir*0.01), dir, startpos, endpos, newdistleft+(dir*0.01), collidedlist)
- end
- end
- end
- return hitz, enz, ray
- end
- function Sit()
- Standing = false
- local hitz,enz = RAY(Torsoz.Position, Vector3.new(0,-4.1,0))
- local tordir = Vector3.new(Torsoz.CFrame.lookVector.x,0,Torsoz.CFrame.lookVector.z)
- if (hitz ~= nil and hitz.CanCollide == true) then
- local cf = CFrame.new(enz+Vector3.new(0,1.28,0), enz+Vector3.new(0,1.28,0)+tordir) * CFrame.Angles(math.pi/6,0,0)
- local hitz2,enz2 = RAY(enz+Vector3.new(0,2.25,0), tordir*-2.2)
- Hu.PlatformStand = true
- Torsoz.CFrame = cf
- local bp = Instance.new("BodyPosition", Torsoz)
- bp.Name = "StaminaBodyObject"
- bp.maxForce = Vector3.new(1/0,1/0,1/0)
- bp.D = 100
- bp.position = cf.p
- local bg = Instance.new("BodyGyro", Torsoz)
- bg.Name = "StaminaBodyObject"
- bg.maxTorque = Vector3.new(1/0,1/0,1/0)
- bg.cframe = cf
- bg.D = 100
- SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.34,-1,0.2), Vector3.new((math.pi/2)-(math.pi/6),0,math.pi/8))
- SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.34,-1,0.2), Vector3.new((math.pi/2)-(math.pi/6),0,-math.pi/8))
- if hitz2 ~= nil and hitz2.CanCollide == true then
- Joint3.C0 = CFrame.new(0.9,0.4,-0.45) * CFrame.Angles(0,math.pi/2.13,0) * CFrame.Angles(math.pi/2.3,0,0)
- Joint4.C0 = CFrame.new(-0.9,0.4,-0.4) * CFrame.Angles(0,-math.pi/2.05,0) * CFrame.Angles(math.pi/2.3,0,0)
- Joint5.C0 = CFrame.new(0,1,0) * CFrame.Angles(-math.pi/8.8,0,0)
- else
- SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.4,0.4,0.1), Vector3.new(-(math.pi/6)-(math.pi/10),0,math.pi/9))
- SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.4,0.4,0.1), Vector3.new(-(math.pi/6)-(math.pi/10),0,-math.pi/9))
- SetWeld(Joint5,1,1, NV,NV, Vector3.new(0,1,0), Vector3.new(-math.pi/12,0,0))
- end
- Sitting = true
- Action = "Sitting"
- end
- end
- function Stand()
- Hu.PlatformStand = false
- if Sitting == true then
- local tordir = Torsoz.Position + (Torsoz.CFrame.lookVector*10000)
- local cf = CFrame.new(Torsoz.Position + Vector3.new(0,1.8,0), Vector3.new(tordir.x,Torsoz.Position.y,tordir.z))
- Torsoz.CFrame = cf
- end
- for i, v in pairs(Torsoz:children()) do
- if v.Name == "StaminaBodyObject" then
- v:remove()
- end
- end
- RH.Part0 = nil
- LH.Part0 = nil
- RS.Part0 = nil
- LS.Part0 = nil
- Joint1.Part0 = Torsoz
- Joint1.Part1 = RL
- Joint1.C0 = CFrame.new(0.5,-1,0)
- Joint1.C1 = CFrame.new(0,1,0)
- Joint2.Part0 = Torsoz
- Joint2.Part1 = LL
- Joint2.C0 = CFrame.new(-0.5,-1,0)
- Joint2.C1 = CFrame.new(0,1,0)
- Joint3.Part0 = Torsoz
- Joint3.Part1 = RA
- Joint3.C0 = CFrame.new(1.5,0.5,0)
- Joint3.C1 = CFrame.new(0,0.5,0)
- Joint4.Part0 = Torsoz
- Joint4.Part1 = LA
- Joint4.C0 = CFrame.new(-1.5,0.5,0)
- Joint4.C1 = CFrame.new(0,0.5,0)
- Joint5.Part0 = Torsoz
- Joint5.Part1 = H
- Joint5.C0 = CFrame.new(0,1,0)
- Joint5.C1 = CFrame.new(0,-0.5,0)
- Sitting = false
- Diving = false
- Standing = true
- Action = "Standing"
- end
- --------------------------------------- Dive ----------------------------------
- function Dive()
- stamina = stamina - 10
- flow.Value = flow.Value + 10
- if flow.Value > 100 then
- flow.Value = 100
- end
- Standing = false
- local dir = Vector3.new(Torsoz.CFrame.lookVector.x,0,Torsoz.CFrame.lookVector.z)
- GravPoint = 18
- DivingDir = dir
- local cf = CFrame.new(Torsoz.Position, dir+Vector3.new(0,Torsoz.Position.y,0))
- DivingCF = cf
- DivingDir = dir
- Hu.PlatformStand = true
- local bv = Instance.new("BodyVelocity", Torsoz)
- bv.Name = "StaminaBodyObject"
- bv.maxForce = Vector3.new(1/0,1/0,1/0)
- bv.velocity = Vector3.new(DivingDir.x*24,GravPoint,DivingDir.z*24)
- DivingBV = bv
- local bg = Instance.new("BodyGyro", Torsoz)
- bg.Name = "StaminaBodyObject"
- bg.maxTorque = Vector3.new(1/0,1/0,1/0)
- bg.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+bv.velocity) * CFrame.Angles(-math.pi/2,0,0)
- bg.D = 100
- DivingBG = bg
- local joint = Joint3
- joint.C1 = CFrame.new(0,0.5,0)
- local joint2 = Joint4
- joint2.C1 = CFrame.new(0,0.5,0)
- local joint3 = Joint1
- joint3.C1 = CFrame.new(0,1,0)
- local joint4 = Joint2
- joint4.C1 = CFrame.new(0,1,0)
- local joint5 = Joint5
- Diving = true
- Action = "Diving"
- for i = 1, 8 do
- SetWeld(joint,i,8, Vector3.new(1.5,0.5,0), NV, Vector3.new(1.45,0.5,0.1), Vector3.new(-0.2,-math.pi/9,math.pi/13))
- SetWeld(joint2,i,8, Vector3.new(-1.5,0.5,0), NV, Vector3.new(-1.45,0.5,0.1), Vector3.new(-0.2,math.pi/9,-math.pi/13))
- SetWeld(joint3,i,8, Vector3.new(0.5,-1,0), NV, Vector3.new(0.5,-1,0.03), Vector3.new(-0.2,-math.pi/10,math.pi/14))
- SetWeld(joint4,i,8, Vector3.new(-0.5,-1,0), NV, Vector3.new(-0.5,-1,0.03), Vector3.new(-0.2,math.pi/10,-math.pi/14))
- SetWeld(joint5,i,8, Vector3.new(0,1,0), NV, Vector3.new(0,1,0), Vector3.new(0.45,0,0))
- wait(0.025)
- end
- local counter = 0
- while Diving == true do
- counter = counter + 1
- bg.Parent = Torsoz
- local hitz, enz = RAY(Torsoz.Position, bv.velocity.unit*4.6)
- if hitz ~= nil and hitz.CanCollide == true then
- local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-4,0))
- if hitz2 ~= nil then
- Diving = "Rolling"
- Action = "DiveRolling"
- else
- Torsoz.CFrame = Torsoz.CFrame * CFrame.new(0,-0.3,0)
- Torsoz.Velocity = NV
- flow.Value = 0
- break
- end
- end
- if counter > 190 then
- break
- end
- wait(0.02)
- end
- bv.velocity = (dir*20) + Vector3.new(0,-0.5,0)
- local bgcf = bg.cframe
- local haslanded = false
- local count = 0
- while haslanded == false do
- bg.cframe = bgcf * CFrame.Angles(-0.3*count,0,0)
- local hitz, enz = RAY(Torsoz.Position, ((Torsoz.CFrame*CFrame.new(0,-1,0)).p - Torsoz.CFrame.p).unit*1.6)
- if hitz ~= nil and hitz.CanCollide == true then
- haslanded = true
- end
- local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-3.8,0))
- if hitz2 == nil then
- Torsoz.Velocity = NV
- break
- elseif haslanded == true then
- local bp = Instance.new("BodyPosition", Torsoz)
- bp.Name = "StaminaJumpFix"
- bp.maxForce = Vector3.new(0,1/0,0)
- bp.P = 7000
- bp.position = enz2 + Vector3.new(0,2.8,0)
- game:service("Debris"):AddItem(bp, 0.3)
- else
- bv.velocity = (dir*20) + Vector3.new(0,-(Torsoz.Position - enz2).magnitude*3,0)
- end
- count = count + 1
- if count <= 6 then
- local i = count
- local j1,j1a = GetWeld(joint)
- local j2,j2a = GetWeld(joint2)
- local j3,j3a = GetWeld(joint3)
- local j4,j4a = GetWeld(joint4)
- local j5,j5a = GetWeld(joint5)
- SetWeld(joint,i,6, j1,j1a, Vector3.new(1.35,0.5,-0.2), Vector3.new(math.pi/2.6,0,-math.pi/5.8))
- SetWeld(joint2,i,6, j2,j2a, Vector3.new(-1.35,0.5,-0.2), Vector3.new(math.pi/2.6,0,math.pi/5.8))
- SetWeld(joint3,i,6, j3,j3a, Vector3.new(0.51,0.4,-0.6), Vector3.new(-0.1,0,0.05))
- SetWeld(joint4,i,6, j4,j4a, Vector3.new(-0.51,0.4,-0.6), Vector3.new(-0.1,0,-0.05))
- SetWeld(joint5,i,6, j5,j5a, Vector3.new(0,1,0), Vector3.new(-0.4,0,0))
- elseif count >= 50 then
- break
- end
- wait(0.02)
- end
- Torsoz.Velocity = NV
- Stand()
- DivingCooldown = 9
- end
- function FindSurface(part, position)
- local obj = part.CFrame:pointToObjectSpace(position)
- local siz = part.Size/2
- for i,v in pairs(Enum.NormalId:GetEnumItems()) do
- local vec = Vector3.FromNormalId(v)
- local wvec = part.CFrame:vectorToWorldSpace(vec)
- local vz = (obj)/(siz*vec)
- if (math.abs(vz.X-1) < 0.01 or math.abs(vz.Y-1) < 0.01 or math.abs(vz.Z-1) < 0.01) then
- return wvec,vec
- end
- end
- if part.className == "WedgePart" then
- return part.CFrame:vectorToWorldSpace(Vector3.new(0,0.707,-0.707)), Vector3.new(0,0.707,-0.707)
- end
- end
- function HWallRun(part, pos, side)
- if (part.className == "Part" and part.Shape == Enum.PartType.Block) or part.className ~= "Part" then
- flow.Value = flow.Value + 9
- Standing = false
- HWallRunning = true
- Action = "HWallRunning"
- GravPoint = 10
- HWRLastPart = part
- local dir, dirc = FindSurface(part, pos)
- towall = -dir
- dir = (CFrame.new(NV, dir) * CFrame.Angles(0,side,0)).lookVector
- local bv = Instance.new("BodyVelocity", Torsoz)
- bv.Name = "StaminaBodyObject"
- bv.maxForce = Vector3.new(1/0,1/0,1/0)
- bv.P = 9000
- bv.velocity = (dir*(sprint-0.5)) + Vector3.new(0,GravPoint,0)
- local bg = Instance.new("BodyGyro", Torsoz)
- bg.Name = "StaminaBodyObject"
- bg.maxTorque = Vector3.new(1/0,1/0,1/0)
- bg.cframe = CFrame.new(Torsoz.Position+(towall*-2), Torsoz.Position) * CFrame.Angles(0,-side,-side/4.2)
- bg.D = 100
- local sid = Instance.new("Snap")
- local joint1 = Joint3
- if side == -math.pi/2 then
- SetWeld(joint1,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new(math.pi/1.3,0.1,math.pi/2.5))
- else
- sid = joint1
- SetWeld(joint1,1,1, NV,NV, Vector3.new(1.4,0.6,0), Vector3.new(-math.pi/12,0,math.pi/7))
- end
- local j1c0 = joint1.C0
- local joint2 = Joint4
- if side == math.pi/2 then
- SetWeld(joint2,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new(math.pi/1.3,-0.1,-math.pi/2.5))
- else
- sid = joint2
- SetWeld(joint2,1,1, NV,NV, Vector3.new(-1.4,0.6,0), Vector3.new(-math.pi/12,0,-math.pi/7))
- end
- local j2c0 = joint2.C0
- local joint3 = Joint1
- joint3.C1 = CFrame.new(0,1,0)
- if side == -math.pi/2 then
- SetWeld(joint3,1,1, NV,NV, Vector3.new(0.5,-0.38,-0.3), Vector3.new(0,math.pi/2,0.14))
- else
- SetWeld(joint3,1,1, NV,NV, Vector3.new(0.5,-0.8,-0.2), Vector3.new(0,math.pi/2,0.2))
- end
- local joint4 = Joint2
- joint4.C1 = CFrame.new(0,1,0)
- if side == -math.pi/2 then
- SetWeld(joint4,1,1, NV,NV, Vector3.new(-0.5,-0.8,-0.2), Vector3.new(0,0,0.2))
- else
- SetWeld(joint4,1,1, NV,NV, Vector3.new(-0.5,-0.38,-0.3), Vector3.new(0,0,0.14))
- end
- local joint5 = Joint5
- SetWeld(joint5,1,1,NV,NV,Vector3.new(0,0.9,0),Vector3.new(0,0,side/7))
- Torsoz.CFrame = CFrame.new(pos+(towall*-2), pos) * CFrame.Angles(0,-side,-side/2.2)
- bg.cframe = CFrame.new(pos+(towall*-2), pos) * CFrame.Angles(0,-side,-side/2.2)
- local aniangle = 0
- local aniplus = true
- local aniangle2 = 0
- local aniplus2 = true
- local prevpart = part
- HWRLastPart = part
- while HWallRunning == true do
- if aniangle > math.pi then
- aniplus = false
- elseif aniangle < -math.pi then
- aniplus = true
- end
- if aniplus == true then
- aniangle = aniangle + 0.95
- elseif aniplus == false then
- aniangle = aniangle - 0.95
- end
- if aniangle2 > math.pi then
- aniplus2 = false
- elseif aniangle2 < -math.pi then
- aniplus2 = true
- end
- if aniplus2 == true then
- aniangle2 = aniangle2 + 0.23
- elseif aniplus2 == false then
- aniangle2 = aniangle2 - 0.23
- end
- Hu.PlatformStand = true
- local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-3,0))
- local hitz2, enz2 = RAY(Torsoz.Position, towall*3.4)
- --- if player ends wall run on ground
- if hitz ~= nil and hitz.CanCollide == true then
- bg.cframe = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side,0)
- local offset = (bg.cframe.p.y+enz2.y) - bg.cframe.p.y
- Torsoz.CFrame = CFrame.new(Vector3.new(bg.cframe.p.x,offset,bg.cframe.p.z), enz2) * CFrame.Angles(0,-side,0)
- Torsoz.Velocity = NV
- break
- end
- ---- if new wall found --------
- if hitz2 ~= nil and hitz2.CanCollide == true then
- if hitz2 ~= prevpart then
- local direct = CFrame.new(Torsoz.Position, Torsoz.Position+dir) * CFrame.Angles(0,side,0)
- local hitz3, enz3 = RAY(Torsoz.Position, (direct * CFrame.Angles(0,-side/2.3,0)).lookVector*4)
- if hitz3 ~= nil then
- Torsoz.CFrame = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side*1.1,-side/2.2)
- bg.cframe = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side*1.1,-side/2.2)
- dir, dirc = FindSurface(hitz2, enz2)
- towall = -dir
- dir = (CFrame.new(NV, dir) * CFrame.Angles(0,side,0)).lookVector
- prevpart = hitz2
- HWRLastPart = hitz2
- else
- ---- if player fails to find new wall to run on
- Torsoz.CFrame = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
- bg.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
- Torsoz.Velocity = NV
- HWRCooldown = 5
- break
- end
- end
- --- continue to wall run
- Torsoz.CFrame = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side,-side/2.2)
- bg.cframe = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side,-side/2.2)
- else
- ---- if player ends wall run at end of wall
- Torsoz.CFrame = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
- bg.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
- Torsoz.Velocity = NV
- HWRCooldown = 5
- break
- end
- local hitz3, enz3 = RAY(Torsoz.Position, Torsoz.CFrame.lookVector*2)
- if hitz3 ~= nil and hitz3.CanCollide == true then
- Torsoz.CFrame = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
- bg.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
- Torsoz.Velocity = NV
- HWRCooldown = 5
- break
- end
- bv.Parent = Torsoz
- bv.velocity = (dir*(sprint-0.5)) + Vector3.new(0,GravPoint,0)
- bg.cframe = bg.cframe * CFrame.Angles(aniangle/80,aniangle/80,0)
- Torsoz.CFrame = Torsoz.CFrame * CFrame.Angles(aniangle/80,aniangle/80,0)
- local j3,j3a = GetWeld(joint3)
- local j4,j4a = GetWeld(joint4)
- SetWeld(joint3,1,1, j3,j3a, j3,Vector3.new(-0.2+(aniangle/4),0,0))
- SetWeld(joint4,1,1, j4,j4a, j4,Vector3.new(-0.2+(-aniangle/4),0,0))
- if side == math.pi/2 then
- local j1,j1a = GetWeld(joint1)
- SetWeld(joint1,1,1, j1,j1a, j1, Vector3.new(0,0,0.8+(aniangle2/14)))
- else
- local j2,j2a = GetWeld(joint2)
- SetWeld(joint2,1,1, j2,j2a, j2, Vector3.new(0,0,-0.8-(aniangle2/14)))
- end
- wait(0.025)
- if GravPoint < -100 then
- bg.cframe = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side,0)
- local offset = math.abs((bg.cframe.p.y+enz2.y) - bg.cframe.p.y)
- Torsoz.CFrame = CFrame.new(Vector3.new(bg.cframe.p.x,offset,bg.cframe.p.z), enz2) * CFrame.Angles(0,-side,0)
- break
- end
- end
- if HWallRunning == "Jumping" then
- HWRCooldown = 6
- joint1.C1 = CFrame.new(0,0.5,0)
- joint2.C1 = CFrame.new(0,0.5,0)
- if side == -math.pi/2 then
- joint2.C0 = CFrame.new(-1.35,0.5,0) * CFrame.Angles(0,side/2.4,-math.pi/3)
- else
- joint2.C0 = CFrame.new(-1.35,0.5,0) * CFrame.Angles(0,side/2.4,-math.pi/4)
- end
- joint3.C1 = CFrame.new(0,1,0)
- if side == -math.pi/2 then
- joint3.C0 = CFrame.new(0.5,-0.8,0) * CFrame.Angles(0,math.pi+(side/2.4),-math.pi/4)
- else
- joint3.C0 = CFrame.new(0.5,-0.8,0) * CFrame.Angles(0,(side/2.4),math.pi/4)
- end
- joint4.MaxVelocity = 10
- joint4.DesiredAngle = 0
- joint4.C1 = CFrame.new(0,1,0)
- if side == -math.pi/2 then
- joint4.C0 = CFrame.new(-0.5,-0.8,0) * CFrame.Angles(0,math.pi+(side/2.4),math.pi/4)
- else
- joint4.C0 = CFrame.new(-0.5,-0.8,0) * CFrame.Angles(0,(side/2.4),-math.pi/4)
- end
- local joint5 = Joint5
- joint5.C1 = CFrame.new(0,-0.5,0) * CFrame.Angles(0,side/2.4,0)
- joint5.C0 = CFrame.new(0,1,0)
- local j1,j1a = GetWeld(joint1)
- local j2,j2a = GetWeld(joint2)
- local j3,j3a = GetWeld(joint3)
- local j4,j4a = GetWeld(joint4)
- local j5,j5a = GetWeld(joint5)
- GravPoint = 26
- local collidecount = 0
- local bgangle = side/2
- local count = 1
- local dir2 = (CFrame.new(NV, dir) * CFrame.Angles(0,-side/2.4,0)).lookVector
- HWRDir = dir2
- bv.velocity = (dir2*(sprint+5)) + Vector3.new(0,GravPoint,0)
- while HWallRunning == "Jumping" do
- local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-4,0))
- local hitz2, enz2 = RAY(Torsoz.Position, dir2*1.4)
- if hitz ~= nil and hitz.CanCollide == true then
- local offset = math.abs(enz.y - Torsoz.CFrame.p.y)
- Torsoz.CFrame = CFrame.new(enz+Vector3.new(0,2.9,0), enz+Vector3.new(0,2.9,0)+dir2)
- Torsoz.Velocity = NV
- break
- end
- if hitz2 ~= nil and hitz2.CanCollide == true then
- collidecount = collidecount + 1
- if collidecount == 4 then
- Torsoz.CFrame = CFrame.new(Torsoz.Position, Torsoz.Position+dir2) * CFrame.new(0,0,0.4)
- Torsoz.Velocity = Vector3.new(0,Torsoz.Velocity.y,0)
- HWRCooldown = 5
- VWRCooldown = 5
- wait(0.02)
- break
- end
- end
- if side/2 > 0 then
- if bgangle > 0.2 then
- bgangle = bgangle - 0.055
- end
- else
- if bgangle < -0.2 then
- bgangle = bgangle + 0.055
- end
- end
- if count <= 5 then
- if side == -math.pi/2 then
- SetWeld(joint1,count,5, j1,j1a, Vector3.new(1.35,0.5,0), Vector3.new(0,side/2.4,math.pi/4))
- SetWeld(joint2,count,5, j2,j2a, Vector3.new(-1.35,0.5,0), Vector3.new(0,side/2.4,-math.pi/3))
- SetWeld(joint3,count,5, j3,j3a, Vector3.new(0.5,-0.8,0), Vector3.new(0,-side/1.7,0))
- joint3.C0 = joint3.C0 * CFrame.Angles((-math.pi/4)/5*count,0,0)
- SetWeld(joint4,count,5, j4,j4a, Vector3.new(-0.5,-0.8,0), Vector3.new(0,-side/1.7,0))
- joint4.C0 = joint4.C0 * CFrame.Angles((math.pi/4)/5*count,0,0)
- else
- SetWeld(joint1,count,5, j1,j1a, Vector3.new(1.35,0.5,0), Vector3.new(0,side/2.4,math.pi/3))
- SetWeld(joint2,count,5, j2,j2a, Vector3.new(-1.35,0.5,0), Vector3.new(0,side/2.4,-math.pi/4))
- SetWeld(joint3,count,5, j3,j3a, Vector3.new(0.5,-0.8,0), Vector3.new(0,-side/1.7,0))
- joint3.C0 = joint3.C0 * CFrame.Angles((math.pi/4)/5*count,0,0)
- SetWeld(joint4,count,5, j4,j4a, Vector3.new(-0.5,-0.8,0), Vector3.new(0,-side/1.7,0))
- joint4.C0 = joint4.C0 * CFrame.Angles((-math.pi/4)/5*count,0,0)
- end
- count = count + 1
- end
- bg.Parent = Torsoz
- bg.cframe = CFrame.new(NV, dir) * CFrame.Angles(0,side/15,-bgangle)
- bv.velocity = (dir2*(sprint+5)) + Vector3.new(0,GravPoint,0)
- if collidecount ~= 0 then
- bv.velocity = Vector3.new(0,bv.velocity.y,0)
- end
- if GravPoint < -120 then
- break
- end
- wait(0.025)
- end
- end
- Hu.PlatformStand = false
- bv:remove()
- HWRGravDrop = false
- Stand()
- HWallRunning = false
- end
- end
- function VWR(part, pos)
- if (part.className == "Part" and part.Shape == Enum.PartType.Block) or part.className ~= "Part" then
- print("VWR Activated")
- flow.Value = flow.Value + 9
- Standing = false
- VWallRunning = true
- Action = "VWallRunning"
- GravPoint = 0
- local percent = 1
- VWRLastPart = part
- local dir, dirc = FindSurface(part, pos)
- towall = -dir
- dir = (CFrame.new(NV, -dir) * CFrame.Angles(math.pi/2,0,0)).lookVector
- --[[
- local p = P:Clone()
- p.Parent = char
- p.Size = Vector3.new(2,2,2)
- p.BrickColor = BrickColor.new("Lime green")
- p.CanCollide = false
- p.CFrame = part.CFrame * CFrame.new(dirc*5)
- p.Transparency = 0.3
- ]]
- local bv = Instance.new("BodyVelocity", Torsoz)
- bv.Name = "StaminaBodyObject"
- bv.maxForce = Vector3.new(1/0,1/0,1/0)
- bv.P = 9000
- bv.velocity = (dir*(sprint-1))*percent
- local bg = Instance.new("BodyGyro", Torsoz)
- bg.Name = "StaminaBodyObject"
- bg.maxTorque = Vector3.new(1/0,1/0,1/0)
- bg.D = 100
- local posi = pos + (-towall*1.8)
- bg.cframe = CFrame.new(posi, posi+towall) * CFrame.Angles((math.pi/5),0,0)
- Torsoz.CFrame = CFrame.new(posi, posi+towall) * CFrame.Angles((math.pi/5),0,0)
- local joint1 = Joint3
- SetWeld(joint1,1,1, NV,NV, Vector3.new(1.4,0.45,-0.1), Vector3.new(-math.pi/3.2,0,math.pi/8))
- local joint2 = Joint4
- SetWeld(joint2,1,1, NV,NV, Vector3.new(-1.4,0.45,-0.1), Vector3.new(-math.pi/3.2,0,-math.pi/8))
- local joint3 = Joint1
- SetWeld(joint3,1,1, NV,NV, Vector3.new(0.48,-0.6,-0.1), Vector3.new(0,math.pi/2,0))
- joint3.C1 = CFrame.new(0,0.7,0.2) * CFrame.Angles(0,math.pi/2,0)
- local joint4 = Joint2
- SetWeld(joint4,1,1, NV,NV, Vector3.new(-0.48,-0.6,-0.1), Vector3.new(0,math.pi/2,0))
- joint4.C1 = CFrame.new(0,0.7,0.2) * CFrame.Angles(0,math.pi/2,0)
- local joint5 = Joint5
- SetWeld(joint5,1,1, NV,NV, Vector3.new(0,1,0), Vector3.new(math.pi/20,0,0))
- local aniangle = 0
- local aniplus = true
- while VWallRunning == true do
- local hitz, enz = RAY(Torsoz.Position, towall*2.1)
- local hitz2, enz2 = RAY(Torsoz.Position, (CFrame.new(NV,towall)*CFrame.Angles(math.pi/2,0,0)).lookVector*2.4)
- if aniangle > math.pi then
- aniplus = false
- elseif aniangle < -math.pi then
- aniplus = true
- end
- if aniplus == true then
- aniangle = aniangle + (1.3*(percent+0.2))
- elseif aniplus == false then
- aniangle = aniangle - (1.3*(percent+0.2))
- end
- bv.velocity = (dir*(sprint-1))*percent
- if VWRLeft == true then
- bv.velocity = bv.velocity + ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * (11*percent+5))
- end
- if VWRRight == true then
- bv.velocity = bv.velocity - ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * (11*percent+5))
- end
- bg.cframe = CFrame.new(posi, posi+towall) * CFrame.Angles((math.pi/5),0,0) * CFrame.Angles(0,aniangle/60,0)
- SetWeld(joint1,1,1, NV,NV, Vector3.new(1.4,0.45,-0.1), Vector3.new(-math.pi/3.2,aniangle/52,(math.pi/8)+(aniangle/30)))
- SetWeld(joint2,1,1, NV,NV, Vector3.new(-1.4,0.45,-0.1), Vector3.new(-math.pi/3.2,aniangle/52,(-math.pi/8)+(-aniangle/30)))
- SetWeld(joint3,1,1, NV,NV, Vector3.new(0.51,-0.75,-(aniangle/30)), Vector3.new(0,math.pi/2,(aniangle/8)-0.3))
- SetWeld(joint4,1,1, NV,NV, Vector3.new(-0.51,-0.75,(aniangle/30)), Vector3.new(0,math.pi/2,(-aniangle/8)-0.3))
- if hitz == nil then
- local lv = Torsoz.Position + (Torsoz.CFrame.lookVector*100)
- Torsoz.CFrame = CFrame.new(Torsoz.Position, Vector3.new(lv.x,Torsoz.Position.y,lv.z))
- break
- end
- if hitz2 ~= nil then
- percent = 0
- VWallRunning = "Falling"
- Action = "VWRFalling"
- GravPoint = -7
- break
- end
- wait(0.02)
- percent = percent - 0.028
- if percent <= 0.15 then
- VWallRunning = "Falling"
- Action = "VWRFalling"
- end
- end
- -------------------------- Falling from VWR ------------------------------
- if VWallRunning == "Falling" then
- GravPoint = GravPoint - 1
- local dirpos = (-towall *5) + Vector3.new(0,GravPoint,0)
- bv.velocity = CFrame.new(NV, dirpos).lookVector * dirpos.magnitude
- local j1,j1a = GetWeld(joint1)
- local j2,j2a = GetWeld(joint2)
- local j3,j3a = GetWeld(joint3)
- local j4,j4a = GetWeld(joint4)
- local j5,j5a = GetWeld(joint5)
- local counter = 0
- while VWallRunning == "Falling" do
- counter = counter + 1
- local hitz, enz = RAY(H.Position, Vector3.new(0,-2.4,0))
- dirpos = (-towall *5) + Vector3.new(0,GravPoint,0)
- bv.velocity = CFrame.new(NV, dirpos).lookVector * dirpos.magnitude
- if VWRLeft == true then
- bv.velocity = bv.velocity + ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * 9)
- end
- if VWRRight == true then
- bv.velocity = bv.velocity - ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * 9)
- end
- bg.cframe = CFrame.new(NV, (-towall*30) + Vector3.new(0,GravPoint,0)) * CFrame.Angles(-math.pi/2.55,math.pi,0)
- if counter <= 35 then
- SetWeld(joint1,counter,35, j1,j1a, Vector3.new(1.4,0.45,-0.1), Vector3.new(math.pi/9,0,math.pi/9))
- SetWeld(joint2,counter,35, j2,j2a, Vector3.new(-1.4,0.45,-0.1), Vector3.new(math.pi/9,0,-math.pi/9))
- SetWeld(joint3,counter,35, j3,j3a, Vector3.new(0.5,-0.75,0), Vector3.new(0,math.pi/2,math.pi/9))
- joint3.C1 = CFrame.new(0,0.7 + (0.3/35*counter),0.2 - (0.2/35*counter)) * CFrame.Angles(0,math.pi/2,0)
- SetWeld(joint4,counter,35, j4,j4a, Vector3.new(-0.5,-0.75,0), Vector3.new(0,math.pi/2,math.pi/9))
- joint4.C1 = CFrame.new(0,0.7 + (0.3/35*counter),0.2 - (0.2/35*counter)) * CFrame.Angles(0,math.pi/2,0)
- SetWeld(joint5,counter,35, j5,j5a, Vector3.new(0,1,0), Vector3.new(-math.pi/6,0,0))
- end
- if hitz ~= nil then
- bv:remove()
- Torsoz.CFrame = CFrame.new(enz+Vector3.new(0,2,0), (enz+Vector3.new(0,2,0)) + ((-towall*25) + Vector3.new(0,GravPoint,0))) * CFrame.Angles(-math.pi/2.55,math.pi,0)
- Torsoz.Velocity = NV
- Torsoz.RotVelocity = NV
- local bp = Instance.new("BodyPosition", Torsoz)
- bp.maxForce = Vector3.new(1/0,1/0,1/0)
- bp.position = Torsoz.CFrame.p
- game:service("Debris"):AddItem(bp, 0.16)
- flow.Value = 0
- break
- end
- if GravPoint > - 180 then
- GravPoint = GravPoint - 1.9
- end
- if counter > 200 then
- break
- end
- wait(0.02)
- end
- local bp = Instance.new("BodyPosition")
- local counter2 = counter
- local bgangleplus = 0
- local j1,j1a = GetWeld(joint1)
- local j2,j2a = GetWeld(joint2)
- local j3,j3a = GetWeld(joint3)
- local j4,j4a = GetWeld(joint4)
- local j5,j5a = GetWeld(joint5)
- local landingpos
- while VWallRunning == "BackflipFromFall" do
- counter2 = counter2 + 1
- local hitz, enz = RAY(H.Position+Vector3.new(0,2,0), Vector3.new(0,-4.4,0))
- if counter2 - counter < 13 then
- bgangleplus = bgangleplus - ((math.pi*1.1)/13)
- end
- if counter2 - counter <= 13 then
- SetWeld(joint1,counter2-counter,13, j1,j1a, Vector3.new(1.4,0.5,0.1), Vector3.new(math.pi/2,0.1,math.pi/2))
- SetWeld(joint2,counter2-counter,13, j2,j2a, Vector3.new(-1.4,0.5,0.1), Vector3.new(math.pi/2,-0.1,-math.pi/2))
- SetWeld(joint3,counter2-counter,13, j3,j3a, Vector3.new(0.52,-0.3,-0.65), Vector3.new(0,math.pi/2,0))
- SetWeld(joint4,counter2-counter,13, j4,j4a, Vector3.new(-0.51,-0.9,-0.05), Vector3.new(0,math.pi/2,0))
- SetWeld(joint5,counter2-counter,13, j5,j5a, Vector3.new(0,0.9,0), Vector3.new(-math.pi/7,0,0))
- end
- dirpos = (-towall *5) + Vector3.new(0,GravPoint,0)
- --bv.velocity = Vector3.new(0,-2,0)
- bv.velocity = CFrame.new(NV, dirpos).lookVector * dirpos.magnitude
- if VWRLeft == true then
- bv.velocity = bv.velocity + ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * 9)
- end
- if VWRRight == true then
- bv.velocity = bv.velocity - ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * 9)
- end
- bg.cframe = CFrame.new(NV, (-towall*30) + Vector3.new(0,GravPoint,0)) * CFrame.Angles((-math.pi/2.4) + bgangleplus,math.pi,0)
- if hitz ~= nil then
- bv:remove()
- landingpos = enz - (towall*1.3)
- if counter2 - counter > 8 then
- bp = Instance.new("BodyPosition", Torsoz)
- bp.maxForce = Vector3.new(1/0,1/0,1/0)
- bp.position = enz+Vector3.new(0,2.4,0) + (-towall*1)
- VWallRunning = "LandingFall"
- else
- Torsoz.CFrame = bg.cframe + (enz+Vector3.new(0,2.3,0))
- Torsoz.Velocity = NV
- Torsoz.RotVelocity = NV
- local bp = Instance.new("BodyPosition", Torsoz)
- bp.maxForce = Vector3.new(1/0,1/0,1/0)
- bp.position = Torsoz.CFrame.p
- game:service("Debris"):AddItem(bp, 0.14)
- flow.Value = 0
- end
- break
- end
- if GravPoint > - 180 then
- GravPoint = GravPoint - 1.9
- end
- if counter2 > 200 then
- break
- end
- wait(0.02)
- end
- if VWallRunning == "LandingFall" then
- print("Landing")
- joint3.C1 = CFrame.new(0,1,0) * CFrame.Angles(0,math.pi/2,0)
- joint4.C1 = CFrame.new(0,1,0) * CFrame.Angles(0,math.pi/2,0)
- local j1,j1a = GetWeld(joint1)
- local j2,j2a = GetWeld(joint2)
- local j3,j3a = GetWeld(joint3)
- local j4,j4a = GetWeld(joint4)
- local j5,j5a = GetWeld(joint5)
- local a
- local mesh
- if GravPoint < -70 then
- a = P:Clone()
- a.Parent = Torsoz
- a.Name = "AirLandingEffect"
- a.BrickColor = BrickColor.new("Medium stone grey")
- a.Transparency = 0.3
- a.CFrame = CFrame.new(landingpos+Vector3.new(0,0.4,0))
- mesh = Instance.new("SpecialMesh", a)
- mesh.MeshId = "http://www.roblox.com/asset/?id=20329976"
- mesh.Scale = Vector3.new(0,0,0)
- end
- local bgcf = CFrame.new(NV, Vector3.new(towall.x,0,towall.z))
- bg.cframe = bgcf * CFrame.Angles(-math.pi/7,0,0)
- local bgval = math.pi/7/2
- for i = 1, 6 do
- Hu.PlatformStand = true
- SetWeld(joint1,i,6, j1,j1a, Vector3.new(1.2,0.5,0.2), Vector3.new(math.pi/2,0.5,math.pi/1.2))
- SetWeld(joint2,i,6, j2,j2a, Vector3.new(-1.2,0.5,0.2), Vector3.new(math.pi/2,-0.5,-math.pi/1.2))
- SetWeld(joint3,i,6, j3,j3a, Vector3.new(0.51,-0.3,-0.8), Vector3.new(0,math.pi/2,-math.pi/7))
- SetWeld(joint4,i,6, j4,j4a, Vector3.new(-0.51,-0.8,-0.7), Vector3.new(0,math.pi/2,-math.pi/3))
- SetWeld(joint5,i,6, j5,j5a, Vector3.new(0,0.85,0), Vector3.new(-math.pi/8,0,0))
- bp.position = bp.position + Vector3.new(0,-0.07,0)
- bg.cframe = bgcf * CFrame.Angles((-bgval*2) + (bgval/6*i),0,0)
- Torsoz.CFrame = bg.cframe + bp.position
- if a ~= nil then
- mesh.Scale = mesh.Scale + Vector3.new(1.3,0.35,1.3)
- a.Transparency = 0.3 + (0.7/6*i)
- end
- wait(0.02)
- end
- if a ~= nil then
- a:remove()
- end
- local j1,j1a = GetWeld(joint1)
- local j2,j2a = GetWeld(joint2)
- local j3,j3a = GetWeld(joint3)
- local j4,j4a = GetWeld(joint4)
- local j5,j5a = GetWeld(joint5)
- for i = 1, 6 do
- Hu.PlatformStand = true
- SetWeld(joint1,i,6, j1,j1a, Vector3.new(1.5,0.5,0), Vector3.new(0,0,0))
- SetWeld(joint2,i,6, j2,j2a, Vector3.new(-1.5,0.5,0), Vector3.new(0,0,0))
- SetWeld(joint3,i,6, j3,j3a, Vector3.new(0.5,-1,0), Vector3.new(0,math.pi/2,0))
- SetWeld(joint4,i,6, j4,j4a, Vector3.new(-0.5,-1,0), Vector3.new(0,math.pi/2,0))
- SetWeld(joint5,i,6, j5,j5a, Vector3.new(0,1,0), Vector3.new(0,0,0))
- bp.position = bp.position + Vector3.new(0,0.1,0)
- bg.cframe = bgcf * CFrame.Angles(-bgval + (bgval/6*i),0,0)
- Torsoz.CFrame = bg.cframe + bp.position
- wait(0.02)
- end
- bp:remove()
- end
- end
- bv:remove()
- bg:remove()
- VWallRunning = false
- Stand()
- end
- end
- function Slide(pos)
- flow.Value = flow.Value + 6
- Action = "Sliding"
- Sliding = true
- GravPoint = Torsoz.Velocity.y
- local spd = Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude + 10
- local dir = Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).unit
- local bv = Instance.new("BodyVelocity", Torsoz)
- bv.maxForce = Vector3.new(1/0,1/0,1/0)
- bv.velocity = dir*spd
- local bg = Instance.new("BodyGyro", Torsoz)
- bg.maxTorque = Vector3.new(1/0,1/0,1/0)
- bg.cframe = CFrame.new(NV, dir) * CFrame.Angles(math.pi/2.2,0.24,0)
- local joint1 = Joint1
- local joint2 = Joint2
- local joint3 = Joint3
- local joint4 = Joint4
- local joint5 = Joint5
- local j1,j1a = GetWeld(joint1)
- local j2,j2a = GetWeld(joint2)
- SetWeld(joint1,1,1, NV,NV, Vector3.new(j1.x,j1.y,j1.z), Vector3.new(j1a.x,math.pi/2,j1a.z))
- joint1.C1 = CFrame.new(0,1,0) * CFrame.Angles(0,math.pi/2,0)
- SetWeld(joint2,1,1, NV,NV, Vector3.new(j2.x,j2.y,j2.z), Vector3.new(j2a.x,math.pi/2,j2a.z))
- joint2.C1 = CFrame.new(0,1,0) * CFrame.Angles(0,math.pi/2,0)
- local j1,j1a = GetWeld(joint1)
- local j2,j2a = GetWeld(joint2)
- local j3,j3a = GetWeld(joint3)
- local j4,j4a = GetWeld(joint4)
- local j5,j5a = GetWeld(joint5)
- local count = 0
- local lastpos
- while Sliding == true do
- count = count + 1
- Hu.PlatformStand = true
- local hitz1, enz1 = RAY(Torsoz.Position+Vector3.new(0,0.03,0), dir *2.5)
- local hitz2, enz2 = RAY(Torsoz.Position-Vector3.new(0,0.2,0), dir *2.5)
- local ghitz, genz = RAY(Torsoz.Position, Vector3.new(0,-2.6,0))
- bv.velocity = dir*spd + Vector3.new(0,GravPoint,0)
- if count <= 5 then
- SetWeld(joint1,count,5, j1,j1a, Vector3.new(0.5,-0.8,-0.15), Vector3.new(0,(math.pi/2)+0.1,-0.4))
- SetWeld(joint2,count,5, j2,j2a, Vector3.new(-0.5,-1,0), Vector3.new(0,(math.pi/2)-0.4,0))
- SetWeld(joint3,count,5, j3,j3a, Vector3.new(1.5,0.5,0), Vector3.new(-0.7,-0.24,math.pi/5))
- SetWeld(joint4,count,5, j4,j4a, Vector3.new(-1.5,0.5,0), Vector3.new(-0.1,0,-math.pi/1.5))
- SetWeld(joint5,count,5, j5,j5a, Vector3.new(0,1,0), Vector3.new(-0.5,-0.2,0))
- end
- if (hitz1 ~= nil and hitz1.CanCollide == true) or (hitz2 ~= nil and hitz2.CanCollide == true) then
- bv:remove()
- bg:remove()
- Sliding = "HitObject"
- end
- if ghitz ~= nil then
- GravPoint = 0
- Torsoz.CFrame = CFrame.new(genz, genz+dir) * CFrame.Angles(math.pi/2.2,0.24,0) + Vector3.new(0,0.7,0)
- spd = spd - 0.95
- else
- if GravPoint > -180 then
- GravPoint = GravPoint - 5.6
- end
- spd = spd - 0.36
- end
- if spd < 7 then
- Sliding = false
- end
- wait(0.02)
- end
- if Sliding == false then
- local j1,j1a = GetWeld(joint1)
- local j2,j2a = GetWeld(joint2)
- local j3,j3a = GetWeld(joint3)
- local j4,j4a = GetWeld(joint4)
- local j5,j5a = GetWeld(joint5)
- for i = 1, 4 do
- SetWeld(joint1,i,4, j1,j1a, Vector3.new(0.5,-1,0), Vector3.new(0,math.pi/2,0))
- SetWeld(joint2,i,4, j2,j2a, Vector3.new(-0.5,-1,0), Vector3.new(0,math.pi/2,0))
- SetWeld(joint3,i,4, j3,j3a, Vector3.new(1.5,0.5,0), NV)
- SetWeld(joint4,i,4, j4,j4a, Vector3.new(-1.5,0.5,0), NV)
- SetWeld(joint5,i,4, j5,j5a, Vector3.new(0,1,0), NV)
- local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-2.6,0))
- bg.cframe = CFrame.new(NV, dir) * CFrame.Angles((math.pi/2.2) - ((math.pi/2.2)/4*i),0.24 - (0.24/4*i),0)
- bv.velocity = dir*spd + Vector3.new(0,GravPoint,0)
- if hitz ~= nil then
- GravPoint = 0
- Torsoz.CFrame = CFrame.new(enz, enz+dir) * CFrame.Angles((math.pi/2.2) - ((math.pi/2.2)/4*i),0.24 - (0.24/4*i),0) + Vector3.new(0,0.7+(1.8/4*i),0)
- spd = spd - 0.95
- else
- if GravPoint > -180 then
- GravPoint = GravPoint - 5.6
- end
- spd = spd - 0.36
- end
- wait(0.02)
- end
- local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-2.6,0))
- Torsoz.CFrame = CFrame.new(enz, enz+dir) + Vector3.new(0,3,0)
- end
- bv:remove()
- bg:remove()
- SlideCooldown = 10
- Stand()
- end
- function KD(key)
- if pause.Value == false then
- if key == string.char(32) then
- Space = true
- local ghitz, genz = RAY(Torsoz.Position, Vector3.new(0,-3.7,0))
- local hitz, enz = RAY(Torsoz.Position+Vector3.new(0,1.1,0), Torsoz.CFrame.lookVector*2.3)
- local righthitz, rightenz
- local lefthitz, leftenz
- if HWallRunning == false then
- righthitz, rightenz = RAY(Torsoz.Position, ((Torsoz.CFrame * CFrame.new(1.5,0,-0.2)).p - Torsoz.CFrame.p).unit*3.9)
- lefthitz, leftenz = RAY(Torsoz.Position, ((Torsoz.CFrame * CFrame.new(-1.5,0,-0.2)).p - Torsoz.CFrame.p).unit*3.9)
- elseif HWallRunning == "Jumping" then
- righthitz, rightenz = RAY(Torsoz.Position, ((CFrame.new(Torsoz.Position, Torsoz.Position + HWRDir) * CFrame.new(1.5,0,-0.2)).p - Torsoz.Position).unit*3.9)
- lefthitz, leftenz = RAY(Torsoz.Position, ((CFrame.new(Torsoz.Position, Torsoz.Position + HWRDir) * CFrame.new(-1.5,0,-0.2)).p - Torsoz.Position).unit*3.9)
- end
- if Action == "Standing" and Shift == true and (hitz == nil or hitz.CanCollide == false) and (righthitz == nil or righthitz.CanCollide == false) and (lefthitz == nil or lefthitz.CanCollide == false) and (ghitz == nil or ghitz.CanCollide == false) and (Torsoz.Velocity.y > 6 and Torsoz.Velocity.y < 50) and DivingCooldown <= 0 then
- if stamina >= 10 then
- --if Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude > 12 then
- Dive()
- --end
- end
- end
- if hitz == nil and VWallRunning == "Falling" then
- VWallRunning = "BackflipFromFall"
- end
- if Shift == true and Torsoz.Velocity.y > -50 and Diving == false and DivingCooldown <= 0 then
- local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-3.5,0))
- if hitz ~= nil then
- if Action == "Standing" and VWRCooldown == 0 then
- if hitz2 == nil or hitz2.CanCollide == false then
- VWR(hitz, enz)
- end
- end
- end
- if (HWallRunning == false or (HWallRunning == "Jumping" and (HWRLastPart ~= righthitz or HWRLastPart ~= lefthitz))) and HWRCooldown == 0 and VWallRunning == false then
- if (hitz == nil or HWallRunning == "Jumping") and ((righthitz ~= nil and righthitz.Parent:findFirstChild("Humanoid") == nil and righthitz.Parent.className ~= "Hat") or (lefthitz ~= nil and lefthitz.Parent:findFirstChild("Humanoid") == nil and lefthitz.Parent.className ~= "Hat")) then
- if hitz2 == nil or hitz2.CanCollide == false then
- local right = (rightenz - Torsoz.Position).magnitude
- local left = (leftenz - Torsoz.Position).magnitude
- if right < left then
- if HWallRunning == "Jumping" and HWRLastPart ~= righthitz then
- HWallRunning = false
- while Standing == false do
- wait(0.01)
- end
- print("2nd Right Activated!")
- HWallRun(righthitz, rightenz, -math.pi/2)
- else
- if hitz == nil then
- print("Right Activated")
- HWallRun(righthitz, rightenz, -math.pi/2)
- end
- end
- elseif left < right then
- if HWallRunning == "Jumping" and HWRLastPart ~= lefthitz then
- HWallRunning = false
- while Standing == false do
- wait(0.01)
- end
- print("2nd Left Activated!")
- HWallRun(lefthitz, leftenz, math.pi/2)
- else
- if hitz == nil then
- print("Left Activated")
- HWallRun(lefthitz, leftenz, math.pi/2)
- end
- end
- end
- end
- end
- end
- end
- if HWallRunning == true then
- HWallRunning = "Jumping"
- Action = "HWRJumping"
- end
- elseif key == string.char(48) then
- Shift = true
- elseif key == string.char(50) then
- if Action == "Standing" then
- Sit()
- elseif HWallRunning == true then
- HWRGravDrop = true
- end
- elseif key == string.char(52) then
- if Shift == true and Action == "Standing" and SlideCooldown == 0 and Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude > 15 and Torsoz.Velocity.y > -40 then
- print("Sliding")
- Slide()
- end
- elseif key == "a" then
- VWRLeft = true
- elseif key == "d" then
- VWRRight = true
- end
- end
- end
- function KU(key)
- if key == string.char(32) then
- Space = false
- elseif key == string.char(48) then
- Shift = false
- elseif key == string.char(50) then
- if Action == "Sitting" then
- Stand()
- end
- elseif key == string.char(52) then
- Sliding = false
- elseif key == "a" then
- VWRLeft = false
- elseif key == "d" then
- VWRRight = false
- end
- end
- mouse.KeyDown:connect(function(key) KD(key) end)
- mouse.KeyUp:connect(function(key) KU(key) end)
- Joint1 = Instance.new("Snap", Torsoz)
- GetWeld(Joint1)
- Joint2 = Instance.new("Snap", Torsoz)
- GetWeld(Joint2)
- Joint3 = Instance.new("Snap", Torsoz)
- GetWeld(Joint3)
- Joint4 = Instance.new("Snap", Torsoz)
- GetWeld(Joint4)
- Joint5 = Instance.new("Snap", Torsoz)
- GetWeld(Joint5)
- Stand()
- local animatebg = Instance.new("BodyGyro")
- animatebg.D = 100
- local GravAction = "Idle"
- local PrevGravAction = GravAction
- local prevrapos = (RA.CFrame * CFrame.new(0,-1,0)).p
- local prevlapos = (LA.CFrame * CFrame.new(0,-1,0)).p
- local hue = 0
- local recyclecount = 0
- local tickoffset = tick()
- local fadetab = {}
- local fadetab2 = {}
- local animatebgcount = 0
- for i = 1, 13 do
- local p = P:Clone()
- p.Name = "Part"..i
- local mesh = Instance.new("SpecialMesh", p)
- mesh.MeshId = "http://www.roblox.com/Asset/?id=9856898"
- mesh.TextureId = "http://www.roblox.com/Asset/?id=48358980"
- table.insert(fadetab, {p, mesh})
- end
- for i = 1, 13 do
- local p = P:Clone()
- p.Name = "Part"..i
- local mesh = Instance.new("SpecialMesh", p)
- mesh.MeshId = "http://www.roblox.com/Asset/?id=9856898"
- mesh.TextureId = "http://www.roblox.com/Asset/?id=48358980"
- table.insert(fadetab2, {p, mesh})
- end
- game:service("RunService").Stepped:connect(function()
- GravAction = "Idle"
- hue = hue + 3
- hue = hue % 360
- ------------- anim angle changing --------
- if animangle > math.pi then
- animplus = false
- elseif animangle < -math.pi then
- animplus = true
- end
- if animplus == true then
- animangle = animangle + animspeed
- elseif animplus == false then
- animangle = animangle - animspeed
- end
- local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-3.9,0))
- if Shift == true then
- Hu.WalkSpeed = sprint
- else
- Hu.WalkSpeed = 16
- end
- if (FOV >= 70 and FOV < 74) and Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude > 25 then
- FOV = FOV + 1
- elseif (FOV <= 74 and FOV > 70) and Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude < 20 then
- FOV = FOV - 1
- end
- if pause.Value == true then
- Hu.WalkSpeed = 0
- end
- if Sitting == true then
- local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-2.2,0))
- Hu.PlatformStand = true
- if hitz2 == nil then
- Stand()
- end
- end
- if Diving == true then
- Hu.PlatformStand = true
- DivingBV.velocity = Vector3.new(DivingDir.x*(sprint+2),GravPoint,DivingDir.z*(sprint+2))
- DivingBG.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+DivingBV.velocity) * CFrame.Angles(-math.pi/2,0,0)
- if GravPoint > -180 then
- GravPoint = GravPoint - 2
- end
- end
- if DivingCooldown > 0 then
- DivingCooldown = DivingCooldown - 1
- end
- if HWallRunning == true then
- if HWRGravDrop == false then
- GravPoint = GravPoint - 0.4
- else
- GravPoint = GravPoint - 2
- end
- elseif HWallRunning == "Jumping" then
- GravPoint = GravPoint - 1.7
- end
- ----------------------------- stamina ----------------------------------------
- if Vector3.new(Torsoz.Velocity.x, 0, Torsoz.Velocity.z).magnitude > 18 and Action == "Standing" and Shift == true then
- if stamina > 0 then
- stamina = stamina - 0.5
- if stamina < 0 then
- Shift = false
- stamina = 0
- end
- else
- Shift = false
- stamina = 0
- end
- if Action == "Standing" then
- animspeed = 0.85
- SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.5,-1,0), Vector3.new(-animangle/4.85,0,0))
- SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.5,-1,0), Vector3.new(animangle/4.85,0,0))
- SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new(animangle/3.5,0,0))
- SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new(-animangle/3.5,0,0))
- end
- elseif Vector3.new(Torsoz.Velocity.x, 0, Torsoz.Velocity.z).magnitude > 12 and Action ~= "Sliding" then
- if stamina < maxstamina then
- stamina = stamina + 0.5
- if stamina > maxstamina then
- stamina = maxstamina
- end
- else
- stamina = maxstamina
- end
- if Action == "Standing" then
- animspeed = 0.65
- SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.5,-1,0), Vector3.new(-animangle/7,0,0))
- SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.5,-1,0), Vector3.new(animangle/7,0,0))
- SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new(animangle/5,0,0))
- SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new(-animangle/5,0,0))
- end
- elseif Vector3.new(Torsoz.Velocity.x, 0, Torsoz.Velocity.z).magnitude < 2 then
- animspeed = 0.1
- if Action == "Standing" then
- SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.5,-1,0), Vector3.new(-animangle/38,0,0))
- SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.5,-1,0), Vector3.new(animangle/38,0,0))
- SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new(animangle/30,0,0))
- SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new(-animangle/30,0,0))
- end
- if stamina < maxstamina then
- if Sitting == false then
- stamina = stamina + 0.65
- else
- stamina = stamina + 1.02
- end
- if stamina > maxstamina then
- stamina = maxstamina
- end
- else
- stamina = maxstamina
- end
- end
- if hitz == nil then
- if Torsoz.Velocity.y > 1 or (Torsoz.Velocity.y < -1 and Torsoz.Velocity.y > -90) then
- if Action == "Standing" then
- GravAction = "Rising"
- animspeed = 0.1
- SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.5,-1,0), Vector3.new(-animangle/38,0,0))
- SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.5,-1,0), Vector3.new(animangle/38,0,0))
- SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new((math.pi-0.2)+(animangle/30),0,0))
- SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new((math.pi-0.2)+(-animangle/30),0,0))
- if animatebg.Parent ~= nil then
- animatebg.Parent = Torsoz
- animatebg.maxTorque = Vector3.new(1/0,10000,1/0)
- local lokvec = Torsoz.CFrame.lookVector*100
- animatebg.cframe = CFrame.new(NV, Vector3.new(lokvec.x,0,lokvec.z))
- animatebg.Parent = nil
- end
- end
- end
- end
- if hitz == nil then
- local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-6,0))
- if hitz2 == nil then
- if Torsoz.Velocity.y < -90 then
- if Action == "Standing" then
- GravAction = "Falling"
- animspeed = 1.1
- animatebg.Parent = Torsoz
- animatebg.maxTorque = Vector3.new(1/0,10000,1/0)
- local lokvec = Torsoz.CFrame.lookVector*100
- animatebg.cframe = CFrame.new(NV, Vector3.new(lokvec.x,0,lokvec.z)) * CFrame.Angles(-math.pi/11,animangle/70,0)
- SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.45,-0.8,0), Vector3.new((animangle/27)-0.3,0,0.18))
- SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.45,-0.8,0), Vector3.new((-animangle/27)-0.3,0,-0.18))
- SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.4,0.5,0), Vector3.new((math.pi+0.2)+(animangle/26),0,0.18))
- SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.4,0.5,0), Vector3.new((math.pi+0.2)+(-animangle/26),0,-0.18))
- end
- end
- elseif hitz2.CanCollide == true then
- if animatebg.Parent ~= nil then
- animatebg.Parent = Torsoz
- animatebg.maxTorque = Vector3.new(1/0,10000,1/0)
- local lokvec = Torsoz.CFrame.lookVector*100
- animatebg.cframe = CFrame.new(NV, Vector3.new(lokvec.x,0,lokvec.z))
- animatebg.Parent = nil
- end
- end
- end
- if GravAction == "Idle" and animatebg.Parent ~= nil then
- animatebg.Parent = nil
- end
- if math.abs(tickoffset - tick()) > 0.05 then
- tickoffset = tick()
- local flowcolor = HSV(hue, 0.7,1)
- recyclecount = (recyclecount % #fadetab) + 1
- if flow.Value > 25 then
- local lapos = (LA.CFrame * CFrame.new(0,-1,0)).p
- local rapos = (RA.CFrame * CFrame.new(0,-1,0)).p
- local p = fadetab[recyclecount]
- p[1].Parent = m
- p[1].CFrame = CFrame.new((lapos+prevlapos)/2, lapos)
- p[2].Scale = Vector3.new(0.5,0.5,(lapos-prevlapos).magnitude*2)
- p[2].VertexColor = Vector3.new(flowcolor.r,flowcolor.g,flowcolor.b)
- p[1].Transparency = math.abs((flow.Value/120) - 0.8)
- p[1].Transparency = p[1].Transparency + (1/#fadetab)
- local p = fadetab2[recyclecount]
- p[1].Parent = m
- p[1].CFrame = CFrame.new((rapos+prevrapos)/2, rapos)
- p[2].Scale = Vector3.new(0.5,0.5,(rapos-prevrapos).magnitude*2)
- p[2].VertexColor = Vector3.new(flowcolor.r,flowcolor.g,flowcolor.b)
- p[1].Transparency = math.abs((flow.Value/120) - 0.8)
- p[1].Transparency = p[1].Transparency + (1/#fadetab)
- end
- for i, v in pairs(fadetab) do
- if v[1].Transparency < 0.9 then
- v[1].Transparency = v[1].Transparency + (1/#fadetab)
- fadetab2[i][1].Transparency = fadetab2[i][1].Transparency + (1/#fadetab)
- elseif v[1].Transparency ~= 1 then
- v[1].Transparency = 1
- v[1].Position = Vector3.new(50000,0,0)
- fadetab2[i][1].Transparency = 1
- fadetab2[i][1].Position = Vector3.new(50000,0,0)
- end
- end
- prevrapos = (RA.CFrame * CFrame.new(0,-1,0)).p
- prevlapos = (LA.CFrame * CFrame.new(0,-1,0)).p
- end
- if flow.Value > 140 then
- if char.Parent ~= nil then
- char:remove()
- end
- end
- if flowcooldown > 0 then
- flowcooldown = flowcooldown - 1
- end
- if HWRCooldown > 0 then
- HWRCooldown = HWRCooldown - 1
- end
- if VWRCooldown > 0 then
- if hitz ~= nil and VWRCooldown > 0 then
- VWRCooldown = VWRCooldown - 1
- end
- end
- if SlideCooldown > 0 then
- SlideCooldown = SlideCooldown - 1
- end
- if Action == "HWallRunning" or Action == "VWallRunning" then
- flow.Value = flow.Value + 0.24
- if flow.Value > 100 then
- flow.Value = 100
- end
- flowcooldown = 40
- elseif Action == "Diving" then
- flowcooldown = 30
- elseif Action == "Sliding" then
- flowcooldown = 15
- elseif Action == "Standing" or Action == "Sitting" then
- if flow.Value > 0 and flowcooldown <= 0 then
- flow.Value = flow.Value - 0.37
- if flow.Value < 0 then
- flow.Value = 0
- end
- end
- end
- cam.FieldOfView = FOV
- prevanimbgcount = animatebgcount
- sprint = defsprint + ((flow.Value/100)*2.4)
- PrevGravAction = GravAction
- Calculate()
- end)
- --[[
- 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''
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement