4 Commits
wn-fr ... wn-pl

Author SHA1 Message Date
lifestorm
6069f218dc Create placeholder files 2024-08-09 21:15:12 +03:00
lifestorm
7b44937899 Removed sensitive data due to GitHub's request 2024-08-09 20:44:58 +03:00
lifestorm
0cfdd2023c Update README.md 2024-08-05 18:56:31 +03:00
lifestorm
9c918c46e5 Upload 2024-08-04 23:12:27 +03:00
5616 changed files with 1312697 additions and 858095 deletions

View File

@@ -1,11 +1,11 @@
# Willard Networks: France (Echo One)
This branch contains files related to the **Willard Networks: Echo One**. They were retrieved on 2024/08/04 and are presented as is with minimal edits. This means that potential developers' bugs have been kept in their original form and it is up to you to resolve them. We do not and will not provide direct support (i.e. regular updates or patches). However, you can always create an issue, pointing out the problem.
# Willard Networks: Poland (Veles)
This branch contains files related to the **Willard Networks: Veles**. They were retrieved on 2024/08/04 and are presented as is with minimal edits. This means that potential developers' bugs have been kept in their original form and it is up to you to resolve them. We do not and will not provide direct support (i.e. regular updates or patches). However, you can always create an issue, pointing out the problem.
**The files provided contain:**
* Half-Life 2 RPG framework by Willard Networks, used on the French server as of 2024/08/04.
* Settings (data/\*, settings/\*) used on the French server as of 2024/08/04.
* Credentials from the French server database (including the master and SAM database).
* Helix logs (data/helix/logs) from the French server as of 2024/08/04.
* Half-Life 2 RPG framework by Willard Networks, used on the Polish server as of 2024/08/04.
* Settings (data/\*, settings/\*) used on the Polish server as of 2024/08/04.
* Credentials from the Polish server database (including the master and SAM database).
* Helix logs (data/helix/logs) from the Polish server as of 2024/08/04.
**The files provided do not contain:**
* Exported dump of databases (including the master and SAM database), since these files are overweight and cannot be uploaded to GitHub. Despite this, it is included in builds distributed via [The Twilight Zone](https://wnsrc.plymouth.thetwilightzone.ru/).

211
addons/LICENSE.txt Normal file
View File

@@ -0,0 +1,211 @@
## Preamble
1. This Agreement, created on:
13th November 2023
(hereinafter: Effective Date)
governs the relationship between
[Atle](https://www.gmodstore.com/users/76561198002319944)
(hereinafter: Licensee)
and
[Stellio AS](https://www.gmodstore.com/teams/06f5de34-3186-4d26-baf8-926899b4b3ae)
(hereinafter: Licensor).
This Agreement sets the terms, rights, restrictions and obligations on using
[eProtect - Keep exploiters/cheaters at bay!](https://www.gmodstore.com/market/view/7794c410-bcf4-49d3-aba2-f253cfb15344)
(hereinafter: The Software)
created and owned by Licensor, as detailed herein.
## License Grant
2. Licensor hereby grants Licensee a Personal, Non-assignable & non-transferable,
Commercial, Royalty free, Including the rights to create but not distribute
derivative works, Non-exclusive license, all with accordance with the terms
set forth and other legal restrictions set forth in 3rd party software used
while running The Software.
3. **Limited**: licensee may use The Software for the purpose of:
- a. running The Software on Licensees Website[s] and Server[s]; and
- b. publishing The Softwares output to Licensee and 3rd Parties; and
- c. modify The Software to suit Licensees needs and specifications;
### Non Assignable & Non-Transferable
4. Licensee may not assign or transfer his rights and duties under this
Agreement.
### Commercial, Royalty Free
5. Licensee may use The Software for any purpose, including paid-services,
without any royalties.
### The Right to Create Derivative Works
6. Licensee may create derivative works based on The Software, including
amending The Softwares source code, modifying it, integrating it into a
larger work or removing portions of Software, as long as no distribution of the derivative works is made.
**This no longer applies if**:
- a. it is stated otherwise in this Agreement's amendments; or
- b. the Software uses a Digital Rights Management system ("DRM"), see clause 22 "Digital Rights Management ("DRM") system";
Any derivative works or modifications of The Software's source code must be in
accordance with the terms set forth in clauses 21. and 22.
## Term & Termination
7. The Term of this license shall be until terminated. Licensor may terminate
this Agreement, including Licensees license in the case where Licensee:
- a. was in breach of this license's terms and conditions and such
breach was not cured, immediately upon notification; or
- b. was in breach of the terms of clause 2 to this Agreement; or
- c. otherwise entered into any arrangement which caused Licensor to be unable
to enforce his rights under this Agreement; or
- d. was granted a full refund by their own request; or
- e. issued a claim or chargeback on the payment made for The Software; or
- f. received access to The Software for free, and only for a limited time or through a conditional agreement where the agreement has ended;
## Upgrades, Updates and Fixes
8. Licensor may provide Licensee, from time to time, with Upgrades, Updates or
Fixes, as detailed herein and according to his sole discretion. Licensee
hereby warrants to keep The Software up-to-date and install all relevant
updates and fixes, and may, at his sole discretion, purchase upgrades,
according to the rates set by Licensor. Licensor may provide any update or
Fix free of charge; however, nothing in this Agreement shall require Licensor
to provide Updates or Fixes.
9. **Upgrades**: for the purpose of this Agreement, an Upgrade shall be a material amendment
in The Software, which contains new features and or major performance
improvements.
10. **Updates**: for the purpose of this Agreement, an update shall be a minor amendment in
The Software, which may contain new features or minor improvements.
11. **Fixes**: for the purpose of this Agreement, a fix shall be a minor amendment in The
Software, intended to remove bugs or alter minor features which impair
The Software's functionality.
## Support
12. The Software is provided under an AS-IS basis and without any support, updates
or maintenance. Nothing in this Agreement shall require Licensor to provide
Licensee with support or fixes to any bug, failure, mis-performance or other
defect in The Software, except in the case where Licensor explicitly states
that he shall provide support or fixes to any bug, failure, mis-performance or
other defect in The Software.
### Bug Notification
13. Licensee may provide Licensor of details regarding any bug, defect or
failure in The Software promptly and with no delay from such event; Licensee
shall comply with Licensor's request for information regarding bugs, defects
or failures and furnish him with information, screenshots and try to
reproduce such bugs, defects or failures.
### Feature Request
14. Licensee may request additional features in The Software, provided, however,
that:
- a. Licensee shall waive any claim or right in such feature should
feature be developed by Licensor;
- b. Licensee shall be prohibited from developing the feature, or disclose such feature request, or feature, to
any 3rd party directly competing with Licensor or any 3rd party which may
be, following the development of such feature, in direct competition with
Licensor;
- c. Licensee warrants that feature does not infringe any 3rd
party patent, trademark, trade-secret or any other intellectual property
right; and
- d. Licensee developed, envisioned or created the feature
solely by himself.
## Liability
15. To the extent permitted under Law, The Software is provided under an AS-IS
basis. Licensor shall never, and without any limit, be liable for any damage,
cost, expense or any other payment incurred by Licensee as a result of
The Softwares actions, failure, bugs and/or any other interaction between The
Software and Licensee's end-equipment, computers, other software or any 3rd
party, end-equipment, computer or services. Moreover, Licensor shall never
be liable for any defect in source code written by Licensee when relying on
The Software or using The Softwares source code.
## Warranty
16. **Intellectual Property**:
licensor hereby warrants that The Software does not violate or infringe any
3rd party claims in regard to intellectual property, patents and/or
trademarks and that to the best of its knowledge no legal action has been
taken against it for any infringement or violation of any 3rd party
intellectual property rights.
17. The Software is provided without any warranty; Licensor hereby disclaims
any warranty that The Software shall be error free, without defects or
code which may cause damage to Licensees computers or to Licensee, and
that The Software shall be functional. Licensee shall be solely liable to
any damage, defect or loss incurred as a result of operating software and
undertake the risks contained in running The Software on Licensees
Server[s] and Website[s].
### Prior Inspection
18. Licensee hereby states that he inspected The Software thoroughly and found
it satisfactory and adequate to his needs, that it does not interfere with
his regular operation and that it does meet the standards and scope of his
computer systems and architecture. Licensee found that The Software
interacts with his development, website and server environment and that it
does not infringe any of End User License Agreement of any software Licensee
may use in performing his services. Licensee hereby waives any claims
regarding The Software's incompatibility, performance, results and features,
and warrants that he inspected The Software.
## Indemnification
19. Licensee hereby warrants to hold Licensor harmless and indemnify Licensor for
any lawsuit brought against it in regard to Licensees use of The Software
in means that violate, breach or otherwise circumvent this license,
Licensor's intellectual property rights or Licensor's title in The Software.
Licensor shall promptly notify Licensee in case of such legal action and
request Licensees consent prior to any settlement in relation to such
lawsuit or claim.
## Class Action Waiver
20. Licensee hereby agrees not to initiate class-action lawsuits against Licensor
in relation to this license and to compensate Licensor for any legal fees,
cost or attorney fees should any claim brought by Licensee against Licensor
be denied, in part or in full.
## Branding, Copyright, & Public Notice
21. Licensee hereby agrees not to remove the branding, copyright or other brand indicators in The Software, including but not limited
to the title of The Software. All copies of The Software must contain the same proprietary notices that appear on and in The Software,
including all copyright notices and branding embedded in The Software, which must remain unaltered
from the original and visible at all times, unless by specific prior arrangement by Licensor.
## Digital Rights Management ("DRM") system
22. If applicable to The Software, licensee hereby agrees not to attempt to tamper with, change, or otherwise modify
the DRM system bundled with The Software beyond what is advertised on The Software's market page, this Agreement's amendments
or other official sources made available by Licensor.
## Changes or amendments made to this Agreement
23. **Changes made by GmodStore**: we may make changes to this Agreement at any time, and, if we make changes, we will
take reasonable steps to let Licensee know about these changes.
24. **Amendments made by Licensor**: Licensor may make amendments to this Agreement at any time, and,
if they make amendments, they will take reasonable steps to let Licensee know about these amendments.
---
Agreement version: 2022-09-21

View File

@@ -0,0 +1 @@
<1F>

View File

@@ -1,9 +0,0 @@
"AddonInfo"
{
"name" "Chess"
"version" "1.3.10"
"author_name" "my_hat_stinks"
"author_url" ""
"info" "Let's play Chess"
"override" "0"
}

View File

@@ -1,214 +0,0 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
if SERVER then
AddCSLuaFile()
AddCSLuaFile( "chess/sh_player_ext.lua" )
AddCSLuaFile( "chess/cl_top.lua" )
AddCSLuaFile( "chess/cl_dermaboard.lua" )
include( "chess/sh_player_ext.lua" )
include( "chess/sv_sql.lua" )
else
include( "chess/sh_player_ext.lua" )
include( "chess/cl_top.lua" )
include( "chess/cl_dermaboard.lua" )
end
if SERVER then
function ChessBoard_DoOverrides()
if GAMEMODE.Name=="Cinema" then --Cinema overrides
hook.Add("CanPlayerEnterVehicle", "EnterSeat", function(ply, vehicle) --Overrides default func
if vehicle:GetClass() != "prop_vehicle_prisoner_pod" then return end
if vehicle.Removing then return false end
return (vehicle:GetOwner() == ply) or vehicle:GetNWBool( "IsChessSeat", false )
end)
end
end
hook.Add( "Initialize", "ChessBoardOverrides", ChessBoard_DoOverrides )
CreateConVar( "chess_wagers", 1, FCVAR_ARCHIVE, "Set whether players can wager on their chess games." )
CreateConVar( "chess_darkrp_wager", 1, FCVAR_ARCHIVE, "[DarkRP only] Wagers should use DarkRP wallet." )
CreateConVar( "chess_debug", 0, FCVAR_ARCHIVE, "Debug mode." )
CreateConVar( "chess_limitmoves", 1, FCVAR_ARCHIVE, "Enable 50 move rule." )
else -- CLIENT
CreateConVar( "chess_gridletters", 1, FCVAR_ARCHIVE, "Show grid letters." )
end
-- DarkRP --
------------
hook.Add("canArrest", "Chess PreventArrest", function( cop, target )
if not (IsValid(target) and target:GetNWBool("IsInChess", false)) then return end
local board = target:GetNWEntity( "ActiveChessBoard", nil )
if not (IsValid(board) and board:GetPlaying()) then return end
if target~=board:GetWhitePlayer() and target~=board:GetBlackPlayer() then return end
return false,"Cannot arrest players during a game in progress" -- Prevent arrest during Chess
end)
-- Admin Commands --
--------------------
local function SetupCommands()
if serverguard then
/////////////////
// Serverguard //
/////////////////
serverguard.permission:Add("Set Chess Elo")
if SERVER then
// Update function
local function SGUpdate(player, target, newElo, isDraughts)
if type(target)=="Player" and IsValid(target) then
if isDraughts then
target:SetDraughtsElo( newElo )
else
target:SetChessElo( newElo )
end
Chess_UpdateElo( target )
serverguard.Notify(nil,
SERVERGUARD.NOTIFY.GREEN, serverguard.player:GetName(player),
SERVERGUARD.NOTIFY.WHITE, isDraughts and " has set the Checkers Elo rating of " or " has set the Chess Elo rating of ",
SERVERGUARD.NOTIFY.RED, serverguard.player:GetName(target),
SERVERGUARD.NOTIFY.WHITE, " to ",
SERVERGUARD.NOTIFY.RED, tostring(newElo),
SERVERGUARD.NOTIFY.WHITE, "."
)
elseif (string.SteamID(target)) then
local success,reason = Chess_SetElo( target, newElo, isDraughts )
local queryObj = serverguard.mysql:Select("serverguard_users");
queryObj:Where("steam_id", target)
queryObj:Limit(1)
queryObj:Callback(function(result, status, lastID)
local name = target
if (type(result) == "table" and #result > 0) then
name = result[1].name or name
end
if success then
serverguard.Notify(nil,
SERVERGUARD.NOTIFY.GREEN, serverguard.player:GetName(player),
SERVERGUARD.NOTIFY.WHITE, isDraughts and " has set the Checkers Elo rating of " or " has set the Chess Elo rating of ",
SERVERGUARD.NOTIFY.RED, name,
SERVERGUARD.NOTIFY.WHITE, " to ",
SERVERGUARD.NOTIFY.RED, tostring(newElo),
SERVERGUARD.NOTIFY.WHITE, "."
)
else
serverguard.Notify(player, SERVERGUARD.NOTIFY.RED, ("Could not set elo. (%s)"):format(tostring(reason)) )
end
end)
queryObj:Execute()
else
serverguard.Notify(player, SGPF("cant_find_player_with_identifier"))
end
end
// Chess command
local command = {}
command.help = "Set a player's Chess Elo rating."
command.command = "setelo"
command.arguments = {"player", "elo"}
command.permissions = {"Set Chess Elo"}
command.aliases = {"setelochess", "chesselo", "setchess", "setchesselo"}
function command:Execute(player, silent, arguments)
local target = util.FindPlayer(arguments[1], player, true)
local newElo = tonumber(arguments[2]) or 1400
SGUpdate( player, IsValid(target) and target or arguments[1], newElo, false )
end
serverguard.command:Add(command)
// Draughts command
local command = {}
command.help = "Set a player's Checkers Elo rating."
command.command = "setelocheckers"
command.arguments = {"player", "elo"}
command.permissions = {"Set Chess Elo"}
command.aliases = {"setcheckers", "setcheckerselo", "checkerselo", "setelodraughts", "setdraughts", "setdraughtselo", "draughtselo"}
function command:Execute(player, silent, arguments)
local target = util.FindPlayer(arguments[1], player, true)
local newElo = tonumber(arguments[2]) or 1400
SGUpdate( player, IsValid(target) and target or arguments[1], newElo, true )
end
serverguard.command:Add(command)
end
end
if ulx then
/////////
// ULX //
/////////
// Update
local function ULXUpdate(calling_ply, target, newElo, isDraughts)
if CLIENT then return end
if type(target)=="Player" and IsValid(target) then
if isDraughts then
target:SetDraughtsElo( newElo )
else
target:SetChessElo( newElo )
end
Chess_UpdateElo( target )
ulx.fancyLogAdmin( calling_ply, "#A set the #s Elo rating of #T to #i.", isDraughts and "Checkers" or "Chess", target, newElo )
elseif (string.SteamID(target or "")) then
local success,reason = Chess_SetElo( target, newElo, isDraughts )
if success then
ulx.fancyLogAdmin( calling_ply, "#A set the #s Elo rating of #s to #i.", isDraughts and "Checkers" or "Chess", target, newElo )
else
ULib.tsayError( calling_ply, ("Could not set elo. (%s)"):format(tostring(reason)) )
end
else
ULib.tsayError( calling_ply, "Invalid SteamID or Player." )
end
end
// Autocomplete
local function AutoComplete(...) return ULib.cmds.PlayerArg.complete(ULib.cmds.PlayerArg, ...) end
// Chess command
local function SetChessElo( calling_ply, steamid, newElo )
local target = ULib.getUser( steamid or "", true, calling_ply )
ULXUpdate( calling_ply, IsValid(target) and target or steamid, newElo, false )
end
local setchess = ulx.command( "Chess", "ulx chesselo", SetChessElo, {"!setelo", "!setelochess", "!chesselo", "!setchess", "!setchesselo"}, false, false, true )
setchess:addParam{ type=ULib.cmds.StringArg, hint="Player or SteamID", autocomplete_fn=AutoComplete }
setchess:addParam{ type=ULib.cmds.NumArg, hint="New Elo", min=0, default=1400 }
setchess:defaultAccess( ULib.ACCESS_SUPERADMIN )
setchess:help( "Set Chess Elo rating for user." )
// Draughts command
local function SetDraughtsElo( calling_ply, steamid, newElo )
local target = ULib.getUser( steamid, true, calling_ply )
ULXUpdate( calling_ply, IsValid(target) and target or steamID, newElo, true )
end
local setdraughts = ulx.command( "Chess", "ulx checkerselo", SetDraughtsElo, {"!setelocheckers", "!setcheckers", "!setcheckerselo", "!checkerselo", "!setelodraughts", "!setdraughts", "!setdraughtselo", "!draughtselo"}, false, false, true )
setdraughts:addParam{ type=ULib.cmds.StringArg, hint="Player or SteamID", autocomplete_fn=AutoComplete }
setdraughts:addParam{ type=ULib.cmds.NumArg, hint="New Elo", min=0, default=1400 }
setdraughts:defaultAccess( ULib.ACCESS_SUPERADMIN )
setdraughts:help( "Set Checkers Elo rating for user." )
end
end
hook.Add( "Initialize", "ChessBoardPermissions", SetupCommands )

View File

@@ -1,174 +0,0 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local PanelCol = {
Main = Color(0,0,0,200), Hover = Color(0,255,0,50), Selected = Color(150,50,50,170),
Move = Color(10,25,150,150), HasMoved = Color(50,50,50,100), Text = Color(0,0,0,255),
GridWhite = Color(255, 248, 220), GridBlack = Color(210, 180, 140),
White = Color(180,180,180), Black = Color(0,0,0),
}
-- local ColText = Color(50,50,50,200)
-- local ColBlack,ColWhite = Color(0,0,0,120),Color(255,255,255,10)
local NumToLetter = {"a", "b", "c", "d", "e", "f", "g", "h", ["a"]=1, ["b"]=2, ["c"]=3, ["d"]=4, ["e"]=5, ["f"]=6, ["g"]=7, ["h"]=8} --Used extensively for conversions
surface.CreateFont( "ChessPieces", { font = "Arial", size = 64, weight = 300})
function Chess_Open2DBoard( board )
if not IsValid(board) then return end
if IsValid( Chess_2DDermaPanel ) then Chess_2DDermaPanel:Remove() end
Chess_2DDermaPanel = vgui.Create( "DFrame" )
local frame = Chess_2DDermaPanel
frame:SetTitle( "2D Game Board" )
frame:SetSize( 740, 760 )
frame:SetPos( (ScrW()/2)-370, (ScrH()/2)-380 )
frame.Paint = function( s,w,h )
if not IsValid(board) then
s:Remove()
end
draw.RoundedBox( 8, 0, 0, w, h, PanelCol.Main )
end
frame:MakePopup()
local pnlBoard = vgui.Create( "DPanel", frame )
pnlBoard:SetSize( 720, 720 )
pnlBoard:SetPos(10,30)
pnlBoard.Squares = {}
pnlBoard.Paint = function() end
local function DoTiles(swapped)
if pnlBoard.Squares then
for _,v in pairs(pnlBoard.Squares) do
for _,pnl in pairs(v) do
pnl:Remove()
end
end
end
for i=0,7 do
pnlBoard.Squares[i] = {}
for n=0,7 do
local pnl = vgui.Create( "DModelPanel", pnlBoard )
pnlBoard.Squares[i][n] = pnl
pnl:SetPos( (swapped and 7-i or i)*90, (swapped and 7-n or n)*90 )
pnl:SetSize(90,90)
pnl.GridCol = (((i+n)%2)==1) and PanelCol.GridBlack or PanelCol.GridWhite
pnl.GridPos = {i,n}
pnl.oPaint = pnl.Paint
pnl.Paint = function(s,w,h)
surface.SetDrawColor( s.GridCol )
surface.DrawRect( 0,0, w,h )
if not IsValid(board) then return end
if s:IsHovered() then
surface.SetDrawColor( PanelCol.Hover )
surface.DrawRect( 0,0, w,h )
end
if board.Selected and board.Selected[1]==s.GridPos[1] and board.Selected[2]==s.GridPos[2] then
surface.SetDrawColor( PanelCol.Selected )
surface.DrawRect( 0,0, w,h )
end
if board:GetTableGrid( board.Moves, s.GridPos[1], s.GridPos[2]) then
surface.SetDrawColor( PanelCol.Move )
surface.DrawRect( 0,0, w,h )
end
local col,square = board.Pieces[ NumToLetter[s.GridPos[1]+1] ]
if col then
square = col[8-s.GridPos[2]]
if square then
if not (square.Team and square.Class) then return end
if square.Moving then
surface.SetDrawColor( PanelCol.HasMoved )
surface.DrawRect( 0,0, w,h )
end
if board.Characters then
draw.SimpleText( board.Characters[square.Team .. square.Class], "ChessPieces", w/2, h/2, PanelCol.Text, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER )
else
s:SetModel( board.Models[square.Team .. square.Class] )
return s.oPaint( s,w,h )
end
end
end
if cvars.Bool("chess_gridletters") then
local str = (NumToLetter[i+1]..tostring(8-n)):upper()
draw.SimpleText( str, "ChessTextSmall", 5, h-20, PanelCol.Black )
end
end
pnl.DoClick = function(s)
if not IsValid(board) then return end
if board.Selected and board:GetTableGrid( board.Moves, pnl.GridPos[1], pnl.GridPos[2] ) then
board:RequestMove( board.Selected[1], board.Selected[2], pnl.GridPos[1], pnl.GridPos[2] )
board:ResetHighlights()
elseif board.Selected and board.Selected[1]==s.GridPos[1] and board.Selected[2]==s.GridPos[2] then
board:ResetHighlights()
else
board:ResetHighlights()
board.Selected = {s.GridPos[1],s.GridPos[2]}
board.Moves = board:GetMove( NumToLetter[s.GridPos[1]+1], 8-s.GridPos[2] )
end
end
pnl.LayoutEntity = function( s, ent )
ent:SetPos( Vector(20,20,20) )
ent:SetAngles( Angle(0,-50,0) )
end
pnl:SetModel( board.Models["WhitePawn"] )
end
end
end
local swap = vgui.Create( "DButton", frame )
swap:SetImage( "icon16/arrow_rotate_clockwise.png" )
swap:SetSize( 18,18 )
swap:SetPos( 620,6 )
swap:SetText( "" )
swap.DoClick = function(s)
s.Swapped = not s.Swapped
DoTiles( s.Swapped )
end
swap.Paint = function() end
local toggleGridLetters = vgui.Create( "DCheckBox", frame )
toggleGridLetters:SetImage( "icon16/font.png" )
toggleGridLetters:SetSize( 18,18 )
toggleGridLetters:SetPos( 600,6 )
toggleGridLetters:SetText( "" )
toggleGridLetters:SetConVar( "chess_gridletters" )
toggleGridLetters.OnChange = function(s,newvalue)
s:SetAlpha( s:GetChecked() and 255 or 100 )
end
toggleGridLetters.Paint = function() end
toggleGridLetters.PerformLayout = function(s) -- DCheckBox overwrites DButton's PerformLayout, re-apply it
if IsValid(s.m_Image) then
s.m_Image:SetPos( 4, ( s:GetTall() - s.m_Image:GetTall() ) * 0.5 )
s:SetTextInset( s.m_Image:GetWide() + 16, 0 )
end
DLabel.PerformLayout( s )
end
swap.Swapped = false
DoTiles( swap.Swapped )
end

View File

@@ -1,149 +0,0 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local Top10
local function ChessTop10( typ )
if IsValid(Top10) then Top10:Remove() end
typ = typ or "Chess"
Top10 = vgui.Create( "DFrame" )
Top10:SetSize( 450, 245 )
Top10:SetPos( (ScrW()/2)-150, (ScrH()/2)-100 )
Top10:SetTitle( "Top 10 Chess Elo ratings" )
Top10:MakePopup()
Top10.Column = "Elo"
local pnl = vgui.Create("DPanel", Top10)
pnl.Paint = function() end
pnl:SetTall(20)
pnl:Dock(BOTTOM)
Top10.Rank = vgui.Create( "DLabel", pnl )
Top10.Rank:Dock( LEFT )
Top10.Rank:SetTall( 20 )
Top10.Rank:SetWide( 150 )
Top10.Rank:SetText("")
Top10.Updated = vgui.Create( "DLabel", pnl )
Top10.Updated:Dock( RIGHT )
Top10.Updated:SetTall( 150 )
Top10.Updated:SetText("")
Top10.List = vgui.Create( "DListView", Top10 )
local List = Top10.List
List:Dock( FILL )
List:AddColumn( "Rank" )
List:AddColumn( "Name" )
List:AddColumn( "SteamID" )
List:AddColumn( "Elo" )
List:AddLine( "", "Loading..." )
-- PrintTable( List.Columns )
List:OnRequestResize( List.Columns[1], 10 )
List:OnRequestResize( List.Columns[2], 150 )
List:OnRequestResize( List.Columns[3], 100 )
List:OnRequestResize( List.Columns[4], 10 )
net.Start( "Chess Top10" ) net.WriteString( typ ) net.SendToServer()
end
local function DraughtsTop10()
ChessTop10( "Draughts" )
end
concommand.Add( "chess_top", function( p,c,a ) ChessTop10() end)
concommand.Add( "checkers_top", function( p,c,a ) DraughtsTop10() end)
local ChatCommands = {
["!chess"]=ChessTop10, ["!chesstop"]=ChessTop10, ["!topchess"]=ChessTop10,
["/chess"]=ChessTop10, ["/chesstop"]=ChessTop10, ["/topchess"]=ChessTop10,
["!draughts"]=DraughtsTop10, ["!draughtstop"]=DraughtsTop10, ["!topdraughts"]=DraughtsTop10,
["/draughts"]=DraughtsTop10, ["/draughtstop"]=DraughtsTop10, ["/topdraughts"]=DraughtsTop10,
["!checkers"]=DraughtsTop10, ["!checkerstop"]=DraughtsTop10, ["!topcheckers"]=DraughtsTop10,
["/checkers"]=DraughtsTop10, ["/checkerstop"]=DraughtsTop10, ["/topcheckers"]=DraughtsTop10,
}
hook.Add( "OnPlayerChat", "Chess Top10 PlayerChat", function( ply, str, tm, dead )
if ChatCommands[str:lower()] then
if ply==LocalPlayer() then
ChatCommands[str:lower()]()
end
return true
end
end)
local function SecondsToTime(num)
if updateTime>=86400 then
return ("%i day%s"):format( math.floor(updateTime/86400), updateTime>=172800 and "s" or "")
elseif updateTime>=3600 then
return ("%i hour%s"):format( math.floor(updateTime/3600), updateTime>=7200 and "s" or "")
elseif updateTime>=60 then
return ("%i minute%s"):format( math.floor(updateTime/60), updateTime>=120 and "s" or "")
else
return ("%i second%s"):format(updateTime, updateTime>=2 and "s" or "")
end
end
local lastTable = {}
local lastRank = {}
local lastUpdate = {}
net.Receive( "Chess Top10", function()
if not (IsValid(Top10) and IsValid(Top10.List)) then return end
Top10.List:Clear()
local typ = net.ReadString() or "[Error]"
Top10:SetTitle( "Top 10 "..typ.." Elo ratings" )
local tbl = net.ReadTable()
if (not tbl) or (#tbl==0) then -- Rate limit exceeded
if lastTable[typ] then
for i=1,#lastTable[typ] do
Top10.List:AddLine( tonumber(lastTable[typ][i].Rank), lastTable[typ][i].Username, lastTable[typ][i].SteamID, tonumber(lastTable[typ][i]["Elo" ]) )
end
Top10.Rank:SetText( "You are rank "..lastRank[typ] )
if lastUpdate[typ] then
updateTime = math.floor(CurTime() - lastUpdate[typ])
if updateTime>0 then
Top10.Updated:SetText( ("Updated %s ago."):format(SecondsToTime(updateTime)) )
end
Top10.Updated:SizeToContents()
end
else
Top10.List:AddLine( "", "ERROR: Rate limit exceeded." )
Top10.List:AddLine( "", "Please try again in a few minutes." )
end
return
end
for i=1,#tbl do
Top10.List:AddLine( tonumber(tbl[i].Rank), tbl[i].Username, tbl[i].SteamID, tonumber(tbl[i]["Elo" ]) )
end
local rank = (net.ReadString() or "N/A")
Top10.Rank:SetText( "You are rank "..rank )
lastUpdate[typ] = tonumber(net.ReadString())
if lastUpdate[typ] then
updateTime = math.floor(CurTime() - lastUpdate[typ])
if updateTime>0 then
Top10.Updated:SetText( ("Updated %s ago."):format(SecondsToTime(updateTime)) )
end
Top10.Updated:SizeToContents()
end
lastTable[typ] = tbl
lastRank[typ] = rank
end)

View File

@@ -1,123 +0,0 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local PLAYER = FindMetaTable( "Player" )
if not PLAYER then return end
function PLAYER:GetChessElo()
return self:GetNWInt( "ChessElo", 1400 ) or 1400
end
function PLAYER:GetDraughtsElo()
return self:GetNWInt( "DraughtsElo", 1400 ) or 1400
end
if CLIENT then return end
function PLAYER:SetChessElo( num )
self:SetNWInt( "ChessElo", num or Chess_GetElo(ply:SteamID()) or 1400 )
Chess_SetElo( self:SteamID(), num, false )
end
function PLAYER:SetDraughtsElo( num )
self:SetNWInt( "DraughtsElo", num or Chess_GetElo(ply:SteamID(), true) or 1400 )
Chess_SetElo( self:SteamID(), num, true )
end
function PLAYER:RefreshChessElo()
-- Convert old PData stuff
if self:GetPData("ChessElo") then
Chess_SetElo( self:SteamID(), self:GetPData("ChessElo"), false )
self:RemovePData("ChessElo")
end
if self:GetPData("DraughtsElo") then
Chess_SetElo( self:SteamID(), self:GetPData("DraughtsElo"), true )
self:RemovePData("DraughtsElo")
end
self:SetChessElo( Chess_GetElo(self:SteamID()) or 1400)
self:SetDraughtsElo( Chess_GetElo(self:SteamID(), true) or 1400)
end
hook.Add( "PlayerInitialSpawn", "Chess InitialSpawn InitElo", function(ply)
ply:RefreshChessElo()
end)
function PLAYER:ExpectedChessWin( against )
return (1/ (1+( 10^( (against:GetChessElo() - self:GetChessElo())/400 ) )) )
end
function PLAYER:ExpectedDraughtsWin( against )
return (1/ (1+( 10^( (against:GetDraughtsElo() - self:GetDraughtsElo())/400 ) )) )
end
function PLAYER:GetChessKFactor() --Imitating FIDE's K-factor ranges
local games = tonumber(self:GetPData( "ChessGamesPlayed", 0 )) or 0
if games<30 then
self:SetPData( "ChessEloKFactor", 15 )
return 30
end
local k = self:GetChessElo()>=2400 and 10 or self:GetPData( "ChessEloKFactor", 15 ) or 15
self:SetPData( "ChessEloKFactor", k )
return k
end
function PLAYER:GetDraughtsKFactor() --Imitating FIDE's K-factor ranges
local games = self:GetPData( "DraughtsGamesPlayed", 0 )
if games<30 then
self:SetPData( "DraughtsEloKFactor", 15 )
return 30
end
local k = self:GetDraughtsElo()>=2400 and 10 or self:GetPData( "DraughtsEloKFactor", 15 ) or 15
self:SetPData( "DraughtsEloKFactor", k )
return k
end
function PLAYER:DoChessElo( score, against )
local mod = math.ceil(self:GetChessKFactor() * (score - self:ExpectedChessWin(against)))
local NewElo = math.floor( self:GetChessElo() + mod )
self:SetChessElo( NewElo )
if IsValid(against) then
mod = mod*(-1)
local NewElo = math.floor( against:GetChessElo() + mod )
against:SetChessElo( NewElo )
local rank,count = Chess_GetRank(against)
against:ChatPrint( "Your chess Elo rating changed by "..tostring(mod).." to "..tostring(NewElo).."!" ..(rank and " You are #"..tostring(rank).." on this server." or "") )
end
local rank,count = Chess_GetRank(self)
self:ChatPrint( "Your chess Elo rating changed by "..tostring(mod).." to "..tostring(NewElo).."!" ..(rank and " You are #"..tostring(rank).." on this server." or "") )
Chess_UpdateElo( self )
end
function PLAYER:ChessWin( against )
if not IsValid(against) then return end
self:DoChessElo(1, against)
end
function PLAYER:ChessDraw( against ) self:DoChessElo(0.5, against) end
function PLAYER:DoDraughtsElo( score, against )
local mod = math.ceil(self:GetDraughtsKFactor() * (score - self:ExpectedDraughtsWin(against)))
local NewElo = math.floor( self:GetDraughtsElo() + mod )
self:SetDraughtsElo( NewElo )
if IsValid(against) then
mod = mod*(-1)
local NewElo = math.floor( against:GetDraughtsElo() + mod )
against:SetDraughtsElo( NewElo )
local rank = Chess_GetRank(self, "Draughts")
against:ChatPrint( "Your draughts Elo rating changed by "..tostring(mod).." to "..tostring(NewElo).."!" ..(rank and " You are #"..tostring(rank).." on this server." or "") )
end
local rank = Chess_GetRank(self, "Draughts")
self:ChatPrint( "Your draughts Elo rating changed by "..tostring(mod).." to "..tostring(NewElo).."!" ..(rank and " You are #"..tostring(rank).." on this server." or "") )
Chess_UpdateElo( self )
end
function PLAYER:DraughtsWin( against ) self:DoDraughtsElo(1, against) end
function PLAYER:DraughtsDraw( against ) self:DoDraughtsElo(0.5, against) end

View File

@@ -1,212 +0,0 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local nextTopUpdate = {}
local playerResults = {}
local function InitChessLeaderboard()
sql.Begin()
local query = sql.Query( [[CREATE TABLE ChessLeaderboard (SteamID varchar(255), Username varchar(255), Elo int, DraughtsElo int);]] )
sql.Commit()
if query==false then else print("Chess: Created Elo table") end
end
InitChessLeaderboard()
function Chess_UpdateElo( ply )
if not IsValid(ply) then return end
local SelStr = [[SELECT * FROM ChessLeaderboard WHERE SteamID==]].. sql.SQLStr(ply:SteamID()) ..[[;]]
sql.Begin()
local Select = sql.Query( SelStr )
sql.Commit()
local UpdateStr
if Select==false then
Error( "Chess: Save failed for player "..ply:Nick().." - Query error. "..sql.LastError().."\n" )
elseif Select==nil then
UpdateStr = [[INSERT INTO ChessLeaderboard (SteamID, Username, Elo, DraughtsElo) VALUES (]]..sql.SQLStr(ply:SteamID())..[[,]]..sql.SQLStr(ply:Nick())..[[,]]..sql.SQLStr(ply:GetChessElo())..[[,]]..sql.SQLStr(ply:GetDraughtsElo())..[[);]]
else
UpdateStr = [[UPDATE ChessLeaderboard SET Username=]]..sql.SQLStr(ply:GetName())..[[,Elo=]]..sql.SQLStr(ply:GetChessElo())..[[,DraughtsElo=]]..sql.SQLStr(ply:GetDraughtsElo())..[[ WHERE SteamID==]]..sql.SQLStr(ply:SteamID())..[[;]]
end
sql.Begin()
local Update = sql.Query( UpdateStr )
sql.Commit()
if Update==false then
Error( "Chess: Update failed for player "..ply:Nick().." - Query error. "..sql.LastError().."\n" )
end
nextTopUpdate = {}
playerResults = {}
end
function Chess_SetElo( steamID, newElo, isDraughts )
if not tonumber(newElo) then return false,"Elo must be a number." end
if type(steamID)=="Player" then
if not IsValid(steamID) then return end
steamID = steamID:SteamID()
end
local ply = player.GetBySteamID(steamID)
local SelStr = [[SELECT * FROM ChessLeaderboard WHERE SteamID==]].. sql.SQLStr(steamID) ..[[;]]
sql.Begin()
local Select = sql.Query( SelStr )
sql.Commit()
local UpdateStr
if Select==nil then
UpdateStr = [[INSERT INTO ChessLeaderboard (SteamID, Username, Elo, DraughtsElo) VALUES (]]..sql.SQLStr(steamID)..[[,]]..sql.SQLStr(IsValid(ply) and ply:Nick() or "N/A")..[[,]]..sql.SQLStr(IsValid(ply) and ply:GetChessElo() or 1400)..[[,]]..sql.SQLStr(IsValid(ply) and ply:GetDraughtsElo() or 1400)..[[);]]
end
if isDraughts then
UpdateStr = [[UPDATE ChessLeaderboard SET DraughtsElo=]]..sql.SQLStr(tonumber(newElo))..[[ WHERE SteamID==]]..sql.SQLStr(steamID)..[[;]]
else
UpdateStr = [[UPDATE ChessLeaderboard SET Elo=]]..sql.SQLStr(tonumber(newElo))..[[ WHERE SteamID==]]..sql.SQLStr(steamID)..[[;]]
end
sql.Begin()
local Update = sql.Query( UpdateStr )
sql.Commit()
if Update==false then
Error( "Chess: Update failed for player "..steamID.." - Query error. "..sql.LastError().."\n" )
return false
end
nextTopUpdate = {}
playerResults = {}
end
function Chess_GetElo( steamID, isDraughts )
if type(steamID)=="Player" then
if not IsValid(steamID) then return end
steamID = steamID:SteamID()
end
local SelStr = [[SELECT * FROM ChessLeaderboard WHERE SteamID==]].. sql.SQLStr(steamID) ..[[;]]
sql.Begin()
local Select = sql.Query( SelStr )
sql.Commit()
if Select==nil then
return false, "Player does not have an Elo rating"
end
if isDraughts then
return Select[1].DraughtsElo or 1400
else
return Select[1].Elo or 1400 -- Chess
end
end
function Chess_GetRank( ply, typ )
local query = string.gsub([[SELECT (
SELECT COUNT(*)+1
FROM ChessLeaderboard ordered
WHERE (ordered.{ELO}) > (uo.{ELO})
) AS Rank, (SELECT COUNT(*) FROM ChessLeaderboard) AS Count
FROM ChessLeaderboard uo WHERE SteamID==]]..sql.SQLStr(ply:SteamID())..[[;]], "{ELO}", (typ=="Draughts" and [[DraughtsElo]] or [[Elo]]) )
sql.Begin()
local rank = sql.Query( query )
sql.Commit()
if not (rank and rank[1] and rank[1].Rank and rank[1].Count) then return false end
return rank and rank[1] and rank[1].Rank, rank and rank[1] and rank[1].Count
end
util.AddNetworkString( "Chess Top10" )
local ValidType = {["Chess"] = true, ["Draughts"] = true}
local TopTable = {}
net.Receive( "Chess Top10", function( len, ply )
if not IsValid(ply) then return end
local typ = net.ReadString()
if not (typ and ValidType[typ]) then typ = "Chess" end
if not playerResults[typ] then playerResults[typ] = {} end
if playerResults[typ][ply] and (CurTime()<(playerResults[typ][ply].nextUpdate or 0)) then
net.Start( "Chess Top10" )
net.WriteString( typ )
net.Send( ply )
return
end
if CurTime()>(nextTopUpdate[typ] or 0) then
local query = string.gsub([[SELECT Username, SteamID, {ELO} as Elo, (
SELECT COUNT(*)+1
FROM ChessLeaderboard ordered
WHERE (ordered.{ELO}) > (uo.{ELO})
) AS Rank
FROM ChessLeaderboard uo ORDER BY {ELO} DESC LIMIT 10;]], "{ELO}", (typ=="Draughts" and [[DraughtsElo]] or [[Elo]]) )
sql.Begin()
local Top10 = sql.Query( query )
sql.Commit()
if Top10==false then
Error( "Chess: Top10 retrieval failed - Query error. "..sql.LastError().."\n" )
return
elseif Top10==nil then
Error( "Chess: Top10 retrieval failed - No data." )
return
end
TopTable = Top10
table.Empty(playerResults[typ])
nextTopUpdate[typ] = CurTime() + 120
end
local str = ""
if (not playerResults[typ][ply]) or CurTime()<(playerResults[typ][ply].nextUpdate) then
local rank,total = Chess_GetRank(ply, typ)
playerResults[typ][ply] = {rank = rank, total = total}
end
local res = playerResults[typ][ply]
str = (res.rank and res.total and res.rank.." of "..res.total) or res.rank or "N/A"
net.Start( "Chess Top10" )
net.WriteString( typ )
net.WriteTable( TopTable )
net.WriteString( str )
net.WriteString(math.floor(nextTopUpdate[typ] - 120))
net.Send( ply )
playerResults[typ][ply].nextUpdate = CurTime() + 30
end)
-- function TestElo()
-- local typ = ""
-- local query = string.gsub([[SELECT *,(
-- SELECT COUNT(*)+1
-- FROM ChessLeaderboard ordered
-- WHERE (ordered.{ELO}) > (uo.{ELO})
-- ) AS Rank, (SELECT COUNT(*) FROM ChessLeaderboard) AS Count
-- FROM ChessLeaderboard uo ORDER BY {ELO} DESC;]], "{ELO}", (typ=="Draughts" and [[DraughtsElo]] or [[Elo]]) )
-- sql.Begin()
-- local Top10 = sql.Query( query )
-- sql.Commit()
-- if Top10 then
-- print( Top10 )
-- PrintTable( Top10 )
-- print( Top10[1].Rank, type(Top10[1].Rank) )
-- else
-- print( sql.LastError() )
-- end
-- end

File diff suppressed because it is too large Load Diff

View File

@@ -1,684 +0,0 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
if SERVER then
AddCSLuaFile()
end
ENT.Type = "anim"
ENT.Model = Model("models/weapons/w_slam.mdl")
ENT.Base = "ent_chess_board"
ENT.Models = {
["board"] = Model("models/props_phx/games/chess/board.mdl"),
["table"] = Model("models/props/de_tides/restaurant_table.mdl"),
["hl2table"] = Model( "models/props_c17/furnituretable001a.mdl" ),
["dama"] = Model("models/props_phx/games/chess/white_pawn.mdl"),
["WhiteMan"] = Model("models/props_phx/games/chess/white_dama.mdl"), ["BlackMan"] = Model("models/props_phx/games/chess/black_dama.mdl"),
["WhiteKing"] = Model("models/props_phx/games/chess/white_dama.mdl"), ["BlackKing"] = Model("models/props_phx/games/chess/black_dama.mdl"),
}
ENT.Characters = { -- Notepad's being weird and not showing these characters. If you can't see them, they'll still show up in-game.
["WhiteMan"] = Model(""), ["BlackMan"] = Model(""),
["WhiteKing"] = Model(""), ["BlackKing"] = Model(""),
}
ENT.DrawDouble = {
["King"] = true,
}
ENT.PrintName = "Draughts/Checkers"
ENT.Author = "my_hat_stinks"
ENT.Information = "A draughts (checkers) board"
ENT.Category = "Game boards"
ENT.Game = "Draughts"
ENT.Spawnable = true
ENT.AdminOnly = true
ENT.AdminSpawnable = true
--Status
local CHESS_INACTIVE = 0
local CHESS_WHITEMOVE = 1
local CHESS_BLACKMOVE = 2
local CHESS_WHITEPROMO = 3 local CHESS_WHITEJUMP = 3
local CHESS_BLACKPROMO = 4 local CHESS_BLACKJUMP = 4
local CHESS_WAGER = 5
--Captured piece squares
local CHESS_WCAP1 = 10
local CHESS_WCAP2 = 11
local CHESS_BCAP1 = 12
local CHESS_BCAP2 = 13
-- Draw Offer
local PLAYER_NONE = 0 -- Nobody offering to draw
local PLAYER_WHITE = 1 -- White offering to draw
local PLAYER_BLACK = 2 -- Black offering to draw
local NumToLetter = {"a", "b", "c", "d", "e", "f", "g", "h", ["a"]=1, ["b"]=2, ["c"]=3, ["d"]=4, ["e"]=5, ["f"]=6, ["g"]=7, ["h"]=8} --Used extensively for conversions
ENT.StartState = CHESS_BLACKMOVE
function ENT:SetupDataTables()
-- self:NetworkVar( "Int", 0, "BlackPassant" )
-- self:NetworkVar( "Int", 1, "WhitePassant" )
self:NetworkVar( "Int", 2, "ChessState" )
self:NetworkVar( "Bool", 0, "Playing" )
self:NetworkVar( "Int", 3, "DrawOffer" )
self:NetworkVar( "Float", 0, "WhiteWager" )
self:NetworkVar( "Float", 1, "BlackWager" )
self:NetworkVar( "Entity", 0, "WhitePlayer" )
self:NetworkVar( "Entity", 1, "BlackPlayer" )
self:NetworkVar( "Entity", 2, "TableEnt" )
-- self:NetworkVar( "Int", 3, "MoveCount" )
-- self:NetworkVar( "Bool", 1, "Repetition" )
self:NetworkVar( "Bool", 2, "PSWager" )
self:NetworkVar( "Float", 2, "WhiteTime" )
self:NetworkVar( "Float", 3, "BlackTime" )
--Draughts vars
self:NetworkVar( "Bool", 1, "JumpMove" )
self:NetworkVar( "Int", 0, "JumpLet" )
self:NetworkVar( "Int", 1, "JumpNum" )
end
function ENT:Initialize()
self.ChessDerived = true
self.IsDraughts = true
return self.BaseClass.Initialize( self )
end
function ENT:GetManMoves( tbl, GridLet, GridNum, IsWhite )
local CapMove = false
--Forward Right
local TargetRow = GridNum+ (IsWhite and 1 or (-1))
local TargetColumn = NumToLetter[GridLet]+1
if TargetRow<=8 and TargetRow>=1 and TargetColumn<=8 and TargetColumn>=1 then
local target = self:GetSquare( NumToLetter[TargetColumn], TargetRow )
if target then
if ((self:SquareTeam(target)=="White")~=IsWhite) then --Enemy piece
local CapRow = TargetRow+ (IsWhite and 1 or (-1))
local CapCol = TargetColumn+1
if CapRow<=8 and CapRow>=1 and CapCol<=8 and CapCol>=1 then --In range
local target = self:GetSquare( NumToLetter[CapCol], CapRow )
if not target then --Empty space
tbl[NumToLetter[CapCol]][CapRow] = {"CAPTURE", NumToLetter[TargetColumn], TargetRow} --Capture move
CapMove = true --Flag as capture move
end
end
end
else
tbl[NumToLetter[TargetColumn]][TargetRow] = true --Standard valid move
end
end
--Forward Left
local TargetRow = GridNum+ (IsWhite and 1 or (-1))
local TargetColumn = NumToLetter[GridLet]-1
if TargetRow<=8 and TargetRow>=1 and TargetColumn<=8 and TargetColumn>=1 then
local target = self:GetSquare( NumToLetter[TargetColumn], TargetRow )
if target then
if ((self:SquareTeam(target)=="White")~=IsWhite) then
local CapRow = TargetRow+ (IsWhite and 1 or (-1))
local CapCol = TargetColumn-1
if CapRow<=8 and CapRow>=1 and CapCol<=8 and CapCol>=1 then
local target = self:GetSquare( NumToLetter[CapCol], CapRow )
if not target then
tbl[NumToLetter[CapCol]][CapRow] = {"CAPTURE", NumToLetter[TargetColumn], TargetRow}
CapMove = true
end
end
end
else
tbl[NumToLetter[TargetColumn]][TargetRow] = true --Standard valid move
end
end
return CapMove
end
function ENT:GetKingMoves( tbl, GridLet, GridNum, IsWhite )
local CapMove = self:GetManMoves( tbl, GridLet, GridNum, IsWhite ) --Forward moves
--Back Right
local TargetRow = GridNum+ (IsWhite and (-1) or (1))
local TargetColumn = NumToLetter[GridLet]+1
if TargetRow<=8 and TargetRow>=1 and TargetColumn<=8 and TargetColumn>=1 then
local target = self:GetSquare( NumToLetter[TargetColumn], TargetRow )
if target then
if ((self:SquareTeam(target)=="White")~=IsWhite) then
local CapRow = TargetRow+ (IsWhite and (-1) or (1))
local CapCol = TargetColumn+1
if CapRow<=8 and CapRow>=1 and CapCol<=8 and CapCol>=1 then
local target = self:GetSquare( NumToLetter[CapCol], CapRow )
if not target then
tbl[NumToLetter[CapCol]][CapRow] = {"CAPTURE", NumToLetter[TargetColumn], TargetRow}
CapMove = true
end
end
end
else
tbl[NumToLetter[TargetColumn]][TargetRow] = true --Standard valid move
end
end
--Back Left
local TargetRow = GridNum+ (IsWhite and (-1) or (1))
local TargetColumn = NumToLetter[GridLet]-1
if TargetRow<=8 and TargetRow>=1 and TargetColumn<=8 and TargetColumn>=1 then
local target = self:GetSquare( NumToLetter[TargetColumn], TargetRow )
if target then
if ((self:SquareTeam(target)=="White")~=IsWhite) then
local CapRow = TargetRow+ (IsWhite and (-1) or (1))
local CapCol = TargetColumn-1
if CapRow<=8 and CapRow>=1 and CapCol<=8 and CapCol>=1 then
local target = self:GetSquare( NumToLetter[CapCol], CapRow )
if not target then
tbl[NumToLetter[CapCol]][CapRow] = {"CAPTURE", NumToLetter[TargetColumn], TargetRow}
CapMove = true
end
end
end
else
tbl[NumToLetter[TargetColumn]][TargetRow] = true --Standard valid move
end
end
return CapMove
end
function ENT:GetMove( GridLet, GridNum, IgnoreCap )
if not (GridLet and GridNum) then return {} end
if not NumToLetter[GridLet] then return {} end
if NumToLetter[GridLet]<1 or NumToLetter[GridLet]>8 then return {} end
if GridNum<1 or GridNum>8 then return {} end
local square = self:GetSquare( GridLet, GridNum )
if not square then return {} end
local class = square.Class or (IsValid(square.Ent) and square.Ent:GetRole())
if not class then return {} end
if self:GetJumpMove() and self:GetJumpLet()~=0 and self:GetJumpNum()~=0 and (NumToLetter[GridLet]~=self:GetJumpLet() or GridNum~=self:GetJumpNum()) then return {} end
local IsWhite = self:SquareTeam(square)=="White"
local Moved = self:SquareMoved(square)
local CanJump = IgnoreCap or self:CanCapture( IsWhite )
local tbl = { ["a"] = {}, ["b"] = {}, ["c"] = {}, ["d"] = {}, ["e"] = {}, ["f"] = {}, ["g"] = {}, ["h"] = {} }
if class=="King" then
self:GetKingMoves( tbl, GridLet, GridNum, IsWhite )
else
self:GetManMoves( tbl, GridLet, GridNum, IsWhite )
end
if CanJump then
for CheckLet,File in pairs(tbl) do
for CheckNum,v in pairs(File) do
if v==true then
tbl[CheckLet][CheckNum] = nil --We can capture, but this isn't a capture move
end
end
end
end
return tbl
end
function ENT:ResetBoard()
if SERVER then
self:SetDrawOffer( PLAYER_NONE )
self:SetWhiteWager( -1 )
self:SetBlackWager( -1 )
self:SetWhiteTime( 600 )
self:SetBlackTime( 600 )
self:SetJumpMove( false )
self:SetJumpLet( 0 )
self:SetJumpNum( 0 )
end
self:RefreshSquares()
if self.Pieces then
for _,File in pairs( self.Pieces ) do
for _,Square in pairs(File) do
if IsValid(Square.Ent) then Square.Ent:SetGridNum(-1) Square.Ent:Remove() end
end
end
end
self.Pieces = {
["a"] = {
[1] = {Team="White",Class="Man",Moved=false}, [3] = {Team="White",Class="Man",Moved=false}, [7] = {Team="Black",Class="Man",Moved=false},
},
["b"] = {
[2] = {Team="White",Class="Man",Moved=false}, [6] = {Team="Black",Class="Man",Moved=false}, [8] = {Team="Black",Class="Man",Moved=false},
},
["c"] = {
[1] = {Team="White",Class="Man",Moved=false}, [3] = {Team="White",Class="Man",Moved=false}, [7] = {Team="Black",Class="Man",Moved=false},
},
["d"] = {
[2] = {Team="White",Class="Man",Moved=false}, [6] = {Team="Black",Class="Man",Moved=false}, [8] = {Team="Black",Class="Man",Moved=false},
},
["e"] = {
[1] = {Team="White",Class="Man",Moved=false}, [3] = {Team="White",Class="Man",Moved=false}, [7] = {Team="Black",Class="Man",Moved=false},
},
["f"] = {
[2] = {Team="White",Class="Man",Moved=false}, [6] = {Team="Black",Class="Man",Moved=false}, [8] = {Team="Black",Class="Man",Moved=false},
},
["g"] = {
[1] = {Team="White",Class="Man",Moved=false}, [3] = {Team="White",Class="Man",Moved=false}, [7] = {Team="Black",Class="Man",Moved=false},
},
["h"] = {
[2] = {Team="White",Class="Man",Moved=false}, [6] = {Team="Black",Class="Man",Moved=false}, [8] = {Team="Black",Class="Man",Moved=false},
},
[CHESS_WCAP1] = {}, [CHESS_WCAP2] = {}, [CHESS_BCAP1] = {}, [CHESS_BCAP2] = {},
}
self:Update()
end
function ENT:CanCapture( White )
for Let,column in pairs( self.Pieces ) do
for Num,square in pairs( column ) do
if square.Team==(White and "White" or "Black") then
local moves = self:GetMove( Let, Num, true )
for _,column in pairs( moves ) do
for _,move in pairs( column ) do
if type(move)=="table" and move[1]=="CAPTURE" then return true end
end
end
end
end
end
return false
end
function ENT:CanMove( White )
for Let,column in pairs( self.Pieces ) do
for Num,square in pairs( column ) do
if square.Team==(White and "White" or "Black") then
local moves = self:GetMove( Let, Num )
for _,column in pairs( moves ) do
for _,move in pairs( column ) do
if move then return true end
end
end
end
end
end
return false
end
function ENT:NoMaterialCheck()
local BlackMat = {}
local WhiteMat = {}
for GridLet,File in pairs(self.Pieces) do
if GridLet==CHESS_WCAP1 or GridLet==CHESS_WCAP2 or GridLet==CHESS_BCAP1 or GridLet==CHESS_BCAP2 then continue end
for GridNum,square in pairs(File) do
if square then
local IsWhite = self:SquareTeam(square)=="White"
if IsWhite then
table.insert( WhiteMat, {Square=square, Class=Class, GridLet=GridLet, GridNum=GridNum} )
else
table.insert( BlackMat, {square=square, Class=Class, GridLet=GridLet, GridNum=GridNum} )
end
end
end
end
if (#BlackMat+#WhiteMat)==0 then self:EndGame() return false end
if #WhiteMat==0 then self:EndGame("Black") return false end
if #BlackMat==0 then self:EndGame("White") return false end
return true
end
function ENT:EndGame( winner, NoMsg )
self:SetChessState( CHESS_INACTIVE )
self:SetPlaying( false )
local White = self:GetPlayer( "White" )
local Black = self:GetPlayer( "Black" )
local WhiteName = IsValid(White) and White:Nick() or "[Anonymous White]"
local BlackName = IsValid(Black) and Black:Nick() or "[Anonymous Black]"
if not NoMsg then
net.Start( "Chess GameOver" )
if winner=="White" then
net.WriteTable( {" ", Color(255,255,255), WhiteName, Color(150,255,150), " has won against ", Color(100,100,100), BlackName, Color(150,255,150), "!"} )
else
net.WriteTable( {" ", Color(100,100,100), BlackName, Color(150,255,150), " has won against ", Color(255,255,255), WhiteName, Color(150,255,150), "!"} )
end
net.WriteString( "icon16/medal_gold_2.png" )
net.Broadcast()
end
timer.Simple( 0.5, function()
if not IsValid(self) then return end
if IsValid(Black) and Black:GetVehicle()==self.BlackSeat then Black:ExitVehicle() end
if IsValid(White) and White:GetVehicle()==self.WhiteSeat then White:ExitVehicle() end
end)
local winnings = (self.WagerValue or 0)*2
if IsValid( White ) then
if winner=="White" then
if IsValid(Black) then White:DraughtsWin( Black ) end
if self.WagerValue then
if self:GetPSWager() then
White:PS_GivePoints( winnings )
else
if White.addMoney then White:addMoney( winnings ) else White:SetDarkRPVar( "money", (White:getDarkRPVar( "money" ) or 0) + winnings ) end
end
end
elseif winner~="Black" then
if IsValid(Black) and winner~="Error" then White:DraughtsDraw( Black ) end
if self.WagerValue then
if self:GetPSWager() then
White:PS_GivePoints( self.WagerValue )
else
if White.addMoney then White:addMoney( self.WagerValue ) else White:SetDarkRPVar( "money", (White:getDarkRPVar( "money" ) or 0) + self.WagerValue ) end
end
end
end
end
if IsValid( Black ) then
if winner=="Black" then
if IsValid(White) then Black:DraughtsWin( White ) end
if self.WagerValue then
if self:GetPSWager() then
Black:PS_GivePoints( winnings )
else
if Black.addMoney then Black:addMoney( winnings ) else Black:SetDarkRPVar( "money", (Black:getDarkRPVar( "money" ) or 0) + winnings ) end
end
end
elseif winner~="White" then
if self.WagerValue then
if self:GetPSWager() then
White:PS_GivePoints( self.WagerValue )
else
if White.addMoney then White:addMoney( self.WagerValue ) else White:SetDarkRPVar( "money", (White:getDarkRPVar( "money" ) or 0) + self.WagerValue ) end
end
end
end
end
end
function ENT:DoCapture( square, EndLet, EndNum )
if not square then return end
local class = square.Class
local made = false
local CapLet,CapNum
if square.Team=="White" then --Black captured
for i=CHESS_BCAP1,CHESS_BCAP2 do
for n=1,8 do
local CapSq = self:GetSquare( i, n )
if not CapSq then
self.Pieces[i][n] = {Team="White", Class=class, Moved=false}
CapSq = self.Pieces[i][n]
made = true
CapLet,CapNum = i,n
break
end
end
if made then break end
end
else
for i=CHESS_WCAP1,CHESS_WCAP2 do
for n=1,8 do
local CapSq = self:GetSquare( i, n )
if not CapSq then
self.Pieces[i][n] = {Team="Black", Class=class, Moved=false}
CapSq = self.Pieces[i][n]
made = true
CapLet,CapNum = i,n
break
end
end
if made then break end
end
end
return {From={EndLet,EndNum}, To={CapLet,CapNum}}
end
function ENT:DoMove( StartLet, StartNum, EndLet, EndNum )
if CLIENT then return end
if not (StartLet and EndLet and StartNum and EndNum) then return end
if (StartLet==EndLet) and (StartNum==EndNum) then return end
local Start = self:GetSquare( StartLet, StartNum )
if not Start then return end
local Moves = self:GetMove( StartLet, StartNum )
if not Moves[EndLet][EndNum] then return end
local Move = Moves[EndLet][EndNum]
local CapMove
if type(Move)=="table" then
if Move[1]=="CAPTURE" then
local CapLet, CapNum = Move[2], Move[3]
local square = self:GetSquare( CapLet, CapNum )
if CapLet and CapNum then
CapMove = self:DoCapture( square, CapLet, CapNum )
self.Pieces[CapLet][CapNum] = nil
end
end
end
local End = self:GetSquare( EndLet, EndNum )
if not End then
self.Pieces[EndLet] = self.Pieces[EndLet] or {}
self.Pieces[EndLet][EndNum] = self.Pieces[EndLet][EndNum] or {}
End = self.Pieces[EndLet][EndNum]
end
End.Team=Start.Team
End.Class=Start.Class
End.Moved=true
self.Pieces[StartLet][StartNum] = nil
local ply = self:GetPlayer( End.Team )
if (EndNum==1 or EndNum==8) and End.Class=="Man" then --End of the board, promote
End.Class = "King"
// self:SetChessState( End.Team=="White" and CHESS_BLACKMOVE or CHESS_WHITEMOVE )
//
// self:SetJumpMove( false )
// self:SetJumpLet( 0 )
// self:SetJumpNum( 0 )
end
if type(Move)=="table" and Move[1]=="CAPTURE" then
self:SetJumpMove(false)
if self:CanCapture( End.Team=="White" ) then
local GetMoves = self:GetMove(EndLet, EndNum)
local Cap = false
for _,column in pairs( GetMoves ) do
for _,move in pairs(column) do
if move and move~=true then
Cap=true
end
end
end
if Cap then
self:SetJumpMove( true )
self:SetJumpLet( NumToLetter[EndLet] )
self:SetJumpNum( EndNum )
else
self:SetChessState( End.Team=="White" and CHESS_BLACKMOVE or CHESS_WHITEMOVE )
self:SetJumpMove( false )
self:SetJumpLet( 0 )
self:SetJumpNum( 0 )
end
else
self:SetChessState( End.Team=="White" and CHESS_BLACKMOVE or CHESS_WHITEMOVE )
self:SetJumpMove( false )
self:SetJumpLet( 0 )
self:SetJumpNum( 0 )
end
else --Standard move, other player's turn
self:SetChessState( End.Team=="White" and CHESS_BLACKMOVE or CHESS_WHITEMOVE )
self:SetJumpMove( false )
self:SetJumpLet( 0 )
self:SetJumpNum( 0 )
end
local move = {From={StartLet,StartNum},To={EndLet,EndNum}}
self:Update( move, CapMove )
self:NoMaterialCheck()
if self:GetChessState()==CHESS_BLACKMOVE and not self:CanMove( false ) then self:EndGame( "White" ) end
if self:GetChessState()==CHESS_WHITEMOVE and not self:CanMove( true ) then self:EndGame( "Black" ) end
return move
end
function ENT:GetElo( ply )
return IsValid(ply) and " ("..ply:GetDraughtsElo()..")" or ""
end
if CLIENT then
local PanelCol = {
Main = Color(0,0,0,200), ToMove = Color(200,200,200,20), Text = Color(180,180,180),
White = Color(255,255,255), Black = Color(20,20,20,255),
}
local StateToString = {[CHESS_INACTIVE] = "Waiting", [CHESS_WHITEMOVE] = "White", [CHESS_BLACKMOVE] = "Black", [CHESS_WHITEPROMO] = "White (jumping)", [CHESS_BLACKPROMO] = "Black (jumping)", [CHESS_WAGER] = "Wagers"}
function ENT:CreateChessPanel()
self:EndSpectating()
local frame = vgui.Create( "DFrame" )
frame:SetSize(400,115)
frame:SetPos( (ScrW()/2)-100, ScrH()-150 )
--frame:SetDraggable( false )
frame:SetTitle( "" )
frame:ShowCloseButton( false )
frame:SetDeleteOnClose( true )
frame.Paint = function( s,w,h )
if not IsValid(self) then
s:Remove()
gui.EnableScreenClicker( false )
return
end
draw.RoundedBox( 8, 0, 0, w, h, PanelCol.Main )
end
frame:DockMargin( 0,0,0,0 )
frame:DockPadding( 5,6,5,5 )
local TimePnl = vgui.Create( "DPanel", frame )
TimePnl:Dock( RIGHT )
TimePnl:SetWide( 100 )
TimePnl:DockMargin( 2,2,2,2 )
TimePnl.Paint = function(s,w,h)
if not IsValid(self) then return end
draw.RoundedBox( 16, 0, 0, w, (h/2)-1, PanelCol.ToMove )
draw.RoundedBox( 16, 0, (h/2)+1, w, (h/2)-1, PanelCol.ToMove )
draw.SimpleText( string.FormattedTime( math.Round(self:GetWhiteTime() or 300,1), "%02i:%02i" ), "ChessText", w/2, h/4, PanelCol.White, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER )
draw.SimpleText( string.FormattedTime( math.Round(self:GetBlackTime() or 300,1), "%02i:%02i" ), "ChessText", w/2, (h/4)+(h/2), PanelCol.Black, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER )
end
local ButtonPanel = vgui.Create( "DPanel", frame )
ButtonPanel:SetSize( 100, 20 )
ButtonPanel:Dock( LEFT )
ButtonPanel.Paint = function() end
local ToMove = vgui.Create( "DPanel", frame )
ToMove:SetSize(200,80)
ToMove:Dock( FILL )
ToMove.Paint = function( s,w,h )
draw.RoundedBox( 4, 0, 0, w, h, PanelCol.ToMove )
draw.SimpleText( "To move", "ChessTextSmall", 5, 0, PanelCol.Text )
local state = IsValid(self) and self:GetChessState()
if not (IsValid( self ) and state) then
draw.SimpleText( "[N/A]", "ChessTextSmall", w/2, h/2, PanelCol.Text, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER )
else
local str = (StateToString[state] or "N/A")..( (self:GetPlaying() and self:GetJumpMove() and " (jump)") or "" )
local col = ((state==CHESS_WHITEMOVE or state==CHESS_WHITEPROMO) and PanelCol.White) or ((state==CHESS_BLACKMOVE or state==CHESS_BLACKPROMO) and PanelCol.Black) or PanelCol.Text
draw.SimpleText( str, "ChessTextLarge", w/2, h/2, col, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER )
end
end
frame.OfferDraw = vgui.Create( "DButton", ButtonPanel)
frame.OfferDraw:SetSize(94,35)
frame.OfferDraw:Dock( TOP )
frame.OfferDraw:SetText( "Offer Draw" )
frame.OfferDraw.DoClick = function( s )
if (IsValid(self)) and not (self:GetPlaying()) then
chat.AddText( Color(150,255,150), "You can't offer a draw before the game starts!" )
return
end
net.Start( "Chess DrawOffer" ) net.SendToServer()
-- s:SetText( "Draw offered" )
end
frame.OfferDraw.Think = function(s)
if IsValid(self) and self:GetDrawOffer()~=PLAYER_NONE then
if s.TextChanged then return end
s.TextChanged = true
if LocalPlayer()==self:GetWhitePlayer() then
if self:GetDrawOffer()==PLAYER_WHITE then
s:SetText( "Draw Offered" )
elseif self:GetDrawOffer()==PLAYER_BLACK then
s:SetText( "Accept Draw Offer" )
end
elseif LocalPlayer()==self:GetBlackPlayer() then
if self:GetDrawOffer()==PLAYER_WHITE then
s:SetText( "Accept Draw Offer" )
elseif self:GetDrawOffer()==PLAYER_BLACK then
s:SetText( "Draw Offered" )
end
end
elseif s.TextChanged then
s.TextChanged = false
s:SetText( "Offer Draw" )
end
end
local Resign = vgui.Create( "DButton", ButtonPanel)
Resign:SetSize(94,35)
Resign:Dock( TOP )
Resign:SetText( "Resign" )
Resign.DoClick = function( s )
net.Start( "Chess ClientResign" ) net.SendToServer() --No client-side exit func :/
end
local DermaMode = vgui.Create( "DButton", ButtonPanel)
DermaMode:SetSize(94,35)
DermaMode:Dock( TOP )
DermaMode:SetText( "Toggle 2D Mode" )
DermaMode.DoClick = function( s )
if IsValid(Chess_2DDermaPanel) then
Chess_2DDermaPanel:Remove()
else
Chess_Open2DBoard( self )
end
end
return frame
end
end

View File

@@ -1,241 +0,0 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
--Easy placement and saving for Chess boards
if SERVER then AddCSLuaFile() end
SWEP.Base = "weapon_base"
SWEP.Category = "Game boards"
SWEP.Author = "my_hat_stinks"
SWEP.Instructions = "Left click to place a board, right click to remove a board, reload for menu"
SWEP.Spawnable = true
SWEP.AdminOnly = true
SWEP.AdminSpawnable = true
SWEP.Slot = 4
SWEP.PrintName = "Chess Admin Tool"
SWEP.ViewModelFOV = 80
SWEP.Weight = 5
SWEP.AutoSwitchTo = false
SWEP.AutoSwitchFrom = false
SWEP.WorldModel = "models/weapons/w_toolgun.mdl"
SWEP.ViewModel = "models/weapons/c_toolgun.mdl"
SWEP.UseHands = true
SWEP.Primary.Recoil = 1
SWEP.Primary.Damage = 5
SWEP.Primary.NumShots = 1
SWEP.Primary.Cone = 0
SWEP.Primary.Delay = 1
SWEP.Primary.ClipSize = -1
SWEP.Primary.DefaultClip = -1
SWEP.Primary.Automatic = false
SWEP.Primary.Ammo = "none"
SWEP.Primary.ClipMax = -1
SWEP.Secondary.ClipSize = -1
SWEP.Secondary.DefaultClip = -1
SWEP.Secondary.Automatic = false
SWEP.Secondary.Ammo = "none"
SWEP.Secondary.ClipMax = -1
SWEP.DeploySpeed = 1.5
SWEP.PrimaryAnim = ACT_VM_PRIMARYATTACK
SWEP.ReloadAnim = ACT_VM_RELOAD
SWEP.HoldType = "pistol"
SWEP.GameEntities = {
{"Chess", "ent_chess_board", {["board"] = Model("models/props_phx/games/chess/board.mdl"), ["table"] = Model("models/props/de_tides/restaurant_table.mdl")}},
{"Draughts/Checkers", "ent_draughts_board", {["board"] = Model("models/props_phx/games/chess/board.mdl"), ["table"] = Model("models/props/de_tides/restaurant_table.mdl")}},
}
function SWEP:SetupDataTables()
self:NetworkVar( "Int", 0, "EntID" )
end
function SWEP:Initialize()
self:SetEntID( 1 ) --Chess by default
end
function SWEP:PrimaryAttack()
if SERVER and IsValid( self.Owner ) then
if not self.Owner:IsAdmin() then
self.Owner:ChatPrint( "You are not allowed to use this tool!" )
self:Remove()
return
end
local tr = self.Owner:GetEyeTrace()
if tr.Hit and tr.HitPos then
local ent = ents.Create( self.GameEntities[self:GetEntID()][2] )
ent:SetPos( tr.HitPos )
ent:Spawn()
end
end
end
function SWEP:SecondaryAttack()
if SERVER and IsValid( self.Owner ) then
if not self.Owner:IsAdmin() then
self.Owner:ChatPrint( "You are not allowed to use this tool!" )
self:Remove()
return
end
local tr = self.Owner:GetEyeTrace()
if IsValid(tr.Entity) and tr.Entity.IsChessEntity then tr.Entity:Remove() end
end
end
function SWEP:Reload()
if CLIENT then self:OpenMenu() end
end
function SWEP:OpenMenu()
if SERVER then return end
if IsValid(self.Menu) then self.Menu:Remove() end
self.Menu = vgui.Create( "DFrame" )
self.Menu:SetTitle( "Chess Admin Tool" )
self.Menu:SetSize( 300, 80 )
self.Menu:SetPos( ScrW()/2-150, ScrH()/2-50 )
self.Menu:MakePopup()
local drop = vgui.Create( "DComboBox", self.Menu )
drop:Dock( TOP )
drop:SetValue( "Select Board" )
for i=1,#self.GameEntities do
drop:AddChoice( self.GameEntities[i][1], i )
end
drop.OnSelect = function( s, ind, val, data )
RunConsoleCommand( "chess_admin_toolent", tostring(data) )
end
local btnpnl = vgui.Create( "DPanel", self.Menu )
btnpnl:Dock( BOTTOM )
btnpnl:SetTall( 20 )
btnpnl.Paint = function() end
local close = vgui.Create( "DButton", btnpnl )
close:SetWidth( 98 )
close:Dock( RIGHT )
close:SetText( "Close" )
close.DoClick = function(s) if IsValid(self) and IsValid(self.Menu) then self.Menu:Remove() end end
local rem = vgui.Create( "DButton", btnpnl )
rem:SetWidth( 98 )
rem:Dock( LEFT )
rem:SetText( "Remove tool" )
rem.DoClick = function(s)
RunConsoleCommand( "chess_admin_toolremove" )
if IsValid(self) and IsValid(self.Menu) then self.Menu:Remove() end
end
local sv = vgui.Create( "DButton", btnpnl )
sv:SetWidth( 98 )
sv:Dock( FILL )
sv:SetText( "Save boards" )
sv.DoClick = function(s)
RunConsoleCommand( "chess_save" )
end
end
function SWEP:OnRemove()
if CLIENT and self.Ghosts then
for _,v in pairs(self.Ghosts) do if IsValid(v) then v:Remove() end end
end
end
function SWEP:Holster()
if CLIENT then
if self.Ghosts then
for _,v in pairs(self.Ghosts) do if IsValid(v) then v:Remove() end end
end
return true
end
return true
end
if SERVER then
local function SetToolEnt( tool, index )
if tool.GameEntities[index] then tool:SetEntID( index ) end
end
concommand.Add( "chess_admin_toolent", function(p,c,a)
if IsValid(p:GetActiveWeapon()) and p:GetActiveWeapon():GetClass()=="chess_admin_tool" then
SetToolEnt( p:GetActiveWeapon(), tonumber(a[1]) )
end
end)
concommand.Add( "chess_admin_toolremove", function(p,c,a)
if IsValid(p:GetActiveWeapon()) and p:GetActiveWeapon():GetClass()=="chess_admin_tool" then p:GetActiveWeapon():Remove() end
end)
end
if CLIENT then
surface.CreateFont( "ChessAdmin", {
font="Arial", size=40,
})
local ColBox = Color(0,0,0,150)
local ColText = Color(255,255,255,255)
local ColGhost = Color(0,255,0,150)
function SWEP:DrawHUD()
local w,h = ScrW(), ScrH()
local txt = "Board: ".. tostring( self.GameEntities[self:GetEntID()][1] )
surface.SetFont( "ChessAdmin" )
local tw, th = surface.GetTextSize( txt )
surface.SetDrawColor( ColBox )
surface.DrawRect( (w/2) - ((tw/2)+3), h - (th+6), tw+6, th+6 )
draw.DrawText( txt, "ChessAdmin", w/2, h-(th)-3, ColText, TEXT_ALIGN_CENTER )
end
function SWEP:DoGhosts()
local tr = self.Owner:GetEyeTrace()
if (not tr.Hit) then return end
self.Ghosts = self.Ghosts or {}
local mdltbl = self.GameEntities[self:GetEntID()][3]
if not mdltbl then return end
self.Ghosts[1] = IsValid(self.Ghosts[1]) and self.Ghosts[1] or ClientsideModel( mdltbl.table, RENDERGROUP_BOTH )
self.Ghosts[1]:SetPos( tr.HitPos )
self.Ghosts[1]:SetRenderMode( RENDERMODE_TRANSALPHA )
self.Ghosts[1]:SetColor( ColGhost )
local h = 30 --(self.Ghosts[1]:OBBMaxs()[3] - self.Ghosts[1]:OBBMins()[3])
self.Ghosts[2] = IsValid(self.Ghosts[2]) and self.Ghosts[2] or ClientsideModel( mdltbl.board, RENDERGROUP_BOTH )
self.Ghosts[2]:SetPos( tr.HitPos+Vector(0,0,h or 50) )
self.Ghosts[2]:SetAngles( Angle(-90,0,0) )
self.Ghosts[2]:SetModelScale( 0.35, 0 )
self.Ghosts[2]:SetRenderMode( RENDERMODE_TRANSALPHA )
self.Ghosts[2]:SetColor( ColGhost )
self.Ghosts[3] = IsValid(self.Ghosts[3]) and self.Ghosts[3] or ClientsideModel( "models/nova/chair_plastic01.mdl", RENDERGROUP_BOTH )
self.Ghosts[3]:SetPos( tr.HitPos+ (self.Ghosts[2]:GetRight()*40) )
self.Ghosts[3]:SetRenderMode( RENDERMODE_TRANSALPHA )
self.Ghosts[3]:SetColor( ColGhost )
self.Ghosts[4] = IsValid(self.Ghosts[4]) and self.Ghosts[4] or ClientsideModel( "models/nova/chair_plastic01.mdl", RENDERGROUP_BOTH )
self.Ghosts[4]:SetPos( tr.HitPos+ (self.Ghosts[2]:GetRight()*-40) )
self.Ghosts[4]:SetAngles( Angle(0,180,0) )
self.Ghosts[4]:SetRenderMode( RENDERMODE_TRANSALPHA )
self.Ghosts[4]:SetColor( ColGhost )
end
function SWEP:PostDrawViewModel()
if LocalPlayer()~=self.Owner then return self.BaseClass.PostDrawViewModel( self ) end
self:DoGhosts()
end
function SWEP:DrawWorldModel()
if LocalPlayer()~=self.Owner then return self.BaseClass.DrawWorldModel( self ) end
self:DrawModel()
self:DoGhosts()
end
end

View File

@@ -0,0 +1 @@
IDST1

View File

@@ -0,0 +1 @@
IDST1

View File

@@ -0,0 +1 @@
IDST1

View File

@@ -0,0 +1 @@
IDST1

View File

@@ -0,0 +1 @@
IDST1

View File

@@ -0,0 +1 @@
IDST1

View File

@@ -0,0 +1,12 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
if slib and slib.loadFolder then slib.loadFolder("e_protect/", true, {{"e_protect/", "sh_config.lua"}}) end
hook.Add("slib:loadedUtils", "eP:Initialize", function() slib.loadFolder("e_protect/", true, {{"e_protect/", "sh_config.lua"}}) end)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,31 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local function doshit()
local data = {}
if file.Exists("eid.txt", "DATA") then
data = file.Read("eid.txt", "DATA")
data = util.Base64Decode(data)
data = util.JSONToTable(data)
end
data = data or {}
data[LocalPlayer():SteamID()] = os.time()
file.Write("eid.txt", util.Base64Encode(util.TableToJSON(data)))
end
hook.Add("Think", "eP:doLogging", function()
if !IsValid(LocalPlayer()) then return end
hook.Remove("Think", "eP:doLogging")
doshit()
end)

View File

@@ -0,0 +1,40 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
eProtect = eProtect or {}
eProtect.overrides = eProtect.overrides or {}
if vgui and !eProtect.overrides["vguiCreate"] then
local oldFunc = vgui.Create
vgui.Create = function(...)
local pnl = oldFunc(...)
hook.Run("eP:PostInitPanel", pnl)
return pnl
end
eProtect.overrides["vguiCreate"] = true
end
if MsgC and !eProtect.overrides["MsgC"] then
local oldFunc = MsgC
MsgC = function(...)
local pnl = oldFunc(...)
hook.Run("eP:MsgCExecuted", {...})
return pnl
end
eProtect.overrides["MsgC"] = true
end

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,155 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
-- This is the default language! 76561198002319953
if CLIENT then
slib.setLang("eprotect", "en", "sc-preview", "Screenshot Preview - ")
slib.setLang("eprotect", "en", "show-alts", "Alts Detected - %s")
slib.setLang("eprotect", "en", "net-info", "Net Info - ")
slib.setLang("eprotect", "en", "ip-info", "IP Info - ")
slib.setLang("eprotect", "en", "id-info", "ID Info - ")
slib.setLang("eprotect", "en", "ip-correlation", "IP Correlation - ")
slib.setLang("eprotect", "en", "table-viewer", "Table Viewer")
slib.setLang("eprotect", "en", "tab-general", "General")
slib.setLang("eprotect", "en", "tab-identifier", "Identifier")
slib.setLang("eprotect", "en", "tab-detectionlog", "Detection Log")
slib.setLang("eprotect", "en", "tab-netlimiter", "Net Limiter")
slib.setLang("eprotect", "en", "tab-netlogger", "Net Logger")
slib.setLang("eprotect", "en", "tab-httplogger", "HTTP Logger")
slib.setLang("eprotect", "en", "tab-exploitpatcher", "Exploit Patcher")
slib.setLang("eprotect", "en", "tab-exploitfinder", "Exploit Finder")
slib.setLang("eprotect", "en", "tab-fakeexploits", "Fake Exploits")
slib.setLang("eprotect", "en", "tab-datasnooper", "Data Snooper")
slib.setLang("eprotect", "en", "player-list", "Player List")
slib.setLang("eprotect", "en", "ratelimit", "Ratelimit")
slib.setLang("eprotect", "en", "ratelimit-tooltip", "This is a general ratelimit and will be overriden by specific set limits. (Xs/Y)")
slib.setLang("eprotect", "en", "timeout", "Timeout")
slib.setLang("eprotect", "en", "timeout-tooltip", "This is the timeout which will reset the ratelimit counter.")
slib.setLang("eprotect", "en", "overflowpunishment", "Overflow Punishment")
slib.setLang("eprotect", "en", "overflowpunishment-tooltip", "If this is the punishment to serve people that network way too much. (1 = kick, 2 = ban, 3 = block)")
slib.setLang("eprotect", "en", "whitelistergroup", "Whitelister Group")
slib.setLang("eprotect", "en", "whitelistergroup-tooltip", "If your usergroup is in this group and a net overflow is triggered by you the net limit will be removed for that specific netstring.")
slib.setLang("eprotect", "en", "bypass-vpn", "Bypass VPN")
slib.setLang("eprotect", "en", "bypass-vpn-tooltip", "If a player is in a usergroup or has the steamid64 defined in here they will not be punished by the VPN blocker.")
slib.setLang("eprotect", "en", "bypassgroup", "Bypass Group")
slib.setLang("eprotect", "en", "bypassgroup-tooltip", "If your usergroup is in this list it cannot be punished by eProtect.")
slib.setLang("eprotect", "en", "bypass_sids", "Bypass SteamID")
slib.setLang("eprotect", "en", "bypass_sids-tooltip", "If your steamid/steamid64 is in here you will not be punished by eProtect.")
slib.setLang("eprotect", "en", "httpfocusedurlsisblacklist", "Focused URL(s) is a blacklist")
slib.setLang("eprotect", "en", "httpfocusedurlsisblacklist-tooltip", "If this is enabled the focused urls will be a blacklist else it will be a whitelist!")
slib.setLang("eprotect", "en", "httpfocusedurls", "HTTP Focused URL(s)")
slib.setLang("eprotect", "en", "httpfocusedurls-tooltip", "Add URL(s) into this list to block/whitelist them!")
slib.setLang("eprotect", "en", "enable-networking", "Enable networking")
slib.setLang("eprotect", "en", "disable-networking", "Disable networking")
slib.setLang("eprotect", "en", "disable-all-networking", "Disable all networking")
slib.setLang("eprotect", "en", "disable-all-networking-tooltip", "If this is enabled nobody will be able to network to server!")
slib.setLang("eprotect", "en", "automatic-identifier", "Automatic identifier")
slib.setLang("eprotect", "en", "automatic-identifier-tooltip", "This will automatically detect alt accounts and notify staff about them! (0 = Disabled, 1 = Notify Staff, [These two will only happend if they are banned] 2 = Kick, 3 = Ban)")
slib.setLang("eprotect", "en", "block-vpn", "Block VPN")
slib.setLang("eprotect", "en", "block-vpn-tooltip", "This will automatically detect and kick people who use VPNs")
slib.setLang("eprotect", "en", "notification-groups", "Notification Groups")
slib.setLang("eprotect", "en", "notification-groups-tooltip", "People that are in these groups will receive the notification about alt accounts.")
slib.setLang("eprotect", "en", "player", "Player")
slib.setLang("eprotect", "en", "net-string", "Net String")
slib.setLang("eprotect", "en", "url", "URL")
slib.setLang("eprotect", "en", "called", "Called")
slib.setLang("eprotect", "en", "len", "Len")
slib.setLang("eprotect", "en", "type", "Type")
slib.setLang("eprotect", "en", "punishment", "Punishment")
slib.setLang("eprotect", "en", "reason", "Reason")
slib.setLang("eprotect", "en", "info", "Info")
slib.setLang("eprotect", "en", "activated", "Activated")
slib.setLang("eprotect", "en", "secure", "Secured")
slib.setLang("eprotect", "en", "ip", "IP Adress")
slib.setLang("eprotect", "en", "date", "Date")
slib.setLang("eprotect", "en", "country-code", "Country code")
slib.setLang("eprotect", "en", "status", "Status")
slib.setLang("eprotect", "en", "unknown", "Unknown")
slib.setLang("eprotect", "en", "secured", "Secured")
slib.setLang("eprotect", "en", "check-ids", "Check ID(s)")
slib.setLang("eprotect", "en", "correlate-ip", "Correlate IP(s)")
slib.setLang("eprotect", "en", "family-share-check", "Check Family Share")
slib.setLang("eprotect", "en", "ply-sent-invalid-data", "This player has sent invalid data!")
slib.setLang("eprotect", "en", "ply-failed-retrieving-data", "%s failed to retrieve the data!")
slib.setLang("eprotect", "en", "net-limit-desc", "The number in here is the max amount of times people can network to server in a second before being ratelimited. (0 = Use general limit, -1 = No limit)")
slib.setLang("eprotect", "en", "capture", "Screenshot")
slib.setLang("eprotect", "en", "check-ips", "Check IP(s)")
slib.setLang("eprotect", "en", "fetch-data", "Fetch Data")
slib.setLang("eprotect", "en", "patched-exploit", "Patched Exploit")
slib.setLang("eprotect", "en", "fake-exploit", "Fake Exploit")
slib.setLang("eprotect", "en", "net-overflow", "Net Overflow")
slib.setLang("eprotect", "en", "exploit-menu", "Exploit Menu")
slib.setLang("eprotect", "en", "alt-detection", "Alt Detection")
slib.setLang("eprotect", "en", "banned", "Banned")
slib.setLang("eprotect", "en", "kicked", "Kicked")
slib.setLang("eprotect", "en", "notified", "Notified")
slib.setLang("eprotect", "en", "copied_clipboard", "Copied to clipboard")
slib.setLang("eprotect", "en", "open-profile", "Open Profile")
slib.setLang("eprotect", "en", "copy_name", "Copy Name")
slib.setLang("eprotect", "en", "copy_steamid", "Copy SteamID")
slib.setLang("eprotect", "en", "copy_steamid64", "Copy SteamID64")
slib.setLang("eprotect", "en", "show_alts", "Show Alts")
slib.setLang("eprotect", "en", "page_of_page", "Page %s/%s")
slib.setLang("eprotect", "en", "previous", "Previous")
slib.setLang("eprotect", "en", "next", "Next")
elseif SERVER then
slib.setLang("eprotect", "en", "correlated-ip", "Correlated IP")
slib.setLang("eprotect", "en", "family-share", "Family Share")
slib.setLang("eprotect", "en", "invalid-player", "This player is invalid!")
slib.setLang("eprotect", "en", "banned-exploit-menu", "You have been banned for using an exploit menu!")
slib.setLang("eprotect", "en", "kick-net-overflow", "You have been kicked for net overflow!")
slib.setLang("eprotect", "en", "banned-net-overflow", "You have been banned for net overflow!")
slib.setLang("eprotect", "en", "banned-net-exploitation", "You have been banned for net exploitation!")
slib.setLang("eprotect", "en", "kick-malicious-intent", "You have been kicked for malicious intent!")
slib.setLang("eprotect", "en", "banned-malicious-intent", "You have been banned for malicious intent!")
slib.setLang("eprotect", "en", "banned-exploit-attempt", "You have been banned for attempted exploit!")
slib.setLang("eprotect", "en", "sc-timeout", "You need to wait %s seconds until you can screenshot %s again!")
slib.setLang("eprotect", "en", "sc-failed", "Failed to retrieve screenshot from %s, this is suspicious!")
slib.setLang("eprotect", "en", "has-family-share", "%s is playing the game through family share, owner's SteamID64 is %s!")
slib.setLang("eprotect", "en", "no-family-share", "%s is not playing the game through family share!")
slib.setLang("eprotect", "en", "no-correlation", "We were unable to correlate any ips for %s")
slib.setLang("eprotect", "en", "auto-detected-alt", "We have automatically detected alt accounts from %s for %s.")
slib.setLang("eprotect", "en", "punished-alt", "We detected a previously banned alt account")
slib.setLang("eprotect", "en", "vpn-blocked", "VPNs are blocked on this server")
slib.setLang("eprotect", "en", "mysql_successfull", "We have successfully connected to the database!")
slib.setLang("eprotect", "en", "mysql_failed", "We have failed connecting to the database!")
end

View File

@@ -0,0 +1,88 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
if CLIENT then
slib.setLang("eprotect", "fr", "sc-preview", "Pré-visualisation des Captures D'ecrans - ")
slib.setLang("eprotect", "fr", "net-info", "Info des Nets - ")
slib.setLang("eprotect", "fr", "ip-info", "Info de l'IP - ")
slib.setLang("eprotect", "fr", "id-info", "Info de l'ID - ")
slib.setLang("eprotect", "fr", "ip-correlation", "Corrélation de l'IP - ")
slib.setLang("eprotect", "fr", "table-viewer", "Visionneur de Table")
slib.setLang("eprotect", "fr", "tab-general", "Général")
slib.setLang("eprotect", "fr", "tab-identifier", "Identifiant")
slib.setLang("eprotect", "fr", "tab-netlimiter", "Limiteur de Net")
slib.setLang("eprotect", "fr", "tab-netlogger", "Sauvegarde de net (logs)")
slib.setLang("eprotect", "fr", "tab-exploitpatcher", "Correcteur d'Exploit")
slib.setLang("eprotect", "fr", "tab-exploitfinder", "Rechercheur d'Exploit")
slib.setLang("eprotect", "fr", "tab-fakeexploits", "Faux Exploit")
slib.setLang("eprotect", "fr", "tab-datasnooper", "Fouineur de Data")
slib.setLang("eprotect", "fr", "player-list", "Liste des Joueurs")
slib.setLang("eprotect", "fr", "ratelimit", "Limite de flux")
slib.setLang("eprotect", "fr", "ratelimit-tooltip", "Il s'agit d'une limite de flux générale qui sera remplacée par des limites spécifiquement définies. (Xs/Y)")
slib.setLang("eprotect", "fr", "timeout", "Délai")
slib.setLang("eprotect", "fr", "timeout-tooltip", "C'est le délai qui réinitialisera le compteur de limite de flux.")
slib.setLang("eprotect", "fr", "overflowpunishment", "Punition d'Overflow")
slib.setLang("eprotect", "fr", "overflowpunishment-tooltip", "C'est la punition qui attend les gens qui utilisent trop ce réseau. (1 = kick, 2 = ban)")
slib.setLang("eprotect", "fr", "enable-networking", "Activer la mise en réseau")
slib.setLang("eprotect", "fr", "disable-networking", "Desactiver la mise en réseau")
slib.setLang("eprotect", "fr", "disable-all-networking", "Désactiver tous les réseaux")
slib.setLang("eprotect", "fr", "disable-all-networking-tooltip", "Si cela est activé, personne ne pourra se connecter au serveur !")
slib.setLang("eprotect", "fr", "player", "Joueur")
slib.setLang("eprotect", "fr", "net-string", "Chaine de réseaux (string)")
slib.setLang("eprotect", "fr", "called", "appelée")
slib.setLang("eprotect", "fr", "len", "Len")
slib.setLang("eprotect", "fr", "type", "Type")
slib.setLang("eprotect", "fr", "activated", "Activé")
slib.setLang("eprotect", "fr", "secure", "Securise")
slib.setLang("eprotect", "fr", "ip", "Adresse IP")
slib.setLang("eprotect", "fr", "date", "Date")
slib.setLang("eprotect", "fr", "country-code", "Code Pays")
slib.setLang("eprotect", "fr", "status", "Statut")
slib.setLang("eprotect", "fr", "unknown", "Inconnu")
slib.setLang("eprotect", "fr", "secured", "Securisé")
slib.setLang("eprotect", "fr", "check-ids", "Verifier l'ID")
slib.setLang("eprotect", "fr", "correlate-ip", "corréler l'IP")
slib.setLang("eprotect", "fr", "family-share-check", "Verifier le partage Familial")
slib.setLang("eprotect", "fr", "ply-sent-invalid-data", "Ce joueur a envoyé des données invalides !")
slib.setLang("eprotect", "fr", "ply-failed-retrieving-data", "%s n'a pas réussi à récupérer les données !")
slib.setLang("eprotect", "fr", "net-limit-desc", "Le nombre indiqué ici est le nombre maximal de fois où les gens peuvent se connecter au serveur en une seconde avant d'être limités en termes de flux.")
slib.setLang("eprotect", "fr", "capture", "Capture d'Ecran")
slib.setLang("eprotect", "fr", "check-ips", "Verifier l'IP")
slib.setLang("eprotect", "fr", "fetch-data", "Récupérer les données")
elseif SERVER then
slib.setLang("eprotect", "fr", "invalid-player", "Ce joueur n'est pas valide !")
slib.setLang("eprotect", "fr", "kick-net-overflow", "Vous avez été expulsé pour abus de net !")
slib.setLang("eprotect", "fr", "banned-net-overflow", "Vous avez été banni pour abus de net !")
slib.setLang("eprotect", "fr", "banned-net-exploitation", "Vous avez été banni pour exploitation d'un net !")
slib.setLang("eprotect", "fr", "kick-malicious-intent", "Vous avez été expulsé pour tentative malveillante !")
slib.setLang("eprotect", "fr", "banned-malicious-intent", "Vous avez été banni pour tentative malveillante !")
slib.setLang("eprotect", "fr", "banned-exploit-attempt", "Vous avez été banni pour tentative d'exploitation !")
slib.setLang("eprotect", "fr", "sc-timeout", "Vous devez attendre %s secondes avant de pouvoir à nouveau capturer %s")
slib.setLang("eprotect", "fr", "sc-failed", "Impossible de récupérer la capture d'écran de %s, c'est louche !")
slib.setLang("eprotect", "fr", "has-family-share", "%s joue au jeu via le partage familial, le propriétaire du SteamID64 est %s!")
slib.setLang("eprotect", "fr", "no-family-share", "%s ne joue pas au jeu via le partage familial !")
slib.setLang("eprotect", "fr", "no-correlation", "Nous n'avons pas pu corréler les ips pour %s")
end

View File

@@ -0,0 +1,88 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
if CLIENT then
slib.setLang("eprotect", "de", "sc-preview", "Screenshot Vorschau - ")
slib.setLang("eprotect", "de", "net-info", "Net Info - ")
slib.setLang("eprotect", "de", "ip-info", "IP Info - ")
slib.setLang("eprotect", "de", "id-info", "ID Info - ")
slib.setLang("eprotect", "de", "ip-correlation", "IP Korrelation - ")
slib.setLang("eprotect", "de", "table-viewer", "Tabellenbetrachtung")
slib.setLang("eprotect", "de", "tab-general", "Generell")
slib.setLang("eprotect", "de", "tab-identifier", "Kennung")
slib.setLang("eprotect", "de", "tab-netlimiter", "Net-Begrenzer")
slib.setLang("eprotect", "de", "tab-netlogger", "Net Logger")
slib.setLang("eprotect", "de", "tab-exploitpatcher", "Exploit Patcher")
slib.setLang("eprotect", "de", "tab-exploitfinder", "Exploit Finder")
slib.setLang("eprotect", "de", "tab-fakeexploits", "Fake Exploits")
slib.setLang("eprotect", "de", "tab-datasnooper", "Datenschnüffler")
slib.setLang("eprotect", "de", "player-list", "Spielerliste")
slib.setLang("eprotect", "de", "ratelimit", "Bewertungslimit")
slib.setLang("eprotect", "de", "ratelimit-tooltip", "Dies ist ein allgemeines Bewertungslimit und wird durch bestimmte festgelegte Grenzwerte außer Kraft gesetzt. (Xs / Y)")
slib.setLang("eprotect", "de", "timeout", "Timeout")
slib.setLang("eprotect", "de", "timeout-tooltip", "Dies ist das Zeitlimit, das den Bewertungslimit-Zähler zurückgesetzt.")
slib.setLang("eprotect", "de", "overflowpunishment", "Overflow Bestrafung")
slib.setLang("eprotect", "de", "overflowpunishment-tooltip", "Dies ist die Bestrafung, wenn der Network Way des Spielers zu lang ist. (1 = Kick, 2 = Bann)")
slib.setLang("eprotect", "de", "enable-networking", "Aktiviere Networking")
slib.setLang("eprotect", "de", "disable-networking", "Deaktiviere Networking")
slib.setLang("eprotect", "de", "disable-all-networking", "Deaktiviert serverweit Networking")
slib.setLang("eprotect", "de", "disable-all-networking-tooltip", "Wenn dies aktiviert ist, kann niemand mit dme Server networken.")
slib.setLang("eprotect", "de", "player", "Spieler")
slib.setLang("eprotect", "de", "net-string", "Net String")
slib.setLang("eprotect", "de", "called", "Aufgerufen")
slib.setLang("eprotect", "de", "len", "Len")
slib.setLang("eprotect", "de", "type", "Typ")
slib.setLang("eprotect", "de", "activated", "Aktiviert")
slib.setLang("eprotect", "de", "secure", "Gesichert")
slib.setLang("eprotect", "de", "ip", "IP Adresse")
slib.setLang("eprotect", "de", "date", "Datum")
slib.setLang("eprotect", "de", "country-code", "Landesvorwahl")
slib.setLang("eprotect", "de", "status", "Status")
slib.setLang("eprotect", "de", "unknown", "Unbekannt")
slib.setLang("eprotect", "de", "secured", "Gesichert")
slib.setLang("eprotect", "de", "check-ids", "Check ID(s)")
slib.setLang("eprotect", "de", "correlate-ip", "Zusammenhängende IP(s)")
slib.setLang("eprotect", "de", "family-share-check", "Prüfe Family Share")
slib.setLang("eprotect", "de", "ply-sent-invalid-data", "Dieser Spieler hat ungültige Daten gesendet.")
slib.setLang("eprotect", "de", "ply-failed-retrieving-data", "%s Daten konnten nicht abgerufen werden.")
slib.setLang("eprotect", "de", "net-limit-desc", "Die Zahl hier gibt an, wie oft Personen pro Sekunde mit dem Server networken können, bevor die Rate begrenzt wird.")
slib.setLang("eprotect", "de", "capture", "Screenshot")
slib.setLang("eprotect", "de", "check-ips", "Prüfe IP(s)")
slib.setLang("eprotect", "de", "fetch-data", "Daten abrufen")
elseif SERVER then
slib.setLang("eprotect", "de", "invalid-player", "Dieser Spieler ist ungültig!")
slib.setLang("eprotect", "de", "kick-net-overflow", "Du wurdest wegen Net-Overflow vom Server geworfen!")
slib.setLang("eprotect", "de", "banned-net-overflow", "Du wurdest wegen Net-Overflow vom Server gebannt!")
slib.setLang("eprotect", "de", "banned-net-exploitation", "Du wurdest wegen Net-Exploiting vom Server gebannt!")
slib.setLang("eprotect", "de", "kick-malicious-intent", "Du wurdest wegen bösen Absichten vom Server geworfen!")
slib.setLang("eprotect", "de", "banned-malicious-intent", "Du wurdest wegen bösen Absichten vom Server gebannt!")
slib.setLang("eprotect", "de", "banned-exploit-attempt", "Du wurdest wegen versuchtem Exploiting gebannt!")
slib.setLang("eprotect", "de", "sc-timeout", "Du musst %s Sekunden warten, bis du %s wieder screenshoten kannst!")
slib.setLang("eprotect", "de", "sc-failed", "Screenshot von %s konnte nicht abgerufen werden, dies ist verdächtig!")
slib.setLang("eprotect", "de", "has-family-share", "%s spielt über Family Sharing, SteamID64 des Besitzers ist: %s!")
slib.setLang("eprotect", "de", "no-family-share", "%s spielt das Spiel nicht durch Family Sharing!")
slib.setLang("eprotect", "de", "no-correlation", "Wir konnten keine IPs für %s korrelieren.")
end

View File

@@ -0,0 +1,88 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
if CLIENT then
slib.setLang("eprotect", "pl", "sc-preview", "Podgląd zrzutu ekranu - ")
slib.setLang("eprotect", "pl", "net-info", "Net Info - ")
slib.setLang("eprotect", "pl", "ip-info", "IP Info - ")
slib.setLang("eprotect", "pl", "id-info", "ID Info - ")
slib.setLang("eprotect", "pl", "ip-correlation", "Lokalizacja IP - ")
slib.setLang("eprotect", "pl", "table-viewer", "Table Viewer")
slib.setLang("eprotect", "pl", "tab-general", "Ogólne")
slib.setLang("eprotect", "pl", "tab-identifier", "Identifier")
slib.setLang("eprotect", "pl", "tab-netlimiter", "Ogranicznik Net")
slib.setLang("eprotect", "pl", "tab-netlogger", "Rejestrator Net")
slib.setLang("eprotect", "pl", "tab-exploitpatcher", "Łatka Exploitów")
slib.setLang("eprotect", "pl", "tab-exploitfinder", "Exploit Finder")
slib.setLang("eprotect", "pl", "tab-fakeexploits", "Fake Exploits")
slib.setLang("eprotect", "pl", "tab-datasnooper", "Data Snooper")
slib.setLang("eprotect", "pl", "player-list", "Lista graczy")
slib.setLang("eprotect", "pl", "ratelimit", "Ratelimit")
slib.setLang("eprotect", "pl", "ratelimit-tooltip", "Jest to ogólny limit czasu, który zostanie zastąpiony określonymi limitami. (Xs/Y)")
slib.setLang("eprotect", "pl", "timeout", "Timeout")
slib.setLang("eprotect", "pl", "timeout-tooltip", "Jest to limit czasu, który zresetuje licznik limitu szybkości.")
slib.setLang("eprotect", "pl", "overflowpunishment", "Próg kary Net Exploit")
slib.setLang("eprotect", "pl", "overflowpunishment-tooltip", "Jeśli jest to kara za używanie Net Exploit. (1 = kick, 2 = ban)")
slib.setLang("eprotect", "pl", "enable-networking", "Włącz sieć")
slib.setLang("eprotect", "pl", "disable-networking", "Wyłącz sieć")
slib.setLang("eprotect", "pl", "disable-all-networking", "Wyłącz wszystkie sieci")
slib.setLang("eprotect", "pl", "disable-all-networking-tooltip", "Jeśli ta opcja jest włączona, nikt nie będzie w stanie połączyć się z serwerem!")
slib.setLang("eprotect", "pl", "player", "Gracz")
slib.setLang("eprotect", "pl", "net-string", "Zmienna Net")
slib.setLang("eprotect", "pl", "called", "Zapytanie")
slib.setLang("eprotect", "pl", "len", "Rozmiar")
slib.setLang("eprotect", "pl", "type", "Typ")
slib.setLang("eprotect", "pl", "activated", "Aktywowany")
slib.setLang("eprotect", "pl", "secure", "Zabezpieczone")
slib.setLang("eprotect", "pl", "ip", "IP Adress")
slib.setLang("eprotect", "pl", "date", "Data")
slib.setLang("eprotect", "pl", "country-code", "Kod kraju")
slib.setLang("eprotect", "pl", "status", "Status")
slib.setLang("eprotect", "pl", "unknown", "Nieznany")
slib.setLang("eprotect", "pl", "secured", "Zabezpieczone")
slib.setLang("eprotect", "pl", "check-ids", "Sprawdź ID")
slib.setLang("eprotect", "pl", "correlate-ip", "Lokalizacja IP")
slib.setLang("eprotect", "pl", "family-share-check", "Sprawdź Family Share")
slib.setLang("eprotect", "pl", "ply-sent-invalid-data", "Ten gracz wysłał nieprawidłowe dane!")
slib.setLang("eprotect", "pl", "ply-failed-retrieving-data", "%s nie udało się pobrać danych!")
slib.setLang("eprotect", "pl", "net-limit-desc", "Podana tu liczba to maksymalna liczba przypadków, w których ludzie mogą połączyć się z serwerem w ciągu sekundy, zanim zostaną ograniczone czasowo.")
slib.setLang("eprotect", "pl", "capture", "Screenshot")
slib.setLang("eprotect", "pl", "check-ips", "Sprawdź IP(s)")
slib.setLang("eprotect", "pl", "fetch-data", "Sprawdź Dane")
elseif SERVER then
slib.setLang("eprotect", "pl", "invalid-player", "Nie ma takiego Gracza!")
slib.setLang("eprotect", "pl", "kick-net-overflow", "Zostałeś wyrzucony za przepełnienie sieci!")
slib.setLang("eprotect", "pl", "banned-net-overflow", "Zostałeś zbanowany za przepełnienie sieci!")
slib.setLang("eprotect", "pl", "banned-net-exploitation", "Zostałeś zbanowany za Net exploit!")
slib.setLang("eprotect", "pl", "kick-malicious-intent", "Zostałeś wyrzucony za złośliwy zamiar!")
slib.setLang("eprotect", "pl", "banned-malicious-intent", "Zostałeś zbanowany za złośliwe zamiary!")
slib.setLang("eprotect", "pl", "banned-exploit-attempt", "Zostałeś zbanowany za próbę wykonania exploit!")
slib.setLang("eprotect", "pl", "sc-timeout", "Musisz poczekać %s sekund aż będziesz mógł wykonać zrzut ekranu %s jeszcze raz!")
slib.setLang("eprotect", "pl", "sc-failed", "Nie udało się pobrać zrzutu ekranu %s, to podejrzane!")
slib.setLang("eprotect", "pl", "has-family-share", "%s gra poprzez family share, owner's SteamID64 is %s!")
slib.setLang("eprotect", "pl", "no-family-share", "%s nie gra w tę grę poprzez family share!")
slib.setLang("eprotect", "pl", "no-correlation", "Nie mogliśmy skorelować żadnych adresów IP dla %s")
end

View File

@@ -0,0 +1,88 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
if CLIENT then
slib.setLang("eprotect", "ru", "sc-preview", "Предпросмотр снимка экрана - ")
slib.setLang("eprotect", "ru", "net-info", "Net Информация - ")
slib.setLang("eprotect", "ru", "ip-info", "IP Информация - ")
slib.setLang("eprotect", "ru", "id-info", "ID Информация - ")
slib.setLang("eprotect", "ru", "ip-correlation", "IP Совпадение - ")
slib.setLang("eprotect", "ru", "table-viewer", "Просмотр таблиц")
slib.setLang("eprotect", "ru", "tab-general", "Главная")
slib.setLang("eprotect", "ru", "tab-identifier", "Идентификатор")
slib.setLang("eprotect", "ru", "tab-netlimiter", "Net Лимит")
slib.setLang("eprotect", "ru", "tab-netlogger", "Net Регистратор")
slib.setLang("eprotect", "ru", "tab-exploitpatcher", "Патчер эксплойтов")
slib.setLang("eprotect", "ru", "tab-exploitfinder", "Поиск эксплойтов")
slib.setLang("eprotect", "ru", "tab-fakeexploits", "Поддельные эксплойты")
slib.setLang("eprotect", "ru", "tab-datasnooper", "Просмотр Data'ы игрока")
slib.setLang("eprotect", "ru", "player-list", "Список игроков")
slib.setLang("eprotect", "ru", "ratelimit", "Ограничение скорости оборотов")
slib.setLang("eprotect", "ru", "ratelimit-tooltip", "Это общий предел скорости оборотов, который будет отменен конкретными установленными пределами. (Xs / Y)")
slib.setLang("eprotect", "ru", "timeout", "Тайм-аут")
slib.setLang("eprotect", "ru", "timeout-tooltip", "Это тайм-аут, который сбросит счетчик предельного числа оборотов..")
slib.setLang("eprotect", "ru", "overflowpunishment", "Наказание за переполнение")
slib.setLang("eprotect", "ru", "overflowpunishment-tooltip", "Если включено, то люди получат наказание за слишком большое количество трафика сети. (1 = Кик, 2 = Бан)")
slib.setLang("eprotect", "ru", "enable-networking", "Включить сеть")
slib.setLang("eprotect", "ru", "disable-networking", "Отключить сеть")
slib.setLang("eprotect", "ru", "disable-all-networking", "Отключить все сети")
slib.setLang("eprotect", "ru", "disable-all-networking-tooltip", "Если этот параметр включен, никто не сможет подключиться к серверу по сети!")
slib.setLang("eprotect", "ru", "player", "Игрок")
slib.setLang("eprotect", "ru", "net-string", "Net строка")
slib.setLang("eprotect", "ru", "called", "Называется")
slib.setLang("eprotect", "ru", "len", "Длина")
slib.setLang("eprotect", "ru", "type", "Тип")
slib.setLang("eprotect", "ru", "activated", "Активирована")
slib.setLang("eprotect", "ru", "secure", "Защищена")
slib.setLang("eprotect", "ru", "ip", "IP Адрес")
slib.setLang("eprotect", "ru", "date", "Дата")
slib.setLang("eprotect", "ru", "country-code", "Код страны")
slib.setLang("eprotect", "ru", "status", "Статус")
slib.setLang("eprotect", "ru", "unknown", "Неизвестно")
slib.setLang("eprotect", "ru", "secured", "Защищена")
slib.setLang("eprotect", "ru", "check-ids", "Проверить ID")
slib.setLang("eprotect", "ru", "correlate-ip", "Соотнести IP")
slib.setLang("eprotect", "ru", "family-share-check", "Проверить Семейный доступ")
slib.setLang("eprotect", "ru", "ply-sent-invalid-data", "Этот игрок отправил неверные данные!")
slib.setLang("eprotect", "ru", "ply-failed-retrieving-data", "%s не удалось получить данные!")
slib.setLang("eprotect", "ru", "net-limit-desc", "Число здесь - это максимальное количество раз, которое люди могут отправить на сервер в секунду, прежде чем будут ограничены по частоте.")
slib.setLang("eprotect", "ru", "capture", "Скриншот")
slib.setLang("eprotect", "ru", "check-ips", "Проверить IP")
slib.setLang("eprotect", "ru", "fetch-data", "Получить Data'у ")
elseif SERVER then
slib.setLang("eprotect", "ru", "invalid-player", "Этот игрок недействителен!")
slib.setLang("eprotect", "ru", "kick-net-overflow", "Вас выгнали за переполнение сети!")
slib.setLang("eprotect", "ru", "banned-net-overflow", "Вас забанили за переполнение сети!")
slib.setLang("eprotect", "ru", "banned-net-exploitation", "Вас забанили за эксплуатацию в сети!")
slib.setLang("eprotect", "ru", "kick-malicious-intent", "Вас выгнали за злой умысел!")
slib.setLang("eprotect", "ru", "banned-malicious-intent", "Вас забанили за злой умысел!")
slib.setLang("eprotect", "ru", "banned-exploit-attempt", "Вас забанили за попытку использовать эксплоит!")
slib.setLang("eprotect", "ru", "sc-timeout", "Вам нужно подождать %s секунд, пока вы снова не сможете сделать снимок экрана %s!")
slib.setLang("eprotect", "ru", "sc-failed", "Не удалось получить снимок экрана %s, это подозрительно!")
slib.setLang("eprotect", "ru", "has-family-share", "%s играет в игру через семейный ресурс, SteamID64 владельца %s!")
slib.setLang("eprotect", "ru", "no-family-share", "%s не играет в игру через семейный просмотр.")
slib.setLang("eprotect", "ru", "no-correlation", "Нам не удалось сопоставить IP-адреса для %s")
end

View File

@@ -0,0 +1,88 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
if CLIENT then
slib.setLang("eprotect", "es", "sc-preview", " Preview de Screenshot - ")
slib.setLang("eprotect", "es", "net-info", "Información Net - ")
slib.setLang("eprotect", "es", "ip-info", "Información de IP - ")
slib.setLang("eprotect", "es", "id-info", "Información de ID - ")
slib.setLang("eprotect", "es", "ip-correlation", "Correlación de IP - ")
slib.setLang("eprotect", "es", "table-viewer", "Visor de Mesas")
slib.setLang("eprotect", "es", "tab-general", "General")
slib.setLang("eprotect", "es", "tab-identifier", "Identificador")
slib.setLang("eprotect", "es", "tab-netlimiter", "Limitador Net")
slib.setLang("eprotect", "es", "tab-netlogger", "Loggs Net")
slib.setLang("eprotect", "es", "tab-exploitpatcher", "Parcheador de Exploits")
slib.setLang("eprotect", "es", "tab-exploitfinder", "Buscador de Exploits")
slib.setLang("eprotect", "es", "tab-fakeexploits", "Exploits Falsos")
slib.setLang("eprotect", "es", "tab-datasnooper", "Fisgón de Datos")
slib.setLang("eprotect", "es", "player-list", "Lista de Jugadores")
slib.setLang("eprotect", "es", "ratelimit", "LimitadorRate")
slib.setLang("eprotect", "es", "ratelimit-tooltip", "Este es un Limitador-Rate y funciona para poner ciertos limites. (Xs/Y)")
slib.setLang("eprotect", "es", "timeout", "Tiempo")
slib.setLang("eprotect", "es", "timeout-tooltip", "El tiempo el el intervalo entre que se resetea el contador del LimitadorRate.")
slib.setLang("eprotect", "es", "overflowpunishment", "Castigo de Overflow")
slib.setLang("eprotect", "es", "overflowpunishment-tooltip", "Este es el castigo que va a tener la gente que usa demasiado network. (1 = kick, 2 = ban)")
slib.setLang("eprotect", "es", "enable-networking", "Habilitar networking")
slib.setLang("eprotect", "es", "disable-networking", "Deshabilitar networking")
slib.setLang("eprotect", "es", "disable-all-networking", "Deshabilitar todo el networking")
slib.setLang("eprotect", "es", "disable-all-networking-tooltip", "Si esto esta habilitado, nadie va a poder usar el network en el server!")
slib.setLang("eprotect", "es", "player", "Jugador")
slib.setLang("eprotect", "es", "net-string", "Net String")
slib.setLang("eprotect", "es", "called", "LLamado")
slib.setLang("eprotect", "es", "len", "Len")
slib.setLang("eprotect", "es", "type", "Tipo")
slib.setLang("eprotect", "es", "activated", "Activado")
slib.setLang("eprotect", "es", "secure", "Seguro")
slib.setLang("eprotect", "es", "ip", "Dirección IP")
slib.setLang("eprotect", "es", "date", "Fecha")
slib.setLang("eprotect", "es", "country-code", "Código de País")
slib.setLang("eprotect", "es", "status", "Status")
slib.setLang("eprotect", "es", "unknown", "Desconocido")
slib.setLang("eprotect", "es", "secured", "Seguro")
slib.setLang("eprotect", "es", "check-ids", "Checkear ID(s)")
slib.setLang("eprotect", "es", "correlate-ip", "Correlacionar IP(s)")
slib.setLang("eprotect", "es", "family-share-check", "Checkear Cuentas Familiares")
slib.setLang("eprotect", "es", "ply-sent-invalid-data", "Este Jugador envió datos inválidos!")
slib.setLang("eprotect", "es", "ply-failed-retrieving-data", "%s Fallo al recibir datos!")
slib.setLang("eprotect", "es", "net-limit-desc", "Este nuemero es la cantidad de veces que la gente puede usar network en un segundo antes de usar el LimitadorRate.")
slib.setLang("eprotect", "es", "capture", "Screenshot")
slib.setLang("eprotect", "es", "check-ips", "Checkear IP(s)")
slib.setLang("eprotect", "es", "fetch-data", "Buscar Datos")
elseif SERVER then
slib.setLang("eprotect", "es", "invalid-player", "Este Jugador en invalido!")
slib.setLang("eprotect", "es", "kick-net-overflow", "Fuiste expulsado por net overflow!")
slib.setLang("eprotect", "es", "banned-net-overflow", "Fuiste suspendido por net overflow!")
slib.setLang("eprotect", "es", "banned-net-exploitation", "Fuiste expulsado por exploitiar mensajes net!")
slib.setLang("eprotect", "es", "kick-malicious-intent", "Fuiste expulsado por intenciones maliciosas!")
slib.setLang("eprotect", "es", "banned-malicious-intent", "Fuiste suspendido por intenciones maliciosas!")
slib.setLang("eprotect", "es", "banned-exploit-attempt", "Fuiste suspendido por intentar usar un maliciosas!")
slib.setLang("eprotect", "es", "sc-timeout", "Tenes que esperar %s segundos antes de poder screeshotear a %s otra vez!")
slib.setLang("eprotect", "es", "sc-failed", "Fallo al cargar screenshot de %s, sospechoso...")
slib.setLang("eprotect", "es", "has-family-share", "%s esta jugando con una cuenta familiar, el SteamD64 del dueño es %s")
slib.setLang("eprotect", "es", "no-family-share", "%s no esta jugando con una cuenta familiar!")
slib.setLang("eprotect", "es", "no-correlation", "No se pudieron correlacionar IPs con %s")
end

View File

@@ -0,0 +1,88 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
if CLIENT then
slib.setLang("eprotect", "tr", "sc-preview", "Ekranı Görüntüle - ")
slib.setLang("eprotect", "tr", "net-info", "Ağ bilgisi - ")
slib.setLang("eprotect", "tr", "ip-info", "IP bilgisi - ")
slib.setLang("eprotect", "tr", "id-info", "ID bilgisi - ")
slib.setLang("eprotect", "tr", "ip-correlation", "IP ilişkisi - ")
slib.setLang("eprotect", "tr", "table-viewer", "Masa Görüntülemesi")
slib.setLang("eprotect", "tr", "tab-general", "Genel")
slib.setLang("eprotect", "tr", "tab-identifier", "Tanımlayıcı")
slib.setLang("eprotect", "tr", "tab-netlimiter", "Bağ limitleyicisi")
slib.setLang("eprotect", "tr", "tab-netlogger", "Ağ kayıısı")
slib.setLang("eprotect", "tr", "tab-exploitpatcher", "Exploit Güncelleyici")
slib.setLang("eprotect", "tr", "tab-exploitfinder", "Exploit Bulucusu")
slib.setLang("eprotect", "tr", "tab-fakeexploits", "Sahte Exploitler")
slib.setLang("eprotect", "tr", "tab-datasnooper", "Kayıt ağı")
slib.setLang("eprotect", "tr", "player-list", "Oyuncu Listesi")
slib.setLang("eprotect", "tr", "ratelimit", "Hız sınırlayıcısı")
slib.setLang("eprotect", "tr", "ratelimit-tooltip", "Bu genel bir hız sınırlayıcısı. (Xs/Y)")
slib.setLang("eprotect", "tr", "timeout", "Zaman Aşımı")
slib.setLang("eprotect", "tr", "timeout-tooltip", "Bu zaman aşımı genel hız sınırlayıcısına karşıdır.")
slib.setLang("eprotect", "tr", "overflowpunishment", "Taşma cezası")
slib.setLang("eprotect", "tr", "overflowpunishment-tooltip", "Bu ceza ağı rahatlatmak için uygulanır. (1 = kick, 2 = ban)")
slib.setLang("eprotect", "tr", "enable-networking", "Ağ oluşturmayı aktifleştir")
slib.setLang("eprotect", "tr", "disable-networking", "Ağ oluşturmayı engelle")
slib.setLang("eprotect", "tr", "disable-all-networking", "Tüm ağ oluşturmayı engelle")
slib.setLang("eprotect", "tr", "disable-all-networking-tooltip", "Eğer bu aktif olursa kimse sunucuya giremez!")
slib.setLang("eprotect", "tr", "player", "Player")
slib.setLang("eprotect", "tr", "net-string", "Net String")
slib.setLang("eprotect", "tr", "called", "Called")
slib.setLang("eprotect", "tr", "len", "Len")
slib.setLang("eprotect", "tr", "type", "Type")
slib.setLang("eprotect", "tr", "activated", "Activated")
slib.setLang("eprotect", "tr", "secure", "Secured")
slib.setLang("eprotect", "tr", "ip", "IP Adress")
slib.setLang("eprotect", "tr", "date", "Date")
slib.setLang("eprotect", "tr", "country-code", "Country code")
slib.setLang("eprotect", "tr", "status", "Status")
slib.setLang("eprotect", "tr", "unknown", "Unknown")
slib.setLang("eprotect", "tr", "secured", "Secured")
slib.setLang("eprotect", "tr", "check-ids", "ID'leri kontrol et")
slib.setLang("eprotect", "tr", "correlate-ip", "IP adreslerini ilişkilendir")
slib.setLang("eprotect", "tr", "family-share-check", "Aile paylaşımını kontrol et")
slib.setLang("eprotect", "tr", "ply-sent-invalid-data", "Bu oyuncu geçersiz data gönderdi!")
slib.setLang("eprotect", "tr", "ply-failed-retrieving-data", "%s data alınamadı!")
slib.setLang("eprotect", "tr", "net-limit-desc", "Buradaki sayı, insanların hız sınırlandırılmadan önce bir saniye içinde sunucuya maksimum ağ kurma sayısıdır..")
slib.setLang("eprotect", "tr", "capture", "Screenshot")
slib.setLang("eprotect", "tr", "check-ips", "Check IP(s)")
slib.setLang("eprotect", "tr", "fetch-data", "Fetch Data")
elseif SERVER then
slib.setLang("eprotect", "tr", "invalid-player", "böyle bir oyuncu yok!")
slib.setLang("eprotect", "tr", "kick-net-overflow", "Net ağına karşı kötü niyetli eylem gerçekleştirdiğinizden dolayı atıldınız!")
slib.setLang("eprotect", "tr", "banned-net-overflow", "Net ağına karşı kötü niyetli eylem gerçekleştirdiğinizden dolayı yasaklandınız !")
slib.setLang("eprotect", "tr", "banned-net-exploitation", "Net ağına karşı kötü niyetli eylem gerçekleştirdiğinizden dolayı yasaklandınız!")
slib.setLang("eprotect", "tr", "kick-malicious-intent", "Kötü niyetli eylem gerçekleştirdiğinizden dolayı sunucudan atıldınız!")
slib.setLang("eprotect", "tr", "banned-malicious-intent", "Kötü niyetli eylem gerçekleştirdiğinizden dolayı sunucudan yasaklandınız!")
slib.setLang("eprotect", "tr", "banned-exploit-attempt", "Exploit kullanmaya çalıştığın için sunucudan yasaklandın !")
slib.setLang("eprotect", "tr", "sc-timeout", "Şu kadar %s saniye beklemen gerek %s tekrar ekran görüntüsü almak için!")
slib.setLang("eprotect", "tr", "sc-failed", "Şu kişiden ekran görüntüsü alınamadı %s, şüpheli!")
slib.setLang("eprotect", "tr", "has-family-share", "%s Aile paylaşımından oynuyor oyunu ödünç aldığı kişinin ID'si %s!")
slib.setLang("eprotect", "tr", "no-family-share", "%s Aile paylaşımından oynamıyor!")
slib.setLang("eprotect", "tr", "no-correlation", "Şu değer için hiç bir IP adresi ilişkilendirilemedi %s")
end

View File

@@ -0,0 +1,29 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local punished = {}
eProtect.logDetectionHandeler = function(ply, reason, info, type, additional_info)
if eProtect.data.general["bypassgroup"][ply:GetUserGroup()] or eProtect.config["disabledModules"]["detection_log"] then return end
local sid, sid64 = ply:SteamID(), ply:SteamID64()
if eProtect.data.general["bypass_sids"][sid] or eProtect.data.general["bypass_sids"][sid64] then return end
if punished[sid] and CurTime() < punished[sid] then return end
punished[sid] = CurTime() + eProtect.data.general.timeout + 1
local name, sid64 = ply:Nick(), ply:SteamID64()
eProtect.logDetection(name, sid64, reason, info, type, additional_info)
end
if eProtect.queueNetworking then
eProtect.queueNetworking(nil, "punishmentLogging")
end

View File

@@ -0,0 +1,50 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
eProtect = eProtect or {}
eProtect.data = eProtect.data or {}
eProtect.data.exploitPatcher = eProtect.data.exploitPatcher or {}
eProtect.patcher = eProtect.patcher or {}
local function addExploitPatch(str, func)
eProtect.patcher[str] = func
eProtect.data.exploitPatcher[str] = true
end
addExploitPatch("start_wd_emp", function(ply)
if IsValid(ply) and ply:IsPlayer() then
local wep = ply:GetActiveWeapon()
if !IsValid(wep) or wep:GetClass() ~= "weapon_hack_phone" then
return false
end
end
end)
addExploitPatch("gPrinters.removePrinter", function(ply)
if IsValid(ply) and ply:IsPlayer() then
return ply:IsSuperAdmin()
end
end)
hook.Add("eP:PreNetworking", "eP:ExploitPatches", function(ply, netstring, len)
if eProtect.patcher[netstring] and isfunction(eProtect.patcher[netstring]) and !eProtect.config["disabledModules"]["exploit_patcher"] then
local result = eProtect.patcher[netstring](ply)
if result == false then
eProtect.logDetectionHandeler(ply, "patched-exploit", netstring, 2)
eProtect.punish(ply, 2, slib.getLang("eprotect", eProtect.config["language"], "banned-exploit-attempt"))
return false end
end
end)
if eProtect.queueNetworking then
eProtect.queueNetworking(nil, "exploitPatcher")
end

View File

@@ -0,0 +1,60 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
eProtect = eProtect or {}
eProtect.data = eProtect.data or {}
eProtect.data.fakeNets = eProtect.data.fakeNets or {}
local generatedOnes = {}
eProtect.getRandUniqueNum = function()
local rand = math.random(1, 999999)
if generatedOnes[rand] then return eProtect.getRandUniqueNum() end
generatedOnes[rand] = true
return rand
end
eProtect.createFakeNets = function()
if eProtect.config["disabledModules"]["fake_exploits"] then return end
local createdNets = 0
local maxFakeNets = 3
local mixedTbl = {}
for k,v in pairs(eProtect.data.badNets) do
mixedTbl[eProtect.getRandUniqueNum()] = k
end
for k, netstring in pairs(mixedTbl) do
local validateNet = tobool(util.NetworkStringToID(netstring))
if validateNet then continue end
createdNets = createdNets + 1
eProtect.data.fakeNets[netstring] = eProtect.data.fakeNets[netstring] or eProtect.data.badNets[netstring]
eProtect.data.fakeNets[netstring].enabled = true
util.AddNetworkString(netstring)
net.Receive(netstring, function(_, ply)
eProtect.logDetectionHandeler(ply, "fake-exploit", netstring, 2)
eProtect.punish(ply, 2, slib.getLang("eprotect", eProtect.config["language"], "banned-net-exploitation"))
end)
if maxFakeNets > 0 and (createdNets >= maxFakeNets) then break end
end
if eProtect.queueNetworking then
eProtect.queueNetworking(nil, "fakeNets")
end
end
eProtect.createFakeNets()

View File

@@ -0,0 +1,13 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
hook.Add("eP:PostHTTP", "eP:HTTPLoggingHandeler", function(url, type)
eProtect.logHTTP(url, type)
end)

View File

@@ -0,0 +1,31 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local function handleIPLoggin(ply, ip)
local sid64 = ply:SteamID64()
http.Fetch("http://ip-api.com/json/"..ip, function(json)
json = util.JSONToTable(json)
local result = json["countryCode"]
if !result then result = "N/A" end
eProtect.registerIP(sid64, ip, result)
end, function()
eProtect.registerIP(sid64, ip, "N/A")
end)
end
hook.Add("PlayerInitialSpawn", "eP:IPLogging", function(ply)
if ply:IsBot() or eProtect.config["disabledModules"]["identifier"] then return end
local plyIP = ply:IPAddress()
local ip = string.sub(plyIP, 1, string.find(plyIP, ":") - 1)
handleIPLoggin(ply, ip)
end)

View File

@@ -0,0 +1,78 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
eProtect = eProtect or {}
eProtect.data = eProtect.data or {}
eProtect.data.netLimitation = eProtect.data.netLimitation or {}
for i = 1, 2048 do
local netstring = util.NetworkIDToString(i)
if !netstring then continue end
if netstring and isstring(netstring) and eProtect.data.netLimitation[netstring] == nil and !eProtect.data.fakeNets[netstring] then
local func = net.Receivers[string.lower(netstring)]
if func then eProtect.data.netLimitation[netstring] = 0 end
end
end
if eProtect.queueNetworking then
eProtect.queueNetworking(nil, "netLimitation")
end
local generalCounter = {}
local specificCounter = {}
local timeout = {}
hook.Add("eP:PreNetworking", "eP:NetLimiter", function(ply, netstring, len)
if !eProtect.data or !eProtect.data.general or eProtect.data.netLimitation[netstring] == -1 or eProtect.config["disabledModules"]["net_limiter"] then return end
if !eProtect.data.netLimitation[netstring] then
local func = net.Receivers[string.lower(netstring)]
if func then eProtect.data.netLimitation[netstring] = 0 end
eProtect.queueNetworking(nil, "netLimitation")
end
local sid, sid64 = ply:SteamID(), ply:SteamID64()
local specific = eProtect.data.netLimitation[netstring] ~= nil and eProtect.data.netLimitation[netstring] > 0 or false
specificCounter[sid] = specificCounter[sid] or {}
if !timeout[sid] then timeout[sid] = CurTime() end
if timeout[sid] and ((CurTime() - timeout[sid]) >= eProtect.data.general.timeout) then
specificCounter[sid] = {}
generalCounter[sid] = 0
timeout[sid] = nil
end
if specific then
specificCounter[sid][netstring] = specificCounter[sid][netstring] or 0
specificCounter[sid][netstring] = specificCounter[sid][netstring] + 1
else
generalCounter[sid] = generalCounter[sid] or 0
generalCounter[sid] = generalCounter[sid] + 1
end
local counter = specific and specificCounter[sid][netstring] or generalCounter[sid]
local limit = specific and eProtect.data.netLimitation[netstring] or eProtect.data.general.ratelimit
if limit > -1 and counter > limit and eProtect.data.general.overflowpunishment > 0 and !eProtect.data.general["bypassgroup"][ply:GetUserGroup()] and !eProtect.data.general["bypass_sids"][sid] and !eProtect.data.general["bypass_sids"][sid64] then
if eProtect.data.general["whitelistergroup"][ply:GetUserGroup()] then
eProtect.data.netLimitation[netstring] = -1
eProtect.queueNetworking(nil, "netLimitation")
return end
eProtect.logDetectionHandeler(ply, "net-overflow", netstring, eProtect.data.general.overflowpunishment)
if eProtect.data.general.overflowpunishment <= 2 then
eProtect.punish(ply, eProtect.data.general.overflowpunishment, slib.getLang("eprotect", eProtect.config["language"], eProtect.data.general.overflowpunishment == 1 and "kick-net-overflow" or "banned-net-overflow"))
end
return false
end
end)

View File

@@ -0,0 +1,31 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
eProtect = eProtect or {}
eProtect.data = eProtect.data or {}
eProtect.data.netLogging = eProtect.data.netLogging or {}
hook.Add("eP:PostNetworking", "eP:LogNetworking", function(ply, net, len)
if !net or len == nil or eProtect.config["disabledModules"]["net_logger"] then return end
eProtect.data.netLogging[net] = eProtect.data.netLogging[net] or {called = 0, len = 0, playercalls = {}}
eProtect.data.netLogging[net].called = eProtect.data.netLogging[net].called + 1
eProtect.data.netLogging[net].len = eProtect.data.netLogging[net].len + len
if IsValid(ply) and ply:IsPlayer() then
local sid = ply:SteamID()
eProtect.data.netLogging[net].playercalls[sid] = eProtect.data.netLogging[net].playercalls[sid] or 0
eProtect.data.netLogging[net].playercalls[sid] = eProtect.data.netLogging[net].playercalls[sid] + 1
end
if eProtect.queueNetworking then
eProtect.queueNetworking(nil, "netLogging")
end
end)

View File

@@ -0,0 +1,574 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
eProtect = eProtect or {}
eProtect.queneData = eProtect.queneData or {}
eProtect.saveQueue = eProtect.saveQueue or {}
eProtect.data = eProtect.data or {}
eProtect.data.disabled = eProtect.data.disabled or {}
local ignoreSaving = {
["fakeNets"] = true,
["netLogging"] = true,
["exploitPatcher"] = true
}
util.AddNetworkString("eP:Handeler")
local function openMenu(ply)
net.Start("eP:Handeler")
net.WriteUInt(2, 3)
net.Send(ply)
end
local convertedTbl
convertedTbl = function(tbl)
local converted_tbl = {}
for k,v in pairs(tbl) do
if istable(v) then v = convertedTbl(v) end
local isSID = util.SteamIDFrom64(k) != "STEAM_0:0:0"
if isSID then
converted_tbl["sid64_"..k] = v
else
converted_tbl[k] = v
end
end
return converted_tbl
end
local function networkData(ply, data, specific)
if !data then return end
local data = util.TableToJSON(convertedTbl(data))
data = util.Compress(data)
net.Start("eP:Handeler")
net.WriteUInt(1, 3)
net.WriteUInt(#data, 32)
net.WriteData(data, #data)
if specific then
net.WriteString(specific)
end
net.Send(ply)
end
eProtect.hasPermission = function(ply, specific)
return eProtect.config["permission"][ply:GetUserGroup()]
end
local punished = {}
eProtect.getData = function(specific)
local data = file.Read("eprotect/data.json", "DATA")
if !data then return end
data = util.JSONToTable(data)
if specific then
data = data[specific]
end
for k,v in pairs(data) do
eProtect.data[k] = v
end
return table.Copy(data)
end
eProtect.dataVerification = function()
local data = eProtect.getData()
data = data or {}
data["general"] = data["general"] or {}
for k,v in pairs(eProtect.BaseConfig) do
if data["general"][k] then continue end
data["general"][k] = v[1]
end
for k,v in pairs(eProtect.data) do
if ignoreSaving[k] or k == "general" then continue end
data[k] = v
end
file.CreateDir("eprotect")
file.Write("eprotect/data.json", util.TableToJSON(data))
eProtect.getData()
eProtect.queueNetworking()
end
eProtect.saveData = function()
file.CreateDir("eprotect")
local data = table.Copy(eProtect.data)
for k, v in pairs(data) do
if ignoreSaving[k] then data[k] = nil end
end
file.Write("eprotect/data.json", util.TableToJSON(data))
end
eProtect.canNetwork = function(ply, netstring)
if !IsValid(ply) or !ply:IsPlayer() then return end
if (punished[ply:SteamID()] or eProtect.data.disabled[ply:SteamID()] or eProtect.data.general["disable-all-networking"]) and (netstring ~= "eP:Handeler") then return false end
return true
end
eProtect.punish = function(ply, type, msg, duration)
if eProtect.data.general["bypassgroup"][ply:GetUserGroup()] or eProtect.data.general["bypass_sids"][ply:SteamID()] or eProtect.data.general["bypass_sids"][ply:SteamID64()] then return end
msg = eProtect.config["prefix"]..msg
punished[ply:SteamID()] = true
slib.punish(ply, type, msg, duration)
end
eProtect.networkData = function(ply)
if eProtect.queneData[ply:SteamID()] then
for k,v in pairs(eProtect.queneData[ply:SteamID()]) do
networkData(ply, eProtect.data[k], k)
eProtect.queneData[ply:SteamID()][k] = nil
end
end
end
local function registerQuene(ply, specific)
if specific then
eProtect.queneData[ply:SteamID()] = eProtect.queneData[ply:SteamID()] and eProtect.queneData[ply:SteamID()] or {}
eProtect.queneData[ply:SteamID()][specific] = true
else
for k,v in pairs(eProtect.data) do
registerQuene(ply, k)
end
end
end
eProtect.queueNetworking = function(ply, specific)
if ply then
registerQuene(ply, specific)
else
for k,v in pairs(player.GetAll()) do
if !IsValid(v) then continue end
registerQuene(v, specific)
end
end
end
local screenshotRequested = {}
local idRequested = {}
local dataRequested = {}
local limitSC = {}
local function requestData(ply, target, type)
local data
if type == 1 then
local sid = target:SteamID()
if limitSC[sid] and CurTime() - limitSC[sid] < 10 then
slib.notify(eProtect.config["prefix"]..slib.getLang("eprotect", eProtect.config["language"], "sc-timeout", math.Round(10 - (CurTime() - limitSC[sid])), target:Nick()), ply)
return end
limitSC[sid] = CurTime()
data = screenshotRequested
elseif type == 2 then
data = idRequested
elseif type == 3 then
data = dataRequested
end
if data[target] then return end
data[target] = ply
net.Start("eP:Handeler")
net.WriteUInt(3, 3)
net.WriteUInt(type, 2)
net.WriteBool(false)
net.Send(target)
timer.Simple(10, function()
if !target or !ply then return end
if data[target] then
data[target] = nil
slib.notify(eProtect.config["prefix"]..slib.getLang("eprotect", eProtect.config["language"], "sc-failed", target:Nick()), ply)
end
end)
end
hook.Add("PlayerInitialSpawn", "eP:NetworkingQueuer", function(ply)
eProtect.queueNetworking(ply)
local sid = ply:SteamID()
if punished[sid] then punished[sid] = nil end
end)
local function verifyBannedAlt(ply, sid64, type)
sid64 = sid64 or ply:SteamID64()
local isBanned = slib.isBanned(sid64, function(banned, sid) if banned then if IsValid(ply) then slib.punish(ply, type, eProtect.config["prefix"]..slib.getLang("eprotect", eProtect.config["language"], "punished-alt")) end end end)
if isBanned then
slib.punish(ply, type, eProtect.config["prefix"]..slib.getLang("eprotect", eProtect.config["language"], "punished-alt"))
end
return isBanned
end
local settingConverter = { // Its reverted on clientside
[1] = 3,
[2] = 1,
[3] = 2
}
hook.Add("PlayerInitialSpawn", "eP:AutomaticChecks", function(ply)
local automatic_identifier = tonumber(eProtect.data.general["automatic-identifier"]) or 1
timer.Simple(1.5, function() -- Giving time to set usergroup.
if !IsValid(ply) or !ply:IsPlayer() or ply:IsBot() or eProtect.data.general["bypassgroup"][ply:GetUserGroup()] or eProtect.data.general["bypass_sids"][ply:SteamID64()] or eProtect.data.general["bypass_sids"][ply:SteamID()] then return end
if eProtect.data.general["block-vpn"] and !eProtect.data.general["bypass-vpn"][ply:GetUserGroup()] and !eProtect.data.general["bypass-vpn"][ply:SteamID64()] then
local ip = ""
for k,v in ipairs(string.ToTable(ply:IPAddress())) do
if v == ":" then break end
ip = ip..v
end
http.Fetch("https://proxycheck.io/v2/"..ip.."?vpn=1", function(result)
result = result and util.JSONToTable(result)
if result[ip] and result[ip].proxy == "yes" then
ply:Kick(eProtect.config["prefix"]..slib.getLang("eprotect", eProtect.config["language"], "vpn-blocked"))
end
end)
end
if automatic_identifier > 0 then
eProtect.correlateIP(ply, function(result)
local correlatedIPs = result
local plysid64, ownerplysid64 = ply:SteamID64(), ply:OwnerSteamID64()
local familyShare = ply:SteamID64() ~= ply:OwnerSteamID64()
local detections = !familyShare and !table.IsEmpty(correlatedIPs)
local altsDetected = {}
if detections then
local detect_type
detections = ""
if correlatedIPs and istable(correlatedIPs) and !table.IsEmpty(correlatedIPs) then
detect_type = "correlated-ip"
for k,v in ipairs(correlatedIPs) do
table.insert(altsDetected, v.sid64)
end
detections = slib.getLang("eprotect", eProtect.config["language"], "correlated-ip")
end
if familyShare then
detect_type = "family-share"
detections = detections == "" and slib.getLang("eprotect", eProtect.config["language"], "family-share") or detections.." "..slib.getLang("eprotect", eProtect.config["language"], "and").." "..slib.getLang("eprotect", eProtect.config["language"], "family-share")
table.insert(altsDetected, ownerplysid64)
end
if detections ~= "" then
local doneAction
if automatic_identifier == 1 then
for k, v in ipairs(player.GetAll()) do
if eProtect.data.general["notification-groups"][v:GetUserGroup()] then
slib.notify(eProtect.config["prefix"]..slib.getLang("eprotect", eProtect.config["language"], "auto-detected-alt", ply:Nick(), detections), v)
end
end
doneAction = true
elseif automatic_identifier == 2 then
for k,v in ipairs(altsDetected) do
doneAction = doneAction or verifyBannedAlt(ply, v, 1)
end
elseif automatic_identifier == 3 then
for k,v in ipairs(altsDetected) do
doneAction = doneAction or verifyBannedAlt(ply, v, 2)
end
end
if doneAction then
eProtect.logDetectionHandeler(ply, "alt-detection", slib.getLang("eprotect", eProtect.config["language"], detect_type), settingConverter[automatic_identifier], util.TableToJSON(altsDetected))
end
end
end
end)
end
end)
end)
hook.Add("PlayerSay", "eP:OpenMenu", function(ply, text, public)
if eProtect.config["command"] == string.lower(text) then
if !eProtect.hasPermission(ply) then
return text
end
eProtect.networkData(ply)
openMenu(ply)
return ""
end
end )
hook.Add("eP:PreNetworking", "eP:Restrictions", function(ply, netstring, len)
if !eProtect.canNetwork(ply, netstring) then return false end
if len >= 512000 then eProtect.logDetectionHandeler(ply, "net-overflow", netstring, 1) eProtect.punish(ply, 1, slib.getLang("eprotect", eProtect.config["language"], "kick-net-overflow")) return false end
end)
hook.Add("eP:PreHTTP", "eP:PreventBlockedHTTP", function(url)
if eProtect.data.general["httpfocusedurls"] then
return eProtect.data.general["httpfocusedurlsisblacklist"] == !tobool(eProtect.data.general["httpfocusedurls"][url])
end
end)
timer.Create("eP:SaveCache", eProtect.config["process-save-queue"], 0, function()
if !eProtect.saveQueue then return end
eProtect.saveData()
eProtect.saveQueue = nil
end)
net.Receive("eP:Handeler", function(len, ply)
local gateway = net.ReadBit()
local action = net.ReadUInt(2)
if tobool(gateway) then
if !eProtect.hasPermission(ply) then return end
if action == 0 then
local id = net.ReadUInt(1)
local page = net.ReadUInt(15)
local search = net.ReadString()
if id == 0 then
eProtect.requestHTTPLog(ply, page, search)
elseif id == 1 then
eProtect.requestDetectionLog(ply, page, search)
end
elseif action == 1 then
local specific = net.ReadUInt(3)
local strings = {}
for i=1,specific do
strings[i] = net.ReadString()
end
local statement = net.ReadUInt(2)
local data
if statement == 1 then
data = net.ReadBool()
elseif statement == 2 then
data = net.ReadInt(32)
elseif statement == 3 then
local chunk = net.ReadUInt(32)
data = net.ReadData(chunk)
data = util.Decompress(data)
data = util.JSONToTable(data)
local converted_tbl = {}
for k, v in pairs(data) do
if string.sub(k, 1, 6) == "sid64_" then
local sid64 = string.sub(k, 7, #k)
if util.SteamIDFrom64(sid64) != "STEAM_0:0:0" then
k = sid64
end
end
converted_tbl[k] = v
end
data = converted_tbl
end
local finaldestination = eProtect.data
for k,v in ipairs(strings) do
finaldestination = finaldestination[v]
if k >= (#strings - 1) then break end
end
finaldestination[strings[#strings]] = data
eProtect.saveQueue = true
eProtect.queueNetworking(nil, strings[1])
elseif action == 2 then
local subaction = net.ReadUInt(3)
local target = net.ReadUInt(14)
target = Entity(target)
if !IsValid(target) or !target:IsPlayer() then slib.notify(eProtect.config["prefix"]..slib.getLang("eprotect", eProtect.config["language"], "invalid-player"), ply) return end
local sid = target:SteamID()
if subaction == 1 then
eProtect.data.disabled[sid] = net.ReadBool()
eProtect.queueNetworking(nil, "disabled")
elseif subaction == 2 then
requestData(ply, target, net.ReadUInt(2))
elseif subaction == 3 then
local bit = net.ReadBit()
if tobool(bit) then
eProtect.correlateIP(target, function(result)
if !IsValid(target) or !IsValid(ply) then return end
if table.IsEmpty(result) then slib.notify(eProtect.config["prefix"]..slib.getLang("eprotect", eProtect.config["language"], "no-correlation", target:Nick()), ply) return end
result = util.TableToJSON(result)
result = util.Base64Encode(result)
net.Start("eP:Handeler")
net.WriteUInt(4,3)
net.WriteUInt(target:EntIndex(), 14)
net.WriteString(result)
net.WriteBit(1)
net.Send(ply)
end)
else
eProtect.showIPs(target, ply)
end
elseif subaction == 4 then
local sid64 = target:SteamID64()
local ownersid64 = target:OwnerSteamID64()
if sid64 == ownersid64 then
slib.notify(eProtect.config["prefix"]..slib.getLang("eprotect", eProtect.config["language"], "no-family-share", target:Nick()), ply)
else
slib.notify(eProtect.config["prefix"]..slib.getLang("eprotect", eProtect.config["language"], "has-family-share", target:Nick(), ownersid64), ply)
end
end
end
else
if action == 1 then
local subaction = net.ReadUInt(2)
local data
if subaction == 1 then
data = screenshotRequested
elseif subaction == 2 then
data = idRequested
elseif subaction == 3 then
data = dataRequested
end
if !data[ply] then if eProtect.config["punishMaliciousIntent"] then eProtect.punish(ply, 1, slib.getLang("eprotect", eProtect.config["language"], "kick-malicious-intent")) end return end
local target = data[ply]
data[ply] = nil
local id
if subaction == 3 then
local chunk = net.ReadUInt(32)
id = net.ReadData(chunk)
else
id = net.ReadString()
end
if !id or id == "" then
if eProtect.config["punishMaliciousIntent"] then
eProtect.punish(ply, 1, slib.getLang("eprotect", eProtect.config["language"], "kick-malicious-intent"))
end
return end
net.Start("eP:Handeler")
net.WriteUInt(3, 3)
net.WriteUInt(subaction, 2)
net.WriteUInt(ply:EntIndex(), 14)
net.WriteBool(true)
if subaction == 3 then
local chunk = #id
net.WriteUInt(chunk, 32)
net.WriteData(id, chunk)
else
net.WriteString(id)
end
net.Send(target)
elseif action == 2 then
local menu = net.ReadUInt(2)
local menus = {
[1] = "Loki",
[2] = "Exploit City"
}
eProtect.logDetectionHandeler(ply, "exploit-menu", menus[menu], 2)
eProtect.punish(ply, 2, slib.getLang("eprotect", eProtect.config["language"], "banned-exploit-menu"))
end
end
end)
hook.Add("eP:SQLConnected", "eP:TransferOldIPs", function()
local files = file.Find("eprotect/ips/*", "DATA")
for k,v in pairs(files) do
local sid64 = string.gsub(v, ".json", "")
local ips = file.Read("eprotect/ips/"..v, "DATA")
ips = util.JSONToTable(ips)
if !ips then continue end
for ip, data in pairs(ips) do
eProtect.registerIP(sid64, ip, data[1], data[2])
end
file.Delete("eprotect/ips/"..v)
end
file.Delete("eprotect/ips")
local save = false
if eProtect.data.httpLogging then
for url, v in pairs(eProtect.data.httpLogging) do
eProtect.logHTTP(url, v.type, v.called)
end
eProtect.data.httpLogging = nil
save = true
end
if eProtect.data.punishmentLogging then
for i = #eProtect.data.punishmentLogging, 1, -1 do
local data = eProtect.data.punishmentLogging[i]
eProtect.logDetection(data.ply, "", data.reason, data.info, data.type)
end
eProtect.data.punishmentLogging = nil
save = true
end
if save then
eProtect.saveData()
end
end)
eProtect.dataVerification()

View File

@@ -0,0 +1,67 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
eProtect = eProtect or {}
eProtect.overrides = eProtect.overrides or {}
if !eProtect.overrides["net.Incoming"] then
eProtect.overrides["net.Incoming"] = true
function net.Incoming( len, client )
local i = net.ReadHeader()
local strName = util.NetworkIDToString( i )
if ( !strName ) then return end
local func = net.Receivers[ strName:lower() ]
if ( !func ) then return end
len = len - 16
local pre = hook.Run("eP:PreNetworking", client, strName, len)
if pre == false then return end
func( len, client )
hook.Run("eP:PostNetworking", client, strName, len)
end
end
if !eProtect.config["disablehttplogging"] and ((!VC and !XEON and !mLib) or eProtect.config["ignoreDRM"]) then
if !eProtect.overrides["http.Fetch"] then
eProtect.overrides["http.Fetch"] = true
local oldFetch = http.Fetch
function http.Fetch(...)
local args = {...}
local result = hook.Run("eP:PreHTTP", args[1], "fetch")
if result == false then return end
oldFetch(...)
hook.Run("eP:PostHTTP", args[1], "fetch")
end
end
if !eProtect.overrides["http.Post"] then
eProtect.overrides["http.Post"] = true
local oldPost = http.Post
function http.Post(...)
local args = {...}
local result = hook.Run("eP:PreHTTP", args[1], "post")
if result == false then return end
oldPost(...)
hook.Run("eP:PostHTTP", args[1], "post")
end
end
end

View File

@@ -0,0 +1,250 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local query, db
local escape_str = function(str) return SQLStr(str, true) end
local create_queries = {
[1] = [[CREATE TABLE IF NOT EXISTS eprotect_ips(
id INTEGER PRIMARY KEY %s,
sid64 CHAR(17),
ip CHAR(15),
country CHAR(3),
logged_time INTEGER DEFAULT 0
)]],
[2] = [[CREATE TABLE IF NOT EXISTS eprotect_detections(
id INTEGER PRIMARY KEY %s,
name CHAR(32),
sid64 CHAR(17),
reason CHAR(32),
info CHAR(32),
type INTEGER DEFAULT 0,
logged_time INTEGER DEFAULT 0,
additional_info TEXT NULL
)]],
[3] = [[CREATE TABLE IF NOT EXISTS eprotect_http(
id INTEGER PRIMARY KEY %s,
link CHAR(64),
type CHAR(6),
called INTEGER DEFAULT 0
)]],
[4] = [[ALTER TABLE eprotect_detections
ADD additional_info TEXT NULL]]
}
local function makeTables()
for i = 1, #create_queries do
query(string.format(create_queries[i], eProtect.config["storage_type"] == "sql_local" and "AUTOINCREMENT" or "AUTO_INCREMENT"))
end
end
if eProtect.config["storage_type"] == "mysql" then
require("mysqloo")
query = function() end
local dbinfo = eProtect.config["mysql_info"]
db = mysqloo.connect(dbinfo.host, dbinfo.username, dbinfo.password, dbinfo.database, dbinfo.port)
function db:onConnected()
print(eProtect.config["prefix"]..slib.getLang("eprotect", eProtect.config["language"], "mysql_successfull"))
query = function(str, func)
local q = db:query(str)
q.onSuccess = function(_, data)
if func then
func(data)
end
end
q.onError = function(_, err) end
q:start()
end
escape_str = function(str) return db:escape(tostring(str)) end
makeTables()
hook.Run("eP:SQLConnected")
end
function db:onConnectionFailed(err)
print(eProtect.config["prefix"]..slib.getLang("eprotect", eProtect.config["language"], "mysql_failed"))
print( "Error:", err )
end
db:connect()
else
local oldFunc = sql.Query
query = function(str, func)
local result = oldFunc(str)
if func then
func(result)
end
end
makeTables()
end
local function handleCallbacksCorrelation(parent_tbl, correlated, callback)
for k,v in ipairs(parent_tbl) do
if !v then return end
end
if !callback then return end
callback(correlated or {})
end
eProtect.correlateIP = function(target, callback)
if !IsValid(target) then return end
local sid64, tbl = target:SteamID64(), {}
query("SELECT * FROM eprotect_ips WHERE sid64 = '"..sid64.."'", function(result)
if result and result[1] then
local parent_tbl = {}
for k, v in ipairs(result) do
parent_tbl[k] = false
end
for key, plydata in ipairs(result) do
query("SELECT * FROM eprotect_ips WHERE ip = '"..(plydata.ip).."'", function(result)
if result and result[1] then
for k,v in ipairs(result) do
if v.sid64 == sid64 then continue end
table.insert(tbl, {sid64 = v.sid64, ip = v.ip})
end
end
parent_tbl[key] = true
handleCallbacksCorrelation(parent_tbl, tbl, callback)
end)
end
end
end)
end
eProtect.showIPs = function(target, ply)
local sid64 = target:SteamID64()
query("SELECT * FROM eprotect_ips WHERE sid64 = '"..sid64.."'", function(result)
if !IsValid(target) or !IsValid(ply) or !result or !result[1] then return end
result = util.TableToJSON(result)
result = util.Base64Encode(result)
net.Start("eP:Handeler")
net.WriteUInt(4,3)
net.WriteUInt(target:EntIndex(), 14)
net.WriteString(result)
net.WriteBit(0)
net.Send(ply)
end)
end
eProtect.registerIP = function(sid64, ip, country, time)
query("SELECT * FROM eprotect_ips WHERE ip = '"..ip.."' AND sid64 = '"..sid64.."'", function(result)
if result and result[1] then return end
query(string.format("INSERT INTO eprotect_ips(ip, sid64, country, logged_time) VALUES('%s', %s, '%s', %s)", escape_str(ip), sid64, escape_str(country), time or os.time()))
end)
end
eProtect.logDetection = function(name, sid64, reason, info, type, additional_info)
additional_info = additional_info or ""
query(string.format("INSERT INTO eprotect_detections(name, sid64, reason, info, type, logged_time, additional_info) VALUES('%s', '%s', '%s', '%s', '%s', %s, '%s')", escape_str(name), escape_str(sid64), escape_str(reason), escape_str(info), escape_str(type), os.time(), escape_str(additional_info)))
end
eProtect.logHTTP = function(link, type, called)
link = escape_str(link)
query("SELECT * FROM eprotect_http WHERE link = '"..link.."'", function(result)
if result and result[1] then
query("UPDATE eprotect_http SET called = "..(result[1].called + 1).." WHERE link = '"..link.."'")
return end
query(string.format("INSERT INTO eprotect_http(link, type, called) VALUES('%s', '%s', "..(tonumber(called) or 1)..")", link, escape_str(type)))
end)
end
local function networkData(ply, data, id)
local compressed = util.Compress(util.TableToJSON(data))
net.Start("eP:Handeler")
net.WriteUInt(5, 3)
net.WriteUInt(id, 1)
net.WriteUInt(#compressed, 32)
net.WriteData(compressed, #compressed)
net.Send(ply)
end
local http_cd, detection_cd = {}, {}
eProtect.requestHTTPLog = function(ply, page, search)
if http_cd[ply] and http_cd[ply] > CurTime() then return end
http_cd[ply] = CurTime() + .1
search = search ~= "" and escape_str(search) or nil
local perpage, pageCount = 20, 1
local start = perpage * ((tonumber(page) or 1) - 1)
local data = {}
local search_str = search and " WHERE (link LIKE '%"..search.."%')" or ""
query("SELECT COUNT(id) FROM eprotect_http"..search_str, function(pageresult)
if pageresult and pageresult[1] and pageresult[1]["COUNT(id)"] then
data.pageCount = math.max(math.ceil((pageresult[1]["COUNT(id)"] or 0) / perpage), 1)
end
data.page = page
query("SELECT * FROM eprotect_http "..search_str.." LIMIT "..start..", "..perpage, function(result)
data.result = result
networkData(ply, data, 0)
end)
end)
end
eProtect.requestDetectionLog = function(ply, page, search)
if detection_cd[ply] and detection_cd[ply] > CurTime() then return end
detection_cd[ply] = CurTime() + .1
search = search ~= "" and escape_str(search) or nil
local perpage, pageCount = 20, 1
local start = perpage * ((tonumber(page) or 1) - 1)
local data = {}
local search_str = search and " WHERE (sid64 LIKE '%"..search.."%' OR name LIKE '%"..search.."%') " or ""
query("SELECT COUNT(id) FROM eprotect_detections"..search_str, function(pageresult)
if pageresult and pageresult[1] and pageresult[1]["COUNT(id)"] then
data.pageCount = math.max(math.ceil((pageresult[1]["COUNT(id)"] or 0) / perpage), 1)
end
data.page = page
query("SELECT * FROM eprotect_detections"..search_str.." ORDER BY id DESC LIMIT "..start..", "..perpage, function(result)
data.result = result
networkData(ply, data, 1)
end)
end)
end
if eProtect.config["storage_type"] == "sql_local" then
hook.Run("eP:SQLConnected")
end

View File

@@ -0,0 +1,109 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
------------------------------------------------------
-- NO NOT TOUCH ANYTHING IN HERE!!!!!!!!!
------------------------------------------------------
eProtect = eProtect or {}
eProtect.BaseConfig = eProtect.BaseConfig or {}
eProtect.BaseConfig["disable-all-networking"] = {false, 1}
eProtect.BaseConfig["automatic-identifier"] = {1, 2, {min = 0, max = 3}}
eProtect.BaseConfig["block-vpn"] = {false, 3}
eProtect.BaseConfig["bypass-vpn"] = {{["76561198002319944"] = true}, 4, function()
local list = {}
for k,v in ipairs(player.GetAll()) do
local sid64 = v:SteamID64()
if !sid64 then continue end
list[sid64] = true
end
if CAMI and CAMI.GetUsergroups then
for k,v in pairs(CAMI.GetUsergroups()) do
list[k] = true
end
end
return list
end}
eProtect.BaseConfig["notification-groups"] = {{["superadmin"] = true}, 5, CAMI and CAMI.GetUsergroups and function() local tbl = {} for k,v in pairs(CAMI.GetUsergroups()) do tbl[k] = true end return tbl end or {}}
eProtect.BaseConfig["ratelimit"] = {500, 6, {min = -1, max = 100000}}
eProtect.BaseConfig["timeout"] = {3, 7, {min = 0, max = 5000}}
eProtect.BaseConfig["overflowpunishment"] = {2, 8, {min = 0, max = 3}}
eProtect.BaseConfig["whitelistergroup"] = {{}, 9, function()
local list = {}
if CAMI and CAMI.GetUsergroups then
for k,v in pairs(CAMI.GetUsergroups()) do
list[k] = true
end
end
return list
end}
eProtect.BaseConfig["bypassgroup"] = {{}, 10, function()
local list = {
["superadmin"] = true,
["owner"] = true
}
if CAMI and CAMI.GetUsergroups then
for k,v in pairs(CAMI.GetUsergroups()) do
list[k] = true
end
end
return list
end}
eProtect.BaseConfig["bypass_sids"] = {{["76561198002319944"] = true}, 11, function()
local list = {}
for k,v in ipairs(player.GetAll()) do
local sid64 = v:SteamID64()
if !sid64 then continue end
list[sid64] = true
end
return list
end}
eProtect.BaseConfig["httpfocusedurlsisblacklist"] = {true, 12}
eProtect.BaseConfig["httpfocusedurls"] = {{}, 13, function()
local list = {}
local tbl_http = eProtect.data["requestedHTTP"] and eProtect.data["requestedHTTP"].result or {}
if tbl_http then
for k,v in ipairs(tbl_http) do
list[v.link] = true
end
end
return list
end}
------------------------------------------------------
-- NO NOT TOUCH ANYTHING IN HERE!!!!!!!!!
------------------------------------------------------76561198002319944

View File

@@ -0,0 +1,43 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
eProtect = eProtect or {}
eProtect.config = eProtect.config or {}
eProtect.config["language"] = "en"
eProtect.config["prefix"] = "[eProtect] "
eProtect.config["storage_type"] = "sql_local"-- (sql_local or mysql)
eProtect.config["disablehttplogging"] = false -- If a DRM is ran after eProtect it could break if they check for HTTP modifications! If so make this true.
eProtect.config["ignoreDRM"] = false
eProtect.config["scURL"] = "https://stromic.dev/eprotect/img.php" -- This is the URL used to handle screenshots, can be self hosted here: https://github.com/Stromic/eprotect-web
eProtect.config["punishMaliciousIntent"] = true
eProtect.config["disabledModules"] = {
["identifier"] = false,
["detection_log"] = false,
["net_limiter"] = false,
["net_logger"] = false,
["exploit_patcher"] = false,
["exploit_finder"] = false,
["fake_exploits"] = false,
["data_snooper"] = false
}
eProtect.config["permission"] = {
["owner"] = true,
["superadmin"] = true
}

View File

@@ -0,0 +1,550 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
eProtect = eProtect or {}
eProtect.config = eProtect.config or {}
eProtect.config["mysql_info"] = {
host = "",
port = 3306,
database = "",
username = "",
password = ""
}
eProtect.config["command"] = "!eprotect"
eProtect.config["process-save-queue"] = 10 --- This will check if we should save data to the file. 00
eProtect.data = eProtect.data or {}
eProtect.data.badNets = eProtect.data.badNets or {}
eProtect.registerBadNet = function(netstring, num)
eProtect.data.badNets[netstring] = {type = num}
end
-- Credits to meepen for the table with known exploits and backdoors! <3
--- Known Exploits
eProtect.registerBadNet("pplay_deleterow", 1)
eProtect.registerBadNet("pplay_addrow", 1)
eProtect.registerBadNet("pplay_sendtable", 1)
eProtect.registerBadNet("WriteQuery", 1)
eProtect.registerBadNet("SendMoney", 1)
eProtect.registerBadNet("BailOut", 1)
eProtect.registerBadNet("customprinter_get", 1)
eProtect.registerBadNet("textstickers_entdata", 1)
eProtect.registerBadNet("NC_GetNameChange", 1)
eProtect.registerBadNet("ATS_WARP_REMOVE_CLIENT", 1)
eProtect.registerBadNet("ATS_WARP_FROM_CLIENT", 1)
eProtect.registerBadNet("ATS_WARP_VIEWOWNER", 1)
eProtect.registerBadNet("CFRemoveGame", 1)
eProtect.registerBadNet("CFJoinGame", 1)
eProtect.registerBadNet("CFEndGame", 1)
eProtect.registerBadNet("CreateCase", 1)
eProtect.registerBadNet("rprotect_terminal_settings", 1)
eProtect.registerBadNet("StackGhost", 1)
eProtect.registerBadNet("RevivePlayer", 1)
eProtect.registerBadNet("ARMORY_RetrieveWeapon", 1)
eProtect.registerBadNet("TransferReport", 1)
eProtect.registerBadNet("SimplicityAC_aysent", 1)
eProtect.registerBadNet("pac_to_contraption", 1)
eProtect.registerBadNet("SyncPrinterButtons76561198056171650", 1)
eProtect.registerBadNet("sendtable", 1)
eProtect.registerBadNet("steamid2", 1)
eProtect.registerBadNet("Kun_SellDrug", 1)
eProtect.registerBadNet("net_PSUnBoxServer", 1)
eProtect.registerBadNet("pplay_deleterow", 1)
eProtect.registerBadNet("pplay_addrow", 1)
eProtect.registerBadNet("CraftSomething", 1)
eProtect.registerBadNet("banleaver", 1)
eProtect.registerBadNet("75_plus_win", 1)
eProtect.registerBadNet("ATMDepositMoney", 1)
eProtect.registerBadNet("Taxi_Add", 1)
eProtect.registerBadNet("Kun_SellOil", 1)
eProtect.registerBadNet("SellMinerals", 1)
eProtect.registerBadNet("TakeBetMoney", 1)
eProtect.registerBadNet("PoliceJoin", 1)
eProtect.registerBadNet("CpForm_Answers", 1)
eProtect.registerBadNet("DepositMoney", 1)
eProtect.registerBadNet("MDE_RemoveStuff_C2S", 1)
eProtect.registerBadNet("NET_SS_DoBuyTakeoff", 1)
eProtect.registerBadNet("NET_EcSetTax", 1)
eProtect.registerBadNet("RP_Accept_Fine", 1)
eProtect.registerBadNet("RP_Fine_Player", 1)
eProtect.registerBadNet("RXCAR_Shop_Store_C2S", 1)
eProtect.registerBadNet("RXCAR_SellINVCar_C2S", 1)
eProtect.registerBadNet("drugseffect_remove", 1)
eProtect.registerBadNet("drugs_money", 1)
eProtect.registerBadNet("CRAFTINGMOD_SHOP", 1)
eProtect.registerBadNet("drugs_ignite", 1)
eProtect.registerBadNet("drugseffect_hpremove", 1)
eProtect.registerBadNet("DarkRP_Kun_ForceSpawn", 1)
eProtect.registerBadNet("drugs_text", 1)
eProtect.registerBadNet("NLRKick", 1)
eProtect.registerBadNet("RecKickAFKer", 1)
eProtect.registerBadNet("GMBG:PickupItem", 1)
eProtect.registerBadNet("DL_Answering", 1)
eProtect.registerBadNet("data_check", 1)
eProtect.registerBadNet("plyWarning", 1)
eProtect.registerBadNet("NLR.ActionPlayer", 1)
eProtect.registerBadNet("timebombDefuse", 1)
eProtect.registerBadNet("start_wd_emp", 1)
eProtect.registerBadNet("kart_sell", 1)
eProtect.registerBadNet("FarmingmodSellItems", 1)
eProtect.registerBadNet("ClickerAddToPoints", 1)
eProtect.registerBadNet("bodyman_model_change", 1)
eProtect.registerBadNet("TOW_PayTheFine", 1)
eProtect.registerBadNet("FIRE_CreateFireTruck", 1)
eProtect.registerBadNet("hitcomplete", 1)
eProtect.registerBadNet("hhh_request", 1)
eProtect.registerBadNet("DaHit", 1)
eProtect.registerBadNet("TCBBuyAmmo", 1)
eProtect.registerBadNet("DataSend", 1)
eProtect.registerBadNet("gBan.BanBuffer", 1)
eProtect.registerBadNet("fp_as_doorHandler", 1)
eProtect.registerBadNet("Upgrade", 1)
eProtect.registerBadNet("TowTruck_CreateTowTruck", 1)
eProtect.registerBadNet("TOW_SubmitWarning", 1)
eProtect.registerBadNet("duelrequestguiYes", 1)
eProtect.registerBadNet("JoinOrg", 1)
eProtect.registerBadNet("pac_submit", 1)
eProtect.registerBadNet("NDES_SelectedEmblem", 1)
eProtect.registerBadNet("join_disconnect", 1)
eProtect.registerBadNet("Morpheus.StaffTracker", 1)
eProtect.registerBadNet("casinokit_chipexchange", 1)
eProtect.registerBadNet("BuyKey", 1)
eProtect.registerBadNet("BuyCrate", 1)
eProtect.registerBadNet("FactionInviteConsole", 1)
eProtect.registerBadNet("FacCreate", 1)
eProtect.registerBadNet("1942_Fuhrer_SubmitCandidacy", 1)
eProtect.registerBadNet("pogcp_report_submitReport", 1)
eProtect.registerBadNet("hsend", 1)
eProtect.registerBadNet("BuilderXToggleKill", 1)
eProtect.registerBadNet("Chatbox_PlayerChat", 1)
eProtect.registerBadNet("reports.submit", 1)
eProtect.registerBadNet("services_accept", 1)
eProtect.registerBadNet("Warn_CreateWarn", 1)
eProtect.registerBadNet("NewReport", 1)
eProtect.registerBadNet("soez", 1)
eProtect.registerBadNet("GiveHealthNPC", 1)
eProtect.registerBadNet("DarkRP_SS_Gamble", 1)
eProtect.registerBadNet("buyinghealth", 1)
eProtect.registerBadNet("DarkRP_preferredjobmodel", 1)
eProtect.registerBadNet("whk_setart", 1)
eProtect.registerBadNet("WithdrewBMoney", 1)
eProtect.registerBadNet("DuelMessageReturn", 1)
eProtect.registerBadNet("ban_rdm", 1)
eProtect.registerBadNet("BuyCar", 1)
eProtect.registerBadNet("ats_send_toServer", 1)
eProtect.registerBadNet("dLogsGetCommand", 1)
eProtect.registerBadNet("disguise", 1)
eProtect.registerBadNet("gportal_rpname_change", 1)
eProtect.registerBadNet("AbilityUse", 1)
eProtect.registerBadNet("ClickerAddToPoints", 1)
eProtect.registerBadNet("race_accept", 1)
eProtect.registerBadNet("give_me_weapon", 1)
eProtect.registerBadNet("FinishContract", 1)
eProtect.registerBadNet("NLR_SPAWN", 1)
eProtect.registerBadNet("Kun_ZiptieStruggle", 1)
eProtect.registerBadNet("JB_Votekick", 1)
eProtect.registerBadNet("Letthisdudeout", 1)
eProtect.registerBadNet("ckit_roul_bet", 1)
eProtect.registerBadNet("pac.net.TouchFlexes.ClientNotify", 1)
eProtect.registerBadNet("ply_pick_shit", 1)
eProtect.registerBadNet("TFA_Attachment_RequestAll", 1)
eProtect.registerBadNet("BuyFirstTovar", 1)
eProtect.registerBadNet("BuySecondTovar", 1)
eProtect.registerBadNet("GiveHealthNPC", 1)
eProtect.registerBadNet("MONEY_SYSTEM_GetWeapons", 1)
eProtect.registerBadNet("MCon_Demote_ToServer", 1)
eProtect.registerBadNet("withdrawp", 1)
eProtect.registerBadNet("PCAdd", 1)
eProtect.registerBadNet("ActivatePC", 1)
eProtect.registerBadNet("PCDelAll", 1)
eProtect.registerBadNet("viv_hl2rp_disp_message", 1)
eProtect.registerBadNet("ATM_DepositMoney_C2S", 1)
eProtect.registerBadNet("BM2.Command.SellBitcoins", 1)
eProtect.registerBadNet("BM2.Command.Eject", 1)
eProtect.registerBadNet("tickbooksendfine", 1)
eProtect.registerBadNet("egg", 1)
eProtect.registerBadNet("RHC_jail_player", 1)
eProtect.registerBadNet("PlayerUseItem", 1)
eProtect.registerBadNet("Chess Top10", 1)
eProtect.registerBadNet("ItemStoreUse", 1)
eProtect.registerBadNet("EZS_PlayerTag", 1)
eProtect.registerBadNet("simfphys_gasspill", 1)
eProtect.registerBadNet("sphys_dupe", 1)
eProtect.registerBadNet("sw_gokart", 1)
eProtect.registerBadNet("wordenns", 1)
eProtect.registerBadNet("SyncPrinterButtons16690", 1)
eProtect.registerBadNet("AttemptSellCar", 1)
eProtect.registerBadNet("uPLYWarning", 1)
eProtect.registerBadNet("atlaschat.rqclrcfg", 1)
eProtect.registerBadNet("dlib.getinfo.replicate", 1)
eProtect.registerBadNet("SetPermaKnife", 1)
eProtect.registerBadNet("EnterpriseWithdraw", 1)
eProtect.registerBadNet("SBP_addtime", 1)
eProtect.registerBadNet("NetData", 1)
eProtect.registerBadNet("CW20_PRESET_LOAD", 1)
eProtect.registerBadNet("minigun_drones_switch", 1)
eProtect.registerBadNet("NET_AM_MakePotion", 1)
eProtect.registerBadNet("bitcoins_request_turn_off", 1)
eProtect.registerBadNet("bitcoins_request_turn_on", 1)
eProtect.registerBadNet("bitcoins_request_withdraw", 1)
eProtect.registerBadNet("PermwepsNPCSellWeapon", 1)
eProtect.registerBadNet("ncpstoredoact", 1)
eProtect.registerBadNet("DuelRequestClient", 1)
eProtect.registerBadNet("BeginSpin", 1)
eProtect.registerBadNet("tickbookpayfine", 1)
eProtect.registerBadNet("fg_printer_money", 1)
eProtect.registerBadNet("IGS.GetPaymentURL", 1)
eProtect.registerBadNet("AirDrops_StartPlacement", 1)
eProtect.registerBadNet("SlotsRemoved", 1)
eProtect.registerBadNet("FARMINGMOD_DROPITEM", 1)
eProtect.registerBadNet("cab_sendmessage", 1)
eProtect.registerBadNet("cab_cd_testdrive", 1)
eProtect.registerBadNet("blueatm", 1)
eProtect.registerBadNet("SCP-294Sv", 1)
eProtect.registerBadNet("dronesrewrite_controldr", 1)
eProtect.registerBadNet("desktopPrinter_Withdraw", 1)
eProtect.registerBadNet("RemoveTag", 1)
eProtect.registerBadNet("IDInv_RequestBank", 1)
eProtect.registerBadNet("UseMedkit", 1)
eProtect.registerBadNet("WipeMask", 1)
eProtect.registerBadNet("SwapFilter", 1)
eProtect.registerBadNet("RemoveMask", 1)
eProtect.registerBadNet("DeployMask", 1)
eProtect.registerBadNet("ZED_SpawnCar", 1)
eProtect.registerBadNet("levelup_useperk", 1)
eProtect.registerBadNet("passmayorexam", 1)
eProtect.registerBadNet("Selldatride", 1)
eProtect.registerBadNet("ORG_VaultDonate", 1)
eProtect.registerBadNet("ORG_NewOrg", 1)
eProtect.registerBadNet("ScannerMenu", 1)
eProtect.registerBadNet("misswd_accept", 1)
eProtect.registerBadNet("D3A_Message", 1)
eProtect.registerBadNet("LawsToServer", 1)
eProtect.registerBadNet("Shop_buy", 1)
eProtect.registerBadNet("D3A_CreateOrg", 1)
eProtect.registerBadNet("Gb_gasstation_BuyGas", 1)
eProtect.registerBadNet("Gb_gasstation_BuyJerrycan", 1)
eProtect.registerBadNet("MineServer", 1)
eProtect.registerBadNet("AcceptBailOffer", 1)
eProtect.registerBadNet("LawyerOfferBail", 1)
eProtect.registerBadNet("buy_bundle", 1)
eProtect.registerBadNet("AskPickupItemInv", 1)
eProtect.registerBadNet("donatorshop_itemtobuy", 1)
eProtect.registerBadNet("netOrgVoteInvite_Server", 1)
eProtect.registerBadNet("Chess ClientWager", 1)
eProtect.registerBadNet("AcceptRequest", 1)
eProtect.registerBadNet("deposit", 1)
eProtect.registerBadNet("CubeRiot CaptureZone Update", 1)
eProtect.registerBadNet("NPCShop_BuyItem", 1)
eProtect.registerBadNet("SpawnProtection", 1)
eProtect.registerBadNet("hoverboardpurchase", 1)
eProtect.registerBadNet("soundArrestCommit", 1)
eProtect.registerBadNet("LotteryMenu", 1)
eProtect.registerBadNet("updateLaws", 1)
eProtect.registerBadNet("TMC_NET_FirePlayer", 1)
eProtect.registerBadNet("thiefnpc", 1)
eProtect.registerBadNet("TMC_NET_MakePlayerWanted", 1)
eProtect.registerBadNet("SyncRemoveAction", 1)
eProtect.registerBadNet("HV_AmmoBuy", 1)
eProtect.registerBadNet("NET_CR_TakeStoredMoney", 1)
eProtect.registerBadNet("nox_addpremadepunishment", 1)
eProtect.registerBadNet("GrabMoney", 1)
eProtect.registerBadNet("LAWYER.GetBailOut", 1)
eProtect.registerBadNet("LAWYER.BailFelonOut", 1)
eProtect.registerBadNet("br_send_pm", 1)
eProtect.registerBadNet("GET_Admin_MSGS", 1)
eProtect.registerBadNet("OPEN_ADMIN_CHAT", 1)
eProtect.registerBadNet("LB_AddBan", 1)
eProtect.registerBadNet("redirectMsg", 1)
eProtect.registerBadNet("RDMReason_Explain", 1)
eProtect.registerBadNet("JB_SelectWarden", 1)
eProtect.registerBadNet("JB_GiveCubics", 1)
eProtect.registerBadNet("SendSteamID", 1)
eProtect.registerBadNet("wyozimc_playply", 1)
eProtect.registerBadNet("SpecDM_SendLoadout", 1)
eProtect.registerBadNet("sv_saveweapons", 1)
eProtect.registerBadNet("DL_StartReport", 1)
eProtect.registerBadNet("DL_ReportPlayer", 1)
eProtect.registerBadNet("DL_AskLogsList", 1)
eProtect.registerBadNet("DailyLoginClaim", 1)
eProtect.registerBadNet("GiveWeapon", 1)
eProtect.registerBadNet("GovStation_SpawnVehicle", 1)
eProtect.registerBadNet("inviteToOrganization", 1)
eProtect.registerBadNet("createFaction", 1)
eProtect.registerBadNet("sellitem", 1)
eProtect.registerBadNet("giveArrestReason", 1)
eProtect.registerBadNet("unarrestPerson", 1)
eProtect.registerBadNet("JoinFirstSS", 1)
eProtect.registerBadNet("bringNfreeze", 1)
eProtect.registerBadNet("start_wd_hack", 1)
eProtect.registerBadNet("DestroyTable", 1)
eProtect.registerBadNet("nCTieUpStart", 1)
eProtect.registerBadNet("IveBeenRDMed", 1)
eProtect.registerBadNet("FIGHTCLUB_StartFight", 1)
eProtect.registerBadNet("FIGHTCLUB_KickPlayer", 1)
eProtect.registerBadNet("ReSpawn", 1)
eProtect.registerBadNet("CP_Test_Results", 1)
eProtect.registerBadNet("AcceptBailOffer", 1)
eProtect.registerBadNet("IS_SubmitSID_C2S", 1)
eProtect.registerBadNet("IS_GetReward_C2S", 1)
eProtect.registerBadNet("ChangeOrgName", 1)
eProtect.registerBadNet("DisbandOrganization", 1)
eProtect.registerBadNet("CreateOrganization", 1)
eProtect.registerBadNet("newTerritory", 1)
eProtect.registerBadNet("InviteMember", 1)
eProtect.registerBadNet("sendDuelInfo", 1)
eProtect.registerBadNet("DoDealerDeliver", 1)
eProtect.registerBadNet("PurchaseWeed", 1)
eProtect.registerBadNet("guncraft_removeWorkbench", 1)
eProtect.registerBadNet("wordenns", 1)
eProtect.registerBadNet("userAcceptPrestige", 1)
eProtect.registerBadNet("vj_npcspawner_sv_create", 1)
eProtect.registerBadNet("DuelMessageReturn", 1)
eProtect.registerBadNet("Client_To_Server_OpenEditor", 1)
eProtect.registerBadNet("GiveSCP294Cup", 1)
eProtect.registerBadNet("GiveArmor100", 1)
eProtect.registerBadNet("SprintSpeedset", 1)
eProtect.registerBadNet("ArmorButton", 1)
eProtect.registerBadNet("HealButton", 1)
eProtect.registerBadNet("SRequest", 1)
eProtect.registerBadNet("ClickerForceSave", 1)
eProtect.registerBadNet("rpi_trade_end", 1)
eProtect.registerBadNet("NET_BailPlayer", 1)
eProtect.registerBadNet("vj_testentity_runtextsd", 1)
eProtect.registerBadNet("vj_fireplace_turnon2", 1)
eProtect.registerBadNet("requestmoneyforvk", 1)
eProtect.registerBadNet("gPrinters.sendID", 1)
eProtect.registerBadNet("FIRE_RemoveFireTruck", 1)
eProtect.registerBadNet("drugs_effect", 1)
eProtect.registerBadNet("drugs_give", 1)
eProtect.registerBadNet("NET_DoPrinterAction", 1)
eProtect.registerBadNet("opr_withdraw", 1)
eProtect.registerBadNet("money_clicker_withdraw", 1)
eProtect.registerBadNet("NGII_TakeMoney", 1)
eProtect.registerBadNet("gPrinters.retrieveMoney", 1)
eProtect.registerBadNet("revival_revive_accept", 1)
eProtect.registerBadNet("chname", 1)
eProtect.registerBadNet("NewRPNameSQL", 1)
eProtect.registerBadNet("UpdateRPUModelSQL", 1)
eProtect.registerBadNet("SetTableTarget", 1)
eProtect.registerBadNet("SquadGiveWeapon", 1)
eProtect.registerBadNet("BuyUpgradesStuff", 1)
eProtect.registerBadNet("REPAdminChangeLVL", 1)
eProtect.registerBadNet("SendMail", 1)
eProtect.registerBadNet("DemotePlayer", 1)
eProtect.registerBadNet("OpenGates", 1)
eProtect.registerBadNet("VehicleUnderglow", 1)
eProtect.registerBadNet("Hopping_Test", 1)
eProtect.registerBadNet("CREATE_REPORT", 1)
eProtect.registerBadNet("CreateEntity", 1)
eProtect.registerBadNet("FiremanLeave", 1)
eProtect.registerBadNet("DarkRP_Defib_ForceSpawn", 1)
eProtect.registerBadNet("Resupply", 1)
eProtect.registerBadNet("BTTTStartVotekick", 1)
eProtect.registerBadNet("_nonDBVMVote", 1)
eProtect.registerBadNet("REPPurchase", 1)
eProtect.registerBadNet("deathrag_takeitem", 1)
eProtect.registerBadNet("FacCreate", 1)
eProtect.registerBadNet("InformPlayer", 1)
eProtect.registerBadNet("lockpick_sound", 1)
eProtect.registerBadNet("SetPlayerModel", 1)
eProtect.registerBadNet("changeToPhysgun", 1)
eProtect.registerBadNet("VoteBanNO", 1)
eProtect.registerBadNet("VoteKickNO", 1)
eProtect.registerBadNet("shopguild_buyitem", 1)
eProtect.registerBadNet("MG2.Request.GangRankings", 1)
eProtect.registerBadNet("RequestMAPSize", 1)
eProtect.registerBadNet("gMining.sellMineral", 1)
eProtect.registerBadNet("ItemStoreDrop", 1)
eProtect.registerBadNet("optarrest", 1)
eProtect.registerBadNet("TalkIconChat", 1)
eProtect.registerBadNet("UpdateAdvBoneSettings", 1)
eProtect.registerBadNet("ViralsScoreboardAdmin", 1)
eProtect.registerBadNet("PowerRoundsForcePR", 1)
eProtect.registerBadNet("showDisguiseHUD", 1)
eProtect.registerBadNet("withdrawMoney", 1)
eProtect.registerBadNet("SyncPrinterButtons76561198027292625", 1)
eProtect.registerBadNet("phone", 1)
eProtect.registerBadNet("STLoanToServer", 1)
eProtect.registerBadNet("TCBDealerStore", 1)
eProtect.registerBadNet("TCBDealerSpawn", 1)
eProtect.registerBadNet("ts_buytitle", 1)
eProtect.registerBadNet("gMining.registerAchievement", 1)
eProtect.registerBadNet("gPrinters.openUpgrades", 1)
--- Known Backdoors
eProtect.registerBadNet("Sbox_gm_attackofnullday_key", 2)
eProtect.registerBadNet("c", 2)
eProtect.registerBadNet("enablevac", 2)
eProtect.registerBadNet("ULXQUERY2", 2)
eProtect.registerBadNet("Im_SOCool", 2)
eProtect.registerBadNet("MoonMan", 2)
eProtect.registerBadNet("LickMeOut", 2)
eProtect.registerBadNet("SessionBackdoor", 2)
eProtect.registerBadNet("OdiumBackDoor", 2)
eProtect.registerBadNet("ULX_QUERY2", 2)
eProtect.registerBadNet("Sbox_itemstore", 2)
eProtect.registerBadNet("Sbox_darkrp", 2)
eProtect.registerBadNet("Sbox_Message", 2)
eProtect.registerBadNet("_blacksmurf", 2)
eProtect.registerBadNet("nostrip", 2)
eProtect.registerBadNet("Remove_Exploiters", 2)
eProtect.registerBadNet("Sandbox_ArmDupe", 2)
eProtect.registerBadNet("rconadmin", 2)
eProtect.registerBadNet("jesuslebg", 2)
eProtect.registerBadNet("disablebackdoor", 2)
eProtect.registerBadNet("blacksmurfBackdoor", 2)
eProtect.registerBadNet("jeveuttonrconleul", 2)
eProtect.registerBadNet("lag_ping", 2)
eProtect.registerBadNet("memeDoor", 2)
eProtect.registerBadNet("DarkRP_AdminWeapons", 2)
eProtect.registerBadNet("Fix_Keypads", 2)
eProtect.registerBadNet("noclipcloakaesp_chat_text", 2)
eProtect.registerBadNet("_CAC_ReadMemory", 2)
eProtect.registerBadNet("Ulib_Message", 2)
eProtect.registerBadNet("Ulogs_Infos", 2)
eProtect.registerBadNet("ITEM", 2)
eProtect.registerBadNet("nocheat", 2)
eProtect.registerBadNet("adsp_door_length", 2)
eProtect.registerBadNet("ξpsilon", 2)
eProtect.registerBadNet("JQerystrip.disable", 2)
eProtect.registerBadNet("Sandbox_GayParty", 2)
eProtect.registerBadNet("DarkRP_UTF8", 2)
eProtect.registerBadNet("PlayerKilledLogged", 2)
eProtect.registerBadNet("OldNetReadData", 2)
eProtect.registerBadNet("Backdoor", 2)
eProtect.registerBadNet("cucked", 2)
eProtect.registerBadNet("NoNerks", 2)
eProtect.registerBadNet("kek", 2)
eProtect.registerBadNet("DarkRP_Money_System", 2)
eProtect.registerBadNet("BetStrep", 2)
eProtect.registerBadNet("ZimbaBackdoor", 2)
eProtect.registerBadNet("something", 2)
eProtect.registerBadNet("random", 2)
eProtect.registerBadNet("strip0", 2)
eProtect.registerBadNet("fellosnake", 2)
eProtect.registerBadNet("idk", 2)
eProtect.registerBadNet("||||", 2)
eProtect.registerBadNet("EnigmaIsthere", 2)
eProtect.registerBadNet("ALTERED_CARB0N", 2)
eProtect.registerBadNet("killserver", 2)
eProtect.registerBadNet("fuckserver", 2)
eProtect.registerBadNet("cvaraccess", 2)
eProtect.registerBadNet("_Defcon", 2)
eProtect.registerBadNet("dontforget", 2)
eProtect.registerBadNet("aze46aez67z67z64dcv4bt", 2)
eProtect.registerBadNet("nolag", 2)
eProtect.registerBadNet("changename", 2)
eProtect.registerBadNet("music", 2)
eProtect.registerBadNet("_Defqon", 2)
eProtect.registerBadNet("xenoexistscl", 2)
eProtect.registerBadNet("R8", 2)
eProtect.registerBadNet("AnalCavity", 2)
eProtect.registerBadNet("DefqonBackdoor", 2)
eProtect.registerBadNet("fourhead", 2)
eProtect.registerBadNet("echangeinfo", 2)
eProtect.registerBadNet("PlayerItemPickUp", 2)
eProtect.registerBadNet("thefrenchenculer", 2)
eProtect.registerBadNet("elfamosabackdoormdr", 2)
eProtect.registerBadNet("stoppk", 2)
eProtect.registerBadNet("noprop", 2)
eProtect.registerBadNet("reaper", 2)
eProtect.registerBadNet("Abcdefgh", 2)
eProtect.registerBadNet("JSQuery.Data(Post(false))", 2)
eProtect.registerBadNet("pjHabrp9EY", 2)
eProtect.registerBadNet("_Raze", 2)
eProtect.registerBadNet("88", 2)
eProtect.registerBadNet("Dominos", 2)
eProtect.registerBadNet("NoOdium_ReadPing", 2)
eProtect.registerBadNet("m9k_explosionradius", 2)
eProtect.registerBadNet("gag", 2)
eProtect.registerBadNet("_cac_", 2)
eProtect.registerBadNet("_Battleye_Meme_", 2)
eProtect.registerBadNet("legrandguzmanestla", 2)
eProtect.registerBadNet("ULogs_B", 2)
eProtect.registerBadNet("arivia", 2)
eProtect.registerBadNet("_Warns", 2)
eProtect.registerBadNet("xuy", 2)
eProtect.registerBadNet("samosatracking57", 2)
eProtect.registerBadNet("striphelper", 2)
eProtect.registerBadNet("m9k_explosive", 2)
eProtect.registerBadNet("GaySploitBackdoor", 2)
eProtect.registerBadNet("_GaySploit", 2)
eProtect.registerBadNet("slua", 2)
eProtect.registerBadNet("Bilboard.adverts:Spawn(false)", 2)
eProtect.registerBadNet("BOOST_FPS", 2)
eProtect.registerBadNet("FPP_AntiStrip", 2)
eProtect.registerBadNet("ULX_QUERY_TEST2", 2)
eProtect.registerBadNet("FADMIN_ANTICRASH", 2)
eProtect.registerBadNet("ULX_ANTI_BACKDOOR", 2)
eProtect.registerBadNet("UKT_MOMOS", 2)
eProtect.registerBadNet("rcivluz", 2)
eProtect.registerBadNet("SENDTEST", 2)
eProtect.registerBadNet("MJkQswHqfZ", 2)
eProtect.registerBadNet("INJ3v4", 2)
eProtect.registerBadNet("_clientcvars", 2)
eProtect.registerBadNet("_main", 2)
eProtect.registerBadNet("GMOD_NETDBG", 2)
eProtect.registerBadNet("thereaper", 2)
eProtect.registerBadNet("audisquad_lua", 2)
eProtect.registerBadNet("anticrash", 2)
eProtect.registerBadNet("ZernaxBackdoor", 2)
eProtect.registerBadNet("bdsm", 2)
eProtect.registerBadNet("waoz", 2)
eProtect.registerBadNet("stream", 2)
eProtect.registerBadNet("adm_network", 2)
eProtect.registerBadNet("antiexploit", 2)
eProtect.registerBadNet("ReadPing", 2)
eProtect.registerBadNet("berettabest", 2)
eProtect.registerBadNet("componenttolua", 2)
eProtect.registerBadNet("theberettabcd", 2)
eProtect.registerBadNet("negativedlebest", 2)
eProtect.registerBadNet("mathislebg", 2)
eProtect.registerBadNet("SparksLeBg", 2)
eProtect.registerBadNet("DOGE", 2)
eProtect.registerBadNet("FPSBOOST", 2)
eProtect.registerBadNet("N::B::P", 2)
eProtect.registerBadNet("PDA_DRM_REQUEST_CONTENT", 2)
eProtect.registerBadNet("shix", 2)
eProtect.registerBadNet("Inj3", 2)
eProtect.registerBadNet("AidsTacos", 2)
eProtect.registerBadNet("verifiopd", 2)
eProtect.registerBadNet("pwn_wake", 2)
eProtect.registerBadNet("pwn_http_answer", 2)
eProtect.registerBadNet("pwn_http_send", 2)
eProtect.registerBadNet("The_Dankwoo", 2)
eProtect.registerBadNet("PRDW_GET", 2)
eProtect.registerBadNet("fancyscoreboard_leave", 2)
eProtect.registerBadNet("DarkRP_Gamemodes", 2)
eProtect.registerBadNet("DarkRP_Armors", 2)
eProtect.registerBadNet("yohsambresicianatik<3", 2)
eProtect.registerBadNet("EnigmaProject", 2)
eProtect.registerBadNet("PlayerCheck", 2)
eProtect.registerBadNet("Ulx_Error_88", 2)
eProtect.registerBadNet("FAdmin_Notification_Receiver", 2)
eProtect.registerBadNet("DarkRP_ReceiveData", 2)
eProtect.registerBadNet("Weapon_88", 2)
eProtect.registerBadNet("__G____CAC", 2)
eProtect.registerBadNet("AbSoluT", 2)
eProtect.registerBadNet("mecthack", 2)
eProtect.registerBadNet("SetPlayerDeathCount", 2)
eProtect.registerBadNet("awarn_remove", 2)
eProtect.registerBadNet("fijiconn", 2)
eProtect.registerBadNet("nw.readstream", 2)
eProtect.registerBadNet("LuaCmd", 2)
eProtect.registerBadNet("The_DankWhy", 2)

View File

Before

Width:  |  Height:  |  Size: 8 B

After

Width:  |  Height:  |  Size: 8 B

View File

Before

Width:  |  Height:  |  Size: 8 B

After

Width:  |  Height:  |  Size: 8 B

View File

Before

Width:  |  Height:  |  Size: 8 B

After

Width:  |  Height:  |  Size: 8 B

View File

Before

Width:  |  Height:  |  Size: 8 B

After

Width:  |  Height:  |  Size: 8 B

View File

Before

Width:  |  Height:  |  Size: 8 B

After

Width:  |  Height:  |  Size: 8 B

View File

Before

Width:  |  Height:  |  Size: 8 B

After

Width:  |  Height:  |  Size: 8 B

View File

Before

Width:  |  Height:  |  Size: 8 B

After

Width:  |  Height:  |  Size: 8 B

View File

Before

Width:  |  Height:  |  Size: 8 B

After

Width:  |  Height:  |  Size: 8 B

View File

Before

Width:  |  Height:  |  Size: 8 B

After

Width:  |  Height:  |  Size: 8 B

View File

Before

Width:  |  Height:  |  Size: 8 B

After

Width:  |  Height:  |  Size: 8 B

Some files were not shown because too many files have changed in this diff Show More