I've been working to find the most accurate hit box I can find. There is Region3,magnitude and raycasting. I chose Region3 cause it's the most simplest. I have a video of the combat system here. Red Boxes are the hitboxes
It's basically a 4 way combo system with things like damage indicators. Damage Indictors,Stamina and stun All work perfectly except the accuracy of the hitboxes. Basically what i'm trying to say is that sometimes the hitbox will hit other hitboxes,the ground or even me and the whole attack will get fallen off.(because I use debounces) I haven't really found any other explanation as to why region3 script wouldn't be working but if there is any reason please tell me. This is my first combat system so any advice would be appreciated.
Local Script Only used to access the player and prevent some client to server hacking
---script is pureply to get the player(Player stats)
script.Parent.Activated:Connect(function()
game.ReplicatedStorage.StaminaRem.ARemote:FireServer()
end)
Server Script
Tool = script.Parent
char = script.Parent.Parent.Parent.Character
local ten = true
local en = true
local TweenService = game:GetService("TweenService")
local Player = game.Players.LocalPlayer
local swinging = false
local on = 1
local running = false
local timer = tick()
--Orginal -- 4,0,1.5,0
--Small -- 1,0,0.5,0
local function newhitbox()
--Right Arm HitBox
local RAhitbox = Region3.new(Vector3.new(0, 0, 0),Vector3.new(2, 2.5, 2))
local Hhitbox = Region3.new(Vector3.new(0, 0, 0),Vector3.new(2, 2, 2))
local RA = Instance.new("Part")
game:GetService("Debris"):AddItem(RA,0.5)
RA.Parent = char
RA.Name = "RA"
RA.Anchored = false
RA.Size = RAhitbox.Size
RA.CanCollide = false
RA.Transparency = 0.5
RA.BrickColor = BrickColor.new("Really red")
RA.CFrame = char["Right Arm"].CFrame
RA.BottomSurface = "Smooth"
RA.TopSurface = "Smooth"
local weld = Instance.new("Weld")
weld.Part0 = char["Right Arm"]
weld.C0 = char["Right Arm"].CFrame:inverse()
weld.Part1 = RA
weld.C1 = RA.CFrame:inverse()
weld.Parent = RA
RA.Anchored = false
--Left Arm HixBox
local LAhitbox = Region3.new(Vector3.new(0, 0, 0),Vector3.new(2, 2.5, 2))
local LA = Instance.new("Part")
game:GetService("Debris"):AddItem(LA,0.5)
LA.Parent = char
LA.Name = "LA"
LA.Anchored = false
LA.Size = LAhitbox.Size
LA.CanCollide = false
LA.Transparency = 0.5
LA.BrickColor = BrickColor.new("Really red")
LA.CFrame = char["Left Arm"].CFrame
LA.BottomSurface = "Smooth"
LA.TopSurface = "Smooth"
local weld = Instance.new("Weld")
weld.Part0 = char["Left Arm"]
weld.C0 = char["Left Arm"].CFrame:inverse()
weld.Part1 = LA
weld.C1 = LA.CFrame:inverse()
weld.Parent = LA
LA.Anchored = false
--Left Leg
local LLhitbox = Region3.new(Vector3.new(0, 0, 0),Vector3.new(2, 2.5, 2))
local LL = Instance.new("Part")
game:GetService("Debris"):AddItem(LL,0.5)
LL.Parent = char
LL.Name = "LL"
LL.Anchored = false
LL.Size = LLhitbox.Size
LL.CanCollide = false
LL.Transparency = 0.5
LL.BrickColor = BrickColor.new("Really red")
LL.CFrame = char["Left Leg"].CFrame
LL.BottomSurface = "Smooth"
LL.TopSurface = "Smooth"
local weld = Instance.new("Weld")
weld.Part0 = char["Left Leg"]
weld.C0 = char["Left Leg"].CFrame:inverse()
weld.Part1 = LL
weld.C1 = LL.CFrame:inverse()
weld.Parent = LL
LL.Anchored = false
--Right Leg
local RLhitbox = Region3.new(Vector3.new(0, 0, 0),Vector3.new(2, 2.5, 2))
local RL = Instance.new("Part")
game:GetService("Debris"):AddItem(RL,0.5)
RL.Parent = char
RL.Name = "RL"
RL.Anchored = false
RL.Size = RLhitbox.Size
RL.CanCollide = false
RL.Transparency = 0.5
RL.BrickColor = BrickColor.new("Really red")
RL.CFrame = char["Right Leg"].CFrame
RL.BottomSurface = "Smooth"
RL.TopSurface = "Smooth"
local weld = Instance.new("Weld")
weld.Part0 = char["Right Leg"]
weld.C0 = char["Right Leg"].CFrame:inverse()
weld.Part1 = RL
weld.C1 = RL.CFrame:inverse()
weld.Parent = RL
RL.Anchored = false
--Head
local H = Instance.new("Part")
game:GetService("Debris"):AddItem(H,0.5)
H.Parent = char
H.Name = "H"
H.Anchored = false
H.Size = Hhitbox.Size
H.CanCollide = false
H.Transparency = 0.5
H.BrickColor = BrickColor.new("Really red")
H.CFrame = char["Head"].CFrame
H.BottomSurface = "Smooth"
H.TopSurface = "Smooth"
local weld = Instance.new("Weld")
weld.Part0 = char["Head"]
weld.C0 = char["Head"].CFrame:inverse()
weld.Part1 = H
weld.C1 = H.CFrame:inverse()
weld.Parent = H
H.Anchored = false
--Touched Event--Right Arm
RA.Touched:Connect(function(hit)
local tweenInfo1 = TweenInfo.new(0.1,Enum.EasingStyle.Quad,Enum.EasingDirection.Out,0,false)
local tweenInfo2 = TweenInfo.new(0.2,Enum.EasingStyle.Quad,Enum.EasingDirection.Out,0,false)
local tweenInfo3 = TweenInfo.new(0.5,Enum.EasingStyle.Quad,Enum.EasingDirection.Out,0,false)
if on == 1 then
local touching = char.RA:GetTouchingParts()
for i,v in pairs(touching) do
if not ten then return end
if not swinging then return end
ten = false
local hum = char.Humanoid
if hit.Parent:FindFirstChild("Humanoid") and on == 1 then
print("hit 1")
script.Parent.Hit:Play()
hit.Parent:FindFirstChild("Stun").Value = true
local ehum = hit.Parent:FindFirstChild("Humanoid")
local anim = ehum:LoadAnimation(Tool.StunRight)
anim:Play()
--Opponet moving--
local eroot = hit.Parent:FindFirstChild("HumanoidRootPart")
local bv = Instance.new("BodyVelocity",hit.Parent.Torso)
game:GetService("Debris"):AddItem(bv,0.1)
bv.MaxForce = Vector3.new(math.huge,math.huge,math.huge)
bv.Velocity = char.HumanoidRootPart.CFrame.LookVector*11
--
hit.Parent.Humanoid:TakeDamage(char.StrengthF.Value * 3 / 2)
local DI = game.ReplicatedStorage.Parts.DI:Clone()
game:GetService("Debris"):AddItem(DI,0.7)
local tween1 = TweenService:Create(DI.DamageBill,tweenInfo1,{Size = UDim2.new(4,0,1.5,0)})
local tween2 = TweenService:Create(DI.DamageBill.Frame.DamageText,tweenInfo2,{TextTransparency = 1})
local tween4 = TweenService:Create(DI,tweenInfo3,{CFrame = hit.Parent:FindFirstChild("HumanoidRootPart").CFrame * CFrame.new(math.random(-4,4),3,0)})
local tween3 = TweenService:Create(DI.DamageBill.Frame.DamageText,tweenInfo2,{TextStrokeTransparency = 1})
tween1:Play()
tween4:Play()
DI.CanCollide = false
DI.Anchored = true
DI.Parent = workspace
DI.CFrame = hit.Parent:FindFirstChild("HumanoidRootPart").CFrame
DI.DamageBill.Frame.DamageText.Text = char.StrengthF.Value * 3 / 2
wait(0.5)
tween2:Play()
tween3:Play()
hit.Parent:FindFirstChild("Stun").Value = false
end
end
end
end)
end
game.ReplicatedStorage.StaminaRem.ARemote.OnServerEvent:Connect(function(Player)
local tweenInfo1 = TweenInfo.new(0.2,Enum.EasingStyle.Quad,Enum.EasingDirection.Out,0,false)
if en == false then return end
if char.Stun.Value == false then
en = false
local Wave = game.ReplicatedStorage
if tick()-timer > 0.6 then
on = 1
end
newhitbox()
local root = char:FindFirstChild("HumanoidRootPart")
local bp2 = Instance.new("BodyVelocity",char.Torso)
game:GetService("Debris"):AddItem(bp2,0.1)
bp2.MaxForce = Vector3.new(math.huge,math.huge,math.huge)
bp2.Velocity = root.CFrame.LookVector*10
if char.Humanoid.WalkSpeed ~= 16 then
running = true
else
running = false
end
script.Parent.Miss:Play()
timer = tick()
local char = Tool.Parent
local hum = char:WaitForChild("Humanoid")
local anim = hum:LoadAnimation(script.Parent["Animation"..on])
anim:Play()
swinging = true
if running == true then
char.Humanoid.WalkSpeed = 0
else
char.Humanoid.WalkSpeed = 1
end
if on == 4 then
print("on = 4")
for i = 1,6 do
wait(0.1)
char.Humanoid.WalkSpeed = 0
end
end
wait(0.3)
ten = true
if running == true then
char.Humanoid.WalkSpeed = Player.Stats.Agility.Value * 0.4 + 16
else
char.Humanoid.WalkSpeed = 16
end
on = on + 1
if on >= 5 then
on = 1
wait(0.6)
end
en = true
swinging = false
end
end)
Regards, Bl_ueHistor
