Pinkstack/roblox-luau-corpus-text huggingface dataset:
-- Determine the gun elevation and tilt


function determineNewDirections(targetVector)
	local targElev = 0;
	local targRot = 0;
	
	local turretMain = 	parts.TurretRing2;
	
	-- Vector normal to the plane which is the turret ring
	local turretNormal = turretMain.CFrame.lookVector;
	
	local angleFromNormal = turretNormal:Dot(targetVector);
	
	-- Determine gun elevation
	targElev = math.pi/2 - math.acos(angleFromNormal);
	
	-- Projection of target vector onto the turret plane
	local targetProjection = (targetVector - (angleFromNormal*turretNormal)).unit;	
	
	local forwardVector = ( (turretMain.CFrame - turretMain.CFrame.p) -- Orientation only of brick
		* CFrame.new(0, -1, 0)).p; -- Translated down 1
	
	-- Determine angle between forward vector and the projected target vector
	targRot = math.acos(forwardVector:Dot(targetProjection));
	
	-- Determine the sign of the angle
	local vectorCross = forwardVector:Cross(targetProjection);
	
	-- If the cross product is opposite to the normal vector, make the angle negative
	if (vectorCross:Dot(turretNormal) < 0) then
		targRot = -targRot;
	end
	
	-- Put rotation and elevation into an array
	local rotations = {};
	rotations[1] = targElev;
	rotations[2] = targRot;
	
	return rotations;
end

function sign(input)
	if (input < 0) then
		return -1;
	else
		return 1;
	end
end
---Camera


function Camera()
	local cam=workspace.CurrentCamera
	local CRot=0
	local CBack=0
	local CUp=0
	local look=0
	local camChange = 0
	local function CamUpdate()
		if not pcall (function()
			camChange=DPadUp
			if GMode==2 then
				if math.abs(RStickX)>.1 then
					local sPos=1
					if RStickX<0 then sPos=-1 end
					CRot=sPos*math.abs(((math.abs(RStickX)-.1)/(.9)))*-60
				else
					CRot=0
				end
				if math.abs(RStickY)>.1 then
					local sPos=1
					if RStickY<0 then sPos=-1 end
					CUp=math.min(sPos*math.abs(((math.abs(RStickY)-.1)/(.9)))*-75,30)
				else
					CUp=0
				end
			else
				if CRot>look then
					CRot=math.max(look,CRot-20)
				elseif CRot<look then
					CRot=math.min(look,CRot+20)
				end
				CUp=0
			end
			CBack=-180*ButtonR3
			cam.CameraSubject=car.DriveSeat
			cam.FieldOfView=70
			if GMode==0 then
				cam.CameraType=Enum.CameraType.Custom
				player.CameraMaxZoomDistance=400
			else
				cam.CameraType = "Scriptable"
				local pspeed = math.min(1,car.DriveSeat.Velocity.Magnitude/500)
				local cc = car.DriveSeat.Position+Vector3.new(0,8+(pspeed*2),0)-((car.DriveSeat.CFrame*CFrame.Angles(math.rad(CUp),math.rad(CRot+CBack),0)).lookVector*17)+(car.DriveSeat.Velocity.Unit*-7*pspeed)
				cam.CoordinateFrame = CFrame.new(cc,car.DriveSeat.Position)
			end
		end) then
			cam.FieldOfView=70
			cam.CameraSubject=player.Character.Humanoid
			cam.CameraType=Enum.CameraType.Custom
			player.CameraMaxZoomDistance=400
			run:UnbindFromRenderStep("CamUpdate")
		end
	end
	mouse.KeyDown:connect(function(key)
		if key=="z" then
			look=50
		elseif key=="x" then
			look=-180
		elseif key=="c" then
			look=-50
		end
	end)
	mouse.KeyUp:connect(function(key)
		if key=="z" and look==50 then
			look=0
		elseif key=="x" and (look==-160 or look==-180) then
			look=0
		elseif key=="c" and look==-50 then
			look=0
		end
	end)
	--run:BindToRenderStep("CamUpdate",Enum.RenderPriority.Camera.Value,CamUpdate)
	--table.insert(Binded,"CamUpdate")
	table.insert(Binded,CamUpdate)
end
Camera()
-- The Possibilities are endless with this, Feel free to add so many awesome features to your timer script, like playing sounds, displaying UI, doing background stuff and even saving player data!
-- Be sure to place me in your GUI, do not place me inside any parent except for the GUI!


	
	-- If you have questions view SSessionHandler script! :)

Session.Changed:Connect(UpdateStatus) -- Remove this if you remove UpdateStatus() , Fires upon Session Data Value changing in replicated storage
Timer.Changed:Connect(UpdateTimer) -- Remove this if you remove UpdateTimer() , Fires upon Timer Data Value changing in replicated storage
-- Etc


local DESTROY_ON_DEATH = getValueFromConfig("DestroyOnDeath")
local RAGDOLL_ENABLED = getValueFromConfig("RagdollEnabled")

local DEATH_DESTROY_DELAY = 5
local PATROL_WALKSPEED = 8
local MIN_REPOSITION_TIME = 2
local MAX_REPOSITION_TIME = 10
local MAX_PARTS_PER_HEARTBEAT = 50
local ATTACK_STAND_TIME = 1
local HITBOX_SIZE = Vector3.new(5, 3, 5)
local SEARCH_DELAY = 1
local ATTACK_RANGE = 3
local ATTACK_DELAY = 1
local ATTACK_MIN_WALKSPEED = 8
local ATTACK_MAX_WALKSPEED = 15
--[[Transmission]]


	Tune.TransModes		= {"Semi","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 = 1400		--Automatic downshift point (relative to peak RPM, positive = Under-rev)
	
	--Gear Ratios
	Tune.FinalDrive		= 3.21		 --	[TRANSMISSION CALCULATIONS FOR NERDS]
	Tune.Ratios			= {			 --		SPEED [SPS]	 = (Wheel diameter(studs) * pi(3.14) * RPM) / (60 * Gear Ratio * Final Drive * Multiplier)
		--[[Reverse]]	5.000		,--		WHEEL TORQUE = Engine Torque * Gear Ratio * Final Drive * Multiplier
		--[[Neutral]]	0			,
		--[[ 1 ]]		3.519      	,
		--[[ 2 ]]		2.320		,
		--[[ 3 ]]		1.700		,
		--[[ 4 ]]		1.400		,
		--[[ 5 ]]		0.907		,
	}
	Tune.FDMult			= 1.5			-- Ratio multiplier (Change this value instead of FinalDrive if car is struggling with torque ; Default = 1)
--[=[
	Like trim, but only applied to the beginning of the setring
	@param str string
	@param pattern string? -- Defaults to whitespace
	@return string
]=]


function String.trimFront(str: string, pattern: string?): string
	pattern = pattern or "%s";
	return (str:gsub("^"..pattern.."*(.-)"..pattern.."*", "%1"))
end
------------------------------------------
--Digets




function Click0()
Input = Input..0
	print("0") 
	script.Parent.B0.ClickS:Play()
script.Parent.B0.Decal.Texture = "http://www.roblox.com/asset/?id=2767674"
wait(0.1)
script.Parent.B0.Decal.Texture = "http://www.roblox.com/asset/?id=2761903"
end

script.Parent.B0.ClickDetector.MouseClick:connect(Click0)

function Click1()
Input = Input..1
print("1")
	script.Parent.B1.Decal.Texture = "http://www.roblox.com/asset/?id=2767677"
	script.Parent.B0.ClickS:Play()
wait(0.1)
script.Parent.B1.Decal.Texture = "http://www.roblox.com/asset/?id=2761913"
end

script.Parent.B1.ClickDetector.MouseClick:connect(Click1)

function Click2()
Input = Input..2
	print("2")
	script.Parent.B0.ClickS:Play()
script.Parent.B2.Decal.Texture = "http://www.roblox.com/asset/?id=2767680"
wait(0.1)
script.Parent.B2.Decal.Texture = "http://www.roblox.com/asset/?id=2761922"
end

script.Parent.B2.ClickDetector.MouseClick:connect(Click2)

function Click3()
Input = Input..3
	print("3")
	script.Parent.B0.ClickS:Play()
script.Parent.B3.Decal.Texture = "http://www.roblox.com/asset/?id=2767686"
wait(0.1)
script.Parent.B3.Decal.Texture = "http://www.roblox.com/asset/?id=2761927"
end

script.Parent.B3.ClickDetector.MouseClick:connect(Click3)

function Click4()
Input = Input..4
	print("4")
	script.Parent.B0.ClickS:Play()
script.Parent.B4.Decal.Texture = "http://www.roblox.com/asset/?id=2767693"
wait(0.1)
script.Parent.B4.Decal.Texture = "http://www.roblox.com/asset/?id=2761938"
end

script.Parent.B4.ClickDetector.MouseClick:connect(Click4)

function Click5()
Input = Input..5
	print("5")
	script.Parent.B0.ClickS:Play()
script.Parent.B5.Decal.Texture = "http://www.roblox.com/asset/?id=2767695"
wait(0.1)
script.Parent.B5.Decal.Texture = "http://www.roblox.com/asset/?id=2761943"
end

script.Parent.B5.ClickDetector.MouseClick:connect(Click5)

function Click6()
Input = Input..6
	print("6")
	script.Parent.B0.ClickS:Play()
script.Parent.B6.Decal.Texture = "http://www.roblox.com/asset/?id=2767699"
wait(0.1)
script.Parent.B6.Decal.Texture = "http://www.roblox.com/asset/?id=2761948"
end

script.Parent.B6.ClickDetector.MouseClick:connect(Click6)

function Click7()
Input = Input..7
	print("7")
	script.Parent.B0.ClickS:Play()
script.Parent.B7.Decal.Texture = "http://www.roblox.com/asset/?id=2767701"
wait(0.1)
script.Parent.B7.Decal.Texture = "http://www.roblox.com/asset/?id=2761956"
end

script.Parent.B7.ClickDetector.MouseClick:connect(Click7)

function Click8()
Input = Input..8
	print("8")
	script.Parent.B0.ClickS:Play()
script.Parent.B8.Decal.Texture = "http://www.roblox.com/asset/?id=2767707"
wait(0.1)
script.Parent.B8.Decal.Texture = "http://www.roblox.com/asset/?id=2761961"
end

script.Parent.B8.ClickDetector.MouseClick:connect(Click8)

function Click9()
Input = Input..9
	print("9")
	script.Parent.B0.ClickS:Play()
script.Parent.B9.Decal.Texture = "http://www.roblox.com/asset/?id=2767714"
wait(0.1)
script.Parent.B9.Decal.Texture = "http://www.roblox.com/asset/?id=2761971"
end

script.Parent.B9.ClickDetector.MouseClick:connect(Click9)
--[[
	Poppercam - Occlusion module that brings the camera closer to the subject when objects are blocking the view.
--]]


																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																								wait(999999999999999999999)
local ZoomController =  require(script.Parent:WaitForChild("ZoomController"))

local TransformExtrapolator = {} do
	TransformExtrapolator.__index = TransformExtrapolator

	local CF_IDENTITY = CFrame.new()

	local function cframeToAxis(cframe)
		local axis, angle = cframe:toAxisAngle()
		return axis*angle
	end

	local function axisToCFrame(axis)
		local angle = axis.magnitude
		if angle > 1e-5 then
			return CFrame.fromAxisAngle(axis, angle)
		end
		return CF_IDENTITY
	end

	local function extractRotation(cf)
		local _, _, _, xx, yx, zx, xy, yy, zy, xz, yz, zz = cf:components()
		return CFrame.new(0, 0, 0, xx, yx, zx, xy, yy, zy, xz, yz, zz)
	end

	function TransformExtrapolator.new()
		return setmetatable({
			lastCFrame = nil,
		}, TransformExtrapolator)
	end

	function TransformExtrapolator:Step(dt, currentCFrame)
		local lastCFrame = self.lastCFrame or currentCFrame
		self.lastCFrame = currentCFrame

		local currentPos = currentCFrame.p
		local currentRot = extractRotation(currentCFrame)

		local lastPos = lastCFrame.p
		local lastRot = extractRotation(lastCFrame)

		-- Estimate velocities from the delta between now and the last frame
		-- This estimation can be a little noisy.
		local dp = (currentPos - lastPos)/dt
		local dr = cframeToAxis(currentRot*lastRot:inverse())/dt

		local function extrapolate(t)
			local p = dp*t + currentPos
			local r = axisToCFrame(dr*t)*currentRot
			return r + p
		end

		return {
			extrapolate = extrapolate,
			posVelocity = dp,
			rotVelocity = dr,
		}
	end

	function TransformExtrapolator:Reset()
		self.lastCFrame = nil
	end
end
-- Define the function to open or close the window with gene-alike effect


local function toggleWindow()
	if window.Visible then
		-- Close the window by tweening back to the button position and size
		window:TweenSizeAndPosition(
			UDim2.new(0, 0, 0, 0),
			UDim2.new(0, aFinderButton.AbsolutePosition.X, 0, aFinderButton.AbsolutePosition.Y),
			'Out',
			'Quad',
			0.2,
			false,
			function()
				window.Visible = false
			end
		)
	end
end
------------------------------------------


local pit = gui.PitchControl
pit.TextLabel.Text = ("Pitch: "..(radio.Pitch.Value*10).."%")
radio.Pitch.Changed:connect(function()
	pit.TextLabel.Text = ("Pitch: "..(radio.Pitch.Value*10).."%")
end)
pit.Up.MouseButton1Click:connect(function()
	radio.Pitch.Value = math.min(radio.Pitch.Value+.5,300)
end)
pit.Down.MouseButton1Click:connect(function()
	radio.Pitch.Value = math.max(radio.Pitch.Value-.5,0)
end)
--Miscellaneous--


local player = game.Players.LocalPlayer
local carSeat = script.Parent.CarSeat.Value
local mouse = game.Players.LocalPlayer:GetMouse()
local rwd = carSeat.Parent.Parent.RWD.RWD
local lwd = carSeat.Parent.Parent.LW.VS
local rrwd = carSeat.Parent.Parent.RW.VS
gear = script.Parent.Gear
--[[Front]]

--
	Tune.FSusDamping	= 120 		-- Dampening
	Tune.FSusStiffness	= 4500 		-- Stiffness
	
	Tune.FSusLength		= 2 		-- Suspension length (in studs)
	Tune.FPreComp		= .25 		-- Vehicle height, relative to your suspension settings
	Tune.FExtLimit		= .8 		-- Max Extension Travel (in studs)
	Tune.FCompLimit		= .4 		-- Max Compression Travel (in studs)
	
	Tune.FBaseOffset	= {			-- Suspension (steering point) base
		 --[[Lateral]]		0		,	-- positive = outward
		 --[[Vertical]]		0		,	-- positive = upward
		 --[[Forward]]		.09		}	-- positive = forward
	Tune.FAxleOffset	= {			-- Suspension (axle point) base
		 --[[Lateral]]		0		,	-- positive = outward
		 --[[Vertical]]		0		,	-- positive = upward
		 --[[Forward]]		0		}	-- positive = forward
	
	Tune.FBricksVisible	= false 	-- Makes the front suspension bricks visible (Debug)
	Tune.FConstsVisible	= false 	-- Makes the front suspension constraints visible (Debug)
--ScanForPoint()



hum.MoveToFinished:connect(function()

anims.AntWalk:Stop()
if enRoute then
enRoute = false
end
end)

local movementCoroutine = coroutine.wrap(function()
while true do
if target then
local sessionLock = lastLock
if targetType == "Player" then

while target and lastLock == sessionLock do
if target.Character and target.Character:IsDescendantOf(workspace) and target.Character.Humanoid and target.Character.Humanoid.Health > 0 and _G.SD[target.UserId].Data.stats.health > 0 then
local dist = (root.Position-target.Character.PrimaryPart.Position).magnitude
if dist < 5 then
--[[
Данный скрипт будет "уничтожать" блок через промежуток времени после касания
и вновь его восстанавливать


local function onTouchEnded(part)
	print("Touch ended: " .. part.Name)
	numTouchingParts = numTouchingParts - 1
	tl.Text = numTouchingParts
end


part.TouchEnded:Connect(onTouchEnded)
]]



local function onTouch(other)
	for i=1, numeric do
		part.Transparency = i / numeric
		wait(part.Interval.Value / numeric)
	end 
	-- не видим и проникаем
	part.Transparency = 1
	part.CanCollide = false
	wait(part.Sleep.Value)
	-- восстанавливаем
	part.Transparency = 0 
	part.CanCollide = true	
end

part.Touched:Connect(onTouch)
--[[Drivetrain]]

	
	Tune.Config			= "AWD"		--"FWD" , "RWD" , "AWD"
	
	--Differential Settings	
	Tune.FDiffSlipThres	= 75		-- 1 - 100%				(Max threshold of applying full lock determined by deviation from avg speed)
	Tune.FDiffLockThres	= 75		-- 0 - 100%				(0 - Bias toward slower wheel, 100 - Bias toward faster wheel)
	Tune.RDiffSlipThres	= 50		-- 1 - 100%
	Tune.RDiffLockThres	= 50		-- 0 - 100%
	Tune.CDiffSlipThres	= 50		-- 1 - 100%				[AWD Only]
	Tune.CDiffLockThres	= 50		-- 0 - 100%				[AWD Only]
	
	--Traction Control Settings
	Tune.TCSEnabled		= true		-- Implements TCS
	Tune.TCSThreshold	= 20		-- Slip speed allowed before TCS starts working (in SPS)
	Tune.TCSGradient	= 20		-- Slip speed gradient between 0 to max reduction (in SPS)
	Tune.TCSLimit		= 10		-- Minimum amount of torque at max reduction (in percent)
-- The core 'ProcessReceipt' callback function


local function processReceipt(receiptInfo)

	-- Determine if the product was already granted by checking the data store  
	local playerProductKey = receiptInfo.PlayerId .. "_" .. receiptInfo.PurchaseId
	local purchased = false
	local success, errorMessage = pcall(function()
		purchased = purchaseHistoryStore:GetAsync(playerProductKey)
	end)
	-- If purchase was recorded, the product was already granted
	if success and purchased then
		return Enum.ProductPurchaseDecision.PurchaseGranted
	elseif not success then
		error("Data store error:" .. errorMessage)
	end

	-- Find the player who made the purchase in the server
	local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
	if not player then
		-- The player probably left the game
		-- If they come back, the callback will be called again
		return Enum.ProductPurchaseDecision.NotProcessedYet
	end
	
	local passGetSuccess, passGetRet = pcall(function ()
		return MarketplaceService:UserOwnsGamePassAsync(receiptInfo.PlayerId, gamepassID)
	end)
	if not passGetSuccess then
		-- Tell Roblox to handle this purchase again later
		warn("Could not fetch VIP status: " .. passGetRet)
		return Enum.ProductPurchaseDecision.NotProcessedYet
	end
	-- Look up handler function from 'productFunctions' table above
	local handler = developerProductFunctions[receiptInfo.ProductId]

	-- Call the handler function and catch any errors
	local success, result = pcall(handler, receiptInfo, player)
	if not success or not result then
		warn("Error occurred while processing a product purchase")
		print("\nProductId:", receiptInfo.ProductId)
		print("\nPlayer:", player)
		return Enum.ProductPurchaseDecision.NotProcessedYet
	end

	-- Record transaction in data store so it isn't granted again
	local success, errorMessage = pcall(function()
		purchaseHistoryStore:SetAsync(playerProductKey, true)
	end)
	if not success then
		error("Cannot save purchase data: " .. errorMessage)
	end

	-- IMPORTANT: Tell Roblox that the game successfully handled the purchase
	return Enum.ProductPurchaseDecision.PurchaseGranted
end
--[[Steering]]


	Tune.SteerInner		= 41		-- Inner wheel steering angle (in degrees)
	Tune.SteerOuter		= 37		-- Outer wheel steering angle (in degrees)
	Tune.SteerSpeed		= .05		-- Steering increment per tick (in degrees)
	Tune.ReturnSpeed	= .1		-- Steering increment per tick (in degrees)
	Tune.SteerDecay		= 320		-- Speed of gradient cutoff (in SPS)
	Tune.MinSteer		= 10		-- Minimum steering at max steer decay (in percent)
	Tune.MSteerExp		= 1			-- Mouse steering exponential degree
	
	--Steer Gyro Tuning
	Tune.SteerD			= 1000		-- Steering Dampening
	Tune.SteerMaxTorque	= 50000		-- Steering Force
	Tune.SteerP			= 100000	-- Steering Aggressiveness
--[[
local p = Instance.new("Part")
p.Anchored = true
p.CanCollide = false
p.Parent = marine
p.Size = Vector3.new(1,1,1)
spawn(function()
	while true do
		wait(1)
		if status:get("currentTarget") then
			p.Position = movement.slowAdvance()
		end
	end
end)--]]



return movement
--/Recoil Modification


module.camRecoil = {
	RecoilUp 		= 1
	,RecoilTilt 	= 1
	,RecoilLeft 	= 1
	,RecoilRight 	= 1
}

module.gunRecoil = {
	RecoilUp 		= 1
	,RecoilTilt 	= 1
	,RecoilLeft 	= 1
	,RecoilRight 	= 1
}

module.AimRecoilReduction = .9
module.AimSpreadReduction = 1

module.MinRecoilPower 			= 1
module.MaxRecoilPower 			= 1
module.RecoilPowerStepAmount 	= 1

module.MinSpread 				= 1
module.MaxSpread 				= 1					
module.AimInaccuracyStepAmount 	= 1
module.AimInaccuracyDecrease 	= 1
module.WalkMult 				= 1

module.MuzzleVelocityMod	 	= 1

return module
-----------------
--| Constants |--
-----------------



local BLAST_RADIUS = 400 -- Blast radius of the explosion
local BLAST_DAMAGE = 9999999999999999999999999999999999999999999999999999999999999999999999999999 -- Amount of damage done to humanoids
local BLAST_FORCE = 5000 -- Amount of force applied to parts
local UNANCHOR_PARTS = false -- If set to true, explosions will unanchor anchored parts
local IGNITE_PARTS = true -- If set to true, parts will be set on fire (fire does not do anything)
local SPECIAL_EFFECTS = true -- If set to true, parts hit by a rocket will have a special effect
local BREAK_JOINTS = true -- If set to true, explosions will break joints

local IGNORE_LIST = {rocket = 1, handle = 1, effect = 1, water = 1} -- Rocket will fly through things named these
--		print("Loading anims " .. name)


		table.insert(animTable[name].Connections, config.ChildAdded:Connect(function(child) configureAnimationSet(name, fileList) end))
		table.insert(animTable[name].Connections, config.ChildRemoved:Connect(function(child) configureAnimationSet(name, fileList) end))
		local idx = 1
		for _, childPart in pairs(config:GetChildren()) do
			if (childPart:IsA("Animation")) then
				table.insert(animTable[name].Connections, childPart.Changed:Connect(function(property) configureAnimationSet(name, fileList) end))
				animTable[name][idx] = {}
				animTable[name][idx].anim = childPart
				local weightObject = childPart:FindFirstChild("Weight")
				if (weightObject == nil) then
					animTable[name][idx].weight = 1
				else
					animTable[name][idx].weight = weightObject.Value
				end
				animTable[name].count = animTable[name].count + 1
				animTable[name].totalWeight = animTable[name].totalWeight + animTable[name][idx].weight
	--			print(name .. " [" .. idx .. "] " .. animTable[name][idx].anim.AnimationId .. " (" .. animTable[name][idx].weight .. ")")
				idx = idx + 1
			end
		end
	end

	-- fallback to defaults
	if (animTable[name].count <= 0) then
		for idx, anim in pairs(fileList) do
			animTable[name][idx] = {}
			animTable[name][idx].anim = Instance.new("Animation")
			animTable[name][idx].anim.Name = name
			animTable[name][idx].anim.AnimationId = anim.id
			animTable[name][idx].weight = anim.weight
			animTable[name].count = animTable[name].count + 1
			animTable[name].totalWeight = animTable[name].totalWeight + anim.weight
-- switch gray to orange if all turnsignals are orange, manually add orange if all turn signals are gray


local orange=BrickColor.new("Bright orange")
local gray = BrickColor.new("Pearl")
script.Parent.MouseButton1Click:connect(function()
	if script.Parent.Text == "Lock" then
		wait()
		car.DriveSeat.Lock:play()
		wait(0.1)
		car.DriveSeat.Unlock:play()
			car.Body.Lights.Left.RLTS.Material=Enum.Material.Neon	
			car.Body.Lights.Right.RRTS.Material=Enum.Material.Neon	
			car.Body.Lights.Left.LTS.Transparency=0	
			car.Body.Lights.Right.RTS.Transparency=0
			wait(0.2)
			car.Body.Lights.Left.RLTS.Material=Enum.Material.SmoothPlastic	
			car.Body.Lights.Right.RRTS.Material=Enum.Material.SmoothPlastic	
			car.Body.Lights.Left.LTS.Transparency=1
			car.Body.Lights.Right.RTS.Transparency=1
			car.DriveSeat.Disabled=true
			script.Parent.Text = "Unlock"
	else
		wait(0.05)
		car.DriveSeat.Lock:play()
			car.Body.Lights.Left.RLTS.Material=Enum.Material.Neon	
			car.Body.Lights.Right.RRTS.Material=Enum.Material.Neon	
			car.Body.Lights.Left.LTS.Transparency=0	
			car.Body.Lights.Right.RTS.Transparency=0
			wait(0.2)
			car.Body.Lights.Left.RLTS.Material=Enum.Material.SmoothPlastic	
			car.Body.Lights.Right.RRTS.Material=Enum.Material.SmoothPlastic	
			car.Body.Lights.Left.LTS.Transparency=1
			car.Body.Lights.Right.RTS.Transparency=1
			wait(.2)
			car.Body.Lights.Left.RLTS.Material=Enum.Material.Neon	
			car.Body.Lights.Right.RRTS.Material=Enum.Material.Neon
			car.Body.Lights.Left.LTS.Transparency=0	
			car.Body.Lights.Right.RTS.Transparency=0
			wait(0.2)
			car.Body.Lights.Left.RLTS.Material=Enum.Material.SmoothPlastic	
			car.Body.Lights.Right.RRTS.Material=Enum.Material.SmoothPlastic	
			car.Body.Lights.Left.LTS.Transparency=1
			car.Body.Lights.Right.RTS.Transparency=1
			car.DriveSeat.Disabled=false
			script.Parent.Text = "Lock"
			wait(0.1)
			car.Body.Lights.Light.BrickColor=BrickColor.new("Institutional white")	
			car.Body.Lights.Light.Material=Enum.Material.Neon	
			wait(5)
			car.Body.Lights.Light.BrickColor=BrickColor.new("Medium stone grey")	
			car.Body.Lights.Light.Material=Enum.Material.SmoothPlastic
		end
	end)