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