Run it
Copy the script and paste it into your executor.
.PlaceId ==
()
Rayfield = (:())()
Window = Rayfield:({
Name = ,
Icon = ,
LoadingTitle = ,
LoadingSubtitle = ,
Theme = {
TextFont = ,
TextColor = .(, , ),
Background = .(, , ),
Topbar = .(, , ),
Shadow = .(, , ),
NotificationBackground = .(, , ),
NotificationActionsBackground = .(, , ),
TabBackground = .(, , ),
TabStroke = .(, , ),
TabBackgroundSelected = .(, , ),
TabTextColor = .(, , ),
SelectedTabTextColor = .(, , ),
ElementBackground = .(, , ),
ElementBackgroundHover = .(, , ),
SecondaryElementBackground = .(, , ),
ElementStroke = .(, , ),
SecondaryElementStroke = .(, , ),
SliderBackground = .(, , ),
SliderProgress = .(, , ),
SliderStroke = .(, , ),
ToggleBackground = .(, , ),
ToggleEnabled = .(, , ),
ToggleDisabled = .(, , ),
ToggleEnabledStroke = .(, , ),
ToggleDisabledStroke = .(, , ),
ToggleEnabledOuterStroke = .(, , ),
ToggleDisabledOuterStroke = .(, , ),
DropdownSelected = .(, , ),
DropdownUnselected = .(, , ),
InputBackground = .(, , ),
InputStroke = .(, , ),
PlaceholderColor = .(, , )
},
ToggleUIKeybind = ,
DisableRayfieldPrompts = ,
DisableBuildWarnings = ,
ConfigurationSaving = {
Enabled = ,
FolderName = ,
FileName =
},
Discord = {
Enabled = ,
Invite = ,
RememberJoins =
},
KeySystem = ,
KeySettings = {
Title = ,
Subtitle = ,
Note = ,
FileName = ,
SaveKey = ,
GrabKeyFromSite = ,
Key = {}
}
})
Players = :()
RunService = :()
UserInputService = :()
Workspace = :()
Debris = :()
Clipboard = setclipboard toclipboard
ReplicatedStorage = :()
LocalPlayer = Players.LocalPlayer
Camera = Workspace.CurrentCamera
PlayersTab = Window:(, )
PlayersSection = PlayersTab:()
selectedPlayerName =
selectedPlayerIdText =
playerDropdown =
playerNamesTable = {}
()
playerNamesTable = {}
_, player (Players:())
player ~= LocalPlayer
.(playerNamesTable, player.Name)
#playerNamesTable ==
.(playerNamesTable, )
()
Players.PlayerAdded:((player)
()
playerDropdown
playerDropdown:(playerNamesTable, )
)
Players.PlayerRemoving:((player)
()
playerDropdown
playerDropdown:(playerNamesTable, )
)
playerDropdown = PlayersTab:({
Name = ,
Options = playerNamesTable,
CurrentOption = playerNamesTable[] ,
Flag = ,
Callback = (Option)
(Option) ==
selectedPlayerName = Option[]
selectedPlayerName = (Option)
targetPlayer = Players:(selectedPlayerName)
targetPlayer selectedPlayerIdText
selectedPlayerIdText:( .. (targetPlayer.UserId))
selectedPlayerIdText
selectedPlayerIdText:()
,
})
initialId =
firstTarget = Players:(playerNamesTable[])
firstTarget
selectedPlayerName = firstTarget.Name
initialId = (firstTarget.UserId)
selectedPlayerIdText = PlayersTab:({
Title = ,
Content = .. initialId
})
PlayersTab:({
Name = ,
Callback = ()
targetPlayer = Players:(selectedPlayerName)
targetPlayer
Clipboard
((targetPlayer.UserId))
Rayfield:({
Title = ,
Content = .. targetPlayer.Name .. ,
Duration = ,
})
Rayfield:({
Title = ,
Content = ,
Duration = ,
})
Rayfield:({
Title = ,
Content = ,
Duration = ,
})
,
})
PlayersTab:({
Name = ,
Callback = ()
()
playerDropdown
playerDropdown:(playerNamesTable, )
Rayfield:({
Title = ,
Content = ,
Duration = ,
})
,
})
PlayersTab:({
Name = ,
Callback = ()
targetPlayer = Players:(selectedPlayerName)
targetPlayer targetPlayer.Character targetPlayer.Character:()
localRoot = LocalPlayer.Character LocalPlayer.Character:()
localRoot
localRoot.CFrame = targetPlayer.Character.HumanoidRootPart.CFrame + .(, , )
Rayfield:({
Title = ,
Content = .. targetPlayer.Name .. ,
Duration = ,
})
Rayfield:({
Title = ,
Content = ,
Duration = ,
})
,
})
MoveTab = Window:(, )
MoveSection = MoveTab:()
tpWalkEnabled =
tpWalkSpeed =
MoveTab:({
Name = ,
CurrentValue = ,
Flag = ,
Callback = (Value)
tpWalkEnabled = Value
,
})
MoveTab:({
Name = ,
Range = {, },
Increment = ,
Suffix = ,
CurrentValue = ,
Flag = ,
Callback = (Value)
tpWalkSpeed = Value
,
})
RunService.RenderStepped:((dt)
tpWalkEnabled LocalPlayer.Character LocalPlayer.Character:()
humanoid = LocalPlayer.Character:()
rootPart = LocalPlayer.Character.HumanoidRootPart
humanoid humanoid.MoveDirection.Magnitude >
rootPart.CFrame = rootPart.CFrame + (humanoid.MoveDirection * tpWalkSpeed * dt)
)
jumpPowerEnabled =
jumpPowerValue =
MoveTab:({
Name = ,
CurrentValue = ,
Flag = ,
Callback = (Value)
jumpPowerEnabled = Value
humanoid = LocalPlayer.Character LocalPlayer.Character:()
humanoid
humanoid.UseJumpPower =
humanoid.JumpPower = jumpPowerEnabled jumpPowerValue
,
})
MoveTab:({
Name = ,
Range = {, },
Increment = ,
Suffix = ,
CurrentValue = ,
Flag = ,
Callback = (Value)
jumpPowerValue = Value
jumpPowerEnabled
humanoid = LocalPlayer.Character LocalPlayer.Character:()
humanoid
humanoid.UseJumpPower =
humanoid.JumpPower = jumpPowerValue
,
})
LocalPlayer.CharacterAdded:((character)
.()
humanoid = character:()
jumpPowerEnabled
humanoid.UseJumpPower =
humanoid.JumpPower = jumpPowerValue
)
infJumpEnabled =
MoveTab:({
Name = ,
CurrentValue = ,
Flag = ,
Callback = (Value)
infJumpEnabled = Value
,
})
UserInputService.JumpRequest:(()
infJumpEnabled
character = LocalPlayer.Character
character
humanoid = character:()
humanoid
humanoid:(.HumanoidStateType.Jumping)
)
BarrierbreakTab = Window:()
Players = :()
LocalPlayer = Players.LocalPlayer
originalMaxZoom
originalMinZoom
originalCameraMode
originalMouseLock
BarrierbreakTab:({
Name = ,
Default = ,
Callback = (Value)
Value
originalMaxZoom = LocalPlayer.CameraMaxZoomDistance
originalMinZoom = LocalPlayer.CameraMinZoomDistance
originalCameraMode = LocalPlayer.CameraMode
originalMouseLock = LocalPlayer.DevEnableMouseLock
LocalPlayer.CameraMaxZoomDistance = .huge
LocalPlayer.CameraMinZoomDistance =
LocalPlayer.CameraMode = .CameraMode.Classic
(()
LocalPlayer.DevEnableMouseLock =
)
originalMaxZoom
LocalPlayer.CameraMaxZoomDistance = originalMaxZoom
LocalPlayer.CameraMinZoomDistance = originalMinZoom
LocalPlayer.CameraMode = originalCameraMode
originalMouseLock ~=
(()
LocalPlayer.DevEnableMouseLock = originalMouseLock
)
})
BarrierbreakTab:()
Players = :()
LocalPlayer = Players.LocalPlayer
ReplicatedStorage = :()
Workspace = :()
StatusLabel = BarrierbreakTab:()
destroyBarrierActive =
destroyBarrierThread =
plotsBroken =
BarrierbreakTab:({
Name = ,
CurrentValue = ,
Flag = ,
Callback = (Value)
Value plotsBroken
Rayfield:({
Title = ,
Content = ,
Duration = ,
Image = ,
Actions = {
Ignore = {
Name = ,
Callback = ()
()
},
},
})
destroyBarrierActive = Value
destroyBarrierThread
.(destroyBarrierThread)
destroyBarrierThread =
Value
spawnedToysFolder = :(LocalPlayer.Name..)
spawnedToysFolder
_, item (spawnedToysFolder:())
item.Name ==
ReplicatedStorage.MenuToys.DestroyToy:(item)
plotsBroken
StatusLabel:()
destroyBarrierThread = .(()
MenuToys = ReplicatedStorage:()
SetNetworkOwner = ReplicatedStorage:():()
DestroyGrabLine = ReplicatedStorage:():()
targetCFrame = .(, -, )
()
snowballs = {}
spawnedToysFolder = :(LocalPlayer.Name..)
spawnedToysFolder
_, toy (spawnedToysFolder:())
toy.Name ==
.(snowballs, toy)
snowballs
()
destroyBarrierActive
playerPosition = LocalPlayer.Character LocalPlayer.Character.PrimaryPart.Position .(, , )
initialCFrame = .(playerPosition) * .(-, -, -)
.(()
MenuToys.SpawnToyRemoteFunction:(, initialCFrame, .(, -, ))
)
(snowball)
destroyBarrierActive
soundPart = snowball:()
soundPart
.(()
SetNetworkOwner:(soundPart, soundPart.CFrame)
)
(snowballs)
destroyBarrierActive
_, snowball (snowballs)
.(()
_, part (snowball:())
part:()
part.CFrame = targetCFrame
)
()
destroyBarrierActive
targetPosition = .(, -, )
MenuToys.SpawnToyRemoteFunction:(, targetPosition, .(, -, ))
.()
spawnedToysFolder = :(LocalPlayer.Name..)
oven
spawnedToysFolder
_, child (spawnedToysFolder:())
child.Name == child:() ==
oven = child
stillExists = oven ~=
stillExists
StatusLabel:()
plotsBroken =
Rayfield:({
Title = ,
Content = ,
Duration = ,
Image = ,
Actions = {
Ignore = {
Name = ,
Callback = ()
()
},
},
})
stillExists
destroyBarrierActive
snowballs = ()
#snowballs <
#snowballs <
()
.()
()
.()
snowballs = ()
#snowballs ==
_, snowball (snowballs)
(snowball)
(snowballs)
ovenResult = ()
ovenResult
.()
.()
)
spawnedToysFolder = :(LocalPlayer.Name..)
spawnedToysFolder
_, item (spawnedToysFolder:())
item.Name == item.Name ==
ReplicatedStorage.MenuToys.DestroyToy:(item)
plotsBroken
StatusLabel:()
,
})
AntiTab = Window:(, )
Player = :().LocalPlayer
Camera = .CurrentCamera
Mouse = Player:()
UserInputService = :()
Inventory = :(Player.Name .. )
RunService = :()
Debris = :()
StarterGui = :()
PS = :()
RS = :()
R = :()
Workspace =
Player = PS.LocalPlayer
Camera = Workspace.CurrentCamera
CE = RS:(, )
BeingHeld = Player:(, )
StruggleEvent = CE CE:()
antiGucciConnection =
safePosition =
restoreFrames =
()
args = {
[] = ,
[] = .(, , ),
[] = .(, , )
}
(()
ReplicatedStorage.MenuToys.SpawnToyRemoteFunction:((args))
)
folder = Workspace:(Player.Name .. , )
folder folder:()
blob = folder.CreatureBlobman
blob:()
blob.Head.CFrame = .(, , )
blob.Head.Anchored =
()
character = Player.Character Player.CharacterAdded:()
humanoid = character:()
rootPart = character:()
safePosition = rootPart.Position
folder = Workspace:(Player.Name .. )
blob = folder folder:()
seat = blob blob:()
blob
()
.()
folder = Workspace:(Player.Name .. )
blob = folder folder:()
seat = blob blob:()
seat seat:()
rootPart.CFrame = seat.CFrame + .(, , )
seat:(humanoid)
humanoid:():(()
humanoid.Jump humanoid.Sit
restoreFrames =
safePosition = rootPart.Position
)
antiGucciConnection
antiGucciConnection:()
antiGucciConnection = R.Heartbeat:(()
rootPart humanoid
ReplicatedStorage.CharacterEvents.RagdollRemote:(rootPart, )
restoreFrames >
rootPart.CFrame = .(safePosition)
restoreFrames = restoreFrames -
)
.(()
humanoid.Sit
.()
.()
rootPart.CFrame = .(safePosition)
)
()
antiGucciConnection
antiGucciConnection:()
antiGucciConnection =
blobFolder = Workspace:(Player.Name .. )
blobFolder blobFolder:()
blobFolder.CreatureBlobman:()
autoGucciActive =
AntiTab:({
Name = ,
CurrentValue = ,
Flag = ,
Callback = (Value)
autoGucciActive = Value
Value
()
.(()
autoGucciActive
toysFolder = Workspace:(Player.Name .. )
blobExists = toysFolder toysFolder:()
blobExists
()
()
retries =
.()
retries = retries +
toysFolder = Workspace:(Player.Name .. )
(toysFolder toysFolder:()) retries > autoGucciActive
autoGucciActive toysFolder toysFolder:()
()
.()
)
autoGucciActive =
()
})
AntiTab:({
Name = ,
Callback = ()
()
})
AntiTab:({
Name = ,
Callback = ()
blob = ()
blob
seat = blob:()
char = LocalPlayer.Character
humanoid = char char:()
seat humanoid
seat:(humanoid)
})
plr = :()
localdidi = plr.LocalPlayer
hookActive =
()
hookActive =
char = localdidi.Character
char
hrp = char:()
hum = char:()
hrp hum
killedAfterRespawn =
savedCFrame = hrp.CFrame
hrp.CFrame = .(hrp.Position.X, , hrp.Position.Z)
.()
hum.Health =
localdidi.CharacterAdded:((newChar)
newHrp = newChar:(, )
newHum = newChar:(, )
newHrp newHum
.()
newHrp.CFrame = savedCFrame
killedAfterRespawn
killedAfterRespawn =
.()
newHum.Health =
)
AntiTab:({
Name = ,
Callback = HookedPCLDBreak
})
AntiTab:()
paintPartsBackup = {}
paintConnections = {}
()
_, obj (Workspace:())
obj:() obj.Name ==
clone = obj:()
clone.Archivable =
paintPartsBackup[obj:()] = {
clone = clone,
parent = obj.Parent
}
obj:()
()
_, data (paintPartsBackup)
data.clone data.parent
data.clone.Parent = data.parent
paintPartsBackup = {}
()
.(paintConnections, Workspace.DescendantAdded:((obj)
obj:() obj.Name ==
.(()
obj obj.Parent
clone = obj:()
clone.Archivable =
paintPartsBackup[obj:()] = {
clone = clone,
parent = obj.Parent
}
obj:()
)
))
()
_, conn (paintConnections)
conn.Connected
conn:()
paintConnections = {}
(state)
char = Workspace:(Player.Name)
char
_, v (char:())
v:() v:()
v.CanTouch = state
v.CanQuery = state
AntiTab:({
Name = ,
CurrentValue = ,
Flag = ,
Callback = (state)
state
()
()
()
()
()
()
})
antiVoidConn =
VOID_THRESHOLD = -
SAFE_HEIGHT =
AntiTab:({
Name = ,
CurrentValue = ,
Flag = ,
Callback = (on)
on
antiVoidConn
antiVoidConn:()
antiVoidConn = R.Heartbeat:(()
char = Player.Character
char char.PrimaryPart
pos = char.PrimaryPart.Position
pos.Y < VOID_THRESHOLD
safePos = .(pos.X, pos.Y + SAFE_HEIGHT, pos.Z)
char:(.(safePos))
char.PrimaryPart.AssemblyLinearVelocity = .zero
)
antiVoidConn
antiVoidConn:()
antiVoidConn =
})
antiExplodeT =
()
antiExplodeT =
char = Player.Character
char
hrp = char:()
.ChildAdded:((model)
model.Name == antiExplodeT
mag = (model.Position - hrp.Position).Magnitude
mag <=
hrp.Anchored =
()
char[].RagdollLimbPart.CanCollide
()
hrp.Anchored =
)
AntiTab:({
Name = ,
CurrentValue = ,
Flag = ,
Callback = (on)
on
()
antiExplodeT =
})
anti_burn_enabled =
(player)
player.Character player.CharacterAdded:()
(character)
character character:()
(cframe)
toysFolder = :(.Players.LocalPlayer.Name .. )
toysFolder
tool = toysFolder:()
tool
tool
:()
.MenuToys
.SpawnToyRemoteFunction
:(, cframe, .())
(toy)
:()
.MenuToys
.DestroyToy
:(toy)
()
anti_burn_enabled
(()
player = .Players.LocalPlayer
character = (player)
hrp = (character)
hrp hrp:()
fireExtinguisher = [player.Name .. ]:() (hrp.CFrame * .(, , ))
fireExtinguisher fireExtinguisher:()
extinguishPart = fireExtinguisher.ExtinguishPart
hrp:()
extinguishPart.Position = hrp.Position
extinguishPart.Size = .(, , )
:().Heartbeat:()
extinguishPart.Position = .(- , , )
:().Heartbeat:()
(fireExtinguisher)
.()
)
.()
AntiTab:({
Name = ,
Default = ,
Callback = (Value)
anti_burn_enabled = Value
Value
.(antiBurnLoop)
})
AntiVoid = AntiTab:({
Name = ,
CurrentValue = ,
Flag = ,
Callback = (Value)
antiboid = Value
Value
.FallenPartsDestroyHeight = /
Rayfield:({
Title = ,
Content = ,
Duration = ,
Image = ,
})
.FallenPartsDestroyHeight = -
Rayfield:({
Title = ,
Content = ,
Duration = ,
Image = ,
})
,
})
AntiTab:()
RunService = :()
Players = :()
player = Players.LocalPlayer
enabled =
hbConn =
coco =
holdRemote =
dropRemote =
MenuToys = ReplicatedStorage:()
DestroyToy = MenuToys:()
()
toysFolder = :(player.Name.., )
toysFolder
MenuToys.SpawnToyRemoteFunction:(
,
.(-, -, -),
.(,,)
)
coco = toysFolder:(, )
coco
holdPart = coco:(, )
holdPart
holdRemote = holdPart:()
dropRemote = holdPart:()
holdRemote dropRemote
()
coco coco.Parent
(()
DestroyToy.FireServer
DestroyToy:(coco)
DestroyToy.InvokeServer
DestroyToy:(coco)
)
()
hbConn = RunService.Heartbeat:(()
enabled
character = player.Character
head = character character:()
coco coco.Parent
()
holdRemote dropRemote head
(()
holdRemote:(coco, character)
dropRemote:(
coco,
.(head.Position + .(,,)),
.zero
)
)
)
AntiTab:({
Name = ,
CurrentValue = ,
Callback = (state)
enabled = state
state
()
hbConn
hbConn:()
hbConn =
()
coco =
holdRemote =
dropRemote =
})
antiblob =
AntiTab:({
Name = ,
CurrentValue = ,
Flag = ,
Callback = (Value)
antiblob = Value
player = :().LocalPlayer
= :()
antiblob
player.Character
player.Character:()
truePosPart = .()
truePosPart.Parent = player.Character
truePosPart.Name =
truePosPart.Anchored =
truePosPart.Transparency =
truePosPart.CanCollide =
truePosPart.Size = .(, , )
truePosPart.CFrame = .(, - , )
antiblob .()
player.Character
hrp = player.Character:()
truePosPart = player.Character:()
hrp truePosPart
rootAttachment = hrp:()
rootAttachment rootAttachment.Parent == hrp
rootAttachment.Parent = truePosPart
()
_, part (player.Character:())
part:() part.Massless
part.Massless =
()
_, plot (.PlotItems:())
plot.Name ~=
_, item (plot:())
item.Name ==
blobScript = item:()
rightDetector = item:()
leftDetector = item:()
blobScript rightDetector leftDetector
dropEvent = blobScript:()
rightWeld = rightDetector:()
leftWeld = leftDetector:()
dropEvent rightWeld hrp
dropEvent:(rightWeld, hrp)
dropEvent leftWeld hrp
dropEvent:(leftWeld, hrp)
replicatedStorage:()
struggleEvent = replicatedStorage.CharacterEvents:()
struggleEvent
struggleEvent:(player)
_, plr (:():())
toyFolder = :(plr.Name .. )
toyFolder
_, item (toyFolder:())
item.Name ==
blobScript = item:()
rightDetector = item:()
leftDetector = item:()
blobScript rightDetector leftDetector
dropEvent = blobScript:()
rightWeld = rightDetector:()
leftWeld = leftDetector:()
dropEvent rightWeld hrp
dropEvent:(rightWeld, hrp)
dropEvent leftWeld hrp
dropEvent:(leftWeld, hrp)
replicatedStorage:()
struggleEvent = replicatedStorage.CharacterEvents:()
struggleEvent
struggleEvent:(player)
()
antiblob player.Character
hrp = player.Character:()
truePosPart = player.Character:()
hrp truePosPart
rootAttachment = truePosPart:()
rootAttachment
rootAttachment.Parent = hrp
()
truePosPart:()
,
})
players = :()
runService = :()
localPlayer = .Players.LocalPlayer
= :()
antiBlobmanEnabled =
antiBlobmanGrabEnabled =
antiBlobmanConnection =
(player)
char = player.Character
char
player.CharacterAdded
char = player.CharacterAdded:()
char =
char
(character)
character:()
(character)
character:()
(part1, part2)
(part1.Position - part2.Position).Magnitude
(includePlots)
allToys = {}
playersList = players:()
_, player (playersList)
toyFolder = [player.Name .. ]
_, toy (toyFolder:())
toy:()
.(allToys, toy)
includePlots
i = ,
_, item (.PlotItems[ .. i]:())
item:()
.(allToys, item)
allToys
(toyName, cframe)
localPlayer.CanSpawnToy
.(()
toySpawn = replicatedStorage:():()
toySpawn:(toyName, cframe * .(, , ), .(, , ))
.()
myToysFolder:(toyName)
.()
myToysFolder:(toyName)
)
(toy)
.(()
success, err = (()
toyDestroy = replicatedStorage:():()
toyDestroy:(toy)
)
success
( .. err)
)
(part, cframe)
.(()
setNetworkOwnerRemote = replicatedStorage:():()
setNetworkOwnerRemote:(part, cframe)
)
(constraint, enabled)
constraint
constraint.Name ~=
constraint.Name ~=
constraint.Name ~=
constraint.Name == (constraint constraint.Parent.Parent.Parent ~= myToysFolder)
constraint.Enabled = enabled
constraint constraint.Parent.Parent.Parent ~= myToysFolder
constraint.Enabled = enabled
constraint constraint.Parent.Parent.Parent ~= myToysFolder
constraint.Enabled = enabled
constraint constraint.Parent.Parent.Parent ~= myToysFolder
constraint.Enabled = enabled
()
(()
antiBlobmanConnection
antiBlobmanConnection:()
)
allToys = ()
antiBlobmanEnabled
_, toy (allToys)
toy.Name ==
leftDetector = toy:()
rightDetector = toy:()
leftWeld = leftDetector leftDetector:()
leftAlign = leftDetector leftDetector:()
rightWeld = rightDetector rightDetector:()
rightAlign = rightDetector rightDetector:()
(leftWeld, )
(leftAlign, )
(rightWeld, )
(rightAlign, )
antiBlobmanConnection = .DescendantAdded:((descendant)
(descendant, )
)
_, toy (allToys)
toy.Name ==
leftDetector = toy:()
rightDetector = toy:()
leftWeld = leftDetector leftDetector:()
leftAlign = leftDetector leftDetector:()
rightWeld = rightDetector rightDetector:()
rightAlign = rightDetector rightDetector:()
(leftWeld, )
(leftAlign, )
(rightWeld, )
(rightAlign, )
()
rootPart = ((localPlayer))
rootPart
ragdollRemote = replicatedStorage:():()
ragdollRemote:(rootPart, )
AntiTab:({
Name = ,
Default = ,
Color = .(, , ),
Flag = ,
Callback = (enabled)
antiBlobmanGrabEnabled = enabled
antiBlobmanGrabEnabled
_, player (players:())
player (player)
playerCharacter = (player)
playerRootPart =
playerCharacter
playerRootPart = (playerCharacter)
playerHumanoid =
playerCharacter
playerHumanoid = (playerCharacter)
myCharacter = (localPlayer)
myRootPart =
myCharacter
myRootPart = (myCharacter)
player.Name ~= localPlayer.Name (playerRootPart (myRootPart (playerHumanoid (playerHumanoid.SeatPart (playerHumanoid.SeatPart.Parent (playerHumanoid.SeatPart.Parent.Name == (playerRootPart, myRootPart) <= ))))))
(playerRootPart, playerRootPart.CFrame)
.()
.()
})
AntiTab:()
Players = :()
LocalPlayer = Players.LocalPlayer
ExtendGrabLine = ReplicatedStorage
:()
:()
KB_THRESHOLD =
BYTE_THRESHOLD = KB_THRESHOLD *
COOLDOWN =
lastNotify =
connection =
(text)
Rayfield:({
Title = ,
Content = text,
Duration = ,
Image =
})
(args)
_, v (args)
(v) == v:()
v
(v) == v:()
plr = Players:(v)
plr plr
(v) == v:()
model = v:()
model
plr = Players:(model)
plr plr
(v) == v:()
model = v:()
model
plr = Players:(model)
plr plr
LocalPlayer
(str)
#str <=
str
str:(, ) .. .. (#str - ) ..
(tbl)
preview = {}
count =
_, v (tbl)
count +=
count <=
.(preview, (v))
..count....table.(preview, )..
(args)
seen = {}
summary = {}
_, v (args)
key
(v) ==
key = ..(v)
(v) ==
key = ..v.ClassName....v.Name..
(v) ==
key = ..(v)
key = (v)....(v)
seen[key] = (seen[key] ) +
k, count (seen)
count >
.(summary, k....count)
.(summary, k)
summary
()
connection
connection = ExtendGrabLine.OnClientEvent:((...)
args = { ... }
totalBytes =
_, v (args)
(v) ==
totalBytes += #v
totalBytes < BYTE_THRESHOLD
() - lastNotify < COOLDOWN
lastNotify = ()
sender = (args)
senderName = sender.DisplayName
mbSize = totalBytes / ( * )
summarized = (args)
(.(
,
senderName,
mbSize,
.(summarized, )
))
)
()
connection
connection:()
connection =
AntiTab:({
Name = ,
CurrentValue = ,
Flag = ,
Callback = (Value)
Value
()
Rayfield:({
Title = ,
Content = ,
Duration =
})
()
Rayfield:({
Title = ,
Content = ,
Duration =
})
})
antilaggg =
antilagggauto =
AntiTab:({
Name = ,
CurrentValue = ,
Flag = ,
Callback = (p1191)
antilaggg = p1191
:().LocalPlayer.PlayerScripts.CharacterAndBeamMove.Disabled = p1191
})
AntiTab:({
Name = ,
CurrentValue = ,
Flag = ,
Callback = (p1193)
antilagggauto = p1193
})
grabpersec =
GrabEvents = ReplicatedStorage:()
GrabRemote = GrabEvents GrabEvents:()
DestroyGrabLineRemote = GrabEvents GrabEvents:()
SetNetworkOwnerRemote = GrabEvents GrabEvents:()
SpawnToyRemote = GrabEvents GrabEvents:()
DestroyToyRemote = GrabEvents GrabEvents:()
RagdollRemote = ReplicatedStorage:() ReplicatedStorage.CharacterEvents:()
StruggleRemote = ReplicatedStorage:() ReplicatedStorage.CharacterEvents:()
:().DescendantAdded:((descendant)
descendant:() descendant.Name ==
grabpersec = grabpersec +
grabpersec <= ( antilagggauto antilaggg)
.(, ()
grabpersec ~=
grabpersec = grabpersec -
)
grabpersec =
:().LocalPlayer.PlayerScripts.CharacterAndBeamMove.Disabled =
()
antilagggauto
originalBeamState = :().LocalPlayer.PlayerScripts.CharacterAndBeamMove.Disabled
.(, ()
antilaggg
:().LocalPlayer.PlayerScripts.CharacterAndBeamMove.Disabled =
()
)
)
()
antilaggg antilagggauto
_, part (:())
part:() part.Name ==
(()
DestroyGrabLineRemote
i = ,
DestroyGrabLineRemote:(part)
)
antilagggauto
.()
antilagggauto
()
AntiTab:()
AntiKickToggle = AntiTab:({
Name = ,
CurrentValue = ,
Flag = ,
Callback = (Value)
().AntiKickEnabled = Value
Value
.(()
plr = .Players.LocalPlayer
inv = [plr.Name .. ]
hrp
setOwner = .ReplicatedStorage:():()
stickyEvent = .ReplicatedStorage:():()
destroyrem = .ReplicatedStorage:():()
canSpawn = plr:()
()
plr.Character plr.Character:()
plr.Character.HumanoidRootPart
character = plr.CharacterAdded:()
character:()
()
ToyFolder
.PlotItems.PlayersInPlots:(plr.Name)
_, v (.Plots:ildren()) do
for _, b in pairs(v.PlotSign.ThisPlotsOwners:GetChildren()) do
if b.Value == plr.Name then
ToyFolder = workspace.PlotItems[v.Name]
end
end
end
if ToyFolder then
return true, ToyFolder
else
return false
end
end
local function StickKunai(kunai)
if not kunai or not kunai:FindFirstChild("StickyPart") then
return
end
local currentHRP = getHRP()
if kunai:FindFirstChild("SoundPart") then
if not kunai["SoundPart"]:FindFirstChild("PartOwner") or kunai["SoundPart"].PartOwner.Value ~= plr.Name then
setOwner:FireServer(kunai.SoundPart, kunai.SoundPart.CFrame)
end
end
stickyEvent:FireServer(
kunai.StickyPart, currentHRP:FindFirstChild("FirePlayerPart") or currentHRP:WaitForChild("FirePlayerPart"), CFrame.new(0, 0, 0) * CFrame.Angles(0, math.rad(90), math.rad(90)))
for _, obj in pairs(kunai:GetChildren()) do
if obj.Name == "Pyramid" then
obj.CanTouch = false
obj.CanCollide = false
obj.CanQuery = false
obj.Transparency = 0
local high = Instance.new("Highlight")
high.FillColor = Color3.fromRGB(0, 0, 0)
high.Parent = obj
elseif obj.Name == "Main" then
obj.CanTouch = false
obj.CanCollide = false
obj.CanQuery = false
obj.Transparency = 0
local high = Instance.new("Highlight")
high.FillColor = Color3.fromRGB(255, 255, 255)
high.Parent = obj
elseif obj:IsA("BasePart") then
obj.CanTouch = false
obj.CanCollide = false
obj.CanQuery = false
obj.Transparency = 1
end
end
end
local function ClearKunai()
for _, v in pairs(inv:GetChildren()) do
if v.Name == "AntiKick" then
destroyrem:FireServer(v)
end
end
end
local function SpawnToy(name)
while not canSpawn.Value do
canSpawn.Changed:Wait()
end
local currentHRP = getHRP()
task.spawn(function()
game.ReplicatedStorage.MenuToys.SpawnToyRemoteFunction:InvokeServer(
name, currentHRP.CFrame * CFrame.new(0, 12, 20), Vector3.new(0, 0, 0))
end)
local boolik, house = CheckForHome()
if boolik then
return house:WaitForChild(name, 2)
elseif not workspace.PlotItems.PlayersInPlots:FindFirstChild(plr.Name) then
return inv:WaitForChild(name, 2)
elseif workspace.PlotItems.PlayersInPlots:FindFirstChild(plr.Name) and not boolik then
return nil
end
end
while getgenv().AntiKickEnabled do
task.wait(0.005)
if not plr.Character or not plr.Character:FindFirstChild("Humanoid") or plr.Character.Humanoid.Health <= 0 then
continue
end
local kunai = inv:FindFirstChild("NinjaShuriken")
if workspace.PlotItems.PlayersInPlots:FindFirstChild(plr.Name) then
local boolik, house = CheckForHome()
if boolik and house and workspace.Plots:FindFirstChild(house.Name) and workspace.Plots:FindFirstChild(house.Name)["PlotSign"]["ThisPlotsOwners"]:FindFirstChild("Value") and workspace.Plots:FindFirstChild(house.Name)["PlotSign"]["ThisPlotsOwners"]["Value"]["TimeRemainingNum"].Value > 89 then
kunai = SpawnToy("NinjaShuriken")
if kunai == nil then
continue
end
kunai.Name = "AntiKick"
StickKunai(kunai)
end
end
if not kunai then
if workspace.PlotItems.PlayersInPlots:FindFirstChild(plr.Name) then
continue
end
kunai = SpawnToy("NinjaShuriken")
if kunai == nil then
continue
end
kunai.Name = "AntiKick"
if not kunai then
continue
end
end
repeat
if kunai and kunai:FindFirstChild("StickyPart") and kunai.StickyPart.CanTouch == true then
StickKunai(kunai)
kunai.Name = "AntiKick"
end
wait(0.3)
until not kunai or not getgenv().AntiKickEnabled or not kunai:FindFirstChild("StickyPart") or kunai.StickyPart.CanTouch == false or not plr.Character or not plr.Character:FindFirstChild("HumanoidRootPart") or not kunai:FindFirstChild("StickyPart") or (plr.Character.HumanoidRootPart.Position - kunai.StickyPart.Position).Magnitude >= 20
if not kunai or not kunai:FindFirstChild("StickyPart") or not plr.Character or not plr.Character:FindFirstChild("HumanoidRootPart") or (plr.Character.HumanoidRootPart.Position - kunai.StickyPart.Position).Magnitude >= 20 then
ClearKunai()
end
pcall(function()
repeat
wait(0.05)
until not getgenv().AntiKickEnabled or not plr.Character or not plr.Character:FindFirstChild("Humanoid") or not kunai or not kunai:FindFirstChild("StickyPart") or not kunai.StickyPart:FindFirstChild("StickyWeld") or not kunai.StickyPart.StickyWeld.Part1
if not kunai or not kunai:FindFirstChild("StickyPart") or (plr.Character and plr.Character:FindFirstChild("Humanoid") and plr.Character.Humanoid.Health <= 0) or not kunai["StickyPart"]:FindFirstChild("StickyWeld").Part1 then
ClearKunai()
end
end)
end
end)
end
end,
})
COCK = false
Penis = AntiTab:CreateToggle({
Name = "Pencil Anti-Kick",
CurrentValue = false,
Flag = "Toggle1",
Callback = function(Value)
COCK = Value
while COCK do
while not game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys"):FindFirstChild("ToolPencil") do
if game.Players.LocalPlayer.Character then
if game.Players.LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
game.ReplicatedStorage.MenuToys.SpawnToyRemoteFunction:InvokeServer("ToolPencil", CFrame.new(game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame.Position) + Vector3.new(0, 0, 15), Vector3.new(0, 0, 0))
end
end
task.wait()
end
if game.Players.LocalPlayer.Character then
if game.Players.LocalPlayer.Character:FindFirstChild("Torso") and game.Players.LocalPlayer.Character:FindFirstChild("HumanoidRootPart") and game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys"):FindFirstChild("ToolPencil") then
if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil:FindFirstChild("StickyPart") then
if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.StickyPart:FindFirstChild("StickyWeld") then
if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.StickyPart.StickyWeld.Part1 ~= game.Players.LocalPlayer.Character.Torso then
local a = game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.SoundPart.CFrame.Position
local b = game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame.Position
local distance = Vector3.new((a.X - b.X) ^ 2, (a.Y - b.Y) ^ 2, (a.Z - b.Z) ^ 2)
if math.sqrt(distance.X + distance.Y + distance.Z) > 20 then
game.ReplicatedStorage.MenuToys.DestroyToy:FireServer(game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil)
else
game.ReplicatedStorage.PlayerEvents.StickyPartEvent:FireServer(game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.StickyPart, game.Players.LocalPlayer.Character.Torso, CFrame.new(0, - 1, 0) * CFrame.Angles(0, math.pi, 0))
for _, prt in pairs(game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil:GetChildren()) do
if prt.ClassName == "Part" then
prt.CanQuery = false
end
end
task.wait(0.2)
if game.Players.LocalPlayer.Character then
if game.Players.LocalPlayer.Character:FindFirstChild("Torso") and game.Players.LocalPlayer.Character:FindFirstChild("HumanoidRootPart") and game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys"):FindFirstChild("ToolPencil") then
if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil:FindFirstChild("StickyPart") then
if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.StickyPart:FindFirstChild("StickyWeld") then
if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.StickyPart.StickyWeld.Part1 ~= game.Players.LocalPlayer.Character.Torso then
if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil then
if game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.StickyPart.StickyWeld.Part1 ~= game.Players.LocalPlayer.Character.Torso then
game.ReplicatedStorage.GrabEvents.SetNetworkOwner:FireServer(game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.SoundPart, game.workspace:FindFirstChild(game.Players.LocalPlayer.Name .. "SpawnedInToys").ToolPencil.SoundPart.CFrame)
end
end
end
end
end
end
end
end
end
end
end
end
end
task.wait()
end
end,
})
AntiTab:CreateSection("Anti grab")
antiTpActive = false
local tpThreshold = 10
local lastPosition
local INSTANT_CFRAME
function safeNotify(args)
pcall(function()
Rayfield:Notify(args)
end)
end
function getPlotInfo(plot)
local sign = plot:FindFirstChild("PlotSign")
local ownersFolder = sign and sign:FindFirstChild("ThisPlotsOwners")
local valueObj = ownersFolder and ownersFolder:FindFirstChild("Value")
local grabPart = plot:FindFirstChild("PlusGrabPart", true)
return valueObj, grabPart
end
function ultraFastClaimPlot()
local char = LocalPlayer.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if not (char and root) then
return false
end
local plots = Workspace:FindFirstChild("Plots")
if not plots then
return false
end
for i = 1, 10 do
local p = plots:FindFirstChild("Plot" .. i)
if p then
local owner, grab = getPlotInfo(p)
if owner and owner.Value == LocalPlayer.Name and grab then
root.CFrame = grab.CFrame
root.AssemblyLinearVelocity = Vector3.zero
root.AssemblyAngularVelocity = Vector3.zero
return true
end
end
end
for i = 1, 10 do
local p = plots:FindFirstChild("Plot" .. i)
if p then
local owner, grab = getPlotInfo(p)
if (not owner or owner.Value == "") and grab then
root.CFrame = grab.CFrame
root.AssemblyLinearVelocity = Vector3.zero
root.AssemblyAngularVelocity = Vector3.zero
task.defer(function()
local tries = 0
repeat
tries += 1
pcall(function()
ReplicatedStorage.GrabEvents.SetNetworkOwner:FireServer(grab, grab.CFrame)
end)
task.wait(0.001)
owner = select(1, getPlotInfo(p))
until (owner and owner.Value == LocalPlayer.Name) or tries >= 5
end)
return true
end
end
end
return false
end
function ULTRA_INSTANT_TELEPORT(root)
if INSTANT_CFRAME then
root.CFrame = INSTANT_CFRAME
root.AssemblyLinearVelocity = Vector3.zero
root.AssemblyAngularVelocity = Vector3.zero
return true
end
return ultraFastClaimPlot()
end
AntiTab:CreateToggle({
Name = "Tp to house if getting loopkill",
CurrentValue = false,
Callback = function(Value)
antiTpActive = Value
if Value then
task.spawn(function()
local lastPos = nil
local isHandling = false
while antiTpActive do
if not isHandling then
local char = LocalPlayer.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if root then
local currentPos = root.Position
if lastPos then
local distance = (currentPos - lastPos).Magnitude
if distance > tpThreshold then
isHandling = true
ULTRA_INSTANT_TELEPORT(root)
task.wait(0.05)
isHandling = false
end
end
lastPos = root.Position
else
lastPos = nil
end
end
task.wait(0)
end
end)
else
end
end
})
AntiTab:CreateSlider({
Name = "Sensibility",
Range = {
1,
1000
},
Increment = 5,
CurrentValue = tpThreshold,
Callback = function(Value)
tpThreshold = Value
end
})
AntiTab:CreateToggle({
Name = "Anti Loop",
CurrentValue = false,
Flag = "AntiLoopToggle",
Callback = function(Value)
if Value then
getgenv().teleportLocations = {
Vector3.new(518.52, 834.62, - 362.38),
Vector3.new(566.16, 124.33, - 93.13),
Vector3.new(80.63, 346.19, 338.40),
Vector3.new(288.70, 447.54, 481.17),
Vector3.new(- 331.23, 81.64, 340.15),
Vector3.new(- 566.02, - 6.35, 84.20),
Vector3.new(- 514.05, - 6.35, - 160.63),
Vector3.new(- 215.14, 60.76, - 304.82),
Vector3.new(- 338.28, 22.11, 484.03)
}
getgenv().ultraFastLoopTP = function()
while getgenv().AntiLoopEnabled do
local char = player.Character or player.CharacterAdded:Wait()
local hrp = char:WaitForChild("HumanoidRootPart")
for _, location in ipairs(getgenv().teleportLocations) do
if hrp and getgenv().AntiLoopEnabled then
hrp.CFrame = CFrame.new(location)
end
task.wait(0.08)
end
end
end
getgenv().AntiLoopEnabled = true
task.spawn(getgenv().ultraFastLoopTP)
player.CharacterAdded:Connect(function()
task.wait(0.08)
if getgenv().AntiLoopEnabled then
task.spawn(getgenv().ultraFastLoopTP)
end
end)
else
getgenv().AntiLoopEnabled = false
end
end
})
local Players = game:GetService("Players")
local Remotes = {}
for _, Remote in ReplicatedStorage:GetDescendants() do
if Remote.ClassName:find("Remote") then
Remotes[Remote.Name] = Remote
end
end
local LocalPlayer = Players.LocalPlayer
local IsHeld = LocalPlayer:WaitForChild("IsHeld")
local Character = nil
local Root = nil
local Humanoid = nil
local Head = nil
local AntiGrabEnabled = false
local HeldConnection = nil
local SitThread = nil
----------------------------------------------------
-- Character Handling
----------------------------------------------------
local function GetLimbs(Char)
if not Char then return {} end
local Limbs = {}
for _, Name in pairs({"Right Arm", "Left Arm", "Right Leg", "Left Leg"}) do
Limbs[Name] = Char:FindFirstChild(Name)
end
return Limbs
end
local function GetRagdollLimbs(Char)
if not Char then return {} end
local RagdollLimbs = {}
for _, Limb in pairs(GetLimbs(Char)) do
if Limb then
local RagdollLimb = Limb:FindFirstChild("RagdollLimbPart")
if RagdollLimb then
local Socket = RagdollLimb:FindFirstChildWhichIsA("BallSocketConstraint")
if Socket then
RagdollLimbs[RagdollLimb] = Socket
end
end
end
end
return RagdollLimbs
end
local function UpdateCharacter(NewCharacterModel)
if not (NewCharacterModel and NewCharacterModel:IsDescendantOf(workspace)) then return end
Character = NewCharacterModel
Root = NewCharacterModel:WaitForChild("HumanoidRootPart", 5)
Humanoid = NewCharacterModel:WaitForChild("Humanoid", 5)
Head = NewCharacterModel:WaitForChild("Head", 5)
end
UpdateCharacter(LocalPlayer.Character)
LocalPlayer.CharacterAdded:Connect(UpdateCharacter)
----------------------------------------------------
-- SIT SYSTEM (NEW)
----------------------------------------------------
local function ForceSit()
if SitThread then
task.cancel(SitThread)
SitThread = nil
end
SitThread = task.spawn(function()
while AntiGrabEnabled and IsHeld.Value do
pcall(function()
if Humanoid and Root then
Humanoid.Sit = true
Humanoid:ChangeState(Enum.HumanoidStateType.Seated)
-- disable auto stand states
Humanoid:SetStateEnabled(Enum.HumanoidStateType.GettingUp, false)
Humanoid:SetStateEnabled(Enum.HumanoidStateType.Running, false)
Humanoid:SetStateEnabled(Enum.HumanoidStateType.RunningNoPhysics, false)
Humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false)
-- kill velocities
Root.AssemblyLinearVelocity = Vector3.zero
Root.AssemblyAngularVelocity = Vector3.zero
end
end)
task.wait(0.1)
end
-- restore after release
if Humanoid then
Humanoid:SetStateEnabled(Enum.HumanoidStateType.GettingUp, true)
Humanoid:SetStateEnabled(Enum.HumanoidStateType.Running, true)
Humanoid:SetStateEnabled(Enum.HumanoidStateType.RunningNoPhysics, true)
Humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, true)
Humanoid.Sit = false
end
end)
end
----------------------------------------------------
-- ANTIGRAB
----------------------------------------------------
local function StartAntiGrab()
if HeldConnection then
HeldConnection:Disconnect()
HeldConnection = nil
end
HeldConnection = IsHeld:GetPropertyChangedSignal("Value"):Connect(function()
if not AntiGrabEnabled or not IsHeld.Value then return end
-- NEW (important)
ForceSit()
local RagdollLimbs = GetRagdollLimbs(Character)
-- server struggle spam
task.spawn(function()
while AntiGrabEnabled and IsHeld.Value do
pcall(function()
Remotes.Struggle:FireServer()
Remotes.RagdollRemote:FireServer(Root, 0)
end)
task.wait()
end
end)
-- physics break loop
task.spawn(function()
while AntiGrabEnabled and IsHeld.Value do
if Humanoid and Root then
pcall(function()
Humanoid:ChangeState(Enum.HumanoidStateType.Physics)
Root.Anchored = true
Root.AssemblyLinearVelocity = Vector3.zero
Root.AssemblyAngularVelocity = Vector3.zero
end)
end
task.wait()
end
if Root then
Root.Anchored = false
end
end)
-- ragdoll limb override
task.spawn(function()
while AntiGrabEnabled and Root and Root.Anchored do
pcall(function()
if Head then
Head.CanCollide = false
Head.AssemblyLinearVelocity = Vector3.zero
Head.AssemblyAngularVelocity = Vector3.zero
end
for RagdollLimb, Socket in pairs(RagdollLimbs) do
if RagdollLimb and Socket and Root then
Socket.Enabled = false
RagdollLimb.CFrame = Root.CFrame
RagdollLimb.CanCollide = false
RagdollLimb.AssemblyLinearVelocity = Vector3.zero
RagdollLimb.AssemblyAngularVelocity = Vector3.zero
end
end
end)
task.wait()
end
end)
end)
end
local function StopAntiGrab()
AntiGrabEnabled = false
if HeldConnection then
HeldConnection:Disconnect()
HeldConnection = nil
end
if SitThread then
task.cancel(SitThread)
SitThread = nil
end
if Root then
Root.Anchored = false
end
if Humanoid then
Humanoid.Sit = false
Humanoid:SetStateEnabled(Enum.HumanoidStateType.GettingUp, true)
Humanoid:SetStateEnabled(Enum.HumanoidStateType.Running, true)
Humanoid:SetStateEnabled(Enum.HumanoidStateType.RunningNoPhysics, true)
Humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, true)
end
end
----------------------------------------------------
-- TOGGLE
----------------------------------------------------
AntiTab:CreateToggle({
Name = "Anti Grab",
CurrentValue = false,
Callback = function(Value)
AntiGrabEnabled = Value
if Value then
StartAntiGrab()
else
StopAntiGrab()
end
end
})
tpland = {
Spawn = Vector3.new(0, - 7.35, 0),
SpawnCave = Vector3.new(- 90, 14.6, - 314.3),
GreenHouse = Vector3.new(- 538, - 7, 74),
PinkHouse = Vector3.new(- 478, - 7, - 147),
Barn = Vector3.new(- 228, 82, - 318),
BlueHouse = Vector3.new(496, 83, - 350),
ChineseHouse = Vector3.new(542, 123, - 93),
PurpleHouse = Vector3.new(270, - 7, 448),
Factory = Vector3.new(134, 347, 352),
OtherGreenHouse = Vector3.new(- 359, 98, 357),
BigCave = Vector3.new(- 245, 80, 485),
GoodPrison = Vector3.new(569.6, - 7, 176.3),
RuhubsDogAhhPrison = Vector3.new(564, 82.5, 210),
ExtremelyGoodPrison = Vector3.new(525, 76, 56),
TrainCave = Vector3.new(536.6, 87.5, - 169.5),
IslanCave = Vector3.new(75.8, 323, 368.5),
ChineseRoof = Vector3.new(592, 153, - 100),
UfoCave = Vector3.new(29.6, 10.5, - 225.8),
Prison = Vector3.new(195, - 7, - 561),
BlueHouseSlot = Vector3.new(562.2, 85.38, - 212.56),
SpawnSlot = Vector3.new(51.75, - 5.3, - 121.64),
HauntedSlot = Vector3.new(164.57, - 5.43, 530.97),
RandomSlot = Vector3.new(- 211.65, 85.7, 426.72),
BeachSlot = Vector3.new(- 546.97, - 5.3, - 41.09)
}
SL = tpland["Spawn"]
antiok = true
lastSafePosition = nil
teleportDetected = false
lastCheckTime = tick()
positionHistory = {}
maxHistory = 10
isHeldSpamDetected = false
heldChangeTimes = {}
heldSpamThreshold = 8
lastHeldValue = false
struggling = false
lastStruggleTime = 0
struggleCooldown = 0.5
AS = AntiTab:CreateToggle({
Name = "Anti setown kick",
Default = true,
Callback = function(Value)
antiok = Value
if Value then
task.spawn(function()
if game.Players.LocalPlayer.Character and game.Players.LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
lastSafePosition = game.Players.LocalPlayer.Character.HumanoidRootPart.Position
for i = 1, maxHistory do
table.insert(positionHistory, lastSafePosition)
end
end
if game.Players.LocalPlayer:FindFirstChild("IsHeld") then
lastHeldValue = game.Players.LocalPlayer.IsHeld.Value
end
while antiok and task.wait(0.05) do
char = game.Players.LocalPlayer.Character
if not char then
continue
end
hrp = char:FindFirstChild("HumanoidRootPart")
if not hrp then
continue
end
currentPos = hrp.Position
currentTime = tick()
isHeld = false
if game.Players.LocalPlayer:FindFirstChild("IsHeld") then
isHeld = game.Players.LocalPlayer.IsHeld.Value
if isHeld ~= lastHeldValue then
table.insert(heldChangeTimes, currentTime)
lastHeldValue = isHeld
for i = # heldChangeTimes, 1, - 1 do
if currentTime - heldChangeTimes[i] > 2 then
table.remove(heldChangeTimes, i)
end
end
if # heldChangeTimes >= heldSpamThreshold then
isHeldSpamDetected = true
end
end
end
if isHeld and not struggling and (currentTime - lastStruggleTime > struggleCooldown) then
struggling = true
lastStruggleTime = currentTime
task.spawn(function()
for i = 1, 5 do
pcall(function()
game:GetService("ReplicatedStorage").CharacterEvents.Struggle:FireServer(game.Players.LocalPlayer)
end)
task.wait(0.05)
end
struggling = false
end)
end
table.insert(positionHistory, 1, currentPos)
if # positionHistory > maxHistory then
table.remove(positionHistory, maxHistory + 1)
end
avgDistance = 0
if # positionHistory >= 2 then
for i = 2, # positionHistory do
avgDistance = avgDistance + (positionHistory[i - 1] - positionHistory[i]).Magnitude
end
avgDistance = avgDistance / (# positionHistory - 1)
end
velocity = hrp.AssemblyLinearVelocity.Magnitude
movedDistance = (currentPos - lastSafePosition).Magnitude
abnormalTeleport = false
if isHeldSpamDetected then
abnormalTeleport = true
elseif currentPos.Magnitude > 1000000 then
abnormalTeleport = true
teleportDetected = true
elseif movedDistance > 100 and velocity < 50 and avgDistance < 10 then
abnormalTeleport = true
teleportDetected = true
elseif currentPos.Y > 10000 or currentPos.Y < - 1000 then
abnormalTeleport = true
teleportDetected = true
elseif velocity > 500 then
abnormalTeleport = true
teleportDetected = true
end
if abnormalTeleport then
isHeldSpamDetected = false
heldChangeTimes = {}
hrp.AssemblyLinearVelocity = Vector3.zero
hrp.AssemblyAngularVelocity = Vector3.zero
for i = 1, 3 do
pcall(function()
game:GetService("ReplicatedStorage").CharacterEvents.Struggle:FireServer(game.Players.LocalPlayer)
end)
task.wait(0.05)
end
teleported = false
if SL ~= 'off' and SL then
hrp.CFrame = CFrame.new(SL)
teleported = true
else
plots = workspace:FindFirstChild("Plots")
foundSafe = false
if plots then
for i = 1, 5 do
plot = plots:FindFirstChild("Plot" .. i)
if plot then
sign = plot:FindFirstChild("PlotSign")
ownersFolder = sign and sign:FindFirstChild("ThisPlotsOwners")
valueObj = ownersFolder and ownersFolder:FindFirstChild("Value")
if valueObj and valueObj.Value == game.Players.LocalPlayer.Name then
grabPart = plot:FindFirstChild("PlusGrabPart", true)
if grabPart then
hrp.CFrame = grabPart.CFrame
foundSafe = true
teleported = true
break
end
end
end
end
end
if not foundSafe then
hrp.CFrame = CFrame.new(tpland["Spawn"])
teleported = true
end
end
if teleported then
hrp.AssemblyLinearVelocity = Vector3.zero
hrp.AssemblyAngularVelocity = Vector3.zero
if char:FindFirstChild("Humanoid") then
char.Humanoid.PlatformStand = false
char.Humanoid.Sit = false
end
task.wait(0.2)
teleportDetected = false
lastSafePosition = hrp.Position
positionHistory = {}
for i = 1, maxHistory do
table.insert(positionHistory, lastSafePosition)
end
task.spawn(function()
for i = 1, 5 do
pcall(function()
game:GetService("ReplicatedStorage").CharacterEvents.Struggle:FireServer(game.Players.LocalPlayer)
end)
task.wait(0.1)
end
end)
end
else
if not teleportDetected and movedDistance < 50 then
lastSafePosition = currentPos
end
end
lastCheckTime = currentTime
end
end)
else
antiok = false
positionHistory = {}
teleportDetected = false
isHeldSpamDetected = false
heldChangeTimes = {}
end
end
})
AntiTab:CreateSection("Anti annoy")
players = game:GetService("Players")
runService = game:GetService("RunService")
localPlayer = game.Players.LocalPlayer
workspace = game:GetService("Workspace")
myToysFolder = workspace:WaitForChild(localPlayer.Name .. "SpawnedInToys")
function getCharacter(player)
char = player.Character
if not char then
if player.CharacterAdded then
char = player.CharacterAdded:Wait() or nil
else
char = nil
end
end
return char
end
function getHumanoidRootPart(character)
return character:FindFirstChild("HumanoidRootPart") or nil
end
function getHumanoid(character)
return character:FindFirstChild("Humanoid") or nil
end
function getDistance(part1, part2)
return (part1.Position - part2.Position).Magnitude
end
function getAllToys(includePlots)
allToys = {}
playersList = players:GetPlayers()
for _, player in ipairs(playersList) do
toyFolder = workspace[player.Name .. "SpawnedInToys"]
for _, toy in pairs(toyFolder:GetChildren()) do
if toy:IsA("Model") then
table.insert(allToys, toy)
end
end
end
if includePlots then
for i = 1, 5 do
for _, item in pairs(workspace.PlotItems["Plot" .. i]:GetChildren()) do
if item:IsA("Model") then
table.insert(allToys, item)
end
end
end
end
return allToys
end
function spawnToy(toyName, cframe)
if localPlayer.CanSpawnToy then
task.spawn(function()
toySpawn = replicatedStorage:WaitForChild("MenuToys"):WaitForChild("SpawnToyRemoteFunction")
toySpawn:InvokeServer(toyName, cframe * CFrame.new(0, 10, 20), Vector3.new(0, 0, 0))
repeat
task.wait()
until myToysFolder:FindFirstChild(toyName)
task.wait(0.01)
return myToysFolder:FindFirstChild(toyName)
end)
end
end
function destroyToy(toy)
task.spawn(function()
success, err = pcall(function()
toyDestroy = replicatedStorage:WaitForChild("MenuToys"):WaitForChild("DestroyToy")
toyDestroy:FireServer(toy)
end)
if not success then
warn("Error: " .. err)
end
end)
end
function setNetworkOwner(part, cframe)
task.spawn(function()
setNetworkOwnerRemote = replicatedStorage:WaitForChild("GrabEvents"):WaitForChild("SetNetworkOwner")
setNetworkOwnerRemote:FireServer(part, cframe)
end)
end
function toggleConstraint(constraint, enabled)
if constraint then
if constraint.Name ~= "LeftWeld" then
if constraint.Name ~= "LeftAlignOrientation" then
if constraint.Name ~= "RightWeld" then
if constraint.Name == "RightAlignOrientation" and (constraint and constraint.Parent.Parent.Parent ~= myToysFolder) then
constraint.Enabled = enabled
end
elseif constraint and constraint.Parent.Parent.Parent ~= myToysFolder then
constraint.Enabled = enabled
end
elseif constraint and constraint.Parent.Parent.Parent ~= myToysFolder then
constraint.Enabled = enabled
end
elseif constraint and constraint.Parent.Parent.Parent ~= myToysFolder then
constraint.Enabled = enabled
end
end
end
function ragdollFall()
rootPart = getHumanoidRootPart(getCharacter(localPlayer))
if rootPart then
ragdollRemote = replicatedStorage:WaitForChild("CharacterEvents"):WaitForChild("RagdollRemote")
ragdollRemote:FireServer(rootPart, 1)
end
end
function antiBananaDeleteLegs()
if getCharacter(localPlayer) ~= nil then
task.spawn(function()
ragdollFall()
end)
task.wait(0.1)
character = getCharacter(localPlayer)
rightLeg = character:FindFirstChild("Right Leg")
leftLeg = character:FindFirstChild("Left Leg")
clonedLeg = rightLeg:Clone()
clonedLeg.Parent = character
clonedLeg.BallSocketConstraint:Destroy()
task.wait(0.1)
rightLeg.CFrame = CFrame.new(0, - 59999, 0)
leftLeg.CFrame = CFrame.new(0, - 59999, 0)
task.wait()
cup = spawnToy("CupMugBrown", getHumanoidRootPart(getCharacter(localPlayer)).CFrame)
cup = myToysFolder:WaitForChild("CupMugBrown")
setNetworkOwner(getHumanoidRootPart(character), CFrame.new(cup.Hitbox.Position))
task.wait()
destroyToy(cup)
clonedLeg.CFrame = CFrame.new(0, 9999999, 0)
clonedLeg.Massless = true
end
end
AntiTab:CreateButton({
Name = "Anti banana - delete legs",
Callback = function()
antiBananaDeleteLegs()
end
})
me = game:GetService("Players").LocalPlayer
ReplicatedStorage = game:GetService("ReplicatedStorage")
RagdollRemote = ReplicatedStorage:WaitForChild("CharacterEvents"):WaitForChild("RagdollRemote")
AntiRagBlob = false
RagdolledSit = false
Cons = {}
function FWC(parent, childName)
return parent:FindFirstChild(childName)
end
function Disc(connectionName)
if Cons[connectionName] then
Cons[connectionName]:Disconnect()
Cons[connectionName] = nil
end
end
Toggle = AntiTab:CreateToggle({
Name = "Anti snowball",
CurrentValue = false,
Flag = "AntiRagdoll",
Callback = function(Value)
AntiRagBlob = Value
RagdolledSit = false
if AntiRagBlob then
char = me.Character or me.CharacterAdded:Wait()
hum = char and FWC(char, "Humanoid")
HRP = char and FWC(char, "HumanoidRootPart")
Cons["ARSeat"] = hum:GetPropertyChangedSignal("SeatPart"):Connect(function()
if hum.SeatPart and hum.SeatPart.Parent.Name == "CreatureBlobman" and not RagdolledSit then
RagdolledSit = true
Seat = hum.SeatPart
while not hum.Sit do
task.wait()
end
RagdollRemote:FireServer(HRP, 3)
while not hum.Ragdolled.Value and not hum.Sit do
task.wait()
end
task.wait(0.4)
hum.Sit = false
Seat:Sit(hum)
task.delay(0.25, function()
while hum and hum.SeatPart do
RagdollRemote:FireServer(me.Character.HumanoidRootPart, 1)
task.wait(0.05)
end
RagdolledSit = false
end)
end
end)
Cons["ARChar"] = me.CharacterAdded:Connect(function(char)
hum = char:WaitForChild("Humanoid")
HRP = char:WaitForChild("HumanoidRootPart")
Cons["ARSeat"] = hum:GetPropertyChangedSignal("SeatPart"):Connect(function()
if hum.SeatPart and hum.SeatPart.Parent.Name == "CreatureBlobman" and not RagdolledSit then
RagdolledSit = true
Seat = hum.SeatPart
while not hum.Sit do
task.wait()
end
RagdollRemote:FireServer(HRP, 3)
while not hum.Ragdolled.Value and not hum.Sit do
task.wait()
end
task.wait(0.4)
hum.Sit = false
Seat:Sit(hum)
task.delay(0.25, function()
while hum and hum.SeatPart do
RagdollRemote:FireServer(me.Character.HumanoidRootPart, 1)
task.wait(0.05)
end
RagdolledSit = false
end)
end
end)
end)
else
Disc("ARSeat")
Disc("ARChar")
end
end,
})
GrabData = {
toggle = false,
lp = game.Players.LocalPlayer,
ws = workspace,
dropPos = CFrame.new(- 238.98, - 256.01, - 123.97)
}
function GrabItem(item)
local hold = item:FindFirstChild("HoldPart")
if not hold then
return
end
local grab = hold:FindFirstChild("HoldItemRemoteFunction")
local drop = hold:FindFirstChild("DropItemRemoteFunction")
if grab and drop then
pcall(function()
grab:InvokeServer(item, GrabData.lp.Character)
end)
pcall(function()
drop:InvokeServer(item, GrabData.dropPos, Vector3.new())
end)
end
end
function GrabFolder(folder)
for _, obj in ipairs(folder:GetDescendants()) do
if obj:IsA("Model") and obj:FindFirstChild("HoldPart") then
local holdPart = obj.HoldPart
if holdPart:FindFirstChild("HoldItemRemoteFunction") then
GrabItem(obj)
end
end
end
end
function LoopGrab()
while GrabData.toggle do
for _, folder in ipairs(GrabData.ws:GetChildren()) do
if folder:IsA("Folder") and folder.Name:find("SpawnedInToys") then
GrabFolder(folder)
end
end
local plotItems = GrabData.ws:FindFirstChild("PlotItems")
if plotItems then
for _, plot in pairs(plotItems:GetChildren()) do
if plot.Name ~= "PlayersInPlots" then
for _, model in pairs(plot:GetChildren()) do
if model:IsA("Model") and model:FindFirstChild("HoldPart") then
local holdPart = model.HoldPart
if holdPart:FindFirstChild("HoldItemRemoteFunction") then
GrabItem(model)
end
end
end
end
end
end
task.wait(0.001)
end
end
AntiTab:CreateToggle({
Name = "Delete holdables",
Default = false,
Callback = function(state)
GrabData.toggle = state
if state then
task.spawn(LoopGrab)
end
end
})
holdItemLoop = nil
AntiTab:CreateSection("Holdparts (food and instruments)")
AntiTab:CreateToggle({
Name = "Grab holdables",
CurrentValue = false,
Flag = "HoldItemToggle",
Callback = function(enabled)
if enabled then
if not holdItemLoop then
holdItemLoop = coroutine.create(function()
while true do
for _, item in pairs(workspace:GetDescendants()) do
if item:IsA("Model") and item:FindFirstChild("HoldPart") then
local holdArgs = { item, workspace:WaitForChild(game.Players.LocalPlayer.Name, 9e9) }
local holdFunction = item.HoldPart:FindFirstChild("HoldItemRemoteFunction")
if holdFunction then
holdFunction:InvokeServer(unpack(holdArgs))
end
end
end
task.wait(0.01)
end
end)
coroutine.resume(holdItemLoop)
end
else
if holdItemLoop then
coroutine.close(holdItemLoop)
holdItemLoop = nil
end
end
end,
})
AntiTab:CreateButton({
Name = "Use holdables",
Callback = function()
for _, item in pairs(workspace:GetDescendants()) do
if item:IsA("Model") and item:FindFirstChild("HoldPart") then
local useArgs = { item }
local useFunction = game:GetService("ReplicatedStorage"):WaitForChild("HoldEvents", 9e9):WaitForChild("Use", 9e9)
if useFunction then
useFunction:FireServer(unpack(useArgs))
end
end
end
end,
})
AntiTab:CreateButton({
Name = "Drop Holdables",
Callback = function()
local Char = game.Players.LocalPlayer.Character or game.Players.LocalPlayer.CharacterAdded:Wait()
local HRP = Char:WaitForChild("HumanoidRootPart")
for _, item in pairs(workspace:GetDescendants()) do
if item:IsA("Model") and item:FindFirstChild("HoldPart") then
local dropFunction = item.HoldPart:FindFirstChild("DropItemRemoteFunction")
if dropFunction then
local dropPosition = HRP.CFrame
local dropArgs = {
item,
dropPosition,
Vector3.new(0, 0, 0)
}
dropFunction:InvokeServer(unpack(dropArgs))
end
end
end
end,
})
AntiTab:CreateSection("Auto Attacker")
Players = game:GetService("Players")
ReplicatedStorage = game:GetService("ReplicatedStorage")
RunService = game:GetService("RunService")
Debris = game:GetService("Debris")
LocalPlayer = Players.LocalPlayer
defenseEnabled = false
defenseConnection = nil
defenseMode = "Fling"
GrabEvents = ReplicatedStorage:WaitForChild("GrabEvents")
SetNetworkOwner = GrabEvents:WaitForChild("SetNetworkOwner")
DestroyGrabLine = GrabEvents:FindFirstChild("DestroyGrabLine")
CreateGrabEvent = GrabEvents:FindFirstChild("CreateGrabLine")
function getAttacker()
local char = LocalPlayer.Character
if not char or not char:FindFirstChild("Head") then
return
end
local owner = char.Head:FindFirstChild("PartOwner")
if not owner or not owner:IsA("StringValue") then
return
end
return Players:FindFirstChild(owner.Value)
end
function performFling(attacker)
if not attacker or not attacker.Character then
return
end
local root = attacker.Character:FindFirstChild("HumanoidRootPart")
if not root then
return
end
pcall(function()
SetNetworkOwner:FireServer(root, root.CFrame)
if DestroyGrabLine then
DestroyGrabLine:FireServer(root)
end
local away = (root.Position - LocalPlayer.Character.HumanoidRootPart.Position).Unit
away = Vector3.new(away.X, 0, away.Z) * 90000
local bv = Instance.new("BodyVelocity")
bv.Name = "RinneganFling"
bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bv.Velocity = away
bv.P = 12500
bv.Parent = root
Debris:AddItem(bv, 0.01)
end)
end
function performKill(attacker)
if not attacker or not attacker.Character then
return
end
local root = attacker.Character:FindFirstChild("HumanoidRootPart")
if not root then
return
end
pcall(function()
SetNetworkOwner:FireServer(root, root.CFrame)
if DestroyGrabLine then
DestroyGrabLine:FireServer(root)
end
local away = (root.Position - LocalPlayer.Character.HumanoidRootPart.Position).Unit
away = Vector3.new(away.X, 0, away.Z) * 99999999999999
local bv = Instance.new("BodyVelocity")
bv.Name = "RinneganFling"
bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bv.Velocity = away
bv.P = 12500
bv.Parent = root
Debris:AddItem(bv, 0.01)
end)
end
function performHeaven(attacker)
if not attacker or not attacker.Character then
return
end
local root = attacker.Character:FindFirstChild("HumanoidRootPart")
if not root then
return
end
pcall(function()
SetNetworkOwner:FireServer(root, root.CFrame)
if DestroyGrabLine then
DestroyGrabLine:FireServer(root)
end
root.CFrame = CFrame.new(0, 200, 0)
local bv = Instance.new("BodyVelocity")
bv.Name = "RinneganHeaven"
bv.MaxForce = Vector3.new(0, math.huge, 0)
bv.Velocity = Vector3.new(0, 200, 0)
bv.P = 12500
bv.Parent = root
Debris:AddItem(bv, 0.01)
end)
end
function performKick(attacker)
if not attacker or not attacker.Character then
return
end
local root = attacker.Character:FindFirstChild("HumanoidRootPart")
if not root then
return
end
pcall(function()
SetNetworkOwner:FireServer(root, root.CFrame)
if DestroyGrabLine then
DestroyGrabLine:FireServer(root)
end
root.CFrame = CFrame.new(0, 999999999999, 0)
local bv = Instance.new("BodyVelocity")
bv.Name = "RinneganHeaven"
bv.MaxForce = Vector3.new(0, math.huge, 0)
bv.Velocity = Vector3.new(0, 99999999999999, 0)
bv.P = 12500
bv.Parent = root
Debris:AddItem(bv, 0.01)
end)
end
function performRagdoll(attacker)
if not attacker or not attacker.Character then
return
end
local root = attacker.Character:FindFirstChild("HumanoidRootPart")
if not root then
return
end
pcall(function()
SetNetworkOwner:FireServer(root, root.CFrame)
if DestroyGrabLine then
DestroyGrabLine:FireServer(root)
end
local bv = Instance.new("BodyVelocity")
bv.Name = "RinneganSpy"
bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bv.Velocity = Vector3.new(0, - 20, 0)
bv.P = 12500
bv.Parent = root
Debris:AddItem(bv, 0.01)
end)
end
function performHell(attacker)
if not attacker or not attacker.Character then
return
end
local root = attacker.Character:FindFirstChild("HumanoidRootPart")
if not root then
return
end
pcall(function()
SetNetworkOwner:FireServer(root, root.CFrame)
if DestroyGrabLine then
DestroyGrabLine:FireServer(root)
end
for _, part in ipairs(attacker.Character:GetDescendants()) do
if part:IsA("BasePart") and not part.Anchored then
part.CanCollide = false
end
end
local bv = Instance.new("BodyVelocity")
bv.Name = "RinneganSpy"
bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bv.Velocity = Vector3.new(0, - 100000000, 0)
bv.P = 12500
bv.Parent = root
local noclipConnection
noclipConnection = RunService.Heartbeat:Connect(function()
if not attacker.Character or not attacker.Character.Parent then
noclipConnection:Disconnect()
return
end
for _, part in ipairs(attacker.Character:GetDescendants()) do
if part:IsA("BasePart") and not part.Anchored then
part.CanCollide = false
end
end
end)
task.delay(0.01, function()
if noclipConnection then
noclipConnection:Disconnect()
end
end)
Debris:AddItem(bv, 0.01)
end)
end
function performChina(attacker)
if not attacker or not attacker.Character then
return
end
local root = attacker.Character:FindFirstChild("HumanoidRootPart")
if not root then
return
end
pcall(function()
SetNetworkOwner:FireServer(root, root.CFrame)
if DestroyGrabLine then
DestroyGrabLine:FireServer(root)
end
root.CFrame = CFrame.new(591, 153, - 101)
end)
end
crazyline = false
function performSpamGrabLines(attacker)
while crazyline do
local char = LocalPlayer.Character
if char then
local head = char:FindFirstChild("Head")
if head then
local owner = head:FindFirstChild("PartOwner")
if owner and owner:IsA("StringValue") then
local attacker = Players:FindFirstChild(owner.Value)
if attacker and attacker.Character then
local attackerHead = attacker.Character:FindFirstChild("Head")
local attackerHRP = attacker.Character:FindFirstChild("HumanoidRootPart")
if attackerHead and attackerHRP then
for i = 1, 10 do
pcall(function()
CreateGrabEvent:FireServer(attackerHead, attackerHead.CFrame)
end)
end
for i = 1, 10 do
pcall(function()
CreateGrabEvent:FireServer(attackerHRP, attackerHRP.CFrame)
end)
end
end
end
end
end
end
task.wait(0.01)
end
end
function startDefense()
if defenseConnection then
return
end
defenseConnection = RunService.Heartbeat:Connect(function()
if not defenseEnabled then
return
end
local attacker = getAttacker()
if not attacker then
return
end
if defenseMode == "Fling" then
performFling(attacker)
elseif defenseMode == "Kill" then
performKill(attacker)
elseif defenseMode == "Send to Heaven" then
performHeaven(attacker)
elseif defenseMode == "Kick" then
performKick(attacker)
elseif defenseMode == "Ragdoll" then
performRagdoll(attacker)
elseif defenseMode == "Hell" then
performHell(attacker)
elseif defenseMode == "China" then
performChina(attacker)
elseif defenseMode == "GrabLine" then
performSpamGrabLines(attacker)
end
end)
end
function stopDefense()
if defenseConnection then
defenseConnection:Disconnect()
defenseConnection = nil
end
for _, plr in ipairs(Players:GetPlayers()) do
local char = plr.Character
if char then
for _, obj in ipairs(char:GetDescendants()) do
if obj:IsA("BodyVelocity") and (obj.Name == "RinneganFling" or obj.Name == "RinneganHeaven") then
obj:Destroy()
end
end
end
end
end
LocalPlayer.CharacterAdded:Connect(function()
if defenseEnabled then
task.wait(1)
startDefense()
end
end)
AntiTab:CreateToggle({
Name = 'Auto-Attack',
CurrentValue = false,
Flag = "RinneganDefenseToggle",
Callback = function(enabled)
defenseEnabled = enabled
if enabled then
startDefense()
else
stopDefense()
end
end
})
AntiTab:CreateDropdown({
Name = "Mode",
Options = {
"Fling",
"Kill",
"Send to Heaven",
"Kick",
"Ragdoll",
"Hell",
"China",
"GrabLine"
},
CurrentOption = "Fling",
Flag = "RinneganMode",
Callback = function(mode)
if typeof(mode) == "table" then
mode = mode[1]
end
defenseMode = mode
end
})
local KeybindTab = Window:CreateTab("Keybinds", "keyboard")
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local Mouse = LocalPlayer:GetMouse()
-- Keybind 1: Teleport (ID: Keybind1)
local TeleportKeybind = KeybindTab:CreateKeybind({
Name = "Teleport",
CurrentKeybind = "Z",
HoldToInteract = false,
Flag = "Keybind1",
Callback = function(Keybind)
local Character = LocalPlayer.Character
if Character and Character:FindFirstChild("HumanoidRootPart") and Mouse.Hit then
-- วาร์ปไปตำแหน่งที่เมาส์ชี้ + ยกตัวขึ้นเล็กน้อย (3 studs) เพื่อไม่ให้จมดิน
Character.HumanoidRootPart.CFrame = CFrame.new(Mouse.Hit.Position + Vector3.new(0, 3, 0))
end
end
})
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local LocalPlayer = Players.LocalPlayer
local Camera = Workspace.CurrentCamera
local controllingDecoy = false
local ControlYouDecoyKeybind = KeybindTab:CreateKeybind({
Name = "Control Decoy",
CurrentKeybind = "C",
HoldToInteract = false,
Flag = "ControlYouDecoyFlag", -- เปลี่ยน Flag ไม่ให้ซ้ำกับ Keybind1 เพื่อป้องกัน Config ชนกัน
Callback = function(Keybind)
local Character = LocalPlayer.Character
if not Character then return end
local MainHumanoid = Character:FindFirstChildOfClass("Humanoid")
-- ค้นหาตัวละคร Decoy ใน Workspace โดยใช้ ID/ชื่อ "YouDecoy"
local Decoy = Workspace:FindFirstChild("YouDecoy")
local DecoyHumanoid = Decoy and Decoy:FindFirstChildOfClass("Humanoid")
if not controllingDecoy then
-- สลับไปสวมรอยสลับการควบคุม Decoy
if DecoyHumanoid then
Camera.CameraSubject = DecoyHumanoid
LocalPlayer.Character = Decoy
controllingDecoy = true
end
else
-- สลับกลับมาควบคุมตัวละครหลัก
if MainHumanoid then
Camera.CameraSubject = MainHumanoid
LocalPlayer.Character = Character
controllingDecoy = false
end
end
end,
})
local CombatTab = Window:CreateTab("Grab", "sword")
local Section = CombatTab:CreateSection("Grab")
_G.strength = 750
local strengthConnection
CombatTab:CreateSlider({
Name = "Power",
Range = {1, 20000},
Increment = 1,
Suffix = "Force",
CurrentValue = 750,
Flag = "ThrowPowerSlider",
Callback = function(value)
_G.strength = value
end
})
CombatTab:CreateToggle({
Name = "Strength",
CurrentValue = false,
Flag = "ThrowStrengthToggle",
Callback = function(enabled)
if enabled then
strengthConnection = workspace.ChildAdded:Connect(function(model)
if model.Name == "GrabParts" then
local grabPart = model:FindFirstChild("GrabPart")
if not grabPart then return end
local weld = grabPart:FindFirstChild("WeldConstraint")
if not weld then return end
local partToImpulse = weld.Part1
if not partToImpulse then return end
local velocityObj = Instance.new("BodyVelocity")
velocityObj.Parent = partToImpulse
model:GetPropertyChangedSignal("Parent"):Connect(function()
if not model.Parent then
if UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2) then
velocityObj.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
velocityObj.Velocity =
workspace.CurrentCamera.CFrame.LookVector * _G.strength
Debris:AddItem(velocityObj, 1)
else
velocityObj:Destroy()
end
end
end)
end
end)
elseif strengthConnection then
strengthConnection:Disconnect()
strengthConnection = nil
end
end
})
----------------------------------------------------
-- KILL GRAB (StateType + RigType R15)
----------------------------------------------------
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local killGrabEnabled = false
workspace.ChildAdded:Connect(function(v)
if not killGrabEnabled then return end
if not v:IsA("Model") or v.Name ~= "GrabParts" then return end
task.wait(0.05)
local grabPart = v:FindFirstChild("GrabPart")
if not grabPart then return end
local weld = grabPart:FindFirstChild("WeldConstraint")
if not weld then return end
local part1 = weld.Part1
if not part1 then return end
if not part1.Parent then return end
if part1.Parent == LocalPlayer.Character then return end
local targetChar = part1.Parent
local humanoid = targetChar:FindFirstChildOfClass("Humanoid")
if not humanoid then return end
------------------------------------------------
-- FORCE R15 RIG
------------------------------------------------
local player = Players:GetPlayerFromCharacter(targetChar)
if player then
pcall(function()
-- this forces roblox to rebuild the character
player:LoadCharacterWithHumanoidDescription(
Players:GetHumanoidDescriptionFromUserId(player.UserId),
Enum.HumanoidRigType.R15
)
end)
end
end)
CombatTab:CreateToggle({
Name = "Kill Grab",
CurrentValue = false,
Flag = "KillGrabToggle",
Callback = function(Value)
killGrabEnabled = Value
end
})
CombatTab:CreateToggle({
Name = "Ragdoll Grab",
CurrentValue = false,
Flag = "RagdollGrabToggle",
Callback = function(state)
RG_enabled = state
if not state then
for _, conn in ipairs(RG_GrabConn) do conn:Disconnect() end
for _, conn in ipairs(RG_RagdollConn) do conn:Disconnect() end
for _, conn in ipairs(RG_HeartbeatConn) do conn:Disconnect() end
RG_GrabConn = {}
RG_RagdollConn = {}
RG_HeartbeatConn = {}
RG_FollowList = {}
RG_currentPallet = nil
return
end
local function RG_getSpawnCFrame()
local char = LPlayer.Character
if char then
local hrp = char:FindFirstChild("HumanoidRootPart")
if hrp then
RG_lastHRP = hrp.CFrame
return hrp.CFrame
end
end
return RG_lastHRP
end
local function RG_teleAway(pallet)
if not pallet then return end
for _, part in ipairs(pallet:GetDescendants()) do
if part:IsA("BasePart") then
part.CFrame = CFrame.new(0, 9e18, 0)
part.Anchored = false
part.CanCollide = false
part.Transparency = 1
end
end
end
local function RG_spawnPallet()
local pos = RG_getSpawnCFrame()
ReplicatedStorage.MenuToys.SpawnToyRemoteFunction:InvokeServer(
"PalletLightBrown",
pos * CFrame.new(5, 0, 5),
Vector3.new(0, 33, 0)
)
end
-- 🔧 FIXED: ownership spam protection
local function RG_handlePallet(pallet)
if pallet:GetAttribute(RG_ATTR) then return end
if RG_currentPallet and RG_currentPallet.Parent then return end
local soundPart = pallet:WaitForChild("SoundPart")
local ownershipConfirmed = false
ReplicatedStorage.GrabEvents.SetNetworkOwner:FireServer(soundPart, soundPart.CFrame)
local triesDelay = 0.25
local maxTime = 3
local lastTry = 0
local startTime = tick()
local conn
conn = RunService.Heartbeat:Connect(function()
if ownershipConfirmed then
conn:Disconnect()
return
end
local ownerTag = soundPart:FindFirstChild("PartOwner")
if ownerTag and ownerTag.Value == LPlayer.Name then
ownershipConfirmed = true
pallet:SetAttribute(RG_ATTR, true)
RG_currentPallet = pallet
for _, part in ipairs(pallet:GetDescendants()) do
if part:IsA("BasePart") then
if not part:FindFirstChild("RG_BV") then
local bv = Instance.new("BodyVelocity")
bv.Name = "RG_BV"
bv.Velocity = Vector3.new(0, 200, 0)
bv.MaxForce = Vector3.new(1e5, 1e5, 1e5)
bv.P = 1e4
bv.Parent = part
end
part.CanCollide = false
part.Transparency = 1
end
end
conn:Disconnect()
return
end
if tick() - lastTry < triesDelay then return end
lastTry = tick()
if tick() - startTime >= maxTime then
ReplicatedStorage.MenuToys.DestroyToy:FireServer(pallet)
conn:Disconnect()
return
end
ReplicatedStorage.GrabEvents.SetNetworkOwner:FireServer(soundPart, soundPart.CFrame)
end)
end
local function RG_followLoop(player)
if RG_FollowList[player] then return end
RG_FollowList[player] = true
local humanoid = player.Character and player.Character:FindFirstChildWhichIsA("Humanoid")
local rag = humanoid and humanoid:FindFirstChild("Ragdolled")
task.spawn(function()
while RG_enabled and RG_FollowList[player] and RG_currentPallet do
if not rag or not rag.Value then
local hrp = player.Character and player.Character:FindFirstChild("HumanoidRootPart")
if hrp then
for _, part in ipairs(RG_currentPallet:GetDescendants()) do
if part:IsA("BasePart") then
part.CFrame = hrp.CFrame
part.CanCollide = false
part.Transparency = 1
end
end
end
else
break
end
task.wait(0.1)
end
RG_FollowList[player] = nil
RG_teleAway(RG_currentPallet)
end)
if rag and rag:IsA("BoolValue") then
local conn
conn = rag.Changed:Connect(function(val)
if val then
RG_FollowList[player] = nil
RG_teleAway(RG_currentPallet)
conn:Disconnect()
end
end)
table.insert(RG_RagdollConn, conn)
end
end
local function RG_monitorGrabParts(container)
task.spawn(function()
while container.Parent and RG_enabled do
local grabPart = container:FindFirstChild("GrabPart")
local weld = grabPart and grabPart:FindFirstChildOfClass("WeldConstraint")
if weld and weld.Part1 then
for _, plr in ipairs(Players:GetPlayers()) do
if plr.Character and weld.Part1:IsDescendantOf(plr.Character) then
RG_followLoop(plr)
end
end
else
for plr in pairs(RG_FollowList) do
RG_FollowList[plr] = nil
end
end
task.wait(0.1)
end
end)
end
table.insert(RG_GrabConn, RG_ToysFolder.ChildAdded:Connect(function(c)
if c.Name == "PalletLightBrown" then
RG_handlePallet(c)
end
end))
table.insert(RG_GrabConn, RG_ToysFolder.ChildRemoved:Connect(function(c)
if c == RG_currentPallet then
RG_currentPallet = nil
end
end))
table.insert(RG_GrabConn, Workspace.ChildAdded:Connect(function(c)
if c.Name == "GrabParts" then
RG_monitorGrabParts(c)
end
end))
table.insert(RG_HeartbeatConn, RunService.Heartbeat:Connect(function()
if not RG_enabled then return end
if not RG_currentPallet or not RG_currentPallet.Parent then
local owned
for _, toy in ipairs(RG_ToysFolder:GetChildren()) do
if toy:GetAttribute(RG_ATTR) then
owned = toy
break
end
end
if owned then
RG_currentPallet = owned
else
RG_spawnPallet()
end
end
end))
for _, obj in ipairs(Workspace:GetChildren()) do
if obj.Name == "GrabParts" then
RG_monitorGrabParts(obj)
end
end
RG_spawnPallet()
end
})
local activeSparklers = {}
local sparklerConfig = {
Height = 5,
Speed = 2,
Radius = 15,
CurrentShape = 'Spinning Ring',
}
local shapeOptions = {
'Spinning Ring', 'Supernova', 'Ophanim', 'Planet', 'Sphere', 'Cylinder', 'Double Ring', 'Star', 'Infinity', 'Heart',
'DNA Helix', 'Triple Helix', 'Tornado', 'Galaxy Spiral', 'Fibonacci Spiral',
'Spring Coil', 'Vortex Funnel', 'Box', 'Rounded Cube', 'Torus', 'Torus Knot',
'Möbius Strip', 'Saturn', 'Ice Cube', 'Rain', 'Sword', 'Sword v2', 'Sword v3', 'Energy', 'Tsunami', 'Grid', 'Robot',
'Explosion', 'Flower', 'Penis', 'DivineLight', 'Crown', 'Hexagram', 'CubeOrbit', 'RingFloor', 'Event Horzion', "Pulsar Star",
'Explosionv2', 'Dragon', 'Crazy Orbit', 'Crazy Orbit v2', 'Laser Beam', 'Hexagram Crazy', 'Gyro', 'Gyro2', 'Whipslash',
'Sky', 'Manji', 'Small Circle', 'Atom', 'Meteor Shower', 'Meteor Shower (Star)', 'Diamond', 'SolarSystem', 'Windmill', 'Cat', 'Tentacle',
'Portal', 'Water Wave', 'Moon Orbit'
}
local function SetupPhysics(obj, list)
for _, v in ipairs(list) do
if v == obj then return end
end
local mainPart = obj:IsA('BasePart') and obj or obj.PrimaryPart or obj:FindFirstChildWhichIsA('BasePart', true)
if not mainPart then return end
pcall(function()
if mainPart:CanSetNetworkOwnership() then
mainPart:SetNetworkOwner(LocalPlayer)
end
end)
mainPart.Anchored = false
local bp = mainPart:FindFirstChild('ToyBodyPos') or Instance.new('BodyPosition', mainPart)
bp.Name = 'ToyBodyPos'
bp.MaxForce = Vector3.new(1e8, 1e8, 1e8)
bp.P = 100000
bp.D = 800
local bg = mainPart:FindFirstChild('ToyBodyGyro') or Instance.new('BodyGyro', mainPart)
bg.Name = 'ToyBodyGyro'
bg.MaxTorque = Vector3.new(1e8, 1e8, 1e8)
bg.P = 50000
for _, p in ipairs(obj:GetDescendants()) do
if p:IsA('BasePart') then
p.CanCollide = false
end
end
table.insert(list, obj)
end
CombatTab:CreateButton({
Name = "Synchronize All Sparklers",
Callback = function()
activeSparklers = {}
for _, obj in ipairs(Workspace:GetDescendants()) do
if obj.Name:find('FireworkSparkler') then
SetupPhysics(obj, activeSparklers)
end
end
print("ซิงค์ไอเทมสำเร็จ จำนวนทั้งหมด: " .. #activeSparklers)
end,
})
CombatTab:CreateButton({
Name = "Unsynchronize All Sparklers",
Callback = function()
activeSparklers = {}
print("ยกเลิกการซิงค์ทั้งหมดแล้ว")
end,
})
CombatTab:CreateSlider({
Name = "Height Offset",
Range = {-20, 150},
Increment = 1,
Suffix = "Studs",
CurrentValue = 5,
Flag = "Sparkler_Height",
Callback = function(Value)
sparklerConfig.Height = Value
end,
})
CombatTab:CreateSlider({
Name = "Shape Radius",
Range = {0, 400},
Increment = 1,
Suffix = "Radius",
CurrentValue = 15,
Flag = "Sparkler_Radius",
Callback = function(Value)
sparklerConfig.Radius = Value
end,
})
CombatTab:CreateSlider({
Name = "Rotation Speed",
Range = {0, 50},
Increment = 0.5,
Suffix = "Speed",
CurrentValue = 15,
Flag = "Sparkler_Speed",
Callback = function(Value)
sparklerConfig.Speed = Value
end,
})
CombatTab:CreateDropdown({
Name = "Select Shape",
Options = shapeOptions,
CurrentOption = "Spinning Ring",
Flag = "Sparkler_Shape",
Callback = function(Option)
if type(Option) == "table" then
sparklerConfig.CurrentShape = Option[1] or "Spinning Ring"
else
sparklerConfig.CurrentShape = tostring(Option)
end
print("เปลี่ยนรูปทรงเป็น: " .. tostring(sparklerConfig.CurrentShape))
end,
})
-- ==================== SPARKLER TARGET PLAYER DROPDOWN ====================
local sparklerTargetPlayer = "None"
local sparklerPlayerNames = {"None"}
local function UpdateSparklerPlayerList()
sparklerPlayerNames = {"None"}
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer then
table.insert(sparklerPlayerNames, player.Name)
end
end
end
local TAU = math.pi * 2
local sqrt = math.sqrt
local sin = math.sin
local cos = math.cos
local clamp = math.clamp
local Shapes = {}
-- Moon Orbit (Sphere หลัก 1 อัน + Sphere เล็กๆ โคจร)
Shapes['Moon Orbit'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- Sphere หลัก 1 อัน (อันแรก)
if i == 1 then
-- ดวงจันทร์หลัก (ตรงกลาง)
local phi = math.acos(1 - 2 * (i / safeN))
local theta = i * math.pi * (3 - math.sqrt(5)) + t * sp * 0.5
local radius = r * 0.3
local x = math.cos(theta) * math.sin(phi) * radius
local y = math.cos(phi) * radius + h
local z = math.sin(theta) * math.sin(phi) * radius
return Vector3.new(x, y, z)
else
-- Sphere เล็กๆ โคจรรอบ
local idx = i - 1
local count = safeN - 1
-- โคจรเป็นวงกลม
local angle = (idx / count) * TAU + t * sp * 2
local orbitRadius = r * 0.7
local x = math.cos(angle) * orbitRadius
local z = math.sin(angle) * orbitRadius
local y = h + math.sin(t * sp * 0.5 + idx) * orbitRadius * 0.1
return Vector3.new(x, y, z)
end
end
-- Water Wave (คลื่นน้ำ)
Shapes['Water Wave'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- คลื่นน้ำ (หมุนเป็นวงกลม + กระเพื่อม)
local angle = ((i - 1) / safeN) * TAU + t * sp * 1.5
-- คลื่นกระเพื่อม (เหมือนน้ำ)
local wave = math.sin(angle * 2 + t * sp * 2) * r * 0.3
local wave2 = math.cos(angle * 3 + t * sp * 1.5) * r * 0.2
-- รัศมีของคลื่น
local radius = r * (0.7 + 0.3 * math.sin(t * sp * 1.5 + i * 0.1))
-- ตำแหน่ง X, Z
local x = math.cos(angle) * radius + wave
local z = math.sin(angle) * radius + wave2
-- ความสูง (คลื่นจะสูงขึ้นและต่ำลง)
local y = h + math.sin(angle * 3 + t * sp * 2) * r * 0.2
return Vector3.new(x, y, z)
end
Shapes.Diamond = function(i, n, t, r, h, sp)
local frac = i / n
local y = (frac - 0.5) * r * 2
local radius = r * math.abs(math.sin(frac * TAU))
return Vector3.new(math.cos(t * sp + i) * radius, h + y, math.sin(t * sp + i) * radius)
end
Shapes.SolarSystem = function(i, n, t, r, h, sp)
local planet = i % 8
local dist = r * (0.2 + planet * 0.1)
local angle = (i / n) * TAU + t * sp * (1 + planet * 0.2)
return Vector3.new(math.cos(angle) * dist, h + math.sin(i * 0.5) * 2, math.sin(angle) * dist)
end
Shapes.Windmill = function(i, n, t, r, h, sp)
local blade = i % 4
local bladeAngle = blade * (TAU / 4) + t * sp
local radius = r * (0.5 + 0.5 * (i / n))
return Vector3.new(math.cos(bladeAngle) * radius, h + math.sin(t * sp + i) * 2, math.sin(bladeAngle) * radius)
end
Shapes.Tentacle = function(i, n, t, r, h, sp)
local frac = i / n
local angle = frac * TAU * 2 + t * sp * 0.5
local radius = r * frac
return Vector3.new(math.cos(angle) * radius, h + math.sin(frac * TAU * 4 + t * sp) * r * 0.5, math.sin(angle) * radius)
end
Shapes.Portal = function(i, n, t, r, h, sp)
local frac = i / n
local angle = frac * TAU + t * sp
local radius = r * (1 + 0.3 * math.sin(t * sp * 2 + i * 0.5))
local distort = math.sin(t * sp * 3 + frac * TAU) * r * 0.1
return Vector3.new(math.cos(angle) * radius + distort, h + math.sin(t * sp + i) * 3, math.sin(angle) * radius + distort)
end
-- Meteor Shower (ตกลงมาเป็นรูปดาว)
Shapes['Galaxy Methor'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- รูปดาว (Star Shape)
local angle = ((i - 1) / safeN) * TAU + t * sp * 2
local starRadius = (i % 2 == 0) and r or r * 0.38
-- ตำแหน่ง X, Z ของดาว
local x = math.cos(angle) * starRadius
local z = math.sin(angle) * starRadius
-- การตกลงมา (Meteor Shower)
local seed = i * 137.508
local fallSpeed = 30 + math.sin(seed * 0.5) * 10
local fallTime = (t * sp * 3 + i * 5) % 200 -- ตกแล้ววนกลับ
-- ตำแหน่ง Y: ตกลงมาจากฟ้า
local y = h + 100 - fallTime * 0.8
-- เคลื่อนที่ไปด้านข้างเล็กน้อยขณะตกลง
x = x + math.sin(t * sp * 0.5 + i) * 10
z = z + math.cos(t * sp * 0.5 + i) * 10
-- ทำให้ดูเหมือนมีหาง (เส้นหลัง)
local trail = math.max(0, 1 - (fallTime / 200)) * 3
return Vector3.new(x, y + trail, z)
end
-- Small Circle (วงโคจรเล็กๆ + หันหาตัวตลอด)
Shapes['Small Circle'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- แต่ละ Sparkler มีวงกลมของตัวเอง
local seed = i * 137.508
-- ตำแหน่งกลางของวงกลม (กระจายตัวรอบตัว)
local centerX = math.sin(seed * 0.1 + t * sp * 0.1) * r * 0.8
local centerZ = math.cos(seed * 0.05 + t * sp * 0.1) * r * 0.8
local centerY = h + math.sin(seed * 0.03 + t * sp * 0.05) * r * 0.3
-- วงโคจรเล็กๆ (รอบ Sparkler แต่ละชิ้น)
local orbitRadius = r * 0.1 + math.sin(seed * 0.5) * r * 0.05
local orbitAngle = t * sp * (3 + math.cos(seed * 0.1)) + seed
-- ตำแหน่งในวงโคจร
local x = centerX + math.cos(orbitAngle) * orbitRadius
local z = centerZ + math.sin(orbitAngle) * orbitRadius
local y = centerY + math.sin(t * sp * 0.5 + seed) * orbitRadius * 0.5
return Vector3.new(x, y, z)
end
-- Manji (สวัสติกะ)
Shapes.Manji = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- สวัสติกะประกอบด้วย 4 แขน แต่ละแขนมี 2 ท่อน
local armCount = 4
local segmentCount = math.floor(safeN / (armCount * 2))
if segmentCount < 1 then segmentCount = 1 end
-- คำนวณว่า Sparkler นี้อยู่แขนไหน
local armIndex = math.floor((i - 1) / (segmentCount * 2)) % armCount
local segmentIndex = (i - 1) % (segmentCount * 2)
local isInner = segmentIndex < segmentCount -- ท่อนในหรือท่อนนอก
-- มุมของแต่ละแขน (0, 90, 180, 270 องศา)
local armAngle = (armIndex / armCount) * TAU + t * sp * 2
-- ความยาวของแขน
local armLength = r * 0.8
-- ตำแหน่งตามแขน
local progress = (segmentIndex % segmentCount) / segmentCount
local distance = isInner and (progress * armLength * 0.5) or (armLength * 0.5 + progress * armLength * 0.5)
-- มุมของท่อน (ท่อนในไปทางซ้าย, ท่อนนอกไปทางขวา)
local segmentAngle = isInner and (armAngle - TAU / 4) or (armAngle + TAU / 4)
-- คำนวณตำแหน่ง X, Z
local x = math.cos(armAngle) * (isInner and distance * 0.5 or distance) + math.cos(segmentAngle) * (isInner and distance * 0.5 or 0)
local z = math.sin(armAngle) * (isInner and distance * 0.5 or distance) + math.sin(segmentAngle) * (isInner and distance * 0.5 or 0)
-- ความสูง (หมุนเป็นวงกลมเล็กน้อย)
local y = h + math.sin(t * sp * 1.5 + i * 0.3) * r * 0.1
return Vector3.new(x, y, z)
end
-- Sky (วาร์ปไปวาร์ปมาเป็นเส้นตรง)
Shapes.Sky = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local seed = i * 137.508 + i * i * 0.01
-- กำหนดจุดเริ่มต้นและจุดปลาย (เส้นตรง)
local startX = math.sin(seed * 0.1) * r
local startZ = math.cos(seed * 0.05) * r
local startY = h + math.abs(math.sin(seed * 0.03)) * 30
local endX = math.cos(seed * 0.1) * r
local endZ = math.sin(seed * 0.05) * r
local endY = h + math.abs(math.cos(seed * 0.03)) * 30 + 20
-- การวาร์ป (กระโดดไปมาเป็นจังหวะ)
local warpPhase = math.sin(t * sp * 0.5 + i * 0.5)
local warp = math.floor(warpPhase * 2) % 2 -- 0 หรือ 1 สลับกัน
-- ถ้าวาร์ป = 0 ไปจุดเริ่มต้น, ถ้า = 1 ไปจุดปลาย
local targetX = (warp == 0) and startX or endX
local targetZ = (warp == 0) and startZ or endZ
local targetY = (warp == 0) and startY or endY
-- เพิ่มการเคลื่อนที่แบบเส้นตรงเล็กน้อยระหว่างวาร์ป
local moveX = math.sin(t * sp * 0.1 + i) * 5
local moveZ = math.cos(t * sp * 0.1 + i) * 5
local moveY = math.sin(t * sp * 0.1 + i * 0.5) * 3
local x = targetX + moveX
local z = targetZ + moveZ
local y = targetY + moveY
return Vector3.new(x, y, z)
end
-- Gyro (10 ชั้น หมุนสวนทางกัน)
Shapes.Gyro = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local layers = 10
local pointsPerLayer = math.max(math.floor(safeN / layers), 1)
local layerIndex = math.floor((i - 1) / pointsPerLayer)
if layerIndex >= layers then layerIndex = layers - 1 end
local posInLayer = (i - 1) % pointsPerLayer
-- แต่ละชั้นมีรัศมีต่างกัน
local radius = r * (0.2 + 0.8 * (layerIndex + 1) / layers)
local heightOffset = (layerIndex - (layers - 1) / 2) * (r * 0.15)
local yPos = h + heightOffset
-- สุ่มทิศทาง: ชั้นคู่หมุนไปทางขวา, ชั้นคี่หมุนไปทางซ้าย
local direction = (layerIndex % 2 == 0) and 1 or -1
local randomSpeed = 2 + math.sin(layerIndex * 1.5) * 1.5 -- สุ่มความเร็ว 0.5-3.5
local angle = (posInLayer / pointsPerLayer) * TAU + t * sp * randomSpeed * direction
local x = math.cos(angle) * radius
local z = math.sin(angle) * radius
return Vector3.new(x, yPos, z)
end
-- Hexagram Crazy (6 จุดรวมกัน + โคจรบ้าคลั่ง)
Shapes['Hexagram Crazy'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- ดาวหกแฉก 6 จุด (รวมกันเป็นก้อนเดียว)
local pointsPerTriangle = 3
local totalPoints = 6
-- จุดยอดของสามเหลี่ยม
local pointIndex = (i - 1) % totalPoints
local isFirstTriangle = pointIndex < pointsPerTriangle
-- ตำแหน่งพื้นฐานของดาวหกแฉก (6 จุดอยู่รวมกัน)
local spin = t * sp * 2
local baseX, baseY, baseZ
if isFirstTriangle then
local idx = pointIndex
local a = idx * (TAU / 3) + spin
baseX = math.cos(a) * r
baseZ = math.sin(a) * r
baseY = h
else
local idx = pointIndex - pointsPerTriangle
local a = idx * (TAU / 3) + math.pi / 3 + spin
baseX = math.cos(a) * r
baseZ = math.sin(a) * r
baseY = h
end
-- รวม 6 จุดให้เป็นก้อนเดียว (ย่อขนาดลง)
local scale = 0.3 -- ย่อขนาดให้เล็กลง
baseX = baseX * scale
baseY = baseY * scale
baseZ = baseZ * scale
-- เพิ่มการโคจรบ้าคลั่ง (ก้อนเดียวเคลื่อนที่ไปมา)
local seed = i * 137.508
local noise1 = math.sin(seed * 0.1 + t * sp * 3) * math.cos(seed * 0.05 + t * sp * 2)
local noise2 = math.cos(seed * 0.08 + t * sp * 4) * math.sin(seed * 0.12 + t * sp * 3)
local noise3 = math.sin(seed * 0.15 + t * sp * 5) * math.cos(seed * 0.1 + t * sp * 4)
-- ก้อนเดียวเคลื่อนที่บ้าคลั่งไปมา
local crazyX = noise1 * r * 1.2
local crazyY = noise2 * r * 1.2
local crazyZ = noise3 * r * 1.2
-- รวมตำแหน่ง: 6 จุดรวมกัน + เคลื่อนที่บ้าคลั่ง
local finalX = baseX + crazyX
local finalY = baseY + crazyY
local finalZ = baseZ + crazyZ
return Vector3.new(finalX, finalY, finalZ)
end
-- Whipslash (เส้นตรง ฟาดเร็ว)
Shapes.Whipslash = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local whipLength = r * 3
local yPos = h + ((i - 1) / safeN) * whipLength
-- ฟาดเร็วขึ้น
local whipPhase = math.sin(t * sp * 4)
local swingX = whipPhase * r * 0.9
local x = swingX
local z = 0
return Vector3.new(x, yPos, z)
end
-- Laser Beam (ลำแสงกระพริบ)
Shapes['Laser Beam'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local beamLength = r * 3
local yPos = h + ((i - 1) / safeN) * beamLength - beamLength/2
-- ลำแสงกระพริบเป็นจังหวะ
local flicker = 1 + 0.3 * math.sin(t * sp * 6 + i * 0.5)
local angle = ((i - 1) / safeN) * TAU + t * sp * 3
local radius = r * 0.1 * flicker
local x = math.cos(angle) * radius
local z = math.sin(angle) * radius
return Vector3.new(x, yPos, z)
end
-- Crazy Orbit v2 (โคจรบ้าคลั่งแต่อยู่กับที่ + ลดความเร็ว)
Shapes['Crazy Orbit v2'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- ลดความเร็วลง (sp ช้าลง)
local slowSpeed = sp * 0.3
-- สุ่มตำแหน่งโดยใช้ noise function แต่ช้าลง
local seed = i * 137.508
local noise1 = math.sin(seed * 0.1 + t * slowSpeed * 1.5) * math.cos(seed * 0.05 + t * slowSpeed * 1)
local noise2 = math.cos(seed * 0.08 + t * slowSpeed * 2) * math.sin(seed * 0.12 + t * slowSpeed * 1.2)
local noise3 = math.sin(seed * 0.15 + t * slowSpeed * 2.5) * math.cos(seed * 0.1 + t * slowSpeed * 1.8)
-- จำกัดรัศมีให้อยู่ในวงแคบ (อยู่กับที่)
local randomRadius = r * (0.3 + 0.4 * math.abs(noise1)) -- แคบลง
-- สุ่มมุม (เปลี่ยนช้าลง)
local randomAngle = noise2 * TAU + t * slowSpeed * 2
-- สุ่มความสูง (อยู่ในกรอบ)
local randomHeight = h + noise3 * r * 0.4 -- สูงไม่มาก
-- ตำแหน่ง X, Z
local x = math.cos(randomAngle) * randomRadius
local z = math.sin(randomAngle) * randomRadius
return Vector3.new(x, randomHeight, z)
end
-- Crazy Orbit (แต่ละชิ้นเคลื่อนที่อิสระ)
Shapes['Crazy Orbit'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- แต่ละชิ้นมี seed ต่างกัน
local seed = i * 137.508 + i * i * 0.01
-- สุ่มแบบไม่เหมือนกัน
local noise1 = math.sin(seed * 0.1 + t * sp * (2 + i * 0.05)) * math.cos(seed * 0.05 + t * sp * (1.5 + i * 0.03))
local noise2 = math.cos(seed * 0.08 + t * sp * (2.5 + i * 0.04)) * math.sin(seed * 0.12 + t * sp * (1.8 + i * 0.02))
local noise3 = math.sin(seed * 0.15 + t * sp * (3 + i * 0.06)) * math.cos(seed * 0.1 + t * sp * (2.2 + i * 0.05))
-- สุ่มรัศมี, มุม, ความสูง
local randomRadius = r * (0.2 + 0.8 * math.abs(noise1))
local randomAngle = noise2 * TAU + t * sp * (2 + i * 0.1)
local randomHeight = h + noise3 * r * 1.2
local x = math.cos(randomAngle) * randomRadius
local z = math.sin(randomAngle) * randomRadius
return Vector3.new(x, randomHeight, z)
end
-- Dragon Shape (มังกรมีหัวและหาง)
Shapes.Dragon = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local frac = i / safeN
-- ส่วนหัว (20% แรก)
local isHead = frac < 0.2
-- ส่วนหาง (20% สุดท้าย)
local isTail = frac > 0.8
local bodyLength = r * 3
local yPos = h - bodyLength/2 + frac * bodyLength
-- คลื่นของลำตัว
local wave = math.sin(frac * TAU * 4 + t * sp * 2) * r * 0.3
local wave2 = math.cos(frac * TAU * 3 + t * sp * 1.5) * r * 0.2
local angle = frac * TAU * 1.5 + t * sp * 1.5
-- ขนาดรัศมี (หัวใหญ่ หางเล็ก)
local radius = r * 0.4
if isHead then
radius = radius * (1.5 - frac * 2) -- หัวใหญ่
elseif isTail then
radius = radius * (1 - (frac - 0.8) * 2) -- หางเล็ก
end
local x = math.cos(angle) * radius + wave
local z = math.sin(angle) * radius + wave2
return Vector3.new(x, yPos, z)
end
-- 0. Spinning Ring
Shapes['Spinning Ring'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local a = ((i - 1) / safeN) * TAU + (t * sp * 5)
return Vector3.new(cos(a) * r, h, sin(a) * r)
end
-- Supernova Shape
Shapes.Supernova = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local phi = math.acos(clamp(1 - 2 * (i / safeN), -1, 1))
local theta = i * math.pi * (3 - sqrt(5)) + (t * sp * 2)
local pulse = 1 + 0.3 * sin(t * sp * 4 + i)
local currentR = r * pulse
local x = cos(theta) * sin(phi) * currentR
local y = cos(phi) * currentR + h
local z = sin(theta) * sin(phi) * currentR
return Vector3.new(x, y, z)
end
-- 1. Ophanim
Shapes.Ophanim = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local ring = (i - 1) % 3
local ringIndex = math.floor((i - 1) / 3)
local ringTotal = math.max(math.floor(safeN / 3), 1)
local frac = ringIndex / ringTotal
local a = frac * TAU + t * sp * (ring == 0 and 1 or (ring == 1 and -1.5 or 2))
local rx = r * (ring == 0 and 1 or 0.75)
local rz = r * (ring == 1 and 1 or 0.5)
local x = cos(a) * rx
local y = sin(a * 2 + t * sp) * (r * 0.25) + h
local z = sin(a) * rz
if ring == 1 then x, y = y - h, x + h
elseif ring == 2 then z, y = y - h, z + h end
return Vector3.new(x, y, z)
end
-- 2. Planet
Shapes.Planet = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local coreN = clamp(math.floor(safeN * 0.35), 4, 15)
coreN = math.min(coreN, safeN)
local ring1N = math.max(math.floor((safeN - coreN) / 2), 1)
local spin = t * sp
if i <= coreN then
local phi = math.acos(clamp(1 - 2 * (i / coreN), -1, 1))
local theta = i * math.pi * (3 - sqrt(5)) + spin
local cr = r * 0.35
return Vector3.new(cos(theta) * sin(phi) * cr, cos(phi) * cr + h, sin(theta) * sin(phi) * cr)
elseif i <= coreN + ring1N then
local idx = i - coreN
local a = (idx / ring1N) * TAU + spin
local rr = r * 0.9
local tilt = math.rad(30)
return Vector3.new(cos(a) * rr, sin(a) * rr * sin(tilt) + h, sin(a) * rr * cos(tilt))
else
local idx = i - (coreN + ring1N)
local c = math.max(safeN - (coreN + ring1N), 1)
local a = (idx / c) * TAU + t * sp * 0.5
local rr = r * 1.3
local tilt = math.rad(-40)
return Vector3.new(cos(a) * rr, sin(a) * rr * sin(tilt) + h, sin(a) * rr * cos(tilt))
end
end
-- 3. Sphere
Shapes.Sphere = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local phi = math.acos(clamp(1 - 2 * (i / safeN), -1, 1))
local theta = i * math.pi * (3 - sqrt(5)) + t * sp * 2
return Vector3.new(cos(theta) * sin(phi) * r, cos(phi) * r + h, sin(theta) * sin(phi) * r)
end
-- 4. Cylinder
Shapes.Cylinder = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local a = ((i - 1) / safeN) * TAU + t * sp
local y = ((i - 1) / safeN) * r * 1.5 - r * 0.75
return Vector3.new(cos(a) * r, h + y, sin(a) * r)
end
-- 5. Double Ring
Shapes['Double Ring'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local halfN = math.max(math.floor(safeN / 2), 1)
local a = (((i - 1) % halfN) / halfN) * TAU + t * sp
if i <= halfN then
return Vector3.new(cos(a) * r, h, sin(a) * r)
else
return Vector3.new(0, h + cos(a) * r, sin(a) * r)
end
end
-- 6. Star
Shapes.Star = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local a = ((i - 1) / safeN) * TAU + t * sp
local rr = (i % 2 == 0) and r or r * 0.38
return Vector3.new(cos(a) * rr, h + sin(t * sp * 1.5 + i * 0.3) * 1.5, sin(a) * rr)
end
-- 7. Infinity
Shapes.Infinity = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local a = ((i - 1) / safeN) * TAU + t * sp
local d = 1 + sin(a) ^ 2
return Vector3.new((r * cos(a)) / d, h + sin(t * sp + i * 0.2) * 1.2, (r * sin(a) * cos(a)) / d)
end
-- 8. Heart
Shapes.Heart = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local a = ((i - 1) / safeN) * TAU + t * sp
local pulse = 1 + 0.12 * sin(t * sp * 2)
local scale = (r / 15) * pulse
local x = 16 * sin(a) ^ 3
local z = -(13 * cos(a) - 5 * cos(2 * a) - 2 * cos(3 * a) - cos(4 * a))
return Vector3.new(x * scale, h + sin(t * sp * 2) * 0.5, z * scale)
end
-- 9. DNA Helix
Shapes['DNA Helix'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local y = ((i - 1) / safeN) * r * 2 - r
local a = ((i - 1) / safeN) * TAU + t * sp + y * 0.5
local side = (i % 2 == 0) and 1 or -1
return Vector3.new(cos(a) * r * side, h + y, sin(a) * r * side)
end
-- 10. Triple Helix
Shapes['Triple Helix'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local y = ((i - 1) / safeN) * r * 2 - r
local a = ((i - 1) / safeN) * TAU + t * sp + y * 0.5
local phase = ((i - 1) % 3) * (TAU / 3)
return Vector3.new(cos(a + phase) * r, h + y, sin(a + phase) * r)
end
-- 11. Tornado
Shapes.Tornado = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local y = ((i - 1) / safeN) * (r * 2)
local currentR = (y / (r * 2)) * r
local a = ((i - 1) / safeN) * TAU * 3 + t * sp * 3
return Vector3.new(cos(a) * currentR, h + y - r, sin(a) * currentR)
end
-- 12. Galaxy Spiral
Shapes['Galaxy Spiral'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local a = ((i - 1) / safeN) * TAU * 2 + t * sp
local currentR = ((i - 1) / safeN) * r
return Vector3.new(cos(a) * currentR, h + sin(a * 2) * 0.5, sin(a) * currentR)
end
-- 13. Fibonacci Spiral
Shapes['Fibonacci Spiral'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local phi = (1 + sqrt(5)) / 2
local a = (i - 1) * phi * TAU + t * sp
local currentR = sqrt((i - 1) / safeN) * r
return Vector3.new(cos(a) * currentR, h, sin(a) * currentR)
end
-- 14. Spring Coil
Shapes['Spring Coil'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local y = ((i - 1) / safeN) * (r * 2) - r
local a = ((i - 1) / safeN) * TAU * 5 + t * sp * 2
return Vector3.new(cos(a) * (r * 0.5), h + y, sin(a) * (r * 0.5))
end
-- Event Horizon (ขอบฟ้าเหตุการณ์ - วงแหวนหมุน)
Shapes['Event Horizon'] = function(i, n, t, r, h, sp)
local frac = i / n
local a = frac * TAU * 6 + t * sp
local ring = r * (0.3 + 0.7 * abs(sin(frac * math.pi)))
local glow = 1 + 0.2 * sin(t * sp * 2 + frac * TAU)
return Vector3.new(cos(a) * ring * glow, h + sin(t * sp + frac * TAU) * 2, sin(a) * ring * glow)
end
-- Pulsar Star (ดาวพัลซาร์ - กระพริบเป็นจังหวะ)
Shapes['Pulsar Star'] = function(i, n, t, r, h, sp)
local frac = i / n
local a = frac * TAU * 4 + t * sp * 3
local pulse = 1 + 0.5 * sin(t * sp * 6 + i)
local dist = r * frac * pulse
local y = h + sin(t * sp * 3 + frac * TAU) * r * 0.3
return Vector3.new(cos(a) * dist, y, sin(a) * dist)
end
-- 15. Vortex Funnel
Shapes['Vortex Funnel'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local y = ((i - 1) / safeN) * (r * 2) - r
local currentR = math.abs(y) * 0.8
local a = ((i - 1) / safeN) * TAU * 4 + t * sp * 3
return Vector3.new(cos(a) * currentR, h + y, sin(a) * currentR)
end
-- 16. Box
Shapes.Box = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local sideN = math.max(math.floor(safeN / 6), 1)
local face = math.floor((i - 1) / sideN) % 6
local idx = (i - 1) % sideN
local f = (idx / sideN) * (r * 2) - r
local x, y, z = 0, 0, 0
if face == 0 then x, y, z = r, f, (idx % 2 == 0 and r or -r)
elseif face == 1 then x, y, z = -r, f, (idx % 2 == 0 and r or -r)
elseif face == 2 then x, y, z = f, r, (idx % 2 == 0 and r or -r)
elseif face == 3 then x, y, z = f, -r, (idx % 2 == 0 and r or -r)
elseif face == 4 then x, y, z = (idx % 2 == 0 and r or -r), f, r
else x, y, z = (idx % 2 == 0 and r or -r), f, -r end
return Vector3.new(x, h + y, z)
end
-- 17. Rounded Cube
Shapes['Rounded Cube'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local phi = math.acos(clamp(1 - 2 * (i / safeN), -1, 1))
local theta = i * math.pi * (3 - sqrt(5)) + t * sp
local x = cos(theta) * sin(phi)
local y = cos(phi)
local z = sin(theta) * sin(phi)
local f = 1 + 0.2 * (x^4 + y^4 + z^4)
return Vector3.new((x * r) / f, h + (y * r) / f, (z * r) / f)
end
-- 18. Torus
Shapes.Torus = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local majorN = clamp(math.floor(sqrt(safeN) * 1.5), 3, safeN)
local minorN = math.max(math.floor(safeN / majorN), 1)
local u = (((i - 1) % majorN) / majorN) * TAU + t * sp
local v = (math.floor((i - 1) / majorN) / minorN) * TAU
local R = r
local tubeR = r * 0.35
local x = (R + tubeR * cos(v)) * cos(u)
local y = tubeR * sin(v)
local z = (R + tubeR * cos(v)) * sin(u)
return Vector3.new(x, h + y, z)
end
-- 19. Torus Knot
Shapes['Torus Knot'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local p, q = 2, 3
local phi = ((i - 1) / safeN) * TAU * q + t * sp
local r_knot = r * (0.8 + 0.2 * cos(p * phi / q))
local x = r_knot * cos(phi)
local y = r_knot * sin(phi) * 0.5
local z = r_knot * sin(p * phi / q)
return Vector3.new(x, h + y, z)
end
-- 20. Möbius Strip
Shapes['Möbius Strip'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local u = ((i - 1) / safeN) * TAU + t * sp
local v = ((i % 2 == 0) and 1 or -1) * (r * 0.3)
local x = (r + v * cos(u / 2)) * cos(u)
local y = v * sin(u / 2)
local z = (r + v * cos(u / 2)) * sin(u)
return Vector3.new(x, h + y, z)
end
-- 21. Saturn
Shapes.Saturn = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local coreN = clamp(math.floor(safeN * 0.5), 4, 20)
coreN = math.min(coreN, safeN)
local ringN = math.max(safeN - coreN, 1)
local spin = t * sp
if i <= coreN then
local phi = math.acos(clamp(1 - 2 * (i / coreN), -1, 1))
local theta = i * math.pi * (3 - sqrt(5)) + spin
local cr = r * 0.4
return Vector3.new(cos(theta) * sin(phi) * cr, cos(phi) * cr + h, sin(theta) * sin(phi) * cr)
else
local idx = i - coreN
local a = (idx / ringN) * TAU + spin * 1.5
local rr = r * 1.4
return Vector3.new(cos(a) * rr, h, sin(a) * rr)
end
end
-- 22. Ice Cube
Shapes['Ice Cube'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local sideN = math.max(math.floor(safeN / 8), 1)
local face = math.floor((i - 1) / sideN) % 8
local idx = (i - 1) % sideN
local f = (idx / sideN) * r - (r * 0.5)
local hr = r * 0.6
local x, y, z = 0, 0, 0
if face == 0 then x, y, z = hr, f, hr
elseif face == 1 then x, y, z = -hr, f, hr
elseif face == 2 then x, y, z = hr, f, -hr
elseif face == 3 then x, y, z = -hr, f, -hr
elseif face == 4 then x, y, z = f, hr, hr
elseif face == 5 then x, y, z = f, hr, -hr
elseif face == 6 then x, y, z = f, -hr, hr
else x, y, z = f, -hr, -hr end
return Vector3.new(x, h + y, z)
end
-- 23. Rain Effect (ฝนตกเร็ว)
Shapes.Rain = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local angle = ((i - 1) / safeN) * math.pi * 2 + t * sp * 12
local fallSpeed = 40 + (i % 5) * 3
local yPos = (h + r * 1.5) - ((t * fallSpeed + i * 0.1) % (r * 3))
local radiusOffset = r * (0.8 + 0.2 * math.sin(t * 15 + i * 3))
local x = math.cos(angle) * radiusOffset
local z = math.sin(angle) * radiusOffset
return Vector3.new(x, yPos, z)
end
-- 24. Sword Shape (ดาบโผล่จากพื้น - แบบที่คุณต้องการ)
Shapes.Sword = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- ความยาวดาบ (โผล่จากพื้น)
local bladeLength = r * 3
local bladeWidth = r * 0.2
-- ตำแหน่ง Y: โผล่จากพื้น (เริ่มจาก 0 ขึ้นไป)
local yPos = h + ((i - 1) / safeN) * bladeLength
-- มุมหมุนรอบตัว (หมุนเป็นวงกลม)
local angle = ((i - 1) / safeN) * TAU + t * sp * 2
-- ตำแหน่ง X, Z
local x = math.cos(angle) * bladeWidth
local z = math.sin(angle) * bladeWidth
return Vector3.new(x, yPos, z)
end
-- 25. Sword v2 (ดาบโผล่จากพื้นแบบเกลียว)
Shapes['Sword v2'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- ความยาวดาบ
local bladeLength = r * 3
local bladeWidth = r * 0.2
-- ตำแหน่ง Y: โผล่จากพื้น
local yPos = h + ((i - 1) / safeN) * bladeLength
-- มุมหมุน: หมุนเป็นเกลียว (เพิ่มมุมตามความสูง)
local angle = ((i - 1) / safeN) * TAU * 3 + t * sp * 2
-- รัศมี: ขยายกว้างขึ้นตามความสูง (ดาบจะบานออกด้านบน)
local radius = bladeWidth * (1 + ((i - 1) / safeN) * 2)
-- ตำแหน่ง X, Z
local x = math.cos(angle) * radius
local z = math.sin(angle) * radius
return Vector3.new(x, yPos, z)
end
-- 26. Sword v3 (ดาบโผล่จากพื้นและเอียงเข้าหาตัว)
Shapes['Sword v3'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- ความยาวดาบ
local bladeLength = r * 2.5
local bladeWidth = r * 0.25
-- ตำแหน่ง Y: โผล่จากพื้น
local yPos = h + ((i - 1) / safeN) * bladeLength
-- มุมหมุนรอบตัว
local angle = ((i - 1) / safeN) * TAU + t * sp * 1.5
-- รัศมี: แคบลงเมื่อสูงขึ้น (ดาบจะเอียงเข้าหาตัว)
local radius = bladeWidth * (1 - ((i - 1) / safeN) * 0.8)
-- ตำแหน่ง X, Z
local x = math.cos(angle) * radius
local z = math.sin(angle) * radius
return Vector3.new(x, yPos, z)
end
-- Energy Shape (ลูกบอลพลังงานหมุนรอบตัว)
Shapes.Energy = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- ตำแหน่งแบบลูกบอลพลังงาน (Sphere)
local phi = math.acos(math.clamp(1 - 2 * (i / safeN), -1, 1))
local theta = i * math.pi * (3 - math.sqrt(5)) + t * sp * 2
local currentR = r * (0.5 + 0.3 * math.sin(t * 0.5 + i * 0.1))
local x = math.cos(theta) * math.sin(phi) * currentR
local y = math.cos(phi) * currentR + h
local z = math.sin(theta) * math.sin(phi) * currentR
return Vector3.new(x, y, z)
end
-- 28. Tsunami Shape (คลื่นสึนามิ)
Shapes.Tsunami = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- ความสูงของคลื่น
local waveHeight = r * 1.5
local waveWidth = r * 0.8
-- ตำแหน่ง Y: คลื่นจะซัดขึ้นจากพื้นแล้วลดลง
local phase = ((i - 1) / safeN) * TAU
local waveY = h + (waveHeight * 0.5) + (math.sin(phase + t * sp * 2) * waveHeight * 0.5)
-- ตำแหน่ง X, Z: กระจายเป็นแนวคลื่น
local angle = phase + t * sp * 1.5
local radius = waveWidth * (1 + 0.3 * math.sin(t * sp + i * 0.2))
local x = math.cos(angle) * radius
local z = math.sin(angle) * radius
return Vector3.new(x, waveY, z)
end
-- 29. Grid Shape (เวอร์ชันระนาบ 2D)
Shapes.Grid = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- ขนาดตาราง 2D (x และ z)
local gridSize = math.floor(math.sqrt(safeN)) + 1
if gridSize < 2 then gridSize = 2 end
local cellSize = (r * 2) / gridSize
local totalCells = gridSize * gridSize
local idx = (i - 1) % totalCells
local xIndex = idx % gridSize
local zIndex = math.floor(idx / gridSize)
local xPos = (xIndex - (gridSize - 1) / 2) * cellSize
local yPos = h
local zPos = (zIndex - (gridSize - 1) / 2) * cellSize
-- หมุนระนาบ
local rotAngle = t * sp * 1.5
local cosA = math.cos(rotAngle)
local sinA = math.sin(rotAngle)
local rotatedX = xPos * cosA - zPos * sinA
local rotatedZ = xPos * sinA + zPos * cosA
return Vector3.new(rotatedX, yPos, rotatedZ)
end
-- 30. Robot Shape (หุ่นยนต์หมุนรอบตัว)
Shapes.Robot = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- ส่วนประกอบของหุ่นยนต์
local headCount = math.floor(safeN * 0.15) -- หัว 15%
local bodyCount = math.floor(safeN * 0.25) -- ลำตัว 25%
local armCount = math.floor(safeN * 0.30) -- แขน 30%
local legCount = safeN - headCount - bodyCount - armCount -- ขา 30%
-- ปรับจำนวนให้ถูกต้อง
if legCount < 0 then legCount = 0 end
-- มุมหมุนรอบตัว
local angle = ((i - 1) / safeN) * TAU + t * sp * 2
-- ตำแหน่งตามส่วนต่างๆ
if i <= headCount then
-- หัว (ส่วนบน)
local headY = h + r * 0.8
local headRadius = r * 0.15
local x = math.cos(angle) * headRadius
local z = math.sin(angle) * headRadius
return Vector3.new(x, headY, z)
elseif i <= headCount + bodyCount then
-- ลำตัว (ส่วนกลาง)
local bodyY = h
local bodyRadius = r * 0.3
local idx = i - headCount
local yOffset = (idx / bodyCount) * r * 0.4 - r * 0.2
local x = math.cos(angle) * bodyRadius
local z = math.sin(angle) * bodyRadius
return Vector3.new(x, h + yOffset, z)
elseif i <= headCount + bodyCount + armCount then
-- แขน (ด้านข้าง)
local idx = i - headCount - bodyCount
local armAngle = angle + math.pi / 2 -- แขนจะอยู่ด้านข้าง
local armY = h + (idx / armCount) * r * 0.4 - r * 0.2
local armRadius = r * 0.35
local x = math.cos(armAngle) * armRadius
local z = math.sin(armAngle) * armRadius
return Vector3.new(x, armY, z)
else
-- ขา (ส่วนล่าง)
local idx = i - headCount - bodyCount - armCount
local legAngle = angle + math.pi / 4 -- ขาจะอยู่ด้านล่าง
local legY = h - r * 0.5 + (idx / legCount) * r * 0.3
local legRadius = r * 0.25
local x = math.cos(legAngle) * legRadius
local z = math.sin(legAngle) * legRadius
return Vector3.new(x, legY, z)
end
end
-- 31. Explosion Shape (ระเบิดหมุนเป็นวงกลม)
Shapes.Explosion = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- วงกลมระเบิด
local angle = ((i - 1) / safeN) * TAU + t * sp * 2
local pulse = 1 + 0.4 * math.sin(t * sp * 3 + i * 0.1)
local currentR = r * pulse * (0.5 + 0.5 * ((i - 1) / safeN))
local x = math.cos(angle) * currentR
local y = h + math.sin(t * sp * 2 + i * 0.2) * 2
local z = math.sin(angle) * currentR
return Vector3.new(x, y, z)
end
-- Atom (อะตอม - นิวเคลียส + อิเล็กตรอนโคจร)
Shapes.Atom = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- แบ่งเป็นนิวเคลียส (30%) และอิเล็กตรอน (70%)
local nucleusCount = math.floor(safeN * 0.3)
local electronCount = safeN - nucleusCount
if i <= nucleusCount then
-- นิวเคลียส (รวมกันตรงกลาง)
local phi = math.acos(1 - 2 * (i / nucleusCount))
local theta = i * math.pi * (3 - math.sqrt(5)) + t * sp * 0.5
local radius = r * 0.15
local x = math.cos(theta) * math.sin(phi) * radius
local y = math.cos(phi) * radius + h
local z = math.sin(theta) * math.sin(phi) * radius
return Vector3.new(x, y, z)
else
-- อิเล็กตรอน (โคจรเป็นวงแหวน)
local idx = i - nucleusCount
local electronRing = idx % 3 -- 3 วงโคจร
local ringAngle = (electronRing / 3) * TAU
local posInRing = math.floor(idx / 3)
local countInRing = math.max(math.floor(electronCount / 3), 1)
local angle = (posInRing / countInRing) * TAU + t * sp * (2 + electronRing * 0.5) + ringAngle
-- แต่ละวงมีรัศมีต่างกัน
local ringRadius = r * (0.4 + electronRing * 0.2)
-- วงโคจรเอียง (เพื่อให้ดูเหมือนอะตอมจริง)
local tiltX = math.sin(ringAngle) * ringRadius * 0.1
local tiltY = math.cos(ringAngle) * ringRadius * 0.1
local x = math.cos(angle) * ringRadius
local z = math.sin(angle) * ringRadius
local y = h + tiltY + math.sin(t * sp * 0.5 + idx) * 0.5
return Vector3.new(x, y, z)
end
end
-- Meteor Shower (ฝนดาวตก - ตกลงมาเป็นเส้นตรง)
Shapes['Meteor Shower'] = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- แต่ละดาวตกมีตำแหน่งและความเร็วต่างกัน
local seed = i * 137.508
-- ตำแหน่งเริ่มต้น (บนฟ้า)
local startX = math.sin(seed * 0.1) * r * 2
local startZ = math.cos(seed * 0.05) * r * 2
local startY = h + 100 + math.abs(math.sin(seed * 0.03)) * 50
-- ความเร็วและทิศทาง
local speed = 20 + math.sin(seed * 0.5) * 10
local dirX = math.cos(seed * 0.1) * speed
local dirZ = math.sin(seed * 0.05) * speed
-- ตำแหน่งตามเวลา (ตกลงมาเรื่อยๆ)
local time = t * sp * 2
local fall = (time * speed + i * 10) % 200 -- ตกแล้ววนกลับ
local x = startX + dirX * (fall / 200)
local z = startZ + dirZ * (fall / 200)
local y = startY - fall
-- ทำให้ดูเหมือนมีหาง (เส้นหลัง)
local trail = math.max(0, 1 - (fall / 200)) * 5
return Vector3.new(x, y + trail, z)
end
-- 32. Flower Shape (ดอกไม้)
Shapes.Flower = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- ส่วนประกอบของดอกไม้
local petalCount = math.floor(safeN * 0.7) -- กลีบดอก 70%
local centerCount = safeN - petalCount -- กลางดอก 30%
if i <= petalCount then
-- กลีบดอก (หมุนเป็นวงกลม)
local angle = ((i - 1) / petalCount) * TAU + t * sp * 1.5
local petalRadius = r * 0.8
local petalLength = r * 0.6
-- กลีบดอกจะบานออก
local bloom = 1 + 0.2 * math.sin(t * sp * 2 + i * 0.3)
local x = math.cos(angle) * petalRadius * bloom
local z = math.sin(angle) * petalRadius * bloom
local y = h + math.sin(angle * 2 + t * sp) * (r * 0.2)
return Vector3.new(x, y, z)
else
-- กลางดอก (ตรงกลาง)
local idx = i - petalCount
local centerAngle = idx * math.pi * (3 - math.sqrt(5)) + t * sp
local centerRadius = r * 0.2
local x = math.cos(centerAngle) * centerRadius
local y = math.cos(centerAngle * 2) * centerRadius * 0.5 + h
local z = math.sin(centerAngle) * centerRadius
return Vector3.new(x, y, z)
end
end
-- 32. Flower Shape (ดอกไม้บาน)
Shapes.Flower = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local petalCount = math.floor(safeN * 0.7)
local centerCount = safeN - petalCount
-- ดอกไม้บานตามเวลา
local bloom = 1 + 0.3 * math.sin(t * sp * 2)
if i <= petalCount then
local angle = ((i - 1) / petalCount) * TAU + t * sp * 1.5
local petalRadius = r * 0.8 * bloom
local petalLength = r * 0.5
-- กลีบดอกจะขยับขึ้นลง
local wave = math.sin(t * sp * 3 + i * 0.5) * (r * 0.2)
local x = math.cos(angle) * petalRadius
local z = math.sin(angle) * petalRadius
local y = h + wave
return Vector3.new(x, y, z)
else
local idx = i - petalCount
local centerAngle = idx * math.pi * (3 - math.sqrt(5)) + t * sp
local centerRadius = r * 0.2 * bloom
local x = math.cos(centerAngle) * centerRadius
local y = math.cos(centerAngle * 2) * centerRadius * 0.5 + h
local z = math.sin(centerAngle) * centerRadius
return Vector3.new(x, y, z)
end
end
-- 34. Divine Light Shape (แสงพระเจ้า)
Shapes.DivineLight = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- แสงจะส่องจากด้านบนลงมา
local heightRange = r * 3 -- ความสูงของลำแสง
-- ตำแหน่ง Y: จากบนลงล่าง
local yPos = h + heightRange - ((i - 1) / safeN) * heightRange
-- มุมหมุนรอบตัว (แสงจะหมุนรอบ)
local angle = ((i - 1) / safeN) * TAU + t * sp * 1.5
-- รัศมี: แสงจะกว้างที่ด้านบนและแคบลงด้านล่าง
local radius = r * (0.8 - ((i - 1) / safeN) * 0.6)
-- ตำแหน่ง X, Z
local x = math.cos(angle) * radius
local z = math.sin(angle) * radius
return Vector3.new(x, yPos, z)
end
-- 35. Crown Shape (มงกุฏ)
Shapes.Crown = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- ส่วนประกอบของมงกุฏ
local baseCount = math.floor(safeN * 0.4) -- ฐาน 40%
local spikeCount = math.floor(safeN * 0.4) -- ยอด 40%
local jewelCount = safeN - baseCount - spikeCount -- เพชร 20%
-- มุมหมุนรอบตัว
local angle = ((i - 1) / safeN) * TAU + t * sp * 2
if i <= baseCount then
-- ฐานของมงกุฏ (วงแหวน)
local idx = i - 1
local baseRadius = r * 0.8
local baseHeight = h + r * 0.2
local x = math.cos(angle) * baseRadius
local z = math.sin(angle) * baseRadius
return Vector3.new(x, baseHeight, z)
elseif i <= baseCount + spikeCount then
-- ยอดของมงกุฏ (สามเหลี่ยม)
local idx = i - baseCount
local spikeHeight = (idx / spikeCount) * r * 0.8
local spikeRadius = r * 0.8 * (1 - (idx / spikeCount) * 0.7)
local x = math.cos(angle) * spikeRadius
local z = math.sin(angle) * spikeRadius
local y = h + r * 0.2 + spikeHeight
return Vector3.new(x, y, z)
else
-- เพชรประดับ (จุดที่ยอด)
local idx = i - baseCount - spikeCount
local jewelAngle = angle + math.pi / 4
local jewelRadius = r * 0.3
local jewelY = h + r * 1.0 + math.sin(t * sp * 3 + idx) * r * 0.1
local x = math.cos(jewelAngle) * jewelRadius
local z = math.sin(jewelAngle) * jewelRadius
return Vector3.new(x, jewelY, z)
end
end
-- 36. Hexagram Shape (ดาวหกแฉก 3D)
Shapes.Hexagram = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local pointsPerTriangle = 3
local totalPoints = 6
-- มุมหมุน 3 มิติ
local rotX = math.sin(t * sp * 0.5) * (r * 0.3)
local rotY = t * sp * 1.5
local pointIndex = (i - 1) % totalPoints
local isFirstTriangle = pointIndex < pointsPerTriangle
if isFirstTriangle then
local idx = pointIndex
local a = idx * (TAU / 3) + rotY
local x = math.cos(a) * r
local z = math.sin(a) * r
local y = h + rotX * math.sin(a)
return Vector3.new(x, y, z)
else
local idx = pointIndex - pointsPerTriangle
local a = idx * (TAU / 3) + math.pi / 3 + rotY
local x = math.cos(a) * r
local z = math.sin(a) * r
local y = h - rotX * math.sin(a)
return Vector3.new(x, y, z)
end
end
-- 37. CubeOrbit Shape (หมุนและโคจรเร็ว)
Shapes.CubeOrbit = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
local cubeSize = math.floor(math.cbrt(safeN)) + 1
if cubeSize < 2 then cubeSize = 2 end
if cubeSize > 6 then cubeSize = 6 end
local totalPoints = cubeSize * cubeSize * cubeSize
local idx = (i - 1) % totalPoints
local xIdx = idx % cubeSize
local yIdx = math.floor(idx / cubeSize) % cubeSize
local zIdx = math.floor(idx / (cubeSize * cubeSize))
local half = (cubeSize - 1) / 2
local localX = (xIdx - half) / cubeSize
local localY = (yIdx - half) / cubeSize
local localZ = (zIdx - half) / cubeSize
local cubeRadius = r * 0.6
-- หมุนรอบตัวเองเร็วขึ้น (Spin)
local spinAngle = t * sp * 6
local cosSpin = math.cos(spinAngle)
local sinSpin = math.sin(spinAngle)
local rotatedX = localX * cosSpin - localZ * sinSpin
local rotatedZ = localX * sinSpin + localZ * cosSpin
local rotatedY = localY
local cubeX = rotatedX * cubeRadius
local cubeY = rotatedY * cubeRadius + h
local cubeZ = rotatedZ * cubeRadius
-- โคจรรอบผู้เล่นเร็วขึ้น (Orbit)
local orbitAngle = t * sp * 3
local orbitRadius = r * 1.2
local orbitX = math.cos(orbitAngle) * orbitRadius
local orbitZ = math.sin(orbitAngle) * orbitRadius
local finalX = cubeX + orbitX
local finalY = cubeY
local finalZ = cubeZ + orbitZ
return Vector3.new(finalX, finalY, finalZ)
end
-- 38. Angel Shape (ปีกอยู่ข้างตัว + วงแหวนหมุน)
Shapes.Angel = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- จำนวนชิ้นส่วน: วงแหวน 10 อัน, ปีกซ้าย 10 อัน, ปีกขวา 10 อัน
local haloCount = 10
local leftWingCount = 10
local rightWingCount = 10
local totalCount = haloCount + leftWingCount + rightWingCount
-- ถ้ามี Sparkler น้อยกว่า 30 อัน ให้ปรับจำนวนให้พอดี
if safeN < totalCount then
local ratio = safeN / totalCount
haloCount = math.max(1, math.floor(haloCount * ratio))
leftWingCount = math.max(1, math.floor(leftWingCount * ratio))
rightWingCount = math.max(1, math.floor(rightWingCount * ratio))
totalCount = haloCount + leftWingCount + rightWingCount
end
-- การกระพือปีก (ขยับขึ้นลง)
local flap = math.sin(t * sp * 2)
if i <= haloCount then
-- วงแหวนบนหัว (หมุน)
local idx = i - 1
local haloAngle = (idx / haloCount) * TAU + t * sp * 3 -- หมุน
local haloRadius = r * 0.6
local haloY = h + r * 1.3
local glow = 1 + 0.2 * math.sin(t * sp * 3 + idx)
local x = math.cos(haloAngle) * haloRadius * glow
local z = math.sin(haloAngle) * haloRadius * glow
return Vector3.new(x, haloY, z)
elseif i <= haloCount + leftWingCount then
-- ปีกซ้าย (อยู่ข้างตัว ไม่หมุน)
local idx = i - haloCount
local wingProgress = idx / leftWingCount
-- ปีกซ้ายอยู่ข้างตัว (X ติดลบ)
local wingY = h + math.sin(wingProgress * math.pi * 0.8) * r * 0.8 + flap * r * 0.3 * wingProgress
local wingX = -r * 0.7
local wingZ = (wingProgress - 0.5) * r * 1.2
return Vector3.new(wingX, wingY, wingZ)
else
-- ปีกขวา (อยู่ข้างตัว ไม่หมุน)
local idx = i - haloCount - leftWingCount
local wingProgress = idx / rightWingCount
-- ปีกขวาอยู่ข้างตัว (X เป็นบวก)
local wingY = h + math.sin(wingProgress * math.pi * 0.8) * r * 0.8 + flap * r * 0.3 * wingProgress
local wingX = r * 0.7
local wingZ = (wingProgress - 0.5) * r * 1.2
return Vector3.new(wingX, wingY, wingZ)
end
end
-- 39. RingFloor Shape (วงแหวนบนพื้น)
Shapes.RingFloor = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- วงแหวนจะอยู่ที่ระดับพื้น (h = 0)
local floorY = 0
-- มุมหมุน
local angle = ((i - 1) / safeN) * TAU + t * sp * 3
-- รัศมีของวงแหวน
local radius = r * 0.9
-- ตำแหน่ง X, Z
local x = math.cos(angle) * radius
local z = math.sin(angle) * radius
return Vector3.new(x, floorY, z)
end
-- 31. Explosion Shape (ระเบิดสีแดง)
Shapes.Explosionv2 = function(i, n, t, r, h, sp)
local safeN = math.max(n, 1)
-- การระเบิดที่รุนแรง
local pulse = 1 + 0.6 * math.sin(t * sp * 4 + i * 0.3)
local expand = 1 + 0.3 * math.sin(t * sp * 2)
local phi = math.acos(math.clamp(1 - 2 * (i / safeN), -1, 1))
local theta = i * math.pi * (3 - math.sqrt(5)) + t * sp * 3
local currentR = r * pulse * expand * (0.2 + 0.8 * ((i - 1) / safeN))
local x = math.cos(theta) * math.sin(phi) * currentR
local y = math.cos(phi) * currentR + h
local z = math.sin(theta) * math.sin(phi) * currentR
-- เปลี่ยนสี Sparkler เป็นสีแดง (ถ้าต้องการ)
-- ต้องไปเพิ่มในโค้ดส่วนอื่น
return Vector3.new(x, y, z)
end
local function GetShapeOffset(index, total, t, cfg)
local fn = Shapes[cfg.CurrentShape]
if fn then
local success, result = pcall(fn, index, total, t, cfg.Radius, cfg.Height, cfg.Speed)
if success and result then
return result
end
end
local safeTotal = math.max(total, 1)
local a = ((index - 1) / safeTotal) * TAU + t * cfg.Speed
return Vector3.new(cos(a) * cfg.Radius, cfg.Height, sin(a) * cfg.Radius)
end
RunService.RenderStepped:Connect(function()
local char = LocalPlayer.Character
local targetRoot = char and char:FindFirstChild('HumanoidRootPart')
if not targetRoot then return end
local t = tick()
local prediction = targetRoot.AssemblyLinearVelocity * 0.12
local rot = targetRoot.CFrame.Rotation
for i = #activeSparklers, 1, -1 do
local obj = activeSparklers[i]
if obj and obj.Parent then
local main = obj:IsA('BasePart') and obj or obj.PrimaryPart
local bp = main and main:FindFirstChild('ToyBodyPos')
local bg = main and main:FindFirstChild('ToyBodyGyro')
if bp and bg then
local offset = GetShapeOffset(i, #activeSparklers, t, sparklerConfig)
bp.Position = targetRoot.Position + prediction + (rot * offset)
bg.CFrame = CFrame.new(main.Position, targetRoot.Position + prediction)
end
else
table.remove(activeSparklers, i)
end
end
end)
-- ==================== AIMBOT & TRIGGERBOT TAB ====================
local AimTab = Window:CreateTab("Combat (Aim)", "crosshair")
local AimSection = AimTab:CreateSection("Aim Options")
local aimbotEnabled = false
local triggerbotEnabled = false
AimTab:CreateToggle({
Name = "Aimbot",
CurrentValue = false,
Flag = "Toggle_Aimbot",
Callback = function(Value)
aimbotEnabled = Value
end,
})
AimTab:CreateToggle({
Name = "Triggerbot",
CurrentValue = false,
Flag = "Toggle_Triggerbot",
Callback = function(Value)
triggerbotEnabled = Value
end,
})
local function GetClosestPlayer()
local closestPlayer = nil
local shortestDistance = math.huge
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
local humanoid = player.Character:FindFirstChildOfClass("Humanoid")
if humanoid and humanoid.Health > 0 then
local pos, onScreen = Camera:WorldToViewportPoint(player.Character.HumanoidRootPart.Position)
if onScreen then
local magnitude = (Vector2.new(pos.X, pos.Y) - Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)).Magnitude
if magnitude < shortestDistance then
shortestDistance = magnitude
closestPlayer = player.Character
end
end
end
end
end
return closestPlayer
end
RunService.RenderStepped:Connect(function()
if aimbotEnabled then
local target = GetClosestPlayer()
if target and target:FindFirstChild("HumanoidRootPart") then
Camera.CFrame = CFrame.new(Camera.CFrame.Position, target.HumanoidRootPart.Position)
end
end
if triggerbotEnabled then
local mouseTarget = LocalPlayer:GetMouse().Target
if mouseTarget and mouseTarget.Parent then
local character = mouseTarget.Parent
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid and Players:GetPlayerFromCharacter(character) and Players:GetPlayerFromCharacter(character) ~= LocalPlayer then
if humanoid.Health > 0 then mouse1click()
end
end
end
end
end)Loads code from the internet. It downloads more code when it runs (loadstring + HttpGet), which can change after it was posted. From: sirius.menu.

Universal