Advertisement
Guest User

Untitled

a guest
May 26th, 2022
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.48 KB | None | 0 0
  1. GBan = GBan or {}
  2. GBan.Config = GBan.Config or {}
  3.  
  4. GBan.Config.banned_pos = Vector(784.172729, -4445.334961, 136.031250)
  5. GBan.Config.banned_model = 'models/player/charple.mdl'
  6. GBan.Config.banned_maxspeed = 180
  7. GBan.Config.max_seconds = 86400 -- 24 часа
  8.  
  9. local META = FindMetaTable( 'Player' )
  10. function META:IsGBan()
  11.  
  12. return self:GetNWBool( 'GBan' )
  13.  
  14. end
  15.  
  16. if SERVER then
  17.  
  18. util.AddNetworkString( 'gban_send_ply' )
  19.  
  20. sql.Query( 'CREATE TABLE IF NOT EXISTS gban( SteamID TEXT PRIMARY KEY, Time NUMBER, Date NUMBER, Reason TEXT, Judge TEXT )' )
  21.  
  22. function GBan.GiveBanPlayer( ePly, eAdmin, sReason, nSeconds )
  23.  
  24. if not IsValid( ePly ) or not ePly:IsPlayer() then print( '[GBan] GiveBanPlayer ERROR #01' ) return end
  25.  
  26. local is_gban = ePly:IsGBan()
  27. if is_gban then print( '[GBan] GiveBanPlayer ERROR #02' ) return end
  28.  
  29. if not sReason or not isstring( sReason ) then print( '[GBan] GiveBanPlayer WARNING #01' ) sReason = 'Причина не указана' end
  30. if not nSeconds or not isnumber( nSeconds ) then print( '[GBan] GiveBanPlayer WARNING #02' ) nSeconds = 60 end
  31. if ( nSeconds > GBan.Config.max_seconds ) then print( '[GBan] GiveBanPlayer WARNING #03' ) nSeconds = GBan.Config.max_seconds end
  32. if ( nSeconds <= 0 ) then print( '[GBan] GiveBanPlayer WARNING #04' ) nSeconds = 1 end
  33. nSeconds = math.floor( nSeconds )
  34. -- Action
  35.  
  36. ePly:changeTeam( TEAM_BANNED, true )
  37. ePly:SetNWBool( 'GBan', true )
  38. ePly:SetNWInt( 'GBanTime', nSeconds )
  39. if ePly:InVehicle() then ply:ExitVehicle() end
  40. ePly:Spawn()
  41. ePly:StripWeapons()
  42. ePly:StripAmmo()
  43. local nick_admin = eAdmin and eAdmin:Nick() or 'CONSOLE'
  44. ePly:ChatPrint( 'Администратор '..nick_admin..' выдал Вам GBan по причине: '..sReason )
  45.  
  46. timer.Create( 'GBanPlayer'..ePly:SteamID(), nSeconds, 1, function() GBan.RemoveBanPlayerOffline( ePly:SteamID() ) end )
  47.  
  48. net.Start( 'gban_send_ply' )
  49. net.WriteBool( true )
  50. net.WriteUInt( nSeconds, 16 )
  51. net.Send( ePly )
  52.  
  53. local values = Format( '(%s, %i, %i, %s, %s)', sql.SQLStr( ePly:SteamID() ), nSeconds, os.time(), sql.SQLStr( sReason ), sql.SQLStr( nick_admin ) )
  54. print( values )
  55. sql.Query( 'INSERT INTO gban( SteamID, Time, Date, Reason, Judge ) VALUES '..values )
  56.  
  57. if eAdmin then eAdmin:ChatPrint( 'Вы выдали GBan игроку '..ePly:Nick()..' по причине: '..sReason..' на '..nSeconds..' секунд' ) end
  58.  
  59. print( '[GBan] Player '..ePly:SteamID()..' has banned on '..nSeconds..' sec!' )
  60.  
  61. end
  62.  
  63. function GBan.GiveBanPlayerOffline( sSteamID, eAdmin, nSeconds, sReason )
  64.  
  65. if not sSteamID then print( '[GBan] GiveBanPlayerOffline ERROR #03' ) return end
  66.  
  67. local ply = player.GetBySteamID( sSteamID )
  68. if ply and IsValid( ply ) then GBan.GiveBanPlayer( ply, eAdmin, sReason, nSeconds ) return end
  69.  
  70. if ( nSeconds > GBan.Config.max_seconds ) then print( '[GBan] GiveBanPlayerOffline WARNING #03' ) nSeconds = GBan.Config.max_seconds end
  71. if ( nSecond <= 0 ) then print( '[GBan] GiveBanPlayerOffline WARNING #04' ) nSeconds = 1 end
  72. nSeconds = math.floor( nSeconds )
  73.  
  74. local judge = eAdmin and eAdmin:Nick() or 'CONSOLE'
  75. local values = Format( '(%s, %i, %i, %s, %s)', sql.SQLStr( sSteamID ), nSeconds, os.time(), sql.SQLStr( sReason ), sql.SQLStr( judge ) )
  76. sql.Query( 'INSERT INTO gban( SteamID, Time, Date, Reason, Judge ) VALUES '..values )
  77.  
  78. if eAdmin then eAdmin:ChatPrint( 'Вы выдали GBan игроку '..sSteamID ) end
  79.  
  80. print( '[GBan] Player '..sSteamID..' has banned on '..nSeconds..' sec!' )
  81.  
  82. end
  83.  
  84. function GBan.RemoveBanPlayer( ePly, eAdmin )
  85.  
  86. local is_gban = ePly:IsGBan()
  87. if not is_gban then print( '[GBan] RemoveBanPlayer ERROR #04' ) return end
  88.  
  89. ePly:SetNWBool( 'GBan', false )
  90. ePly:SetNWInt( 'GBanTime', 0 )
  91. ePly:changeTeam( TEAM_CITIZEN, true )
  92. ePly:Kill()
  93.  
  94. net.Start( 'gban_send_ply' )
  95. net.WriteBool( false )
  96. net.WriteUInt( 0, 16 )
  97. net.Send( ePly )
  98.  
  99. if timer.Exists( 'GBanPlayer'..ePly:SteamID() ) then timer.Remove( 'GBanPlayer'..ePly:SteamID() ) end
  100.  
  101. sql.Query( 'DELETE FROM gban WHERE SteamID = '..sql.SQLStr( ePly:SteamID() ) )
  102.  
  103. if eAdmin then
  104.  
  105. ePly:ChatPrint( 'Вам снял GBan игрок '..eAdmin:Nick() )
  106. eAdmin:ChatPrint( 'Вы сняли GBan игроку '..ePly:Nick() )
  107.  
  108. end
  109.  
  110. print( '[GBan] Player '..ePly:SteamID()..' has removed gban!' )
  111.  
  112. end
  113.  
  114. function GBan.RemoveBanPlayerOffline( sSteamID, eAdmin )
  115.  
  116. if not sSteamID then print( '[GBan] ERROR #03' ) return end
  117.  
  118. local ply = player.GetBySteamID( sSteamID )
  119. if ply and IsValid( ply ) then GBan.RemoveBanPlayer( ply, eAdmin ) return end
  120.  
  121. sql.Query( 'DELETE FROM gban WHERE SteamID = '..sql.SQLStr( sSteamID ) )
  122.  
  123. print( '[GBan] Player '..sSteamID..' has removed gban!' )
  124.  
  125. end
  126.  
  127. hook.Add( 'PlayerInitialSpawn', 'GBan.JailerTheFirstSpawn', function( ePly )
  128.  
  129. timer.Simple( 2, function()
  130.  
  131. local steamid = sql.SQLStr( ePly:SteamID() )
  132. local time = sql.QueryValue( 'SELECT Time FROM gban WHERE SteamID='..steamid )
  133. if not time then return end
  134.  
  135. time = tonumber( time ) -- only seconds!
  136. local date = sql.QueryValue( 'SELECT Date FROM gban WHERE SteamID='..steamid )
  137.  
  138. local finish_time = time + tonumber( date )
  139. local current_time = os.time()
  140.  
  141. if ( finish_time <= current_time ) then sql.Query( 'DELETE FROM gban WHERE SteamID = '..steamid ) ePly:ChatPrint( 'Срок вашего GBan закончился!' ) return end
  142.  
  143. ePly:changeTeam( TEAM_BANNED, true )
  144. ePly:SetNWBool( 'GBan', true )
  145. ePly:SetNWInt( 'GBanTime', time )
  146. ePly:Spawn()
  147.  
  148. net.Start( 'gban_send_ply' )
  149. net.WriteBool( true )
  150. net.WriteUInt( time, 16 )
  151. net.Send( ePly )
  152.  
  153. timer.Create( 'GBanPlayer'..ePly:SteamID(), time, 1, function() GBan.RemoveBanPlayerOffline( ePly:SteamID() ) end )
  154.  
  155. end )
  156.  
  157. end )
  158.  
  159. hook.Add( 'PlayerSpawn', 'GBan.JailerSpawn', function( ePly )
  160.  
  161. if not ePly:IsGBan() then return end
  162.  
  163. timer.Simple( 0.1, function()
  164.  
  165. ePly:SetPos( GBan.Config.banned_pos )
  166. ePly:SetModel( GBan.Config.banned_model )
  167. ePly:SetCrouchedWalkSpeed( GBan.Config.banned_maxspeed )
  168. ePly:SetRunSpeed( GBan.Config.banned_maxspeed )
  169. ePly:SetWalkSpeed( GBan.Config.banned_maxspeed )
  170. ePly:StripWeapons()
  171.  
  172. end )
  173.  
  174. end )
  175.  
  176. hook.Add( 'PlayerDisconnected', 'GBan.UpdateTimeForJailer', function( ePly )
  177.  
  178. if not ePly:IsGBan() then return end
  179.  
  180. local steamid, time = sql.SQLStr( ePly:SteamID() ), math.floor( timer.TimeLeft( 'GBanPlayer'..ePly:SteamID() ) )
  181. sql.Query( 'UPDATE gban SET Time='.. time ..' WHERE SteamID='.. steamid )
  182.  
  183. timer.Remove( 'GBanPlayer'..ePly:SteamID() )
  184.  
  185. end)
  186.  
  187. -- Restrict
  188.  
  189. hook.Add( 'CanPlayerSuicide', 'GBan.RestrictHook', function( ePly )
  190.  
  191. if ePly:IsGBan() then return false end
  192.  
  193. end )
  194.  
  195. hook.Add( 'PlayerLoadout', 'GBan.RestrictHook', function( ePly )
  196.  
  197. if ePly:IsGBan() then return false end
  198.  
  199. end )
  200.  
  201. hook.Add( 'PlayerSpawnObject', 'GBan.RestrictHook', function( ePly )
  202.  
  203. if ePly:IsGBan() then return false end
  204.  
  205. end)
  206.  
  207. hook.Add( 'PlayerSpawnSENT', 'GBan.RestrictHook', function( ePly )
  208.  
  209. if ePly:IsGBan() then return false end
  210.  
  211. end)
  212.  
  213. hook.Add( 'PlayerSpawnNPC', 'GBan.RestrictHook', function( ePly )
  214.  
  215. if ePly:IsGBan() then return false end
  216.  
  217. end)
  218.  
  219. hook.Add( 'PlayerSpawnSWEP', 'GBan.RestrictHook', function( ePly )
  220.  
  221. if ePly:IsGBan() then return false end
  222.  
  223. end)
  224.  
  225. hook.Add( 'PlayerSpawnVehicle', 'GBan.RestrictHook', function( ePly )
  226.  
  227. if ePly:IsGBan() then return false end
  228.  
  229. end)
  230.  
  231. hook.Add( 'PlayerGiveSWEP', 'GBan.RestrictHook', function( ePly )
  232.  
  233. if ePly:IsGBan() then return false end
  234.  
  235. end)
  236.  
  237. hook.Add( 'PlayerCanPickupWeapon', 'GBan.RestrictHook', function( ePly )
  238.  
  239. if ePly:IsGBan() then return false end
  240.  
  241. end)
  242.  
  243. hook.Add( 'PlayerCanPickupItem', 'GBan.RestrictHook', function( ePly )
  244.  
  245. if ePly:IsGBan() then return false end
  246.  
  247. end )
  248.  
  249. --hook.Add( 'playerCanChangeTeam', "GhostBan_CantChangeJob",function(ply)
  250.  
  251. -- if ePly:IsGBan() then return false end
  252.  
  253. --end)
  254.  
  255. hook.Add( 'PlayerCanJoinTeam', 'GBan.RestrictHook', function( ePly )
  256.  
  257. if ePly:IsGBan() then return false end
  258.  
  259. end )
  260.  
  261. hook.Add( 'CanPlayerEnterVehicle', 'GBan.RestrictHook', function( ePly )
  262.  
  263. if ePly:IsGBan() then return false end
  264.  
  265. end )
  266.  
  267.  
  268. elseif CLIENT then
  269.  
  270. local w = ScrW()
  271. local h = ScrH()
  272.  
  273. surface.CreateFont( 'TheShitFont', {
  274.  
  275. font = "Trebuchet24",
  276. size = ( h + w ) * .011,
  277. weight = 300,
  278. blursize = 0,
  279. scanlines = 0,
  280. antialias = false,
  281. underline = false,
  282. italic = false,
  283. strikeout = false,
  284. symbol = false,
  285. rotary = false,
  286. shadow = true,
  287. additive = false,
  288. outline = false,
  289.  
  290. } )
  291.  
  292. local COLOR_WHITE = Color( 255, 255, 255 )
  293. local COLOR_BLACK = Color( 0, 0, 0 )
  294.  
  295. net.Receive( 'gban_send_ply',function()
  296.  
  297. to_ban = net.ReadBool()
  298. time = net.ReadUInt( 16 )
  299.  
  300. if not to_ban then hook.Remove( 'HUDPaint', 'GBan.DrawInfoPanel' ) return end
  301.  
  302. timer.Create( 'GBanTime', time, 1, function() end )
  303.  
  304. hook.Add( 'HUDPaint', 'GBan.DrawInfoPanel', function()
  305.  
  306. if not LocalPlayer():IsGBan() then return end
  307. local time = timer.Exists( 'GBanTime' ) and math.floor( timer.TimeLeft( 'GBanTime' ) ) or 0
  308. draw.SimpleTextOutlined( 'До снятия GBan осталось '.. time ..' секунд', 'TheShitFont', w / 2, 0, COLOR_WHITE, TEXT_ALIGN_CENTER, TEXT_ALIGN_TOP, 1, COLOR_BLACK )
  309.  
  310. end)
  311.  
  312. end)
  313.  
  314. end
  315.  
  316. if SAM_LOADED then return end
  317. local sam, cmd, lang = sam, sam.command, sam.language
  318. local cat = 'gBan'
  319.  
  320. cmd.set_category( cat )
  321.  
  322. cmd.new( 'gban' )
  323.  
  324. :Help( 'Превращает игрока в крысу' )
  325.  
  326. :SetPermission( 'gban', 'admin' )
  327.  
  328. :AddArg( 'player' )
  329. :AddArg( 'number', { hint = 'Секунды', min = 1, max = GBan.Config.max_seconds, round = true, optional = true, default = 250 } )
  330. :AddArg( 'text', { hint = 'Причина' } )
  331.  
  332. :OnExecute( function( eAdmin, tTargets, nSeconds, sReason )
  333.  
  334. if #tTargets > 1 then return end
  335.  
  336. for i=1, #tTargets do
  337.  
  338. local ply = tTargets[i]
  339.  
  340. GBan.GiveBanPlayer( ply, eAdmin, sReason, nSeconds )
  341.  
  342. end
  343.  
  344. end )
  345.  
  346. :End()
  347.  
  348. cmd.new( 'ungban' )
  349.  
  350. :Help( 'Убирает у игрока gban' )
  351.  
  352. :SetPermission( 'ungban', 'admin' )
  353.  
  354. :AddArg( 'player' )
  355.  
  356. :OnExecute( function( eAdmin, target )
  357.  
  358. if #target > 1 then return end
  359.  
  360. for i=1, #target do
  361.  
  362. local ply = target[i]
  363.  
  364. GBan.RemoveBanPlayer( ply, eAdmin )
  365.  
  366. end
  367.  
  368. end )
  369.  
  370. :End()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement