in fact the rest of ur script will not run due to the error lol
write down what error is shown in the console
Maybe I forgot to throw something off
I dont understand u want me to show u what error will appear ???
yeah. which error showing up on console (output)?
idk but can u explain more deeply this part :
for v, part in pairs(hit:GetChildren()) do
if v == "BlockHitbox" and part.Parent ~= "Hitbox" then
dashevent:FireClient(player, results)
return
end
end
what is results and what is hit, how can we help u if u give us magical variable, u could maybe show us the entire script and then we would be able to help u, else part.Parent ~= “Hitbox” will always be true cuz a instance cannot be a string
Hope it helped !
for v, part in pairs(hit:GetChildren()) do
if v == "BlockHitbox" and part.Parent ~= "Hitbox" then
dashevent:FireClient(player, results)
return
end
end
explaining: first stroke - we get whether the enemy has a BlockHitbox (hit == HumanoidRootPart), second stroke: we checking if v it’s a hit:GetChildren() == BlockHitbox, and checking if touching part is a Hitbox of dash ability. third stroke - fire a client with a results (if results is good - stop a dash).
I really hope that everything is clear, I’m bad at English
Ok so, i would say u could easily check if the hrp got a block hitbox, i mean like if hit:FindFirstChild("BlockHitbox") then
but i dont understand what is part.Parent ~= "Hitbox"
as i said it make no sense to check this as it will always be true
Another thing, to achieve what ur trying to do I would rather put a bool value in the hrp saying if u are blocking or not instead of creating a new block
that’s ok my english is also … you know lol
if I want to use the bool value, can I check which side bro is dashing on? for example, if the enemy is behind, then the block did not work
im sure u can achieve this with simple maths
EDIT : i mean checking with CFrame if one is facing the other
I still can’t even imagine how this can be done
hmmm ok i will try to make an exemple so u can see, first of all u’ll need to get the player who attack CFrame and the player who block CFrame :
local ObjectSpace = Player1.HumanoidRootPart.CFrame:inverse() * Player2.HumanoidRootPart.CFrame
if ObjectSpace.Z < 0 then
-- is behind
end
I found this in this thread : Detect when a player is behind another player - #3 by Avallachi
u can now easily implement this in ur code i believe
i dont know how much more performant this solution is, or if it is what you are trying to achieve, but here is a solution i provided for another developer, and the answer i provided is to be placed in the hitbox.touched or whatever you use to detect hit players
This way doesn`t work. I even tried to add a print(ObjectSpace.Z) but they gives me always -0… values even when i dashed on a front of enemy
This is working but when i dashed on a right (or left also) of enemy its too being blocked but its not bad
can i see the script ? blurred text
full script: local
local player = game.Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local rootpart = script.Parent.Parent:WaitForChild("HumanoidRootPart")
local animationController = game:GetService("Players").LocalPlayer.Character:WaitForChild("Humanoid"):WaitForChild("Animator")
local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
--dash
local dashevent = game:GetService("ReplicatedStorage").Events.Dash
local animation = Instance.new("Animation")
local mymodule = require(game.ReplicatedStorage.Modules.Ragdoll)
--end
local animations = {
["DashFront"] = "rbxassetid://16566527703";
["DashLeft"] = "rbxassetid://16591663577";
["DashRight"] = "rbxassetid://16596178032";
["DashDown"] = "rbxassetid://16613175493";
}
local dashreload = false
local sidedashreload = false
local sidedashplaying = false
local evasive = true
UIS.InputBegan:Connect(function(key, typing)
local humanoid = char:WaitForChild("Humanoid")
if humanoid.WalkSpeed == 0 or humanoid.WalkSpeed == 2 then return end
local dashanim = "Front"
if typing then return end
if key.KeyCode == Enum.KeyCode.Q then
local DHold = UIS:IsKeyDown(Enum.KeyCode.D)
local WHold = UIS:IsKeyDown(Enum.KeyCode.W)
local SHeld = UIS:IsKeyDown(Enum.KeyCode.S)
local AHeld = UIS:IsKeyDown(Enum.KeyCode.A)
if WHold == true then
dashanim = "Front"
end
if AHeld == true then
dashanim = "Left"
end
if DHold == true then
dashanim = "Right"
end
if SHeld == true then
dashanim = "Down"
end
animation.AnimationId = animations["Dash"..dashanim]
local dashanimationTrack = animationController:LoadAnimation(animation)
humanoid.WalkSpeed = 0
local Attachment = Instance.new("Attachment", rootpart)
local BV = Instance.new("BodyVelocity", Attachment)
if dashanim == "Front" then
if sidedashplaying == true then return end
if dashreload == true then humanoid.WalkSpeed = 21; Attachment:Destroy(); dashanimationTrack:Stop() return end
local playing = false
dashreload = true
BV.MaxForce = Vector3.new(math.huge,0,math.huge)
BV.P = 9e9
BV.Parent = rootpart
playing = true
local function velocity()
local connection
connection = RunService.Heartbeat:Connect(function()
BV.Velocity = rootpart.CFrame.LookVector * 1 * 60
if not playing then
connection:Disconnect()
end
end)
end
velocity()
task.wait(0.01)
dashanimationTrack:Play()
dashevent:FireServer(player)
dashevent.OnClientEvent:Connect(function(player, results)
BV:Destroy()
playing = false
Attachment:Destroy()
humanoid.WalkSpeed = 21
wait(5.5)
dashreload = false
end)
elseif dashanim == "Left" then
local ragdollvalue = char:WaitForChild("RagdollValue")
local needtounragdoll = false
if ragdollvalue == true and evasive then
needtounragdoll = true
elseif ragdollvalue == false then
needtounragdoll = false
end
local playing = false
sidedashplaying = true
if sidedashreload == true then humanoid.WalkSpeed = 21 Attachment:Destroy() dashanimationTrack:Stop() return end
if needtounragdoll then
mymodule:unragdoll(char)
evasive = false
wait(30)
evasive = true
end
sidedashreload = true
BV.MaxForce = Vector3.new(math.huge,0,math.huge)
BV.P = 8e8
BV.Parent = rootpart
playing = true
local function velocity()
local connection
connection = RunService.Heartbeat:Connect(function()
BV.Velocity = rootpart.CFrame.RightVector * -1 * 70
if not playing then
connection:Disconnect()
end
end)
end
velocity()
dashanimationTrack:Play()
task.wait(0.3)
BV:Destroy()
Attachment:Destroy()
sidedashplaying = false
humanoid.WalkSpeed = 21
wait(3)
if sidedashreload ~= false then
sidedashreload = false
end
elseif dashanim == "Right" then
local ragdollvalue = char:WaitForChild("RagdollValue")
local needtounragdoll = false
if ragdollvalue == true and evasive then
needtounragdoll = true
elseif ragdollvalue == false then
needtounragdoll = false
end
sidedashplaying = true
local playing = false
if sidedashreload == true then humanoid.WalkSpeed = 21 Attachment:Destroy() dashanimationTrack:Stop() return end
if needtounragdoll then
mymodule:unragdoll(char)
evasive = false
wait(30)
evasive = true
end
sidedashreload = true
BV.MaxForce = Vector3.new(math.huge,0,math.huge)
BV.P = 8e8
BV.Parent = rootpart
playing = true
local function velocity()
local connection
connection = RunService.Heartbeat:Connect(function()
BV.Velocity = rootpart.CFrame.RightVector * 1 * 70
if not playing then
connection:Disconnect()
end
end)
end
velocity()
dashanimationTrack:Play()
task.wait(0.3)
playing = false
BV:Destroy()
Attachment:Destroy()
sidedashplaying = false
humanoid.WalkSpeed = 21
wait(3)
if sidedashreload ~= false then
sidedashreload = false
end
elseif dashanim == "Down" then
local playing = false
if dashreload == true then Attachment:Destroy() humanoid.WalkSpeed = 21 dashanimationTrack:Stop() return end
dashreload = true
BV.MaxForce = Vector3.new(math.huge,0,math.huge)
BV.P = 8e8
BV.Parent = rootpart
playing = true
local function velocity()
local connection
connection = RunService.Heartbeat:Connect(function()
BV.Velocity = rootpart.CFrame.LookVector * -1 * 60
if not playing then
connection:Disconnect()
end
end)
end
velocity()
dashanimationTrack:Play()
task.wait(0.3)
playing = false
BV:Destroy()
Attachment:Destroy()
humanoid.WalkSpeed = 21
wait(3)
if sidedashreload ~= false then
sidedashreload = false
end
dashreload = false
end
end
end)
server with your way:
local dashevent = game:GetService("ReplicatedStorage").Events.Dash
local stun = require(game.ServerStorage.Module.StunHandlerV2)
local player = game.Players.LocalPlayer
--end
local hitanimations = {
["Dash1"] = game.ReplicatedStorage["Hitted combo"].Dash1;
}
dashevent.OnServerEvent:Connect(function(player)
local char = player.Character or player.CharacterAdded:Wait()
local rootpart = char:WaitForChild("HumanoidRootPart")
local hitbox = Instance.new("Part")
hitbox.Size = Vector3.new(3,3,1.5)
hitbox.Parent = rootpart
hitbox.CanCollide = false
hitbox.CFrame = rootpart.CFrame + (rootpart.CFrame.lookVector * 1.1)
hitbox.Transparency = 0
local weld = Instance.new("WeldConstraint", hitbox)
weld.Part0 = hitbox
weld.Part1 = hitbox.Parent
hitbox.Name = "Hitbox"
local humanoid = char:WaitForChild("Humanoid")
local results = nil
local checkcorrect = false
local blockresults = "bad"
local function attack(enemy)
hitbox.CanTouch = false
local numberhit = 1
local enehum = enemy.Parent:WaitForChild("Humanoid")
local animator = enehum.Animator
local animation = hitanimations["Dash"..numberhit]
local dashanimationTrack = animator:LoadAnimation(animation)
if animator then
dashanimationTrack:Play()
end
enehum:TakeDamage(5)
stun.Stun(enehum, 2)
end
local debounced = false
local function check()
if hitbox.CanTouch == false then return end
hitbox.Touched:Once(function(hit)
if hit.Parent:FindFirstChild("Humanoid") then
debounced = true
dashevent:FireClient(player, results)
local enemy = hit.Parent:FindFirstChild("HumanoidRootPart")
if hit.Parent:WaitForChild("Block").Value == true then
local ObjectSpace = rootpart.CFrame:inverse() * enemy.CFrame
if ObjectSpace.Z < 0 then
return
else
attack(enemy)
end
else
attack(enemy)
end
end
end)
end
repeat check() until hitbox.CanTouch == true or results == true
task.wait(0.6)
results = false
if results == false and checkcorrect ~= true then
dashevent:FireClient(player, results)
end
hitbox:Destroy()
humanoid.WalkSpeed = 21
end)
you seems to not understand how functions work i mean in ur local script u are doing this :
local function velocity()
local connection
connection = RunService.Heartbeat:Connect(function()
BV.Velocity = rootpart.CFrame.LookVector * 1 * 60
if not playing then
connection:Disconnect()
end
end)
end
velocity()
but it is the same as doing this :
local connection
connection = RunService.Heartbeat:Connect(function()
BV.Velocity = rootpart.CFrame.LookVector * 1 * 60
if not playing then
connection:Disconnect()
end
end)
So in ur case its the velocity function, u can just define it with params :
local function velocity(x, y)
local connection
connection = RunService.Heartbeat:Connect(function()
BV.Velocity = rootpart.CFrame.LookVector * x * y
if not playing then
connection:Disconnect()
end
end)
end
velocity(-1, 60)
else the script seems veryyyy hugge and so i cant understand everything as theres no comment, i read the entire thing and it seems not optimized at all, i dont really know what u want to achieve with all that but consider creating module script for functions and creating multiples script for each systems cuz it make ur script unreadable
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.