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

Any idea on how to fix a script error with my plane guns not reacting to surfaces?

Asked by 5 years ago
Edited 5 years ago

So I have a plane game. All the planes have guns. Shooting at the enemy planes wings activates a script that adds an image on to them and breaks them. The problem is that the plane guns bullets don't react with the wings script. the script in the wings works fine I tested it but something is wrong with the bullets. Heres the gun script

--wait()
local ball = script.Parent
local damage = 40

function onTouched(hit)
    local humanoid = hit.Parent:findFirstChild("Humanoid")


    if hit:GetMass() < 1 * 20 then
        if hit.Anchored == false then
            hit:BreakJoints()
        end
    end


    if humanoid ~= nil then
        tagHumanoid(humanoid)
        humanoid:TakeDamage(damage)
        wait(2)
        untagHumanoid(humanoid)
    end

    connection:disconnect()
    ball:remove()
end

function tagHumanoid(humanoid)
    -- todo: make tag expire
    local tag = ball:findFirstChild("creator")
    if tag ~= nil then
        local new_tag = tag:clone()
        new_tag.Parent = humanoid
    end
end


function untagHumanoid(humanoid)
    if humanoid ~= nil then
        local tag = humanoid:findFirstChild("creator")
        if tag ~= nil then
            tag.Parent = nil
        end
    end
end

connection = ball.Touched:connect(onTouched)

Heres the plane script

bin = script.Parent
plane = nil
hold = false
local debounce = false
local planedebounce = false
local stuntdebounce = false
local controlling = false
local currentspeed = 0
local turn = nil
fly = false

local missile = false
local shooting = false



function fire_MachineGun(gun_Source, player)
    while shooting == true do
        missile = true
        local guns = gun_Source:GetChildren()
                local vehicle = findPlane(script.Parent.Parent.Parent)
        for i = 1,#guns do
            if guns[i].Name == "MachineGun" and guns[i].className == "Part" then
                local shoot = Instance.new("Part")
                shoot.BrickColor = BrickColor.new("Bright yellow")
                shoot.formFactor = "Custom"
                shoot.Size = Vector3.new(0.4,0.4,6)
                shoot.CFrame = guns[i].CFrame * CFrame.new(0,0,-50)
                shoot.Name = "Bullet"
                local d = game:GetService("Debris")
                d:AddItem(shoot,5)

                local force = Instance.new("BodyVelocity")
                force.Parent = shoot
                force.Name = "Move"
                force.velocity = guns[i].CFrame.lookVector * 750

                local creator = Instance.new("ObjectValue")
                creator.Name = "creator"
                creator.Value = player
                creator.Parent = shoot

                local shot = script:findFirstChild("GunScript"):clone()
                shot.Disabled = false
                shot.Parent = shoot

                shoot.Parent = Workspace
            end
        end
        vehicle.FireGun:play()
        wait(0.15)
    end
    missile = false
end

function computeDirection(vec)
    local lenSquared = vec.magnitude * vec.magnitude
    local invSqrt = 1 / math.sqrt(lenSquared)
    return Vector3.new(vec.x * invSqrt, vec.y * invSqrt, vec.z * invSqrt)
end

function move(point, engine)
    local origincframe = engine:findFirstChild("Direction").cframe
    size = engine.Size

    target = engine.Position+((point - engine.Position).unit*100)
    local dir = (target - engine.Position).unit
    local spawnPos = engine.Position
    left = engine.CFrame*CFrame.new(-size.x/2, 0, 0).p
    right = engine.CFrame*CFrame.new(size.x/2, 0, 0).p
    md = (target - engine.Position).magnitude

    foebmd = engine.CFrame*CFrame.new(0, 0, -md).p
    toleft = (target -left).magnitude
    toright = (target -right).magnitude
    rot = ((foebmd - target).magnitude/10)
    local pos = spawnPos + (dir * 1)
    turn = math.rad((rot/10)*engine.TiltFactor.Value)
    if turn > math.rad(89) then
    turn = math.rad(89)
    end
    if toleft< toright and toleft >rot then
        engine:findFirstChild("Direction").cframe = CFrame.new(pos,  pos + dir)*CFrame.fromEulerAnglesXYZ(0, 0, turn)
    elseif toleft > toright and toright >rot then
        engine:findFirstChild("Direction").cframe = CFrame.new(pos,  pos + dir)*CFrame.fromEulerAnglesXYZ(0, 0, -turn)
    else
        engine:findFirstChild("Direction").cframe = CFrame.new(pos,  pos + dir)
    end
    engine:findFirstChild("Direction").P = engine.TurnSpeed.Value
end

function findPlane(player)
    local list = player.Character:GetChildren()
    for x = 1, #list do
        if (list[x].Name == "AircraftSeat") then
            return list[x]
        end
    end
    return nil
end

function onButton1Down(mouse)
    local vehicle = findPlane(script.Parent.Parent.Parent)
    if vehicle ~= nil and debounce == false and planedebounce == false then
    if fly == false and taxi == false then return end
    debounce = true

    controlling = true

    while true do
        wait()
        local engine = vehicle
        local position = mouse.Hit
        local target = position.p
        move(target, engine)
        if planedebounce == true or
        controlling == false then break end
    end
    wait(0.1)
    debounce = false
    end
end

function onButton1Up(mouse)
    controlling = false
end

function onSelected(mouse)
    mouse.Icon = "http://www.roblox.com/asset/?id=7419350"
    mouse.Button1Down:connect(function() onButton1Down(mouse) end)
    mouse.Button1Up:connect(function() onButton1Up(mouse) end)
    mouse.KeyDown:connect(onKeyDown)
    mouse.KeyUp:connect(onKeyUp)
    mouse.Move:connect(function() Fly(mouse) end)
    mouse.Idle:connect(function() Fly(mouse) end)
end

function Fly(mouse)
    local vehicle = findPlane(script.Parent.Parent.Parent)
    if (vehicle==nil) then return end
    vehicle.Thrust.velocity = (vehicle.CFrame.lookVector * currentspeed) + Vector3.new(0,vehicle.LiftTrim.Value/100,0)
end

function onKeyDown(key)
    if (key~=nil) then
        key = key:lower()
        local vehicle = findPlane(script.Parent.Parent.Parent)
        if (vehicle==nil) then return end
            if key == "y" then
                fly = true
                vehicle.Startup:Play()
                vehicle.Starter1.Smoke.Enabled = true
                wait(1)
                vehicle.Starter1.Smoke.Enabled = false
                vehicle.Fly:Play()
                vehicle.Direction.cframe = vehicle.CFrame
                vehicle.Direction.maxTorque = Vector3.new(4e3,4e3,4e3)
                vehicle.Thrust.maxForce = Vector3.new(9e20,9e20,9e20)
                vehicle.Speed.Value = vehicle.MaxSpeed.Value
                while fly == true do
                    if currentspeed < vehicle.Speed.Value then
                        currentspeed = currentspeed + 1
                    elseif currentspeed > vehicle.Speed.Value then
                        currentspeed = currentspeed - 1
                    end
                    if vehicle.Acceleration.Value > 1000 then vehicle.Acceleration.Value = 1000 end
                    wait((1-(vehicle.Acceleration.Value/1000))+0.01)
                    if fly == false then break end
                end
            end
            if key == "x" then
                fly = false
                currentspeed = 0
                vehicle.Direction.maxTorque = Vector3.new(0,0,0)
                vehicle.Thrust.maxForce = Vector3.new(0,0,0)
            end
            if key == "l" and fly == true then
                vehicle.Direction.maxTorque = Vector3.new(4e3,0,4e3)
                local frame = vehicle:FindFirstChild("OriginCFrame")
                if frame ~= nil then
                vehicle.Direction.cframe = frame.Value
                end
                wait(2)
                vehicle.Direction.cframe = vehicle.CFrame
                vehicle.Direction.maxTorque = Vector3.new(4e3,4e3,4e3)
            end 
            if key == "s" then
                if vehicle.Speed.Value > vehicle.MinSpeed.Value then
                    vehicle.Speed.Value = vehicle.Speed.Value - 10
                end
            end
            if key == "w" then
                if vehicle.Speed.Value < vehicle.MaxSpeed.Value then
                    vehicle.Speed.Value = vehicle.Speed.Value + 10
                end
            end
            if key == "f" and missile == false then
                shooting = true
                fire_MachineGun(vehicle, bin.Parent.Parent)
            end
    end
end

function onKeyUp(key)
    if (key~=nil) then
        key = key:lower()
        if key == "f" then
            shooting = false
        end
        local vehicle = findPlane(script.Parent.Parent.Parent)
        if (vehicle==nil) then return end
    end
end

bin.Selected:connect(onSelected)
bin.Deselected:connect(onDeselected)

HERES THE WING Break SCRIPT

function onTouched(hit) 
    if hit:GetMass() > 1 * 20 then
    script.Parent.Parent.Parent.AircraftSeat.Crash:Play()
    script.Parent.Parent.Parent.AircraftSeat.Fly:Remove()
    script.Parent.Parent.Parent.AircraftSeat.Direction:Remove()
    script.Parent.Parent.Parent.AircraftSeat.Thrust:Remove()
    script.Parent:BreakJoints()
    script:Remove()
    end
end

script.Parent.Touched:connect(onTouched)

And heres the wing image script

function onTouch(hit)

        if hit.Name == "Bullet" then
            if script.Parent.Decal1.Texture == "http://www.roblox.com/asset/?id=79618928" then
            script.Parent.Decal1.Texture = "http://www.roblox.com/asset/?id=81793907"
            script.Parent.Decal2.Texture = "http://www.roblox.com/asset/?id=81793907"
            script.Parent.BH2.Disabled = false
            script:Remove()
            end
        end
end

script.Parent.Touched:connect(onTouch)

Any idea on how to fix this?

1
Remove() is deprecated, use Destroy() DeceptiveCaster 3761 — 5y

Answer this question