Local Script:
local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local player = game.Players.LocalPlayer
local uis = game:GetService("UserInputService")
local ts = game:GetService("TweenService")
local remote = game:GetService("ReplicatedStorage").Combat
local remoteRock = game:GetService("ReplicatedStorage"):WaitForChild("Rock")
local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Whitelist
params.FilterDescendantsInstances = {workspace.Map}
local lastTimeM1 = 0
local lastM1End = 0
local combo = 1
local canAir = true
local punchAnims = {
'rbxassetid://13111415464', -- 1
'rbxassetid://13111417311', -- 2
'rbxassetid://13111419879', -- 3
'rbxassetid://13111422893', -- 4
'rbxassetid://13111431501', -- 5
}
local airAnims = {
'rbxassetid://13103638685', -- KICK UP
'rbxassetid://13103652945', -- KICK DOWN
}
local function hb(size, Cframe, ignore, char)
local hb = Instance.new("Part", workspace.Fx)
hb.Anchored = true
hb.CanCollide = false
hb.Transparency = 0.6
hb.Name = "hb"
hb.Material = Enum.Material.ForceField
hb.CanQuery = false
hb.Size = size
hb.CFrame = Cframe
local con
con = hb.Touched:Connect(function()
con:Disconnect()
end)
local lasttarg
for i, v in pairs(hb:GetTouchingParts()) do
if v.Parent:FindFirstChild("Humanoid") and table.find(ignore, v.Parent) == nil then
if lasttarg then
if (lasttarg.Position - char.PrimaryPart.Position).Magnitude > (v.Position - char.PrimaryPart.Position).Magnitude then
lasttarg = v.Parent.PrimaryPart
end
else
lasttarg = v.Parent.PrimaryPart
end
end
end
hb:Destroy()
if lasttarg then
return lasttarg.Parent
else
return nil
end
end
local function rock(data)
local currentTime = tick()
local rockRaycastResult
repeat
rockRaycastResult = workspace:Raycast(data.Target.PrimaryPart.Position, data.Direction, params)
--print(rockRaycastResult)
wait()
until tick() - currentTime > 5 or rockRaycastResult ~= nil
if rockRaycastResult then
for i = 0, 14 do
local part = Instance.new("Part", workspace.Fx)
part.Size = Vector3.new(4, math.random(10, 20) / 10, math.random(10, 20) / 10)
part.Anchored = true
part.CFrame = CFrame.new(rockRaycastResult.Position, rockRaycastResult.Position + rockRaycastResult.Normal)
part.CFrame = part.CFrame * CFrame.Angles(math.rad(90), math.rad(i * 360/14), 0) * CFrame.new(0, 0, -4 * 2) * CFrame.Angles(math.rad(35), 0, 0)
part.CanQuery = false
part.CanCollide = false
part.CanTouch = false
local result = workspace:Raycast(part.Position + rockRaycastResult.Normal * 4, rockRaycastResult.Normal * -5, params) -- BUG
print(result)
if result then
part.Position = result.Position
part.Material = result.Material
part.Color = result.Instance.Color
print("1")
else
part:Destroy()
print("2")
end
part.Position = part.Position + rockRaycastResult.Normal * -4
ts:Create(part, TweenInfo.new(.2, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out, 0, false, 0), {Position = part.Position + rockRaycastResult.Normal * 4}):Play()
spawn(function()
game.Debris:AddItem(part, 4)
wait(3)
ts:Create(part, TweenInfo.new(.5, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out, 0, false, 0), {Position = part.Position + rockRaycastResult.Normal * -4}):Play()
end)
if i % 3 < 2 and result then
local rubble = part:Clone()
rubble.Size = Vector3.new(math.random(10, 20) / 20, math.random(10, 20) / 20, math.random(10, 20) / 20)
rubble.Position = result.Position + rockRaycastResult.Normal * 4
rubble.Material = result.Material
rubble.Color = result.Instance.Color
rubble.Parent = workspace.Fx
rubble.Anchored = false
rubble.CanCollide = true
local bv = Instance.new("BodyVelocity", rubble)
bv.Velocity = Vector3.new(math.random(-40, 40), 30, math.random(-40, 40))
bv.MaxForce = Vector3.new(99999, 99999, 99999)
bv.Name = "Velocity"
game.Debris:AddItem(bv, .1)
game.Debris:AddItem(rubble, 4)
spawn(function()
wait(2)
ts:Create(rubble, TweenInfo.new(1, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out, 0, false, 0), {Transparency = 1}):Play()
end)
rubble.Transparency = 0
end
end
end
end
uis.InputBegan:Connect(function(input, gpe)
if gpe then return end
if input.UserInputType == Enum.UserInputType.MouseButton1 and tick() - lastTimeM1 > .3 and tick() - lastM1End > .7 then
if tick() - lastTimeM1 > .7 then
combo = 1
end
lastTimeM1 = tick()
local animation = Instance.new("Animation", workspace.Fx)
local air = nil
if uis:IsKeyDown("Space") and combo == 3 and canAir then
canAir = false
animation.AnimationId = airAnims[1]
air = "Up"
elseif not uis:IsKeyDown("Space") and combo == 4 or 5 and not canAir then
animation.AnimationId = airAnims[2]
air = "Down"
else
animation.AnimationId = punchAnims[combo]
end
local load = humanoid:LoadAnimation(animation)
load:Play()
animation:Destroy()
local hitTarg = hb(Vector3.new(4, 6, 4), character.PrimaryPart.CFrame * CFrame.new(0, 0, -3), {character} ,character)
if hitTarg then
local data = {
["Target"] = hitTarg,
["Character"] = character,
["Combo"] = combo,
["Air"] = air,
["Action"] = "ml",
}
remote:FireServer(data)
end
if combo == #punchAnims then
combo = 1
lastM1End = tick()
else
combo += 1
end
humanoid.WalkSpeed = 0
wait(.4)
humanoid.WalkSpeed = 13
end
end)
remote.OnClientEvent:Connect(function(data)
if data.Action == "Rock" then
rock(data)
end
end)
humanoid.StateChanged:Connect(function(old, new)
if new == Enum.HumanoidStateType.Landed then
canAir = true
end
end)
uis.JumpRequest:Connect(function()
if tick() - lastTimeM1 < 1 then
humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false)
else
humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, true)
end
end)
Script:
local remote = game:GetService("ReplicatedStorage"):WaitForChild("Combat")
local remoteRock = game:GetService("ReplicatedStorage"):WaitForChild("Rock")
remote.OnServerEvent:Connect(function(client, data)
if data.Action == "ml" then
data.Target.Humanoid:TakeDamage(5)
if data.Air == "Up" then
local bp = Instance.new("BodyPosition")
bp.Position = data.Character.PrimaryPart.Position + Vector3.new(0, 30, 0)
bp.P = 1200
bp.MaxForce = Vector3.new(99999, 99999, 99999)
bp.D = 200
bp.Name = "Position"
bp.Parent = data.Character.PrimaryPart
game.Debris:AddItem(bp, 1)
local bp = Instance.new("BodyPosition")
bp.Position = data.Target.PrimaryPart.Position + Vector3.new(0, 30, 2)
bp.P = 1200
bp.MaxForce = Vector3.new(99999, 99999, 99999)
bp.D = 200
bp.Name = "Position"
bp.Parent = data.Target.PrimaryPart
game.Debris:AddItem(bp, 1)
elseif data.Air == "Down" then
for i, v in pairs(data.Target.PrimaryPart:GetChildren()) do
if v:IsA("BodyMover") then
v:Destroy()
end
end
local bv = Instance.new("BodyVelocity", data.Target.PrimaryPart)
bv.Velocity = (data.Character.PrimaryPart.CFrame.LookVector * 1 - Vector3.new(0, 2, 0)) * 25
bv.MaxForce = Vector3.new(99999, 99999, 99999)
bv.Name = "Velocity"
game.Debris:AddItem(bv, .2)
data.Action = "Rock" -- IT ISN'T WORKING
data.Direction = (data.Character.PrimaryPart.CFrame.LookVector * 1 - Vector3.new(0, 2, 0)) * 1 -- IT ISN'T WORKING
remote:FireAllClients(data) -- IT ISN'T WORKING
elseif data.Combo == 5 then
for i, v in pairs(data.Target.PrimaryPart:GetChildren()) do
if v:IsA("BodyMover") then
v:Destroy()
end
end
local bv = Instance.new("BodyVelocity", data.Character.PrimaryPart)
bv.Velocity = data.Character.PrimaryPart.CFrame.LookVector * 10
bv.MaxForce = Vector3.new(99999, 99999, 99999)
bv.Name = "Velocity"
game.Debris:AddItem(bv, .2)
local bv = Instance.new("BodyVelocity", data.Target.PrimaryPart)
bv.Velocity = data.Character.PrimaryPart.CFrame.LookVector * 75
bv.MaxForce = Vector3.new(99999, 99999, 99999)
bv.Name = "Velocity"
game.Debris:AddItem(bv, .2)
else
local bv = Instance.new("BodyVelocity", data.Character.PrimaryPart)
bv.Velocity = data.Character.PrimaryPart.CFrame.LookVector * 10
bv.MaxForce = Vector3.new(99999, 99999, 99999)
bv.Name = "Velocity"
game.Debris:AddItem(bv, .2)
local bv = Instance.new("BodyVelocity", data.Target.PrimaryPart)
bv.Velocity = data.Character.PrimaryPart.CFrame.LookVector * 10
bv.MaxForce = Vector3.new(99999, 99999, 99999)
bv.Name = "Velocity"
game.Debris:AddItem(bv, .2)
end
end
end)
So what the problem is, on line 93 of the local script when I try to get the result, it says result = nil
And the line if result doesn’t work, so
local result = workspace:Raycast(part.Position + rockRaycastResult.Normal * 4, rockRaycastResult.Normal * -5, params) -- BUG
print(result) -- IN HER I HAVE NIL
if result then
part.Position = result.Position
part.Material = result.Material
part.Color = result.Instance.Color
print("1") -- THIS THINK ISN'T PRINT
else
part:Destroy()
print("2") -- IT'S PRINT
end
So the problem is that if result = nil, then part, is destroyed and no stones appear, how do I fill result then?
If anything, I did it all from the guide here’s a link to it there is a man everything works: Roblox Advanced Combat Tutorial Part 2 - YouTube