Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Objects To Lua Make By HairBaconGamming --
- local Module_Scripts = {}
- local RocketLauncher = Instance.new("Tool")
- local Handle = Instance.new("Part")
- local Mesh = Instance.new("SpecialMesh")
- local Server = Instance.new("Script")
- local Swoosh = Instance.new("Sound")
- local Rocket = Instance.new("Script")
- local Boom = Instance.new("Sound")
- -- Properties --
- RocketLauncher.CanBeDropped = true
- RocketLauncher.Grip = CFrame.new(0.699999988, 0, -0.5, 0, 0, -1, -1, 0, 0, 0, 1, 0)
- RocketLauncher.GripForward = Vector3.new(1, -0, -0)
- RocketLauncher.GripPos = Vector3.new(0.699999988079071, 0, -0.5)
- RocketLauncher.GripRight = Vector3.new(0, -1, 0)
- RocketLauncher.GripUp = Vector3.new(0, 0, 1)
- RocketLauncher.Name = [[RocketLauncher]]
- RocketLauncher.Parent = owner.Backpack
- RocketLauncher.TextureId = [[http://www.roblox.com/asset/?id=90021376]]
- Handle.BottomSurface = Enum.SurfaceType.Smooth
- Handle.CFrame = CFrame.new(-76.7302856, 0.420043945, -61.7727242, 1, 0, 0, 0, 6.30170107e-05, 1.00000024, 0, -1.00000024, 6.30170107e-05)
- Handle.CanCollide = false
- Handle.Name = [[Handle]]
- Handle.Orientation = Vector3.new(-90, 0, 0)
- Handle.Parent = RocketLauncher
- Handle.Position = Vector3.new(-76.73028564453125, 0.4200439453125, -61.77272415161133)
- Handle.Rotation = Vector3.new(-90, 0, 0)
- Handle.Size = Vector3.new(4.920006275177002, 0.7400005459785461, 0.839999794960022)
- Handle.TopSurface = Enum.SurfaceType.Smooth
- Mesh.MeshId = [[rbxasset://fonts/rocketlauncher.mesh]]
- Mesh.MeshType = Enum.MeshType.FileMesh
- Mesh.Parent = Handle
- Mesh.Scale = Vector3.new(0.75, 0.75, 0.75)
- Mesh.TextureId = [[rbxasset://textures/rocketlaunchertex.png]]
- function Server_ScriptfakeXD()
- local script = Instance.new("Script",RocketLauncher)
- Server = script
- script.Name = [[Server]]
- local require_fake = require
- local require = function(Object)
- local functiom = Module_Scripts[Object]
- if functiom then
- return functiom()
- end
- return require_fake(Object)
- end
- -----------------
- --| Constants |--
- -----------------
- local GRAVITY_ACCELERATION = workspace.Gravity
- local RELOAD_TIME = 0-- Seconds until tool can be used again
- local ROCKET_SPEED = 60 -- Speed of the projectile
- local MISSILE_MESH_ID = nil
- local MISSILE_MESH_SCALE = Vector3.new(0.35, 0.35, 0.25)
- local ROCKET_PART_SIZE = Vector3.new(1.2, 1.2, 3.27)
- -----------------
- --| Variables |--
- -----------------
- local DebrisService = game:GetService('Debris')
- local PlayersService = game:GetService('Players')
- local MyPlayer
- local Tool = RocketLauncher
- local ToolHandle = Tool:WaitForChild("Handle")
- local MouseLoc = print("kys")
- local RocketScript = script:WaitForChild('Rocket')
- local SwooshSound = script:WaitForChild('Swoosh')
- local BoomSound = script:WaitForChild('Boom')
- --NOTE: We create the rocket once and then clone it when the player fires
- local Rocket = Instance.new('Part') do
- -- Set up the rocket part
- Rocket.Name = 'Rocket'
- Rocket.FormFactor = Enum.FormFactor.Custom --NOTE: This must be done before changing Size
- Rocket.Size = ROCKET_PART_SIZE
- Rocket.CanCollide = true
- Rocket.BackSurface = 3
- Rocket.BottomSurface = 3
- Rocket.FrontSurface = 3
- Rocket.LeftSurface = 3
- Rocket.RightSurface = 3
- Rocket.TopSurface = 3
- Rocket.Color = Color3.new(0.0509804, 0.411765, 0.67451)
- Rocket.Size = Vector3.new(1,1,4)
- -- Add the mesh
- --local mesh = Instance.new('SpecialMesh', Rocket)
- --mesh.MeshId = MISSILE_MESH_ID
- --mesh.Scale = MISSILE_MESH_SCALE
- -- Add fire
- local fire = Instance.new('Fire', Rocket)
- fire.Heat = 5
- fire.Size = 2
- -- Add a force to counteract gravity
- local bodyForce = Instance.new('BodyForce', Rocket)
- bodyForce.Name = 'Antigravity'
- bodyForce.Force = Vector3.new(0, Rocket:GetMass() * GRAVITY_ACCELERATION, 0)
- -- Clone the sounds and set Boom to PlayOnRemove
- -- Attach creator tags to the rocket early on
- local creatorTag = Instance.new('ObjectValue', Rocket)
- creatorTag.Value = MyPlayer
- creatorTag.Name = 'creator' --NOTE: Must be called 'creator' for website stats
- local iconTag = Instance.new('StringValue', creatorTag)
- iconTag.Value = Tool.TextureId
- iconTag.Name = 'icon'
- -- Finally, clone the rocket script and enable it
- local rocketScriptClone = RocketScript:Clone()
- rocketScriptClone.Parent = Rocket
- rocketScriptClone.Disabled = false
- end
- -----------------
- --| Functions |--
- -----------------
- local function OnActivated()
- local myModel = MyPlayer.Character
- if Tool.Enabled and myModel and myModel:FindFirstChildOfClass("Humanoid") and myModel.Humanoid.Health > 0 then
- Tool.Enabled = false
- local Pos = ToolHandle.CFrame*CFrame.new(0,0,6).LookVector
- local pos2 = ToolHandle.CFrame*CFrame.new(0,0,6).Position
- local posc = ToolHandle.CFrame*CFrame.new(0,0,6)
- -- Create a clone of Rocket and set its color
- local rocketClone = Rocket:Clone()
- DebrisService:AddItem(rocketClone, 30)
- rocketClone.BrickColor = BrickColor.new(23)
- -- Position the rocket clone and launch!
- local spawnPosition = (posc * CFrame.new(5, 0, 0)).p
- rocketClone.CFrame = Tool.Parent.Head.CFrame*CFrame.new(0,0,-6) --NOTE: This must be done before assigning Parent
- rocketClone.Velocity = rocketClone.CFrame.LookVector * ROCKET_SPEED --NOTE: This should be done before assigning Parent
- rocketClone.Parent = workspace
- rocketClone:SetNetworkOwner(nil)
- Rocket.Touched:Connect(OnTouched)
- wait(RELOAD_TIME)
- Tool.Enabled = true
- end
- end
- function OnEquipped()
- MyPlayer = PlayersService:GetPlayerFromCharacter(Tool.Parent)
- end
- --------------------
- --| Script Logic |--
- --------------------
- Tool.Equipped:Connect(OnEquipped)
- Tool.Activated:Connect(OnActivated)
- end
- coroutine.wrap(Server_ScriptfakeXD)()
- Swoosh.Looped = true
- Swoosh.Name = [[Swoosh]]
- Swoosh.Parent = Server
- Swoosh.SoundId = [[rbxasset://sounds/Rocket whoosh 01.wav]]
- Swoosh.Volume = 0.699999988079071
- function Rocket_ScriptfakeXD()
- local script = Instance.new("Script",Server)
- Rocket = script
- script.Name = [[Rocket]]
- local require_fake = require
- local require = function(Object)
- local functiom = Module_Scripts[Object]
- if functiom then
- return functiom()
- end
- return require_fake(Object)
- end
- -----------------
- --| Constants |--
- -----------------
- local BLAST_RADIUS = 8 -- Blast radius of the explosion
- local BLAST_DAMAGE = 60 -- Amount of damage done to players
- local BLAST_FORCE = 1000 -- Amount of force applied to parts
- local IGNORE_LIST = {rocket = 1, handle = 1, effect = 1, water = 1} -- Rocket will fly through things named these
- --NOTE: Keys must be lowercase, values must evaluate to true
- -----------------
- --| Variables |--
- -----------------
- local DebrisService = game:GetService('Debris')
- local PlayersService = game:GetService('Players')
- local Rocket = script.Parent
- local CreatorTag = Rocket:WaitForChild('creator')
- local SwooshSound = Rocket:WaitForChild('Swoosh')
- -----------------
- --| Functions |--
- -----------------
- -- Removes any old creator tags and applies a new one to the target
- local function ApplyTags(target)
- while target:FindFirstChild('creator') do
- target.creator:Destroy()
- end
- local creatorTagClone = CreatorTag:Clone()
- DebrisService:AddItem(creatorTagClone, 1.5)
- creatorTagClone.Parent = target
- end
- -- Returns the ancestor that contains a Humanoid, if it exists
- local function FindCharacterAncestor(subject)
- if subject and subject ~= workspace then
- local humanoid = subject:FindFirstChildOfClass('Humanoid')
- if humanoid then
- return subject, humanoid
- else
- return FindCharacterAncestor(subject.Parent)
- end
- end
- return nil
- end
- local function IsInTable(Table,Value)
- for _,v in pairs(Table) do
- if v == Value then
- return true
- end
- end
- return false
- end
- -- Customized explosive effect that doesn't affect teammates and only breaks joints on dead parts
- local TaggedHumanoids = {}
- local function OnExplosionHit(hitPart, hitDistance, blastCenter)
- if hitPart and hitDistance then
- local character, humanoid = FindCharacterAncestor(hitPart.Parent)
- if character then
- local myPlayer = CreatorTag.Value
- if myPlayer and not myPlayer.Neutral then -- Ignore friendlies caught in the blast
- local player = PlayersService:GetPlayerFromCharacter(character)
- if player and player ~= myPlayer and player.TeamColor == Rocket.BrickColor then
- return
- end
- end
- end
- if humanoid and humanoid.Health > 0 then -- Humanoids are tagged and damaged
- if not IsInTable(TaggedHumanoids,humanoid) then
- print("Tagged")
- table.insert(TaggedHumanoids,humanoid)
- ApplyTags(humanoid)
- humanoid:TakeDamage(BLAST_DAMAGE)
- end
- else -- Loose parts and dead parts are blasted
- if hitPart.Name ~= 'Handle' then
- hitPart:BreakJoints()
- local blastForce = Instance.new('BodyForce', hitPart) --NOTE: We will multiply by mass so bigger parts get blasted more
- blastForce.Force = (hitPart.Position - blastCenter).unit * BLAST_FORCE * hitPart:GetMass()
- DebrisService:AddItem(blastForce, 0.1)
- end
- end
- end
- end
- local function OnTouched(otherPart)
- if Rocket and otherPart then
- -- Fly through anything in the ignore list
- if IGNORE_LIST[string.lower(otherPart.Name)] then
- return
- end
- local myPlayer = CreatorTag.Value
- if myPlayer then
- -- Fly through the creator
- if myPlayer.Character and myPlayer.Character:IsAncestorOf(otherPart) then
- return
- end
- -- Fly through friendlies
- if not myPlayer.Neutral then
- local character = FindCharacterAncestor(otherPart.Parent)
- local player = PlayersService:GetPlayerFromCharacter(character)
- if player and player ~= myPlayer and player.TeamColor == Rocket.BrickColor then
- return
- end
- end
- end
- -- Fly through terrain water
- if otherPart == workspace.Terrain then
- --NOTE: If the rocket is large, then the simplifications made here will cause it to fly through terrain in some cases
- local frontOfRocket = Rocket.Position + (Rocket.CFrame.lookVector * (Rocket.Size.Z / 2))
- local cellLocation = workspace.Terrain:WorldToCellPreferSolid(frontOfRocket)
- local cellMaterial = workspace.Terrain:GetCell(cellLocation.X, cellLocation.Y, cellLocation.Z)
- if cellMaterial == Enum.CellMaterial.Water or cellMaterial == Enum.CellMaterial.Empty then
- return
- end
- end
- -- Create the explosion
- local explosion = Instance.new('Explosion')
- explosion.BlastPressure = BLAST_RADIUS -- Completely safe explosion
- explosion.BlastRadius = BLAST_RADIUS
- explosion.ExplosionType = Enum.ExplosionType.CratersAndDebris
- explosion.Position = Rocket.Position
- explosion.Parent = workspace
- -- Connect custom logic for the explosion
- explosion.Hit:Connect(function(hitPart, hitDistance) OnExplosionHit(hitPart, hitDistance, explosion.Position) end)
- -- Move this script and the creator tag (so our custom logic can execute), then destroy the rocket
- script.Parent = explosion
- CreatorTag.Parent = script
- Rocket:Destroy()
- end
- end
- --------------------
- --| Script Logic |--
- --------------------
- SwooshSound:Play()
- Rocket.Touched:Connect(OnTouched)
- end
- coroutine.wrap(Rocket_ScriptfakeXD)()
- Boom.Name = [[Boom]]
- Boom.Parent = Server
- Boom.SoundId = [[rbxasset://sounds/collide.wav]]
- Boom.Volume = 1
- -- End --
- -- Thank for using --
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement