Roblox/luau_corpus huggingface dataset:
--
-- Verify that everything is where it should be
assert(Self:FindFirstChild'Humanoid' ~= nil, 'Monster does not have a humanoid')
assert(Settings ~= nil, 'Monster does not have a Configurations object')
	assert(Settings:FindFirstChild'MaximumDetectionDistance' ~= nil and Settings.MaximumDetectionDistance:IsA'NumberValue', 'Monster does not have a MaximumDetectionDistance (NumberValue) setting')
	assert(Settings:FindFirstChild'CanGiveUp' ~= nil and Settings.CanGiveUp:IsA'BoolValue', 'Monster does not have a CanGiveUp (BoolValue) setting')
	assert(Settings:FindFirstChild'CanRespawn' ~= nil and Settings.CanRespawn:IsA'BoolValue', 'Monster does not have a CanRespawn (BoolValue) setting')
	assert(Settings:FindFirstChild'SpawnPoint' ~= nil and Settings.SpawnPoint:IsA'Vector3Value', 'Monster does not have a SpawnPoint (Vector3Value) setting')
	assert(Settings:FindFirstChild'AutoDetectSpawnPoint' ~= nil and Settings.AutoDetectSpawnPoint:IsA'BoolValue', 'Monster does not have a AutoDetectSpawnPoint (BoolValue) setting')
	assert(Settings:FindFirstChild'FriendlyTeam' ~= nil and Settings.FriendlyTeam:IsA'BrickColorValue', 'Monster does not have a FriendlyTeam (BrickColorValue) setting')
	assert(Settings:FindFirstChild'AttackDamage' ~= nil and Settings.AttackDamage:IsA'NumberValue', 'Monster does not have a AttackDamage (NumberValue) setting')
	assert(Settings:FindFirstChild'AttackFrequency' ~= nil and Settings.AttackFrequency:IsA'NumberValue', 'Monster does not have a AttackFrequency (NumberValue) setting')
	assert(Settings:FindFirstChild'AttackRange' ~= nil and Settings.AttackRange:IsA'NumberValue', 'Monster does not have a AttackRange (NumberValue) setting')
assert(Mind ~= nil, 'Monster does not have a Mind object')
	assert(Mind:FindFirstChild'CurrentTargetHumanoid' ~= nil and Mind.CurrentTargetHumanoid:IsA'ObjectValue', 'Monster does not have a CurrentTargetHumanoid (ObjectValue) mind setting')
assert(Self:FindFirstChild'Died' and Self.Died:IsA'BindableEvent', 'Monster does not have a Died BindableEvent')
assert(Self:FindFirstChild'Respawned' and Self.Died:IsA'BindableEvent', 'Monster does not have a Respawned BindableEvent')
assert(Self:FindFirstChild'Attacked' and Self.Died:IsA'BindableEvent', 'Monster does not have a Attacked BindableEvent')
assert(script:FindFirstChild'Attack' and script.Attack:IsA'Animation', 'Monster does not have a MonsterScript.Attack Animation')
--GreenEgg--

Event.Hitbox.Touched:Connect(function(hit)
	if hit.Parent:IsA("Tool") and hit.Parent.Name == ToolRequired then
		if game.ReplicatedStorage.ItemSwitching.Value == true then
			hit.Parent:Destroy()
		end
		Event.LocksLeft.Value = Event.LocksLeft.Value - 1
		Event.Dinosaur.Transparency = 0
		Event.TeleportEffectPad.Insert:Play()
		Event.Hitbox.DinosaurHint:Destroy()
		script.Disabled = true
	end
end)

Event.Hitbox.ClickDetector.MouseClick:Connect(function(plr)
	if plr.Backpack:FindFirstChild(ToolRequired) then
		if game.ReplicatedStorage.ItemSwitching.Value == true then
			plr.Backpack:FindFirstChild(ToolRequired):Destroy()
		end
		Event.LocksLeft.Value = Event.LocksLeft.Value - 1
		Event.Dinosaur.Transparency = 0
		Event.TeleportEffectPad.Insert:Play()
		Event.Hitbox.DinosaurHint:Destroy()
		script.Disabled = true
	end
end)
--[[
	Yield until the promise is completed.

	This matches the execution model of normal Roblox functions.
]]
function Promise.prototype:awaitStatus()
	self._unhandledRejection = false

	if self._status == Promise.Status.Started then
		local bindable = Instance.new("BindableEvent")

		self:finally(function()
			bindable:Fire()
		end)

		bindable.Event:Wait()
		bindable:Destroy()
	end

	if self._status == Promise.Status.Resolved then
		return self._status, unpack(self._values, 1, self._valuesLength)
	elseif self._status == Promise.Status.Rejected then
		return self._status, unpack(self._values, 1, self._valuesLength)
	end

	return self._status
end
Promise.prototype.AwaitStatus = Promise.prototype.awaitStatus

local function awaitHelper(status, ...)
	return status == Promise.Status.Resolved, ...
end
-- this script doesn't actually give out anything.

local B1 = script.Parent.Button1.ClickDetector
local B2 = script.Parent.Button2.ClickDetector
local B3 = script.Parent.Button3.ClickDetector
local deb = false
local TS = game:GetService("TweenService")
function Press(button)
	if not deb then
		deb = true
		local start = TS:Create(button,TweenInfo.new(.1,Enum.EasingStyle.Sine,Enum.EasingDirection.In,0,false),{CFrame = button.CFrame*CFrame.new(0,0,0.045)})
		start.Completed:Connect(function()
			local End = TS:Create(button,TweenInfo.new(.1,Enum.EasingStyle.Sine,Enum.EasingDirection.In,0,false),{CFrame = button.CFrame*CFrame.new(0,0,-0.045)})
			End.Completed:Connect(function()
				deb = false
			end)
			End:Play()
		end)
		start:Play()
	end
end

B1.MouseClick:Connect(function()
	Press(B1.Parent)
end)
B2.MouseClick:Connect(function()
	Press(B2.Parent)
end)
B3.MouseClick:Connect(function()
	Press(B3.Parent)
end)
-- Make the object appear when the ProximityPrompt is used
local function effect()
	if object then
		Prox.Enabled = true
		object.Humanoid.Health = -1
	end
end

Prox.Triggered:Connect(effect)
--[[
	A middleware that allows for functions to be dispatched.
	Functions will receive a single argument, the store itself.
	This middleware consumes the function; middleware further down the chain
	will not receive it.
]]
local function thunkMiddleware(nextDispatch, store)
	return function(action)
		if typeof(action) == "function" then
			return action(store)
		else
			return nextDispatch(action)
		end
	end
end

return thunkMiddleware
--Uberubert
--This script is free to use for anyone

local ting = 0 --debouncer

function onTouched(hit)

	if ting == 0 then --debounce check
	ting = 1 --activate debounce
	check = hit.Parent:FindFirstChild("Humanoid") --Find the human that touched the button

	if check ~= nil then --If a human is found, then

		local user = game.Players:GetPlayerFromCharacter(hit.Parent) --get player from touching human
		local stats = user:findFirstChild("leaderstats") --Find moneyholder

		if stats ~= nil then --If moneyholder exists then
			local cash = stats:findFirstChild("SOULS") --Money type
			cash.Value  = cash.Value +5000 --increase amount of money by the number displayed here (500)
			wait(3) --wait-time before button works again
		end

	end

	ting = 0 --remove debounce
	end

end

script.Parent.Touched:connect(onTouched)
--Start the constant movement calculator
delay(0, function()
	while true do
		bv.velocity = seat.CFrame.lookVector * speed
		bav.angularvelocity = Vector3.new(0, rotSpeed, 0)
		wait()
	end
end)

seat.Changed:connect(function(prop)
	if prop == "Throttle" then
		if seat.Throttle == 1 or seat.Throttle == -1 then

			speed = maxSpeed * seat.Throttle

		elseif seat.Throttle == 0 then

			speed = 0

		end
	elseif prop == "Steer" then
		if seat.Steer == -1 or seat.Steer == 1 then

			rotSpeed = maxRotSpeed * -seat.Steer

		elseif seat.Steer == 0 then

			rotSpeed = 0

		end
	end
end)
--[[ SCRIPT VARIABLES ]]
local CHAT_BUBBLE_FONT = Enum.Font.SourceSansItalic
local CHAT_BUBBLE_FONT_SIZE = Enum.FontSize.Size24 -- if you change CHAT_BUBBLE_FONT_SIZE_INT please change this to match
local CHAT_BUBBLE_FONT_SIZE_INT = 24 -- if you change CHAT_BUBBLE_FONT_SIZE please change this to match
local CHAT_BUBBLE_LINE_HEIGHT = CHAT_BUBBLE_FONT_SIZE_INT + 10
local CHAT_BUBBLE_TAIL_HEIGHT = 14
local CHAT_BUBBLE_WIDTH_PADDING = 30
local CHAT_BUBBLE_FADE_SPEED = 1.5

local BILLBOARD_MAX_WIDTH = 400
local BILLBOARD_MAX_HEIGHT = 250	--This limits the number of bubble chats that you see above characters

local ELIPSES = "..."
local MaxChatMessageLength = 128 -- max chat message length, including null terminator and elipses.
local MaxChatMessageLengthExclusive = MaxChatMessageLength - string.len(ELIPSES) - 1

local NEAR_BUBBLE_DISTANCE = 65	--previously 45
local MAX_BUBBLE_DISTANCE = 100	--previously 80
-- Module Scripts
local moduleScripts = ServerStorage.ModuleScripts
local gameSettings = require(moduleScripts.GameSettings)
local leaderboardManager = require(moduleScripts.LeaderboardManager)
local actionManager = require(moduleScripts.ActionManager)
local mapManager = require(moduleScripts.MapManager)
------------------------- 
function onClicked() 

script.Parent.Parent.Parent.StopSign1.SurfaceGui.TextLabel.Text = "STOPPING"
script.Parent.Parent.Parent.StopSign1.Ding:play()
script.Parent.Parent.Parent.StopSign2.SurfaceGui.TextLabel.Text = "STOPPING"
script.Parent.Parent.Parent.StopSign2.Ding:play()
script.Parent.Parent.Parent.StopSign3.SurfaceGui.TextLabel.Text = "STOPPING"
script.Parent.Parent.Parent.StopSign3.Ding:play()
end 

script.Parent.ClickDetector.MouseClick:connect(onClicked)
-- @Description Resize a specific %Model to a larger %Scale multiplier
-- @Arg1 Model
-- @Arg2 Scale
function Basic.ScaleModelWithJoints(model, scale)
	local origin = model.PrimaryPart.Position

	for _, obj in ipairs(model:GetDescendants()) do
		if obj:IsA("BasePart") then
			obj.Size = obj.Size*scale
			
			local distance = (obj.Position - model:GetPrimaryPartCFrame().p)
			local rotation = (obj.CFrame - obj.Position)
			obj.CFrame = (CFrame.new(model:GetPrimaryPartCFrame().p + distance*scale) * rotation)
		elseif obj:IsA("SpecialMesh") and obj.MeshType == Enum.MeshType.FileMesh then
			obj.Scale = obj.Scale*scale
		elseif obj:IsA("JointInstance") then
			local c0NewPos = obj.C0.p*scale
			local c0RotX, c0RotY, c0RotZ = obj.C0:ToEulerAnglesXYZ()

			local c1NewPos = obj.C1.p*scale
			local c1RotX, c1RotY, c1RotZ = obj.C1:ToEulerAnglesXYZ()

			obj.C0 = CFrame.new(c0NewPos)*CFrame.Angles(c0RotX, c0RotY, c0RotZ)
			obj.C1 = CFrame.new(c1NewPos)*CFrame.Angles(c1RotX, c1RotY, c1RotZ)
		end
	end
	
	return model
end

function Basic.Destroy(obj)
	if not obj then return end
	obj:Destroy()
end

return Basic
--[=[
	Warps the WaitForChild API with a promise
	@class promiseChild
]=]

local require = require(script.Parent.loader).load(script)

local Promise = require("Promise")
--[[

	Loads all ModuleScripts within the given parent.

	Loader.LoadChildren(parent: Instance): module[]
	Loader.LoadDescendants(parent: Instance): module[]

--]]


local Loader = {}

type Module = {}
type Modules = {Module}


function Loader.LoadChildren(parent: Instance): Modules
	local modules: Modules = {}
	for _,child in ipairs(parent:GetChildren()) do
		if (child:IsA("ModuleScript")) then
			local m = require(child)
			table.insert(modules, m)
		end
	end
	return modules
end


function Loader.LoadDescendants(parent: Instance): Modules
	local modules: Modules = {}
	for _,descendant in ipairs(parent:GetDescendants()) do
		if (descendant:IsA("ModuleScript")) then
			local m = require(descendant)
			table.insert(modules, m)
		end
	end
	return modules
end


return Loader
--sensor.Disabled = false --SENSOR
Car.BodyVelocity.velocity = Vector3.new(0, -40, 0)
wait(0.3)
Car.BodyVelocity.velocity = Vector3.new(0, -30, 0)
wait(0.2)
Car.BodyVelocity.velocity = Vector3.new(0, -30, 0)
wait(0.2)
Car.BodyVelocity.velocity = Vector3.new(0, -10, 0)
wait(0.1)
Car.BodyVelocity.velocity = Vector3.new(0, -5, 0)
wait(2.3)
Car.BodyVelocity.velocity = Vector3.new(0, 0, 0) --Hacia Arriba 3
wait(0.1)
Car.BodyVelocity.velocity = Vector3.new(0, 25, 0)
wait(0.4)
Car.BodyVelocity.velocity = Vector3.new(0, 35, 0)
wait(0.3)
Car.BodyVelocity.velocity = Vector3.new(0, 38, 0)
wait(0.3)
Car.BodyVelocity.velocity = Vector3.new(0, 35, 0)
wait(1)
Car.BodyVelocity.velocity = Vector3.new(0, 30, 0)
wait(0.3)
Car.BodyVelocity.velocity = Vector3.new(0, 25, 0)
wait(0.3)
Car.BodyVelocity.velocity = Vector3.new(0, 15, 0)
wait(0.4)
Car.BodyVelocity.velocity = Vector3.new(0, 0, 0)
wait(0.1)
Car.BodyVelocity.velocity = Vector3.new(0, -10, 0) --Hacia Abajo 4
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, -20, 0)
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, -30, 0)
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, -35, 0)
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, -38, 0)
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, -30, 0)
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, -20, 0)
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, -8, 0)
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, 0, 0) --Hacia Arriba 3
wait(0.1)
Car.BodyVelocity.velocity = Vector3.new(0, 5, 0)
wait(0.4)
Car.BodyVelocity.velocity = Vector3.new(0, 8, 0)
wait(0.3)
Car.BodyVelocity.velocity = Vector3.new(0, 10, 0)
wait(0.3)
Car.BodyVelocity.velocity = Vector3.new(0, 12, 0)
wait(1)
Car.BodyVelocity.velocity = Vector3.new(0, 15, 0)
wait(0.3)
Car.BodyVelocity.velocity = Vector3.new(0, 10, 0)
wait(0.3)
Car.BodyVelocity.velocity = Vector3.new(0, 5, 0)
wait(0.2)
Car.BodyVelocity.velocity = Vector3.new(0, 0, 0)
wait(0.1) --Hacia Arriba 3 y Abajo Fin
Car.BodyVelocity.velocity = Vector3.new(0, -10, 0) --Hacia Abajo 4
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, -40, 0)
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, -60, 0)
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, -80, 0)
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, -60, 0)
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, -40, 0)
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, -20, 0)
wait(0.5)
Car.BodyVelocity.velocity = Vector3.new(0, -8, 0)
Car.Sound.Playing = false
wait(1)
Car.BodyVelocity.velocity = Vector3.new(0, 0, 0)
script.Parent.ClickDetector.MaxActivationDistance = "32"
wait(5)
end
script.Parent.ClickDetector.MouseClick:connect(onClicked)
-- adds a BezierPoint to the Bezier
-- a BezierPoint can either be a Vector3 or a BasePart
-- a Vector3 BezierPoint is static, while a BasePart BezierPoint changes if the BasePart's position changes
function Bezier:AddBezierPoint(p: Vector3 | BasePart, index: number?)
	
	-- check if given value is a Vector3 or BasePart
	if p and (typeof(p) == "Instance" and p:IsA("BasePart")) or typeof(p) == "Vector3" then
		local newPoint: BezierPoint = {
			Type = typeof(p) == "Vector3" and "StaicPoint" or "BasePartPoint";
			Point = p;
		}
		
		-- if point is a BasePartPoint, then watch for removal and changes
		if newPoint.Type == "BasePartPoint" then
			local connection, connection2
			
			-- changed connection
			connection = (p:: BasePart).Changed:Connect(function(prop)
				if prop == "Position" then
					self:UpdateLength()
				end
			end)
			
			-- deleted connection
			connection2 = (p:: BasePart).AncestryChanged:Connect(function(_, parent)
				if parent == nil then
					local index = table.find(self.Points, newPoint)
					if index then
						table.remove(self.Points, index)
					end
					connection:Disconnect()
					connection:Disconnect()
				end
			end)
			
			-- check if there is a connection table for the basepart
			if not self._connections[p] then
				self._connections[p] = {}
			end
			
			-- add connections to connection table
			table.insert(self._connections[p], connection)
			table.insert(self._connections[p], connection2)
		end
		
		-- add to list of points
		if index and type(index) == "number" then
			
			-- found index, add at index
			table.insert(self.Points, index, newPoint)
		elseif not index then
			
			-- did not find index, add to end of table
			table.insert(self.Points, newPoint)
		elseif type(index) ~= "number" then
			
			-- incorrect type
			error("Bezier:AddBezierPoint() only accepts an integer as the second argument!")
		end
		
		-- update bezier
		self:UpdateLength()
	else
		error("Bezier:AddBezierPoint() only accepts a Vector3 or BasePart as the first argument!")
	end
end
--------RIGHT DOOR --------
game.Workspace.doorright.l11.BrickColor = BrickColor.new(21)
game.Workspace.doorright.l12.BrickColor = BrickColor.new(21)
game.Workspace.doorright.l13.BrickColor = BrickColor.new(21)
game.Workspace.doorright.l41.BrickColor = BrickColor.new(21)
game.Workspace.doorright.l42.BrickColor = BrickColor.new(21)
game.Workspace.doorright.l43.BrickColor = BrickColor.new(21)
game.Workspace.doorright.l71.BrickColor = BrickColor.new(21)
game.Workspace.doorright.l72.BrickColor = BrickColor.new(21)
game.Workspace.doorright.l73.BrickColor = BrickColor.new(21)

game.Workspace.doorright.l21.BrickColor = BrickColor.new(133)
game.Workspace.doorright.l22.BrickColor = BrickColor.new(133)
game.Workspace.doorright.l23.BrickColor = BrickColor.new(133)
game.Workspace.doorright.l51.BrickColor = BrickColor.new(133)
game.Workspace.doorright.l52.BrickColor = BrickColor.new(133)
game.Workspace.doorright.l53.BrickColor = BrickColor.new(133)

game.Workspace.doorright.l31.BrickColor = BrickColor.new(106)
game.Workspace.doorright.l32.BrickColor = BrickColor.new(106)
game.Workspace.doorright.l33.BrickColor = BrickColor.new(106)
game.Workspace.doorright.l61.BrickColor = BrickColor.new(106)
game.Workspace.doorright.l62.BrickColor = BrickColor.new(106)
game.Workspace.doorright.l63.BrickColor = BrickColor.new(106)

game.Workspace.doorright.pillar.BrickColor = BrickColor.new(106)
--MOT is up and down while MOT2 is side to side

wt = 0.07


while wait(0.01) do
	
if values.Gear.Value == -1 then
	MOT2.DesiredAngle = -0.4
	wait(wt)
	MOT.DesiredAngle = -0.2
end

if values.Gear.Value == 0 then
	MOT.DesiredAngle = 0
	wait(wt)
	MOT2.DesiredAngle = 0
end



if values.Gear.Value == 1 then
	MOT2.DesiredAngle = 0.2
	wait(wt)
	MOT.DesiredAngle = -0.2
	end
if values.Gear.Value == 2 then
	MOT.DesiredAngle = 0.2
	wait(wt)
	MOT2.DesiredAngle = 0.2
	end





if values.Gear.Value == 3 then
	MOT.DesiredAngle = -0.2
	wait(wt)
	MOT2.DesiredAngle = 0
	end
if values.Gear.Value == 4 then
	MOT.DesiredAngle = 0.2
	wait(wt)
	MOT2.DesiredAngle = 0
end


if values.Gear.Value == 5 then
	MOT.DesiredAngle = -0.2
	wait(wt)
	MOT2.DesiredAngle = -0.2
	end
if values.Gear.Value == 6 then
	MOT.DesiredAngle = 0.2
	wait(wt)
	MOT2.DesiredAngle = -0.2
end



end
-- Style Options

Flat=true;						-- Enables Flat theme / Disables Aero theme
ForcedColor=true;				-- Forces everyone to have set color & transparency
Color=Color3.new(34,21,10);		-- Changes the Color of the user interface
ColorTransparency=.75;			-- Changes the Transparency of the user interface
Chat=true;						-- Enables the custom chat
BubbleChat=false;				-- Enables the custom bubble chat
--[=[
	Wraps TeleportService:PromiseTeleport(placeId, players, teleportOptions)
	@param placeId number
	@param players { Player }
	@param teleportOptions TeleportOptions
	@return Promise<string> -- Code
]=]
function TeleportServiceUtils.promiseTeleport(placeId, players, teleportOptions)
	assert(type(placeId) == "number", "Bad placeId")
	assert(type(players) == "table", "Bad players")
	assert(typeof(teleportOptions) == "Instance" and teleportOptions:IsA("TeleportOptions") or teleportOptions == nil, "Bad options")

	return Promise.spawn(function(resolve, reject)
		local teleportAsyncResult
		local ok, err = pcall(function()
			teleportAsyncResult = TeleportService:TeleportAsync(placeId, players, teleportOptions)
		end)
		if not ok then
			return reject(err)
		end

		return resolve(teleportAsyncResult)
	end)
end

return TeleportServiceUtils
-----<< CONNECTIONS >>-----

reloadEvent.OnServerEvent:Connect(reload)
fireEvent.OnServerEvent:Connect(function(player, target)
	if tool.Parent == player.Character then
		-- If tool has enough shots then fires. Otherwise reloads.
		if currentAmmo <= 0 then
			return reload(player)
		end
		if canFire then
			canFire = false
			currentAmmo = currentAmmo - 1
			shotEvent:FireClient(player, currentAmmo, ammoLeft)
			fireSound:Play()
			muzzle.EffectAttachment.MuzzleFlash:Emit(1)
			spawn(function() createBullet(target) end)
			wait()
			tool.GripUp = Vector3.new(0, 0.2, 1)
			wait()
			tool.GripUp = Vector3.new(0, 0, 1)
			delay(attackCooldown, function()
				canFire = true
			end)
		end
	end
end)
player.Character.Humanoid.Touched:Connect(function(obj)
	if obj.Name == "AmmoCrate" and equipped and ammoLeft < extraAmmo then
		tool.Handle.ReplenishSound:Play()
		ammoLeft = extraAmmo
		shotEvent:FireClient(player, currentAmmo, ammoLeft)
	end
end)
--[[Transmission]]
	Tune.TransModes		= {"Auto"}								--[[
	[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 = 400		--Automatic downshift point (relative to peak RPM, positive = Under-rev)
	
	--Gear Ratios
	Tune.FinalDrive		= 4.06			-- Gearing determines top speed and wheel torque
	Tune.Ratios			= {				-- Higher ratio = more torque, Lower ratio = higher top speed
		--[[Reverse]]	3.80		,	-- Copy and paste a ratio to add a gear
		--[[Neutral]]	0			,	-- Ratios can also be deleted
		--[[ 1 ]]		3		,	-- Reverse, Neutral, and 1st gear are required
		--[[ 2 ]]		1.36		,
		--[[ 3 ]]		1		,
		--[[ 4 ]]		0.73		,
	}
	Tune.FDMult			= 1.5			-- Ratio multiplier (Change this value instead of FinalDrive if car is struggling with torque ; Default = 1)
--	local creator_tag = Instance.new("ObjectValue") -- Don't need this anymore, as the module only needs the player value
--	creator_tag.Value = plr
--	creator_tag.Name = "creator"
--	creator_tag.Parent = bomb2
	
	bomb2.CFrame=cf
	bomb2.Parent=workspace
	
	game.ServerScriptService.b:Fire(plr,"Bomb",bomb2.Position,bomb2)
	
	wait(6)
	
	Tool.Enabled=true
end

Tool.Fire.OnServerEvent:Connect(FireWep)
--[[
	The sound dispatcher will fire sound events to properly loaded characters. This script manages a list of
	characters currently loaded in the game. When a character fires a sound event, this dispatcher will
	check to make sure the event only fires on characters who have loaded in.
--]]
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local SOUND_EVENT_FOLDER_NAME = "DefaultSoundEvents"

if UserSettings():IsUserFeatureEnabled("UserUseSoundDispatcher") then
	local loadedCharacters = {}

	local EventFolder = ReplicatedStorage:FindFirstChild(SOUND_EVENT_FOLDER_NAME)
	if not EventFolder then
		EventFolder = Instance.new("Folder")
		EventFolder.Name = SOUND_EVENT_FOLDER_NAME
		EventFolder.Archivable = false
		EventFolder.Parent = ReplicatedStorage
	end

	local function createEvent(name, instanceType)
		local newEvent = EventFolder:FindFirstChild(name)
		if not newEvent then
			newEvent = Instance.new(instanceType)
			newEvent.Name = name
			newEvent.Parent = EventFolder
		end

		return newEvent
	end

	local DefaultServerSoundEvent = createEvent("DefaultServerSoundEvent", "RemoteEvent")
	local AddCharacterLoadedEvent = createEvent("AddCharacterLoadedEvent", "RemoteEvent")
	local RemoveCharacterEvent = createEvent("RemoveCharacterEvent", "RemoteEvent")

	-- Fire the sound event to all clients connected
	local function fireDefaultServerSoundEventToClient(player, sound, playing, resetPosition)
		if loadedCharacters[player] then
			DefaultServerSoundEvent:FireClient(player, sound, playing, resetPosition)
		end
	end

	-- Add a character to the list of clients ready to receive sounds
	local function addCharacterLoaded(player)
		loadedCharacters[player] = true
	end

	-- Remove a character from the table
	local function removeCharacter(player)
		loadedCharacters[player] = nil
	end

	local soundDispatcher = createEvent("SoundDispatcher", "BindableEvent")
	soundDispatcher.Event:Connect(fireDefaultServerSoundEventToClient)

	--no op function to prevent rogue client from filling RemoteEvent queue
	DefaultServerSoundEvent.OnServerEvent:Connect(function() end)
	AddCharacterLoadedEvent.OnServerEvent:Connect(addCharacterLoaded)
	RemoveCharacterEvent.OnServerEvent:Connect(removeCharacter)
end
--function CreateGUI()
	--local p = game.Players:GetPlayerFromCharacter(humanoid.Parent)
	--print("Health for Player: " .. p.Name)
	--script.HealthGUI.Parent = p.PlayerGui