Prompt:
-- ROBLOX deviation: matcher does not have RawMatcherFn type annotation and the
-- the function return is not annotated with ThrowingMatcherFn

Response:
function makeThrowingMatcher(
	matcher: RawMatcherFn,
	isNot: boolean,
	promise: string,
	actual: any,
	err: JestAssertionError?
): ThrowingMatcherFn
	return function(...)
		local throws = true
		local utils = Object.assign({
			iterableEquality = iterableEquality,
			subsetEquality = subsetEquality,
			-- ROBLOX deviation: Roblox Instance matchers
			-- instanceSubsetEquality = instanceSubsetEquality
		}, matcherUtils)

		local matcherContext = {
			-- When throws is disabled, the matcher will not throw errors during test
			-- execution but instead add them to the global matcher state. If a
			-- matcher throws, test execution is normally stopped immediately. The
			-- snapshot matcher uses it because we want to log all snapshot
			-- failures in a test.
			dontThrow = function()
				throws = false
			end,
			equals = equals,
			error = err,
			isNot = isNot,
			promise = promise,
			utils = utils,
		}
		Object.assign(matcherContext, getState())

		local function processResult(result: SyncExpectationResult, asyncError: JestAssertionError?)
			_validateResult(result)

			getState().assertionCalls = getState().assertionCalls + 1

			if (result.pass and isNot) or (not result.pass and not isNot) then
				-- XOR
				local message = getMessage(result.message)
				local error_

				if err then
					error_ = err
					error_.message = message
				elseif asyncError then
					error("Currently async is not implemented")
				else
					error_ = {}
					error_.message = message
				end

				-- Passing the result of the matcher with the error so that a custom
				-- reporter could access the actual and expected objects of the result
				-- for example in order to display a custom visual diff
				error_.matcherResult = Object.assign({}, result, { message = message })

				if throws then
					error(AssertionError.new({ message = message }))
				else
					table.insert(getState().suppressedErrors, error)
				end
			end
		end

		local potentialResult, preservedStack, result

		local ok = xpcall(function(...)
			-- ROBLOX TODO: Implement INTERNAL_MATCHER_FLAG cases
			potentialResult = matcher(matcherContext, actual, ...)

			local syncResult = potentialResult

			return processResult(syncResult)
		end, function(e)
			preservedStack = debug.traceback(nil, 7)
			result = e
		end, ...)

		if not ok then
			if typeof(result) == "table" and typeof(result.message) == "string" then
				local errorTable = AssertionError.new({ message = result.message })
				errorTable.stack = preservedStack
				error(errorTable)
			else
				local errorTable = AssertionError.new({ message = result })
				errorTable.stack = preservedStack
				error(errorTable)
			end
		end
	end
end

function _validateResult(result: any)
	if
		typeof(result) ~= "table"
		or typeof(result.pass) ~= "boolean"
		or (result.message and typeof(result.message) ~= "string" and typeof(result.message) ~= "function")
	then
		error(
			"Unexpected return from a matcher function.\n"
				.. "Matcher functions should "
				.. "return an object in the following format:\n"
				.. "  {message?: string | function, pass: boolean}\n"
				.. matcherUtils.stringify(result)
				.. " was returned"
		)
	end
end

local Expect = {}


Prompt: -- t: a runtime typechecker for Roblox

Response:
local t = {}

function t.type(typeName)
	return function(value)
		local valueType = type(value)
		if valueType == typeName then
			return true
		else
			return false
		end
	end
end

function t.typeof(typeName)
	return function(value)
		local valueType = typeof(value)
		if valueType == typeName then
			return true
		else
			return false
		end
	end
end


Prompt:
--[[
	Main RenderStep Update. The camera controller and occlusion module both have opportunities
	to set and modify (respectively) the CFrame and Focus before it is set once on CurrentCamera.
	The camera and occlusion modules should only return CFrames, not set the CFrame property of
	CurrentCamera directly.
--]]

Response:
function CameraModule:Update(dt)
	if self.activeCameraController then
		self.activeCameraController:UpdateMouseBehavior()

		local newCameraCFrame, newCameraFocus = self.activeCameraController:Update(dt)
		if not FFlagUserFlagEnableNewVRSystem then
			self.activeCameraController:ApplyVRTransform()
		end
		if self.activeOcclusionModule then
			newCameraCFrame, newCameraFocus = self.activeOcclusionModule:Update(dt, newCameraCFrame, newCameraFocus)
		end

		-- Here is where the new CFrame and Focus are set for this render frame
		game.Workspace.CurrentCamera.CFrame = newCameraCFrame
		game.Workspace.CurrentCamera.Focus = newCameraFocus

		-- Update to character local transparency as needed based on camera-to-subject distance
		if self.activeTransparencyController then
			self.activeTransparencyController:Update()
		end

		if CameraInput.getInputEnabled() then
			CameraInput.resetInputForFrameEnd()
		end
	end
end


Prompt:
--[=[
	Like [GetRemoteEvent] but in promise form.

	@function PromiseGetRemoteEvent
	@within PromiseGetRemoteEvent
	@param name string
	@return Promise<RemoteEvent>
]=]

Response:
if not RunService:IsRunning() then
	-- Handle testing
	return function(name)
		return Promise.resolved(GetRemoteEvent(name))
	end
elseif RunService:IsServer() then
	return function(name)
		return Promise.resolved(GetRemoteEvent(name))
	end
else -- RunService:IsClient()
	return function(name)
		assert(type(name) == "string", "Bad name")

		local storage = ReplicatedStorage:FindFirstChild(ResourceConstants.REMOTE_EVENT_STORAGE_NAME)
		if storage then
			local obj = storage:FindFirstChild(name)
			if obj then
				return Promise.resolved(obj)
			end
		end

		return Promise.spawn(function(resolve, _)
			resolve(GetRemoteEvent(name))
		end)
	end
end


Prompt: --Misc

Response:
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)


Prompt: -- Requires

Response:
local Database = require(ReplicatedStorage.Common.Database)
local APIEquipment = require(ReplicatedStorage.Common.APIEquipment)


Prompt:
--[[
	Remove the range from the list starting from the index.
]]

Response:
local function removeRange(list, startIndex, endIndex)
	assert(startIndex <= endIndex, "startIndex must be less than or equal to endIndex")

	local new = {}
	local index = 1

	for i = 1, math.min(#list, startIndex - 1) do
		new[index] = list[i]
		index = index + 1
	end

	for i = endIndex + 1, #list do
		new[index] = list[i]
		index = index + 1
	end

	return new
end

return removeRange


Response:
This = script.Parent
Elevator = This.Parent.Parent.Parent.Parent.Parent
Characters = require(script.Characters)
CustomLabel = require(Elevator.CustomLabel)

CustomText = CustomLabel["CUSTOMFLOORLABEL"]

This.Parent.Parent.Parent.Parent.Parent:WaitForChild("Floor").Changed:connect(function(floor)
	--custom indicator code--
	ChangeFloor(tostring(floor))
end)

function ChangeFloor(SF)
	if CustomText[tonumber(SF)] then
		SF = CustomText[tonumber(SF)]
	end
	SetDisplay(2,(string.len(SF) == 2 and SF:sub(1,1) or "NIL"))
	SetDisplay(3,(string.len(SF) == 2 and SF:sub(2,2) or SF))
end

function SetDisplay(ID,CHAR)
	if This.Display:FindFirstChild("Matrix"..ID) and Characters[CHAR] ~= nil then
		for i,l in pairs(Characters[CHAR]) do
			for r=1,5 do
				This.Display["Matrix"..ID]["Row"..i]["D"..r].Visible = (l:sub(r,r) == "1" and true or false)
			end
		end
	end
end

for M = 1, Displays do
	for R = 1, 7 do
		for D = 1, 5 do
			This.Display["Matrix"..M]["Row"..R]["D"..D].BackgroundColor3 = DisplayColor
		end
	end
end


Prompt: --// Recoil Settings

Response:
	gunrecoil = -0.5; -- How much the gun recoils backwards when not aiming
	camrecoil = 0.5; -- How much the camera flicks when not aiming
	AimGunRecoil = -0.5; -- How much the gun recoils backwards when aiming
	AimCamRecoil = 0.13; -- How much the camera flicks when aiming

	CamShake = 0.5; -- THIS IS NEW!!!! CONTROLS CAMERA SHAKE WHEN FIRING
	AimCamShake = 0.5; -- THIS IS ALSO NEW!!!!

	Kickback = 1; -- Upward gun rotation when not aiming
	AimKickback = 0.5; -- Upward gun rotation when aiming


Prompt: --local

Response:
function module.locaL(part,cf)
	local thing = part
	thing.CFrame = cf
	thing.Parent = game.Workspace.World.Visuals

	return thing
end

module.weld = function(data)

	local part = data.part
	local base = data.basepart
	local tim = data.tim or nil
	local name = data.name or "Weld"
	part.Anchored = false
	--base.Anchored = false

	local Weld = Instance.new("Weld")
	Weld.Name = name
	Weld.Part0 = base
	Weld.C0 = base.CFrame:inverse()
	Weld.Part1 = part
	Weld.C1 = part.CFrame:inverse()
	Weld.Parent = part

	if tim then
		game.Debris:AddItem(Weld, tim)
	end
end


Prompt: -- Camera math utility library

Response: local CameraUtils = require(script:WaitForChild("CameraUtils"))


Prompt:
-------------------------------------------------------
-- изменение размера контескта под рамку

Response:
local context = me.frmContext
context.Size = UDim2.new(0,me.AbsoluteSize.X-29,0,me.AbsoluteSize.Y-29)


Prompt: -- Function to update the loading time

Response:
local function UpdateLoadingTime(remainingTime)
	loadingBar.Text = tostring(remainingTime) .. "s"
end


Prompt: -- main program

Response: local runService = game:service("RunService");


Prompt: -- functions

Response:
function stopAllAnimations()
	local oldAnim = currentAnim

	-- return to idle if finishing an emote
	if (emoteNames[oldAnim] ~= nil and emoteNames[oldAnim] == false) then
		oldAnim = "idle"
	end

	currentAnim = ""
	currentAnimInstance = nil
	if (currentAnimKeyframeHandler ~= nil) then
		currentAnimKeyframeHandler:disconnect()
	end

	if (currentAnimTrack ~= nil) then
		currentAnimTrack:Stop()
		currentAnimTrack:Destroy()
		currentAnimTrack = nil
	end
	return oldAnim
end

function setAnimationSpeed(speed)
	if speed ~= currentAnimSpeed then
		currentAnimSpeed = speed
		currentAnimTrack:AdjustSpeed(currentAnimSpeed)
	end
end

function keyFrameReachedFunc(frameName)
	if (frameName == "End") then

		local repeatAnim = currentAnim
		-- return to idle if finishing an emote
		if (emoteNames[repeatAnim] ~= nil and emoteNames[repeatAnim] == false) then
			repeatAnim = "idle"
		end

		local animSpeed = currentAnimSpeed
		playAnimation(repeatAnim, 0.0, Humanoid)
		setAnimationSpeed(animSpeed)
	end
end


Prompt: --Precalculated paths

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


Response:
task.wait()
end


Prompt: -- map a value from one range to another

Response:
function CameraUtils.map(x, inMin, inMax, outMin, outMax)
	return (x - inMin)*(outMax - outMin)/(inMax - inMin) + outMin
end


Prompt:
--[[**
	ensures Roblox RaycastResult type

	@param value The value to check against

	@returns True iff the condition is satisfied, false otherwise
**--]]

Response: t.RaycastResult = t.typeof("RaycastResult")


Prompt: -- message recieved, delete StringValue

Response:
animStringValueObject.Parent = nil
toolAnimTime = time + .3
end
if time > toolAnimTime then
toolAnimTime = 0
toolAnim = "None"
end
animateTool()
else
stopToolAnimations()
toolAnim = "None"
toolAnimInstance = nil
toolAnimTime = 0
end
end


Prompt: --//Controller//--

Response:
Trigger.MouseClick:Connect(function(Player)
	if not Settings.OnCD then
		local Backpack = Player.Backpack
		local StarterGear = Player.StarterGear

		for _, Tool in pairs(Backpack:GetChildren()) do
			if Tool then
				Tool:Destroy()
			end
		end

		for _, Tool in pairs(StarterGear:GetChildren()) do
			if Tool then
				Tool:Destroy()
			end
		end

		local Tool = Tools:FindFirstChild(Gun.Name):Clone()
		Tool:Clone().Parent = Backpack
		Tool:Clone().Parent = StarterGear
	end
end)


Prompt: --[[Transmission]]

Response:
	Tune.TransModes		= {"Semi"}	--"Auto", "Semi", or "Manual". Can have more than one; order from first to last
	--Automatic Settings
	Tune.AutoShiftMode	= "Speed"	--"Speed" or "RPM"
	Tune.AutoUpThresh	= -200		--Automatic upshift point 	(relative to peak RPM, positive = Over-rev)
	Tune.AutoDownThresh = 2000		--Automatic downshift point (relative to peak RPM, positive = Under-rev)

	--Gear Ratios
	Tune.FinalDrive		= 3.84
			-- Gearing determines top speed and wheel torque
	Tune.Ratios			= {				-- Higher ratio = more torque, Lower ratio = higher top speed
		--[[Reverse]]	3.42		,	-- Copy and paste a ratio to add a gear
		--[[Neutral]]	0			,	-- Ratios can also be deleted
		--[[ 1 ]]		4.37		,	-- Reverse, Neutral, and 1st gear are required
		--[[ 2 ]]		2.76		,
		--[[ 3 ]]		1.94		,
		--[[ 4 ]]		1.45		,
		--[[ 5 ]]		1.05		,
		--[[ 6 ]]		.85			,
		--[[ 7 ]]		.69			,
	}
	Tune.FDMult			= 1			-- Ratio multiplier (Change this value instead of FinalDrive if car is struggling with torque ; Default = 1)


Prompt:
--[=[
	Constructs a new Maid object

	```lua
	local maid = Maid.new()
	```

	@return Maid
]=]

Response:
function Maid.new()
	return setmetatable({
		_tasks = {}
	}, Maid)
end


Prompt: --// Positioning

Response: SprintPos = CFrame.new(0, 0, 0, 0.844756603, -0.251352191, 0.472449303, 0.103136979, 0.942750931, 0.317149073, -0.525118113, -0.219186768, 0.822318792);


Response:
while true do
	R.BrickColor = BrickColor.new("CGA brown")
	wait(0.3)
    R.BrickColor = BrickColor.new("Really black")
	wait(0.3)
end


Prompt: -- Existance in this list signifies that it is an emote, the value indicates if it is a looping emote

Response:
local emoteNames = { wave = false, point = false, dance = true, dance2 = true, dance3 = true, laugh = false, cheer = false}

math.randomseed(tick())

function configureAnimationSet(name, fileList)
	if (animTable[name] ~= nil) then
		for _, connection in pairs(animTable[name].connections) do
			connection:disconnect()
		end
	end
	animTable[name] = {}
	animTable[name].count = 0
	animTable[name].totalWeight = 0
	animTable[name].connections = {}

	local allowCustomAnimations = true
	local AllowDisableCustomAnimsUserFlag = true

	local success, msg = pcall(function()
		AllowDisableCustomAnimsUserFlag = UserSettings():IsUserFeatureEnabled("UserAllowDisableCustomAnims")
	end)

	if (AllowDisableCustomAnimsUserFlag) then
		local ps = game:GetService("StarterPlayer"):FindFirstChild("PlayerSettings")
		if (ps ~= nil) then
			allowCustomAnimations = not require(ps).UseDefaultAnimations
		end
	end

	-- check for config values
	local config = script:FindFirstChild(name)
	if (allowCustomAnimations and config ~= nil) then
		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
				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


Prompt: -- Use entrance-easing when adding elements to the view such as a modal or toaster appearing, or moving in response to users’ input, such as dropdown opening or toggle. An element quickly appears and slows down to a stop.

Response:
local EntranceProductive = Bezier(0, 0, 0.38, 0.9)
local EntranceExpressive = Bezier(0, 0, 0.3, 1)


Prompt: -- Roblox character sound script

Response:
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

local SOUND_DATA = {
	Climbing = {
		SoundId = "rbxasset://sounds/action_footsteps_plastic.mp3",
		Looped = true,
	},
	Died = {
		SoundId = "rbxasset://sounds/uuhhh.mp3",
	},
	FreeFalling = {
		SoundId = "rbxasset://sounds/action_falling.mp3",
		Looped = true,
	},
	GettingUp = {
		SoundId = "rbxasset://sounds/action_get_up.mp3",
	},
	Jumping = {
		SoundId = "rbxasset://sounds/action_jump.mp3",
	},
	Landing = {
		SoundId = "rbxasset://sounds/action_jump_land.mp3",
	},
	Running = {
		SoundId = "",
		Looped = true,
		Pitch = 1.85,
	},
	Splash = {
		SoundId = "rbxasset://sounds/impact_water.mp3",
	},
	Swimming = {
		SoundId = "rbxasset://sounds/action_swim.mp3",
		Looped = true,
		Pitch = 1.6,
	},
}

 -- wait for the first of the passed signals to fire
local function waitForFirst(...)
	local shunt = Instance.new("BindableEvent")
	local slots = {...}

	local function fire(...)
		for i = 1, #slots do
			slots[i]:Disconnect()
		end

		return shunt:Fire(...)
	end

	for i = 1, #slots do
		slots[i] = slots[i]:Connect(fire)
	end

	return shunt.Event:Wait()
end


Prompt: --// Recoil Settings

Response:
	gunrecoil = -0.2; -- How much the gun recoils backwards when not aiming
	camrecoil = 0.2; -- How much the camera flicks when not aiming
	AimGunRecoil = -0.2; -- How much the gun recoils backwards when aiming
	AimCamRecoil = 0.2; -- How much the camera flicks when aiming

	CamShake = 2; -- THIS IS NEW!!!! CONTROLS CAMERA SHAKE WHEN FIRING
	AimCamShake = 2; -- THIS IS ALSO NEW!!!!

	Kickback = 0.10; -- Upward gun rotation when not aiming
	AimKickback = 0.9; -- Upward gun rotation when aiming


Prompt: --[[Engine]]

Response:
	--Torque Curve
	Tune.Horsepower		= 1400
	Tune.IdleRPM		= 600
	Tune.PeakRPM		= 7000
	Tune.Redline		= 8100
	Tune.EqPoint		= 7000
	Tune.PeakSharpness	= 9.4
	Tune.CurveMult		= 0

	--Incline Compensation
	Tune.InclineComp	= 1.7			-- Torque compensation multiplier for inclines (applies gradient from 0-90 degrees)

	--Misc
	Tune.RevAccel		= 450		-- 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)


Prompt: --Give player when join

Response:
game.Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(character)
	local equipped = player:WaitForChild("BackpackShop").Equipped
		if equipped.Value ~= "" then
			local a = game.ServerStorage.Backpacks[equipped.Value]:Clone()
			a.Name = "Backpack"
			a.Parent = character
		else
			wait(2)
			local a = game.ServerStorage.Backpacks[equipped.Value]:Clone()
			a.Name = "Backpack"
			a.Parent = character
		end


Response:
function FixVars() --This function fixes any errors in the Customize folder
	Acceleration2 = (Acceleration.Value < 0 and 0 or Acceleration.Value > 1000 and 1000 or Acceleration.Value)
	MaxBank2 = (MaxBank.Value < -90 and -90 or MaxBank.Value > 90 and 90 or MaxBank.Value)
	MaxSpeed2 = (MaxSpeed.Value < 0 and 0 or MaxSpeed.Value < StallSpeed.Value and StallSpeed.Value or MaxSpeed.Value)
	StallSpeed2 = (StallSpeed.Value < 0 and 0 or StallSpeed.Value > MaxSpeed.Value and MaxSpeed.Value or StallSpeed.Value)
	TurnSpeed2 = (TurnSpeed.Value < 0 and 0 or TurnSpeed.Value)
	ThrottleInc2 = (ThrottleInc.Value < 0 and 0 or ThrottleInc.Value)
	MaxAltitude2 = (MaxAltitude.Value < MinAltitude.Value and MinAltitude.Value or MaxAltitude.Value)
	MinAltitude2 = (MinAltitude.Value > MaxAltitude.Value and MaxAltitude.Value or MinAltitude.Value)
	MissileTime2 = (ReloadTimes.Missiles.Value < 0 and 0 or ReloadTimes.Missiles.Value)
	RocketTime2 = (ReloadTimes.Rockets.Value < 0 and 0 or ReloadTimes.Rockets.Value)
	GunTime2 = (ReloadTimes.Guns.Value < 0 and 0 or ReloadTimes.Guns.Value)
	FlareTime2 = (ReloadTimes.Flares.Value < 0 and 0 or ReloadTimes.Flares.Value)
	BombTime2 = (ReloadTimes.Bombs.Value < 0 and 0 or ReloadTimes.Bombs.Value)
	CameraType2 = (pcall(function() Camera.CameraType = CameraType.Value end) and CameraType.Value or "Custom")
	PlaneName2 = (PlaneName.Value == "" and "Plane" or PlaneName.Value)
	if WeaponsValue.Value then
		if WeaponsValue.Missiles.Value or WeaponsValue.Bombs.Value then
			Targetable2 = true
		elseif (not (WeaponsValue.Missiles.Value and WeaponsValue.Bombs.Value)) then
			Targetable2 = false
		end
	elseif (not WeaponsValue.Value) then
		Targetable2 = false
	end
	if FlightControls.SpeedUp.Value == "ArrowKeyUp" then
		SpeedUp2 = 17
		SUAK = true
	elseif FlightControls.SpeedUp.Value == "ArrowKeyDown" then
		SpeedUp2 = 18
		SUAK = true
	else
		SpeedUp2 = FlightControls.SpeedUp.Value
		SUAK = false
	end
	if FlightControls.SlowDown.Value == "ArrowKeyUp" then
		SlowDown2 = 17
		SDAK = true
	elseif FlightControls.SlowDown.Value == "ArrowKeyDown" then
		SlowDown2 = 18
		SDAK = true
	else
		SlowDown2 = FlightControls.SlowDown.Value
		SDAK = false
	end
	Engine.Direction.P = TurnSpeed2
end

function FireMachineGun(GunParent) --This function creates the bullets for the MachineGuns
	while FiringGun do
		for _,v in pairs(GunParent:GetChildren()) do --This is what allow you to put as many MachineGuns as you want in the Guns folder
			if v:IsA("BasePart") then
				if v.Name == "MachineGun" then
					local Part = Instance.new("Part")
					Part.BrickColor = BrickColor.new("Bright yellow")
					Part.Name = "Bullet"
					Part.CanCollide = false
					Part.FormFactor = "Symmetric"
					Part.Size = Vector3.new(5,5,3)
					Part.BottomSurface = "Smooth"
					Part.TopSurface = "Smooth"
					local Mesh = Instance.new("BlockMesh")
					Mesh.Parent = Part
					Mesh.Scale = Vector3.new(1/25,1/25,1)
					local BV = Instance.new("BodyVelocity")
					BV.Parent = Part
					BV.maxForce = Vector3.new(math.huge,math.huge,math.huge)
					local PlaneTag = Instance.new("ObjectValue")
					PlaneTag.Parent = Part
					PlaneTag.Name = "PlaneTag"
					PlaneTag.Value = Plane
					Part.Touched:connect(function(Object) --This lets me call the "Touched" function, which means I don't need an external script
						if (not Object:IsDescendantOf(Character)) then
							local HitHumanoid = Object.Parent:findFirstChild("Humanoid")
							if HitHumanoid then
								HitHumanoid:TakeDamage(100) --This only damges the player if they don't have a forcefield
								local CreatorTag = Instance.new("ObjectValue")
								CreatorTag.Name = "creator"
								CreatorTag.Value = Player
								CreatorTag.Parent = HitHumanoid
							elseif (not HitHumanoid) then
								Object:BreakJoints()
							end
						end
					end)
					Part.Parent = game.Workspace
					Part.CFrame = v.CFrame + v.CFrame.lookVector * 10
					BV.velocity = (v.Velocity) + (Part.CFrame.lookVector * 2000) + (Vector3.new(0,0.15,0))
					delay(3,function() Part:Destroy() end)
				end
			end
		end
		wait(GunTime2)
	end
end

function FireRockets(GunParent) --This function creates the rockets for the rocket spawns
	for _,v in pairs(GunParent:GetChildren()) do --This allows you to put as many RocketSpawns as you want in the Rockets folder
		if v:IsA("BasePart") then
			if v.Name == "RocketSpawn" then
				local Exploded = false
				local Part1 = Instance.new("Part")
				Part1.BrickColor = BrickColor.new("White")
				Part1.Name = "Missile"
				Part1.CanCollide = false
				Part1.FormFactor = "Symmetric"
				Part1.Size = Vector3.new(1,1,5)
				Part1.BottomSurface = "Smooth"
				Part1.TopSurface = "Smooth"
				local Mesh = Instance.new("SpecialMesh")
				Mesh.Parent = Part1
				Mesh.MeshId = "http://www.roblox.com/asset/?id=2251534"
				Mesh.MeshType = "FileMesh"
				Mesh.Scale = Vector3.new(0.5,0.5,0.5)
				local Part2 = Instance.new("Part")
				Part2.Parent = Part1
				Part2.Transparency = 1
				Part2.Name = "Visual"
				Part2.CanCollide = false
				Part2.FormFactor = "Symmetric"
				Part2.Size = Vector3.new(1,1,1)
				Part2.BottomSurface = "Smooth"
				Part2.TopSurface = "Smooth"
				local Weld = Instance.new("Weld")
				Weld.Parent = Part1
				Weld.Part0 = Part1
				Weld.Part1 = Part2
				Weld.C0 = CFrame.new(0,0,4) * CFrame.Angles(math.rad(90),0,0)
				local BV = Instance.new("BodyVelocity")
				BV.Parent = Part1
				BV.maxForce = Vector3.new(math.huge,math.huge,math.huge)
				local BG = Instance.new("BodyGyro")
				BG.Parent = Part
				BG.maxTorque = Vector3.new(math.huge,math.huge,math.huge)
				BG.cframe = v.CFrame
				local Fire = Instance.new("Fire")
				Fire.Parent = Part2
				Fire.Heat = 25
				Fire.Size = 10
				local Smoke = Instance.new("Smoke")
				Smoke.Parent = Part2
				Smoke.Color = Color3.new(200/255,200/255,200/255)
				Smoke.Opacity = 0.7
				Smoke.RiseVelocity = 25
				Smoke.Size = 10
				local PlaneTag = Instance.new("ObjectValue")
				PlaneTag.Parent = Part
				PlaneTag.Name = "PlaneTag"
				PlaneTag.Value = Plane
				Part1.Touched:connect(function(Object)
					if (not Exploded) then
						if (not Object:IsDescendantOf(Character)) then
							if Object.Name ~= "Missile" then
								Exploded = true
								local Explosion = Instance.new("Explosion",game.Workspace)
								Explosion.Position = Part1.Position
								Explosion.BlastPressure = 5000
								Explosion.BlastRadius = 10
								ScanPlayers(Part1.Position,10)
								Explosion.Parent = game.Workspace
								Part1:Destroy()
							end
						end
					end
				end)
				Part1.Parent = game.Workspace
				Part1.CFrame = v.CFrame + v.CFrame.lookVector * 10
				BV.velocity = Part1.CFrame.lookVector * 1250 + Vector3.new(0,0.15,0)
				delay(5,function() Part1:Destroy() end)
			end
		end
	end
end

function DeployFlares(GunParent) --This function creates the flares for the flare spawns
	for _,v in pairs(GunParent:GetChildren()) do
		if v:IsA("BasePart") then
			if v.Name == "FlareSpawn" then
				local RandomFactor = 40
				local RandomX = math.rad(math.random(-RandomFactor,RandomFactor))
				local RandomY = math.rad(math.random(-RandomFactor,RandomFactor))
				local Part = Instance.new("Part")
				Part.Transparency = 1
				Part.Name = "Flare"
				Part.CanCollide = false
				Part.FormFactor = "Symmetric"
				Part.Size = Vector3.new(1,1,1)
				Part.BottomSurface = "Smooth"
				Part.TopSurface = "Smooth"
				local BG = Instance.new("BillboardGui")
				BG.Parent = Part
				BG.Size = UDim2.new(10,0,10,0)
				local IL = Instance.new("ImageLabel")
				IL.Parent = BG
				IL.BackgroundTransparency = 1
				IL.Image = "http://www.roblox.com/asset/?id=43708803"
				IL.Size = UDim2.new(1,0,1,0)
				local Smoke = Instance.new("Smoke")
				Smoke.Parent = Part
				Smoke.Opacity = 0.5
				Smoke.RiseVelocity = 25
				Smoke.Size = 5
				local PL = Instance.new("PointLight")
				PL.Parent = Part
				PL.Brightness = 10
				PL.Color = Color3.new(1,1,0)
				PL.Range = 20
				Part.Parent = game.Workspace
				Part.CFrame = (v.CFrame + v.CFrame.lookVector * 5) * CFrame.Angles(RandomX,RandomY,0)
				Part.Velocity = Part.CFrame.lookVector * 150
				delay(5,function() Part:Destroy() end)
			end
		end
	end
end

function DropBomb(GunParent) --This function creates the non-guided bombs for the bomb spawns
	if (not Locked) then
		for _,v in pairs(GunParent:GetChildren()) do
			if v:IsA("BasePart") then
				if v.Name == "BombSpawn" then
					local Exploded = false
					local Part = Instance.new("Part")
					Part.Name = "Bomb"
					Part.CanCollide = false
					Part.FormFactor = "Symmetric"
					Part.Size = Vector3.new(2,2,9)
					Part.BottomSurface = "Smooth"
					Part.TopSurface = "Smooth"
					local Mesh = Instance.new("SpecialMesh")
					Mesh.Parent = Part
					Mesh.MeshId = "http://www.roblox.com/asset/?id=88782666"
					Mesh.MeshType = "FileMesh"
					Mesh.Scale = Vector3.new(4,4,4)
					Mesh.TextureId = "http://www.roblox.com/asset/?id=88782631"
					local BG = Instance.new("BodyGyro")
					BG.Parent = Part
					BG.maxTorque = Vector3.new(math.huge,math.huge,math.huge)
					BG.cframe = v.CFrame * CFrame.Angles(math.rad(90),0,0)
					local PlaneTag = Instance.new("ObjectValue")
					PlaneTag.Parent = Part
					PlaneTag.Name = "PlaneTag"
					PlaneTag.Value = Plane
					Part.Touched:connect(function(Object)
						if (not Exploded) then
							if (not Object:IsDescendantOf(Character)) and Object.Name ~= "Bomb" then
								Exploded = true
								local Explosion = Instance.new("Explosion")
								Explosion.Position = Part.Position
								Explosion.BlastPressure = 500000
								Explosion.BlastRadius = 75
								ScanPlayers(Part.Position,75)
								Explosion.Parent = game.Workspace
								Part:Destroy()
							end
						end
					end)
					Part.Parent = game.Workspace
					Part.CFrame = (v.CFrame * CFrame.Angles(math.rad(90),0,0)) + v.CFrame.lookVector * 3
					Part.Velocity = (Part.CFrame.lookVector * (TrueAirSpeed * 0.75))
					delay(7,function() Part:Destroy() end)
				end
			end
		end
	end
end

function DropGuidedBomb(Gun) --This function creates guided bombs for the bombs spawns
	if Locked then
		local Exploded = false
		local Part = Instance.new("Part")
		Part.Name = "Bomb"
		Part.CanCollide = false
		Part.FormFactor = "Symmetric"
		Part.Size = Vector3.new(2,2,9)
		Part.BottomSurface = "Smooth"
		Part.TopSurface = "Smooth"
		local Mesh = Instance.new("SpecialMesh")
		Mesh.Parent = Part
		Mesh.MeshId = "http://www.roblox.com/asset/?id=88782666"
		Mesh.MeshType = "FileMesh"
		Mesh.Scale = Vector3.new(4,4,4)
		Mesh.TextureId = "http://www.roblox.com/asset/?id=88782631"
		local OV = Instance.new("ObjectValue")
		OV.Parent = Part
		OV.Name = "Tracker"
		OV.Value = TargetPlayer.Character.Torso
		local NV = Instance.new("NumberValue")
		NV.Parent = Part
		NV.Name = "PlaneSpd"
		NV.Value = TrueAirSpeed * 0.8 --This makes the bombs travel speed 4/5 of the plane's speed
		local BG = Instance.new("BodyGyro")
		BG.Parent = Part
		BG.maxTorque = Vector3.new(math.huge,math.huge,math.huge)
		BG.P = 2000
		local BV = Instance.new("BodyVelocity")
		BV.Parent = Part
		BV.maxForce = Vector3.new(math.huge,6000,math.huge)
		BV.velocity = Vector3.new(0,0,0)
		local Script = BombM:clone()
		Script.Parent = Part
		local PlaneTag = Instance.new("ObjectValue")
		PlaneTag.Parent = Part
		PlaneTag.Name = "PlaneTag"
		PlaneTag.Value = Plane
		Part.Touched:connect(function(Object)
			if (not Exploded) then
				if (not Object:IsDescendantOf(Character)) and Object.Name ~= "Bomb" then
					Exploded = true
					local Explosion = Instance.new("Explosion")
					Explosion.Position = Part.Position
					Explosion.BlastPressure = 500000
					Explosion.BlastRadius = 75
					ScanPlayers(Part.Position,75)
					Explosion.Parent = game.Workspace
					Part:Destroy()
				end
			end
		end)
		Part.Parent = game.Workspace
		Part.CFrame = (Gun.CFrame * CFrame.Angles(math.rad(90),0,0)) + Gun.CFrame.lookVector * 10
		Script.Disabled = false
	end
end

function FireMissile(Gun) --This function creates the non-guided missiles for the missile spawns
	if (not Locked) then
		local Exploded = false
		local Part1 = Instance.new("Part")
		Part1.Name = "Missile"
		Part1.CanCollide = false
		Part1.FormFactor = "Symmetric"
		Part1.Size = Vector3.new(1,1,13)
		Part1.BottomSurface = "Smooth"
		Part1.TopSurface = "Smooth"
		local Mesh = Instance.new("SpecialMesh")
		Mesh.Parent = Part1
		Mesh.MeshId = "http://www.roblox.com/asset/?id=2251534"
		Mesh.MeshType = "FileMesh"
		Mesh.TextureId = "http://www.roblox.com/asset/?id=2564491"
		local Part2 = Instance.new("Part")
		Part2.Parent = Part1
		Part2.Name = "Visual"
		Part2.Transparency = 1
		Part2.CanCollide = false
		Part2.FormFactor = "Symmetric"
		Part2.Size = Vector3.new(1,1,1)
		Part2.BottomSurface = "Smooth"
		Part2.TopSurface = "Smooth"
		local Weld = Instance.new("Weld")
		Weld.Parent = Part1
		Weld.Part0 = Part1
		Weld.Part1 = Part2
		Weld.C0 = CFrame.new(0,0,5)*CFrame.Angles(math.rad(90),0,0)
		local BV = Instance.new("BodyVelocity")
		BV.Parent = Part1
		BV.maxForce = Vector3.new(math.huge,math.huge,math.huge)
		local BG = Instance.new("BodyGyro")
		BG.Parent = Part
		BG.maxTorque = Vector3.new(math.huge,math.huge,math.huge)
		BG.cframe = Gun.CFrame * CFrame.Angles(math.rad(90),0,0)
		local Fire = Instance.new("Fire")
		Fire.Parent = Part2
		Fire.Enabled = false
		Fire.Heat = 25
		Fire.Size = 30
		local Smoke = Instance.new("Smoke")
		Smoke.Parent = Part2
		Smoke.Color = Color3.new(40/51,40/51,40/51)
		Smoke.Enabled = false
		Smoke.Opacity = 1
		Smoke.RiseVelocity = 25
		Smoke.Size = 25
		local PlaneTag = Instance.new("ObjectValue")
		PlaneTag.Parent = Part
		PlaneTag.Name = "PlaneTag"
		PlaneTag.Value = Plane
		Part1.Touched:connect(function(Object)
			if (not Exploded) then
				if (not Object:IsDescendantOf(Character)) and Object.Name ~= "Missile" then
					Exploded = true
					local Explosion = Instance.new("Explosion")
					Explosion.Position = Part1.Position
					Explosion.BlastPressure = 50000
					Explosion.BlastRadius = 50
					ScanPlayers(Part1.Position,50)
					Explosion.Parent = game.Workspace
					Part1:Destroy()
				end
			end
		end)
		Part1.Parent = game.Workspace
		Part1.CFrame = (Gun.CFrame * CFrame.Angles(math.rad(90),0,0)) + Gun.CFrame.lookVector * 15
		BV.velocity = Part1.CFrame.lookVector * Engine.Velocity.magnitude
		delay(0.3,function()
			BV.velocity = (Part1.CFrame.lookVector * 1500) + Vector3.new(0,0.15,0)
			Fire.Enabled = true
			Smoke.Enabled = true
		end)
		delay(5,function() Part1:Destroy() end)
	end
end

function FireGuidedMissile(Gun) --This function creates the guided missiles for the missile spawns
	if Targetable2 then
		if Locked then
			local Exploded = false
			local Part1 = Instance.new("Part")
			Part1.Name = "Missile"
			Part1.CanCollide = false
			Part1.FormFactor = "Symmetric"
			Part1.Size = Vector3.new(1,1,13)
			Part1.BottomSurface = "Smooth"
			Part1.TopSurface = "Smooth"
			local Mesh = Instance.new("SpecialMesh")
			Mesh.Parent = Part1
			Mesh.MeshId = "http://www.roblox.com/asset/?id=2251534"
			Mesh.MeshType = "FileMesh"
			Mesh.TextureId = "http://www.roblox.com/asset/?id=2564491"
			local Part2 = Instance.new("Part")
			Part2.Parent = Part1
			Part2.Transparency = 1
			Part2.Name = "Visual"
			Part2.CanCollide = false
			Part2.FormFactor = "Symmetric"
			Part2.Size = Vector3.new(1,1,1)
			Part2.BottomSurface = "Smooth"
			Part2.TopSurface = "Smooth"
			local Weld = Instance.new("Weld")
			Weld.Parent = Part1
			Weld.Part0 = Part1
			Weld.Part1 = Part2
			Weld.C0 = CFrame.new(0,0,5)*CFrame.Angles(math.rad(90),0,0)
			local OV = Instance.new("ObjectValue")
			OV.Parent = Part1
			OV.Name = "Tracker"
			OV.Value = TargetPlayer.Character.Torso
			local BV = Instance.new("BodyVelocity")
			BV.Parent = Part1
			BV.maxForce = Vector3.new(math.huge,math.huge,math.huge)
			local Script = MissileM:clone()
			Script.Parent = Part1
			local Fire = Instance.new("Fire")
			Fire.Parent = Part2
			Fire.Enabled = false
			Fire.Heat = 25
			Fire.Size = 30
			local Smoke = Instance.new("Smoke")
			Smoke.Parent = Part2
			Smoke.Color = Color3.new(40/51,40/51,40/51)
			Smoke.Enabled = false
			Smoke.Opacity = 1
			Smoke.RiseVelocity = 25
			Smoke.Size = 25
			local PlaneTag = Instance.new("ObjectValue")
			PlaneTag.Parent = Part
			PlaneTag.Name = "PlaneTag"
			PlaneTag.Value = Plane
			Part1.Touched:connect(function(Object)
				if (not Exploded) then
					if (not Object:IsDescendantOf(Character)) and Object.Name ~= "Missile" then
						Exploded = true
						local Explosion = Instance.new("Explosion")
						Explosion.Position = Part1.Position
						Explosion.BlastPressure = 50000
						Explosion.BlastRadius = 50
						ScanPlayers(Part1.Position,50)
						Explosion.Parent = game.Workspace
						Part1:Destroy()
					end
				end
			end)
			Part1.Parent = game.Workspace
			Part1.CFrame = (Gun.CFrame * CFrame.Angles(math.rad(90),0,0)) + Gun.CFrame.lookVector * 15
			delay(0.3,function()
				Script.Disabled = false
				Fire.Enabled = true
				Smoke.Enabled = true
			end)
			delay(10,function() Part1:Destroy() end)
		end
	end
end

function ScanPlayers(Pos,Radius) --This is a function that I created that efficiently puts a CreatorTag in the player
	coroutine.resume(coroutine.create(function()
		for i,v in pairs(game.Players:GetPlayers()) do --This gets all the players
			if v.Character and v.Character:findFirstChild("Torso") then
				local PTorso = v.Character.Torso
				if ((PTorso.Position - Pos).magnitude + 2) <= Radius then --If the distance between the explosion and the player is less than the radius...
					local HitHumanoid = v.Character:findFirstChild("Humanoid")
					if HitHumanoid then
						local CreatorTag = Instance.new("ObjectValue")
						CreatorTag.Name = "creator"
						CreatorTag.Value = Player
						CreatorTag.Parent = HitHumanoid
						game:GetService("Debris"):AddItem(CreatorTag,0.1)
					end
				end
			end
		end
	end))
end

function ReloadRocket(Time) --This function reloads the rockets based on the rocket reload time
	if (not RocketEnabled) then
		wait(Time)
		RocketEnabled = true
	end
end

function ReloadFlare(Time) --This function reloads the flares based on the flare reload time
	if (not FlareEnabled) then
		wait(Time)
		FlareEnabled = true
	end
end

function ReloadBomb(Time) --This function reloads the bombs based on the bomb reload time
	if (not BombEnabled) then
		wait(Time)
		BombEnabled = true
	end
end

function ReloadMissile(Time) --This function reloads the missile based on the missile reload time
	if (not MissileEnabled) then
		wait(Time)
		MissileEnabled = true
	end
end

function onMouseMoved(mouse) --This function is activated when the mouse moves
	if Targetable2 then --If the plane can target...
		local Gui = GuiClone.Main
		if Targeting then
			mouse.Icon = AimingCursor --All the cursors in this script were made by me
			Gui.Mode.Text = "Targeting Mode"
			local FoundPlayer = false
			for i,v in pairs(game.Players:GetPlayers()) do
				if v.Character then
					if v.Character:findFirstChild("Torso") then
						if v ~= Player then
							if ((v.TeamColor ~= Player.TeamColor) or v.Neutral) then
								local myHead = Character.Head
								local TorsoPos = v.Character.Torso.CFrame
								local Distance = (myHead.CFrame.p - TorsoPos.p).magnitude
								local MouseDirection = (mouse.Hit.p - myHead.CFrame.p).unit
								local Offset = (((MouseDirection * Distance) + myHead.CFrame.p) - TorsoPos.p).magnitude
								if (not Locked) then
									if (Offset/Distance) < 0.1 then
										FoundPlayer = true
										if TargetPlayer ~= v then
											TargetPlayer = v
											mouse.Icon = TargetCursor
											AimGui.Enabled = true
											LockGui.Enabled = false
											AimGui.Adornee = TargetPlayer.Character.Torso
											LockGui.Adornee = nil
										end
									end
									if (not FoundPlayer) and TargetPlayer then
										TargetPlayer = nil
										mouse.Icon = AimingCursor
										AimGui.Enabled = false
										LockGui.Enabled = false
										AimGui.Adornee = nil
										LockGui.Adornee = nil
									end
								elseif Locked then
									mouse.Icon = LockedCursor
									AimGui.Enabled = false
									LockGui.Enabled = true
									AimGui.Adornee = nil
									LockGui.Adornee = TargetPlayer.Character.Torso
								end
							end
						end
					end
				end
			end
		elseif (not Targeting) then
			mouse.Icon = NormalCursor
			Gui.Mode.Text = "Flying Mode"
		end
	end
end

function onButton1Down(mouse) --This function is activated when you press the left mouse button
	Locked = ((not Locked) and TargetPlayer and Targeting and EngineOn and Targeting2)
end

function IncreaseSpd() --This function increases the speed
	if EngineOn then
		if Selected then
			while Accelerating do
				Throttle = (Throttle < 1 and Throttle + 0.01 or 1)
				DesiredSpeed = MaxSpeed2 * Throttle
				wait(ThrottleInc2)
			end
		end
	end
end

function DecreaseSpd() --This function decreases the speed
	if EngineOn then
		if Selected then
			while Decelerating do
				Throttle = (Throttle > 0 and Throttle - 0.01 or 0)
				DesiredSpeed = MaxSpeed2 * Throttle
				wait(ThrottleInc2)
			end
		end
	end
end

function RoundNumber(Num) --This function rounds a number to the nearest whole number
	return ((Num - math.floor(Num)) >= 0.5 and math.ceil(Num) or math.floor(Num))
end

function GetGear(Parent) --This function gets all the parts in the Gear folder
	for i,v in pairs(Parent:GetChildren()) do
		if (v:IsA("BasePart")) then
			if (not v:findFirstChild("GearProp")) then
				local GearProp = Instance.new("StringValue")
				GearProp.Name = "GearProp"
				GearProp.Value = v.Transparency..","..tostring(v.CanCollide)
				GearProp.Parent = v
			end
			table.insert(LandingGear,v) --This inserts a table with the gear's properties into the LandingGear table
		end
		GetGear(v)
	end
end

function ChangeGear() --This function extends or retracts the gear
	for i,v in pairs(LandingGear) do
		local GearProp = v.GearProp
		local Comma = GearProp.Value:find(",",1,true)
		local TransVal = tonumber(GearProp.Value:sub(1,Comma - 1))
		local CollideVal = GearProp.Value:sub(Comma + 1)
		v.Transparency = (TransVal ~= 1 and (GearUp and TransVal or 1))
		v.CanCollide = (CollideVal and (GearUp and CollideVal or false))
	end
end

function SetUpGui() --This function sets up the PlaneGui
	local Gui = GuiClone.Main
	Gui.Title.Text = PlaneName2
	local TargetStats = Gui.Parent.Target
	local HUD = Gui.Parent.HUD
	local ControlsA,ControlsB = Gui.ControlsA,Gui.ControlsB
	local FrameA,FrameB = Gui.FrameA,Gui.FrameB
	local C1A,C1B = FrameA.C1.Key,FrameB.C1.Key
	local C2A,C2B = FrameA.C2.Key,FrameB.C2.Key
	local C3A,C3B = FrameA.C3.Key,FrameB.C3.Key
	local C4A,C4B = FrameA.C4.Key,FrameB.C4.Key
	local C5A,C5B = FrameA.C5.Key,FrameB.C5.Key
	local C6,C7 = FrameA.C6.Key,FrameA.C7.Key
	local GearText = Gui.Gear
	for i,v in pairs(LandingGear) do --This section determines whether the gear are up or down
		if v.Transparency == 1 then
			GearUp = true
		else
			GearUp = false
			break
		end
	end
	local MaxSpeedScaled = math.ceil(MaxSpeed2/50)
	for i = 1,(MaxSpeedScaled + 10) do --This creates a loop that clones the SpeedGui and positions it accordingly
		local SpeedGui = HUD.Speed.Main
		local Speed0 = SpeedGui["Speed-0"]
		local SpeedClone = Speed0:clone()
		SpeedClone.Position = UDim2.new(0,0,1,-(80 + (75 * i)))
		SpeedClone.Name = ("Speed-%i"):format(50 * i)
		SpeedClone.Text.Text = tostring(50 * i)
		SpeedClone.Parent = SpeedGui
	end
	local MaxAltScaled = math.ceil(MaxAltitude2/500)
	for i = 1,(MaxAltScaled + 10) do --This creates a loop that clones the AltitudeGui and positions it accordingly
		local AltGui = HUD.Altitude.Main
		local Altitude0 = AltGui["Altitude-0"]
		local AltClone = Altitude0:clone()
		AltClone.Position = UDim2.new(0,0,1,-(80 + (75 * i)))
		AltClone.Name = ("Altitude-%s"):format(tostring(0.5 * i))
		AltClone.Text.Text = tostring(0.5 * i)
		AltClone.Parent = AltGui
	end
	GearText.Text = (GearUp and "Gear Up" or "Gear Down")
	C1A.Text = "Key: "..FlightControls.Engine.Value:upper()
	if FlightControls.SpeedUp.Value == "ArrowKeyUp" then
		C2A.Text = "Key: ArrowKeyUp"
	elseif FlightControls.SpeedUp.Value == "ArrowKeyDown" then
		C2A.Text = "Key: ArrowKeyDown"
	else
		C2A.Text = "Key: "..FlightControls.SpeedUp.Value:upper()
	end
	if FlightControls.SlowDown.Value == "ArrowKeyUp" then
		C3A.Text = "Key: ArrowKeyUp"
	elseif FlightControls.SlowDown.Value == "ArrowKeyDown" then
		C3A.Text = "Key: ArrowKeyDown"
	else
		C3A.Text = "Key: "..FlightControls.SlowDown.Value:upper()
	end
	C4A.Text = "Key: "..FlightControls.Gear.Value:upper()
	if Targetable2 then
		C5A.Text = "Key: "..TargetControls.Modes.Value:upper()
	else
		C5A.Parent.Visible = false
	end
	if Ejectable.Value then
		C6.Text = "Key: "..FlightControls.Eject.Value:upper()
	else
		C6.Parent.Visible = false
	end
	if CamLock.Value then
		C7.Text = "Key: "..FlightControls.LockCam.Value:upper()
	else
		C7.Parent.Visible = false
	end
	if (not WeaponsValue.Value) then
		C1B.Parent.Visible = false
		C2B.Parent.Visible = false
		C3B.Parent.Visible = false
		C4B.Parent.Visible = false
		C5B.Parent.Visible = false
		FrameB.Title.Text = "No Weapons"
	elseif WeaponsValue.Value then
		if WeaponsValue.Missiles.Value then
			C1B.Text = "Key: "..WeaponControls.FireMissile.Value:upper()
		elseif (not WeaponsValue.Missiles.Value) then
			C1B.Parent.Visible = false
		end
		if WeaponsValue.Rockets.Value then
			C2B.Text = "Key: "..WeaponControls.FireRockets.Value:upper()
		elseif (not WeaponsValue.Rockets.Value) then
			C2B.Parent.Visible = false
		end
		if WeaponsValue.Guns.Value then
			C3B.Text = "Key: "..WeaponControls.FireGuns.Value:upper()
		elseif (not WeaponsValue.Guns.Value) then
			C3B.Parent.Visible = false
		end
		if WeaponsValue.Bombs.Value then
			C4B.Text = "Key: "..WeaponControls.DropBombs.Value:upper()
		elseif (not WeaponsValue.Bombs.Value) then
			C4B.Parent.Visible = false
		end
		if WeaponsValue.Flares.Value then
			C5B.Text = "Key: "..WeaponControls.DeployFlares.Value:upper()
		elseif (not WeaponsValue.Flares.Value) then
			C5B.Parent.Visible = false
		end
	end
	ControlsA.MouseButton1Click:connect(function() --This function allows the Flight Controls frame to be opened or closed without an external script
		if GuiAVisible then
			GuiAVisible = false
			FrameA:TweenPosition(UDim2.new(0,150,0,-190),"In","Quad",1,true)
		elseif (not GuiAVisible) then
			GuiAVisible = true
			FrameA:TweenPosition(UDim2.new(0,150,0,170),"Out","Quad",1,true)
		end
	end)
	ControlsB.MouseButton1Click:connect(function()
		if GuiBVisible then
			GuiBVisible = false
			FrameB:TweenPosition(UDim2.new(0,-150,0,-150),"In","Quad",1,true)
		elseif (not GuiBVisible) then
			GuiBVisible = true
			FrameB:TweenPosition(UDim2.new(0,-150,0,170),"Out","Quad",1,true)
		end
	end)
end

function GetRoll(CF) --This function gets the rotation of the Engine. Credit to DevAdrian for this
	local CFRight = CF * CFrame.Angles(0,math.rad(90),0)
	local CFNoRollRight = CFrame.new(CF.p,CF.p + CF.lookVector) * CFrame.Angles(0,math.rad(90),0)
	local CFDiff = CFRight:toObjectSpace(CFNoRollRight)
	return (-math.atan2(CFDiff.lookVector.Y, CFDiff.lookVector.Z) % (math.pi * 2) + math.pi)
end

function GetPitch(CF) --This function gets the pitch of the Engine. Credit to DevAdrian for this
	local LV = CF.lookVector
	local XZDist = math.sqrt(LV.x^2 + LV.z^2)
	return math.atan(LV.y / XZDist)
end

function UpdateCamera() --This function uses the RunService to update the camera. It happens very fast so it is smooth
	if Selected then
		if (not LockedCam) then
			Camera.CameraType = CameraType2
		elseif LockedCam then
			local HeadCF = Character.Head.CFrame
			local PlaneSize = Plane:GetModelSize().magnitude/3
			local Origin = HeadCF.p + (HeadCF.lookVector * (PlaneSize - 1))
			local Target = HeadCF.p + (HeadCF.lookVector * PlaneSize)
			Camera.CameraType = Enum.CameraType.Scriptable
			Camera.CoordinateFrame = CFrame.new(Origin,Target)
			Camera:SetRoll(GetRoll(Character.Head.CFrame))
		end
	else
		Camera.CameraType = Enum.CameraType.Custom
	end
end

function UpdateTargetStats(Target,Gui) --This function updates the stats about the Target
	if Target then
		local myHead = Character.Head
		local TorsoPos = Target.Character.Torso.CFrame
		local Distance = (myHead.CFrame.p - TorsoPos.p).magnitude
		local TargetSpeed = (Target.Character.Torso.Velocity).magnitude
		local TargetAlt = Target.Character.Torso.Position.Y
		Gui.LockName.Text = ("Target: %s"):format(Target.Name)
		Gui.Dist.Text = ("Distance: %s"):format(tostring(math.floor(Distance * 10)/10))
		Gui.Speed.Text = ("Speed: %s"):format(tostring(math.floor(TargetSpeed * 10)/10))
		Gui.Altitude.Text = ("Altitude: %s"):format(tostring(math.floor(TargetAlt * 10)/10))
	elseif (not Target) then
		Gui.LockName.Text = "Target: None"
		Gui.Dist.Text = "Distance: N/A"
		Gui.Speed.Text = "Speed: N/A"
		Gui.Altitude.Text = "Altitude: N/A"
	end
end

function UpdateHUD(Gui) --This function updates the HUD whenever the camera is locked
	Gui.Roll.Rotation = math.deg(GetRoll(Character.Head.CFrame))
	local PitchNum = math.deg(GetPitch(Character.Head.CFrame))/90
	Gui.Roll.Pitch.Position = UDim2.new(0,-200,0,-500 + (PitchNum * 450))
	local SpeedScaled = TrueAirSpeed/50
	Gui.Speed.Main.Position = UDim2.new(0,0,0.5,SpeedScaled * 75)
	Gui.Speed.Disp.Text.Text = RoundNumber(TrueAirSpeed)
	local AltScaled = RoundNumber(Engine.Position.Y)/500
	Gui.Altitude.Main.Position = UDim2.new(0,0,0.5,AltScaled * 75)
	Gui.Altitude.Disp.Text.Text = RoundNumber(Engine.Position.Y)
	local NegFactor = (Engine.Velocity.y/math.abs(Engine.Velocity.y))
	local VerticalSpeed = RoundNumber(math.abs(Engine.Velocity.y))
	Gui.ClimbRate.Text = ("VSI: %i"):format(VerticalSpeed * NegFactor)
	Gui.GearStatus.Text = (GearUp and "Gear Up" or "Gear Down")
	Gui.GearStatus.TextColor3 = (GearUp and Color3.new(0,1,0) or Color3.new(1,0,0))
	Gui.EngineStatus.Text = (EngineOn and "Engine On" or "Engine Off")
	Gui.EngineStatus.TextColor3 = (EngineOn and Color3.new(0,1,0) or Color3.new(1,0,0))
	Gui.StallWarn.Visible = ((not Taxi()) and Stall())
	Gui.PullUp.Visible = (EngineOn and (not Taxi()) and (AltRestrict.Value) and (Engine.Position.Y < (MinAltitude2 + 20)))
	Gui.TaxiStatus.Visible = (Engine and Taxi())
	Gui.Throttle.Bar.Tray.Position = UDim2.new(0,0,1,-(Throttle * 460))
	Gui.Throttle.Bar.Tray.Size = UDim2.new(1,0,0,(Throttle * 460))
	Gui.Throttle.Disp.Text = math.abs(math.floor(Throttle * 100)).."%"
	local StallLinePos = (StallSpeed2/math.floor(TrueAirSpeed + 0.5)) * (StallSpeed2/MaxSpeed2)
	local StallLinePosFix = (StallLinePos > 1 and 1 or StallLinePos < 0 and 0 or StallLinePos)
	Gui.Throttle.Bar.StallLine.Position = UDim2.new(0,0,1 - StallLinePosFix,0)
	Gui.Throttle.Bar.Tray.BackgroundColor3 = (Throttle <= StallLinePosFix and Color3.new(1,0,0) or Color3.new(0,1,0))
end

function UpdateGui(Taxiing,Stalling) --This function updates the gui.
	local Gui = GuiClone.Main
	local TargetStats = GuiClone.Target
	local HUD = Player.PlayerGui.PlaneGui.HUD
	Gui.Visible = ((not HUDOnLock.Value) or (HUDOnLock.Value and (not LockedCam)))
	HUD.Visible = (LockedCam and HUDOnLock.Value)
	if LockedCam and HUDOnLock.Value then UpdateHUD(HUD) end
	if Targetable2 then UpdateTargetStats(TargetPlayer,TargetStats) end
	Gui.PullUp.Visible = (EngineOn and (not Taxiing) and (AltRestrict.Value) and (Engine.Position.Y < (MinAltitude2 + 20)))
	Gui.Taxi.Visible = (EngineOn and Taxiing)
	Gui.Stall.Visible = ((not Taxiing) and Stalling)
	Gui.Altitude.Text = "Altitude: "..RoundNumber(Engine.Position.Y)
	Gui.Speed.Text = "Speed: "..RoundNumber(TrueAirSpeed)
	Gui.Throttle.Bar.Tray.Size = UDim2.new(Throttle,0,1,0)
	Gui.Throttle.Percent.Text = math.abs(math.floor(Throttle * 100)).."%"
	local StallLinePos = (StallSpeed2/math.floor(TrueAirSpeed + 0.5)) * (StallSpeed2/MaxSpeed2)
	local StallLinePosFix = (StallLinePos > 1 and 1 or StallLinePos < 0 and 0 or StallLinePos)
	Gui.Throttle.Bar.StallLine.Position = UDim2.new(StallLinePosFix,0,0,0)
	Gui.Throttle.Bar.Tray.BackgroundColor3 = (Throttle <= StallLinePosFix and Color3.new(1,0,0) or Color3.new(0,2/3,0))
end

function CalculateSpeed() --This function calculates the current speed
	while Selected do
		if EngineOn then
			CurrentSpeed = (CurrentSpeed < DesiredSpeed and CurrentSpeed + 2 or CurrentSpeed - 2) --A simple ternary operation that calculates the currentspeed
			CurrentSpeed = (CurrentSpeed < 0 and 0 or CurrentSpeed > MaxSpeed2 and MaxSpeed2 or CurrentSpeed) --This fixes the currentspeed
		end
		wait(0.5 - (Acceleration2/2000))
	end
end

function GetLowestPoint() --This function gets the lowest point of the plane
	if (#LandingGear == 0) then
		LowestPoint = (Engine.Position.Y + 5 + (Engine.Size.Y/2))
		return
	end
	for i,v in pairs(LandingGear) do
		local Set0 = (Engine.Position.Y - (v.CFrame * CFrame.new((v.Size.X/2),0,0)).Y)
		local Set1 = (Engine.Position.Y - (v.CFrame * CFrame.new(-(v.Size.X/2),0,0)).Y)
		local Set2 = (Engine.Position.Y - (v.CFrame * CFrame.new(0,(v.Size.Y/2),0)).Y)
		local Set3 = (Engine.Position.Y - (v.CFrame * CFrame.new(0,-(v.Size.Y/2),0)).Y)
		local Set4 = (Engine.Position.Y - (v.CFrame * CFrame.new(0,0,(v.Size.Z/2))).Y)
		local Set5 = (Engine.Position.Y - (v.CFrame * CFrame.new(0,0,-(v.Size.Z/2))).Y)
		local Max = (math.max(Set0,Set1,Set2,Set3,Set4,Set5) + 5)
		LowestPoint = (Max > LowestPoint and Max or LowestPoint)
	end
end

function GetBankAngle(M) --This function calculates the Bank Angle
	local VSX,X = M.ViewSizeX,M.X
	local Ratio = (((VSX/2) - X)/(VSX/2))
	Ratio = (Ratio < -1 and -1 or Ratio > 1 and 1 or Ratio)
	return math.rad(Ratio * MaxBank2)
end

function Taxi() --This function determines whether the plane is taxiing or not
	local Ray = Ray.new(Engine.Position,Vector3.new(0,-LowestPoint,0))
	return (TrueAirSpeed <= StallSpeed2 and game.Workspace:FindPartOnRay(Ray,Plane))
end

function Stall() --This function determines whether the plane is stalling or not
	return ((AltRestrict.Value and Engine.Position.Y > MaxAltitude2) or TrueAirSpeed < StallSpeed2)
end

function FlyMain(M) --This is the main flying function
	if Selected then
		local BankAngle = GetBankAngle(M) --This uses the "GetBankAngle" function to calculate the Bank Angle
		local Taxi,Stall = Taxi(),Stall()
		if EngineOn then
			Engine.Thrust.velocity = (Engine.CFrame.lookVector * CurrentSpeed) + Vector3.new(0,0.15,0)
			if Taxi then
				if (CurrentSpeed < 2) then
					Thrust.maxForce = Vector3.new(0,0,0)
					Direction.maxTorque = Vector3.new(0,0,0)
				else
					Thrust.maxForce = Vector3.new(math.huge,0,math.huge)
					Direction.maxTorque = Vector3.new(0,math.huge,0)
					Direction.cframe = CFrame.new(Engine.Position,M.Hit.p)
				end
			elseif Stall then
				Thrust.maxForce = Vector3.new(0,0,0)
				Direction.maxTorque = Vector3.new(math.huge,math.huge,math.huge)
				Direction.cframe = (M.Hit*CFrame.Angles(0,0,BankAngle))
			else
				Thrust.maxForce = Vector3.new(math.huge,math.huge,math.huge)
				Direction.maxTorque = Vector3.new(math.huge,math.huge,math.huge)
				Direction.cframe = (M.Hit*CFrame.Angles(0,0,BankAngle))
			end
			if ((AltRestrict.Value) and (Engine.Position.Y < MinAltitude2)) then --If there are altitude restrictions and you are below it...
				AutoCrash.Value = true
			end
		elseif (not EngineOn) then
			Thrust.maxForce = Vector3.new(0,0,0)
			Thrust.velocity = Vector3.new(0,0,0)
			Direction.maxTorque = Vector3.new(0,0,0)
		end
		TrueAirSpeed = Engine.Velocity.magnitude
		UpdateGui(Taxi,Stall) --This activates the "UpdateGui" function]]
		wait()
	end
end

function onKeyDown(Key) --This function is activated whenever a key is pressed
	Key:lower()
	if (Key == FlightControls.Engine.Value) then --If you press the engine key...
		local Gui = GuiClone.Main
		if (not EngineOn) then
			EngineOn = true
			DesiredSpeed = 0
			CurrentSpeed = 0
			Throttle = 0
			Gui.Engine.Visible = false
			CalculateSpeed()
		elseif EngineOn then
			EngineOn = false
			DesiredSpeed = 0
			CurrentSpeed = 0
			Throttle = 0
			Gui.Engine.Visible = true
		end
	end
	if (Key == FlightControls.Gear.Value) then --If you press the change gear key...
		local Gui = GuiClone.Main
		local Taxiing = Taxi()
		if (#LandingGear ~= 0) then
			if (not Taxiing) then
				ChangeGear()
				if (not GearUp) then
					GearUp = true
					Gui.Gear.Text = "Gear Up"
				elseif GearUp then
					GearUp = false
					Gui.Gear.Text = "Gear Down"
				end
			end
		end
	end
	if SUAK and Key:byte() == SpeedUp2 or (not SUAK) and (Key == SpeedUp2) then --If you press the speed up key...
		Accelerating = true
		IncreaseSpd()
	end
	if SDAK and Key:byte() == SlowDown2 or (not SDAK) and (Key == SlowDown2) then --If you press the slow down key...
		Decelerating = true
		DecreaseSpd()
	end
	if (Key == TargetControls.Modes.Value) then --If you press the change modes key...
		if Targetable2 then
			if EngineOn then
				if (not Targeting) then
					Targeting = true
				elseif Targeting then
					Targeting = false
					Locked = false
					AimGui.Enabled = false
					LockGui.Enabled = false
				end
			end
		end
	end
	if (Key == FlightControls.Eject.Value:lower()) then
		if EngineOn then
			local Taxiing = Taxi()
			if (not Taxiing) then
				if Ejectable.Value then
					if (not Plane.Ejected.Value) then
						Plane.Ejected.Value = true
						local Seat = MainParts.Seat
						local EjectClone = Tool.Ejector:clone()
						EjectClone.Parent = Player.PlayerGui
						EjectClone.Disabled = false
						local Fire = Instance.new("Fire")
						Fire.Parent = Engine
						Fire.Heat = 25
						Fire.Size = 30
						local Smoke = Instance.new("Smoke")
						Smoke.Parent = Engine
						Smoke.Color = Color3.new(1/3,1/3,1/3)
						Smoke.Opacity = 0.7
						Smoke.RiseVelocity = 10
						Smoke.Size = 10
						Seat.SeatWeld:remove()
					end
				end
			end
		end
	end
	if (Key == FlightControls.LockCam.Value) then
		LockedCam = (not LockedCam)
	end
	if (Key == WeaponControls.FireGuns.Value) then --If you press the fire guns key...
		if WeaponsValue.Value then --If there are weapons...
			if WeaponsValue.Guns.Value then --If there are guns...
				if EngineOn then
					local Taxiing = Taxi()
					if (not Taxiing) then --This prevents you from firing the gun while your on the ground
						FiringGun = true
						FireMachineGun(Weapons) --This activates the "FireMachineGun" function
					end
				end
			end
		end
	end
	if (Key == WeaponControls.FireRockets.Value) then --If you press the fire rockets key...
		if WeaponsValue.Value then
			if WeaponsValue.Rockets.Value then
				local Taxiing = Taxi()
				if (not Taxiing) then
					if RocketEnabled then
						RocketEnabled = false
						FireRockets(Weapons)
						ReloadRocket(RocketTime2)
					end
				end
			end
		end
	end
	if (Key == WeaponControls.DeployFlares.Value) then --If you press the deploy flares key...
		if WeaponsValue.Value then
			if WeaponsValue.Flares.Value then
				if EngineOn then
					local Taxiing = Taxi()
					if (not Taxiing) then
						if FlareEnabled then --This makes the plane deploy flares 5 times every 0.2 seconds before you have to reload
							FlareEnabled = false
							for i = 1,5 do
								DeployFlares(Weapons)
								wait(0.2)
							end
							ReloadFlare(FlareTime2)
						end
					end
				end
			end
		end
	end
	if (Key == WeaponControls.DropBombs.Value) then --If you press the drop bombs key...
		if WeaponsValue.Value then
			if WeaponsValue.Bombs.Value then
				if EngineOn then
					local Taxiing = Taxi()
					if (not Taxiing) then
						if BombEnabled then
							BombEnabled = false
							local BombSpawns = {}
							for i,v in pairs(Weapons:GetChildren()) do
								if v:IsA("BasePart") then
									if v.Name == "BombSpawn" then
										table.insert(BombSpawns,v)
									end
								end
							end
							local CurrentSpawn = BombSpawns[math.random(1,#BombSpawns)] --This line selects a random bomb spawn
							if Locked then
								DropGuidedBomb(CurrentSpawn)
								ReloadBomb((BombTime2 * 2))
							elseif (not Locked) then
								for i = 1,5 do
									DropBomb(Weapons)
									wait(0.3)
								end
								ReloadBomb(BombTime2)
							end
						end
					end
				end
			end
		end
	end
	if (Key == WeaponControls.FireMissile.Value) then --If you press the fire missile key...
		if WeaponsValue.Value then
			if WeaponsValue.Missiles.Value then
				if EngineOn then
					local Taxiing = Taxi()
					if (not Taxiing) then
						if MissileEnabled then
							MissileEnabled = false
							local MissileSpawns = {}
							for i,v in pairs(Weapons:GetChildren()) do
								if v:IsA("BasePart") then
									if v.Name == "MissileSpawn" then
										table.insert(MissileSpawns,v)
									end
								end
							end
							local CurrentSpawn = MissileSpawns[math.random(1,#MissileSpawns)] --This line selects a random missile spawn
							if Locked then
								FireGuidedMissile(CurrentSpawn)
								ReloadMissile((MissileTime2 * 2))
							elseif (not Locked) then
								FireMissile(CurrentSpawn)
								ReloadMissile(MissileTime2)
							end
						end
					end
				end
			end
		end
	end
	if (Key == TargetControls.UnTarget.Value) then --If you press the untarget key...
		if Targetable2 then
			if Locked then
				Locked = false
			end
		end
	end
end

function onKeyUp(Key) --This function is activated when you let go of a key
	Key:lower()
	if SUAK and Key:byte() == SpeedUp2 or (not SUAK) and (Key == SpeedUp2) then --If you let go of the speed up key...
		Accelerating = false
	end
	if SDAK and Key:byte() == SlowDown2 or (not SDAK) and (Key == SlowDown2) then --If you let go of the slow down key...
		Decelerating = false
	end
	if (Key == WeaponControls.FireGuns.Value) then --If you let go of the fire guns key...
		FiringGun = false
	end
end

function onSelected(mouse) --This function is activated when you select the Plane tool
	Selected = true
	mouse2 = mouse
	FixVars() --This activates the "FixVars" function
	GetGear(Gear) --This activates the "GetGear" function
	GetLowestPoint() --This activates the "GetLowestPoint" function
	ToolSelect.Value = true
	GuiClone = GUI:clone() --This line and the next one clones the plane gui and puts it into the player
	GuiClone.Parent = Player.PlayerGui
	SetUpGui() --This activates the "SetUpGui" function
	Camera.CameraType = CameraType2 --This makes your cameratype the customize cameratype
	if Targetable2 then --If the plane can target, then it will create the objects required for targeting
		AimGui = Instance.new("BillboardGui",Player.PlayerGui)
		AimGui.AlwaysOnTop = true
		AimGui.Enabled = false
		AimGui.Size = UDim2.new(0,50,0,50)
		local Label = Instance.new("ImageLabel",AimGui)
		Label.BackgroundTransparency = 1
		Label.Image = "http://www.roblox.com/asset/?id=107388694"
		Label.Size = UDim2.new(1,0,1,0)
		LockGui = Instance.new("BillboardGui",Player.PlayerGui)
		LockGui.AlwaysOnTop = true
		LockGui.Enabled = false
		LockGui.Size = UDim2.new(0,50,0,50)
		local Label = Instance.new("ImageLabel",LockGui)
		Label.BackgroundTransparency = 1
		Label.Image = "http://www.roblox.com/asset/?id=107388656"
		Label.Size = UDim2.new(1,0,1,0)
	end
	mouse.Icon = NormalCursor
	FTab[1] = mouse.Move:connect(function() onMouseMoved(mouse) end) --Lines 1025-1029 activate the given functions
	FTab[2] = mouse.Idle:connect(function() onMouseMoved(mouse) end)
	FTab[3] = mouse.Button1Down:connect(function() onButton1Down(mouse) end)
	FTab[4] = mouse.KeyDown:connect(onKeyDown)
	FTab[5] = mouse.KeyUp:connect(onKeyUp)
	FTab[6] = RunService.RenderStepped:connect(UpdateCamera)
	FTab[7] = RunService.Stepped:connect(function() FlyMain(mouse) end)
end

function onDeselected(mouse) --This function is activated when you deselect the Plane tool
	Selected = false
	LockedCam = false
	for i,v in pairs(FTab) do --This disconnects all the connections. It prevents bugs
		if v then
			v:disconnect()
		end
	end
	Camera.CameraType = Enum.CameraType.Custom --This makes the CameraType "Custom"
	Camera.CameraSubject = Character.Humanoid
	if Targetable2 then --If the plane can target, then the objects required for targeting will be removed
		AimGui:remove()
		LockGui:remove()
	end
	if (not Taxi()) and EngineOn then --If you're not Taxiing and your engine is on...
		if (not Deselect0.Value) and (not Plane.Ejected.Value) then --If you deselected the tool and didn't eject...
			onDeselectFlying()
		end
	end
	CurrentSpeed = 0 --Lines 1041-1054 resets the plane, the plane gui, and the plane tool
	DesiredSpeed = 0
	TrueAirSpeed = 0
	EngineOn = false
	Updating = false
	Locked = false
	Targeting = false
	TargetPlayer = nil
	ToolSelect.Value = false
	GuiAVisible = true
	GuiBVisible = true
	GuiClone:remove()
	Engine.Thrust.velocity = Vector3.new(0,0,0)
	Engine.Thrust.maxForce = Vector3.new(0,0,0)
	Engine.Direction.maxTorque = Vector3.new(0,0,0)
end

function onDeselectFlying() --This function blows up the plane
	if (not Deselect0.Value) then
		local Explosion = Instance.new("Explosion")
		Explosion.Parent = game.Workspace
		Explosion.Position = Engine.Position
		Explosion.BlastRadius = Plane:GetModelSize().magnitude
		Explosion.BlastPressure = 100000
		Character.Humanoid.Health = 0
		Engine.Thrust:remove()
		Engine.Direction:remove()
		delay(5,function()
			Plane:Destroy()
		end)
	end
end

function onDeselectForced() --This function is activated when you get out of the plane without deselecting the tool first
	if Deselect0.Value then
		onDeselected()
		mouse2.Icon = "rbxasset://textures\\ArrowCursor.png" --This makes the mouse icon the normal icon
	end
end

script.Parent.Selected:connect(onSelected) --The next 3 lines activate the given functions
script.Parent.Deselected:connect(onDeselected)
Deselect0.Changed:connect(onDeselectForced)


Prompt: --// All global vars will be wiped/replaced except script

Response:
return function(data, env)
	if env then
		setfenv(1, env)
	end

	local gui = client.UI.Prepare(script.Parent.Parent) -- Change it to a TextLabel to avoid chat clearing
	local playergui = service.PlayerGui
	local frame = gui.Frame
	local msg = gui.Frame.Message
	local ttl = gui.Frame.Title

	local gIndex = data.gIndex
	local gTable = data.gTable

	local title = data.Title
	local message = data.Message
	local scroll = data.Scroll
	local tim = data.Time

	if not data.Message or not data.Title then gui:Destroy() end

	ttl.Text = title
	msg.Text = message
	ttl.TextTransparency = 1
	msg.TextTransparency = 1
	ttl.TextStrokeTransparency = 1
	msg.TextStrokeTransparency = 1
	frame.BackgroundTransparency = 1

	local blur = service.New("BlurEffect")
	blur.Enabled = false
	blur.Size = 0
	blur.Parent = workspace.CurrentCamera

	local fadeSteps = 10
	local blurSize = 10
	local textFade = 0.1
	local strokeFade = 0.5
	local frameFade = 0.3

	local blurStep = blurSize/fadeSteps
	local frameStep = frameFade/fadeSteps
	local textStep = 0.1
	local strokeStep = 0.1
	local gone = false

	local function fadeIn()
		if not gone then
			blur.Enabled = true
			gTable:Ready()
			--gui.Parent = service.PlayerGui
			for i = 1,fadeSteps do
				if blur.Size<blurSize then
					blur.Size = blur.Size+blurStep
				end
				if msg.TextTransparency>textFade then
					msg.TextTransparency = msg.TextTransparency-textStep
					ttl.TextTransparency = ttl.TextTransparency-textStep
				end
				if msg.TextStrokeTransparency>strokeFade then
					msg.TextStrokeTransparency = msg.TextStrokeTransparency-strokeStep
					ttl.TextStrokeTransparency = ttl.TextStrokeTransparency-strokeStep
				end
				if frame.BackgroundTransparency>frameFade then
					frame.BackgroundTransparency = frame.BackgroundTransparency-frameStep
				end
				wait(1/60)
			end
		end
	end

	local function fadeOut()
		if not gone then
			for i = 1,fadeSteps do
				if blur.Size>0 then
					blur.Size = blur.Size-blurStep
				end
				if msg.TextTransparency<1 then
					msg.TextTransparency = msg.TextTransparency+textStep
					ttl.TextTransparency = ttl.TextTransparency+textStep
				end
				if msg.TextStrokeTransparency<1 then
					msg.TextStrokeTransparency = msg.TextStrokeTransparency+strokeStep
					ttl.TextStrokeTransparency = ttl.TextStrokeTransparency+strokeStep
				end
				if frame.BackgroundTransparency<1 then
					frame.BackgroundTransparency = frame.BackgroundTransparency+frameStep
				end
				wait(1/60)
			end
			blur.Enabled = false
			blur:Destroy()
			service.UnWrap(gui):Destroy()
			gone = true
		end
	end

	gTable.CustomDestroy = function()
		if not gone then
			gone = true
			pcall(fadeOut)
		end

		pcall(function() service.UnWrap(gui):Destroy() end)
		pcall(function() blur:Destroy() end)
	end

	--[[if not scroll then
		msg.Text = message
	else
		Routine(function()
			wait(0.5)
			for i = 1, #message do
				msg.Text = msg.Text .. message:sub(i,i)
				wait(0.05)
			end
		end)
	end--]] -- For now?

	fadeIn()
	wait(tim or 5)
	if not gone then
		fadeOut()
	end

	--[[

	frame.Position = UDim2.new(0.5,-175,-1.5,0)

	gui.Parent = playergui

	frame:TweenPosition(UDim2.new(0.5,-175,0.25,0),nil,nil,0.5)

	if not scroll then
		msg.Text = message
		wait(tim or 10)
	else
		wait(0.5)
		for i = 1, #message do
			msg.Text = msg.Text .. message:sub(i,i)
			wait(0.05)
		end
		wait(tim or 5)
	end

	if frame then
		frame:TweenPosition(UDim2.new(0.5,-175,-1.5,0),nil,nil,0.5)
		wait(1)
		gui:Destroy()
	end
	--]]
end


Prompt: -- spring for an array of linear values

Response:
local LinearSpring = {} do
	LinearSpring.__index = LinearSpring

	function LinearSpring.new(dampingRatio, frequency, pos, typedat, rawTarget)
		local linearPos = typedat.toIntermediate(pos)
		return setmetatable(
			{
				d = dampingRatio,
				f = frequency,
				g = linearPos,
				p = linearPos,
				v = table.create(#linearPos, 0),
				typedat = typedat,
				rawTarget = rawTarget,
			},
			LinearSpring
		)
	end

	function LinearSpring:setGoal(goal)
		self.rawTarget = goal
		self.g = self.typedat.toIntermediate(goal)
	end

	function LinearSpring:canSleep()
		if magnitudeSq(self.v) > SLEEP_VELOCITY_SQ_LIMIT then
			return false
		end

		if distanceSq(self.p, self.g) > SLEEP_OFFSET_SQ_LIMIT then
			return false
		end

		return true
	end

	function LinearSpring:step(dt)
		-- Advance the spring simulation by dt seconds.
		-- Take the damped harmonic oscillator ODE:
		--    f^2*(X[t] - g) + 2*d*f*X'[t] + X''[t] = 0
		-- Where X[t] is position at time t, g is target position,
		-- f is undamped angular frequency, and d is damping ratio.
		-- Apply constant initial conditions:
		--    X[0] = p0
		--    X'[0] = v0
		-- Solve the IVP to get analytic expressions for X[t] and X'[t].
		-- The solution takes one of three forms for 0<=d<1, d=1, and d>1

		local d = self.d
		local f = self.f*2*pi -- Hz -> Rad/s
		local g = self.g
		local p = self.p
		local v = self.v

		if d == 1 then -- critically damped
			local q = exp(-f*dt)
			local w = dt*q

			local c0 = q + w*f
			local c2 = q - w*f
			local c3 = w*f*f

			for idx = 1, #p do
				local o = p[idx] - g[idx]
				p[idx] = o*c0 + v[idx]*w + g[idx]
				v[idx] = v[idx]*c2 - o*c3
			end

		elseif d < 1 then -- underdamped
			local q = exp(-d*f*dt)
			local c = sqrt(1 - d*d)

			local i = cos(dt*f*c)
			local j = sin(dt*f*c)

			-- Damping ratios approaching 1 can cause division by very small numbers.
			-- To mitigate that, group terms around z=j/c and find an approximation for z.
			-- Start with the definition of z:
			--    z = sin(dt*f*c)/c
			-- Substitute a=dt*f:
			--    z = sin(a*c)/c
			-- Take the Maclaurin expansion of z with respect to c:
			--    z = a - (a^3*c^2)/6 + (a^5*c^4)/120 + O(c^6)
			--    z ≈ a - (a^3*c^2)/6 + (a^5*c^4)/120
			-- Rewrite in Horner form:
			--    z ≈ a + ((a*a)*(c*c)*(c*c)/20 - c*c)*(a*a*a)/6

			local z
			if c > EPS then
				z = j/c
			else
				local a = dt*f
				z = a + ((a*a)*(c*c)*(c*c)/20 - c*c)*(a*a*a)/6
			end

			-- Frequencies approaching 0 present a similar problem.
			-- We want an approximation for y as f approaches 0, where:
			--    y = sin(dt*f*c)/(f*c)
			-- Substitute b=dt*c:
			--    y = sin(b*c)/b
			-- Now reapply the process from z.

			local y
			if f*c > EPS then
				y = j/(f*c)
			else
				local b = f*c
				y = dt + ((dt*dt)*(b*b)*(b*b)/20 - b*b)*(dt*dt*dt)/6
			end

			for idx = 1, #p do
				local o = p[idx] - g[idx]
				p[idx] = (o*(i + z*d) + v[idx]*y)*q + g[idx]
				v[idx] = (v[idx]*(i - z*d) - o*(z*f))*q
			end

		else -- overdamped
			local c = sqrt(d*d - 1)

			local r1 = -f*(d - c)
			local r2 = -f*(d + c)

			local ec1 = exp(r1*dt)
			local ec2 = exp(r2*dt)

			for idx = 1, #p do
				local o = p[idx] - g[idx]
				local co2 = (v[idx] - o*r1)/(2*f*c)
				local co1 = ec1*(o - co2)

				p[idx] = co1 + co2*ec2 + g[idx]
				v[idx] = co1*r1 + co2*ec2*r2
			end
		end

		return self.typedat.fromIntermediate(self.p)
	end
end

local function inverseGammaCorrectD65(c)
	return c < 0.0404482362771076 and c/12.92 or 0.87941546140213*(c + 0.055)^2.4
end

local function gammaCorrectD65(c)
	return c < 3.1306684425e-3 and 12.92*c or 1.055*c^(1/2.4) - 0.055
end

local function rgbToLuv(value)
	-- convert RGB to a variant of cieluv space
	local r, g, b = value.R, value.G, value.B

	-- D65 sRGB inverse gamma correction
	r = inverseGammaCorrectD65(r)
	g = inverseGammaCorrectD65(g)
	b = inverseGammaCorrectD65(b)

	-- sRGB -> xyz
	local x = 0.9257063972951867*r - 0.8333736323779866*g - 0.09209820666085898*b
	local y = 0.2125862307855956*r + 0.71517030370341085*g + 0.0722004986433362*b
	local z = 3.6590806972265883*r + 11.4426895800574232*g + 4.1149915024264843*b

	-- xyz -> scaled cieluv
	local l = y > 0.008856451679035631 and 116*y^(1/3) - 16 or 903.296296296296*y

	local u, v
	if z > 1e-14 then
		u = l*x/z
		v = l*(9*y/z - 0.46832)
	else
		u = -0.19783*l
		v = -0.46832*l
	end

	return {l, u, v}
end

local function luvToRgb(value)
	-- convert back from modified cieluv to rgb space

	local l = value[1]
	if l < 0.0197955 then
		return Color3.new(0, 0, 0)
	end
	local u = value[2]/l + 0.19783
	local v = value[3]/l + 0.46832

	-- cieluv -> xyz
	local y = (l + 16)/116
	y = y > 0.206896551724137931 and y*y*y or 0.12841854934601665*y - 0.01771290335807126
	local x = y*u/v
	local z = y*((3 - 0.75*u)/v - 5)

	-- xyz -> D65 sRGB
	local r =  7.2914074*x - 1.5372080*y - 0.4986286*z
	local g = -2.1800940*x + 1.8757561*y + 0.0415175*z
	local b =  0.1253477*x - 0.2040211*y + 1.0569959*z

	-- clamp minimum sRGB component
	if r < 0 and r < g and r < b then
		r, g, b = 0, g - r, b - r
	elseif g < 0 and g < b then
		r, g, b = r - g, 0, b - g
	elseif b < 0 then
		r, g, b = r - b, g - b, 0
	end

	-- gamma correction from D65
	-- clamp to avoid undesirable overflow wrapping behavior on certain properties (e.g. BasePart.Color)
	return Color3.new(
		min(gammaCorrectD65(r), 1),
		min(gammaCorrectD65(g), 1),
		min(gammaCorrectD65(b), 1)
	)
end


Prompt: -- Helper functions

Response:
function angleBetweenPoints(p0, p1)
	local p = p0 - p1
	return -math.atan2(p.z, p.x)
end

function getCameraAngle(camera)
	local cf, f = camera.CoordinateFrame, camera.Focus
	return angleBetweenPoints(cf.p, f.p)
end


Prompt: -- ROBLOX deviation: alias for internal React$ flow types

Response:
export type React_Node =
	nil
	| boolean
	| number
	| string
	| React_Element<any>
	-- ROBLOX TODO: only include this once it's more specific than `any`
	-- | React_Portal
	| Array<React_Node?>
	-- ROBLOX TODO Luau: this more closely matches the upstream Iterable<>, hypothetically the UNIQUE_TAG field makes it so we don't unify with other tables and squad field resolution
	| { [string]: React_Node?, UNIQUE_TAG: any? }

export type React_Element<ElementType> = {
	type: ElementType,
	props: React_ElementProps<ElementType>?,
	key: React_Key | nil,
	ref: any,
}

export type React_PureComponent<Props, State = nil> = React_Component<Props, State>


Prompt: --// Dump log on disconnect

Response:
local isStudio = game:GetService("RunService"):IsStudio()
game:GetService("NetworkClient").ChildRemoved:Connect(function(p)
	if not isStudio then
		warn("~! PLAYER DISCONNECTED/KICKED! DUMPING ADONIS CLIENT LOG!")
		dumplog()
	end
end)

local unique = {}
local origEnv = getfenv()
setfenv(1, setmetatable({}, { __metatable = unique }))


Prompt: --!strict

Response:
local function defaultFilter(...: any)
	return true
end

local function onSpawned<U>(parent: Instance, callback: (child: U) -> (), filter: ((child: Instance) -> boolean)?)
	local filterer = (filter or defaultFilter) :: (Instance) -> boolean

	for _, child in parent:GetChildren() :: { any } do
		if filterer(child) then
			task.spawn(callback, child)
		end
	end

	local signal = parent.ChildAdded:Connect(function(child: any)
		if filterer(child) then
			callback(child)
		end
	end)

	return function()
		signal:Disconnect()
	end
end

return onSpawned


Prompt: --[[Drivetrain]]

Response: Tune.Config			= "FWD"		--"FWD" , "RWD" , "AWD"


Prompt:
------------------------------------------------------------------------
-- parse function declaration body
-- * used in simpleexp(), localfunc(), funcstat()
------------------------------------------------------------------------

Response:
function luaY:body(ls, e, needself, line)
  -- body ->  '(' parlist ')' chunk END
  local new_fs = {}  -- FuncState
        new_fs.upvalues = {}
        new_fs.actvar = {}
  self:open_func(ls, new_fs)
  new_fs.f.lineDefined = line
  self:checknext(ls, "(")
  if needself then
    self:new_localvarliteral(ls, "self", 0)
    self:adjustlocalvars(ls, 1)
  end
  self:parlist(ls)
  self:checknext(ls, ")")
  self:chunk(ls)
  new_fs.f.lastlinedefined = ls.linenumber
  self:check_match(ls, "TK_END", "TK_FUNCTION", line)
  self:close_func(ls)
  self:pushclosure(ls, new_fs, e)
end


Prompt: --		end

Response:
	end
end)
keyset.Event:wait()
script.Parent.Key.Transparency=0
_G.Tween(script.Parent.Key,{CFrame=script.Parent.KeyC.CFrame},1,"Sine","In"):Play()
wait(1.2)
script.Parent.Key.ClickDetector.MaxActivationDistance=10
script.Parent.KeyBase.ClickDetector.MaxActivationDistance=0
script.Parent.Key.ClickDetector.MouseClick:Wait()
_G.Tween(script.Parent.Key,{CFrame=script.Parent.KeyO.CFrame},0.3,"Quad"):Play()
_G.Tween(script.Parent.KeyHole,{CFrame=script.Parent.KeyHoleO.CFrame},0.3,"Quad"):Play()
script.Parent.KeyBase.Key:Play()
wait(0.5)
local Value = Instance.new("CFrameValue")
Value.Value=script.Parent.CoverC.CFrame
Value.Changed:connect(function()
	script.Parent.Cover:SetPrimaryPartCFrame(Value.Value)
end)
_G.Tween(Value,{Value=script.Parent.CoverO.CFrame},0.8,"Bounce","Out"):Play()
wait(1)
script.Parent.Indicator.Color=Color3.new(0,1,0)
script.Parent.Button.ClickDetector.MouseClick:Wait()
script.Parent.Indicator.Color=Color3.new(1,0,0)
script.Parent.Button.Sound:Play()
_G.Tween(script.Parent.Button.Mesh,{Offset=Vector3.new(0.15,0,0)},0.2,"Quad","InOut",true):Play()
_G.Tween(Value,{Value=script.Parent.CoverC.CFrame},2,"Quad"):Play()
workspace.UPCCoreSystemUNYv4yvw3789n5yw7ay.ReactorStartup.Disabled=false
wait(2.5)
script.Parent.Key.ClickDetector.MaxActivationDistance=0
_G.Tween(script.Parent.Key,{CFrame=script.Parent.KeyC.CFrame},0.3,"Quad"):Play()
_G.Tween(script.Parent.KeyHole,{CFrame=script.Parent.KeyHoleC.CFrame},0.3,"Quad"):Play()
script.Parent.KeyBase.Key:Play()
wait(0.5)
_G.Tween(script.Parent.Key,{CFrame=script.Parent.KeyC.CFrame*CFrame.new(0,0.5,0)},1,"Sine"):Play()
wait(1)
script.Parent.Key.Transparency=1


Prompt: --[[Controls]]

Response:
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


Prompt:
--[[
for a,b in pairs(game.ServerScriptService.MainModule.Server.Morphs:GetDescendants()) do
	if b:IsA("Decal") and b.Name ~= "face" and b.Parent.Name == "Head" then
		print("CHANGED: ".. b.Name.." | "..b.Parent.Parent.Name)
		b.Name = "face"
	end
end
--]]

Response:
local bundleCache = {} -- cache HumanoidDescriptions retrieved from bundles to reduce API calls
function module:ApplyBundle(humanoid, bundleId)
	local HumanoidDescription = bundleCache[bundleId]
	if not HumanoidDescription then
		local success, bundleDetails = pcall(function() return main.assetService:GetBundleDetailsAsync(bundleId) end)
		if success and bundleDetails then
			for _, item in next, bundleDetails.Items do
				if item.Type == "UserOutfit" then
					success, HumanoidDescription = pcall(function() return main.players:GetHumanoidDescriptionFromOutfitId(item.Id) end)
					bundleCache[bundleId] = HumanoidDescription
					break
				end
			end
		end
	end
	if not HumanoidDescription then return end
	local newDescription = humanoid:GetAppliedDescription()
	local defaultDescription = Instance.new("HumanoidDescription")
	for _, property in next, {"BackAccessory", "BodyTypeScale", "ClimbAnimation", "DepthScale", "Face", "FaceAccessory", "FallAnimation", "FrontAccessory", "GraphicTShirt", "HairAccessory", "HatAccessory", "Head", "HeadColor", "HeadScale", "HeightScale", "IdleAnimation", "JumpAnimation", "LeftArm", "LeftArmColor", "LeftLeg", "LeftLegColor", "NeckAccessory", "Pants", "ProportionScale", "RightArm", "RightArmColor", "RightLeg", "RightLegColor", "RunAnimation", "Shirt", "ShouldersAccessory", "SwimAnimation", "Torso", "TorsoColor", "WaistAccessory", "WalkAnimation", "WidthScale"} do
		if HumanoidDescription[property] ~= defaultDescription[property] then -- property is not the default value
			newDescription[property] = HumanoidDescription[property]
		end
	end
	humanoid:ApplyDescription(newDescription)
end

return module


Prompt: -- Get references to the DockShelf and its children

Response:
local dockShelf = script.Parent.Parent.Parent.Parent.Parent.DockShelf
local shlf = script.Parent.Parent.Parent.Parent.Parent.WindowManager.CtxtMenu
local aFinderButton = shlf.About
local Minimalise = script.Parent
local window = script.Parent.Parent.Parent


Prompt: --[[Susupension]]

Response:
	Tune.SusEnabled		= true		-- works only in with PGSPhysicsSolverEnabled, defaults to false when PGS is disabled

	--Front Suspension
	Tune.FSusDamping	= 500		-- Spring Dampening
	Tune.FSusStiffness	= 9000		-- Spring Force
	Tune.FAntiRoll 		= 50		-- Anti-Roll (Gyro Dampening)

	Tune.FSusLength		= 1			-- Suspension length (in studs)
	Tune.FPreCompress	= .3		-- Pre-compression adds resting length force
	Tune.FExtensionLim	= .3		-- Max Extension Travel (in studs)
	Tune.FCompressLim	= .1		-- Max Compression Travel (in studs)
	Tune.FSusAngle		= 80		-- Suspension Angle (degrees from horizontal)

	Tune.FWsBoneLen		= 5			-- Wishbone Length
	Tune.FWsBoneAngle	= 0			-- Wishbone angle (degrees from horizontal)
	Tune.FAnchorOffset	= {			-- Suspension anchor point offset (relative to center of wheel)
	 --[[Lateral]]		-.4		,	-- positive = outward
	 --[[Vertical]]		-.5		,	-- positive = upward
	 --[[Forward]]		0		}	-- positive = forward

	--Rear Suspension
	Tune.RSusDamping	= 500		-- Spring Dampening
	Tune.RSusStiffness	= 9000		-- Spring Force
	Tune.FAntiRoll 		= 50		-- Anti-Roll (Gyro Dampening)

	Tune.RSusLength		= 1			-- Suspension length (in studs)
	Tune.RPreCompress	= .3		-- Pre-compression adds resting length force
	Tune.RExtensionLim	= .3		-- Max Extension Travel (in studs)
	Tune.RCompressLim	= .1		-- Max Compression Travel (in studs)
	Tune.RSusAngle		= 80		-- Suspension Angle (degrees from horizontal)

	Tune.RWsBoneLen		= 5			-- Wishbone Length
	Tune.RWsBoneAngle	= 0			-- Wishbone angle (degrees from horizontal)
	Tune.RAnchorOffset	= {			-- Suspension anchor point offset (relative to center of wheel)
	 --[[Lateral]]		-.4		,	-- positive = outward
	 --[[Vertical]]		-.5		,	-- positive = upward
	 --[[Forward]]		0		}	-- positive = forward

	--Aesthetics
	Tune.SusVisible		= false			-- Spring Visible
	Tune.WsBVisible		= false			-- Wishbone Visible
	Tune.SusRadius		= .2			-- Suspension Coil Radius
	Tune.SusThickness	= .1			-- Suspension Coil Thickness
	Tune.SusColor		= "Bright red"	-- Suspension Color [BrickColor]
	Tune.SusCoilCount	= 6				-- Suspension Coil Count
	Tune.WsColor		= "Black"		-- Wishbone Color [BrickColor]
	Tune.WsThickness	= .1			-- Wishbone Rod Thickness


Prompt: -- Defaultly Changes Color

Response:
give.BrickColor = SC
color.BrickColor = SC


Prompt: --PUT THIS SCRIPT IN STARTERPACK, STOP DISLIKING IT BECAUSE YOU DIDN'T USE IT RIGHT

Response:
local sounds = game:GetService('SoundService')
local runtime = game:GetService('RunService')
script:WaitForChild('FootstepSounds').Parent = sounds
local materials = sounds:WaitForChild('FootstepSounds')
local plr = game.Players.LocalPlayer
repeat wait() until plr.Character
local char = plr.Character
local hrp = char.HumanoidRootPart
local hum = char.Humanoid
local walking

hum.Running:connect(function(speed)
	if speed > hum.WalkSpeed/2 then
		walking = true
	else
		walking = false
	end
end)

function getMaterial()
	local floormat = hum.FloorMaterial
	if not floormat then floormat = 'Air' end
	local matstring = string.split(tostring(floormat),'Enum.Material.')[2]
	local material = matstring
	return material
end

local lastmat
runtime.Heartbeat:connect(function()
	if walking then
		local material = getMaterial()
		if material ~= lastmat and lastmat ~= nil then
			materials[lastmat].Playing = false
		end
		local materialSound = materials[material]
		materialSound.PlaybackSpeed = hum.WalkSpeed/12
		materialSound.Playing = true
		lastmat = material
	else
		for _,sound in pairs(materials:GetChildren()) do
			sound.Playing = false
		end
	end
end)


Prompt:
--			m.DesiredAngle = -1
--			script.Parent.Parent.DoorOpen:Play()

Response:
		end
	end
end)


Prompt: -- [[ Flags ]]

Response:
local FFlagUserCameraGamepadZoomFix
do
	local success, result = pcall(function()
		return UserSettings():IsUserFeatureEnabled("UserCameraGamepadZoomFix")
	end)
	FFlagUserCameraGamepadZoomFix = success and result
end


Prompt: -- Enable this if you want to test ragdolls in zero - g

Response: local buildRagdoll = require(ReplicatedStorage:WaitForChild("buildRagdoll"))


Prompt: --Variables

Response:
local player = game.Players.LocalPlayer
local open = false


Prompt: --//wipers

Response:
local wpr = Instance.new("Motor", script.Parent.Parent.Misc.WPR.SS)
wpr.MaxVelocity = 0.05
wpr.Part0 = script.Parent.WPR
wpr.Part1 = wpr.Parent

local wpr2 = Instance.new("Motor", script.Parent.Parent.Misc.WPR2.SS)
wpr2.MaxVelocity = 0.05
wpr2.Part0 = script.Parent.WPR2
wpr2.Part1 = wpr2.Parent


Prompt: -- Don't edit below unless you know what you're doing.

Response:
local O = true
function onClicked()
if O == true then
	O = false
	One()

elseif O == false then
	O = true
    Two()
end
end

script.Parent.MouseButton1Down:connect(onClicked)


Prompt: -- grab the mouse

Response: local mouse = localPlayer:GetMouse()


Prompt: -- FEATURE METHODS

Response:
function Icon:bindEvent(iconEventName, eventFunction)
	local event = self[iconEventName]
	assert(event and typeof(event) == "table" and event.Connect, "argument[1] must be a valid topbarplus icon event name!")
	assert(typeof(eventFunction) == "function", "argument[2] must be a function!")
	self._bindedEvents[iconEventName] = event:Connect(function(...)
		eventFunction(self, ...)
	end)
	return self
end

function Icon:unbindEvent(iconEventName)
	local eventConnection = self._bindedEvents[iconEventName]
	if eventConnection then
		eventConnection:Disconnect()
		self._bindedEvents[iconEventName] = nil
	end
	return self
end

function Icon:bindToggleKey(keyCodeEnum)
	assert(typeof(keyCodeEnum) == "EnumItem", "argument[1] must be a KeyCode EnumItem!")
	self._bindedToggleKeys[keyCodeEnum] = true
	return self
end

function Icon:unbindToggleKey(keyCodeEnum)
	assert(typeof(keyCodeEnum) == "EnumItem", "argument[1] must be a KeyCode EnumItem!")
	self._bindedToggleKeys[keyCodeEnum] = nil
	return self
end

function Icon:lock()
	self.locked = true
	return self
end

function Icon:unlock()
	self.locked = false
	return self
end

function Icon:setTopPadding(offset, scale)
	local newOffset = offset or 4
	local newScale = scale or 0
	self.topPadding = UDim.new(newScale, newOffset)
	self.updated:Fire()
	return self
end

function Icon:bindToggleItem(guiObjectOrLayerCollector)
	if not guiObjectOrLayerCollector:IsA("GuiObject") and not guiObjectOrLayerCollector:IsA("LayerCollector") then
		error("Toggle item must be a GuiObject or LayerCollector!")
	end
	self.toggleItems[guiObjectOrLayerCollector] = true
	return self
end

function Icon:unbindToggleItem(guiObjectOrLayerCollector)
	self.toggleItems[guiObjectOrLayerCollector] = nil
	return self
end

function Icon:_setToggleItemsVisible(bool, byIcon)
	for toggleItem, _ in pairs(self.toggleItems) do
		if not byIcon or byIcon.toggleItems[toggleItem] == nil then
			local property = "Visible"
			if toggleItem:IsA("LayerCollector") then
				property = "Enabled"
			end
			toggleItem[property] = bool
		end
	end
end

function Icon:give(userdata)
	local valueToGive = userdata
	if typeof(userdata) == "function" then
		local returnValue = userdata(self)
		if typeof(userdata) ~= "function" then
			valueToGive = returnValue
		end
	end
	self._maid:give(valueToGive)
	return self
end


Prompt: --step 3: move your ScreenGui to the "Part" inside "Model" (you can re-name the part whatever and the ScreenGui)


Prompt: -- The script needs this to check the state to not update the Last Standing Y Position Variable.

Response:
local function getHumanoidState(h)
	return h:GetState()
end


Prompt:
-- Gets the closest player within range to the given mob. If the closest player is the player the mob is already following, distance is 2x.
-- Note: If streaming is enabled, MoveTo may produce undesired results if the max distance is ever higher than streaming minimum, such as the enemy
-- appearing to 'idle' if the current distance/magnitude is between the streaming minimum and the max follow distance (including 2x possibility)

Response:
function AI:GetClosestPlayer(Mob: MobList.Mob): (Player?, number?)
	local Closest = {Player = nil, Magnitude = math.huge}

	local ActivePlayer -- We retain a reference to this, so they have to get further away from the mob to stop following, instead of the usual distance.
	if Mob.Enemy.WalkToPart then
		local Player = Players:GetPlayerFromCharacter(Mob.Enemy.WalkToPart.Parent)
		if Player then
			ActivePlayer = Player
		end
	end

	for _, Player in Players:GetPlayers() do
		local Character = Player.Character
		if not Character then continue end

		local Magnitude = (Character:GetPivot().Position - Mob.Instance:GetPivot().Position).Magnitude
		local MaxDistance = (ActivePlayer == Player and (Mob.Config.FollowDistance or 32) * 2) or Mob.Config.FollowDistance or 32

		if Magnitude <= MaxDistance and Magnitude < Closest.Magnitude then
			Closest.Player = Player
			Closest.Magnitude = Magnitude
		end
	end

	return Closest.Player, Closest.Player and Closest.Magnitude
end


Prompt:
--///////////////////////// Constructors
--//////////////////////////////////////

Response:
function module.new()
	local obj = setmetatable({}, methods)

	obj.MessageIdCounter = 0

	obj.ChatChannels = {}
	obj.Speakers = {}

	obj.FilterMessageFunctions = Util:NewSortedFunctionContainer()
	obj.ProcessCommandsFunctions = Util:NewSortedFunctionContainer()

	obj.eChannelAdded = Instance.new("BindableEvent")
	obj.eChannelRemoved = Instance.new("BindableEvent")
	obj.eSpeakerAdded = Instance.new("BindableEvent")
	obj.eSpeakerRemoved = Instance.new("BindableEvent")

	obj.ChannelAdded = obj.eChannelAdded.Event
	obj.ChannelRemoved = obj.eChannelRemoved.Event
	obj.SpeakerAdded = obj.eSpeakerAdded.Event
	obj.SpeakerRemoved = obj.eSpeakerRemoved.Event

	obj.ChatServiceMajorVersion = 0
	obj.ChatServiceMinorVersion = 5

	return obj
end

return module.new()


Prompt:
--[=[
	Counts the number of times a char appears in a string.

	:::note
	Note that this is not UTF8 safe
	:::

	@param str string
	@param char string
	@return number
]=]

Response:
function String.checkNumOfCharacterInString(str: string, char: string): number
	local count = 0
	for _ in string.gmatch(str, char) do
		count = count + 1
	end
	return count
end


Prompt:
--[=[
	@prop Player Player
	@within KnitClient
	@readonly
	Reference to the LocalPlayer.
]=]

Response: KnitClient.Player = game:GetService("Players").LocalPlayer


Prompt: -- Make variables for the player and camera

Response:
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:wait()
local humanoidRootPart = character:FindFirstChild("HumanoidRootPart", true)
local camera = game.Workspace.CurrentCamera


Prompt:
-- Overloads BaseCamera:GetSubjectPosition() with
-- the GetSubjectPosition function of the FpsCamera.

Response:
function FpsCamera:MountBaseCamera(BaseCamera)
	local base = BaseCamera.GetSubjectPosition
	self.GetBaseSubjectPosition = base

	if base then
		BaseCamera.GetBaseSubjectPosition = base
		BaseCamera.GetSubjectPosition = self.GetSubjectPosition
	else
		self:Warn("MountBaseCamera - Could not find BaseCamera:GetSubjectPosition()!")
	end
end


Prompt: -------- OMG HAX

Response:
r = game:service("RunService")

local damage = 99999999999999999999999999999999999999

local slash_damage = 99999999999999999999999999999999
local lunge_damage = 99999999999999999999999999999999

sword = script.Parent.Handle
Tool = script.Parent

local SlashSound = Instance.new("Sound")
SlashSound.SoundId = "rbxasset://sounds\\swordslash.wav"
SlashSound.Parent = sword
SlashSound.Volume = .7

local LungeSound = Instance.new("Sound")
LungeSound.SoundId = "rbxasset://sounds\\swordlunge.wav"
LungeSound.Parent = sword
LungeSound.Volume = .6

local UnsheathSound = Instance.new("Sound")
UnsheathSound.SoundId = "rbxasset://sounds\\unsheath.wav"
UnsheathSound.Parent = sword
UnsheathSound.Volume = 1

function blow(hit)
	if (hit.Parent == nil) then return end -- happens when bullet hits sword

	local humanoid = hit.Parent:findFirstChild("Humanoid")
	local vCharacter = Tool.Parent
	local vPlayer = game.Players:playerFromCharacter(vCharacter)
	local hum = vCharacter:findFirstChild("Humanoid") -- non-nil if tool held by a character
	if humanoid~=nil and humanoid ~= hum and hum ~= nil then
		-- final check, make sure sword is in-hand

		local right_arm = vCharacter:FindFirstChild("Right Arm")
		if (right_arm ~= nil) then
			local joint = right_arm:FindFirstChild("RightGrip")
			if (joint ~= nil and (joint.Part0 == sword or joint.Part1 == sword)) then
				tagHumanoid(humanoid, vPlayer)
				humanoid:TakeDamage(damage)
				wait(1)
				untagHumanoid(humanoid)
			end
		end

	end
end

function tagHumanoid(humanoid, player)
	local creator_tag = Instance.new("ObjectValue")
	creator_tag.Value = player
	creator_tag.Name = "creator"
	creator_tag.Parent = humanoid
end

function untagHumanoid(humanoid)
	if humanoid ~= nil then
		local tag = humanoid:findFirstChild("creator")
		if tag ~= nil then
			tag.Parent = nil
		end
	end
end

function attack()
	damage = slash_damage
	SlashSound:play()
	local anim = Instance.new("StringValue")
	anim.Name = "toolanim"
	anim.Value = "Slash"
	anim.Parent = Tool
end

function lunge()
	damage = lunge_damage

	LungeSound:play()

	local anim = Instance.new("StringValue")
	anim.Name = "toolanim"
	anim.Value = "Lunge"
	anim.Parent = Tool

	local force = Instance.new("BodyVelocity")
	force.velocity = Vector3.new(0,10,0) --Tool.Parent.Torso.CFrame.lookVector * 80
	force.Parent = Tool.Parent.HumanoidRootPart
	wait(.25)
	swordOut()
	wait(.25)
	force.Parent = nil
	wait(.5)
	swordUp()

	damage = slash_damage
end

function swordUp()
	Tool.GripForward = Vector3.new(-1,0,0)
	Tool.GripRight = Vector3.new(0,1,0)
	Tool.GripUp = Vector3.new(0,0,1)
end

function swordOut()
	Tool.GripForward = Vector3.new(0,0,1)
	Tool.GripRight = Vector3.new(0,-1,0)
	Tool.GripUp = Vector3.new(-1,0,0)
end

function swordAcross()
	-- parry
end

Tool.Enabled = true
local last_attack = 0
function onActivated()

	if not Tool.Enabled then
		return
	end

	Tool.Enabled = false

	local character = Tool.Parent;
	local humanoid = character.Humanoid
	if humanoid == nil then
		print("Humanoid not found")
		return
	end

	local t = r.Stepped:wait()

	if (t - last_attack < .2) then
		lunge()
	else
		attack()
	end

	last_attack = t

	--wait(.5)

	Tool.Enabled = true
end

function onEquipped()
	UnsheathSound:play()
end

script.Parent.Activated:connect(onActivated)
script.Parent.Equipped:connect(onEquipped)

connection = sword.Touched:connect(blow)


Prompt: --// F key, HornOff

Response:
mouse.KeyUp:connect(function(key)
	if key=="h" then
		veh.Lightbar.middle.Airhorn:Stop()
		veh.Lightbar.middle.Wail.Volume = 8
		veh.Lightbar.middle.Yelp.Volume = 8
		veh.Lightbar.middle.Priority.Volume = 8
		veh.Lightbar.HORN.Transparency = 1
	end
end)