rockbandcheeseman

IP Alias

Sep 9th, 2014
329
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.97 KB | None | 0 0
  1. -- IP Alias
  2.  
  3. function GetRequiredVersion()
  4.  
  5.     return 200
  6. end
  7.  
  8. function OnScriptLoad(processId, game, persistent)
  9.  
  10.     ipalias = table.load("ip.data")
  11. end
  12.  
  13. function OnScriptUnload()
  14.  
  15.     table.save(ipalias, "ip.data")
  16. end
  17.  
  18. --[[
  19. function OnNewGame(map)
  20.  
  21.  
  22. end
  23. --]]
  24.  
  25. --[[
  26. function OnGameEnd(stage)
  27.  
  28.  
  29. end
  30. --]]
  31.  
  32. --[[
  33. function OnServerChat(player, type, message)
  34.    
  35.  
  36. end
  37. --]]
  38.  
  39. --[[
  40. function OnServerCommandAttempt(player, command, password)
  41.  
  42.     --return true
  43. end
  44. --]]
  45.  
  46. function OnServerCommand(admin, command)
  47.  
  48.     local cmd, args = cmdsplit(command)
  49.    
  50.     if cmd == "sv_ipalias" then
  51.         local player_or_ip = args[1]
  52.         if tonumber(player_or_ip) then
  53.             local playerid = tonumber(player_or_ip)
  54.             if playerid > 0 and playerid < 17 then
  55.                 local player = rresolveplayer(playerid)
  56.                 if getplayer(player) then
  57.                     local ip = getip(player)
  58.                     local alias = {}
  59.                     for name,joins in pairs(ipalias[ip]) do
  60.                         table.insert(alias, name)
  61.                     end
  62.                
  63.                     table.sort(alias, function(a, b) return ipalias[ip][a] > ipalias[ip][b] end)
  64.                    
  65.                     local str = formatlist(alias, 4, 5)  -- formatlist(table, rowlength, extra white space)
  66.                     respond("Alias list for " .. getname(player) .. " IP " .. ip .. ":")
  67.                     hprintf(str)
  68.                     respond(str)
  69.                    
  70.                     -- Test
  71.                     for k,v in pairs(ipalias[ip]) do
  72.                         print(k)
  73.                     end
  74.                 else
  75.                     respond("Player " .. player .. " does not exist")
  76.                 end
  77.             else
  78.                 respond("Player number must be between 1 and 16")
  79.             end
  80.         else
  81.             local ip = player_or_ip
  82.             if ipalias[ip] then
  83.                 local alias = {}
  84.                 for name,joins in pairs(ipalias[ip]) do
  85.                     table.insert(alias, name)
  86.                 end
  87.                
  88.                 table.sort(alias, function(a, b) return ipalias[ip][a] > ipalias[ip][b] end)
  89.                
  90.                 local str = formatlist(alias, 4, 5)
  91.                 respond("Alias list for IP " .. ip .. ":")
  92.                 respond(str)
  93.             else
  94.                 respond("Invalid Player ID or IP Address")
  95.             end
  96.         end
  97.        
  98.         return false
  99.     end
  100. end
  101.  
  102. --[[
  103. function OnNameRequest(hash, name)
  104.  
  105.     --return true, name
  106. end
  107. --]]
  108.  
  109. --[[
  110. function OnBanCheck(hash, ip)
  111.    
  112.     --return true
  113. end
  114. --]]
  115.  
  116. function OnPlayerJoin(player)
  117.  
  118.     local name = getname(player)
  119.     local ip = getip(player)
  120.    
  121.     ipalias[ip] = ipalias[ip] or {}
  122.     ipalias[ip][name] = (ipalias[ip][name] or 0) + 1
  123. end
  124.  
  125. --[[
  126. function OnPlayerLeave(player)
  127.  
  128.  
  129. end
  130. --]]
  131.  
  132. --[[
  133. function OnPlayerKill(killer, victim, mode)
  134.  
  135.     -- mode 0: Killed by server
  136.     -- mode 1: Killed by fall damage
  137.     -- mode 2: Killed by guardians
  138.     -- mode 3: Killed by vehicle
  139.     -- mode 4: Killed by killer
  140.     -- mode 5: Betrayed by killer
  141.     -- mode 6: Suicide
  142. end
  143. --]]
  144.  
  145. --[[
  146. function OnKillMultiplier(player, multiplier)
  147.  
  148.     -- Multipliers:
  149.     -- 7: Double Kill
  150.     -- 9: Triple Kill
  151.     -- 10: Killtacular
  152.     -- 11: Killing Spree
  153.     -- 12: Running Riot
  154.     -- 16: Double Kill w/ Score
  155.     -- 15: Triple Kill w/ Score
  156.     -- 14: Killtacular w/ Score
  157.     -- 18: Killing Spree w/ Score
  158.     -- 17: Running Riot w/ Score
  159. end
  160. --]]
  161.  
  162. --[[
  163. function OnPlayerSpawn(player)
  164.    
  165.  
  166. end
  167. --]]
  168.  
  169. --[[
  170. function OnPlayerSpawnEnd(player)
  171.  
  172.  
  173. end
  174. --]]
  175.  
  176. --[[
  177. function OnWeaponAssignment(player, objId, slot, weapId)
  178.    
  179.     --return mapId
  180. end
  181. --]]
  182.  
  183. --[[
  184. function OnWeaponReload(player, weapId)
  185.  
  186.     --return true
  187. end
  188. --]]
  189.  
  190. --[[
  191. function OnObjectCreationAttempt(mapId, parentId, player)
  192.    
  193.     --return mapId
  194. end
  195. --]]
  196.  
  197. --[[
  198. function OnObjectCreation(objId)
  199.  
  200.  
  201. end
  202. --]]
  203.  
  204. --[[
  205. function OnObjectInteraction(player, objId, mapId)
  206.  
  207.  
  208. end
  209. --]]
  210.  
  211. --[[
  212. function OnTeamDecision(team)
  213.    
  214.     --return team
  215. end
  216. --]]
  217.  
  218. --[[
  219. function OnTeamChange(player, old_team, new_team, voluntary)
  220.    
  221.     --return true
  222. end
  223. --]]
  224.  
  225. --[[
  226. function OnDamageLookup(receiver, causer, mapId, tagdata)
  227.    
  228.     --return true
  229. end
  230. --]]
  231.  
  232. --[[
  233. function OnDamageApplication(receiver, causer, mapId, location, backtap)
  234.  
  235.    
  236.     --return true
  237. end
  238. --]]
  239.  
  240. --[[
  241. function OnVehicleEntry(player, vehiId, seat, mapId, voluntary)
  242.    
  243.     --return true
  244. end
  245. --]]
  246.  
  247. --[[
  248. function OnVehicleEject(player, voluntary)
  249.  
  250.     --return true
  251. end
  252. --]]
  253.  
  254. --[[
  255. function OnClientUpdate(player)
  256.  
  257.  
  258. end
  259. --]]
  260.  
  261. function table.save(t, filename)
  262.  
  263.     local dir = getprofilepath()
  264.     local file = io.open(dir .. "\\data\\" .. filename, "w")
  265.     local spaces = 0
  266.  
  267.     local function tab()
  268.  
  269.         local str = ""
  270.         for i = 1,spaces do
  271.             str = str .. " "
  272.         end
  273.  
  274.         return str
  275.     end
  276.  
  277.     local function format(t)
  278.  
  279.         spaces = spaces + 4
  280.         local str = "{ "
  281.  
  282.         for k,v in opairs(t) do
  283.             -- Key datatypes
  284.             if type(k) == "string" then
  285.                 k = string.format("%q", k)
  286.             elseif k == math.inf then
  287.                 k = "1 / 0"
  288.             end
  289.            
  290.             k = tostring(k)
  291.  
  292.             -- Value datatypes
  293.             if type(v) == "string" then
  294.                 v = string.format("%q", v)
  295.             elseif v == math.inf then
  296.                 v = "1 / 0"
  297.             end
  298.  
  299.             if type(v) == "table" then
  300.                 if table.len(v) > 0 then
  301.                     str = str .. "\n" .. tab() .. "[" .. k .. "] = " .. format(v) .. ","
  302.                 else
  303.                     str = str .. "\n" .. tab() .. "[" .. k .. "] = {},"
  304.                 end
  305.             else
  306.                 str = str .. "\n" .. tab() .. "[" .. k .. "] = " .. tostring(v) .. ","
  307.             end
  308.         end
  309.  
  310.         spaces = spaces - 4
  311.  
  312.         return string.sub(str, 1, string.len(str) - 1) .. "\n" .. tab() .. "}"
  313.     end
  314.  
  315.     file:write("return " .. format(t))
  316.     file:close()
  317. end
  318.  
  319. function table.load(filename)
  320.  
  321.     local dir = getprofilepath()
  322.     local file = loadfile(dir .. "\\data\\" .. filename)
  323.     if file then
  324.         return file() or {}
  325.     end
  326.    
  327.     return {}
  328. end
  329.  
  330. function table.len(t)
  331.  
  332.     local count = 0
  333.     for k,v in pairs(t) do
  334.         count = count + 1
  335.     end
  336.    
  337.     return count
  338. end
  339.  
  340. function opairs(t)
  341.    
  342.     local keys = {}
  343.     for k,v in pairs(t) do
  344.         table.insert(keys, k)
  345.     end    
  346.     table.sort(keys,
  347.     function(a,b)
  348.         if type(a) == "number" and type(b) == "number" then
  349.             return a < b
  350.         end
  351.         an = string.lower(tostring(a))
  352.         bn = string.lower(tostring(b))
  353.         if an ~= bn then
  354.             return an < bn
  355.         else
  356.             return tostring(a) < tostring(b)
  357.         end
  358.     end)
  359.     local count = 1
  360.     return function()
  361.         if table.unpack(keys) then
  362.             local key = keys[count]
  363.             local value = t[key]
  364.             count = count + 1
  365.             return key,value
  366.         end
  367.     end
  368. end
  369.  
  370. function cmdsplit(str)
  371.  
  372.     local subs = {}
  373.     local sub = ""
  374.     local ignore_quote, inquote, endquote
  375.     for i = 1,string.len(str) do
  376.         local bool
  377.         local char = string.sub(str, i, i)
  378.         if char == " " then
  379.             if (inquote and endquote) or (not inquote and not endquote) then
  380.                 bool = true
  381.             end
  382.         elseif char == "\\" then
  383.             ignore_quote = true
  384.         elseif char == "\"" then
  385.             if not ignore_quote then
  386.                 if not inquote then
  387.                     inquote = true
  388.                 else
  389.                     endquote = true
  390.                 end
  391.             end
  392.         end
  393.        
  394.         if char ~= "\\" then
  395.             ignore_quote = false
  396.         end
  397.        
  398.         if bool then
  399.             if inquote and endquote then
  400.                 sub = string.sub(sub, 2, string.len(sub) - 1)
  401.             end
  402.            
  403.             if sub ~= "" then
  404.                 table.insert(subs, sub)
  405.             end
  406.             sub = ""
  407.             inquote = false
  408.             endquote = false
  409.         else
  410.             sub = sub .. char
  411.         end
  412.        
  413.         if i == string.len(str) then
  414.             if string.sub(sub, 1, 1) == "\"" and string.sub(sub, string.len(sub), string.len(sub)) == "\"" then
  415.                 sub = string.sub(sub, 2, string.len(sub) - 1)
  416.             end
  417.             table.insert(subs, sub)
  418.         end
  419.     end
  420.    
  421.     local cmd = subs[1]
  422.     local args = subs
  423.     table.remove(args, 1)
  424.    
  425.     return cmd, args
  426. end
  427.  
  428. function formatlist(list, rowlen, space, delimiter)
  429.  
  430.     local longest = 0
  431.     for _,v in ipairs(list) do
  432.         local len = string.len(v)
  433.         if len > longest then
  434.             longest = len
  435.         end
  436.     end
  437.  
  438.     local rows = {}
  439.  
  440.     local row = 1
  441.     local count = 1
  442.     for k,v in ipairs(list) do
  443.  
  444.         if count % rowlen == 0 or k == #list then
  445.             rows[row] = (rows[row] or "") .. v
  446.         else
  447.             rows[row] = (rows[row] or "") .. v .. spaces(longest - string.len(v) + space, delimiter)
  448.         end
  449.  
  450.         if count % rowlen == 0 then
  451.             row = row + 1
  452.         end
  453.  
  454.         count = count + 1
  455.     end
  456.  
  457.     return table.concat(rows, "\n")
  458. end
  459.  
  460. function spaces(n, delimiter)
  461.  
  462.     delimiter = delimiter or ""
  463.    
  464.     local str = ""
  465.     for i = 1, n do
  466.         if i == math.floor(n / 2) then
  467.             str = str .. delimiter
  468.         end
  469.        
  470.         str = str .. " "
  471.     end
  472.  
  473.     return str
  474. end
Advertisement
Add Comment
Please, Sign In to add comment