Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How did I mess up roblox hit boxes? (And how can I fix it?)

Asked by 7 years ago
Edited 7 years ago

What my error looks like: http://imgur.com/a/cF5cw

Important notes:
The bullet destroys itself when it detects the collision
The gray area is the actual part
The character is controlled through CFrame and is anchored.
The projectile uses velocity to move

As you can see, collisions aren't being detected at all, or are being detected before the client ever sees the parts collide. I have tried using custom collision as well as the simple part.Touched:connect(function() end) event, but both either go off too early or not at all. What did I mess up?

-The Code

function fire(direction)
    local projectile = Instance.new("Part", workspace)
    projectile.Name = "Projectile"
    projectile.CFrame = CFrame.new(char.Head.Position, char.Head.Position + direction) 
    local spawnPos = projectile.Position
    projectile.Velocity = Vector3.new(direction.X * projectileSPD, 0, direction.Z * projectileSPD)
    projectile.CanCollide = false
    projectile.Size = Vector3.new(.7, 0.2, 3.06)--(.1,.1,.1)--(.7, 0.2, 3.06)
    projectile.Transparency = 0

    local surfacegui = Instance.new("SurfaceGui")
    surfacegui.Face = "Top"
    surfacegui.Parent = projectile

    local image = Instance.new("ImageLabel")
    image.BackgroundTransparency = 1
    image.Image = projectileImage
    image.Position = UDim2.new(0,-100,0,-100)  
    image.Size = UDim2.new(0,1000,0,800)    
    image.Parent = surfacegui   

    local potentialHits = {}
    spawn(function()
        while projectile and wait(0.1) do
            if (projectile.Position - spawnPos).magnitude >= range then 
                projectile:Destroy()
            end
            projectile.Velocity = Vector3.new(direction.X * projectileSPD, 0, direction.Z * projectileSPD)  
        end
    end)

    projectile.Touched:connect(function(otherPart)
        if otherPart.Parent:FindFirstChild("PlayerID") and otherPart.Parent:FindFirstChild("Health") then
            local damage2 = math.max(damage*0.15, damage - (otherPart.Parent.Stats.Defence.Value.X + otherPart.Parent.Stats.Defence.Value.Y)) 
            otherPart.Parent:FindFirstChild("Health").Value = otherPart.Parent:FindFirstChild("Health").Value - damage2
            projectile:Destroy()
        end
        if otherPart.Parent ~= script.Parent and otherPart.Name == "Wall" then
            projectile:Destroy()
        end
    end)
    wait(math.random(cooldown - cooldownrange, cooldown + cooldownrange))
end

-Edit 2 http://imgur.com/a/83oW0 - Most recent code It is now hitting except the hitboxes are still messed up

1
Could you provide the script please? :) It'll help us to diagnose your problem. :) TheeDeathCaster 2368 — 7y
0
Sure tkddude2 75 — 7y
1
My guess is that the Collide property is off, but it's just an assumption; try enabling it & see what happens. :P TheeDeathCaster 2368 — 7y
0
That didn't change anything :/ tkddude2 75 — 7y
View all comments (5 more)
1
Have you tried putting prints around the code (lines 32-41) to see which lines did(n't) fire? If not, I recommend trying that. :) TheeDeathCaster 2368 — 7y
0
I already have a couple times... I'll try again though tkddude2 75 — 7y
1
Anything pop up in the Output? TheeDeathCaster 2368 — 7y
0
The projectile is being touched by other parts, but isn't hitting the player. tkddude2 75 — 7y
0
Now its hitting the player, but from really far away tkddude2 75 — 7y

Answer this question