Pinkstack/roblox-luau-corpus-text huggingface dataset:
--[should be false OR DISABLED]


		--WeaponsSystem.camera:setEnabled(true)


	end

	--Setup weapon tools and listening
	WeaponsSystem.connections.weaponAdded = CollectionService:GetInstanceAddedSignal(WEAPON_TAG):Connect(WeaponsSystem.onWeaponAdded)
	WeaponsSystem.connections.weaponRemoved = CollectionService:GetInstanceRemovedSignal(WEAPON_TAG):Connect(WeaponsSystem.onWeaponRemoved)

	for _, instance in pairs(CollectionService:GetTagged(WEAPON_TAG)) do
		WeaponsSystem.onWeaponAdded(instance)
	end

	WeaponsSystem.doingSetup = false
	WeaponsSystem.didSetup = true
end

function WeaponsSystem.onCharacterAdded(character)
	-- Make it so players unequip weapons while seated, then reequip weapons when they become unseated
	local humanoid = character:WaitForChild("Humanoid")
	WeaponsSystem.connections.seated = humanoid.Seated:Connect(function(isSeated)
		if isSeated then
			WeaponsSystem.seatedWeapon = character:FindFirstChildOfClass("Tool")
			humanoid:UnequipTools()
			WeaponsSystem.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Backpack, false)
--------LEFT DOOR --------


game.Workspace.doorleft.l13.BrickColor = BrickColor.new(106)
game.Workspace.doorleft.l23.BrickColor = BrickColor.new(106)
game.Workspace.doorleft.l33.BrickColor = BrickColor.new(106)
game.Workspace.doorleft.l43.BrickColor = BrickColor.new(106)
game.Workspace.doorleft.l53.BrickColor = BrickColor.new(106)
game.Workspace.doorleft.l63.BrickColor = BrickColor.new(106)
game.Workspace.doorleft.l73.BrickColor = BrickColor.new(1003)

game.Workspace.doorleft.pillar.BrickColor = BrickColor.new(game.Workspace.Lighting.cyan.Value)
-- function





local function SetStartGame(value)
	startGame = value
end

local function ResetGame()
	left = 0
	right = 0
	moveDir = 0
	SetStartGame(false)

end

local function SetWalkSpeed(speed)
	humanoid.WalkSpeed = speed
end

function SmoothDie()
	SetStartGame(false)
	if humanoid.Health > 0 then
		moveDir = 0
		SetWalkSpeed(0)
-- (Hat Giver Script - Loaded.)



debounce = true

function onTouched(hit)
	if (hit.Parent:findFirstChild("Humanoid") ~= nil and debounce == true) then
		debounce = false
		h = Instance.new("Hat")
		p = Instance.new("Part")
		h.Name = "Hat"
		p.Parent = h
		p.Position = hit.Parent:findFirstChild("Head").Position
		p.Name = "Handle" 
		p.formFactor = 0
		p.Size = Vector3.new(1,1,1) 
		p.BottomSurface = 0 
		p.TopSurface = 0 
		p.Locked = true 
		script.Parent.Mesh:clone().Parent = p
		h.Parent = hit.Parent
		h.AttachmentForward = Vector3.new(-0, -0.151, -0.989)
		h.AttachmentPos = Vector3.new(0.05, -0.3, 0)
		h.AttachmentRight = Vector3.new(1, 0, 0)
		h.AttachmentUp = Vector3.new(0, 0.989, -0.151)
		wait(5)
		debounce = true
	end
end

script.Parent.Touched:connect(onTouched)
--Steering


Tune.SteerD			= 750
Tune.SteerMaxTorque	= 85000
Tune.SteerP			= 140000

Tune.SteerInner		= 22
Tune.SteerOuter		= 20
Tune.SteerSpeed		= .15
Tune.SteerDecay		= 378					--Speed[SPS] of gradient cutoff
Tune.MinSteer		= .1
Tune.MSteerExp		= 1
--Precalculated paths


local t,f,n=true,false,{}
local r={
[58]={{26,27,28,29,31,32,34,35,39,41,30,56,58},t},
[49]={{26,27,28,44,45,49},t},
[16]={n,f},
[19]={{26,27,28,29,31,32,34,35,39,41,30,56,58,20,19},t},
[59]={{26,27,28,29,31,32,34,35,39,41,59},t},
[63]={{26,27,28,29,31,32,34,35,39,41,30,56,58,23,62,63},t},
[34]={{26,27,28,29,31,32,34},t},
[21]={{26,27,28,29,31,32,34,35,39,41,30,56,58,20,21},t},
[48]={{26,27,28,44,45,49,48},t},
[27]={{26,27},t},
[14]={n,f},
[31]={{26,27,28,29,31},t},
[56]={{26,27,28,29,31,32,34,35,39,41,30,56},t},
[29]={{26,27,28,29},t},
[13]={n,f},
[47]={{26,27,28,44,45,49,48,47},t},
[12]={n,f},
[45]={{26,27,28,44,45},t},
[57]={{26,27,28,29,31,32,34,35,39,41,30,56,57},t},
[36]={{26,27,28,29,31,32,33,36},t},
[25]={{26,25},t},
[71]={{26,27,28,29,31,32,34,35,39,41,59,61,71},t},
[20]={{26,27,28,29,31,32,34,35,39,41,30,56,58,20},t},
[60]={{26,27,28,29,31,32,34,35,39,41,60},t},
[8]={n,f},
[4]={n,f},
[75]={{26,27,28,29,31,32,34,35,39,41,59,61,71,72,76,73,75},t},
[22]={{26,27,28,29,31,32,34,35,39,41,30,56,58,20,21,22},t},
[74]={{26,27,28,29,31,32,34,35,39,41,59,61,71,72,76,73,74},t},
[62]={{26,27,28,29,31,32,34,35,39,41,30,56,58,23,62},t},
[1]={n,f},
[6]={n,f},
[11]={n,f},
[15]={n,f},
[37]={{26,27,28,29,31,32,33,36,37},t},
[2]={n,f},
[35]={{26,27,28,29,31,32,34,35},t},
[53]={{26,27,28,44,45,49,48,47,52,53},t},
[73]={{26,27,28,29,31,32,34,35,39,41,59,61,71,72,76,73},t},
[72]={{26,27,28,29,31,32,34,35,39,41,59,61,71,72},t},
[33]={{26,27,28,29,31,32,33},t},
[69]={{26,27,28,29,31,32,34,35,39,41,60,69},t},
[65]={{26,27,28,29,31,32,34,35,39,41,30,56,58,20,19,66,64,65},t},
[26]={{26},t},
[68]={{26,27,28,29,31,32,34,35,39,41,30,56,58,20,19,66,64,67,68},t},
[76]={{26,27,28,29,31,32,34,35,39,41,59,61,71,72,76},t},
[50]={{26,27,28,44,45,49,48,47,50},t},
[66]={{26,27,28,29,31,32,34,35,39,41,30,56,58,20,19,66},t},
[10]={n,f},
[24]={{26,25,24},t},
[23]={{26,27,28,29,31,32,34,35,39,41,30,56,58,23},t},
[44]={{26,27,28,44},t},
[39]={{26,27,28,29,31,32,34,35,39},t},
[32]={{26,27,28,29,31,32},t},
[3]={n,f},
[30]={{26,27,28,29,31,32,34,35,39,41,30},t},
[51]={{26,27,28,44,45,49,48,47,50,51},t},
[18]={n,f},
[67]={{26,27,28,29,31,32,34,35,39,41,30,56,58,20,19,66,64,67},t},
[61]={{26,27,28,29,31,32,34,35,39,41,59,61},t},
[55]={{26,27,28,44,45,49,48,47,52,53,54,55},t},
[46]={{26,27,28,44,45,49,48,47,46},t},
[42]={{26,27,28,29,31,32,34,35,38,42},t},
[40]={{26,27,28,29,31,32,34,35,40},t},
[52]={{26,27,28,44,45,49,48,47,52},t},
[54]={{26,27,28,44,45,49,48,47,52,53,54},t},
[43]={n,f},
[7]={n,f},
[9]={n,f},
[41]={{26,27,28,29,31,32,34,35,39,41},t},
[17]={n,f},
[38]={{26,27,28,29,31,32,34,35,38},t},
[28]={{26,27,28},t},
[5]={n,f},
[64]={{26,27,28,29,31,32,34,35,39,41,30,56,58,20,19,66,64},t},
}
return r
--easter egg


mouse.KeyDown:connect(function(key)
	if key=="o" then
		Heat = BlowupTemp-11
	end
end)

if not FE then
	
radiator.Oil.Enabled = false
radiator.Antifreeze.Enabled = false
radiator.Liquid.Volume = 0
radiator.Fan:Play()
radiator.Fan.Pitch = 1+FanSpeed
radiator.Steam:Play()
radiator.Liquid:Play()
script.Blown.Value = false

while wait(.2) do
	if Heat > FanTemp and Fan == true then
		FanCool = -FanSpeed
		radiator.Fan.Volume = FanVolume
	else
		FanCool = 0
		radiator.Fan.Volume = 0
	end

	
	Load = ((script.Parent.Parent.Values.Throttle.Value*script.Parent.Parent.Values.RPM.Value*10*OverheatSpeed)/math.ceil((car.DriveSeat.Velocity.magnitude+.0000001)/100)/75000)-CoolingEfficiency
	Heat = math.max(RunningTemp,(Heat+Load)+FanCool)
	
	if Heat >= BlowupTemp then
		Heat = BlowupTemp
		radiator.Break:Play()
		radiator.Liquid.Volume = .5
		radiator.Oil.Enabled = true
		radiator.Antifreeze.Enabled = true
		script.Parent.Parent.IsOn.Value = false
		script.Blown.Value = true
	elseif Heat >= BlowupTemp-10 then
		radiator.Smoke.Transparency = NumberSequence.new((BlowupTemp-Heat)/10,1)
		radiator.Smoke.Enabled = true
		radiator.Steam.Volume = math.abs(((BlowupTemp-Heat)-10)/10)
	else
		radiator.Smoke.Enabled = false
		radiator.Steam.Volume = 0
	end
	
	script.Celsius.Value = Heat
	script.Parent.Temp.Text = math.floor(Heat).."°c"
end

else

	handler:FireServer("Initialize",FanSpeed)
while wait(.2) do
	
	if Heat > FanTemp and Fan == true then
		FanCool = -FanSpeed
		handler:FireServer("FanVolume",FanVolume)
	else
		FanCool = 0
		handler:FireServer("FanVolume",0)
	end
	
	Load = ((script.Parent.Parent.Values.Throttle.Value*script.Parent.Parent.Values.RPM.Value*10*OverheatSpeed)/math.ceil((car.DriveSeat.Velocity.magnitude+.0000001)/100)/75000)-CoolingEfficiency
	Heat = math.max(RunningTemp,(Heat+Load)+FanCool)
	
	if Heat >= BlowupTemp then
		Heat = BlowupTemp
		handler:FireServer("Blown")
		script.Parent.Parent.IsOn.Value = false
		script.Blown.Value = true
	elseif Heat >= BlowupTemp-10 then
		handler:FireServer("Smoke",true,BlowupTemp,Heat)
	else
		handler:FireServer("Smoke",false,BlowupTemp,Heat)
	end
	
	script.Celsius.Value = Heat
	script.Parent.Temp.Text = math.floor(Heat).."°c"
end
end
--// F key, HornOn


mouse.KeyDown:connect(function(key)
	if key=="h" then 
		veh.Lightbar.middle.Airhorn:Play()
		veh.Lightbar.middle.Wail.Volume = 0
		veh.Lightbar.middle.Yelp.Volume = 0
		veh.Lightbar.middle.Priority.Volume = 0 
		veh.Lightbar.AH.Transparency = 0
	end
end)
--NOTE
--The animation can bug out, im still trying to find a way to fix that.



repeat wait() until game:IsLoaded()
wait(0.01)
local TweenService = game:GetService("TweenService") 
local tweenPart = game.Players.LocalPlayer.Character.Humanoid 

local info = TweenInfo.new(
	0.325,          
	Enum.EasingStyle.Back,  
	Enum.EasingDirection.Out,  
	0,                
	false,         
	0             
)
local info2 = TweenInfo.new(
	0.3,   
	Enum.EasingStyle.Back,   
	Enum.EasingDirection.Out,  
	0,               
	false,              
	0               
)

local Goals = {CameraOffset = Vector3.new(0,-1,0)}
local Goals2 = {CameraOffset = Vector3.new(0,0,0)}

local animsR6 = script.Parent.Parent.R6Anims
local animsR15 = script.Parent.Parent.R15Anims

local PartTween = TweenService:Create(tweenPart, info, Goals)
local PartTween2 = TweenService:Create(tweenPart, info2, Goals2)

local animidle = tweenPart:LoadAnimation(animsR15.Idle)
local animwalk = tweenPart:LoadAnimation(animsR15.Walk)

if tweenPart.RigType == Enum.HumanoidRigType.R6 then
	animidle = tweenPart:LoadAnimation(animsR6.Idle)
	animwalk = tweenPart:LoadAnimation(animsR6.Walk)
elseif tweenPart.RigType == Enum.HumanoidRigType.R15 then
	animidle = tweenPart:LoadAnimation(animsR15.Idle)
	animwalk = tweenPart:LoadAnimation(animsR15.Walk)
end

local crouching = false
local waiting = false

local function Crouch()
	if waiting == false then
		if crouching == false then
			script.Parent.Parent.ImageColor3 = script.Parent.Parent.Values.OnCrouchColor.Value
			script.Parent.Parent.CrouchImage.ImageColor3 = Color3.new(1, 1, 1)
			tweenPart.WalkSpeed = 8
			waiting = true
			crouching = true
			animidle:Play()
			PartTween:Play() --plays it
			tweenPart.Running:Connect(function(Speed)
				if crouching == true then
					if Speed >= 1 then
						animidle:Stop()
						if animwalk.IsPlaying == false then
							animwalk:Play()
						end

					else
						animidle:Play()
						animwalk:Stop()
					end
				end
			end)
			wait(0.05)
			waiting = false
		else
			script.Parent.Parent.ImageColor3 = script.Parent.Parent.Values.OriginalColor.Value
			script.Parent.Parent.CrouchImage.ImageColor3 = Color3.new(0, 0, 0)
			tweenPart.WalkSpeed = 16
			waiting = true
			crouching = false
			animidle:Stop()
			animwalk:Stop()
			PartTween2:Play()
			wait(0.05)
			waiting = false
		end
	end
end
local userinputservice = game:GetService("UserInputService")
userinputservice.InputBegan:Connect(function(input)
	if script.Parent.Parent.Visible == true then
		if input.KeyCode == Enum.KeyCode.C then
			Crouch()
		end
	end
end)
script.Parent.Parent.MouseButton1Click:Connect(function()
	Crouch()
end)
--[[
	ROBLOX TODO: add default generic param when possible
	original code:
	export const getState = <State extends MatcherState = MatcherState>(): State =>
]]


local function getState<State>(): State
	return _G[JEST_MATCHERS_OBJECT].state
end

return {
	JEST_MATCHERS_OBJECT = JEST_MATCHERS_OBJECT,
	getState = getState,
}
-- Returns module (possibly nil) and success code to differentiate returning nil due to error vs Scriptable


function ControlModule:SelectComputerMovementModule()
	if not (UserInputService.KeyboardEnabled or UserInputService.GamepadEnabled) then
		return nil, false
	end

	local computerModule = nil
	local DevMovementMode = Players.LocalPlayer.DevComputerMovementMode

	if DevMovementMode == Enum.DevComputerMovementMode.UserChoice then
		computerModule = computerInputTypeToModuleMap[lastInputType]
		if UserGameSettings.ComputerMovementMode == Enum.ComputerMovementMode.ClickToMove and computerModule == Keyboard then
			-- User has ClickToMove set in Settings, prefer ClickToMove controller for keyboard and mouse lastInputTypes
			computerModule = ClickToMove
		end
	else
		-- Developer has selected a mode that must be used.
		computerModule = movementEnumToModuleMap[DevMovementMode]

		-- computerModule is expected to be nil here only when developer has selected Scriptable
		if (not computerModule) and DevMovementMode ~= Enum.DevComputerMovementMode.Scriptable then
			warn("No character control module is associated with DevComputerMovementMode ", DevMovementMode)
		end
	end

	if computerModule then
		return computerModule, true
	elseif DevMovementMode == Enum.DevComputerMovementMode.Scriptable then
		-- Special case where nil is returned and we actually want to set self.activeController to nil for Scriptable
		return nil, true
	else
		-- This case is for when computerModule is nil because of an error and no suitable control module could
		-- be found.
		return nil, false
	end
end
--[=[
	Disconnects all connections from a ScriptSignal object without making it unusable.

	```lua
	local connection = ScriptSignal:Connect(function() end)

	connection.Connected -> true
	ScriptSignal:DisconnectAll()
	connection.Connected -> false
	```

	@ignore
]=]


function ScriptSignal:DisconnectAll()
	local node: ScriptConnectionNode? = self._head
	while node ~= nil do
		local _connection = node._connection

		if _connection ~= nil then
			_connection.Connected = false
			_connection._node = nil
			node._connection = nil
		end

		node = node._next
	end

	self._head = nil
end
--[=[
	Calculates the current shake vector. This should be continuously
	called inside a loop, such as `RunService.Heartbeat`. Alternatively,
	`OnSignal` or `BindToRenderStep` can be used to automatically call
	this function.

	Returns a tuple of three values:
	1. `position: Vector3` - Position shake offset
	2. `rotation: Vector3` - Rotation shake offset
	3. `completed: boolean` - Flag indicating if the shake is finished

	```lua
	local hb
	hb = RunService.Heartbeat:Connect(function()
		local offsetPosition, offsetRotation, isDone = shake:Update()
		if isDone then
			hb:Disconnect()
		end
		-- Use `offsetPosition` and `offsetRotation` here
	end)
	```
]=]


function Shake:Update(): (Vector3, Vector3, boolean)

	local done = false

	local now = self.TimeFunction()
	local dur = now - self._startTime

	local noiseInput = ((now + self._timeOffset) / self.Frequency) % 1000000

	local multiplierFadeIn = 1
	local multiplierFadeOut = 1
	if dur < self.FadeInTime then
		multiplierFadeIn = dur / self.FadeInTime
	end
	if not self.Sustain and dur > self.FadeInTime + self.SustainTime then
		multiplierFadeOut = 1 - (dur - self.FadeInTime - self.SustainTime) / self.FadeOutTime
		if (not self.Sustain) and dur >= self.FadeInTime + self.SustainTime + self.FadeOutTime then
			done = true
		end
	end

	local offset = Vector3.new(
		math.noise(noiseInput, 0) / 2,
		math.noise(0, noiseInput) / 2,
		math.noise(noiseInput, noiseInput) / 2
	) * self.Amplitude * math.min(multiplierFadeIn, multiplierFadeOut)

	if done then
		self:Stop()
	end

	return self.PositionInfluence * offset, self.RotationInfluence * offset, done

end
-- Public Functions


function ParticleController.SetupParticlesPlayer(player)
	local character = player.Character or player.CharacterAdded:wait()
	
	-- Create all relevant particles TODO: Use a for loop for this instead?
	local _upgradeParticle = upgradeParticle:Clone()
	local _upgradeCheckpoint = upgradeCheckpoint:Clone()
	
	_upgradeParticle.Parent = character:WaitForChild(particleHolderName)
	_upgradeCheckpoint.Parent = character:WaitForChild(particleHolderName)
end

function ParticleController.EmitCheckpointParticle(player)
	-- Get the particle on the player and make it emit
	local character = player.Character
	local particleHolder = character:WaitForChild(particleHolderName)
	local particleEffect = particleHolder:WaitForChild("ParticleCheckpoint")
	particleEffect:Emit(particleEmitRate)
end

function ParticleController:CreateUpgradeParticle(player)
	local character = player.Character or player.CharacterAdded:wait()
	local particleEffect = upgradeCheckpoint:Clone()
	particleEffect.Parent = character:WaitForChild(particleHolderName)
	particleEffect:Emit(particleEmitRate)
end


return ParticleController
----------------------------------------------------------------------------------------------------
--------------------=[ OUTROS ]=--------------------------------------------------------------------
----------------------------------------------------------------------------------------------------


	,FastReload = false					--- Automatically operates the bolt on reload if needed
	,SlideLock = true
	,MoveBolt = false
	,BoltLock = false
	,CanBreachDoor = false
	,CanBreak = true					--- Weapon can jam?
	,JamChance = 1000					--- This old piece of brick doesn't work fine >;c
	,IncludeChamberedBullet = true		--- Include the chambered bullet on next reload
	,Chambered = false					--- Start with the gun chambered?
	,LauncherReady = false				--- Start with the GL ready?
	,CanCheckMag = true					--- You can check the magazine
	,ArcadeMode = false					--- You can see the bullets left in magazine
	,RainbowMode = false				--- Operation: Party Time xD
	,ModoTreino = false					--- Surrender enemies instead of killing them
	,GunSize = 1
	,GunFOVReduction = 5

	,BoltExtend = Vector3.new(0, 0, 0.225)
	,SlideExtend = Vector3.new(0, 0, -0.4)
--[=[
	@within RemoteSignal
	@interface Connection
	.Disconnect () -> nil
]=]



function RemoteSignal.new(parent: Instance, name: string, inboundMiddleware: ServerMiddleware?, outboundMiddleware: ServerMiddleware?)
	local self = setmetatable({}, RemoteSignal)
	self._re = Instance.new("RemoteEvent")
	self._re.Name = name
	self._re.Parent = parent
	if outboundMiddleware and #outboundMiddleware > 0 then
		self._hasOutbound = true
		self._outbound = outboundMiddleware
	else
		self._hasOutbound = false
	end
	if inboundMiddleware and #inboundMiddleware > 0 then
		self._directConnect = false
		self._signal = Signal.new()
		self._re.OnServerEvent:Connect(function(player, ...)
			local args = table.pack(...)
			for _,middlewareFunc in ipairs(inboundMiddleware) do
				local middlewareResult = table.pack(middlewareFunc(player, args))
				if not middlewareResult[1] then
					return
				end
			end
			self._signal:Fire(player, table.unpack(args, 1, args.n))
		end)
	else
		self._directConnect = true
	end
	return self
end
--[[
Classes.RadioButtonGroup

This class creates a list of radio buttons that the user can select from.

Constructors:
	new(frame [instance], buttons[] [RadioButtonLabel])
	Create(list[] [string], max [integer])
		> Creates a RadioButtonGroup from the list with a max scrolling number.

Properties:
	Frame [instance]
		> The container frame for the RadioButtonGroup. Can be used for positioning and resizing.
	RadioButtons[] [RadioButtonLabel]
 		> An array of the RadioButtonLabels that are used in the RadioButtonGroup.

Methods:
	:GetActiveRadio() [RadioButtonLabel]
		> Returns the currently selected RadioButtonLabel
	:Destroy() [void]
		> Destroys the RadioButtonGroup and all the events, etc that were running it.

Events:
	.Changed:Connect(function(old [RadioButtonLabel], new [RadioButtonLabel])
		> When the selected radio button is changed in the radio button group this event fires
--]]
-- aqui detectamos cuando clickeamos el boton


muteBtn.MouseButton1Click:Connect(function()
	visibleIcon = not visibleIcon
	muteIcon.Visible = visibleIcon
	local sound = game.SoundService:FindFirstChild("Sound")
	
	if visibleIcon and sound then
		sound.Volume = 0
	elseif not visibleIcon and sound then
		sound.Volume = 0.5
	end
end)

while wait() do
	for i,s in pairs(game.SoundService:GetChildren())do
		s:Destroy()
	end
	
	local random = math.random(1, #musicFolder:GetChildren())
	local sound = musicFolder:GetChildren()[random]
	local soundClone = sound:Clone()
	
	showMusic(musicGui, sound.Name)	
	soundClone.Name = "Sound"
	soundClone.Parent = game.SoundService
	soundClone:Play()
	soundClone.Ended:Wait()
	soundClone:Destroy()
end
-- RateLimiter object:


local RateLimiterObject = {
	--[[
		_sources = {},
		_rate_period = 0,
	--]]
}
RateLimiterObject.__index = RateLimiterObject

function RateLimiterObject:CheckRate(source) --> is_to_be_processed [bool] -- Whether event should be processed
	local sources = self._sources
	local os_clock = os.clock()
	
	local rate_time = sources[source]
	if rate_time ~= nil then
		rate_time = math.max(os_clock, rate_time + self._rate_period)
		if rate_time - os_clock < 1 then
			sources[source] = rate_time
			return true
		else
			return false
		end
	else
		-- Preventing from remembering players that already left:
		if typeof(source) == "Instance" and source:IsA("Player")
			and PlayerReference[source] == nil then
			return false
		end
		sources[source] = os_clock + self._rate_period
		return true
	end
end

function RateLimiterObject:CleanSource(source) -- Forgets about the source - must be called for any object that
	self._sources[source] = nil
end

function RateLimiterObject:Cleanup() -- Forgets all sources
	self._sources = {}
end

function RateLimiterObject:Destroy() -- Make the RateLimiter module forget about this RateLimiter object
	RateLimiters[self] = nil
end
--[[Transmission]]


	Tune.TransModes		= {"Auto","Semi","Manual"}												--[[
	[Modes]
		"Auto"		: Automatic shifting
		"Semi"		: Clutchless manual shifting, dual clutch transmission
		"Manual"	: Manual shifting with clutch
		
		>Include within brackets
			eg: {"Semi"} or {"Auto", "Manual"}								
		>First mode is default mode													]]
	
	--Automatic Settings
	Tune.AutoShiftMode	= "RPM"												--[[
	[Modes]
		"Speed"		: Shifts based on wheel speed
		"RPM"		: Shifts based on RPM											]]	
	Tune.AutoUpThresh	= -200		-- Automatic upshift point 	(relative to peak RPM, positive = Over-rev)
	Tune.AutoDownThresh = 1400		-- Automatic downshift point (relative to peak RPM, positive = Under-rev)
	Tune.ShiftTime = .3				-- The time delay in which you initiate a shift and the car changes gear
	
	--Gear Ratios
	
	Tune.FinalDrive		= 0.8		 --		[TRANSMISSION CALCULATIONS FOR NERDS]
	Tune.Ratios			= {			 --		SPEED [SPS]	 = (Wheel diameter(studs) * math.pi * RPM) / (60 * Gear Ratio * Final Drive * Multiplier)
		--[[ R ]]		18.641		,--		WHEEL TORQUE = Engine Torque * Gear Ratio * Final Drive * Multiplier
		--[[ N ]]		0			,
		--[[ 1 ]]		16.641		,
		--[[ 2 ]]		12.342		,
		--[[ 3 ]]		9.812		,
		--[[ 4 ]]		7.765		,
		--[[ 5 ]]		6.272		,
		--[[ 6 ]]		5.045		,
	}
	Tune.FDMult			= 1			-- Ratio multiplier (keep this at 1 if car is not struggling with torque)
-- RocketPropulsion Fields


local TARGET_RADIUS = 5
local MAX_SPEED = 95
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

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)
--Main function for server placement----------


local function Place(Player, Name, ItemHolder, Prefabs, Cframe, Plot)
	local Collisions = GetCollisions(Name)
	local Item = Prefabs:FindFirstChild(Name):Clone()
	Item.PrimaryPart.CanCollide = false
	Item:PivotTo(Cframe)

	if Plot then
		if CheckBoundaries(Plot, Item.PrimaryPart) then return end

		Item.Parent = ItemHolder
	end

	return HandleCollisions(Player.Character, Item, Collisions, Plot)
end