Pinkstack/roblox-luau-corpus-text huggingface dataset:
-- For Testing


ClientSceneFramework.task = task

local hasBeenCalled = false

return function(stubs)
	if hasBeenCalled then
		error("Client Scene Framework has already been called")
		return
	end

	-- Used for testing only
	if stubs then
		for i, v in pairs(stubs) do
			ClientSceneFramework[i] = v
		end
	end

	-- Anchor Client For Scene Transition: Anchors a client while they're transitioning so their velocity doesn't launch people
	ClientSceneFramework.handleAnchorClientForSceneTransition =
		ClientSceneFramework.AnchorClientForSceneTransitionModule
	ClientSceneFramework.AnchorClientForSceneTransition.OnClientEvent:Connect(
		ClientSceneFramework.handleAnchorClientForSceneTransition
	)

	-- Unload Scene Client Remote Event: removes their scene
	ClientSceneFramework.handleUnloadSceneClientRemoteEvent = ClientSceneFramework.UnloadSceneClientRemoteEventModule(
		ClientSceneFramework.DefaultUnloadScene
	)
	ClientSceneFramework.UnloadSceneClientRemoteEvent.OnClientEvent:Connect(
		ClientSceneFramework.handleUnloadSceneClientRemoteEvent
	)

	-- Load Scene Remote Event: Loads a scene for the client and tells them they're ready to transition
	ClientSceneFramework.handleLoadSceneRemoteEvent =
		ClientSceneFramework.LoadSceneRemoteEventModule.LoadSceneRemoteEventFn
	ClientSceneFramework.LoadSceneRemoteEvent.OnClientEvent:Connect(ClientSceneFramework.handleLoadSceneRemoteEvent)

	-- Get Current Scene Environment: Returns the scene's client folder from workspace
	ClientSceneFramework.handleGetCurrentSceneEnvironment = ClientSceneFramework.GetCurrentSceneEnvironmentModule
	ClientSceneFramework.GetCurrentSceneEnvironment.OnInvoke = ClientSceneFramework.handleGetCurrentSceneEnvironment

	ClientSceneFramework.InitModule()

	hasBeenCalled = true

	return ClientSceneFramework
end
--Precalculated paths


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


if th == 44 then
if script.Parent.Control.Gear.Value == 1 then 	
	if GEAR.Value == 1 then
		if Wrpm.Value*(Gear1/FinalDrive)*100 < Idle then
			rpm.Value = Idle
		else
			rpm.Value = Wrpm.Value*(Gear1/FinalDrive)*100
end

if Wrpm.Value*(Gear1/FinalDrive)*100 >= RPMLimiter then
	rwd.Torque = 0
else

if script.Parent.Control.Throttle.Computer.Value == 0 and script.Parent.CarSeat.CC.Value == false then
	rwd.Torque = 0.2
else
	
if (((rpm.Value/10000)-((sconfig*rpm.Value)/10000)^4.8)*hp/(config*size)) < ((Gear1/FinalDrive)*(hp/650))*scale then
	rwd.Torque = (((Gear1/FinalDrive)*(hp/650))*scale)*th.Value
else
rwd.Torque = 
(((rpm.Value/10000)-((sconfig*rpm.Value)/10000)^4.8)*hp/(config*size))*th.Value
				end
			end
		end
	end
end
-----------------


local runservice = game:GetService("RunService")
while runservice.Heartbeat:Wait() do
	local distance = 1000 -- 사람 인식하는 최대 범위
	local target
	for i, v in pairs(game.Players:GetPlayers())do
		if v.Character and v.Character:FindFirstChild("Humanoid") 
			and v.Character.Humanoid.Health > 0 
			and v.Character:FindFirstChild("HumanoidRootPart")then
			local d = (rootpart.Position - v.Character.HumanoidRootPart.Position).magnitude
			if distance > d then
				distance = d
				target = v.Character.HumanoidRootPart
			end
		end
	end
	for i, v in pairs(npc:GetChildren())do
		if v:FindFirstChild("zombie") == nil and v:FindFirstChild("Humanoid")
			and v.Humanoid.Health > 0 
			and v:FindFirstChild("HumanoidRootPart")then
			local d = (rootpart.Position - v.HumanoidRootPart.Position).magnitude
			if distance > d then
				distance = d
				target = v.HumanoidRootPart
			end
		end
	end
	if target then
		humanoid:MoveTo(target.Position)
	end
end
--[=[
	Brios wrap a value (or tuple of values) and are used to convey the lifetime of that
	object. The brio is better than a maid, by providing the following constraints:

	- Can be in 2 states, dead or alive.
	- While alive, can retrieve values.
	- While dead, retrieving values is forbidden.
	- Died will fire once upon death.

	Brios encapsulate the "lifetime" of a valid resource. Unlike a maid, they
	- Can only die once, ensuring duplicate calls never occur.
	- Have less memory leaks. Memory leaks in maids can occur when use of the maid occurs
	  after the cleanup of the maid has occured, in certain race conditions.
	- Cannot be reentered, i.e. cannot retrieve values after death.

	:::info
	Calling `brio:Destroy()` or `brio:Kill()` after death does nothing. Brios cannot
	be resurrected.
	:::

	Brios are useful for downstream events where you want to emit a resource. Typically
	brios should be killed when their source is killed. Brios are intended to be merged
	with downstream brios so create a chain of reliable resources.

	```lua
	local brio = Brio.new("a", "b")
	print(brio:GetValue()) --> a b
	print(brio:IsDead()) --> false

	brio:GetDiedSignal():Connect(function()
		print("Hello from signal!")
	end)
	brio:ToMaid():GiveTask(function()
		print("Hello from maid cleanup!")
	end)
	brio:Kill()
	--> Hello from signal!
	--> Hello from maid cleanup!

	print(brio:IsDead()) --> true
	print(brio:GetValue()) --> ERROR: Brio is dead
	```

	## Design philosophy

	Brios are designed to solve this issue where we emit an object with a lifetime associated with it from an
	Observable stream. This resource is only valid for some amount of time (for example, while the object is
	in the Roblox data model).

	In order to know how long we can keep this object/use it, we wrap the object with a Brio, which denotes
	 the lifetime of the object.

	Modeling this with pure observables is very tricky because the subscriber will have to also monitor/emit
	a similar object with less clear conventions. For example  an observable that emits the object, and then nil on death.

	@class Brio
]=]



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

local Maid = require("Maid")
local GoodSignal = require("GoodSignal")

local Brio = {}
Brio.ClassName = "Brio"
Brio.__index = Brio
--[[
	
	Returns all touching parts. Best (and cheapest) solution.
	
	Functions.GetTouchingParts(
		part,					<-- |REQ| 	Basepart	
	)
	
--]]





return function(part)
	--- Create touch event (otherwise GetTouchingParts fails to return anything)
	local connection = part.Touched:Connect(function()  end)
	
	--- Yeet
	local results = part:GetTouchingParts()
	
	--- Cancel touch event
	connection:Disconnect()
	
	--
	return results
end
--[[Engine]]


	--Torque Curve
	Tune.Horsepower		= 592		--	[TORQUE CURVE VISUAL]
	Tune.IdleRPM		= 700		--		https://www.desmos.com/calculator/2uo3hqwdhf
	Tune.PeakRPM		= 6500		--		Use sliders to manipulate values
	Tune.Redline		= 8000		--		Copy and paste slider values into the respective tune values
	Tune.EqPoint		= 5500
	Tune.PeakSharpness	= 7.5
	Tune.CurveMult		= 0.16
	
	--Incline Compensation
	Tune.InclineComp	= 1.7			-- Torque compensation multiplier for inclines (applies gradient from 0-90 degrees)
	
	--Misc
	Tune.RevAccel		= 150		-- RPM acceleration when clutch is off
	Tune.RevDecay		= 75		-- RPM decay when clutch is off
	Tune.RevBounce		= 500		-- RPM kickback from redline
	Tune.IdleThrottle	= 3			-- Percent throttle at idle
	Tune.ClutchTol		= 500		-- Clutch engagement threshold (higher = faster response)
--DO NOT CHANGE ANYTHING INSIDE OF THIS SCRIPT BESIDES WHAT YOU ARE TOLD TO UNLESS YOU KNOW WHAT YOU'RE DOING OR THE SCRIPT WILL NOT WORK!!


local hitPart = script.Parent
local debounce = true
local tool = game.ServerStorage.PinHeart -- Change "Sword" to the name of your tool, make sure your tool is in ServerStorage

hitPart.Touched:Connect(function(hit)
	if debounce == true then
		if hit.Parent:FindFirstChild("Humanoid") then
			local plr = game.Players:FindFirstChild(hit.Parent.Name)
			if plr then
				debounce = false
				hitPart.BrickColor = BrickColor.new("Bright red")
				tool:Clone().Parent = plr.Backpack
				wait(3) -- Change "3" to however long you want the player to have to wait before they can get the tool again
				debounce = true
				hitPart.BrickColor = BrickColor.new("Bright green")
			end
		end
	end
end)
--this script is made by Joriangames/Problox Studio Scripts. Watch my video to understand
--everything. Here is the link: https://www.youtube.com/watch?v=XVwYgTLlrkM&lc=UgwxXH2R5pq3cY565Xx4AaABAg
--Make sure that this script is a normal script in the TextButton!


local frame = script.Parent.Parent.Frame
frame.Visible = false
script.Parent.MouseButton1Click:Connect(function()
	if frame.Visible == false then
		frame.Visible = true
	else
		frame.Visible = false
	end
end)
--		print(animName .. " * " .. idx .. " [" .. origRoll .. "]")


		local anim = animTable[animName][idx].anim

		-- load it to the humanoid; get AnimationTrack
		toolAnimTrack = humanoid:LoadAnimation(anim)
		 
		-- play the animation
		toolAnimTrack:Play(transitionTime)
		toolAnimName = animName

		toolAnimTrack.KeyframeReached:connect(toolKeyFrameReachedFunc)
	end
end

function stopToolAnimations()
	local oldAnim = toolAnimName

	if (currentToolAnimKeyframeHandler ~= nil) then
		currentToolAnimKeyframeHandler:disconnect()
	end

	toolAnimName = ""
	if (toolAnimTrack ~= nil) then
		toolAnimTrack:Stop()
		toolAnimTrack:Destroy()
		toolAnimTrack = nil
	end


	return oldAnim
end
--- Solve direction and length of the ray by comparing current and last frame's positions
-- @param point type


function solver:Solve(point: {[string]: any}): (Vector3, Vector3)
	--- Translate localized Vector3 positions to world space values
	local originPart: BasePart = point.Instances[1]
	local vector: Vector3 = point.Instances[2]
	local pointToWorldSpace: Vector3 = originPart.Position + originPart.CFrame:VectorToWorldSpace(vector)

	--- If LastPosition is nil (caused by if the hitbox was stopped previously), rewrite its value to the current point position
	if not point.LastPosition then
		point.LastPosition = pointToWorldSpace
	end

	local origin: Vector3 = point.LastPosition
	local direction: Vector3 = pointToWorldSpace - (point.LastPosition or EMPTY_VECTOR)

	point.WorldSpace = pointToWorldSpace

	return origin, direction
end

function solver:UpdateToNextPosition(point: {[string]: any}): Vector3
	return point.WorldSpace
end

function solver:Visualize(point: {[string]: any}): CFrame
	return CFrame.lookAt(point.WorldSpace, point.LastPosition)
end

return solver
--[[Vehicle Weight]]

	
	--Determine Current Mass
	local mass=0
	
	function getMass(p)
		for i,v in pairs(p:GetChildren())do
			if v:IsA("BasePart") then
				mass=mass+v:GetMass()
			end
			getMass(v)
		end	
	end
	getMass(car)
	
	--Apply Vehicle Weight
	if mass<_Tune.Weight*weightScaling then
		--Calculate Weight Distribution
		local centerF = Vector3.new()
		local centerR = Vector3.new()
		local countF = 0
		local countR = 0
		
		for i,v in pairs(Drive) do
			if v.Name=="FL" or v.Name=="FR" or v.Name=="F" then
				centerF = centerF+v.CFrame.p
				countF = countF+1
			else
				centerR = centerR+v.CFrame.p
				countR = countR+1
			end
		end
		centerF = centerF/countF
		centerR = centerR/countR
		local center = centerR:Lerp(centerF, _Tune.WeightDist/100)  
		
		--Create Weight Brick
		local weightB = Instance.new("Part",car.Body)
		weightB.Name = "#Weight"
		weightB.Anchored = true
		weightB.CanCollide = false
		weightB.BrickColor = BrickColor.new("Really black")
		weightB.TopSurface = Enum.SurfaceType.Smooth
		weightB.BottomSurface = Enum.SurfaceType.Smooth
		if _Tune.WBVisible then
			weightB.Transparency = .75			
		else
			weightB.Transparency = 1			
		end
		weightB.Size = Vector3.new(_Tune.WeightBSize[1],_Tune.WeightBSize[2],_Tune.WeightBSize[3])
		weightB.CustomPhysicalProperties = PhysicalProperties.new(((_Tune.Weight*weightScaling)-mass)/(weightB.Size.x*weightB.Size.y*weightB.Size.z),0,0,0,0)
		weightB.CFrame=(car.Body.CarName.Value.VehicleSeat.CFrame-car.Body.CarName.Value.VehicleSeat.Position+center)*CFrame.new(0,_Tune.CGHeight,0)
	else
		--Existing Weight Is Too Massive
		warn( "\n\t [AC".._BuildVersion.."]: Mass too high for specified weight."
			.."\n\t    Target Mass:\t"..(math.ceil(_Tune.Weight*weightScaling*100)/100)
			.."\n\t    Current Mass:\t"..(math.ceil(mass*100)/100)
			.."\n\t Reduce part size or axle density to achieve desired weight.")
	end
	
	local flipG = Instance.new("BodyGyro",car.Body.CarName.Value.VehicleSeat)
	flipG.Name = "Flip"
	flipG.D = 0
	flipG.MaxTorque = Vector3.new(0,0,0)
	flipG.P = 0
-- Destroys this cache entirely. Use this when you don't need this cache object anymore.


function PartCacheStatic:Dispose()
	assert(getmetatable(self) == PartCacheStatic, ERR_NOT_INSTANCE:format("Dispose", "PartCache.new"))

	for _, object in self.Open do
		object:Destroy()
	end
	
	for _, object in self.InUse do
		object:Destroy()
	end
	
	self.Template:Destroy()
	
	self.Open = {}
	self.InUse = {}
	
	self.CurrentCacheParent = nil
	self.GetPart = nil
	self.ReturnPart = nil
	self.SetCacheParent = nil
	self.Expand = nil
	self.Dispose = nil
end

return PartCacheStatic
--local pupil1 = script.Parent.BillboardGui.Pupils1
--local pupil2 = script.Parent.BillboardGui.Pupils2



while task.wait() do
	game:GetService('TweenService'):Create(eye1,TweenInfo.new(3,Enum.EasingStyle.Cubic,Enum.EasingDirection.InOut,0,false,0),{StudsOffset = Vector3.new(0, 1.8, 0)}):Play()
	game:GetService('TweenService'):Create(eye2,TweenInfo.new(3,Enum.EasingStyle.Cubic,Enum.EasingDirection.InOut,0,false,0),{StudsOffset = Vector3.new(0, 1.8, 0)}):Play()
	task.wait(3)
	game:GetService('TweenService'):Create(eye1,TweenInfo.new(3,Enum.EasingStyle.Cubic,Enum.EasingDirection.InOut,0,false,0),{StudsOffset = Vector3.new(0, 2, 0)}):Play()
	game:GetService('TweenService'):Create(eye2,TweenInfo.new(3,Enum.EasingStyle.Cubic,Enum.EasingDirection.InOut,0,false,0),{StudsOffset = Vector3.new(0, 2, 0)}):Play()
	task.wait(3)
end
--Make Rig and choose any Rig
--Add Script and paste this into Script



name="Humanoid"


robo=script.Parent:Clone()

while true do
	wait(5)
	if script.Parent.Humanoid.Health<1 then
		robo=robo:Clone()
		robo.Parent=script.Parent.Parent
		robo:makeJoints()
		script.Parent:remove()
	end
end
-- ROBLOX TODO: ADO-1182 Add more plugins here as we translate them


local PLUGINS = {
	jestMockSerializer,
	plugins.AsymmetricMatcher,
	plugins.ReactElement,
	plugins.ReactTestComponent,
	-- ROBLOX deviation: Roblox Instance matchers
	plugins.RobloxInstance,
}

local originalPLUGINS = Array.from(PLUGINS)
--Graveyard---------------
--[[

--function PlayerStatManager:getTycoonPurchases(player)
--	local succes,data = pcall(function() 
--		local playerUserId = "Player_" .. player.UserId
--		return sessionData[playerUserId]["TycoonPurchases"]
--	end)
--	if succes == false then
--		warn("ERROR---------PlayerStatManager:getTycoonPurchases----------->")
--		print(data)
--		return nil
--	else
--		return data	
--	end
--end 
local function setupPlayerData(player)	
	local playerMoney = serverStorage:WaitForChild("PlayerMoney")
	local playerStats = playerMoney:FindFirstChild(player.Name)
	--Sometimes people have duplicate tycoon add e.g in core handler script
	--adds PlayerMoney to storage and number value with player name that holds the 
	--money value 
	if playerStats == nil then
		local plrStats = Instance.new("NumberValue",playerMoney)
		plrStats.Name = player.Name
		local isOwner = Instance.new("ObjectValue",plrStats)
		isOwner.Name = "OwnsTycoon"
	end
	local playerUserId = "Player_" .. player.UserId
 
	local success,data = pcall(function()
		return playerData:GetAsync(playerUserId)
	end)
	
	if success then
		if data then
			print("----------Money: ---------> "..data["Money"])

			sessionData[playerUserId] = data
			local playerMoneyChild = playerMoney:FindFirstChild(player.Name)
			if playerMoneyChild then
				playerMoneyChild.Value = playerMoneyChild.Value + data["Money"]
			else
				print("------------playerMoneyChild is nil")
			end
		else
			print("No data----------------->")
			
			wait()
			local success,err = pcall(function()
				if player:IsInGroup(groupId) then
					local cashmoney = playerMoney:FindFirstChild(player.Name)
					if cashmoney then
						cashmoney.Value = cashmoney.Value + cashGivenAmount
					end
				end
			end)
			
			if success == false then
				print(err)
			end
			
			sessionData[playerUserId] = {}
			--Adding purchases names to player saves but false
			for f = 1,#savedPurchasesNames,1 do
				local name = savedPurchasesNames[f]
				sessionData[playerUserId][name] = false
			end
			
			sessionData[playerUserId]["Money"] = cashGivenAmount
			sessionData[playerUserId]["RebirthCount"] = 0
			return
		end

		--Adding new version objects
		for e = 1,#savedPurchasesNames,1 do
			local name = savedPurchasesNames[e]
			print("Name of object: ",name)
			if sessionData[playerUserId][name] == nil then
				print("Adding new version objects "..name)
				sessionData[playerUserId][name] = false
			end
		end]
		
	else
		warn("Couldn't get data")
		print(data)
	end		
end
]]

--

		--Testing wait TODO remove
		--TODO fix problem PurchaseHandlerNew add objects from purchases while it is being
		--required below and the it doesn't add new version for player if he joins the first initiolization
		--of the server
		--wait(5)--delete later on --if must turn back on uncomment this
		--Investigate
		--local purchaseHandlerNew = waitForTycoonsPurchaseHandlerNew()
		--local Objects = require(purchaseHandlerNew)
		--print("Name of tycoon: ",tycoons[1].Name)
		--local Objects = require(tycoons[1]:WaitForChild("PurchaseHandlerNew"))
	   

		--Adding new version objects
--[[[Default Controls]]


	--Peripheral Deadzones
	Tune.Peripherals = {
		MSteerWidth				= 67		,	-- Mouse steering control width	(0 - 100% of screen width)
		MSteerDZone				= 10		,	-- Mouse steering deadzone (0 - 100%)
		
		ControlLDZone			= 5			,	-- Controller steering L-deadzone (0 - 100%)
		ControlRDZone			= 5			,	-- Controller steering R-deadzone (0 - 100%)
	}
	
	--Control Mapping
	Tune.Controls = {
		
	--Keyboard Controls
		--Mode Toggles
		ToggleTCS				= Enum.KeyCode.T					,
		ToggleABS				= Enum.KeyCode.Y					,
		ToggleTransMode			= Enum.KeyCode.M					,
		ToggleMouseDrive		= Enum.KeyCode.V					,
		
		--Primary Controls
		Throttle				= Enum.KeyCode.Up					,
		Brake					= Enum.KeyCode.Down					,
		SteerLeft				= Enum.KeyCode.Left					,
		SteerRight				= Enum.KeyCode.Right				,
		
		--Secondary Controls
		Throttle2				= Enum.KeyCode.W					,
		Brake2					= Enum.KeyCode.S					,
		SteerLeft2				= Enum.KeyCode.A					,
		SteerRight2				= Enum.KeyCode.D					,
		
		--Manual Transmission
		ShiftUp					= Enum.KeyCode.E					,
		ShiftDown				= Enum.KeyCode.Q					,
		Clutch					= Enum.KeyCode.LeftShift			,
		
		--Handbrake
		PBrake					= Enum.KeyCode.LeftShift					,
		
	--Mouse Controls
		MouseThrottle			= Enum.UserInputType.MouseButton1	,
		MouseBrake				= Enum.UserInputType.MouseButton2	,
		MouseClutch				= Enum.KeyCode.W					,
		MouseShiftUp			= Enum.KeyCode.E					,
		MouseShiftDown			= Enum.KeyCode.Q					,
		MousePBrake				= Enum.KeyCode.LeftShift			,
		
	--Controller Mapping
		ContlrThrottle			= Enum.KeyCode.ButtonR2				,
		ContlrBrake				= Enum.KeyCode.ButtonL2				,
		ContlrSteer				= Enum.KeyCode.Thumbstick1			,
		ContlrShiftUp			= Enum.KeyCode.ButtonY				,
		ContlrShiftDown			= Enum.KeyCode.ButtonX				,
		ContlrClutch			= Enum.KeyCode.ButtonR1				,
		ContlrPBrake			= Enum.KeyCode.ButtonL1				,
		ContlrToggleTMode		= Enum.KeyCode.DPadUp				,
		ContlrToggleTCS			= Enum.KeyCode.DPadDown				,
		ContlrToggleABS			= Enum.KeyCode.DPadRight			,
	}
----------------------This is just an example-----------------------------


end

local userInputService = game:GetService("UserInputService")
userInputService.InputBegan:Connect(function(input, gameProcessedEvent)
	if gameProcessedEvent then return end
	if input.KeyCode == Enum.KeyCode.One then
		onKeyPressOne()
	elseif input.KeyCode == Enum.KeyCode.Two then
		onKeyPressTwo()
	elseif input.KeyCode == Enum.KeyCode.G then
		onKeyPressG()
	end
end)