Advertisement
Guest User

GMCP.lua

a guest
Feb 13th, 2013
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.19 KB | None | 0 0
  1. -- [[ A framework to track GMCP module usage ]] --
  2.  
  3. module("gmod",package.seeall)
  4.  
  5. local registeredUsers = registeredUsers or {}
  6. local registeredModules = registeredModules or {}
  7.  
  8. -- Central text output function for the module.
  9. function print(text)
  10.         cecho(string.format("\n<yellow>[GMCP Tracker] <white>%s\n",text))
  11. end
  12.  
  13. -- Register a user to the system.
  14. function registerUser(user)
  15.         if registeredUsers[user] then return "user exists"
  16.         else registeredUsers[user] = true
  17.         end
  18.        
  19.         return "user registered"
  20. end
  21.  
  22. -- Add a user to a module
  23. local function addUser(user,module)
  24.         registeredModules[module][user] = true
  25.        
  26.         return "user added"
  27. end
  28.  
  29. -- Drop a user from a module
  30. local function dropUser(user,module)
  31.         if not registeredModules[module] then return "no registered module" end
  32.         if not registeredModules[module][user] then return "user not linked" end
  33.         registeredModules[module][user] = nil
  34.  
  35.         return "user dropped"
  36. end
  37.  
  38. -- Get the user count of a module.
  39. local function getUserCount(module)
  40.         if not registeredModules[module] then return 0 end
  41.         local count = 0
  42.         for i,v in pairs(registeredModules[module]) do count = count + 1 end
  43.         return count
  44. end
  45.  
  46. -- Check to see if the module is registered. Return a user list if it is.
  47. function isRegisteredModule(mod)
  48.         if not registeredModules[mod] then return false end
  49.         return registeredModules[mod]
  50. end
  51.  
  52. -- Enable a module that isn't already enabled, and register it's use to a user.
  53. function enableModule(user,module)
  54.         registerUser(user)
  55.  
  56.         -- Check to see if the module is already enabled.
  57.         if not isRegisteredModule(module) then
  58.                 sendGMCP(string.format([[Core.Supports.Add ["%s 1"] ]],module))
  59.                 registeredModules[module] = {}
  60.         end
  61.  
  62.         -- Add the user to the module's user list.
  63.         addUser(user,module)
  64. end
  65.  
  66. -- Remove a user from a module's user list. Disable the module if nobody is using it.
  67. function disableModule(user,module)
  68.         registerUser(user)
  69.  
  70.         -- Make sure the module is enabled in the first place
  71.         if not isRegisteredModule(module) then return "no registered module" end
  72.        
  73.         dropUser(user,module)
  74.  
  75.         -- The user is now removed from the list. Check the user count.
  76.         if getUserCount(module) < 1 then
  77.                 sendGMCP(string.format([[Core.Supports.Remove ["%s"] ]],module))
  78.                 registeredModules[module] = nil
  79.         end          
  80. end
  81.  
  82. function printModules(user)
  83.         -- If a user is specified, print the name of all associated modules.
  84.         if user then
  85.                 if not isRegisteredUser(user) then
  86.                         print(string.format("<cyan>%s <white>is not a registered user."))
  87.                         return
  88.                 end
  89.                 cecho(string.format("\n\n<white>Module listing for user: <cyan>%s",user))
  90.                 cecho(string.format("\n<white>%s",string.rep("-",45)))
  91.                 for i,v in pairs(registeredModules) do
  92.                         if v[user] then cecho(string.format("\n<yellow>%s",i)) end
  93.                 end
  94.                 return
  95.         end
  96.  
  97.         -- No user specified, print all existing Modules with a user list.
  98.         for i,v in pairs(registeredModules) do
  99.                 cecho(string.format("\n<yellow>%s\n  ",i))
  100.                 local doComma = false
  101.                 for j,_ in pairs(v) do
  102.                         if not doComma then doComma = true else cecho("<white>, ") end
  103.                         cecho(string.format("<cyan>%s",j))
  104.                 end
  105.         end
  106. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement