-
Notifications
You must be signed in to change notification settings - Fork 0
/
ac_s.lua
239 lines (187 loc) · 8.57 KB
/
ac_s.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
-- with this you can turn on/off specific anticheese components, note: you can also turn these off while the script is running by using events, see examples for such below
Components = {
Teleport = true,
GodMode = true,
Speedhack = true,
WeaponBlacklist = false,
CustomFlag = true,
}
--[[
event examples are:
anticheese:SetComponentStatus( component, state )
enables or disables specific components
component:
an AntiCheese component, such as the ones listed above, must be a string
state:
the state to what the component should be set to, accepts booleans such as "true" for enabled and "false" for disabled
anticheese:ToggleComponent( component )
sets a component to the opposite mode ( e.g. enabled becomes disabled ), there is no reason to use this.
component:
an AntiCheese component, such as the ones listed above, must be a string
anticheese:SetAllComponents( state )
enables or disables **all** components
state:
the state to what the components should be set to, accepts booleans such as "true" for enabled and "false" for disabled
These can be used by triggering them like following:
TriggerEvent("anticheese:SetComponentStatus", "Teleport", false)
These Events CAN NOT be called from the clientside
]]
Users = {}
violations = {}
RegisterServerEvent("anticheese:timer")
AddEventHandler("anticheese:timer", function()
if Users[source] then
if (os.time() - Users[source]) < 15 and Components.Speedhack then -- prevent the player from doing a good old cheat engine speedhack
DropPlayer(source, "Speedhacking")
else
Users[source] = os.time()
end
else
Users[source] = os.time()
end
end)
AddEventHandler('es:playerLoaded',function(source)
if IsPlayerAceAllowed(source,"anticheese.bypass") then
TriggerClientEvent('anticheese:anticheat', source, false)
end
end)
AddEventHandler('playerDropped', function()
if(Users[source])then
Users[source] = nil
end
end)
RegisterServerEvent("anticheese:kick")
AddEventHandler("anticheese:kick", function(reason)
DropPlayer(source, reason)
end)
AddEventHandler("anticheese:SetComponentStatus", function(component, state)
if type(component) == "string" and type(state) == "boolean" then
Components[component] = state -- changes the component to the wished status
end
end)
AddEventHandler("anticheese:ToggleComponent", function(component)
if type(component) == "string" then
Components[component] = not Components[component]
end
end)
AddEventHandler("anticheese:SetAllComponents", function(state)
if type(state) == "boolean" then
for i,theComponent in pairs(Components) do
Components[i] = state
end
end
end)
Citizen.CreateThread(function()
webhook = Config.webhookban
function SendWebhookMessage(webhook,message)
if webhook ~= "none" then
PerformHttpRequest(webhook, function(err, text, headers) end, 'POST', json.encode({content = message}), { ['Content-Type'] = 'application/json' })
end
end
function WarnPlayer(playername, reason)
local isKnown = false
local isKnownCount = 1
local isKnownExtraText = ""
for i,thePlayer in ipairs(violations) do
if thePlayer.name == name then
isKnown = true
if violations[i].count == 3 then
--TriggerEvent("bansql:icheat", source)
isKnownCount = violations[i].count
table.remove(violations,i)
isKnownExtraText = ", @Staff Investigation is need."
else
violations[i].count = violations[i].count+1
isKnownCount = violations[i].count
end
end
end
if not isKnown then
table.insert(violations, { name = name, count = 1 })
end
return isKnown, isKnownCount,isKnownExtraText
end
function GetPlayerNeededIdentifiers(player)
local ids = GetPlayerIdentifiers(player)
for i,theIdentifier in ipairs(ids) do
if string.find(theIdentifier,"license:") or -1 > -1 then
license = theIdentifier
elseif string.find(theIdentifier,"steam:") or -1 > -1 then
steam = theIdentifier
end
end
if not steam then
steam = "steam: missing"
end
return license, steam
end
RegisterServerEvent('AntiCheese:SpeedFlag')
AddEventHandler('AntiCheese:SpeedFlag', function(rounds, roundm)
if Components.Speedhack and not IsPlayerAceAllowed(source,"anticheese.bypass") then
license, steam = GetPlayerNeededIdentifiers(source)
name = GetPlayerName(source)
isKnown, isKnownCount, isKnownExtraText = WarnPlayer(name,"Speed Hacking")
SendWebhookMessage(webhook, "**Speed Hacker!** \n```\nUser:"..name.."\n"..license.."\n"..steam.."\nWas travelling "..rounds.. " units. That's "..roundm.." more than normal! \nAnticheat Flags:"..isKnownCount..""..isKnownExtraText.." ```")
end
end)
RegisterServerEvent('AntiCheese:NoclipFlag')
AddEventHandler('AntiCheese:NoclipFlag', function(distance)
if Components.Teleport and not IsPlayerAceAllowed(source,"anticheese.bypass") then
license, steam = GetPlayerNeededIdentifiers(source)
name = GetPlayerName(source)
isKnown, isKnownCount, isKnownExtraText = WarnPlayer(name,"Noclip/Teleport Hacking")
SendWebhookMessage(webhook,"**Noclip/Teleport!** \n```\nUser:"..name.."\n"..license.."\n"..steam.."\nCaught with "..distance.." units between last checked location\nAnticheat Flags:"..isKnownCount..""..isKnownExtraText.." ```")
end
end)
RegisterServerEvent('AntiCheese:MoneyFlag')
AddEventHandler('AntiCheese:MoneyFlag', function(money)
if not IsPlayerAceAllowed(source,"anticheese.bypass") then
license, steam = GetPlayerNeededIdentifiers(source)
name = GetPlayerName(source)
-- isKnown, isKnownCount, isKnownExtraText = WarnPlayer(name,"Possible Money Cheat")
SendWebhookMessage(webhook,"**Anti-CheatMoney! ** \n```\nJoueur:"..name.."\n"..license.."\n"..steam.."\nA gagné "..money.."$ en une minutes.\n```")
-- SendWebhookMessage(webhook,"**Possible Money Cheat!** \n```\nJoueur:"..name.."\n"..license.."\n"..steam.."\nA gagné "..money.."$ en une minutes.\nAnticheat Flags:"..isKnownCount..""..isKnownExtraText.." ```")
end
end)
RegisterServerEvent('AntiCheese:CustomFlag')
AddEventHandler('AntiCheese:CustomFlag', function(reason,extrainfo)
if Components.CustomFlag and not IsPlayerAceAllowed(source,"anticheese.bypass") then
license, steam = GetPlayerNeededIdentifiers(source)
name = GetPlayerName(source)
if not extrainfo then extrainfo = "no extra informations provided" end
isKnown, isKnownCount, isKnownExtraText = WarnPlayer(name,reason)
SendWebhookMessage(webhook,"**"..reason.."** \n```\nUser:"..name.."\n"..license.."\n"..steam.."\n"..extrainfo.."\nAnticheat Flags:"..isKnownCount..""..isKnownExtraText.." ```")
end
end)
RegisterServerEvent('AntiCheese:HealthFlag')
AddEventHandler('AntiCheese:HealthFlag', function(invincible,oldHealth, newHealth, curWait)
if Components.GodMode and not IsPlayerAceAllowed(source,"anticheese.bypass") then
license, steam = GetPlayerNeededIdentifiers(source)
name = GetPlayerName(source)
isKnown, isKnownCount, isKnownExtraText = WarnPlayer(name,"Health Hacking")
if invincible then
SendWebhookMessage(webhook,"**Health Hack!** \n```\nUser:"..name.."\n"..license.."\n"..steam.."\nRegenerated "..newHealth-oldHealth.."hp ( to reach "..newHealth.."hp ) in "..curWait.."ms! ( PlayerPed was invincible )\nAnticheat Flags:"..isKnownCount..""..isKnownExtraText.." ```")
else
SendWebhookMessage(webhook,"**Health Hack!** \n```\nUser:"..name.."\n"..license.."\n"..steam.."\nRegenerated "..newHealth-oldHealth.."hp ( to reach "..newHealth.."hp ) in "..curWait.."ms! ( Health was Forced )\nAnticheat Flags:"..isKnownCount..""..isKnownExtraText.." ```")
end
end
end)
RegisterServerEvent('AntiCheese:JumpFlag')
AddEventHandler('AntiCheese:JumpFlag', function(jumplength)
if Components.SuperJump and not IsPlayerAceAllowed(source,"anticheese.bypass") then
license, steam = GetPlayerNeededIdentifiers(source)
name = GetPlayerName(source)
isKnown, isKnownCount, isKnownExtraText = WarnPlayer(name,"SuperJump Hacking")
SendWebhookMessage(webhook,"**SuperJump Hack!** \n```\nUser:"..name.."\n"..license.."\n"..steam.."\nJumped "..jumplength.."ms long\nAnticheat Flags:"..isKnownCount..""..isKnownExtraText.." ```")
end
end)
RegisterServerEvent('AntiCheese:WeaponFlag')
AddEventHandler('AntiCheese:WeaponFlag', function(weapon)
if Components.WeaponBlacklist and not IsPlayerAceAllowed(source,"anticheese.bypass") then
license, steam = GetPlayerNeededIdentifiers(source)
name = GetPlayerName(source)
isKnown, isKnownCount, isKnownExtraText = WarnPlayer(name,"Inventory Cheating")
SendWebhookMessage(webhook,"**Inventory Hack!** \n```\nUser:"..name.."\n"..license.."\n"..steam.."\nGot Weapon: "..weapon.."( Blacklisted )\nAnticheat Flags:"..isKnownCount..""..isKnownExtraText.." ```")
end
end)
end)