local D=_Tune.Controls local K=Instance.new("\070\111\108\100\101\114",script.Parent)K.Name="\067\111\110\116\114\111\108\115"for n,b in pairs(D)do local Z=Instance.new("\083\116\114\105\110\103\086\097\108\117\101",K)Z.Name=n Z.Value=b.Name Z.Changed:connect(function()if n=="\077\111\117\115\101\084\104\114\111\116\116\108\101"or n=="\077\111\117\115\101\066\114\097\107\101"then if Z.Value=="\077\111\117\115\101\066\117\116\116\111\110\049"or Z.Value=="\077\111\117\115\101\066\117\116\116\111\110\050"then D[n]=Enum.UserInputType[Z.Value]else D[n]=Enum.KeyCode[Z.Value]end else D[n]=Enum.KeyCode[Z.Value]end end)end local n=_Tune.Peripherals for D,b in pairs(n)do local Z=Instance.new("\073\110\116\086\097\108\117\101",K)Z.Name=D Z.Value=b Z.Changed:connect(function()Z.Value=math.min(100,math.max(0,Z.Value))n[D]=Z.Value end)end function DealWithInput(K,n)if UserInputService:GetFocusedTextBox()==nil and not _InControls then if(K.KeyCode==D.ContlrShiftDown or _MSteer and K.KeyCode==D.MouseShiftDown or not _MSteer and K.KeyCode==D.ShiftDown)and((_IsOn and((_TMode=="\065\117\116\111"and _CGear<=1)and _Tune.AutoShiftVers=="\078\101\119")or _TMode=="\068\067\084"or _TMode=="\077\097\110\117\097\108")and K.UserInputState==Enum.UserInputState.Begin)then if not _ShiftDn then _ShiftDn=true end elseif(K.KeyCode==D.ContlrShiftUp or _MSteer and K.KeyCode==D.MouseShiftUp or not _MSteer and K.KeyCode==D.ShiftUp)and((_IsOn and((_TMode=="\065\117\116\111"and _CGear<1)and _Tune.AutoShiftVers=="\078\101\119")or _TMode=="\068\067\084"or _TMode=="\077\097\110\117\097\108")and K.UserInputState==Enum.UserInputState.Begin)then if not _ShiftUp then _ShiftUp=true end elseif(K.KeyCode==D.ContlrClutch or _MSteer and K.KeyCode==D.MouseClutch or not _MSteer and K.KeyCode==D.Clutch)and _TMode=="\077\097\110\117\097\108"then if K.UserInputState==Enum.UserInputState.Begin then _ClPressing=true elseif K.UserInputState==Enum.UserInputState.End then _ClPressing=false end elseif K.KeyCode==D.ContlrPBrake or _MSteer and K.KeyCode==D.MousePBrake or not _MSteer and K.KeyCode==D.PBrake then if K.UserInputState==Enum.UserInputState.Begin then _PBrake=not _PBrake elseif K.UserInputState==Enum.UserInputState.End then if bike.DriveSeat.Velocity.Magnitude>5 then _PBrake=false end end elseif(K.KeyCode==D.ContlrToggleTMode or K.KeyCode==D.ToggleTransMode)and K.UserInputState==Enum.UserInputState.Begin then local D=1 for K,n in pairs(_Tune.TransModes)do if n==_TMode then D=K break end end D=D+1 if D>#_Tune.TransModes then D=1 end _TMode=_Tune.TransModes[D]elseif not _MSteer and(K.KeyCode==D.Throttle or K.KeyCode==D.Throttle2)or((D.MouseThrottle==Enum.UserInputType.MouseButton1 or D.MouseThrottle==Enum.UserInputType.MouseButton2)and K.UserInputType==D.MouseThrottle or K.KeyCode==D.MouseThrottle)and _MSteer then if K.UserInputState==Enum.UserInputState.Begin and _IsOn then _InThrot=1 _TTick=tick()else _InThrot=_Tune.IdleThrottle/100 _BTick=tick()end elseif not _MSteer and(K.KeyCode==D.Brake or K.KeyCode==D.Brake2)or((D.MouseBrake==Enum.UserInputType.MouseButton1 or D.MouseBrake==Enum.UserInputType.MouseButton2)and K.UserInputType==D.MouseBrake or K.KeyCode==D.MouseBrake)and _MSteer then if K.UserInputState==Enum.UserInputState.Begin then _InBrake=1 else _InBrake=0 end elseif not _MSteer and(K.KeyCode==D.SteerLeft or K.KeyCode==D.SteerLeft2)then if K.UserInputState==Enum.UserInputState.Begin then _GSteerT=-1 _SteerL=true else if _SteerR then _GSteerT=1 else _GSteerT=0 end _SteerL=false end elseif not _MSteer and(K.KeyCode==D.SteerRight or K.KeyCode==D.SteerRight2)then if K.UserInputState==Enum.UserInputState.Begin then _GSteerT=1 _SteerR=true else if _SteerL then _GSteerT=-1 else _GSteerT=0 end _SteerR=false end elseif K.KeyCode==D.ToggleMouseDrive then if K.UserInputState==Enum.UserInputState.End then _MSteer=not _MSteer _InThrot=_Tune.IdleThrottle/100 _TTick=tick()_InBrake=0 _GSteerT=0 end elseif _Tune.TCS and(_IsOn and K.KeyCode==D.ToggleTCS)or K.KeyCode==D.ContlrToggleTCS then if K.UserInputState==Enum.UserInputState.End then _TCS=not _TCS end elseif _Tune.ABS and(_IsOn and K.KeyCode==D.ToggleABS)or K.KeyCode==D.ContlrToggleABS then if K.UserInputState==Enum.UserInputState.End then _ABS=not _ABS end end if K.UserInputType.Name:find("\071\097\109\101\112\097\100")then if K.KeyCode==D.ContlrSteer then if K.Position.X>=0 then local D=math.min(.99,_Tune.Peripherals.ControlRDZone/100)if math.abs(K.Position.X)>D then _GSteerT=(K.Position.X-D)/(1-D)else _GSteerT=0 end else local D=math.min(.99,_Tune.Peripherals.ControlLDZone/100)if math.abs(K.Position.X)>D then _GSteerT=(K.Position.X+D)/(1-D)else _GSteerT=0 end end elseif K.KeyCode==D.ContlrThrottle then if _IsOn then _InThrot=math.max(_Tune.IdleThrottle/100,K.Position.Z)if _InThrot>_Tune.IdleThrottle/100 then _TTick=tick()else _BTick=tick()end else _InThrot=_Tune.IdleThrottle/100 _BTick=tick()end elseif K.KeyCode==D.ContlrBrake then _InBrake=K.Position.Z end end else _InThrot=_Tune.IdleThrottle/100 _GSteerT=0 _InBrake=0 end end UserInputService.InputBegan:connect(DealWithInput)UserInputService.InputChanged:connect(DealWithInput)UserInputService.InputEnded:connect(DealWithInput)


	local _CTRL = _Tune.Controls
	local Controls = Instance.new("Folder",script.Parent)
	Controls.Name = "Controls"
	for i,v in pairs(_CTRL) do
		local a=Instance.new("StringValue",Controls)
		a.Name=i
		a.Value=v.Name
		a.Changed:connect(function()
			if i=="MouseThrottle" or i=="MouseBrake" then
				if a.Value == "MouseButton1" or a.Value == "MouseButton2" then
					_CTRL[i]=Enum.UserInputType[a.Value]
				else
					_CTRL[i]=Enum.KeyCode[a.Value]
				end
			else
				_CTRL[i]=Enum.KeyCode[a.Value]
			end
		end)
	end
	
	--Deadzone Adjust
	local _PPH = _Tune.Peripherals
		for i,v in pairs(_PPH) do
		local a = Instance.new("IntValue",Controls)
		a.Name = i
		a.Value = v
		a.Changed:connect(function() 
			a.Value=math.min(100,math.max(0,a.Value))
			_PPH[i] = a.Value
		end)
	end
	
	--Input Handler
	function DealWithInput(input,IsRobloxFunction)
		if (UserInputService:GetFocusedTextBox()==nil) and not _InControls then --Ignore when UI Focus
			--Shift Down [Manual Transmission]
			if (input.KeyCode ==_CTRL["ContlrShiftDown"] or (_MSteer and input.KeyCode==_CTRL["MouseShiftDown"]) or ((not _MSteer) and input.KeyCode==_CTRL["ShiftDown"])) and ((_IsOn and ((_TMode=="Auto" and _CGear<=1) and _Tune.AutoShiftVers == "New") or _TMode=="DCT") or _TMode=="Manual") and input.UserInputState == Enum.UserInputState.Begin then
				if not _ShiftDn then _ShiftDn = true end
				
			--Shift Up [Manual Transmission]
			elseif (input.KeyCode ==_CTRL["ContlrShiftUp"] or (_MSteer and input.KeyCode==_CTRL["MouseShiftUp"]) or ((not _MSteer) and input.KeyCode==_CTRL["ShiftUp"])) and ((_IsOn and ((_TMode=="Auto" and _CGear<1) and _Tune.AutoShiftVers == "New") or _TMode=="DCT") or _TMode=="Manual") and input.UserInputState == Enum.UserInputState.Begin then
				if not _ShiftUp then _ShiftUp = true end
				
			--Toggle Clutch
			elseif (input.KeyCode ==_CTRL["ContlrClutch"] or (_MSteer and input.KeyCode==_CTRL["MouseClutch"]) or ((not _MSteer) and input.KeyCode==_CTRL["Clutch"])) and _TMode=="Manual" then
				if input.UserInputState == Enum.UserInputState.Begin then
					_ClPressing = true
				elseif input.UserInputState == Enum.UserInputState.End then
					_ClPressing = false
				end
				
			--Toggle PBrake
			elseif input.KeyCode ==_CTRL["ContlrPBrake"] or (_MSteer and input.KeyCode==_CTRL["MousePBrake"]) or ((not _MSteer) and input.KeyCode==_CTRL["PBrake"]) then
				if input.UserInputState == Enum.UserInputState.Begin then
					_PBrake = not _PBrake
				elseif input.UserInputState == Enum.UserInputState.End then
					if bike.DriveSeat.Velocity.Magnitude>5 then _PBrake = false end
				end
				
			--Toggle Transmission
			elseif (input.KeyCode == _CTRL["ContlrToggleTMode"] or input.KeyCode==_CTRL["ToggleTransMode"]) and input.UserInputState == Enum.UserInputState.Begin then
				local n=1
				for i,v in pairs(_Tune.TransModes) do
					if v==_TMode then n=i break end
				end
				n=n+1
				if n>#_Tune.TransModes then n=1 end
				_TMode = _Tune.TransModes[n]
				
			--Throttle
			elseif ((not _MSteer) and (input.KeyCode==_CTRL["Throttle"] or input.KeyCode == _CTRL["Throttle2"])) or ((((_CTRL["MouseThrottle"]==Enum.UserInputType.MouseButton1 or _CTRL["MouseThrottle"]==Enum.UserInputType.MouseButton2) and input.UserInputType == _CTRL["MouseThrottle"]) or input.KeyCode == _CTRL["MouseThrottle"])and _MSteer) then
				if input.UserInputState == Enum.UserInputState.Begin and _IsOn then
					_InThrot = 1
					_TTick = tick()
				else
					_InThrot = _Tune.IdleThrottle/100
					_BTick = tick()
				end
				
			--Brake
			elseif ((not _MSteer) and (input.KeyCode==_CTRL["Brake"] or input.KeyCode == _CTRL["Brake2"])) or ((((_CTRL["MouseBrake"]==Enum.UserInputType.MouseButton1 or _CTRL["MouseBrake"]==Enum.UserInputType.MouseButton2) and input.UserInputType == _CTRL["MouseBrake"]) or input.KeyCode == _CTRL["MouseBrake"])and _MSteer) then
				if input.UserInputState == Enum.UserInputState.Begin then
					_InBrake = 1
				else
					_InBrake = 0
				end
				
			--Steer Left
			elseif (not _MSteer) and (input.KeyCode==_CTRL["SteerLeft"] or input.KeyCode == _CTRL["SteerLeft2"]) then
				if input.UserInputState == Enum.UserInputState.Begin then
					_GSteerT = -1
					_SteerL = true
				else
					if _SteerR then
						_GSteerT = 1
					else
						_GSteerT = 0
					end
					_SteerL = false
				end
				
			--Steer Right
			elseif (not _MSteer) and (input.KeyCode==_CTRL["SteerRight"] or input.KeyCode == _CTRL["SteerRight2"]) then
				if input.UserInputState == Enum.UserInputState.Begin then
					_GSteerT = 1
					_SteerR = true
				else
					if _SteerL then
						_GSteerT = -1
					else
						_GSteerT = 0
					end
					_SteerR = false
				end
				
			--Toggle Mouse Controls
			elseif input.KeyCode ==_CTRL["ToggleMouseDrive"] then
				if input.UserInputState == Enum.UserInputState.End then
					_MSteer = not _MSteer
					_InThrot = _Tune.IdleThrottle/100
					_TTick = tick()
					_InBrake = 0
					_GSteerT = 0
				end
				
			--Toggle TCS
			elseif _Tune.TCS and _IsOn and input.KeyCode == _CTRL["ToggleTCS"] or input.KeyCode == _CTRL["ContlrToggleTCS"] then
				if input.UserInputState == Enum.UserInputState.End then _TCS = not _TCS end
			
			--Toggle ABS
			elseif _Tune.ABS and _IsOn and input.KeyCode == _CTRL["ToggleABS"] or input.KeyCode == _CTRL["ContlrToggleABS"] then
				if input.UserInputState == Enum.UserInputState.End then _ABS = not _ABS end
				
			end
			
			--Variable Controls
			if input.UserInputType.Name:find("Gamepad") then
				--Gamepad Steering
				if input.KeyCode == _CTRL["ContlrSteer"] then
					if input.Position.X>= 0 then
						local cDZone = math.min(.99,_Tune.Peripherals.ControlRDZone/100)
						if math.abs(input.Position.X)>cDZone then
							_GSteerT = (input.Position.X-cDZone)/(1-cDZone)
						else
							_GSteerT = 0
						end
					else
						local cDZone = math.min(.99,_Tune.Peripherals.ControlLDZone/100)
						if math.abs(input.Position.X)>cDZone then
							_GSteerT = (input.Position.X+cDZone)/(1-cDZone)
						else
							_GSteerT = 0
						end
					end
					
				--Gamepad Throttle
				elseif input.KeyCode == _CTRL["ContlrThrottle"] then
					if _IsOn then
						_InThrot = math.max(_Tune.IdleThrottle/100,input.Position.Z)
						if _InThrot > _Tune.IdleThrottle/100 then _TTick = tick() else _BTick = tick() end
					else
						_InThrot = _Tune.IdleThrottle/100
						_BTick = tick()
					end
					
				--Gamepad Brake
				elseif input.KeyCode == _CTRL["ContlrBrake"] then
					_InBrake = input.Position.Z
				end
			end
		else
			_InThrot = _Tune.IdleThrottle/100
			_GSteerT = 0
			_InBrake = 0
		end
	end
	UserInputService.InputBegan:connect(DealWithInput)
	UserInputService.InputChanged:connect(DealWithInput)
	UserInputService.InputEnded:connect(DealWithInput)
