0% found this document useful (0 votes)
72 views52 pages

Adada

The document is a Lua script for a game that manages ball interactions and player actions, including shooting, flicking, and tackling. It utilizes various game services and modules to create effects, manage player stamina, and handle ball possession. The script also includes functions for creating visual effects and managing player states during gameplay.

Uploaded by

atharrashid2008
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
72 views52 pages

Adada

The document is a Lua script for a game that manages ball interactions and player actions, including shooting, flicking, and tackling. It utilizes various game services and modules to create effects, manage player stamina, and handle ball possession. The script also includes functions for creating visual effects and managing player states during gameplay.

Uploaded by

atharrashid2008
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 52

local Events = game.

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 = {}

local function makeimpactpoint(cframe, timefor)


local impactpoint = Instance.new("Part", workspace)
impactpoint.Transparency = 1
impactpoint.CanCollide = false
impactpoint.CanTouch = false
impactpoint.CanQuery = false
impactpoint.Massless = true
impactpoint.Anchored = true
impactpoint.CFrame = cframe
game.Debris:AddItem(impactpoint, timefor)
return impactpoint
end

local function create(cName, parent, lifetime)


local new = Instance.new("Folder")
new.Name = cName
new.Parent = parent
if lifetime then
Debris:AddItem(new, lifetime)
end
return new
end

local function CheckConditions(Character: Model, StamReq, stamina)


if Character:FindFirstChild("Stunned") or Character:FindFirstChild("Stagger")
and stamina < StamReq then
return true
end
return false
end

function module.ShootBall(Character, mousepos, power, cframe, stamina)


if Character:FindFirstChild("HasBall") then
local ball = workspace.TestBall
module.DestroyCircle(Character)
create("Unrecievable", ball, 0.6)
local dampingFactor = 0.99
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
create("SlowDown", Character, 0.1)
create("CantShoot", Character, 0.3)
create("Shoot", ball, 55)
SoundManager.PlaySound(game.ReplicatedStorage.Effects.Kick,
Character.HumanoidRootPart)

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)

create("CantRecieve", Character, 0.3)


end
end

function module.Flick(Character, look, power, cframe, stamina)


if CheckConditions(Character, 10, stamina) == false and not
Character:FindFirstChild("CantShoot") then
create("CantRecieve", Character, 0.6)
create("CantHeader", Character, 1)
create("SlowJump", Character ,1)
create("CantFlick", Character, 2)
create("CantRegen", Character, 1)
local dampingFactor = 0.99
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

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

function module.HeaderBall(Character, mousepos, power, cframe, stamina)


if CheckConditions(Character, 10, stamina) == false and not
Character:FindFirstChild("CantHeader") then
create("CantRegen", Character, 1)
create("CantRecieve", Character, 0.5)
create("CantHeader", Character, 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
SoundManager.PlaySound(game.ReplicatedStorage.Effects.Kick,
Character.Head)
local ball = workspace.TestBall
ball.CanCollide = true
ball.Taken.Value = false
ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))
ball.CFrame = cframe * CFrame.new(0, 4, -4)
EffectsManager.Header(Character)
local force = mousepos * power
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.2)
end
end

function module.RecieveBall(Character, ball)


local player = game.Players:GetPlayerFromCharacter(Character) -- 🔹 Deklarasi
player

create("CantRecieve", Character, 0.5)

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)

ball:SetNetworkOwner(player)
module.CirclePossession(player, ball)

ball.CanCollide = false
ball.Taken.Value = true

local value = Instance.new("BoolValue", Character)


value.Name = "HasBall"
value.Value = true
value.Parent = Character
end
function module.BallWeld(Character, ball, duration)
create("CantRecieve", Character, 0.5)

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)

ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))

ball.CanCollide = false
ball.Taken.Value = true

local value = Instance.new("BoolValue", Character)


value.Name = "HasBall"
value.Value = true

-- Durasi untuk auto lepas bola


task.delay(duration or 5, function()
if motor6d and motor6d.Parent then
motor6d:Destroy()
end

local hasBall = Character:FindFirstChild("HasBall")


if hasBall then
hasBall:Destroy()
end

local hl = Character:FindFirstChild("OwnHL")
if hl then
hl:Destroy()
end

if ball then
ball.Taken.Value = false
ball.CanCollide = true
end
end)
end

function module.MultiAnim(Character, EnCharacter, offset, teleportDuration)


assert(Character and EnCharacter, "Character & EnCharacter required")
assert(typeof(offset) == "Vector3", "offset must be Vector3")
assert(type(teleportDuration) == "number", "teleportDuration must be number")

local root = Character:FindFirstChild("HumanoidRootPart")


local eroot = EnCharacter:FindFirstChild("HumanoidRootPart")
assert(root and eroot, "Missing HumanoidRootPart")

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 = root.CFrame * CFrame.new(offset)

eroot.CFrame = CFrame.new(
eroot.Position,
Vector3.new(root.Position.X, eroot.Position.Y, root.Position.Z)
)

return true
end

function module.Dribble(Character, stamina)


if CheckConditions(Character, 10, stamina) == false and not
Character:FindFirstChild("CantDribble") then
create("CantRegen", Character, 1)
create("Dribbling", Character, 0.6)
create("CantDribble", Character, 2)
end
end

function module.Block(character, ball)


if not character or not ball then return end

-- Cek apakah bola punya folder "Shoot"


if ball:FindFirstChild("Shoot") then
print("✅ Block successful")

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

function module.Tackle(Character, lookpos, cframe, stamina)


if CheckConditions(Character, 15, stamina) == false then
create("Tackling", Character, 0.6)
create("CantRegen", Character, 1)
create("CantTackle", Character, 2)
create("CantMove", Character, 1)
EffectsManager.Slide(Character)
local direction = lookpos
local v = Instance.new("BodyVelocity", Character.HumanoidRootPart)
v.MaxForce = Vector3.new(999999, 999999, 999999)
v.Velocity = lookpos * 90
game.Debris:AddItem(v, 1)
local tweenInfo = TweenInfo.new(1, Enum.EasingStyle.Cubic,
Enum.EasingDirection.Out)
local goal = { Velocity = Vector3.new(0, 0, 0) }
local tween = game.TweenService:Create(v, tweenInfo, goal)
tween:Play()

local AO = Instance.new("AlignOrientation", Character.HumanoidRootPart)


AO.Attachment0 = Character.HumanoidRootPart.RootAttachment
AO.Mode = Enum.OrientationAlignmentMode.OneAttachment
AO.MaxTorque = math.huge
AO.CFrame = cframe
AO.Responsiveness = 200
game.Debris:AddItem(AO, 1)

end
end
local ReplicatedStorage = game:GetService("ReplicatedStorage")

function module.CirclePossession(player, ball)


if not player or not player.Character or not ball then return end

local team = player.Team


if not team then return end

local Character = player.Character


local HRP = Character:FindFirstChild("HumanoidRootPart")
if not HRP then return end

-- Hapus circle lama jika ada


local existing = HRP:FindFirstChild("PossessionCircle")
if existing then
existing:Destroy()
end

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

-- Tempel ke bawah HRP (offset Y = -2)


circle.CFrame = HRP.CFrame * CFrame.new(0, -2.6, 0)
circle.Parent = HRP

local weld = Instance.new("WeldConstraint")


weld.Part0 = HRP
weld.Part1 = circle
weld.Parent = circle
end

function module.DestroyCircle(character)
if not character then return end

local HRP = character:FindFirstChild("HumanoidRootPart")


if not HRP then return end

local existing = HRP:FindFirstChild("PossessionCircle")


if existing then
existing:Destroy()
end
end

function module.Take(Character, enCharacter)


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local TeamTackle =
ReplicatedStorage:WaitForChild("Values"):WaitForChild("TeamTackle")

-- Ambil nama tim dari player


local function getTeam(character)
local player = Players:GetPlayerFromCharacter(character)
if player then
local teamFolder = player:FindFirstChild("Team")
if teamFolder then
for _, v in pairs(teamFolder:GetChildren()) do
if v:IsA("BoolValue") and v.Value == true then
return v.Name
end
end
end
end
return nil
end

local teamA = getTeam(Character)


local teamB = getTeam(enCharacter)

if not teamA or not teamB then return end


if teamA == teamB and not TeamTackle.Value then return end

-- Target tidak dribbling: ambil bola


if not enCharacter:FindFirstChild("Dribbling") and CheckConditions(Character)
== false then
local ball = workspace:WaitForChild("TestBall")

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)

local value = Instance.new("BoolValue", Character)


value.Name = "HasBall"
value.Value = true

ball:SetNetworkOwner(Players:GetPlayerFromCharacter(Character))
EffectsManager.Kick(Character)

-- Ganti Highlight → CirclePossession


local player = Players:GetPlayerFromCharacter(Character)
if player then
module.CirclePossession(player, ball)
end

enCharacter.IsRagdoll.Value = true
enCharacter.Humanoid.PlatformStand = true

create("CantRecieve", Character, 0.5)


create("Stunned", enCharacter, 2)

task.wait(2)
enCharacter.IsRagdoll.Value = false
enCharacter.Humanoid.PlatformStand = false

-- Target sedang dribbling → takedown


elseif enCharacter:FindFirstChild("Dribbling") and CheckConditions(Character)
== false then
local Highlight = Instance.new("Highlight", Character)
Highlight.Adornee = Character
Highlight.OutlineTransparency = 1
Highlight.DepthMode = Enum.HighlightDepthMode.Occluded
Highlight.FillTransparency = 0.65
Highlight.FillColor = Color3.new(1, 0, 0)
game.Debris:AddItem(Highlight, 2)

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 module.IsDifferentTeam(player1, player2)


if not player1 or not player2 then
warn("Invalid player1 or player2")
return false
end

local team1Folder = player1:FindFirstChild("Team")


local team2Folder = player2:FindFirstChild("Team")
if not team1Folder or not team2Folder then
warn("Team folder not found for player1 or player2")
return false
end

local team1 = team1Folder:FindFirstChild("Home") or


team1Folder:FindFirstChild("Away")
local team2 = team2Folder:FindFirstChild("Home") or
team2Folder:FindFirstChild("Away")
if not team1 or not team2 then
warn("Home or Away BoolValue not found in Team folder")
return false
end

return team1.Name ~= team2.Name


end

function module.HitboxMaker(name, size, transparency, canCollide)


local hitbox = Instance.new("Part")
hitbox.Name = name or "CustomHitbox"
hitbox.Size = size or Vector3.new(10, 10, 10)
hitbox.Transparency = transparency or 0.5
hitbox.CanCollide = canCollide or false
hitbox.Anchored = false
return hitbox
end

function module.SkillMultiplayer(Character, enCharacter, offset, time, hasBall)


if not Character or not Character.Parent or not enCharacter or not
enCharacter.Parent then
warn("SkillMultiplayer: Invalid Character or enCharacter")
return
end

local humanoid = Character:FindFirstChild("Humanoid")


local humanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
local enHumanoid = enCharacter:FindFirstChild("Humanoid")
local enHumanoidRootPart = enCharacter:FindFirstChild("HumanoidRootPart")
if not humanoid or not humanoidRootPart or not enHumanoid or not
enHumanoidRootPart then
warn("SkillMultiplayer: Missing Humanoid or HumanoidRootPart")
return
end

-- Weld Character ke enCharacter dengan offset dari parameter


local motor6d = Instance.new("Motor6D")
motor6d.Part0 = humanoidRootPart
motor6d.Part1 = enHumanoidRootPart
motor6d.C0 = CFrame.new(offset or Vector3.new(2, 0, 0))
motor6d.C1 = CFrame.new()
motor6d.Name = "SkillMotor6D"
motor6d.Parent = humanoidRootPart
local durasi = typeof(time) == "number" and time or 2
game.Debris:AddItem(motor6d, durasi)
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

local rootClone = clone:FindFirstChild("HumanoidRootPart")


if rootClone then
clone:SetPrimaryPartCFrame(humanoidRootPart.CFrame)
end

for _, part in ipairs(clone:GetDescendants()) do


if part:IsA("BasePart") then
local tween = TweenService:Create(part,
TweenInfo.new(0.4), { Transparency = 1 })
tween:Play()
end
end

game.Debris:AddItem(clone, 0.5)
end)
end
end

function module.CamWeld(character, duration)


local hrp = character:FindFirstChild("HumanoidRootPart")
if not hrp then return end
local camTemplate = ReplicatedStorage:FindFirstChild("Cam")
if not camTemplate then return end

local camBasePart = camTemplate:IsA("BasePart") and camTemplate or


camTemplate:FindFirstChildWhichIsA("BasePart")
if not camBasePart then return end

local camClone = camBasePart:Clone()


camClone.Anchored = false
camClone.CanCollide = false
camClone.CFrame = hrp.CFrame
camClone.Name = "Cam"
camClone.Parent = character

local motor = Instance.new("Motor6D")


motor.Name = "CamMotor"
motor.Part0 = hrp
motor.Part1 = camClone
motor.C0 = CFrame.new(0, 0, 0)
motor.Parent = hrp

-- 🔥 Fire client to all players to attach their camera


local event = ReplicatedStorage:FindFirstChild("CamWeldEvent")
if event then
event:FireAllClients(camClone, duration)
end

-- Cleanup after duration


task.delay(duration, function()
if camClone and camClone.Parent then
camClone:Destroy()
end
if motor and motor.Parent then
motor:Destroy()
end
end)
end

function module.SpeedChanger(Character, WalkSpeedBoost, RunningSpeedBoost,


MaxStaminaDelta, RunningReductionDelta, Duration)
local baseWalkSpeed = Attributes:WaitForChild("baseWalkSpeed")
local runningSpeed = Attributes:WaitForChild("runningSpeed")
local maxStamina = Character:WaitForChild("Stamina")
local runReduction = Attributes:WaitForChild("runningReductionWhenHasBall")

local originalWalk = baseWalkSpeed.Value


local originalRun = runningSpeed.Value
local originalMaxStamina = maxStamina.Value
local originalRunReduction = runReduction.Value

local goalWalk = originalWalk + WalkSpeedBoost


local goalRun = originalRun + RunningSpeedBoost
local goalRunReduction = originalRunReduction + RunningReductionDelta

local tweenInfo = TweenInfo.new(Duration, Enum.EasingStyle.Sine,


Enum.EasingDirection.Out)
local walkTween = TweenService:Create(baseWalkSpeed, tweenInfo, {Value =
goalWalk})
local runTween = TweenService:Create(runningSpeed, tweenInfo, {Value =
goalRun})
local reductionTween = TweenService:Create(runReduction, tweenInfo, {Value =
goalRunReduction})

walkTween:Play()
runTween:Play()
reductionTween:Play()

print("SpeedChanger Started")

local startTime = tick()


local stop = false

-- Perbarui stamina manual setiap frame (bukan tween)


task.spawn(function()
while tick() - startTime < Duration and not stop do
local elapsed = tick() - startTime
local alpha = math.clamp(elapsed / Duration, 0, 1)
local target = originalMaxStamina + MaxStaminaDelta
maxStamina.Value = originalMaxStamina + (target -
originalMaxStamina) * alpha

if maxStamina.Value <= 0 then


stop = true
break
end

task.wait()
end

-- Revert jika belum dilakukan


local revertTweenInfo = TweenInfo.new(0.3, Enum.EasingStyle.Sine,
Enum.EasingDirection.In)
TweenService:Create(baseWalkSpeed, revertTweenInfo, {Value =
originalWalk}):Play()
TweenService:Create(runningSpeed, revertTweenInfo, {Value =
originalRun}):Play()
TweenService:Create(runReduction, revertTweenInfo, {Value =
originalRunReduction}):Play()
TweenService:Create(maxStamina, revertTweenInfo, {Value =
originalMaxStamina}):Play()

print("SpeedChanger Reverted")
end)
end

function module.Dash(Character, DashDistance, DashTime)


local HRP = Character:FindFirstChild("HumanoidRootPart")
local Humanoid = Character:FindFirstChild("Humanoid")
if not HRP or not Humanoid then return end

local direction = Humanoid.MoveDirection


if direction.Magnitude == 0 then
direction = HRP.CFrame.LookVector -- fallback kalau nggak ada input
end
local dashGoal = HRP.Position + direction.Unit * DashDistance

local tweenInfo = TweenInfo.new(


DashTime,
Enum.EasingStyle.Linear,
Enum.EasingDirection.Out
)

local goal = {Position = dashGoal}


local tween = TweenService:Create(HRP, tweenInfo, goal)

Humanoid.AutoRotate = false
tween:Play()

tween.Completed:Connect(function()
Humanoid.AutoRotate = true
end)
end

function module.Trapping(character, ball)


if not character or not ball then return end

local hrp = character:FindFirstChild("HumanoidRootPart")


if not hrp then return end

-- Cek apakah bola punya folder "Shoot"


if ball:FindFirstChild("Shoot") then
print("✅ Block successful")

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

function module.Move(move, Character, mousepos, cframe, stamina)


if move == "Direct Shot" then
local ball = workspace:FindFirstChild("TestBall")
if not Character or not Character.Parent or not ball then
warn("DirectShot: Invalid Character or TestBall")
return
end

local humanoid = Character:FindFirstChild("Humanoid")


local humanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
if not humanoid or not humanoidRootPart then
warn("DirectShot: Missing Humanoid or HumanoidRootPart")
return
end

local TweenService = game:GetService("TweenService")


local Debris = game:GetService("Debris")

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

create("CantRecieve", Character, 1.2)


create("Direct Shot", Character, 1)

-- 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)

local weld = Instance.new("WeldConstraint")


weld.Part0 = humanoidRootPart
weld.Part1 = Effect
weld.Parent = Effect
Debris:AddItem(weld, 1.2)
module.SpeedChanger(Character,5,8,2,0,1)
local hitbox = game.ReplicatedStorage.Hitboxes.DirectShoot:Clone()
hitbox.Parent = workspace
Debris:AddItem(hitbox, hitboxDuration)

local weldHB = Instance.new("Weld", hitbox)


weldHB.Part0 = humanoidRootPart
weldHB.Part1 = hitbox

local hasShot = false


local conn
conn = hitbox.Touched:Connect(function(part)
if part == ball and not hasShot then
hasShot = true
conn:Disconnect()

module.BallWeld(Character, ball, 0.3)


create("Stunned", Character, 0.7)

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)

for _, particle in ipairs(Effect2.Attachment:GetChildren()) do


if particle:IsA("ParticleEmitter") then
particle:Emit(1)
end
end
for _, particle in ipairs(Effect2.A:GetChildren()) do
if particle:IsA("ParticleEmitter") then
particle:Emit(1)
end
end
end
end)

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)

elseif move == "Dash" then


local humanoidRootPart = Character.HumanoidRootPart
local ball = workspace.TestBall
local anim =
Character.Humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.I
sagi.SecondMove["Dash"])
anim:Play()

create("Stunned", Character, 0.4)


create("Dash", Character, 1)
local Effect2 =
ReplicatedStorage.PlayerAnimations.Isagi.SecondMove.BallEffects.Dash:Clone()
Effect2.CFrame = humanoidRootPart.CFrame +
humanoidRootPart.CFrame.LookVector
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)
for _, particle in ipairs(Effect2.Aura:GetChildren()) do
if particle:IsA("ParticleEmitter") then
particle:Emit(100)
end
end

for _, particle in ipairs(Effect2.A:GetChildren()) do


if particle:IsA("ParticleEmitter") then
particle:Emit(5)
end
end
for _, particle in ipairs(Effect2.A1:GetChildren()) do
if particle:IsA("ParticleEmitter") then
particle:Emit(5)
end
end

local weld = Instance.new("WeldConstraint")


weld.Part0 = humanoidRootPart
weld.Part1 = Effect2
weld.Parent = Effect2
Debris:AddItem(weld, 1.2)

local bodyVelocity = Instance.new("BodyVelocity")


bodyVelocity.MaxForce = Vector3.new(1, 0, 1) * 50000
bodyVelocity.Velocity = Character.HumanoidRootPart.CFrame.LookVector *
150
bodyVelocity.P = 1150
bodyVelocity.Parent = Character.HumanoidRootPart
game.Debris:AddItem(bodyVelocity, .3)

elseif move == "Direct Shoot" then


local ball = workspace.TestBall

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)

-- VFX MULAI DI SINI


local Effect =
game.ReplicatedStorage.PlayerAnimations.Isagi.FirstMove.BallEffects.DirectShoot:Clo
ne()
Effect.CFrame = Character.HumanoidRootPart.CFrame * CFrame.new(0, 0, -
3)
Effect.Orientation = Character.HumanoidRootPart.Orientation
for _, p in ipairs(Effect:GetDescendants()) do
if p:IsA("BasePart") then
p.Anchored = true
end
end
Effect.Parent = workspace.Folder
game.Debris:AddItem(Effect, 1)
task.wait(0)
for _, particle in ipairs(Effect.A:GetChildren()) do
if particle:IsA("ParticleEmitter") then
particle:Emit(1)
end
end

for _, particle in ipairs(Effect.Attachment:GetChildren()) do


if particle:IsA("ParticleEmitter") then
particle:Emit(1)
end
end

ball.CanCollide = true
ball.Taken.Value = false
ball:SetNetworkOwner(game.Players:GetPlayerFromCharacter(Character))
ball.CFrame = cframe * CFrame.new(0, -1, 0)

local force = mousepos * 110 + 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
game.Debris:AddItem(bodyVelocity, 0.3)

elseif move == "My Direct Shot" then


local hrp = Character:FindFirstChild("HumanoidRootPart")
local humanoid = Character:FindFirstChildWhichIsA("Humanoid")
local ball = workspace:FindFirstChild("TestBall") -- atau ball yang
relevan

local upwardPower = 30 -- ⬆️ Sesuaikan parameter ini


local forwardPower = 100 -- ➡️ Sesuaikan parameter ini

if not (hrp and humanoid and ball) then return end

-- Mainkan animasi Awakening


create("CantRecive", Character,2)
create("Stunned", Character,7)
local animFolder =
ReplicatedStorage:WaitForChild("PlayerAnimations"):WaitForChild("Isagi"):WaitForChi
ld("Awakening")
local anim = humanoid:LoadAnimation(animFolder:WaitForChild("My Direct
Shot"))
anim:Play()
module.CamWeld(Character,7)

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)

elseif move == "Speedster" then


print("Rush triggered")

local isSprinting = true


create("Speedster", Character, 10)
create("CantRecieve", Character, 3)
create("Sprinting", Character ,3)
create("Run", Character ,3)
create("CantSprint", Character ,6)
create("CantRegen", Character ,6)

module.SpeedChanger(Character, 0, 12, -50, -3, 3)

local HRP = Character:WaitForChild("HumanoidRootPart")

local effectTemplate =
ReplicatedStorage.PlayerAnimations.Chigiri.FirstMove.BallEffects.Speedster
local Effect = effectTemplate:Clone()

Effect.CFrame = HRP.CFrame * CFrame.new(0, 0, 0)


Effect.CFrame = CFrame.new(Effect.Position, Effect.Position +
HRP.CFrame.LookVector)
Effect.Parent = workspace
Effect.Anchored = false
local weld = Instance.new("WeldConstraint")
weld.Part0 = HRP
weld.Part1 = Effect
weld.Parent = Effect

for _, particle in ipairs(Effect:GetDescendants()) do


if particle:IsA("ParticleEmitter") then
particle.Enabled = true
end
end

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 weldHitbox = Instance.new("WeldConstraint")


weldHitbox.Part0 = HRP
weldHitbox.Part1 = hitbox
weldHitbox.Parent = hitbox

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

module.SpeedChanger(Character, 0, 3, -40, 8, 0.1)

local ball = hit


local bodyVelocity = Instance.new("BodyVelocity")
bodyVelocity.Name = "BodyVelocity"
bodyVelocity.MaxForce = Vector3.new(1e5, 1e5, 1e5)
bodyVelocity.Velocity = HRP.CFrame.LookVector * 105
bodyVelocity.Parent = ball

Debris:AddItem(bodyVelocity, 0.6)

if usageCount >= maxUsage then


-- Hapus hitbox sepenuhnya
hitbox:Destroy()

-- Hapus CantRecieve juga


local cantRecieve =
Character:FindFirstChild("CantRecieve")
if cantRecieve then
cantRecieve:Destroy()
end
end
end
end)

-- Debris tetap sebagai backup jaga-jaga kalau hitbox tidak di-destroy


Debris:AddItem(hitbox, 3)

task.wait(3)
module.SpeedChanger(Character, -15, -20, -10, 0, 3)

elseif move == "Self-Pass" then


print("SelfPass triggered")

local HRP = Character:WaitForChild("HumanoidRootPart")


local Humanoid = Character:FindFirstChildWhichIsA("Humanoid")
local ball = workspace:FindFirstChild("TestBall")
local lookVector = Humanoid.RootPart.CFrame.LookVector

if HRP and Humanoid and ball then


if Character:FindFirstChild("HasBall") then
Character.HasBall:Destroy()
end
if Character.HumanoidRootPart:FindFirstChild("BallPossession")
then
Character.HumanoidRootPart.BallPossession:Destroy()
end
module.DestroyCircle(Character)

-- 2. Luncurkan bola ke depan


local bodyVelocity = Instance.new("BodyVelocity")
bodyVelocity.MaxForce = Vector3.new(1e5, 1e5, 1e5)
bodyVelocity.Velocity = HRP.CFrame.LookVector * 100
bodyVelocity.Parent = ball
ball.CanCollide = true
ball.Taken.Value = false

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

elseif move == "Leopard Defense" then


print("Leopard Defense triggered")
create("CantRecieve", Character,1)

local HRP = Character:WaitForChild("HumanoidRootPart")


local hitboxTemplate = ReplicatedStorage.Hitboxes.Biggerskillhitbox
local hitbox = hitboxTemplate:Clone()

local folder = workspace:FindFirstChild("Folder") or


Instance.new("Folder", workspace)
folder.Name = "Folder"

hitbox.CFrame = HRP.CFrame
hitbox.Anchored = false
hitbox.Parent = folder

local weld = Instance.new("WeldConstraint")


weld.Part0 = HRP
weld.Part1 = hitbox
weld.Parent = hitbox

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()

-- Deteksi bola & dorong saat disentuh


local ball = workspace:FindFirstChild("TestBall")
if ball and ball:IsA("BasePart") then
local touchedConn
touchedConn = hitbox.Touched:Connect(function(part)
if part == ball then
touchedConn:Disconnect()
module.SpeedChanger(Character, 10 , 10, 2, 0, 1)

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

elseif move == "Mach Cut In" then


local HRP = Character.HumanoidRootPart
local Humanoid = Character.Humanoid
local Animator = Humanoid:FindFirstChildOfClass("Animator")

local animation =
ReplicatedStorage.PlayerAnimations.Chigiri.SecondMove["Mach cut in"]
local effectTemplate =
ReplicatedStorage.PlayerAnimations.Chigiri.SecondMove.BallEffects.mach

local anim = Animator:LoadAnimation(animation)


anim:Play()

create("Stunned", Character, 0.5)


create("Mach Cut In", Character, 1.5)
create("Leopard Defense", Character, 1.5)
create("Dribbling", Character, 1)
create("CantShoot", Character, 0.6)
create("CantFlick", Character, 0.6)

local range = 20
local speed = 0.25
local forward = 30

local function playEffect()


local Effect = effectTemplate:Clone()

-- Tempatkan efek 3 unit di depan pemain (mengikuti arah


hadapnya)
local forwardOffset = HRP.CFrame.LookVector * 3
Effect.CFrame = HRP.CFrame + forwardOffset
Effect.CFrame = CFrame.new(Effect.Position, Effect.Position +
HRP.CFrame.LookVector) -- atur orientasi efek ke depan

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)

for _, particle in ipairs(Effect:GetDescendants()) do


if particle:IsA("ParticleEmitter") then
particle.Enabled = true
particle:Emit(25)
end
end
end

local leftGoal = {CFrame = HRP.CFrame * CFrame.new(-range, 0, -


forward)}
local leftTween = TweenService:Create(HRP, TweenInfo.new(speed,
Enum.EasingStyle.Sine, Enum.EasingDirection.Out), leftGoal)
leftTween:Play()
task.wait(0.2)
playEffect()
leftTween.Completed:Wait()

local rightGoal = {CFrame = HRP.CFrame * CFrame.new(range * 2, 0, -


forward)}
local rightTween = TweenService:Create(HRP, TweenInfo.new(speed,
Enum.EasingStyle.Sine, Enum.EasingDirection.Out), rightGoal)
rightTween:Play()
task.wait(0.2)
playEffect()
rightTween.Completed:Wait()

elseif move == "Gyro Shot" then


local ball = workspace.TestBall
local anim =
Character.Humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.Y
ukimiya.FirstMove["Gyro Shot"])
anim:Play()

create("Gyro Shot", Character, 10)


create("Unrecievable", ball, 0.7)
create("Stunned", Character, 1)

task.wait(1.2)

local dampingFactor = 0.99


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

local impactpoint = Instance.new("Part", workspace)


impactpoint.Transparency = 1
impactpoint.CanCollide = false
impactpoint.CanTouch = false
impactpoint.CanQuery = false
impactpoint.Massless = true
impactpoint.Anchored = true
impactpoint.CFrame = cframe * CFrame.new(0, 0, -1)

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()

elseif move == "Curve Shot" then


local ball = workspace:FindFirstChild("TestBall")
local anim =
Character.Humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.R
in.FirstMove["Curve Shot"])
anim:Play()
SoundManager.PlaySound(game.ReplicatedStorage.PlayerAnimations["Rin"].FirstMove.Bal
lEffects.Sound, ball)

create("Curve Shot", Character, 10)


create("Unrecievable", ball, 0.7)
create("Stunned", Character, 1)

task.wait(.5)

local dampingFactor = 0.99


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

local impactpoint = Instance.new("Part", workspace)


impactpoint.Transparency = 1
impactpoint.CanCollide = false
impactpoint.CanTouch = false
impactpoint.CanQuery = false
impactpoint.Massless = true
impactpoint.Anchored = true
impactpoint.CFrame = cframe * CFrame.new(0, 0, -1)

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)

elseif move == "Deep Analysis" then


create("Deep Analysis", Character, 30)
local impactpoint = Instance.new("Part", workspace)
impactpoint.Transparency = 1
impactpoint.CanCollide = false
impactpoint.CanTouch = false
impactpoint.CanQuery = false
impactpoint.Massless = true
impactpoint.Anchored = true
impactpoint.CFrame = cframe * CFrame.new(0, -2.5, 0)

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)

local buff = create("SprintSpeedBuff", Character, 10)


local buffamount = Instance.new("NumberValue", buff)
buffamount.Name = "Amount"
buffamount.Value =
game.ReplicatedStorage.PlayerAnimations.Analytical.SecondMove.SpeedBuff.Value

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()

create("Cut In", Character, 20)


create("CantMove", Character, 2.4)
create("Dribbling", Character, 2.4)
create("CantShoot", Character, 2.4)

local AO = Instance.new("AlignOrientation", Character.HumanoidRootPart)


AO.Attachment0 = Character.HumanoidRootPart.RootAttachment
AO.Mode = Enum.OrientationAlignmentMode.OneAttachment
AO.MaxTorque = math.huge
AO.CFrame = cframe
AO.Responsiveness = 200
game.Debris:AddItem(AO, 1)

local v = Instance.new("BodyVelocity", Character.HumanoidRootPart)


v.MaxForce = Vector3.new(999999, 999999, 999999)
v.Velocity = cframe.LookVector * 60
game.Debris:AddItem(v, 0.4)

task.wait(0.6)

local v2 = Instance.new("BodyVelocity", Character.HumanoidRootPart)


v2.MaxForce = Vector3.new(999999, 999999, 999999)
v2.Velocity = cframe.RightVector * 120
game.Debris:AddItem(v2, 0.4)

task.wait(0.5)

elseif move == "Kaiser Impact" then


local ball = workspace.TestBall
local anim =
Character.Humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.K
aiser.FirstMove["Kaiser Impact"])
anim:Play()

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 force = mousepos * 152 + Vector3.new(0, 37, 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.5)

elseif move == "Eagle Eye" then


local ball = game.Workspace:FindFirstChild("TestBall")
local airThreshold = 209

if not ball then


warn("Eagle Eye failed: Ball not found!")
return
end

if ball.Position.Y <= airThreshold then


warn("Eagle Eye failed: The ball must be in the air!")
return
end

local anim =
Character.Humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.A
iku.FirstMove["Eagle Eye"])

create("Eagle Eye", Character, 2)


create("CantHeader", Character, 2)

local distance = (ball.Position -


Character.PrimaryPart.Position).Magnitude

if distance <= 68 then


anim:Play()
Character:SetPrimaryPartCFrame(CFrame.new(ball.Position))
local snakeEffect = ReplicatedStorage.MoveEffect.Snake:Clone()
snakeEffect.Parent = Character
snakeEffect.Anchored = false

local weld = Instance.new("Weld")


weld.Part0 = Character.PrimaryPart
weld.Part1 = snakeEffect
weld.C0 = CFrame.new(0, 0, 0)
weld.Parent = snakeEffect
snakeEffect.CFrame = Character.PrimaryPart.CFrame

local humanoid = Character:FindFirstChildOfClass("Humanoid")


local rootPart = Character.PrimaryPart

if humanoid and rootPart then


humanoid.PlatformStand = true
local bodyPos = Instance.new("BodyPosition")
bodyPos.Position = rootPart.Position
bodyPos.MaxForce = Vector3.new(1e5, 1e5, 1e5)
bodyPos.P = 1e4
bodyPos.Parent = rootPart

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

elseif move == "Heel Flick" then


local ball = workspace.TestBall
local anim =
Character.Humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.S
ae.FirstMove.FUA["Heel Flick"])

anim:Play()

local effect = ReplicatedStorage.MoveEffect.Sae1:Clone()


effect.Parent = game.Workspace
effect.CFrame = Character.PrimaryPart.CFrame

SoundManager.PlaySound(game.ReplicatedStorage.Effects.Kick,
Character.HumanoidRootPart)

create("Stunned", Character, 0.7)


create("Heel Flick", Character, 10)
create("Unrecievable", ball, 1)
create("CantRecieve", Character, 0.3)
create("CantShoot", Character, 1.2)
create("Stunned", Character, 1.5)

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)

local force = Character.HumanoidRootPart.CFrame.LookVector * 100 +


Vector3.new(0, 30, 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.2)

local dashVelocity = Instance.new("BodyVelocity")


dashVelocity.MaxForce = Vector3.new(1e5, 0, 1e5)
dashVelocity.Velocity = Character.HumanoidRootPart.CFrame.LookVector *
170
dashVelocity.P = 1250
dashVelocity.Parent = Character.HumanoidRootPart
game.Debris:AddItem(dashVelocity, 0.25)
effect:Destroy()

elseif move == "Magic Turn" then


local hrp = Character:FindFirstChild("HumanoidRootPart")
if not hrp then return end

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 humanoid = Character:FindFirstChildOfClass("Humanoid")


if not humanoid then return end
local animator = humanoid:FindFirstChildOfClass("Animator")
if not animator then return end

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)

if anim.Length > 0.1 then


anim:AdjustSpeed(anim.Length / totalTime) -- Sesuaikan kecepatan
animasi dengan durasi gerakan
else
anim:AdjustSpeed(0.5)
end

local TweenService = game:GetService("TweenService")


local trailColors = {
Color3.fromRGB(0, 255, 0),
Color3.fromRGB(255, 255, 0),
Color3.fromRGB(255, 0, 255),
Color3.fromRGB(0, 255, 255),
}

local function createTrailShadowClone(sourceModel, color,


sizeMultiplier, trailLife)
local clones = {}
for _, part in pairs(sourceModel:GetChildren()) do
if part:IsA("BasePart") then
local lname = part.Name:lower()
local isHead = lname == "head"
if (part ~= sourceModel.PrimaryPart or isHead) and
not lname:find("hitbox") and not lname:find("tool") then
local clone = part:Clone()
clone.Anchored = true
clone.CanCollide = false
clone.Color = color
clone.Transparency = 1
if clone:IsA("MeshPart") then
clone.TextureID = ""
end
for _, obj in pairs(clone:GetDescendants()) do
if not obj:IsA("SpecialMesh") then
obj:Destroy()
end
end
clone.Size = clone.Size * (sizeMultiplier or 1)
clone.CFrame = part.CFrame
clone.Parent = workspace
table.insert(clones, clone)
end
end
end

for _, acc in pairs(sourceModel:GetChildren()) do


if acc:IsA("Accessory") then
local handle = acc:FindFirstChild("Handle")
if handle then
local cloneHandle = handle:Clone()
cloneHandle.Anchored = true
cloneHandle.CanCollide = false
cloneHandle.Color = color
cloneHandle.Transparency = 1
if cloneHandle:IsA("MeshPart") then
cloneHandle.TextureID = ""
end
for _, obj in
pairs(cloneHandle:GetDescendants()) do
if not obj:IsA("SpecialMesh") then
obj:Destroy()
end
end
cloneHandle.Size = cloneHandle.Size *
(sizeMultiplier or 1)
cloneHandle.CFrame = handle.CFrame
cloneHandle.Parent = workspace
table.insert(clones, cloneHandle)
end
elseif acc:IsA("Decal") or acc:IsA("Texture") then
local decalClone = acc:Clone()
decalClone.Parent = workspace
end
end

for _, clone in pairs(clones) do


task.spawn(function()
local appearTime = 0.1
local disappearTime = trailLife - appearTime
local fadeIn = TweenService:Create(clone,
TweenInfo.new(appearTime), { Transparency = 0.75 })
fadeIn:Play()
task.wait(appearTime)
local fadeOut = TweenService:Create(clone,
TweenInfo.new(disappearTime), { Transparency = 1 })
fadeOut:Play()
task.wait(disappearTime)
clone:Destroy()
end)
end
end

local function startTrailDuring(duration, sizeMultiplier)


task.spawn(function()
local step = 0.05
local colorIndex = 1
local trailLife = 0.6
while duration > 0 do
createTrailShadowClone(Character,
trailColors[colorIndex], sizeMultiplier, trailLife)
colorIndex = (colorIndex % #trailColors) + 1
task.wait(step)
duration -= step
end
end)
end

-- BEZIER MOVE PLAYER (Hanya ke kanan)


local forward = hrp.CFrame.LookVector
local right = hrp.CFrame.RightVector
local startPos = hrp.Position

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)

local RunService = game:GetService("RunService")


local startTime = tick()
local connection
connection = RunService.Heartbeat:Connect(function()
local elapsed = tick() - startTime
local t = math.clamp(elapsed / totalTime, 0, 1)

-- Interpolasi kubik Bezier


local mt = 1 - t
local mt2 = mt * mt
local mt3 = mt2 * mt
local t2 = t * t
local t3 = t2 * t
local pos = mt3 * P0 + 3 * mt2 * t * P1 + 3 * mt * t2 * P2 + t3 *
P3

hrp.CFrame = CFrame.new(pos, pos + forward)

if t >= 1 then
hrp.CFrame = CFrame.lookAt(hrp.Position, hrp.Position +
forward)
anim:Stop()
connection:Disconnect()
end
end)

elseif move == "Mid Range Shot" then


local ball = workspace.TestBall
local anim =
Character.Humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.K
unigami.FirstMove["Mid Range Shot"])
anim:Play()

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 force = mousepos * 152 + Vector3.new(0, 37, 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.5)

elseif move == "Steal" then


local hrp = Character:FindFirstChild("HumanoidRootPart")
if not hrp then return end

local humanoid = Character:FindFirstChildOfClass("Humanoid")


if not humanoid then return end

local animator = humanoid:FindFirstChildOfClass("Animator")


if not animator then return end

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()

create("Tackling", Character, 0.6)


create("CantRegen", Character, 1)
create("CantTackle", Character, 2)
create("CantMove", Character, 1)

EffectsManager.Slide(Character)

local direction = hrp.CFrame.LookVector


local v = Instance.new("BodyVelocity", hrp)
v.MaxForce = Vector3.new(999999, 999999, 999999)
v.Velocity = direction * 90
game.Debris:AddItem(v, 1)
local tweenInfo = TweenInfo.new(1, Enum.EasingStyle.Quad,
Enum.EasingDirection.Out)
local goal = {Velocity = Vector3.new(0, 0, 0)}
local tween = game.TweenService:Create(v, tweenInfo, goal)
tween:Play()

local AO = Instance.new("AlignOrientation", hrp)


AO.Attachment0 = hrp:FindFirstChild("RootAttachment")
AO.Mode = Enum.OrientationAlignmentMode.OneAttachment
AO.MaxTorque = math.huge
AO.CFrame = hrp.CFrame
AO.Responsiveness = 200
game.Debris:AddItem(AO, 1)

local TweenService = game:GetService("TweenService")


local trailColors = {
Color3.fromRGB(0, 0, 0), -- Hitam
Color3.fromRGB(255, 255, 0), -- Kuning
Color3.fromRGB(0, 0, 0), -- Hitam
Color3.fromRGB(255, 255, 0), -- Kuning
}

local function createTrailShadowClone(sourceModel, color,


sizeMultiplier)
local clones = {}
for _, part in pairs(sourceModel:GetChildren()) do
if part:IsA("BasePart") then
local lname = part.Name:lower()
local isHead = lname == "head"
if (part ~= sourceModel.PrimaryPart or isHead) and
not lname:find("hitbox") and not lname:find("tool") then
local clone = part:Clone()
clone.Anchored = true
clone.CanCollide = false
clone.Color = color
clone.Transparency = 1
if clone:IsA("MeshPart") then
clone.TextureID = ""
end
for _, obj in pairs(clone:GetDescendants()) do
if not obj:IsA("SpecialMesh") then
obj:Destroy()
end
end
clone.Size = clone.Size * (sizeMultiplier or 1)
clone.CFrame = part.CFrame * CFrame.new(0, 0, -
0.5) -- Posisi z=-0.5
clone.Parent = workspace
table.insert(clones, clone)
end
end
end

for _, acc in pairs(sourceModel:GetChildren()) do


if acc:IsA("Accessory") then
local handle = acc:FindFirstChild("Handle")
if handle then
local cloneHandle = handle:Clone()
cloneHandle.Anchored = true
cloneHandle.CanCollide = false
cloneHandle.Color = color
cloneHandle.Transparency = 1
if cloneHandle:IsA("MeshPart") then
cloneHandle.TextureID = ""
end
for _, obj in
pairs(cloneHandle:GetDescendants()) do
if not obj:IsA("SpecialMesh") then
obj:Destroy()
end
end
cloneHandle.Size = cloneHandle.Size *
(sizeMultiplier or 1)
cloneHandle.CFrame = handle.CFrame *
CFrame.new(0, 0, -0.5) -- Posisi z=-0.5
cloneHandle.Parent = workspace
table.insert(clones, cloneHandle)
end
elseif acc:IsA("Decal") or acc:IsA("Texture") then
local decalClone = acc:Clone()
decalClone.Parent = workspace
end
end

for _, clone in pairs(clones) do


task.spawn(function()
local fadeIn = TweenService:Create(clone,
TweenInfo.new(0.1), {Transparency = 0.75})
fadeIn:Play()
task.wait(0.1)
local fadeOut = TweenService:Create(clone,
TweenInfo.new(0.4), {Transparency = 1})
fadeOut:Play()
task.wait(0.4)
clone:Destroy()
end)
end
end

local function startTrailDuring(duration, sizeMultiplier)


task.spawn(function()
local step = 0.05
local colorIndex = 1
while duration > 0 do
createTrailShadowClone(Character,
trailColors[colorIndex], sizeMultiplier)
colorIndex = (colorIndex % #trailColors) + 1
task.wait(step)
duration -= step
end
end)
end

task.delay(cloneStartTime, function()
startTrailDuring(cloneDuration, 1.1)
end)

task.wait(1)
anim:Stop()

elseif move == "Nutmeg" then


local HRP = Character:FindFirstChild("HumanoidRootPart")
local Humanoid = Character:FindFirstChildOfClass("Humanoid")
local Animator = Humanoid and
Humanoid:FindFirstChildOfClass("Animator")
local player = game.Players:GetPlayerFromCharacter(Character)
local ball = workspace:FindFirstChild("TestBall")

if not HRP or not Humanoid or not Animator or not player then


warn("Missing HRP, Humanoid, Animator, or player")
return
end

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

local weld = Instance.new("WeldConstraint")


weld.Part0 = HRP
weld.Part1 = hb
weld.Parent = hb

local touched = false

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

local mass = ball.AssemblyMass or 1


local lv = HRP.CFrame.LookVector
local impulse = (lv * 100 + Vector3.new(0 ,35, 0)) * mass
ball:ApplyImpulse(impulse)
print("Ball moved with ApplyImpulse")
create("CantRecieve", enemyChar,0.3)

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)

elseif move == "Roulette" then


local HRP = Character:FindFirstChild("HumanoidRootPart")
local Humanoid = Character:FindFirstChildOfClass("Humanoid")
local Animator = Humanoid and
Humanoid:FindFirstChildOfClass("Animator")
local player = game.Players:GetPlayerFromCharacter(Character)
local ball = workspace:FindFirstChild("TestBall")
local RouletteAnim =
Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.Bachira.FirstMove.Ro
ulette)

if not HRP or not Humanoid or not Animator or not player then return
end

if not Character:FindFirstChild("RouletteReady") then


warn("Roulette failed: No RouletteReady")
return
end

-- Buat hitbox besar


local hitbox =
game.ReplicatedStorage.Hitboxes:FindFirstChild("Biggerskillhitbox")
if not hitbox 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

local weld = Instance.new("WeldConstraint")


weld.Part0 = HRP
weld.Part1 = hb
weld.Parent = hb

local touched = false


hb.Touched:Connect(function(hit)
if touched then return end
if hit:IsDescendantOf(ball) or hit == ball then
touched = true
if hb and hb.Parent then hb:Destroy() end
module.RecieveBall(Character, ball)
RouletteAnim:Play()
local bv = Instance.new("BodyVelocity")
bv.MaxForce = Vector3.new(1, 0, 1) * 1e5
bv.P = 1e4
bv.Name = "RouletteDash"
bv.Velocity = (HRP.CFrame.LookVector +
HRP.CFrame.RightVector * -0.5).Unit * 500 -- ke kiri
bv.Parent = HRP
create("Egoist", Character)

local decayRate = 0.93


local rs = game:GetService("RunService")
local conn
conn = rs.Heartbeat:Connect(function()
if not bv or not bv.Parent then conn:Disconnect()
return end
bv.Velocity *= decayRate
if bv.Velocity.Magnitude < 2 then
bv:Destroy()
conn:Disconnect()
end
end)

end
end)

task.delay(1.5, function()
if hb and hb.Parent then hb:Destroy() end
end)

elseif move == "TackleTest" then


-- Tandai sebagai sedang tackle (bisa kamu hapus nanti kalau gak
dipakai)
create("Tackling", Character, 10000000)

local HRP = Character:FindFirstChild("HumanoidRootPart")


local Humanoid = Character:FindFirstChildOfClass("Humanoid")
local Animator = Humanoid and
Humanoid:FindFirstChildOfClass("Animator")
local player = game.Players:GetPlayerFromCharacter(Character)
local ball = workspace:FindFirstChild("TestBall")

if not HRP or not Humanoid or not Animator or not ball then return end

-- Hapus HasBall dan BallPossession jika ada


if Character:FindFirstChild("HasBall") then
Character.HasBall:Destroy()
end
if HRP:FindFirstChild("BallPossession") then
HRP.BallPossession:Destroy()
end
-- Dorong bola menggunakan ApplyImpulse
local mass = ball.AssemblyMass or 1
local lv = HRP.CFrame.LookVector
local impulse = (lv * 100 + Vector3.new(0 ,35, 0)) * mass
ball:ApplyImpulse(impulse)
print("Ball moved with ApplyImpulse")
create("Unrecieveble", ball, 0.3)
ball.CanCollide = true

-- Delay untuk dash


task.delay(1, function()
local dashAnim =
Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.Bachira.Additional.N
utmeg_Dash)
ball.Taken.Value = false
dashAnim.Looped = true
dashAnim:Play()

-- Dorong karakter pakai ApplyImpulse


local charMass = HRP.AssemblyMass or 1
local dashImpulse = HRP.CFrame.LookVector * 100 * charMass
HRP:ApplyImpulse(dashImpulse)

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

elseif move == "Trap" then


local ball = workspace.TestBall
local humanoid = Character:FindFirstChild("Humanoid")
local humanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
local hitbox = Character:FindFirstChild("Hitbox")

if not humanoid or not humanoidRootPart or not hitbox then


warn("Cannot perform Trap: Missing Humanoid, HumanoidRootPart, or
Hitbox.")
return
end

local stamina = Character:FindFirstChild("Stamina") and


Character.Stamina.Value or 100
if Character:FindFirstChild("Stunned") or
Character:FindFirstChild("Stagger") or stamina < 8 then
warn("Cannot perform Trap: Character stunned, staggered, or
insufficient stamina.")
return
end
local originalHitboxSize = hitbox.Size

-- Animasi lompat/persiapan Trap (Nagi.FirstMove.Trap)


local trapJumpAnim =
Character.Humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.N
agi.FirstMove.Trap)
trapJumpAnim:Play()

-- Pastikan nilai default jika 'airDuration' dan 'force' tidak


didefinisikan dari luar
local airDuration = 1 -- Durasi karakter di-anchor di udara
local force = 80 -- Kekuatan lompatan awal

-- BodyVelocity untuk lompatan ke atas


local bodyVelocity = Instance.new("BodyVelocity")
bodyVelocity.MaxForce = Vector3.new(0, math.huge, 0)
bodyVelocity.Velocity = Vector3.new(0, force, 0)
bodyVelocity.Parent = humanoidRootPart
game.Debris:AddItem(bodyVelocity, 0.3) -- BV hanya mendorong selama 0.3
detik

create("Trap", Character, 1)
create("CantHeader", Character, 1)

task.wait(0.2) -- Jeda sebelum memperbesar hitbox


hitbox.Size = Vector3.new(20, 30, 20)

local trapTouchedConnection -- Deklarasi koneksi di luar scope Touched


local hasTrapped = false -- Debounce untuk memastikan Trap hanya sekali

-- KONEKSI TOUCHED UNTUK HITBOX SAAT BOLA MENYENTUH


trapTouchedConnection = hitbox.Touched:Connect(function(part)
-- Perubahan di sini: Tambahkan kondisi
Character:FindFirstChild("HasBall")
if part == ball and not ball.Taken.Value and not hasTrapped and
Character:FindFirstChild("HasBall") then
hasTrapped = true -- Aktifkan debounce

-- Animasi saat bola menyentuh hitbox


(Nagi.Additional.Trapp)
local trappAnim =
Character.Humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.N
agi.Additional.Trapp)
trappAnim:Play() -- Memainkan animasi Trapp

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

-- Putuskan koneksi Touched setelah Trap berhasil


if trapTouchedConnection then
trapTouchedConnection:Disconnect()
end
end
end)

-- Tunggu sampai karakter naik ke udara (setelah dorongan awal BV)


task.wait(0.6) -- Jeda yang Anda berikan sebelum meng-anchor

-- Anchor karakter di udara


humanoid.PlatformStand = true
humanoidRootPart.Anchored = true

-- Setelah 'airDuration', un-anchor karakter


task.delay(airDuration, function()
if humanoidRootPart and humanoid then
humanoidRootPart.Anchored = false
humanoid.PlatformStand = false
end
end)

-- 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

-- Pastikan koneksi Touched terputus jika belum terputus


if trapTouchedConnection and trapTouchedConnection.Connected then
trapTouchedConnection:Disconnect()
end
end)

elseif move == "Fake Volley" then


local humanoid = Character:FindFirstChildOfClass("Humanoid")
if not humanoid then return end

local animator = humanoid:FindFirstChildOfClass("Animator")


if not animator then return end

local animPath =
game.ReplicatedStorage.PlayerAnimations.Nagi.SecondMove:FindFirstChild("Fake
Volley")
if not animPath then return end
local anim = animator:LoadAnimation(animPath)
anim:Play()

create("Dribbling", Character, 0.5)

local usageCount = Character:FindFirstChild("FakeVolleyUsage") or


Instance.new("IntValue")
usageCount.Name = "FakeVolleyUsage"
usageCount.Parent = Character
usageCount.Value = usageCount.Value + 1
if usageCount.Value >= 2 then
create("Fake Volley", Character, 1)
end

task.delay(0.8, function()
anim:Stop()
end)

elseif move == "Volley Shot" then


local ball = workspace.TestBall
local anim =
Character.Humanoid.Animator:LoadAnimation(game.ReplicatedStorage.PlayerAnimations.N
agi.ThirdMove["Volley Shot"])
task.wait(0.5) -- Tetap menunda seluruh script seperti yang ada di
script Anda
anim:Play()

local shootingPower = 100


local upwardPower = 35

local lighting = game:GetService("Lighting")


local effect = Instance.new("ColorCorrectionEffect")
effect.Name = "ImpactWhiteFlash"
effect.TintColor = Color3.new(1, 1, 1)
effect.Brightness = 0.5
effect.Contrast = 1
effect.Saturation = -1
effect.Parent = lighting
task.delay(0.2, function()
effect:Destroy()
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)

-- <<< PERUBAHAN YANG ANDA INGINKAN ADA DI BAWAH INI >>>


-- Diasumsikan 'mousepos' adalah Vector3 yang menunjukkan arah kursor
dari suatu titik.
-- Untuk memastikan Y-axis kursor tidak mengubah arah horizontal bola:
local horizontalMouseDirection = Vector3.new(mousepos.X, 0,
mousepos.Z).Unit
local force = horizontalMouseDirection * shootingPower + Vector3.new(0,
upwardPower, 0)
-- <<< AKHIR PERUBAHAN >>>

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)

elseif move == "Jumping Volley" then


local ball = workspace:WaitForChild("TestBall")
local humanoid = Character:WaitForChild("Humanoid")
local hrp = Character:WaitForChild("HumanoidRootPart")

-- 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()

-- Hapus status bola lama


if Character:FindFirstChild("HasBall") then Character.HasBall:Destroy()
end
if hrp:FindFirstChild("BallPossession") then
hrp.BallPossession:Destroy() end
if Character:FindFirstChild("OwnHL") then Character.OwnHL:Destroy() end

task.wait(0.3)

-- Lompatan pemain pakai BodyVelocity


local bv = Instance.new("BodyVelocity")
bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bv.Velocity = Vector3.new(0, jumpHeight, 0)
bv.Parent = hrp
game.Debris:AddItem(bv, 0.3)
create("Stunned", Character, 1)
create("Jumping Volley", Character, 1)
create("CantHeader", Character, 2)
create("CantRecieve", Character, 2)

-- Spawn hitbox sebelum anchor


task.wait(anchorDelay)
local hitbox = Instance.new("Part")
hitbox.Name = "JumpingVolleyHB"
hitbox.Size = Vector3.new(30, 30, 30)
hitbox.Transparency = 1
hitbox.CanTouch = true
hitbox.CanCollide = false
hitbox.CFrame = hrp.CFrame * CFrame.new(0, 0, -2)
hitbox.Parent = workspace

local wc = Instance.new("WeldConstraint")
wc.Part0 = hrp
wc.Part1 = hitbox
wc.Parent = hitbox

game.Debris:AddItem(hitbox, 0.4)

-- Anchor dan PlatformStand


hrp.Anchored = true
humanoid.PlatformStand = true
task.delay(anchorDuration, function()
hrp.Anchored = false
humanoid.PlatformStand = false
end)

-- Logika peluncuran bola saat hitbox terkena


local fired = false
hitbox.Touched:Connect(function(part)
if part == ball and not fired then
fired = true
hitbox:Destroy()
hrp.Anchored = false
humanoid.PlatformStand = false

SoundManager.PlaySound(

game.ReplicatedStorage.PlayerAnimations["Nagi"].ThirdMove.BallEffects.Sound,
ball
)

ball.Taken.Value = false
ball:SetNetworkOwner(nil)
ball.CanCollide = true

-- Set posisi bola di depan HRP


ball.CFrame = hrp.CFrame * CFrame.new(0, 0, -3)

-- Tambahkan BodyVelocity agar bola meluncur naik


local dir = hrp.CFrame.LookVector
local initialVel = dir * ballShootPower
local upwardVel = Vector3.new(0, ballShootPower *
upwardBoostFactor, 0)
local bv2 = Instance.new("BodyVelocity")
bv2.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bv2.Velocity = initialVel + upwardVel
bv2.Parent = ball
game.Debris:AddItem(bv2, skillDuration)
end
end)

elseif move == "Reflex Shot" then


local humanoid = Character:FindFirstChildOfClass("Humanoid")
if not humanoid then
warn("No Humanoid found!")
return
end
local animator = humanoid:FindFirstChildOfClass("Animator")
if not animator then
warn("No Animator found!")
return
end
local rootPart = Character.PrimaryPart
if not rootPart then
warn("No PrimaryPart found!")
return
end
local ball = game.Workspace:FindFirstChild("TestBall")
if not ball then
warn("TestBall not found!")
return
end
local JumpPower = 300
local airDuration = 2
local shootPower = 150
local animDuration = 0.8
local skillDuration = 0.3
humanoid.PlatformStand = false
rootPart.Anchored = false
local bv = Instance.new("BodyVelocity")
bv.Velocity = Vector3.new(0, JumpPower, 0)
bv.MaxForce = Vector3.new(0, math.huge, 0)
bv.Parent = rootPart
game.Debris:AddItem(bv, 0.2)
task.spawn(function()
for i = 1, 20 do
if rootPart then
task.wait(0.1)
end
end
end)
local bp
task.delay(0.5, function()
if rootPart then
bp = Instance.new("BodyPosition")
bp.MaxForce = Vector3.new(0, math.huge, 0)
bp.Position = rootPart.Position + Vector3.new(0, 5, 0)
bp.Parent = rootPart
game.Debris:AddItem(bp, airDuration)
end
end)
local animPath =
game.ReplicatedStorage.PlayerAnimations.Nagi.ThirdMove:FindFirstChild("Jumping
Volley")
if not animPath then
warn("Jumping Volley animation not found!")
return
end
local anim = animator:LoadAnimation(animPath)
anim:Play()
create("CantShoot", Character, 1)
create("CantHeader", Character, 1)
task.delay(0.5, function()
create("Stunned", Character, 0.2)
end)

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)

elseif move == "Curve Shoot" then


local ball = workspace.TestBall
local anim = Character.Humanoid.Animator:LoadAnimation(
game.ReplicatedStorage.PlayerAnimations.Sae.SecondMove["Curve
Shoot"]
)
anim:Play()
task.wait(0.5)

-- 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)

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

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

-- Final push with BodyVelocity untuk kecepatan


ball.CFrame = CFrame.new(P3)
local bv = Instance.new("BodyVelocity")
bv.MaxForce = Vector3.new(1e5, 1e5, 1e5)
bv.Velocity = ForwardDir * 100 + Vector3.new(0, -30, 0) -- atur
agar lebih kencang + menukik
bv.Parent = ball
game.Debris:AddItem(bv, 0.3)
end)()

create("Stunned", Character, 1)
create("Direct Shot", Character, 10)
create("Unrecievable", ball, 2)
create("CantRecieve", Character, 0.3)

-- White flash effect


local lighting = game:GetService("Lighting")
local effect = Instance.new("ColorCorrectionEffect")
effect.Name = "ImpactWhiteFlash"
effect.TintColor = Color3.new(1, 1, 1)
effect.Brightness = 0.5
effect.Contrast = 1
effect.Saturation = -1
effect.Parent = lighting
task.delay(0.2, function()
effect:Destroy()
end)

end

return module

You might also like