Advertisement
Guest User

antinoob.lua

a guest
Sep 2nd, 2014
384
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. if SERVER then
  2.    
  3.     --Edit here:
  4.    
  5.     local addicts = 0
  6.     local weeks = 0
  7.     local days = 1
  8.     local hours = 6
  9.     local min = 0
  10.    
  11.     local max_tries = 3 --how many times it will retry to get a players time before kicking for timeout
  12.     local check_interval = 60 --(sec) interval for retrying
  13.    
  14.     local WhiteList = {"STEAM_0:1:7099"} --add SteamIDs here in "" seperated by ,
  15.    
  16.     local function isanywayallowed(ply)
  17.         if ply.EV_GetRank and ply:EV_GetRank() ~= "guest" then print("!guest"); return true end
  18.         if ply:IsAdmin() then print("admin"); return true end
  19.         if table.HasValue(WhiteList, ply:SteamID()) then print("wl"); return true end
  20.         --add your custom exception rules here if you're more familiar with lua
  21.  
  22.         return false
  23.     end
  24.    
  25.     --editing down here is not recommended if you didn't even know what going on above
  26.    
  27.     local req_h = math.min(addicts*8765.8+weeks*168+days*24+hours+min/60, 8765.8 ) --can only check for 1 year so every greater value would just kick everyone
  28.    
  29.     print("/-----------------------------------\\")
  30.     print("|Antinoob minimum required hours: "..req_h)
  31.     print("\\----------------Uke----------------/")
  32.    
  33.     util.AddNetworkString("noobcheck_playtime")
  34.    
  35.     local function check(ply)
  36.         --if not isanywayallowed(ply) then
  37.         local nwstr = ""
  38.         if ply.anoobkey == nil or ply.anoobkey == "" then
  39.             local r = {{48,57},{65,90},{97,122}} --[%w]
  40.             for i = 1, 7 do -- you're more likely to win the lottery
  41.                 local n = math.random(1,#r)
  42.                 nwstr = nwstr..string.char(math.random(r[n][1],r[n][2]))
  43.             end
  44.         else
  45.             nwstr = ply.anoobkey
  46.         end
  47.         ply.anoobtry = ply.anoobtry + 1 or 1
  48.         ply.anoobkey = nwstr
  49.        
  50.         ply:SendLua("net.Start(\"noobcheck_playtime\"); net.WriteString(\""..nwstr.."\"); net.WriteFloat(achievements.GetCount(5)); net.SendToServer()")
  51.         print("[Antinoob] Checking: "..ply:Name().." (attempt: "..ply.anoobtry.."/"..max_tries..")")
  52.         timer.Simple(check_interval,function()
  53.             if ply == nil or not IsValid(ply) then return end
  54.             if ply.noobcheckpassed ~= true and not isanywayallowed(ply) then
  55.                 if ply.anoobtry < max_tries then
  56.                     check(ply)
  57.                 else
  58.                     local name = ply:Name()
  59.                     ply:Kick("Noobcheck timed out. Try again.")
  60.                     for k, v in pairs(player.GetAll()) do
  61.                         if v ~= ply then
  62.                             v:PrintMessage(3,"Couldn't check for "..name.."'s playtime.")
  63.                         end
  64.                     end
  65.                 end
  66.             end
  67.         end)
  68.         --else
  69.         --  ply.noobcheckpassed = true
  70.         --  but wouldnt print the time into the chat
  71.         --end
  72.     end
  73.        
  74.     hook.Add( "PlayerInitialSpawn", "noobcheck_spawnzhook",function(ply)
  75.         ply.anoobtry = 0
  76.         check(ply)
  77.     end)
  78.    
  79.     local function can(ply)
  80.         if ply == nil or not IsValid(ply) then return false end
  81.         if (ply.noobcheckpassed and ply:Alive()) or isanywayallowed(ply) then return true end
  82.         return false
  83.     end
  84.    
  85.     --Block regular guests from spamming while dead:
  86.     hook.Add("PlayerSpawnEffect","noobcheck",function(ply)
  87.         if not can(ply) then return false end
  88.     end)
  89.     hook.Add("PlayerSpawnNPC","noobcheck",function(ply)
  90.         if not can(ply) then return false end
  91.     end)
  92.     hook.Add("PlayerSpawnObject","noobcheck",function(ply)
  93.         if not can(ply) then return false end
  94.     end)
  95.     hook.Add("PlayerSpawnProp","noobcheck",function(ply)
  96.         if not can(ply) then return false end
  97.     end)
  98.     hook.Add("PlayerSpawnRagdoll","noobcheck",function(ply)
  99.         if not can(ply) then return false end
  100.     end)
  101.     hook.Add("PlayerSpawnSENT","noobcheck",function(ply)
  102.         if not can(ply) then return false end
  103.     end)
  104.     hook.Add("PlayerSpawnSWEP","noobcheck",function(ply)
  105.         if not can(ply) then return false end
  106.     end)
  107.     hook.Add("PlayerSpawnVehicle","noobcheck",function(ply)
  108.         if not can(ply) then return false end
  109.     end)
  110.    
  111.     net.Receive( "noobcheck_playtime" , function(ley, ply)
  112.         if ply == nil or not IsValid(ply) or ply.noobcheckpassed == true then return end
  113.         local key = net.ReadString()
  114.         local ti = math.floor(net.ReadFloat()/0.6)/100
  115.  
  116.         print(ply:Name().." ("..ply:SteamID()..") played GMod for "..ti.." hours. ("..req_h.."h needed to stay)")
  117.            
  118.         if (ti < req_h or ply.anoobkey != key) and not isanywayallowed(ply) then
  119.             --local txt = "You need "..req_h.."h to play here. You've got "..ti.."h."
  120.             local txt = "You need "..(req_h-ti).." more hours to play here."
  121.             if ply.anoobkey != key then txt = "" end
  122.             ply:Kick(txt)
  123.         else
  124.             ply.noobcheckpassed = true
  125.         end
  126.         --print the time for everyone:
  127.         for k, v in pairs(player.GetAll()) do
  128.             if v ~= nil and IsValid(v) then
  129.                 if v ~= ply then
  130.                     v:PrintMessage(3,ply:Name().." played GMod for "..ti.." hours. ("..req_h.."h needed to stay)")
  131.                 else
  132.                     v:PrintMessage(3,"You played GMod for "..ti.." hours. ("..req_h.."h needed to stay)")
  133.                 end
  134.             end
  135.         end
  136.         --
  137.     end)   
  138. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement