Python1320

Untitled

Oct 18th, 2010
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.89 KB | None | 0 0
  1. local enabled = CreateClientConVar("fpsoptimizer_enable", "1", true)
  2. local distance = CreateClientConVar("fpsoptimizer_distance", "1000", true)
  3.  
  4. local max_distance = 100
  5.  
  6. local emptyfunc = function() end
  7.  
  8. local function StoreHooks(entity)
  9.     entity.__FPSOptimizerOldThink = entity.Think
  10.     --entity.__FPSOptimizerOldDraw = entity.Draw
  11.     --entity.__FPSOptimizerOldDrawTranslucent = entity.DrawTranslucent
  12. end
  13.  
  14. local function EnableHooks(entity)
  15.     if not entity.__fpsoptimizer_enabled then return end
  16.  
  17.     entity.__fpsoptimizer_enabled = false
  18.    
  19.     entity.Think = entity.__FPSOptimizerOldThink
  20.     --entity.Draw = entity.__FPSOptimizerOldDraw
  21.     --entity.DrawTranslucent = entity.__FPSOptimizerOldDrawTranslucent
  22.    
  23.     entity.__oldnodraw = entity.__nodraw
  24.     entity:SetNoDraw(false)
  25. end
  26.  
  27. local function DisableHooks(entity)
  28.     if entity.__fpsoptimizer_enabled then return end
  29.    
  30.     entity.__fpsoptimizer_enabled = true
  31.    
  32.     StoreHooks(entity)
  33.    
  34.     entity.Think = emptyfunc
  35.     --entity.Draw = emptyfunc
  36.     --entity.DrawTranslucent = emptyfunc
  37.    
  38.     entity:SetNoDraw(entity.__oldnodraw or true)
  39. end
  40.  
  41. _R.Entity.OldDrawModel = _R.Entity.OldDrawModel or _R.Entity.DrawModel
  42.  
  43. function _R.Entity:DrawModel()
  44.     if not self.__fpsoptimizer_enabled then
  45.         self:OldDrawModel(self)
  46.     end
  47. end
  48.  
  49. _R.Entity.OldSetNoDraw = _R.Entity.OldSetNoDraw or _R.Entity.SetNoDraw
  50.  
  51. function _R.Entity:SetNoDraw(bool)
  52.     self.__nodraw = bool
  53.     self:OldSetNoDraw(bool)
  54. end
  55.  
  56. --[[ cam.OldStart3D2D = cam.OldStart3D2D or cam.Start3D2D
  57. cam.OldEnd3D2D = cam.OldEnd3D2D or cam.End3D2D
  58.  
  59. function cam.Start3D2D(point, ...)
  60.     if point:Distance(EyePos()) > distance:GetInt() then
  61.         DONT_START3D2D = true
  62.     return end
  63.     cam.Start3D2D(point, ...)
  64. end
  65.  
  66. function cam.End3D2D()
  67.     if DONT_START3D2D then DONT_START3D2D = false return end
  68.     cam.End3D2D()
  69. end ]]
  70.  
  71. hook.Add("OnEntityCreated", "FPSOptimizer_OnEntityCreated", function(entity)
  72.     StoreHooks(entity)
  73. end)
  74.  
  75. -- I could just use the global EyePos(), which is supposed to do this (I think)
  76. -- but it doesn't seem reliable and it jumps to random positions etc
  77. -- And LocalPlayer():EyePos() is where the player's head is
  78. -- So I'll just use this
  79.  
  80. local eyepos = vector_origin
  81.  
  82. hook.Add("CalcView", "FPSOptimizer_CalcView", function(_,point)
  83.     eyepos = point
  84. end)
  85.  
  86. local disabled = false
  87.  
  88. local function Think()
  89.     if disabled and not enabled:GetBool() then return end
  90.    
  91.     disabled = false
  92.    
  93.     for key, entity in pairs(ents.GetAll()) do
  94.         if not entity:IsPlayer() then
  95.             local distant = entity:GetPos():Distance(eyepos)
  96.            
  97.             if distant > distance:GetInt() then    
  98.                 DisableHooks(entity)
  99.             elseif distant < distance:GetInt() then
  100.                 EnableHooks(entity)
  101.             end
  102.         end
  103.     end
  104.    
  105.     if not enabled:GetBool() then
  106.         for key, entity in pairs(ents.GetAll()) do
  107.             if not entity:IsPlayer() then
  108.                 EnableHooks(entity)
  109.             end
  110.         end
  111.         disabled = true
  112.     end
  113. end
  114.  
  115. timer.Create("FPSOptimizer", 0.3, 0, Think)
Advertisement
Add Comment
Please, Sign In to add comment