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

How would I make this script shoot straight?

Asked by 3 years ago

Good day everyone! I have a script inside a tool (gun) and I'm having problems RayCasting in a forward direction regardless of where the mouse is. I'm trying to follow a guide I seen on devforum but I'm having trouble. Now onto my code I have so far...

function RayCast(startPos, vec, rayLength)
    local hitObject, hitPos = game.workspace:FindPartOnRay(Ray.new(startPos + (vec * .01), vec * rayLength), Handle)
    if hitObject and hitPos then
        local distance = rayLength - (hitPos - startPos).magnitude
        if RayIgnoreCheck(hitObject, hitPos) and distance > 0 then
            -- there is a chance here for potential infinite recursion
            return RayCast(hitPos, vec, distance)
        end
    end
    return hitObject, hitPos
end

function OnFireMobile()
    if IsShooting then return end
    if MyHumanoid and MyHumanoid.Health > 0 then
        if RecoilTrack and AmmoInClip > 0 then
            RecoilTrack:Play()
        end
        IsShooting = true
        isFiring.Value = 'true'
        print("Firing Gun")
        while ButtonClick and AmmoInClip > 0 and not Reloading do
            if Spread and not DecreasedAimLastShot then
                Spread = math.min(MaxSpread, Spread + AimInaccuracyStepAmount)
                UpdateCrosshair(Spread)
            end
            DecreasedAimLastShot = not DecreasedAimLastShot
            if Handle:FindFirstChild('FireSound') then
                Pitch.Pitch = .8 + (math.random() * .5)
                Handle.FireSound:Play()
                Handle.Flash.Enabled = true
                flare.MuzzleFlash.Enabled = true
                --Handle.Smoke.Enabled=true --This is optional
            end
            --if MyMouse then
                local targetPoint = MyMouse.Hit.p
                local shootDirection = (targetPoint - Handle.Position).unit
                -- Adjust the shoot direction randomly off by a little bit to account for recoil
                shootDirection = CFrame.Angles((0.5 - math.random()) * 2 * Spread,
                    (0.5 - math.random()) * 2 * Spread,
                    (0.5 - math.random()) * 2 * Spread) * shootDirection
                local hitObject, bulletPos = RayCast(Handle.Position, shootDirection, Range)
                local bullet
                -- Create a bullet here
                if hitObject then
                    bullet = CreateBullet(bulletPos)
                end
                if hitObject and hitObject.Parent then
                    local hitHumanoid = hitObject.Parent:FindFirstChild("Humanoid")
                    if hitHumanoid then
                        local hitPlayer = game.Players:GetPlayerFromCharacter(hitHumanoid.Parent)
                        if MyPlayer.Neutral or (hitPlayer and hitPlayer.TeamColor ~= MyPlayer.TeamColor) then
                            TagHumanoid(hitHumanoid, MyPlayer)
                            hitHumanoid:TakeDamage(Damage)
                            if bullet then
                                bullet:Destroy()
                                bullet = nil
                                WeaponGui.Crosshair.Hit:Play()
                                --bullet.Transparency = 1
                            end
                            spawn(UpdateTargetHit)
                        end
                    end
                end
                AmmoInClip = AmmoInClip - 1
                UpdateAmmo(AmmoInClip)
            --end
            wait(FireRate)
        end
        Handle.Flash.Enabled = false
        IsShooting = false
        isFiring.Value = 'false'
        flare.MuzzleFlash.Enabled = false
        --Handle.Smoke.Enabled=false --This is optional
        if AmmoInClip == 0 then
            Handle.Tick:Play()
            --WeaponGui.Reload.Visible = true
            Reload()
        end
        if RecoilTrack then
            RecoilTrack:Stop()
        end
    end
end

the guide on devforum:

https://devforum.roblox.com/t/how-to-raycast-forward-without-using-players-mouse/348513/7

raycast_demo.rbxl

https://devforum.roblox.com/uploads/short-url/uKXCQMSWrDIdhmFCCgQp02aV6pj.rbxl

the gun I'm using

https://www.roblox.com/library/1533692920/Working-Pistol-Gun-WORKING?ViewInBrowser=true&CreatorId=411120421&SearchId=162E8FC5-2A2C-4A21-AC7B-14B63EF90523&Category=Model&Position=1&SearchKeyword=gun&CreatorType=User&SortType=Relevance

Answer this question