Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Can anyone give me a script to change the rocket model in the rocket launcher ?

local Rocket = Instance.new("Part")
Rocket.Locked = true
Rocket.BackSurface = 3
Rocket.BottomSurface = 3
Rocket.FrontSurface = 3
Rocket.LeftSurface = 3
Rocket.RightSurface = 3
Rocket.TopSurface = 3
Rocket.Size = Vector3.new(1,1,4)
Rocket.BrickColor = BrickColor.new(23)

local ModFx=require(game.ReplicatedStorage.Other)
local Tool=script.Parent
--local Player=ModFx.GetPlayerFromTool(Tool) --[[This will be refreshed throughout the script 
--											so that if someone wanted to make the tools 
--											droppable, itd work with other players	]]
-- commented cause its useless as a global variable, however not deleted so as to keep the above comments
local ColSer=game:GetService("CollectionService")
local Debris=game:GetService("Debris")

local function FireWep(plr,targetPos)
	if Tool.Enabled==false then return end
	local Player=ModFx.GetPlayerFromTool(Tool)
	if plr~=Player then return end
	local c=plr.Character
	if not c then return end
	local h=c:FindFirstChildWhichIsA("Humanoid")
	local plrTool=c:FindFirstChildWhichIsA("Tool")
	local Head=c:FindFirstChild("Head")
	if not Head or not plrTool or not h then return end
	if plrTool~=Tool then return end
	if h.Health<=0 then return end
	
	Tool.Enabled=false
	
	local dir = targetPos - Head.Position
	dir = dir*(1/dir.magnitude)
	
	local pos = Head.Position + (dir * 8)
	local ad=5000

	local missile = Rocket:clone()
	missile.Name="Rocket"
	
	local BV=Instance.new("BodyVelocity")
	BV.Parent=missile
	BV.P=12500
	BV.MaxForce=Vector3.new(ad,ad,ad)
	BV.Velocity=dir*60
	missile.CFrame = CFrame.new(pos,  pos + dir)
	
	local creator_tag = Instance.new("ObjectValue")
	creator_tag.Value = plr
	creator_tag.Name = "creator"
	creator_tag.Parent = missile
	
	local exp=Tool.Handle.exp:Clone()
	exp.PlaybackSpeed=math.random(90,110)/100
	exp.PlayOnRemove=true
	exp.Parent=missile
	
	local swoosh=Tool.Handle.swoosh:Clone()
	swoosh.PlaybackSpeed=math.random(95,105)/100
	swoosh.Parent=missile

	missile.Parent = workspace
	ColSer:AddTag(missile,missile.Name) 
	ColSer:AddTag(missile,plr.Name)
	missile:SetNetworkOwner(plr)
	swoosh:Play()
	
	local effect=plr:FindFirstChild("Effect")
	if effect and effect.Value~="None" then
		if effect.Value=="Fire" then
			Instance.new("Fire",missile)
		else
			spawn(function()
				require(game:GetService("ReplicatedStorage").TrailModule).AddTrail(missile,effect.Value,.5,.5,1)
			end)
		end
	end
	Debris:AddItem(missile,10)
	wait(7)
	Tool.Enabled=true
end

Tool.Fire.OnServerEvent:Connect(FireWep)

local function DestroyRocket(plr,Obj,ClientPos)
	local x=true
	local succ,err=pcall(function() 
		if Obj:GetNetworkOwner()~=plr then x=false end 
	end) 
	if err then warn(plr.Name.." may be exploiting") return end -- Not sure how this would happen.
	if x==false then warn(plr.Name.." is definitely exploiting") --[[plr:Kick("Possible exploit detected")]] return end
	--[[ Why am I so confident that they're an exploiter if x==false? Because the network owner of the rocket is SET (as opposed to using auto 
	network ownership) to the rocket's firer, and so if the part this remote is firing upon is NOT owned by the user firing the remote, then I 
	know the remote is being fired externally. ]]
	local ServerPos=Obj.Position
	local creator=Obj:FindFirstChild("creator")
	local CreatorValue
	if creator then
		CreatorValue=creator.Value
	end
	local Player=ModFx.GetPlayerFromTool(Tool)
	if CreatorValue~=nil and CreatorValue==plr and Player and Player==plr and (ServerPos - ClientPos).magnitude < 20 and ColSer:HasTag(Obj,Obj.Name) 
	and ColSer:HasTag(Obj,plr.Name) then -- all these to ensure that it's a rocket, and its their rocket, and its from their tool
		-- "(ServerPos - ClientPos).magnitude" = the distance between the serverside and clientside missile on hit
		Obj:ClearAllChildren()
		Debris:AddItem(Obj,0)
		ModFx.Explosion(CreatorValue,"Rocket",ClientPos)
	end
end

Tool.RocketDestroyEvent.OnServerEvent:connect(DestroyRocket)

2 comments

0

Put all your code in a code block.

0

local Rocket = Instance.new("Part") Rocket.Locked = true Rocket.BackSurface = 3 Rocket.BottomSurface = 3 Rocket.FrontSurface = 3 Rocket.LeftSurface = 3 Rocket.RightSurface = 3 Rocket.TopSurface = 3 Rocket.Size = Vector3.new(1,1,4) Rocket.BrickColor = BrickColor.new(23) local ModFx=require(game.ReplicatedStorage.Other) local Tool=script.Parent --local Player=ModFx.GetPlayerFromTool(Tool) --[[This

1 answer


local Rocket = Instance.new("Part") Rocket.Locked = true Rocket.BackSurface = 3 Rocket.BottomSurface = 3 Rocket.FrontSurface = 3 Rocket.LeftSurface = 3 Rocket.RightSurface = 3 Rocket.TopSurface = 3 Rocket.Size = Vector3.new(1,1,4) Rocket.BrickColor = BrickColor.new(23)

local ModFx=require(game.ReplicatedStorage.Other) local Tool=script.Parent --local Player=ModFx.GetPlayerFromTool(Tool) --[[This will be refreshed throughout the script -- so that if someone wanted to make the tools -- droppable, itd work with other players ]] -- commented cause its useless as a global variable, however not deleted so as to keep the above comments local ColSer=game:GetService("CollectionService") local Debris=game:GetService("Debris")

local function FireWep(plr,targetPos) if Tool.Enabled==false then return end local Player=ModFx.GetPlayerFromTool(Tool) if plr~=Player then return end local c=plr.Character if not c then return end local h=c:FindFirstChildWhichIsA("Humanoid") local plrTool=c:FindFirstChildWhichIsA("Tool") local Head=c:FindFirstChild("Head") if not Head or not plrTool or not h then return end if plrTool~=Tool then return end if h.Health<=0 then return end

Tool.Enabled=false

local dir = targetPos - Head.Position
dir = dir*(1/dir.magnitude)

local pos = Head.Position + (dir * 8)
local ad=5000

local missile = Rocket:clone()
missile.Name="Rocket"

local BV=Instance.new("BodyVelocity")
BV.Parent=missile
BV.P=12500
BV.MaxForce=Vector3.new(ad,ad,ad)
BV.Velocity=dir*60
missile.CFrame = CFrame.new(pos,  pos + dir)

local creator_tag = Instance.new("ObjectValue")
creator_tag.Value = plr
creator_tag.Name = "creator"
creator_tag.Parent = missile

local exp=Tool.Handle.exp:Clone()
exp.PlaybackSpeed=math.random(90,110)/100
exp.PlayOnRemove=true
exp.Parent=missile

local swoosh=Tool.Handle.swoosh:Clone()
swoosh.PlaybackSpeed=math.random(95,105)/100
swoosh.Parent=missile

missile.Parent = workspace
ColSer:AddTag(missile,missile.Name) 
ColSer:AddTag(missile,plr.Name)
missile:SetNetworkOwner(plr)
swoosh:Play()

local effect=plr:FindFirstChild("Effect")
if effect and effect.Value~="None" then
	if effect.Value=="Fire" then
		Instance.new("Fire",missile)
	else
		spawn(function()
			require(game:GetService("ReplicatedStorage").TrailModule).AddTrail(missile,effect.Value,.5,.5,1)
		end)
	end
end
Debris:AddItem(missile,10)
wait(7)
Tool.Enabled=true

end

Tool.Fire.OnServerEvent:Connect(FireWep)

local function DestroyRocket(plr,Obj,ClientPos) local x=true local succ,err=pcall(function() if Obj:GetNetworkOwner()=plr then x=false end end) if err then warn(plr.Name.." may be exploiting") return end -- Not sure how this would happen. if x==false then warn(plr.Name.." is definitely exploiting") --[[plr:Kick("Possible exploit detected")]] return end --[[ Why am I so confident that they're an exploiter if x==false? Because the network owner of the rocket is SET (as opposed to using auto network ownership) to the rocket's firer, and so if the part this remote is firing upon is NOT owned by the user firing the remote, then I know the remote is being fired externally. ]] local ServerPos=Obj.Position local creator=Obj:FindFirstChild("creator") local CreatorValue if creator then CreatorValue=creator.Value end local Player=ModFx.GetPlayerFromTool(Tool) if CreatorValue=nil and CreatorValue==plr and Player and Player==plr and (ServerPos - ClientPos).magnitude < 20 and ColSer:HasTag(Obj,Obj.Name) and ColSer:HasTag(Obj,plr.Name) then -- all these to ensure that it's a rocket, and its their rocket, and its from their tool -- "(ServerPos - ClientPos).magnitude" = the distance between the serverside and clientside missile on hit Obj:ClearAllChildren() Debris:AddItem(Obj,0) ModFx.Explosion(CreatorValue,"Rocket",ClientPos) end end

Tool.RocketDestroyEvent.OnServerEvent:connect(DestroyRocket)

This discussion is preserved as it was. New answers, comments, and votes are closed.