Run it
Copy the script and paste it into your executor.
Players = :()
RunService = :()
ReplicatedStorage = :()
UserInputService = :()
StarterGui = :()
localPlayer = Players.LocalPlayer
CONFIG = {
FOLLOW_DISTANCE = ,
STOP_DISTANCE = ,
MAX_SPEED = ,
ACCELERATION = ,
AUTO_INTERVAL = * ,
RATE_LIMIT = ,
}
targetPlayer =
connection =
lastCommandTime = {}
lastMessageTime =
(message)
localPlayer.Character
success = (()
chatEvents = ReplicatedStorage:()
chatEvents
sayRequest = chatEvents:()
sayRequest
sayRequest:(message, )
)
success
success = (()
tcs = :()
tcs.ChatVersion == .ChatVersion.TextChatService
channel = tcs:() tcs.TextChannels:()
channel
channel:(message)
)
success
(()
StarterGui:(, {
Text = .. message,
Color = .(, , ),
Font = .Font.SourceSansBold
})
)
(query)
query #query <
query = query:():(, )
best, bestScore = , -
_, plr (Players:())
plr == localPlayer
uname = plr.Name:()
dname = plr.DisplayName:()
score =
uname == query dname == query plr
uname:(query, , ) score =
dname:(query, , ) score =
uname:(, #query) == query score +=
dname:(, #query) == query score +=
score > bestScore
bestScore = score
best = plr
best
()
targetPlayer =
connection
connection:()
connection =
char = localPlayer.Character
char
hum = char:()
root = char:()
hum
hum.PlatformStand =
hum.WalkSpeed =
root
root.AssemblyLinearVelocity = .(, , )
(target)
target target == localPlayer
targetPlayer = target
connection connection:()
connection = RunService.Heartbeat:(()
myChar = localPlayer.Character
tChar = targetPlayer.Character
myChar tChar ()
myRoot = myChar:()
tRoot = tChar:()
myHum = myChar:()
myRoot tRoot myHum ()
myHum.PlatformStand =
myHum.WalkSpeed =
behindPos = (tRoot.CFrame * .(, , CONFIG.FOLLOW_DISTANCE)).Position
dist = (behindPos - myRoot.Position).Magnitude
dist > CONFIG.STOP_DISTANCE
dir = (behindPos - myRoot.Position).Unit
speed = .(dist * CONFIG.ACCELERATION, CONFIG.MAX_SPEED)
myRoot.AssemblyLinearVelocity = .(dir.X * speed, myRoot.AssemblyLinearVelocity.Y, dir.Z * speed)
myRoot.AssemblyLinearVelocity = .(, myRoot.AssemblyLinearVelocity.Y, )
dist >
myRoot.CFrame = .(myRoot.Position, tRoot.Position)
desired = -tRoot.CFrame.LookVector
current = myRoot.CFrame.LookVector
myRoot.CFrame = .(myRoot.Position, myRoot.Position + current:(desired, ))
)
(player, cmd)
key = (player.UserId) .. cmd
now = ()
lastCommandTime[key] now - lastCommandTime[key] < CONFIG.RATE_LIMIT
lastCommandTime[key] = now
(player, message)
message message:(,) ~=
(player, message)
args = {}
word message:() .(args, word)
cmd = args[]:()
cmd == args[]
target = (args[])
target
( .. args[])
targetPlayer targetPlayer ~= player
(targetPlayer.DisplayName .. )
targetPlayer == target
()
( .. target.DisplayName)
(target)
( .. target.DisplayName .. .. target.Name .. )
cmd ==
targetPlayer == player
()
()
()
()
_, plr Players:()
plr ~= localPlayer
plr.Chatted:((msg) (plr, msg) )
Players.PlayerAdded:((plr)
plr ~= localPlayer
plr.Chatted:((msg) (plr, msg) )
)
()
.()
() - lastMessageTime >= CONFIG.AUTO_INTERVAL
()
lastMessageTime = ()
(char)
.()
targetPlayer
(targetPlayer)
()
localPlayer.Character
(localPlayer.Character)
localPlayer.CharacterAdded:(onCharacterAdded)
()
(autoMessageLoop)
()
()
Players.PlayerRemoving:((plr)
plr == targetPlayer
()
()
)
UserInputService.InputBegan:((inp, gp)
gp
inp.KeyCode == .KeyCode.F
()
()
)
()+ -- OPTIONAL IF YOU WANT TO EXECUTE THIS SCRIPT ON THE ALT OR MAIN. -- + Another new script! Which is now a new version of "Backshot Preventer".. NOW WITH COMMANDS! ;protect (username / display name) to protect that player, preventing backshots! ;unprotect to get the wall off of you, letting someone have a turn! (ONLY PROTECTED USERS CAN SAY THIS COMMAND) If you're playing as XxWall_ProtectionxX, but wants to get off of the player manually, press F! Report any bugs in the comments, and I'll fix it right away! Bugs Patched so far: - Stealing Wall - Jump Violation (making the wall fling itself)