Adada
Adada
ReplicatedStorage:WaitForChild("BallKickEvents")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Debris = game:GetService("Debris")
local EffectsManager = require(game.ReplicatedStorage.Effects.Effects)
local SoundManager = require(game.ReplicatedStorage.Effects.SoundManager)
local TypewriteManager = require(game.ReplicatedStorage.TypeWriterLib)
local TweenService = game:GetService("TweenService")
local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Attributes = ReplicatedStorage:WaitForChild("AttributeValues")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local Workspace = game:GetService("Workspace")
local module = {}
ball.CanCollide = true
ball.Taken.Value = false
ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))
ball.CFrame = cframe * CFrame.new(0, -1, 0)
EffectsManager.Kick(Character)
local force = mousepos * power * 1.1
local bodyVelocity = Instance.new("BodyVelocity")
bodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bodyVelocity.Velocity = force + Vector3.new(0, 10, 0)
bodyVelocity.Parent = ball
game.Debris:AddItem(bodyVelocity, 0.3)
SoundManager.PlaySound(game.ReplicatedStorage.Effects.Kick,
Character.HumanoidRootPart)
local ball = workspace.TestBall
module.DestroyCircle(Character)
ball.CanCollide = true
ball.Taken.Value = false
ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))
ball.CFrame = cframe * CFrame.new(2, 1, -0)
EffectsManager.Kick(Character)
local force = look * power
local bodyVelocity = Instance.new("BodyVelocity")
bodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bodyVelocity.Velocity = force + Vector3.new(0, 40, 0)
bodyVelocity.Parent = ball
game.Debris:AddItem(bodyVelocity, 0.2)
end
end
ball:SetNetworkOwner(player)
module.CirclePossession(player, ball)
ball.CanCollide = false
ball.Taken.Value = true
ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))
ball.CanCollide = false
ball.Taken.Value = true
local hl = Character:FindFirstChild("OwnHL")
if hl then
hl:Destroy()
end
if ball then
ball.Taken.Value = false
ball.CanCollide = true
end
end)
end
root.CFrame = CFrame.new(
root.Position,
Vector3.new(eroot.Position.X, root.Position.Y, eroot.Position.Z)
)
if teleportDuration > 0 then
task.wait(teleportDuration)
end
eroot.CFrame = CFrame.new(
eroot.Position,
Vector3.new(root.Position.X, eroot.Position.Y, root.Position.Z)
)
return true
end
local bv = Instance.new("BodyVelocity")
bv.Velocity = Vector3.new(0, 100, 0)
bv.MaxForce = Vector3.new(1e5, 1e5, 1e5)
bv.Name = "BlockVelocity"
bv.Parent = ball
game:GetService("Debris"):AddItem(bv, 0.4)
else
print("❌ Cannot block: no Shoot folder")
create("CantBlock", character)
end
end
end
end
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local circleTemplate =
ReplicatedStorage:WaitForChild("Effects"):WaitForChild("Circle")
local circle = circleTemplate:Clone()
circle.Name = "PossessionCircle"
-- Atur warna
local color = (team.Name == "Away") and Color3.fromRGB(255, 0, 0) or
Color3.fromRGB(0, 170, 255)
local point = circle:FindFirstChild("PointLight")
if point then point.Color = color end
circle.Color = color
function module.DestroyCircle(character)
if not character then return end
if enCharacter:FindFirstChild("HasBall") then
enCharacter.HasBall:Destroy()
end
if enCharacter.HumanoidRootPart:FindFirstChild("BallPossession") then
enCharacter.HumanoidRootPart.BallPossession:Destroy()
end
if enCharacter:FindFirstChild("OwnHL") then
enCharacter.OwnHL:Destroy()
end
local motor6d = Instance.new("Motor6D", Character.HumanoidRootPart)
motor6d.Part0 = Character.HumanoidRootPart
motor6d.Part1 = ball
motor6d.Name = "BallPossession"
motor6d.C0 = CFrame.new(0, -2.4, -2)
SoundManager.PlaySound(ReplicatedStorage.Effects.Kick,
Character.HumanoidRootPart)
ball:SetNetworkOwner(Players:GetPlayerFromCharacter(Character))
EffectsManager.Kick(Character)
enCharacter.IsRagdoll.Value = true
enCharacter.Humanoid.PlatformStand = true
task.wait(2)
enCharacter.IsRagdoll.Value = false
enCharacter.Humanoid.PlatformStand = false
SoundManager.PlaySound(ReplicatedStorage.Effects.AnkleBreak,
enCharacter.HumanoidRootPart)
Character.IsRagdoll.Value = true
Character.Humanoid.PlatformStand = true
create("Stunned", Character, 2)
task.wait(2)
Character.IsRagdoll.Value = false
Character.Humanoid.PlatformStand = false
end
end
function EffectsManager.RainbowShadow(character)
local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")
if not humanoidRootPart then return end
local colors = {
Color3.fromRGB(255, 0, 0),
Color3.fromRGB(255, 127, 0),
Color3.fromRGB(255, 255, 0),
Color3.fromRGB(0, 255, 0),
Color3.fromRGB(0, 0, 255),
Color3.fromRGB(75, 0, 130),
Color3.fromRGB(148, 0, 211),
}
for i = 1, 5 do
task.delay(i * 0.03, function()
local clone = character:Clone()
for _, item in ipairs(clone:GetDescendants()) do
if item:IsA("Decal") or item:IsA("Accessory") or
item:IsA("Humanoid") or item:IsA("Animator") or item:IsA("Motor6D") then
item:Destroy()
elseif item:IsA("BasePart") then
item.Anchored = true
item.CanCollide = false
item.Transparency = 0.3 + (i * 0.1)
item.Color = colors[(i % #colors) + 1]
end
end
game.Debris:AddItem(clone, 0.5)
end)
end
end
walkTween:Play()
runTween:Play()
reductionTween:Play()
print("SpeedChanger Started")
task.wait()
end
print("SpeedChanger Reverted")
end)
end
Humanoid.AutoRotate = false
tween:Play()
tween.Completed:Connect(function()
Humanoid.AutoRotate = true
end)
end
local bv = Instance.new("BodyVelocity")
bv.Velocity = hrp.CFrame.LookVector * 10 + Vector3.new(0, 10, 0)
bv.MaxForce = Vector3.new(1e5, 1e5, 1e5)
bv.Name = "BlockVelocity"
bv.Parent = ball
game:GetService("Debris"):AddItem(bv, 0.4)
create("Trapping", character, 1)
create("CantHeader", character, 1)
create("CantRecieve", character, 1)
else
print("❌ Cannot block: no Shoot folder")
create("CantTrapping", character)
end
end
local animShoot =
humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.Isagi.First
Move["DS2"])
local thinkanim =
humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.Isagi.Addit
ional["Dash Isagi"])
local upwardPower = 20
local shootPower = 120
local hitboxSize = Vector3.new(10, 10, 10)
local hitboxDuration = 1.2
-- VFX
local Effect =
ReplicatedStorage.PlayerAnimations.Isagi.Additional.BallEffects.DashVFX:Clone()
Effect.CFrame = humanoidRootPart.CFrame + humanoidRootPart.CFrame.LookVector
* -0.5
Effect.Orientation = humanoidRootPart.Orientation
for _, p in ipairs(Effect:GetDescendants()) do
if p:IsA("BasePart") then
p.Anchored = true
end
end
Effect.Parent = workspace.Folder
Debris:AddItem(Effect, 1.2)
task.wait(0)
Effect.A1.P2:Emit(5)
Effect.A1.P3:Emit(5)
Effect.A2.P2:Emit(5)
Effect.A2.P3:Emit(5)
animShoot:Play()
task.wait(0.2)
local Effect2 =
ReplicatedStorage.PlayerAnimations.Isagi.FirstMove.BallEffects.DirectShoot:Clone()
Effect2.CFrame = humanoidRootPart.CFrame +
humanoidRootPart.CFrame.LookVector * -0.5
Effect2.Orientation = humanoidRootPart.Orientation
for _, p in ipairs(Effect2:GetDescendants()) do
if p:IsA("BasePart") then
p.Anchored = true
end
end
Effect2.Parent = workspace.Folder
game.Debris:AddItem(Effect2, 1)
task.wait(0.1)
create("CantRecieve", Character, 2)
for _, w in ipairs(ball:GetChildren()) do
if w:IsA("WeldConstraint") or w:IsA("ManualWeld") then
w:Destroy()
end
end
ball.CanCollide = false
ball:SetNetworkOwner(nil)
ball.Position = humanoidRootPart.Position + Vector3.new(0, -2, 0)
SoundManager.PlaySound(game.ReplicatedStorage.PlayerAnimations["Isagi"].FirstMove.B
allEffects["direct shoot"], ball)
local direction = humanoidRootPart.CFrame.LookVector
local force = direction * shootPower + Vector3.new(0,
upwardPower, 0)
local bodyVelocity = Instance.new("BodyVelocity")
bodyVelocity.MaxForce = Vector3.new(math.huge, math.huge,
math.huge)
bodyVelocity.Velocity = force
bodyVelocity.Parent = ball
game.Debris:AddItem(bodyVelocity, 0.3)
task.wait(0.1)
ball.CanCollide = true
task.wait(0)
task.delay(hitboxDuration, function()
if conn then conn:Disconnect() end
if not hasShot then
warn("DirectShot: Ball did not touch hitbox")
humanoid.PlatformStand = false
if thinkanim and thinkanim.IsPlaying then
thinkanim:Stop()
end
end
end)
for _, p in ipairs(Effect2:GetDescendants()) do
if p:IsA("BasePart") then
p.Anchored = true
end
end
Effect2.Parent = workspace.Folder
game.Debris:AddItem(Effect2, 1)
task.wait(0.1)
for _, particle in ipairs(Effect2.Aura:GetChildren()) do
if particle:IsA("ParticleEmitter") then
particle:Emit(100)
end
end
local anim =
Character.Humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.I
sagi.FirstMove["Direct Shot"])
anim:Play()
create("Stunned", Character, 1)
create("Direct Shot", Character, 1)
create("Unrecievable", ball, 2)
create("CantRecieve", Character, 0.3)
task.wait(1)
if Character:FindFirstChild("HasBall") then
Character.HasBall:Destroy()
end
if Character.HumanoidRootPart:FindFirstChild("BallPossession") then
Character.HumanoidRootPart.BallPossession:Destroy()
end
module.DestroyCircle(Character)
ball.CanCollide = true
ball.Taken.Value = false
ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))
ball.CFrame = cframe * CFrame.new(0, -1, 0)
module.DestroyCircle(Character)
task.wait(7)
if Character:FindFirstChild("HasBall") then
Character.HasBall:Destroy()
end
if Character.HumanoidRootPart:FindFirstChild("BallPossession") then
Character.HumanoidRootPart.BallPossession:Destroy()
end
ball.CanCollide = true
local bv = Instance.new("BodyVelocity")
bv.Name = "MyDirectShotVelocity"
bv.Velocity = hrp.CFrame.LookVector * forwardPower + Vector3.new(0,
upwardPower, 0)
bv.MaxForce = Vector3.new(1e5, 1e5, 1e5)
bv.Parent = ball
game:GetService("Debris"):AddItem(bv, 0.3)
local effectTemplate =
ReplicatedStorage.PlayerAnimations.Chigiri.FirstMove.BallEffects.Speedster
local Effect = effectTemplate:Clone()
Debris:AddItem(Effect, 3)
local hitboxTemplate =
ReplicatedStorage:WaitForChild("Hitboxes"):WaitForChild("Biggerskillhitbox")
local hitbox = hitboxTemplate:Clone()
hitbox.CFrame = HRP.CFrame * CFrame.new(0, 0, -1)
hitbox.Anchored = false
hitbox.CanCollide = false
hitbox.Parent = workspace.Folder
local usageCount = 0
local maxUsage = 3
local lastTouchTime = 0
local connection
connection = hitbox.Touched:Connect(function(hit)
if tick() - lastTouchTime < 0.5 then return end
if hit.Name == "TestBall" or
hit:IsDescendantOf(workspace:FindFirstChild("TestBall")) then
lastTouchTime = tick()
usageCount += 1
Debris:AddItem(bodyVelocity, 0.6)
task.wait(3)
module.SpeedChanger(Character, -15, -20, -10, 0, 3)
Debris:AddItem(bodyVelocity, 0.4)
create("Stunned", Character, 1)
-- 4. SpeedChanger selama 0.7 detik
if module and module.SpeedChanger then
module.SpeedChanger(Character, 0, 30, 2, -2, 2)
end
task.wait(1)
create("Sprinting", Character, 1)
Humanoid:Move(lookVector, true)
end
hitbox.CFrame = HRP.CFrame
hitbox.Anchored = false
hitbox.Parent = folder
Debris:AddItem(hitbox, 0.4)
-- Maju ke depan
local forwardDistance = 15
local tweenInfo = TweenInfo.new(0.25, Enum.EasingStyle.Sine,
Enum.EasingDirection.Out)
local goal = {CFrame = HRP.CFrame * CFrame.new(0, 0, -forwardDistance)}
local tween = TweenService:Create(HRP, tweenInfo, goal)
tween:Play()
local bv = Instance.new("BodyVelocity")
bv.Velocity = HRP.CFrame.LookVector * 70 +
Vector3.new(0, 8, 0) -- Maju dan ke atas
bv.MaxForce = Vector3.new(1e5, 1e5, 1e5) -- Dorongan
di semua arah
bv.P = 1000
bv.Parent = ball
game.Debris:AddItem(bv, 0.2)
end
end)
end
local animation =
ReplicatedStorage.PlayerAnimations.Chigiri.SecondMove["Mach cut in"]
local effectTemplate =
ReplicatedStorage.PlayerAnimations.Chigiri.SecondMove.BallEffects.mach
local range = 20
local speed = 0.25
local forward = 30
Effect.Parent = workspace
-- Weld ke HRP
for _, part in ipairs(Effect:GetDescendants()) do
if part:IsA("BasePart") then
part.Anchored = false
local weld = Instance.new("WeldConstraint")
weld.Part0 = HRP
weld.Part1 = part
weld.Parent = part
end
end
Debris:AddItem(Effect, 0.2)
task.wait(1.2)
ball.CanCollide = true
ball.Taken.Value = false
ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))
ball.CFrame = cframe * CFrame.new(-4, -1, -2)
local force = mousepos * 100 + Vector3.new(0, 10, 0)
local bodyVelocity = Instance.new("BodyVelocity")
bodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bodyVelocity.Velocity = force
bodyVelocity.Parent = ball
spawn(function()
local curveDirection = -1
local curveStrength = 12
local switchTime = 5
local switchOccurred = false
local rise = true
local fall = false
for i = 1, 10 do
bodyVelocity.Velocity = bodyVelocity.Velocity +
ball.CFrame.RightVector * (curveDirection * curveStrength)
if rise == true then
bodyVelocity.Velocity = bodyVelocity.Velocity +
Vector3.new(0, 6, 0)
else
bodyVelocity.Velocity = bodyVelocity.Velocity -
Vector3.new(0, 2, 0)
end
if i == switchTime and not switchOccurred then
curveDirection = 1
switchOccurred = true
curveStrength = 17
rise = false
fall = true
print("swtch")
end
wait(0.05)
end
end)
game.Debris:AddItem(bodyVelocity, 0.7)
local cutin =
game.ReplicatedStorage.PlayerAnimations.Volta.FirstMove.BallEffects.Shoot:Clone()
cutin.Parent = workspace
cutin.CFrame = Character.HumanoidRootPart.CFrame * CFrame.new(5, 0, -
16)
task.spawn(function()
TypewriteManager:TypeWrite(cutin.BillboardGui.TextLabel, "SHOOT",
0.3)
end)
game.Debris:AddItem(cutin, 5)
local Info = TweenInfo.new(0.5, Enum.EasingStyle.Cubic,
Enum.EasingDirection.Out, 0, false, 0)
local Goals = { Size = UDim2.new(14, 0, 14, 0) }
local tween =
game:GetService("TweenService"):Create(cutin.BillboardGui, Info, Goals)
tween:Play()
task.wait(0.6)
local Info = TweenInfo.new(0.5, Enum.EasingStyle.Cubic,
Enum.EasingDirection.Out, 0, false, 0)
local Goals = { TextTransparency = 1, TextStrokeTransparency = 1 }
local tween =
game:GetService("TweenService"):Create(cutin.BillboardGui.TextLabel, Info, Goals)
tween:Play()
task.wait(.5)
ball.CanCollide = true
ball.Taken.Value = false
ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))
local force = mousepos * 90 + Vector3.new(0, 15, 0)
local bodyVelocity = Instance.new("BodyVelocity")
bodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bodyVelocity.Velocity = force
bodyVelocity.Parent = ball
spawn(function()
local curveIntensity = 5
local curveDuration = 0.3
local frames = 20
local frameInterval = curveDuration / frames
local initialRiseDuration = 0.2
local riseFrames = initialRiseDuration / frameInterval
local riseStrength = 1
local curveDirection = -1
task.wait(.25)
for i = 1, frames do
local progress = i / frames
local currentCurveStrength = curveIntensity * (1 - progress
^ 2)
bodyVelocity.Velocity = bodyVelocity.Velocity +
ball.CFrame.RightVector * (curveDirection * currentCurveStrength)
if i <= riseFrames then
bodyVelocity.Velocity = bodyVelocity.Velocity +
Vector3.new(0, riseStrength * (1 - progress), 0)
else
local fallProgress = (i - riseFrames) / (frames -
riseFrames)
bodyVelocity.Velocity = bodyVelocity.Velocity -
Vector3.new(0, riseStrength * 0.5 * fallProgress, 0)
end
task.wait(frameInterval)
end
end)
game.Debris:AddItem(bodyVelocity, 0.6)
SoundManager.PlaySound(game.ReplicatedStorage.PlayerAnimations.Analytical.SecondMov
e.AuraInduced, Character.Torso)
local fx3 =
game.ReplicatedStorage.PlayerAnimations.Analytical.SecondMove.Effects.ParticleEmitt
er:Clone()
fx3.Parent = impactpoint
local fx4 =
game.ReplicatedStorage.PlayerAnimations.Analytical.SecondMove.Effects.RESIDUE:Clone
()
fx4.Parent = impactpoint
local fx5 =
game.ReplicatedStorage.PlayerAnimations.Analytical.SecondMove.Effects.Impact:Clone(
)
fx5.Parent = impactpoint
task.delay(0.01, function()
fx3:Emit(fx4:GetAttribute("EmitCount"))
fx4:Emit(fx4:GetAttribute("EmitCount"))
fx5:Emit(fx5:GetAttribute("EmitCount"))
end)
game.Debris:AddItem(fx3, 5)
game.Debris:AddItem(fx4, 5)
game.Debris:AddItem(fx5, 5)
game.Debris:AddItem(impactpoint, 5)
for i, v in pairs(Character:GetChildren()) do
if v:IsA("BasePart") and v.Transparency == 0 then
local fx4 =
game.ReplicatedStorage.PlayerAnimations.Analytical.SecondMove.Effects.Aura:Clone()
fx4.Parent = v
task.delay(10, function()
fx4.Enabled = false
end)
game.Debris:AddItem(fx4, 15)
end
end
elseif move == "Cut In" then
local anim =
Character.Humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.Y
ukimiya.SecondMove["Cut In"])
anim:Play()
task.wait(0.6)
task.wait(0.5)
SoundManager.PlaySound(game.ReplicatedStorage.PlayerAnimations["Kaiser"].FirstMove.
BallEffects.Sound, ball)
create("Stunned", Character, 1)
create("Kaiser Impact", Character, 25)
create("Unrecievable", ball, 2)
create("CantRecieve", Character, 0.3)
task.wait(0.60)
if Character:FindFirstChild("HasBall") then
Character.HasBall:Destroy()
end
if Character.HumanoidRootPart:FindFirstChild("BallPossession") then
Character.HumanoidRootPart.BallPossession:Destroy()
end
if Character:FindFirstChild("OwnHL") then
Character.OwnHL:Destroy()
end
ball.CanCollide = true
ball.Taken.Value = false
ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))
ball.CFrame = cframe * CFrame.new(0, -2, 0)
local anim =
Character.Humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.A
iku.FirstMove["Eagle Eye"])
task.delay(0, function()
if ball and rootPart then
ball.Position = rootPart.Position +
Vector3.new(0, 2, 0)
end
end)
task.delay(3, function()
if bodyPos and bodyPos.Parent then
bodyPos:Destroy()
end
if humanoid then
humanoid.PlatformStand = false
anim:Stop()
end
if snakeEffect and snakeEffect.Parent then
snakeEffect:Destroy()
end
end)
end
end
anim:Play()
SoundManager.PlaySound(game.ReplicatedStorage.Effects.Kick,
Character.HumanoidRootPart)
task.wait(0.7)
if Character:FindFirstChild("HasBall") then
Character.HasBall:Destroy()
end
if Character.HumanoidRootPart:FindFirstChild("BallPossession") then
Character.HumanoidRootPart.BallPossession:Destroy()
end
if Character:FindFirstChild("OwnHL") then
Character.OwnHL:Destroy()
end
ball.CanCollide = true
ball.Taken.Value = false
ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))
ball.CFrame = Character.HumanoidRootPart.CFrame * CFrame.new(0, -1.5, -
2)
EffectsManager.Kick(Character)
task.wait(0.2)
local dashRange = 70
local dashSpeed = 100 -- Kecepatan dalam studs per detik
local turnRadius = 30
local trailDuration = 1 -- Durasi trail aktif
local totalTime = dashRange / dashSpeed -- Durasi total gerakan
berdasarkan jarak dan kecepatan
local anim =
animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.Sae.FirstMove["Perfe
ct Touch"])
anim:Play()
create("Stunned", Character, 0.8)
create("Magic Turn", Character, 5)
create("CantRecieve", Character, 0.3)
create("CantShoot", Character, 1.2)
local P0 = startPos
local P1 = startPos + forward * (dashRange * 0.3) + right * turnRadius
-- Hanya ke kanan
local P2 = startPos + forward * (dashRange * 0.7) + right * turnRadius
-- Hanya ke kanan
local P3 = startPos + forward * dashRange
startTrailDuring(trailDuration, 1.1)
if t >= 1 then
hrp.CFrame = CFrame.lookAt(hrp.Position, hrp.Position +
forward)
anim:Stop()
connection:Disconnect()
end
end)
SoundManager.PlaySound(game.ReplicatedStorage.PlayerAnimations["Kunigami"].FirstMov
e.BallEffects.Sound, ball)
create("Stunned", Character, 1)
create("Mid Range Shot", Character, 25)
create("Unrecievable", ball, 2)
create("CantRecieve", Character, 0.3)
task.wait(0.60)
if Character:FindFirstChild("HasBall") then
Character.HasBall:Destroy()
end
if Character.HumanoidRootPart:FindFirstChild("BallPossession") then
Character.HumanoidRootPart.BallPossession:Destroy()
end
if Character:FindFirstChild("OwnHL") then
Character.OwnHL:Destroy()
end
ball.CanCollide = true
ball.Taken.Value = false
ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))
ball.CFrame = cframe * CFrame.new(0, -2, 0)
local cloneStartTime = 0
local cloneEndTime = 0.5
local cloneDuration = cloneEndTime - cloneStartTime
local animPath =
game.ReplicatedStorage.PlayerAnimations.Bachira.FirstMove:FindFirstChild("Steal")
if not animPath then return end
local anim = animator:LoadAnimation(animPath)
anim:Play()
EffectsManager.Slide(Character)
task.delay(cloneStartTime, function()
startTrailDuring(cloneDuration, 1.1)
end)
task.wait(1)
anim:Stop()
local anim =
Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.Bachira.Additional.N
utmeg_attempt)
anim:Play()
create("Stunned", Character, 3)
create("CantRecieve", Character, 1)
create("Unrecievable", Character, 1)
local hitboxTemplate =
game.ReplicatedStorage.Hitboxes:FindFirstChild("Biggerskillhitbox")
if not hitboxTemplate then
warn("Missing hitbox template in ReplicatedStorage.Hitboxes")
return
end
local hb = hitboxTemplate:Clone()
hb.Size = Vector3.new(6, 6, 6)
hb.CFrame = HRP.CFrame * CFrame.new(0, 0, 0)
hb.Anchored = false
hb.CanCollide = false
hb.CanTouch = true
hb.Transparency = 0.3
hb.Name = "NutmegHitbox"
hb.Parent = workspace
task.delay(1.5, function()
if hb and hb.Parent then
hb:Destroy()
print("Hitbox destroyed after timeout")
end
end)
hb.Touched:Connect(function(hit)
if touched then return end
print("Hitbox touched:", hit.Name, hit.Parent.Name)
local enemyChar = hit:FindFirstAncestorOfClass("Model")
if not enemyChar or enemyChar == Character then
print("Invalid enemyChar or same as Character")
return
end
local enemyPlayer =
game.Players:GetPlayerFromCharacter(enemyChar)
if not enemyPlayer then
print("No enemy player found")
return
end
if not module.IsDifferentTeam(player, enemyPlayer) then
print("Same team, ignoring")
return
end
touched = true
if hb and hb.Parent then
hb:Destroy()
print("Hitbox destroyed after valid hit")
end
local successAnim =
Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.Bachira.FirstMove.Nu
tmeg)
successAnim:Play()
anim:Stop()
create("Stunned", enemyChar, 2)
task.wait(1)
if Character:FindFirstChild("HasBall") then
Character.HasBall:Destroy()
end
if Character.HumanoidRootPart:FindFirstChild("BallPossession")
then
Character.HumanoidRootPart.BallPossession:Destroy()
end
if ball then
if Character:FindFirstChild("Stunned") then
Character.Stunned:Destroy()
end
ball.CanCollide = true
end
task.delay(0.5, function()
local dashAnim =
Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.Bachira.Additional.N
utmeg_Dash)
successAnim:Stop()
ball.Taken.Value = false
dashAnim.Looped = true
dashAnim:Play()
local bv = Instance.new("BodyVelocity")
bv.MaxForce = Vector3.new(1, 0.5, 1) * 1e5
bv.Velocity = HRP.CFrame.LookVector * 100
bv.P = 1e4
bv.Name = "NutmegDash"
bv.Parent = HRP
game.Debris:AddItem(bv, 0.5)
module.DestroyCircle(Character)
create("RouletteReady", Character, 2)
task.delay(1, function()
dashAnim:Stop()
end)
end)
end)
if not HRP or not Humanoid or not Animator or not player then return
end
local hb = hitbox:Clone()
hb.Size = Vector3.new(6, 6, 6)
hb.CFrame = HRP.CFrame
hb.Anchored = false
hb.CanCollide = false
hb.CanTouch = true
hb.Transparency = 0.3
hb.Parent = workspace
end
end)
task.delay(1.5, function()
if hb and hb.Parent then hb:Destroy() end
end)
if not HRP or not Humanoid or not Animator or not ball then return end
task.delay(1, function()
dashAnim:Stop()
end)
end)
elseif move == "PassTest" then
local success, err = pcall(function()
module.Pass(Character)
end)
if not success then
warn("Error in PassTest:", err)
end
create("Trap", Character, 1)
create("CantHeader", Character, 1)
SoundManager.PlaySound(game.ReplicatedStorage.PlayerAnimations.Nagi.BallEffects.Sou
nd, ball)
ball.Taken.Value = true
ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))
module.RecieveBall(Character, ball) -- Asumsikan
module.RecieveBall tersedia
-- Logika untuk mereset ukuran hitbox dan memutuskan koneksi jika Trap
tidak terjadi
task.spawn(function()
task.wait(airDuration + 0.3) -- Tunggu sampai skill berakhir
if hitbox then
hitbox.Size = originalHitboxSize -- Kembalikan ukuran
hitbox
end
local animPath =
game.ReplicatedStorage.PlayerAnimations.Nagi.SecondMove:FindFirstChild("Fake
Volley")
if not animPath then return end
local anim = animator:LoadAnimation(animPath)
anim:Play()
task.delay(0.8, function()
anim:Stop()
end)
create("Stunned", Character, 1)
create("Direct Shot", Character, 1)
create("Unrecievable", ball, 2)
create("CantRecieve", Character, 0.3)
task.wait(0.1)
if Character:FindFirstChild("HasBall") then
Character.HasBall:Destroy()
end
if Character.HumanoidRootPart:FindFirstChild("BallPossession") then
Character.HumanoidRootPart.BallPossession:Destroy()
end
if Character:FindFirstChild("OwnHL") then
Character.OwnHL:Destroy()
end
task.wait(0.3)
SoundManager.PlaySound(game.ReplicatedStorage.PlayerAnimations["Nagi"].ThirdMove.Ba
llEffects.Sound, ball)
ball.CanCollide = true
ball.Taken.Value = false
ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))
ball.CFrame = cframe * CFrame.new(0, -1, 0)
-- Parameter skill
local jumpHeight = 70
local anchorDelay = 0.5
local anchorDuration = 1
local ballShootPower = 50
local upwardBoostFactor = 0.2 -- seberapa tinggi bola melambung
local skillDuration = 1
-- Mainkan animasi
local anim = humanoid.Animator:LoadAnimation(
game.ReplicatedStorage.PlayerAnimations.Nagi.ThirdMove["Jumping
Volley"]
)
anim:Play()
task.wait(0.3)
local wc = Instance.new("WeldConstraint")
wc.Part0 = hrp
wc.Part1 = hitbox
wc.Parent = hitbox
game.Debris:AddItem(hitbox, 0.4)
SoundManager.PlaySound(
game.ReplicatedStorage.PlayerAnimations["Nagi"].ThirdMove.BallEffects.Sound,
ball
)
ball.Taken.Value = false
ball:SetNetworkOwner(nil)
ball.CanCollide = true
create("CantRecieve", Character, 1)
task.delay(0.1, function()
create("CantRecieve", Character, 0)
end)
task.delay(0.3, function()
local Hitbox = Instance.new("Part")
Hitbox.Name = "Hitbox"
Hitbox.Size = Vector3.new(30, 30, 30)
Hitbox.Position = rootPart.Position
Hitbox.Anchored = false
Hitbox.CanCollide = true
Hitbox.Transparency = 0
Hitbox.Parent = Character
local weld = Instance.new("WeldConstraint")
weld.Part0 = rootPart
weld.Part1 = Hitbox
weld.Parent = Hitbox
local connection
connection = Hitbox.Touched:Connect(function(hit)
if hit == ball then
connection:Disconnect()
if bp then
bp:Destroy()
end
task.delay(0.2, function()
create("Unrecievable", ball, 2)
if Character:FindFirstChild("HasBall") then
Character.HasBall:Destroy()
end
if rootPart:FindFirstChild("BallPossession")
then
rootPart.BallPossession:Destroy()
end
if Character:FindFirstChild("OwnHL") then
Character.OwnHL:Destroy()
end
local ballHitbox =
ball:FindFirstChild("Hitbox")
if ballHitbox then
ballHitbox.CanCollide = false
end
ball.CanCollide = true
ball.Taken.Value = false
ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))
ball.CFrame = rootPart.CFrame * CFrame.new(0, -
1, 0)
local dir = (mousepos - rootPart.Position).Unit
* shootPower
local bvShoot = Instance.new("BodyVelocity")
bvShoot.Velocity = dir
bvShoot.MaxForce = Vector3.new(math.huge,
math.huge, math.huge)
bvShoot.Parent = ball
game.Debris:AddItem(bvShoot, skillDuration)
local sfx =
game.ReplicatedStorage.PlayerAnimations.Nagi.ThirdMove:FindFirstChild("BallEffects"
)
if sfx then
SoundManager.PlaySound(sfx.Sound, ball)
end
task.delay(0.4, function()
if ball then
ball.CanCollide = true
if ballHitbox then
ballHitbox.CanCollide = true
end
end
end)
end)
end
end)
task.delay(0.4, function()
if Hitbox then
Hitbox:Destroy()
end
end)
end)
task.delay(animDuration, function()
anim:Stop()
end)
-- Parameter
local UpwardPower = 25
local SidePower = -30
local DownwardPower = -1
local ForwardPower = 100
local BezierSpeed = 0.0000000000000001
local steps = 50
-- Trajectory bezier
local StartPos = ball.Position
local ForwardDir = (mousepos * Vector3.new(1, 0, 1)).Unit
local RightDir = Vector3.new(-ForwardDir.Z, 0, ForwardDir.X)
local P0 = StartPos
local P1 = StartPos + ForwardDir * (ForwardPower * 0.3) + RightDir *
SidePower + Vector3.new(0, UpwardPower, 0)
local P2 = StartPos + ForwardDir * (ForwardPower * 0.7) + RightDir *
(SidePower * 0.5) + Vector3.new(0, UpwardPower * 0.5, 0)
local P3 = StartPos + ForwardDir * ForwardPower + Vector3.new(0,
DownwardPower, 0)
SoundManager.PlaySound(game.ReplicatedStorage.PlayerAnimations.Sae.SecondMove.BallE
ffects.Sound, ball)
ball.CanCollide = true
ball.Taken.Value = false
ball:SetNetworkOwner(nil)
-- Bezier movement
coroutine.wrap(function()
for i = 1, steps do
local t = i / steps
local a = P0:Lerp(P1, t)
local b = P1:Lerp(P2, t)
local c = P2:Lerp(P3, t)
local d = a:Lerp(b, t)
local e = b:Lerp(c, t)
local pos = d:Lerp(e, t)
ball.Position = pos
task.wait(BezierSpeed)
end
create("Stunned", Character, 1)
create("Direct Shot", Character, 10)
create("Unrecievable", ball, 2)
create("CantRecieve", Character, 0.3)
end
return module