Can anyone tell me how to make a script that shoots a rocket launcher on specific axis like on X Axis? Anyway here's the script I wanted to make. Any help would be appreciated, Thank you for your attention.
Note : I'm really sorry that I copied this on "Roblox Battle Rocket Launcher" I only wanted to edit it. I'm just a beginner scripter.
----------------- --| Constants |-- ----------------- local COOLDOWN = 3.0 -- Seconds until tool can be used again local COOLDOWN_JUGGERNAUT = 1.5 local COOLDOWN_ROCKETONLY = 2 -- RocketPropulsion Fields local TARGET_RADIUS = 5 local MAX_SPEED = 60 local MAX_TORQUE = Vector3.new(4e6, 4e6, 0) local MAX_THRUST = 50000 local THRUST_P = 500 local THRUST_D = 50000 local TARGET_OVERSHOOT_DISTANCE = 10000000 -- How far away from the handle does the user have to click for -- the rocket to allow killing of the user themself. local CLOSE_SHOT_DISTANCE = 10 -- Rocket Fields local ROCKET_MESH_ID = 'http://www.roblox.com/asset/?id=94690081' local ROCKET_MESH_SCALE = Vector3.new(2.5, 2.5, 2) local ROCKET_PART_SIZE = Vector3.new(1, 1, 4) -------------------- --| WaitForChild |-- -------------------- -- Waits for parent.child to exist, then returns it local function WaitForChild(parent, childName) assert(parent, "ERROR: WaitForChild: parent is nil") while not parent:FindFirstChild(childName) do parent.ChildAdded:wait() end return parent[childName] end ----------------- --| Variables |-- ----------------- local DebrisService = game:GetService('Debris') local PlayersService = game:GetService('Players') local Tool = script.Parent local ToolHandle = Tool.Handle local RocketScript = WaitForChild(script, 'Rocket') local SwooshSound = WaitForChild(script, 'Swoosh') local BoomSound = WaitForChild(script, 'Boom') local ReloadSound = WaitForChild(ToolHandle, 'ReloadSound') local EquipSound = WaitForChild(ToolHandle, 'Equip') local MyModel = nil local MyPlayer = nil local BaseRocket = nil local RocketClone = nil ----------------- --| Functions |-- ----------------- local function MakeBaseRocket() -- Set up the rocket part local rocket = Instance.new('Part') rocket.Name = 'Rocket' rocket.FormFactor = Enum.FormFactor.Custom --NOTE: This must be done before changing Size rocket.Size = ROCKET_PART_SIZE rocket.CanCollide = false rocket.BottomSurface = Enum.SurfaceType.Smooth rocket.TopSurface = Enum.SurfaceType.Smooth -- Add the mesh local mesh = Instance.new('SpecialMesh', rocket) mesh.MeshId = ROCKET_MESH_ID mesh.Scale = ROCKET_MESH_SCALE mesh.TextureId = ToolHandle.Mesh.TextureId -- Add fire local fire = Instance.new('Fire', rocket) fire.Heat = 5 fire.Size = 2 -- Add the propulsion local rocketPropulsion = Instance.new('RocketPropulsion', rocket) rocketPropulsion.CartoonFactor = 1 rocketPropulsion.TargetRadius = TARGET_RADIUS rocketPropulsion.MaxSpeed = MAX_SPEED rocketPropulsion.MaxTorque = MAX_TORQUE rocketPropulsion.MaxThrust = MAX_THRUST rocketPropulsion.ThrustP = THRUST_P rocketPropulsion.ThrustD = THRUST_D -- Clone the sounds local swooshSoundClone = SwooshSound:Clone() swooshSoundClone.Parent = rocket local boomSoundClone = BoomSound:Clone() boomSoundClone.PlayOnRemove = true boomSoundClone.Parent = rocket -- Attach creator tags local creatorTag = Instance.new('ObjectValue', rocket) creatorTag.Name = 'creator' --NOTE: Must be called 'creator' for website stats creatorTag.Value = MyPlayer local nameTag = Instance.new('StringValue', creatorTag) nameTag.Name = 'weaponName' nameTag.Value = Tool.Name local iconTag = Instance.new('StringValue', creatorTag) iconTag.Name = 'weaponIcon' iconTag.Value = Tool.TextureId -- The "close shot" tag. True if the rocket should be able to kill the -- creator. local closeShot = Instance.new('BoolValue', rocket) closeShot.Name = 'closeShot' closeShot.Value = false -- Finally, clone the rocket script and enable it local rocketScriptClone = RocketScript:Clone() rocketScriptClone.Parent = rocket rocketScriptClone.Disabled = false return rocket end local function OnEquipped() MyModel = Tool.Parent MyPlayer = PlayersService:GetPlayerFromCharacter(MyModel) BaseRocket = MakeBaseRocket() RocketClone = BaseRocket:Clone() EquipSound:Play() end local function OnActivated(targetOverride) wait(0) --TODO: Remove when Mouse.Hit and Humanoid.TargetPoint update properly on iPad if Tool.Enabled and MyModel and MyModel:FindFirstChild('Humanoid') and MyModel.Humanoid.Health > 0 then Tool.Enabled = false -- Pick a target local targetPosition = targetOverride or MyModel.Humanoid.TargetPoint -- Maybe set the "closeShot" flag print("CloseShot: ", (targetPosition - ToolHandle.Position).magnitude) if (targetPosition - ToolHandle.Position).magnitude < CLOSE_SHOT_DISTANCE then RocketClone.closeShot.Value = true end -- Position the rocket clone local spawnPosition = ToolHandle.Position + (ToolHandle.CFrame.lookVector * (ToolHandle.Size.Z / 2)) RocketClone.CFrame = CFrame.new(spawnPosition, targetPosition) --NOTE: This must be done before assigning Parent DebrisService:AddItem(RocketClone, 30) RocketClone.Parent = game.Workspace -- Assign target and launch! local rocketPropulsion = RocketClone:FindFirstChild('RocketPropulsion') if rocketPropulsion then local direction = (targetPosition - RocketClone.Position).unit rocketPropulsion.TargetOffset = RocketClone.Position + (direction * TARGET_OVERSHOOT_DISTANCE) rocketPropulsion:Fire() end -- Prepare the next rocket to be fired RocketClone = BaseRocket:Clone() ReloadSound:Play() -- Cooldown wait(COOLDOWN) -- Stop the reloading sound if it hasn't already finished ReloadSound:Stop() Tool.Enabled = true end end local function OnUnequipped() ReloadSound:Stop() end -- Also activate when the Action Button is pressed local function OnChildAdded(child) if child.Name == 'ActionButtonData' then child.Changed:connect(function(newValue) local bindable = child:FindFirstChild('GetTargetPosition') if bindable and string.sub(newValue, 1, 1) == 'v' then local matches = {} for match in string.gmatch(newValue, '%d+%.?%d*') do table.insert(matches, match) end if #matches == 4 then local screenPosition = Vector2.new(matches[1], matches[2]) local screenSize = Vector2.new(matches[3], matches[4]) local targetPosition = bindable:Invoke(screenPosition, screenSize, {MyModel}) OnActivated(targetPosition) end end end) end end -------------------- --| Script Logic |-- -------------------- Tool.Equipped:connect(OnEquipped) Tool.Activated:connect(OnActivated) Tool.Unequipped:connect(OnUnequipped) -- Listen for Action Button Data Object for _, child in pairs(Tool:GetChildren()) do OnChildAdded(child) end Tool.ChildAdded:connect(OnChildAdded)