I tried remaking his code but it gives me an error that I can’t parent parts to the workspace (Must be a partInstance)
This was my code:
local RunService = game:GetService("RunService")
local Character = game.Players.LocalPlayer.Character
local RightGrip = Character["Right Arm"].RightGripAttachment
RunService.RenderStepped:Connect(function()
local a = RightGrip:Clone()
a.Parent = Character["Right Arm"]
spawn(function() a.Parent = workspace end)
end)
Could you elaborate as english is not my first language and I have defecuiltys understandting people, thank you
They keep harrasing me with new accounts that even if I reported them they would still crash my game
Try to create a script which tracks children added to Workspace and if they are named “RightGrip”, get a character from weld’s Part0 (RightGrip.Part0.Parent). Then get a player from character (Players:GetPlayerFromCharacter(Character)) and take an appropriate action (ban / kick. Whatever)
After that run a function in coroutine (to have slight delay) and destroy exploited weld since it isn’t removed automatically.
This is what should prevent that.
About your script - the weld is not called RightGripAttachment. It’s “RightGrip” and it’s only available when you have tool equipped.
A simple solution to end exploiting for at least a year or two would be making the Roblox Client protected so that external processes cannot interact with it.
In a sense, all current methods access the Client in some way to enable exploiting to be possible, so just locking down the Client process would be a fix that would work for quite a while.
workspace.ChildAdded:Connect(function(Child)
if Child.Name == "RightGrip" then
game.Players:GetPlayerFromCharacter(Child.Part0.Parent):Kick("Not cool, You tried to duplicate parts to the workspace.")
Child:Destroy()
end
end)
It would, but that’s impossible to do. Roblox already takes a lot of steps to protect client, but user will always be able to manipulate the process. Its just like a cable in real life. You may cut the wire and do whatever you want with it.
I see where you are coming from, however this would just ensure that in the rare case that there is a false positive, it wouldn’t be an issue, and also futureproof for any future workspace related edits/new features.
If it doesn’t happen that often, then it shouldn’t be an issue to add it in just for futureproofing reasons.
Sorry but I see no sense of your words.
There is TOTALLY no possibility that Roblox places weld in workspace itself unless it’s affected and controlled by exploit.
Roblox ALWAYS adds it to Right Arm in both R15 and R6. When exploiter moves its to Workspace, it’s automatically detected. No false positives involved.
There are things that could have false positives due to lacency but this case is not a subject to them.
Tl;dr. Please reconsider that and remove the posts since they introduce chaos and share misinformation.
workspace.ChildAdded:Connect(function(Child)
if Child.Name == "RightGrip" then
local Player = game.Players:GetPlayerFromCharacter(Child.Part0.Parent)
spawn(function() Child:Destroy() end)
Player:Kick("Not cool, You tried to duplicate parts to the workspace.")
end
end)
Sorry for the formatting. On phone rn. Hard to edit things.
You can test it by equiping a tool in studio play solo test and moving RightGrip (parented to Right Arm) to Workspace. Will result in kick.
Kicking client does not clear up the rightgrips in workspace
Not adding spawn won’t destroy the instance, would show warning saying words around “Parent is being set to nil when its meant to be workspace” (Roblox would think it’s fault)
Spawn does not affect the kick function. Kick is a network engine function. I usually like to wrap those into pcall just to prevent errors which would stop the rest code, but pcall has slight delay. In this case I just decided to have it at the end to make sure child is removed before clients manage to replicate it and the kick is not delayed.
Just wanted to address this point, it’s pretty much impossible. Roblox already does a ton of anti exploit in the client but it’s not as simple as “locking the process”. On Windows, for example, each process can load Windows modules that allow them to read and write to the memory of other processes. These functions are built in to Windows.
I already have a full proof fix of this, this also captures welds that are buried into workspace.
local Players = game:GetService("Players")
function GetPlayerByWeld(WeldObject)
if not WeldObject then return nil end
for i,v in pairs(Players:GetPlayers()) do
if v.Character and WeldObject.Part0 and WeldObject.Part0:IsDescendantOf(v.Character) then
return v
end
end
end
game.Workspace.DescendantAdded:Connect(function(Object)
if Object:IsA("Weld") and Object.Name == "RightGrip" then
local Player = GetPlayerByWeld(Object)
local WeldCount = 0
if Player then
Object.AncestryChanged:Connect(function()
if Object.Parent ~= nil and not Object:IsDescendantOf(Player.Character) then
Player:Kick("Ancestry")
Object:Destroy()
end
end)
for i,v in pairs(Object.Parent:GetChildren()) do
if v:IsA("Weld") and v.Name == "RightGrip" then
local Owner = GetPlayerByWeld(v)
if Owner and Owner == Player then
WeldCount = WeldCount + 1
end
end
end
if WeldCount > 2 then
Player:Kick("Max")
Object:Destroy()
end
end
end
end)