Advertisement
CapsAdmin

Untitled

May 8th, 2013
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.69 KB | None | 0 0
  1. function EnableDiabloView(b)   
  2.    
  3.     if not b then
  4.         hook.Remove("CalcView", "diablo")
  5.         hook.Remove("ShouldDrawLocalPlayer", "diablo")
  6.         hook.Remove("CreateMove", "diablo")
  7.         hook.Remove("PreDrawOpaqueRenderables", "diablo")
  8.        
  9.         if vgui.CursorVisible() then
  10.             gui.EnableScreenClicker(false)
  11.         end
  12.        
  13.         return
  14.     end
  15.    
  16.     local params = {origin = Vector(), angles = Angle(), fov = 1}
  17.    
  18.     hook.Add("CalcView", "diablo", function(ply, pos, ang, fov)
  19.         local size = ply:GetModelScale() or 1
  20.         pos = ply:GetPos() + Vector(0, 0, size * 72)
  21.        
  22.         local origin = pos + Vector(1, 1, 1) * 500 
  23.         local dir = (pos - origin)     
  24.        
  25.         params.origin = origin
  26.         params.angles = dir:Angle()
  27.         params.znear = 100
  28.         params.zfar = 10000
  29.         params.fov = 30
  30.                    
  31.         local normal = Vector(0, 0, -1)
  32.         local distance = normal:Dot(Vector(pos.x, pos.y, ply:GetPos().z + (72 * size)))
  33.            
  34.         render.EnableClipping(true)
  35.         render.PushCustomClipPlane(normal, distance)
  36.                    
  37.         return params
  38.     end)
  39.    
  40.     hook.Add("CreateMove", "diablo", function(cmd)
  41.         local ply = LocalPlayer()
  42.        
  43.        
  44.         -- this tries to trace from the player to camera and then use the hitpos as origin
  45.         -- but when the trace hits the aim angles become wrong
  46.            
  47.         --[[
  48.         local pos = ply:EyePos()
  49.         local origin = params.origin
  50.         local data = util.TraceLine({start = pos, endpos = origin, filter = {ply}})
  51.        
  52.         if data.Hit then
  53.             origin = data.HitPos
  54.         end
  55.            
  56.         --local dir = util.AimVector(params.angles, params.fov, gui.MouseX(), gui.MouseY(), ScrW(), ScrH())
  57.         local dir = pace.LPCameraScreenToVector(gui.MouseX(), gui.MouseY(), ScrW(), ScrH(), params.angles, math.rad(params.fov))
  58.            
  59.         pos = util.TraceLine({start = origin, endpos = origin + (dir * 32000)}).HitPos]]
  60.        
  61.         local dir = pace.LPCameraScreenToVector(gui.MouseX(), gui.MouseY(), ScrW(), ScrH(), params.angles, math.rad(params.fov))
  62.         local pos = util.IntersectRayWithPlane(params.origin, dir * 32000, util.TraceLine({start = ply:GetPos(), endpos = ply:GetPos() + physenv.GetGravity() * 32000}).HitPos, Vector(0, 0, 1))
  63.            
  64.         gui.EnableScreenClicker(true)
  65.            
  66.         if pos then    
  67.             local angles = (pos - ply:EyePos()):Angle()
  68.                
  69.             if ply:KeyDown(IN_FORWARD) then
  70.                 angles.p = 0
  71.             end
  72.                
  73.             if input.IsMouseDown(MOUSE_LEFT) then
  74.                 cmd:SetButtons(bit.bor(cmd:GetButtons(), IN_ATTACK))
  75.             end
  76.                
  77.             if input.IsMouseDown(MOUSE_RIGHT) then
  78.                 cmd:SetButtons(bit.bor(cmd:GetButtons(), IN_ATTACK2))
  79.             end
  80.                
  81.             cmd:SetViewAngles(angles)
  82.         end
  83.     end)
  84.    
  85.     hook.Add("PreDrawOpaqueRenderables", "diablo", function()
  86.         render.PopCustomClipPlane()
  87.         render.EnableClipping(false)
  88.     end)
  89.    
  90.     hook.Add("ShouldDrawLocalPlayer", "diablo", function()
  91.         return true
  92.     end)
  93. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement