Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function GM:CalcView(ply, pos, angles, fov, znear, zfar)
- if self.IsDrawingTP then
- local view = {}
- view.ActualPos=pos
- view.ActualAng=angles
- local oply=ply
- opos=opos or origin
- oang=oang or angles
- ofov=fov
- view.fov=70
- local orpos=pos
- if !LocalPlayer():Alive() then
- oply=ply:GetRagdollEntity()
- end
- if IsValid(oply) then
- local eyes = oply:GetAttachment(oply:LookupAttachment("eyes"))
- local pos=orpos
- if eyes.Pos then
- pos=eyes.Pos
- end
- if !ply:Alive() then
- angles=eyes.Ang
- end
- //local ang=eyes.Ang
- //angles=LerpAngle(0.9, ang, angles)
- view.origin = pos
- view.angles = angles
- else
- view.angles = angles
- view.origin = origin
- end
- view.origin=view.origin or pos
- local dif=(view.origin-orpos):Angle():Forward()*7
- local endpos=view.origin+dif
- local tr=util.TraceLine({start=orpos, endpos=endpos, filter=LocalPlayer()})
- if tr.Hit then
- //print('hit')
- view.Clip=view.origin-(tr.HitPos-dif)
- view.origin=tr.HitPos-dif
- end
- local ov=self.CurView
- self.CurView=view
- self.CurView.OldView=ov
- return view
- end
- end
- function GM:PreDrawViewModel(vm, cl, weap)
- local vm=LocalPlayer():GetViewModel()
- local cl=LocalPlayer()
- local weap=LocalPlayer():GetActiveWeapon()
- if IsValid(weap) then
- if !IsValid(self.ClientModel) then
- self.ClientModel=ClientsideModel(vm:GetModel())
- self.ClientModel.RenderOverride=function(ent)
- //cam.IgnoreZ(true)
- ent:DrawModel()
- //cam.IgnoreZ(false)
- end
- //self.ClientModel:AddEffects(bit.bor(EF_NOSHADOW))
- end
- if self.ClientModel:GetModel()!=vm:GetModel() then
- self.ClientModel:SetModel(vm:GetModel())
- end
- self.ClientModel:SetPos(vm:GetPos())
- self.ClientModel:SetAngles(vm:GetAngles())
- self.ClientModel:SetSequence(vm:GetSequence())
- self.ClientModel:SetCycle(vm:GetCycle())
- else
- if IsValid(self.ClientModel) then
- self.ClientModel:Remove()
- end
- end
- return false
- end
- GM.ViewModelWallOffset=0
- GM.CrouchOffset=0
- //GM.ViewModelOffset={}
- function GM:CalcViewModelView(wp, vm, oep, oea, ep, ea)
- if !self.CurView or !self.CurView.ActualAng or !self.CurView.origin then return end
- local offset=self.CurView.ActualPos-self.CurView.origin
- if LocalPlayer():KeyDown(IN_DUCK) or LocalPlayer():Crouching() then
- self.CrouchOffset=math.Clamp(self.CrouchOffset+FrameTime()*15, 0, 18)
- else
- self.CrouchOffset=math.Clamp(self.CrouchOffset-FrameTime()*15, 0, 18)
- end
- //local tr=util.TraceLine(vm)
- if self.CurView.Clip then
- offset=offset-self.CurView.Clip
- end
- offset=offset+Vector(0, 0, self.CrouchOffset)
- local angoffset=self.CurView.ActualAng-self.CurView.angles
- vm:SetPos(LerpVector(0.4, vm:GetPos(), vm:GetPos()+offset))
- vm:SetAngles(LerpAngle(0.4, vm:GetAngles(), vm:GetAngles()+angoffset))
- /*local pos=LocalPlayer():EyePos()+LocalPlayer():EyeAngles():Forward()*45-LocalPlayer():EyeAngles():Up()*9.5+LocalPlayer():EyeAngles():Right()*5
- local pos2=LocalPlayer():EyePos()-LocalPlayer():EyeAngles():Up()*9.5+LocalPlayer():EyeAngles():Right()*5*/
- if vm:LookupBone("ValveBiped.Bip01_R_UpperArm") then
- local pos, ang=vm:GetBonePosition(vm:LookupBone("ValveBiped.Bip01_R_UpperArm"))
- pos=pos+ang:Up()*5
- pos=pos+ang:Right()*5
- local pos2=pos+ang:Forward()*45
- if pos and pos2 then
- local tr=util.TraceLine({start=pos, endpos=pos2, filter={LocalPlayer()}})
- local ot=tr
- local dif=pos2-tr.HitPos
- /*
- if !tr.Hit then
- local pos1=pos+ang:Right()*5
- pos2=pos1+ang:Forward()*45
- dif=pos2-pos1
- tr=util.TraceLine({start=pos, endpos=pos2, filter={LocalPlayer()}})
- /*if !tr.Hit then
- local pos1=pos-ang:Right()*5
- pos2=pos1+ang:Forward()*45
- dif=pos2-pos1
- tr=util.TraceLine({start=pos, endpos=pos2, filter={LocalPlayer()}})
- //print('go')
- end
- end*/
- //print(dif)
- if tr.Hit then
- vm:SetPos(vm:GetPos()-(pos2-tr.HitPos))
- else
- vm:SetPos(vm:GetPos()-dif)
- end
- end
- else
- local dif=math.Clamp(45-LocalPlayer():GetEyeTrace().HitPos:Distance(vm:GetPos()), 0, 18)
- self.HasViewOffset=(dif)!=0
- self.ViewModelWallOffset=Lerp(FrameTime()*5, self.ViewModelWallOffset, dif)
- vm:SetPos(vm:GetPos()-vm:GetAngles():Forward()*self.ViewModelWallOffset)
- end
- GAMEMODE.Offset=offset
- return true
- end
Advertisement
Add Comment
Please, Sign In to add comment