local player = game.Players.LocalPlayer local character = player.Character or player.CharacterAdded:Wait() local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local camera = game.Workspace.CurrentCamera local aimCF = CFrame.new() local isAiming = false local currentSwayAMT = -.3 local swayAMT = -.3 local aimSwayAMT = .2 local swayCF = CFrame.new() local lastCameraCF = CFrame.new() local framework = { inventory = { "M4A1"; "M9"; "Knife"; "Frag"; }; module = nil; viewmodel = nil; currentSlot = 1; } function loadSlot (Item) local viewmodelFolder = game.ReplicatedStorage.Viewmodels local moduleFolder = game.ReplicatedStorage.Modules for i,v in pairs(camera:GetChildren()) do if v:IsA("Model") then v:Destroy() end end if moduleFolder:FindFirstChild(Item) then framework.module = require(moduleFolder:FindFirstChild(Item)) if viewmodelFolder:FindFirstChild(Item) then framework.viewmodel = viewmodelFolder:FindFirstChild(Item):Clone() framework.viewmodel.Parent = camera end end end RunService.RenderStepped:Connect(function() local rot = camera.CFrame:ToObjectSpace(lastCameraCF) local X,Y,Z = rot:ToOrientation() swayCF = swayCF:Lerp(CFrame.Angles(math.sin(X) * currentSwayAMT, math.sin(Y) * currentSwayAMT, 0), .1) lastCameraCF = camera.CFrame local humanoid = character:WaitForChild("Humanoid") if humanoid then local bobOffset = CFrame.new() if humanoid.MoveDirection.Magnitude > 0 then if humanoid.WalkSpeed == 13 then bobOffset = CFrame.new(math.cos(tick() * 4) * .05, -humanoid.CameraOffset.Y/3, humanoid.CameraOffset.Z/3) * CFrame.Angles(0, math.sin(tick() * -4) * -.05, math.cos(tick() * -4) * .05) elseif humanoid.WalkSpeed == 20 then bobOffset = CFrame.new(math.cos(tick() * 8) * .1, -humanoid.CameraOffset.Y/3, humanoid.CameraOffset.Z/3) * CFrame.Angles(0, math.sin(tick() * -8) * -.1, math.cos(tick() * -8) * .1) end else bobOffset = CFrame.new(0, -humanoid.CameraOffset.Y/3, 0) end for i, v in pairs(camera:GetChildren()) do if v:IsA("Model") then v:SetPrimaryPartCFrame(camera.CFrame * swayCF * aimCF * bobOffset) end end end if isAiming and framework.viewmodel ~= nil and framework.module.canAim then local offset = framework.viewmodel.AimPart.CFrame:ToObjectSpace(framework.viewmodel.PrimaryPart.CFrame) aimCF = aimCF:Lerp(offset, framework.module.aimSmooth) currentSwayAMT = aimSwayAMT else local offset = CFrame.new() aimCF = aimCF:Lerp(offset, framework.module.aimSmooth) currentSwayAMT = swayAMT end end) loadSlot(framework.inventory[1]) UserInputService.InputBegan:Connect(function(input) if input.KeyCode == Enum.KeyCode.One then if framework.currentSlot ~= 1 then loadSlot(framework.inventory[1]) framework.currentSlot = 1 end end if input.KeyCode == Enum.KeyCode.Two then if framework.currentSlot ~= 2 then loadSlot(framework.inventory[2]) framework.currentSlot = 2 end end if input.KeyCode == Enum.KeyCode.Three then if framework.currentSlot ~= 3 then loadSlot(framework.inventory[3]) framework.currentSlot = 3 end end if input.KeyCode == Enum.KeyCode.Four then if framework.currentSlot ~= 4 then loadSlot(framework.inventory[4]) framework.currentSlot = 4 end end if input.UserInputType == Enum.UserInputType.MouseButton2 then isAiming = true end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton2 then isAiming = false end end) --------------------------------------------------------------------------------------------------- local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local character = script.Parent local humanoid = character:WaitForChild("Humanoid") local camera = game.Workspace.Camera UserInputService.InputBegan:Connect(function(input) if input.KeyCode == Enum.KeyCode.LeftShift then if humanoid then humanoid.WalkSpeed = 20 end end end) UserInputService.InputEnded:Connect(function(input) if input.KeyCode == Enum.KeyCode.LeftShift then humanoid.WalkSpeed = 13 end end) RunService.RenderStepped:Connect(function() if humanoid then if humanoid.MoveDirection.Magnitude > 0 then local headBobY = math.sin(tick() * 10) * .2 if humanoid.WalkSpeed == 13 then headBobY = math.sin(tick() * 10) * .2 elseif humanoid.WalkSpeed == 20 then headBobY = math.sin(tick() * 18) * .3 end local bob = Vector3.new(0, headBobY, 0) humanoid.CameraOffset = humanoid.CameraOffset:Lerp(bob, .1) else humanoid.CameraOffset = humanoid.CameraOffset:Lerp(Vector3.new(), .1) end end end)