Python1320

Untitled

Nov 27th, 2010
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.95 KB | None | 0 0
  1. local overrides = {
  2.     PhysObj = {
  3.         "AddAngleVelocity",
  4.         "AddVelocity",
  5.         "ApplyForceCenter",
  6.         "ApplyForceOffset",
  7.         "CalculateVelocityOffset",
  8.         "SetVelocity",
  9.         "SetVelocityInstantaneous",
  10.         "SetPos",
  11.        
  12.         "AlignAngles",
  13.     },
  14.     Entity = {
  15.         "SetPos",
  16.         "SetBonePosition",
  17.         "SetLocalPos",
  18.         "SetLocalVelocity",
  19.         "SetVelocity",
  20.        
  21.         "SetLocalAngles",
  22.         "SetAngles",
  23.         "AlignAngles",
  24.         "LocalToWorldAngles",
  25.        
  26.         "SetRenderAngles",
  27.         "SetRenderOrigin",
  28.     },
  29.     Player = {
  30.         "SetRenderAngles",
  31.         "SetEyeAngles",
  32.         "SnapEyeAngles",
  33.     },
  34.     CMoveData = {
  35.         "SetMoveAngles",
  36.         "SetOrigin",
  37.     },
  38.     CUserCMD = {
  39.         "SetViewAngles",
  40.     },
  41.     CLuaEmitter = {
  42.         "SetPos",
  43.     },
  44. }
  45.  
  46. local args
  47. local v
  48.  
  49. local function CheckArgs(...)  
  50.     args = ({...})
  51.     for i=1, #args do
  52.         v = args[i]
  53.         if (type(v) == "Angle" or type(v) == "Vector") and (CLIENT and FindMetaTable(type(v)).HasINF or SERVER and v.HasINF) and v:HasINF() then
  54.             error(("Tried to use %s(%s) which contains an infinite number!"):format(type(v), tostring(v)), 3)
  55.         end
  56.     end
  57. end
  58.  
  59. for meta_name, functions in pairs(overrides) do
  60.     local meta = FindMetaTable(meta_name)
  61.     if meta then
  62.         for _, func_name in pairs(functions) do
  63.             if meta[func_name] then
  64.                 meta[func_name .. "NoINFCheck"] = meta[func_name .. "NoINFCheck"] or meta[func_name]
  65.                 meta[func_name] = function(self, ...)
  66.                     CheckArgs(...)
  67.                     return meta[func_name .. "NoINFCheck"](self, ...)
  68.                 end
  69.             end
  70.         end
  71.     end
  72. end
  73.  
  74. function math.IsINF(v)
  75.     return v and tostring(v) == "inf" or tostring(v) == "-inf" or tostring(v) == "1.#INF" or tostring(v) == "-1.#INF" or false
  76. end
  77.  
  78. local IsINF = math.IsINF
  79.  
  80. local VECTOR = FindMetaTable("Vector")
  81. if VECTOR then
  82.     function VECTOR:HasINF()
  83.         return IsINF(self.x) or IsINF(self.y) or IsINF(self.z) or false
  84.     end
  85. end
  86.  
  87. local ANGLE = FindMetaTable("Angle")
  88. if ANGLE then
  89.     function ANGLE:HasINF()
  90.         return IsINF(self.p) or IsINF(self.y) or IsINF(self.r) or false
  91.     end
  92. end
Advertisement
Add Comment
Please, Sign In to add comment