DataStore "AntiCheat"

Moin Moin
Ich habe mich dazu entschieden auch mal ein Tutorial zu machen

Als es geht um ein “Ban” bzw AntiCheat script

Wenn man das erste mal gekickt / erwischt wird dann bekommt man nur eine Warnung wenn man dann ein zweites mal gekickt / erwischt wird wird man gebannt

Was wir benötigen :
Ein RemoteEvent > ReplicatedStorage
2 Scripts
1 LocalScript (StarterGui oder StarterPack etc…)

Also das LocalScript :

while true do
	wait(10) --Damit der Output nicht zugespammt wird
	local plr = game.Players.LocalPlayer 
	
	local char = plr.Character or plr.CharacterAdded:Wait()
	if char:WaitForChild("Humanoid").WalkSpeed > 16 then
		game.ReplicatedStorage.Ban:FireServer() --Das RemoteEvent
	end
end

Als nächstes das erste Script :

game.ReplicatedStorage.Ban.OnServerEvent:Connect(function(player) 
script.Parent = game.ServerScriptService
local Ban = game:GetService("DataStoreService"):GetDataStore("BanData_1")
	local key = "user_" .. player.userId
if Ban:GetAsync(key) == nil then --Wenn der Spieler keine Warnungen hat bekommt er eine
	Ban:SetAsync(key, 2) --Die Warnung
elseif Ban:GetAsync(key) ==2 then --Wenn der Spieler schon eine Warnung hat dann wird er gebannt
	Ban:SetAsync(key, 1) --Ban
end


while wait() do
	wait(0.1)
	for i, v in pairs(game.Players:GetChildren()) do
		local thing = Ban:GetAsync("user_" .. v.userId)
		if thing == 1 then --Ban
			v:Kick("Banned!")
		end 
		if thing == 2 then --Kick
			v:Kick("Kicked for hacking!")
		end 
	end
end
end)

Als nächstes (und als letztes) das Script das wenn der Spieler gebannt ist er auch gekickt wird

game.Players.PlayerAdded:Connect(function(player) --Wenn ein Spieler das Spiel betritt

script.Parent = game.ServerScriptService

local Ban = game:GetService("DataStoreService"):GetDataStore("BanData_1") --Das muss genau gleich sein wie im anderem Script sonst geht das nicht

local key = "user_" .. player.userId

if Ban:GetAsync(key) == 1 then --Wenn der Spieler gebannt ist dann wird er gekickt

while wait() do

for i, v in pairs(game.Players:GetChildren()) do 

local thing = Ban:GetAsync("user_" .. v.userId)

if thing == 1 then

v:Kick("Banned!") --Kickt den gebannten spieler

end

end

end

end

end)

Das wars ich hoffe ihr könnt es gebrauchen

Wenn ihr wollt kann ich euch noch zeigen wie man das mit Webhooks macht (so hab ich das in meinem AntiCheat) also z.B das wenn ein Spieler gebannt oder gekickt wird man im Discord informiert wird

2 Likes

Ein sehr gutes Tutorial muss ich sagen, ist gut für die meisten spiele aber, es gibt ein Problem. Du bist nicht gegen große exploits wie SynapseX geschützt da diese dein Lokalen Script einfach ausschalten können. Vertraue niemals den Client. Ich empfehle einfach alles im Server zu checken, inklusive wie weit der Spieler gegangen ist seit dem letzten Check. Aber sonst, ein gutes Tutorial und verhindert am meisten diese kleinen exploits!

2 Likes

Ich werde mal versuchen das LocalScript wegzulassen (das geht ja auch)

Vielleicht könnte man das ja auch in ein anderes LocalScript einbauen z.B in ein CameraScript man kann es dann zwar immernoch löschen aber dann ist das spiel “kapput” xD