Copy salient and essential scripts and models from Plane Building Roblox
This commit is contained in:
@@ -0,0 +1,200 @@
|
||||
c = require(_G.Modules.CharacterModule)
|
||||
l = "Left Shoulder"
|
||||
r = "Right Shoulder"
|
||||
|
||||
local lastShot = tick()
|
||||
local input = game:GetService("UserInputService")
|
||||
local bulletModule = nil
|
||||
if script.Parent:FindFirstChild("BulletModule") then bulletModule = require(_G.Modules.BulletModule) end
|
||||
function init(gun)
|
||||
local fov = 60
|
||||
local returnTable = {}
|
||||
local la = {} -- states for the arm in different animations
|
||||
local ra = {}
|
||||
returnTable.la = la
|
||||
returnTable.ra = ra
|
||||
returnTable.maxRounds = 10
|
||||
returnTable.shouldRest = true
|
||||
returnTable.clock = 0.1
|
||||
returnTable.rounds = returnTable.maxRounds
|
||||
local aiming = false
|
||||
local shootEvent
|
||||
local cameraLast = game.Workspace.CurrentCamera.CFrame.Rotation
|
||||
|
||||
ra.aiming = CFrame.new(0,-1,-2)
|
||||
ra.idling = CFrame.new(1,-1,-2) * CFrame.Angles(0,0,0.5)
|
||||
ra.recoil = CFrame.new(0,0,1.5)
|
||||
ra.sheath = CFrame.new(1.5,-4,0)*CFrame.Angles(-1.57,0,0)
|
||||
ra.reload = {}
|
||||
ra.reload.beforeSmashMagazine = CFrame.new(1,-0.5,-2)*CFrame.Angles(0.8,0.5,0)
|
||||
ra.reload.smashingMagazine = CFrame.new(0.7,-0.9,-2)*CFrame.Angles(0.4,0.3,0)
|
||||
ra.reload.beforeLoadingMagazine = CFrame.new(1,-0.5,-2)*CFrame.Angles(0.8,-0.5,0)
|
||||
ra.reload.loadingMagazine = CFrame.new(1,-0.5,-2)*CFrame.Angles(0.8,-0.5,0)
|
||||
ra.reload.beforePullBack = CFrame.new(2.2,-1,-2.5)*CFrame.Angles(-0.3,1.2,0.1)
|
||||
ra.reload.pullBack = CFrame.new(1.7,-1,-2.5)*CFrame.Angles(-0.3,1.2,0.1)
|
||||
|
||||
la.idling = CFrame.new(-1.5,0,0)*CFrame.Angles(-1.57,0,0)
|
||||
la.resting = CFrame.new(-1.5,0,0)*CFrame.Angles(-1.57,0,0)
|
||||
la.aiming = CFrame.new(-0.5,-1.3,-2) * CFrame.Angles(0.3,-1,0)
|
||||
la.recoil = CFrame.new(0.5,0,0.75)
|
||||
la.sheath = CFrame.new(-1.5,-1.3,0)*CFrame.Angles(-1.57,0,0)
|
||||
la.reload = {}
|
||||
la.reload.beforeSmashMagazine = CFrame.new(-1.1,-1.5,0)*CFrame.Angles(-1.57,0,0)
|
||||
la.reload.smashingMagazine = CFrame.new(-1.1,-1.5,0)*CFrame.Angles(-1.57,0,0)
|
||||
la.reload.beforeLoadingMagazine = CFrame.new(0.3,-1.1,-2.5) * CFrame.Angles(0.4,-1,0)
|
||||
la.reload.loadingMagazine = CFrame.new(0.6,-0.7,-2)*CFrame.Angles(0.6,-1,0)
|
||||
la.reload.beforePullBack = CFrame.new(-1,-1,-2.6)*CFrame.Angles(0.4,0,0)
|
||||
la.reload.pullBack = CFrame.new(0.5,-1,-2.4)*CFrame.Angles(0.4,0,0)
|
||||
|
||||
for name,cframe in pairs(la.reload) do
|
||||
la.reload[name] = cframe + Vector3.new(-0.4,0,0)
|
||||
end
|
||||
for name,cframe in pairs(ra.reload) do
|
||||
ra.reload[name] = cframe + Vector3.new(-0.4,0,0)
|
||||
end
|
||||
|
||||
gun.Equipped:Connect(function()
|
||||
if c.humanoid.SeatPart then return end
|
||||
|
||||
local rc = {} -- state for the arm
|
||||
local lc = {}
|
||||
|
||||
local gc = {} -- state for gun pully thing
|
||||
|
||||
c.disableMotors()
|
||||
|
||||
rc.offset = CFrame.new(0,0,0)
|
||||
rc.target = ra.idling
|
||||
lc.offset = CFrame.new(0,0,0)
|
||||
lc.target = la.resting
|
||||
rc.janky = CFrame.new()
|
||||
lc.janky = CFrame.new()
|
||||
if not returnTable.shouldRest then lc.target = la.idling end
|
||||
gc.target = CFrame.new(0,0,0)
|
||||
c.cframes[r] = ra.sheath c.setArm(r)
|
||||
if not returnTable.shouldRest then c.setArm(l) c.cframes[l] = la.sheath c.setArm(l)
|
||||
else c.restArm(l) c.cframes[l] = la.resting c.restArm(l) end
|
||||
|
||||
c.run:UnbindFromRenderStep("GunMove")
|
||||
c.run:UnbindFromRenderStep("Transparency")
|
||||
|
||||
local modes = {["idle"]=1,["reload"]=function()
|
||||
local scale = game.Workspace.Scale.Value
|
||||
rc.target = ra.reload.beforeSmashMagazine
|
||||
lc.target = la.reload.beforeSmashMagazine
|
||||
wait(0.3*scale)
|
||||
gun.MagOut:Play()
|
||||
rc.target = ra.reload.smashingMagazine
|
||||
lc.target = la.reload.smashingMagazine
|
||||
wait(0.4*scale)
|
||||
rc.target = ra.reload.beforeLoadingMagazine
|
||||
lc.target = la.reload.beforeLoadingMagazine
|
||||
wait(0.5*scale)
|
||||
rc.target = ra.reload.loadingMagazine
|
||||
lc.target = la.reload.loadingMagazine
|
||||
gun.MagIn:Play()
|
||||
wait(0.3*scale)
|
||||
rc.target = ra.reload.beforePullBack
|
||||
lc.target = la.reload.beforePullBack
|
||||
wait(0.4*scale)
|
||||
gun.Reload:Play()
|
||||
if gun:FindFirstChild("Slide") then gc.target = gun.Slide.Value end
|
||||
rc.target = ra.reload.pullBack
|
||||
lc.target = la.reload.pullBack
|
||||
wait(0.3*scale)
|
||||
gc.target = CFrame.new(0,0,0)
|
||||
end,}
|
||||
local mode = modes.idle
|
||||
local reloading = false
|
||||
|
||||
if shootEvent then shootEvent:Disconnect() end
|
||||
shootEvent = gun.Activated:Connect(function()
|
||||
if not reloading and not c.running then
|
||||
if returnTable.rounds == 0 and returnTable.maxRounds > 0 then
|
||||
reloading = true
|
||||
modes.reload()
|
||||
reloading = false
|
||||
returnTable.rounds = returnTable.maxRounds
|
||||
return
|
||||
end
|
||||
if tick()-lastShot < returnTable.clock then return end
|
||||
gun.Fired:Play()
|
||||
lastShot = tick()
|
||||
returnTable.rounds-=1
|
||||
local rot = Vector3.new(0,0,math.random(-10,10)/10)
|
||||
rc.offset = ra.recoil * CFrame.Angles(rot.x,rot.y,rot.z)
|
||||
if aiming or not returnTable.shouldRest then lc.offset = la.recoil end
|
||||
if gun.Gun:FindFirstChild("GunShot") then
|
||||
gun.Gun.GunShot.ParticleEmitter.Transparency = NumberSequence.new(0)
|
||||
end
|
||||
if gun:FindFirstChild("Slide") then gc.target = gun.Slide.Value end
|
||||
if bulletModule and gun.Gun:FindFirstChild("Barrel") then bulletModule.fire(gun.Gun.Barrel) end
|
||||
wait()
|
||||
if gun.Gun:FindFirstChild("GunShot") then
|
||||
gun.Gun.GunShot.ParticleEmitter.Transparency = NumberSequence.new(1)
|
||||
end
|
||||
rc.offset = CFrame.new(0,0,0)
|
||||
lc.offset = CFrame.new(0,0,0)
|
||||
wait(returnTable.clock/2)
|
||||
gc.target = CFrame.new(0,0,0)
|
||||
end
|
||||
end)
|
||||
c.run:BindToRenderStep("GunMove",Enum.RenderPriority.Last.Value,function(delta)
|
||||
if gun.Parent ~= c.model then c.enableMotors() return end
|
||||
--game.Players.LocalPlayer.CameraMode = Enum.CameraMode.LockFirstPerson
|
||||
if not reloading then
|
||||
if input:IsMouseButtonPressed(Enum.UserInputType.MouseButton2) or input:IsKeyDown(Enum.KeyCode.Q) then
|
||||
aiming = true
|
||||
c.setRunning(false)
|
||||
rc.target = ra.aiming
|
||||
lc.target = la.aiming
|
||||
fov = (fov+60)/2
|
||||
else
|
||||
aiming = false
|
||||
fov = (fov+70)/2
|
||||
rc.target = ra.idling
|
||||
rc.janky = CFrame.new():Lerp(game.Workspace.CurrentCamera.CFrame.Rotation:ToObjectSpace(cameraLast),0.3)
|
||||
cameraLast = game.Workspace.CurrentCamera.CFrame.Rotation
|
||||
--if lc.target ~= la.resting then c.setArm(l) end
|
||||
if returnTable.shouldRest then lc.target = la.resting
|
||||
else lc.target = la.idling end
|
||||
end
|
||||
game.Workspace.CurrentCamera.FieldOfView = fov
|
||||
if c.running then
|
||||
rc.target = CFrame.new(1.5,-1,-1.5) * CFrame.Angles(1,0,0)
|
||||
lc.target = la.resting
|
||||
end
|
||||
if not reloading and input:IsKeyDown(Enum.KeyCode.R) then
|
||||
mode = modes.reload
|
||||
reloading = true
|
||||
modes.reload()
|
||||
mode = modes.idle
|
||||
reloading = false
|
||||
returnTable.rounds = returnTable.maxRounds
|
||||
end
|
||||
end
|
||||
if not c.humanoid.SeatPart then c.rotateCharacter() c.disableMotors() else --[[print("Enable")]] c.enableMotors() end
|
||||
c.targets[r] = rc.target * rc.offset * rc.janky
|
||||
c.targets[l] = lc.target * lc.offset * lc.janky
|
||||
if gun.Gun:FindFirstChild("Slide") and gun.Gun.Slide:FindFirstChild("Motor6D") then
|
||||
gun.Gun.Slide.Motor6D.C1 = gun.Gun.Slide.Motor6D.C1:Lerp(gc.target,0.5)
|
||||
end
|
||||
c.setArm(r,delta)
|
||||
if lc.target == la.resting then
|
||||
c.restArm(l,delta)
|
||||
else
|
||||
c.setArm(l,delta)
|
||||
end
|
||||
c.motors[r].Part1.LocalTransparencyModifier = 0
|
||||
c.motors[l].Part1.LocalTransparencyModifier = 0
|
||||
c.motors[r].Part1.CastShadow = false
|
||||
c.motors[l].Part1.CastShadow = false
|
||||
if math.abs(game.Workspace.CurrentCamera.CFrame:ToObjectSpace(c.head.CFrame).Position.Z) > 1 then c.cameraOffset = Vector3.new(1,0,0) end
|
||||
end)
|
||||
c.run:BindToRenderStep("Transparency",2,function()
|
||||
--game.StarterPlayer.CameraMode = Enum.CameraMode.LockFirstPerson
|
||||
end)
|
||||
end)
|
||||
return returnTable
|
||||
end
|
||||
return getfenv()
|
||||
Reference in New Issue
Block a user