Advertisement
wifiboost

Untitled

Mar 27th, 2023
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.26 KB | None | 0 0
  1. -- lua/autorun/server/admin_requests_sv.lua
  2. util.AddNetworkString("AdminRequest")
  3. util.AddNetworkString("AdminRequestAction")
  4. util.AddNetworkString("AdminRequestClaim")
  5. util.AddNetworkString("AdminRequestClaimData")
  6. util.AddNetworkString("RequestUpdatedAdminRequests")
  7. util.AddNetworkString("UpdatedAdminRequests")
  8. util.AddNetworkString("AdminRequestClose")
  9. adminClaimData = {}
  10.  
  11. local adminClaimData = loadClaimData()
  12. local adminRequests = {}
  13. local function GetAdmins()
  14. local adminGroups = {
  15. "trialmod", "moderator", "seniormod", "admin", "headadmin", "senioradmin", "council", "superadmin", "manager"
  16. }
  17. local admins = {}
  18. for _, ply in ipairs(player.GetAll()) do
  19. for _, group in ipairs(adminGroups) do
  20. if ply:IsUserGroup(group) then
  21. table.insert(admins, ply)
  22. break
  23. end
  24. end
  25. end
  26. return admins
  27. end
  28. local function IsAdminGroup(ply)
  29. local adminGroups = {
  30. "trialmod", "moderator", "seniormod", "admin", "headadmin", "senioradmin", "council", "superadmin", "manager"
  31. }
  32. for _, group in ipairs(adminGroups) do
  33. if ply:IsUserGroup(group) then
  34. return true
  35. end
  36. end
  37.  
  38. return false
  39. end
  40. hook.Add("PlayerSay", "AdminRequestSystem", function(ply, text, teamChat)
  41. if string.sub(text, 1, 1) == "@" then
  42. local requestData = {
  43. steamID64 = ply:SteamID64(),
  44. name = ply:Nick(),
  45. message = string.sub(text, 2),
  46. requestTime = CurTime()
  47. }
  48. table.insert(adminRequests, requestData) -- Save the request data to the adminRequests table
  49. net.Start("AdminRequest")
  50. net.WriteTable(requestData)
  51. net.Send(GetAdmins()) -- GetAdmins will now check for the specified user groups
  52. return "" -- Hide the message from the chat
  53. end
  54. end)
  55. local function getUpdatedAdminRequests()
  56. -- Return the contents of the adminRequests table
  57. return adminRequests
  58. end
  59. -- Handle admin actions
  60. local playerPreviousPositions = {}
  61. net.Receive("AdminRequestAction", function(len, ply)
  62. local action = net.ReadString()
  63. local target = net.ReadEntity()
  64.  
  65. if not IsValid(target) then return end
  66. if action == "goto" then
  67. playerPreviousPositions[ply:SteamID64()] = ply:GetPos()
  68. ply:SetPos(target:GetPos() + Vector(0, 0, 50))
  69. elseif action == "bring" then
  70. playerPreviousPositions[target:SteamID64()] = target:GetPos()
  71. target:SetPos(ply:GetPos() + ply:GetForward() * 100 + Vector(0, 0, 50))
  72. elseif action == "return" then
  73. local prevPos = playerPreviousPositions[target:SteamID64()]
  74. if prevPos then
  75. target:SetPos(prevPos)
  76. playerPreviousPositions[target:SteamID64()] = nil
  77. end
  78. end
  79. end)
  80. -- Initialize admin claim data table
  81. local adminClaimData = {}
  82. net.Receive("AdminRequestClaim", function(len, ply)
  83. if not IsAdminGroup(ply) then return end
  84.  
  85. local requestData = net.ReadTable()
  86. local adminID = ply:SteamID64()
  87. local currentDate = os.date("*t")
  88. local currentWeek = os.date("%U")
  89.  
  90. if not adminClaimData[adminID] then
  91. adminClaimData[adminID] = {
  92. name = ply:Nick(),
  93. totalCount = 0,
  94. weeklyCount = 0,
  95. week = currentWeek
  96. }
  97. end
  98.  
  99. local data = adminClaimData[adminID]
  100.  
  101. if data.week ~= currentWeek then
  102. data.weeklyCount = 0
  103. data.week = currentWeek
  104. end
  105.  
  106. data.totalCount = data.totalCount + 1
  107. data.weeklyCount = data.weeklyCount + 1
  108.  
  109. saveClaimData(adminClaimData)
  110. end)
  111. -- Handle claimed cases
  112. local function markCaseAsClaimed(caseIndex, adminID)
  113. adminRequests[caseIndex].claimedBy = adminID
  114. end
  115. net.Receive("RequestUpdatedAdminRequests", function(len, ply)
  116. -- Get updated admin requests here
  117. local updatedRequests = getUpdatedAdminRequests()
  118. net.Start("UpdatedAdminRequests")
  119. net.WriteTable(updatedRequests)
  120. net.Send(ply)
  121. end)
  122. net.Receive("AdminRequestClose", function(len, ply)
  123. if not IsAdminGroup(ply) then return end
  124.  
  125. local requestData = net.ReadTable()
  126. local index = -1
  127.  
  128. for i, request in ipairs(adminRequests) do
  129. if request.steamID64 == requestData.steamID64 and request.requestTime == requestData.requestTime then
  130. index = i
  131. break
  132. end
  133. end
  134.  
  135. if index > 0 then
  136. table.remove(adminRequests, index)
  137. end
  138.  
  139. saveClaimData(adminClaimData)
  140. end)
  141. local function saveClaimData(claimData)
  142. local dataJSON = util.TableToJSON(claimData)
  143. sql.Query("CREATE TABLE IF NOT EXISTS claim_data (data TEXT)")
  144. sql.Query("DELETE FROM claim_data")
  145. sql.Query("INSERT INTO claim_data (data) VALUES ('" .. sql.SQLStr(dataJSON, true) .. "')")
  146. end
  147.  
  148. local function loadClaimData()
  149. sql.Query("CREATE TABLE IF NOT EXISTS claim_data (data TEXT)")
  150. local result = sql.Query("SELECT data FROM claim_data LIMIT 1")
  151. if result then
  152. return util.JSONToTable(result[1].data)
  153. end
  154. return {}
  155. end
  156. concommand.Add("show_claim_data", function(ply, cmd, args)
  157. if not IsAdminGroup(ply) then return end
  158.  
  159. net.Start("AdminRequestClaimData")
  160. net.WriteTable(adminClaimData)
  161. net.Send(ply)
  162. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement