I used RunService.RenderStepped because that's the lag free thing i know
My problem is at line 106
Here is the script
local plr = game.Players.LocalPlayer
local mouse = plr:getMouse()
repeat wait(.2) until plr.Character
local char = plr.Character
char:WaitForChild("Humanoid")
local function loadprint(module)
print(module.." Loaded")
end
--Viewmodel Module
local guns = game.ReplicatedStorage:WaitForChild("Guns")
local viewmodelGun
local diemaus = game.Players.LocalPlayer:getMouse()
diemaus.Icon = "http://www.roblox.com/asset/?id=98386546"
--local animationContent = game:GetService("KeyframeSequenceProvider"):RegisterKeyframeSequence(game.ReplicatedStorage.TestShot)
--script.Animation.AnimationId = animationContent
--game.Workspace.CurrentCamera.CameraType = Enum.CameraType.Scriptable
local offset = Vector3.new(0, -.8 ,0.1)
local modeloffset = CFrame.new(0, -.8 ,0.1)
--[[local function SetViewmodelOffset(vector)
if viewmodelGun then
--viewmodelGun:SetPrimaryPartCFrame(cframe or game.Workspace.CurrentCamera.CoordinateFrame)
offset = vector or Vector3.new(0,0,0)
end
end]]
local function scan_nocollide(object)
local obj = object or viewmodelGun
if obj == nil then return end
for _,v in pairs(obj:GetChildren()) do
if v:IsA("BasePart") then
v.CanCollide = false
end
if #v:GetChildren() > 0 then
scan_nocollide(v)
end
end
end
local function ShowWeaponOnScreen(weapon)
if guns:FindFirstChild(tostring(weapon)) then
if viewmodelGun then
viewmodelGun:Destroy()
viewmodelGun = nil
end
if game.Workspace.CurrentCamera:FindFirstChild("Viewmodel") then -- Somehow a second viewmodel was being created when this was called twice, we just see if we created the viewmodel already and if that is the case we destroy the object.
game.Workspace.CurrentCamera:FindFirstChild("Viewmodel"):Destroy()
viewmodelGun = nil
end
viewmodelGun = guns:FindFirstChild(tostring(weapon)).Model:Clone()
viewmodelGun.Name = "Viewmodel"
viewmodelGun.Parent = game.Workspace.CurrentCamera
scan_nocollide()
end
end
script.ShowWeaponOnScreen.OnInvoke = ShowWeaponOnScreen
--[[
print(game.Players.Player1.PlayerGui.ScreenGui.Viewmodel.PlayParticleOnPart:Invoke("MuzzleFlash", game.ReplicatedStorage.Guns.AK47.Resources.Particles.MuzzleFlash, function (name, icle)
wait(0.1)
icle.Enabled = false
print("Disable Particle")
end))
--]]
script.SetViewmodelOffset.OnInvoke = SetViewmodelOffset
script.PlayParticleOnPart.OnInvoke = function (partName, particle, callback)
if not viewmodelGun then return end
local icle = particle:Clone()
icle.Parent = viewmodelGun:FindFirstChild(tostring(partName))
icle.Enabled = true
if type(callback) == "function" then
coroutine.wrap(function ()
callback(partName, icle)
end)()
end
return icle
end
local delta = 0
local ti, prevTick = tick(), tick()
--SetViewmodelOffset(Vector3.new(1, -0.75, 1.5))
--SetViewmodelOffset(Vector3.new(1,-1.35,-3))
local oldviewmodelCFrame
local function GetViewmodelCFrame()
if oldviewmodelCFrame then
return oldviewmodelCFrame:lerp(game.Workspace.CurrentCamera.CoordinateFrame * CFrame.new(offset), 0.35)
else
return game.Workspace.CurrentCamera.CoordinateFrame * CFrame.new(offset)
end
end
local RunSrv = game:GetService("RunService")
RunSrv.RenderStepped:Connect(function()
if viewmodelGun then
ti = tick()
delta = ti - prevTick
local viewCFrame = GetViewmodelCFrame()
viewmodelGun:SetPrimaryPartCFrame(viewCFrame * modeloffset)
oldviewmodelCFrame = viewmodelGun:GetPrimaryPartCFrame()
prevTick = tick()
end
end)
local function FlickView(vector)
local cframe = game.Workspace.CurrentCamera.CoordinateFrame * CFrame.Angles(math.rad(vector.x), math.rad(vector.y), math.rad(vector.z))
game.Workspace.CurrentCamera.CoordinateFrame = cframe
return game.Workspace.CurrentCamera.CoordinateFrame
end
loadprint("Viewmodel")

1 comment
Don't post your entire script! Just post the relevant parts.