Advertisement
Guest User

napalm is gay

a guest
Dec 18th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.12 KB | None | 0 0
  1. --[[
  2. Name: cl_menu_scoreboard.lua
  3. For: SantosRP
  4. By: Ultra
  5. ]]--
  6.  
  7. surface.CreateFont( "Scoreboard_Trebuchet18", {size = 18, weight = 550, font = "Trebuchet24"} )
  8. surface.CreateFont( "Scoreboard_Trebuchet20", {size = 20, weight = 550, font = "Trebuchet24"} )
  9. surface.CreateFont( "Scoreboard_Trebuchet24", {size = 24, weight = 550, font = "Trebuchet24"} )
  10. surface.CreateFont( "Scoreboard_Trebuchet38", {size = 38, weight = 550, font = "Trebuchet24"} )
  11. local TEX_GRADIENT_LEFT = surface.GetTextureID( "gui/gradient" )
  12. local TEX_GRADIENT_DOWN = surface.GetTextureID( "gui/gradient_down" )
  13.  
  14. local Panel = {}
  15. SCOREBOARD = Panel
  16. function Panel:Init()
  17. self.m_pnlAvatar = vgui.Create( "AvatarImage", self )
  18. self.m_pnlAvatar:SetSize( 64, 64 )
  19. end
  20.  
  21. function Panel:SetPlayer( pPlayer )
  22. self.m_pPlayer = pPlayer
  23. self.m_pnlAvatar:SetPlayer( pPlayer )
  24. self:InvalidateLayout()
  25. end
  26.  
  27. function Panel:TranslateGroupName( strGroup )
  28. local data = GAMEMODE.Config.UserGroupConfig[strGroup]
  29. if not data then return strGroup end
  30. return data.Name
  31. end
  32.  
  33. function Panel:TranslateGroupColor( strGroup )
  34. local data = GAMEMODE.Config.UserGroupConfig[strGroup]
  35. if not data then return color_white end
  36. if data.Rainbow then return data.Color() end
  37. return data.Color
  38. end
  39.  
  40. function Panel:Paint( intW, intH )
  41. surface.SetDrawColor( 0, 0, 0, 250 )
  42. surface.DrawRect( 0, 9, intH +1-21, intH +1-21 )
  43.  
  44. surface.SetDrawColor( 50, 50, 50, 150 )
  45. surface.DrawRect( intH -14, (intH /2) -((intH *0.6) /2), intW -1, intH *0.6 )
  46.  
  47. surface.SetTexture( TEX_GRADIENT_LEFT )
  48. surface.SetDrawColor( 0, 0, 0, 100 )
  49. surface.DrawTexturedRect( intH -14, (intH /2) -((intH *0.6) /2), intW -1, intH *0.6 )
  50.  
  51. if not IsValid( self.m_pPlayer ) then return end
  52. local prefix = ""
  53. if not self.m_pPlayer:Alive() then
  54. prefix = prefix.. "(Not Alive) "
  55. end
  56. if GAMEMODE.Buddy:IsBuddyWith( self.m_pPlayer ) then
  57. prefix = prefix.. "(Buddy) "
  58. end
  59.  
  60. local ee = self.m_pPlayer:SteamID64()
  61.  
  62. local lenny = steamworks.GetPlayerName(ee)
  63.  
  64. --local name = self.m_pPlayer:Nick()
  65. local name
  66. if LocalPlayer():IsAdmin() or LocalPlayer():IsSuperAdmin() or LocalPlayer():GetUserGroup() == "trialmod" or LocalPlayer():GetUserGroup() == "moderator" then
  67. name = lenny .. " ( " .. self.m_pPlayer:Nick() .. " )"
  68. else
  69. name = lenny
  70. end
  71. --if not name or name == "" or name == " " then name = "Spawning... (".. self.m_pPlayer:RealNick().. ")" end
  72.  
  73. draw.SimpleText(
  74. prefix.. name,
  75. "Scoreboard_Trebuchet20",
  76. intH +5,
  77. (intH /2) -1,
  78. color_white,
  79. TEXT_ALIGN_LEFT,
  80. TEXT_ALIGN_CENTER
  81. )
  82.  
  83. draw.SimpleText(
  84. math.floor(self.m_pPlayer:Ping() / 2) .. "ms",
  85. "Scoreboard_Trebuchet20",
  86. intW -5,
  87. (intH /2) -1,
  88. color_white,
  89. TEXT_ALIGN_RIGHT,
  90. TEXT_ALIGN_CENTER
  91. )
  92.  
  93. draw.SimpleText(
  94. self:TranslateGroupName( self.m_pPlayer:GetUserGroup() ),
  95. "Scoreboard_Trebuchet20",
  96. intW -100,
  97. (intH /2) -1,
  98. self:TranslateGroupColor( self.m_pPlayer:GetUserGroup() ),
  99. TEXT_ALIGN_RIGHT,
  100. TEXT_ALIGN_CENTER
  101. )
  102. end
  103.  
  104. function Panel:OnMouseReleased(mc)
  105. local ply = self.m_pPlayer
  106. if mc==MOUSE_LEFT then
  107. local a=DermaMenu()
  108. a:AddOption(ply:GetName(),function() SetClipboardText(ply:GetName()) end)
  109. a:AddSpacer()
  110. RegisterDermaMenuForClose(a)
  111. a:AddOption("Open Profile URL",function()
  112. local url="http://steamcommunity.com/profiles/" .. tostring(ply:SteamID64())
  113. gui.OpenURL(url)
  114. end):SetImage'icon16/transmit.png'
  115. a:AddOption("Copy Profile URL",function()
  116. SetClipboardText("http://steamcommunity.com/profiles/".. tostring(ply:SteamID64()))
  117. end):SetImage'icon16/link.png'
  118. a:AddSpacer()
  119. a:AddOption("Copy SteamID",function()
  120. SetClipboardText(tostring(ply:SteamID()))
  121. end):SetImage'icon16/book_edit.png'
  122. a:AddOption("Copy Community ID",function()
  123. SetClipboardText(tostring(ply:SteamID64()))
  124. end):SetImage'icon16/book_link.png'
  125. a:AddOption("Copy Name",function()
  126. SetClipboardText("RP Name: " .. ply:Nick() .. " | Steam Name: " .. ply:GetName())
  127. end):SetImage'icon16/user_suit.png'
  128. a:AddSpacer()
  129. if ply==LocalPlayer() then
  130. a:AddOption("Disconnect",function()
  131. RunConsoleCommand("disconnect")
  132. end):SetImage'icon16/stop.png'
  133. end
  134.  
  135. a:Open()
  136. end
  137. if mc==MOUSE_RIGHT then
  138. local a=DermaMenu()
  139. if LocalPlayer():IsAdmin() or LocalPlayer():IsSuperAdmin() or LocalPlayer():GetUserGroup() == "trialmod" or LocalPlayer():GetUserGroup() == "moderator" then
  140. a:AddOption(ply:GetName(),function() SetClipboardText(ply:GetName()) end)
  141. a:AddOption(ply:Nick(),function() SetClipboardText(ply:Nick()) end)
  142. a:AddOption(ply:SteamID(),function() SetClipboardText(ply:SteamID()) end)
  143. a:AddOption(ply:SteamID64(),function() SetClipboardText(ply:SteamID64()) end)
  144. local adminmenu,b = a:AddSubMenu("Admin Menu",function() end)
  145. b:SetImage'icon16/lock_open.png'
  146.  
  147.  
  148. local m,b = adminmenu:AddSubMenu("Kick",function()
  149. RunConsoleCommand("ulx","kick","'" .. ply:Nick() .. "'")
  150. end)
  151. b:SetImage'icon16/door_out.png'
  152. m:AddOption(("%s (%s)"):format("kick", "Posting pornographic content"),function()
  153. RunConsoleCommand("ulx","kick","'" .. ply:Nick() .. "'", "Posting pornographic content")
  154. end):SetImage('icon16/door_out.png')
  155. m:AddOption(("%s (%s)"):format("kick", "Chat Spam"),function()
  156. RunConsoleCommand("ulx","kick","'" .. ply:Nick() .. "'", "Chat Spam")
  157. end):SetImage('icon16/door_out.png')
  158. m:AddOption(("%s (%s)"):format("kick", "Prop Spam"),function()
  159. RunConsoleCommand("ulx","kick","'" .. "'" .. ply:Nick() .. "'" .. "'", "Prop Spam")
  160. end):SetImage('icon16/door_out.png')
  161. m:AddOption(("%s (%s)"):format("kick", "Annoying other players"),function()
  162. RunConsoleCommand("ulx","kick","'" .. ply:Nick() .. "'", "Annoying other players")
  163. end):SetImage('icon16/door_out.png')
  164. m:AddSpacer()
  165. m:AddOption(("%s (%s)"):format("kick", "Custom Reason"),function()
  166. Derma_StringRequest(
  167. "Kick with custom reason",
  168. "Type in a custom kick reason",
  169. "",
  170. function(txt) RunConsoleCommand("ulx","kick","'" .. ply:Nick() .. "'",txt) end,
  171. function(txt) return false end
  172. )
  173. end):SetImage('icon16/door_out.png')
  174.  
  175. if LocalPlayer():IsAdmin() then
  176. local m,b = adminmenu:AddSubMenu("Ban",function()
  177. RunConsoleCommand("ulx", "ban","'" .. ply:Nick() .. "'")
  178. end)
  179. b:SetImage'icon16/stop.png'
  180. m:AddOption(("%s (%s)"):format("Ban", "Posting pornographic content"),function()
  181.  
  182. RunConsoleCommand("ulx","ban","'" .. ply:Nick() .. "'",30, "Posting pornographic content")
  183.  
  184. end):SetImage('icon16/stop.png')
  185. m:AddOption(("%s (%s)"):format("Ban", "Chat Spam"),function()
  186.  
  187. RunConsoleCommand("ulx","ban","'" .. ply:Nick() .. "'",30, "Chat Spam")
  188.  
  189. end):SetImage('icon16/stop.png')
  190. m:AddOption(("%s (%s)"):format("Ban", "Prop Spam"),function()
  191.  
  192. RunConsoleCommand("ulx","ban","'" .. ply:Nick() .. "'",30, "Prop Spam")
  193.  
  194. end):SetImage('icon16/stop.png')
  195. m:AddOption(("%s (%s)"):format("Ban", "Annoying other players"),function()
  196.  
  197. RunConsoleCommand("ulx","ban","'" .. ply:Nick() .. "'",30, "Annoying other players")
  198. end):SetImage('icon16/stop.png')
  199. m:AddSpacer()
  200. m:AddOption(("%s (%s)"):format("Ban", "Custom Reason"),function()
  201.  
  202. Derma_StringRequest(
  203. "Ban with custom reason",
  204. "Type in a custom ban reason",
  205. "",
  206. function(txt) RunConsoleCommand("ulx","ban","'" .. ply:Nick() .. "'",10,txt) end,
  207. function(txt) return false end
  208. )
  209. end):SetImage('icon16/stop.png')
  210. else
  211. adminmenu:AddOption("UnBan",function()
  212. RunConsoleCommand("ulx","unban",'_'..eid)
  213. end):SetImage'icon16/weather_sun.png'
  214. end
  215. a:Open()
  216. end
  217. end
  218. if mc==MOUSE_WHEEL_UP and LocalPlayer():IsAdmin() or LocalPlayer():IsSuperAdmin() or LocalPlayer():GetUserGroup() == "trialmod" or LocalPlayer():GetUserGroup() == "moderator" then
  219. end
  220. end
  221.  
  222. function Panel:Close()
  223. CloseDermaMenus()
  224. end
  225.  
  226. function Panel:PerformLayout( intW, intH )
  227. self.m_pnlAvatar:SetSize( intH -22, intH -22 )
  228. self.m_pnlAvatar:SetPos( 1, 10 )
  229. end
  230. vgui.Register( "SRPScoreboard_PlayerCard", Panel, "EditablePanel" )
  231.  
  232. local Panel = {}
  233. function Panel:Init()
  234. self.m_tblPlayersLeft = {}
  235. self.m_tblPlayersRight = {}
  236.  
  237. self.m_pnlLeftList = vgui.Create( "SRP_ScrollPanel", self )
  238. self.m_pnlRightList = vgui.Create( "SRP_ScrollPanel", self )
  239. end
  240.  
  241. local groupsSorted = {}
  242.  
  243. local number = 1
  244. local function sortGroups(t)
  245. for k, v in pairs(t) do
  246. sortGroups(v)
  247. groupsSorted[k] = number
  248. number = number + 1
  249. end
  250. end
  251.  
  252. local function GetPlayers()
  253. groupsSorted = {}
  254. sortGroups(ULib.ucl.getInheritanceTree())
  255.  
  256. local sort = {}
  257.  
  258. for k, v in pairs( player.GetAll() ) do
  259. if IsValid( v ) then
  260. table.insert( sort, v )
  261. end
  262. end
  263.  
  264. // Sort that shit
  265. local rankSort = function( a, b )
  266. local arank = groupsSorted[a:GetUserGroup() or "user"] or 9
  267. local brank = groupsSorted[b:GetUserGroup() or "user"] or 9
  268.  
  269. return arank < brank
  270. end
  271.  
  272. table.sort( sort, rankSort )
  273.  
  274. return sort
  275. end
  276.  
  277.  
  278. function Panel:Refresh()
  279. for k, v in pairs( self.m_tblPlayersLeft ) do
  280. if ValidPanel( v ) then v:Remove() end
  281. end
  282. for k, v in pairs( self.m_tblPlayersRight ) do
  283. if ValidPanel( v ) then v:Remove() end
  284. end
  285.  
  286. self.m_pnlLeftList:Clear()
  287. self.m_pnlRightList:Clear()
  288.  
  289. self.m_tblPlayersLeft = {}
  290. self.m_tblPlayersRight = {}
  291.  
  292. local players = GetPlayers()
  293. local numPlayers = #players
  294.  
  295. if self:GetWide() >= 1024 then
  296. for i = 1, numPlayers do
  297. if i - 1 < numPlayers / 2 then
  298. table.insert( self.m_tblPlayersLeft, self:CreatePlayerCard(players[i], self.m_pnlLeftList) )
  299. else
  300. table.insert( self.m_tblPlayersRight, self:CreatePlayerCard(players[i], self.m_pnlRightList) )
  301. end
  302. end
  303. else
  304. for i = 1, numPlayers do
  305. table.insert( self.m_tblPlayersLeft, self:CreatePlayerCard(players[i], self.m_pnlLeftList) )
  306. end
  307. end
  308.  
  309. --[[for i = 1, numPlayers/2 do
  310. if self:GetWide() >= 1024 and i % 2 == 0 then
  311. table.insert( self.m_tblPlayersRight, self:CreatePlayerCard(players[i], self.m_pnlRightList) )
  312. else
  313. table.insert( self.m_tblPlayersLeft, self:CreatePlayerCard(players[i], self.m_pnlLeftList) )
  314. end
  315. end]]
  316.  
  317. self:InvalidateLayout()
  318. end
  319.  
  320. function Panel:CreatePlayerCard( pPlayer, pnlParent )
  321. local card = vgui.Create( "SRPScoreboard_PlayerCard", pnlParent )
  322. card:SetPlayer( pPlayer )
  323. pnlParent:AddItem( card )
  324. return card
  325. end
  326.  
  327.  
  328. function Panel:GetJobCounts()
  329. local ret = {
  330. [2] = 0,
  331. [3] = 0,
  332. [4] = 0,
  333. [21] = 0,
  334. }
  335.  
  336. for k, v in pairs( player.GetAll() ) do
  337. if not GAMEMODE.Jobs:GetPlayerJobID( v ) then continue end
  338. local id = GAMEMODE.Jobs:GetPlayerJobID( v )
  339. if not ret[id] then continue end
  340. ret[id] = ret[id] +1
  341. end
  342.  
  343. return ret
  344. end
  345.  
  346. function Panel:GetJobCounts2()
  347. local ret = {
  348. [6] = 0,
  349. [9] = 0,
  350. [10] = 0,
  351. [7] = 0,
  352. }
  353.  
  354. for k, v in pairs( player.GetAll() ) do
  355. if not GAMEMODE.Jobs:GetPlayerJobID( v ) then continue end
  356. local id = GAMEMODE.Jobs:GetPlayerJobID( v )
  357. if not ret[id] then continue end
  358. ret[id] = ret[id] +1
  359. end
  360.  
  361. return ret
  362. end
  363.  
  364. function Panel:PaintOver( intW, intH )
  365. surface.SetDrawColor( 0, 0, 0, 255 )
  366. surface.DrawRect( 0, 0, intW, 1 ) --top
  367. surface.DrawRect( 0, 0, 1, intH ) --left side
  368.  
  369. surface.DrawRect( intW -1, 0, 1, intH ) --right side
  370. surface.DrawRect( 0, intH -1, intW, 1 ) --bottom
  371.  
  372. surface.SetTexture( TEX_GRADIENT_DOWN )
  373. surface.SetDrawColor( 0, 0, 0, 125 )
  374. surface.DrawTexturedRect( 0, 0, intW, 500 )
  375.  
  376. draw.SimpleText(
  377. GetHostName(),
  378. "Scoreboard_Trebuchet38",
  379. intW -5,
  380. 0,
  381. Color(255, 255, 255, 255),
  382. TEXT_ALIGN_RIGHT
  383. )
  384. draw.SimpleText(
  385. #player.GetAll() .."/".. game.MaxPlayers() .. " Players",
  386. "Scoreboard_Trebuchet24",
  387. intW -5,
  388. 38 +24,
  389. Color(255, 255, 255, 255),
  390. TEXT_ALIGN_RIGHT,
  391. TEXT_ALIGN_BOTTOM
  392. )
  393. -- GGS
  394. local y = 77
  395. for k, v in pairs( self:GetJobCounts() ) do
  396. draw.SimpleText(
  397. GAMEMODE.Jobs:GetJobByID( k ).Name.. ": ".. v,
  398. "Scoreboard_Trebuchet18",
  399. intW -5,
  400. y,
  401. Color(255, 255, 255, 255),
  402. TEXT_ALIGN_RIGHT
  403. )
  404.  
  405. y = y +18
  406. end
  407.  
  408. local y2 = 77
  409. for k2, v2 in pairs( self:GetJobCounts2() ) do
  410. draw.SimpleText(
  411. GAMEMODE.Jobs:GetJobByID( k2 ).Name.. ": ".. v2,
  412. "Scoreboard_Trebuchet18",
  413. intW -120,
  414. y2,
  415. Color(255, 255, 255, 255),
  416. TEXT_ALIGN_RIGHT
  417. )
  418.  
  419. y2 = y2 +18
  420. end
  421. end
  422.  
  423.  
  424.  
  425. function Panel:PerformLayout( intW, intH )
  426. local headerTall = 155
  427. local listPaddingW = 0
  428. local listPaddingH = 0
  429.  
  430. if intW < 1024 then
  431. self.m_pnlLeftList:SetPos( listPaddingW, listPaddingH +headerTall )
  432. self.m_pnlLeftList:SetSize( intW -(listPaddingW *2), intH -(listPaddingH *2) -headerTall )
  433. self.m_pnlRightList:SetVisible( false )
  434.  
  435. for k, v in pairs( self.m_tblPlayersLeft ) do
  436. v:SetTall( 48 )
  437. v:DockMargin( 5, 0, 5, -18 )
  438. v:Dock( TOP )
  439. end
  440. else
  441. self.m_pnlRightList:SetVisible( true )
  442.  
  443. local wide = (intW -(listPaddingW *3)) /2
  444.  
  445. self.m_pnlLeftList:SetPos( listPaddingW, listPaddingH +headerTall )
  446. self.m_pnlLeftList:SetSize( wide, intH -(listPaddingH *2) -headerTall )
  447.  
  448. self.m_pnlRightList:SetPos( wide +(listPaddingW *2), listPaddingH +headerTall )
  449. self.m_pnlRightList:SetSize( wide, intH -(listPaddingH *2) -headerTall )
  450.  
  451. for k, v in pairs( self.m_tblPlayersLeft ) do
  452. v:SetTall( 48 )
  453. v:DockMargin( 5, 0, 5, -18 )
  454. v:Dock( TOP )
  455. end
  456.  
  457. for k, v in pairs( self.m_tblPlayersRight ) do
  458. v:SetTall( 48 )
  459. v:DockMargin( 5, 0, 5, -18 )
  460. v:Dock( TOP )
  461. end
  462. end
  463. end
  464.  
  465. function Panel:Close()
  466. CloseDermaMenus()
  467. end
  468. vgui.Register( "SRPScoreboard", Panel, "SRP_FramePanel" )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement