Roblox/luau_corpus huggingface dataset:
-- If in-game, enable ctrl hotkeys for exporting
if Mode == 'Tool' then
	AssignHotkey({ 'LeftControl', 'P' }, ExportSelection);
	AssignHotkey({ 'RightControl', 'P' }, ExportSelection);
end;

function IsVersionOutdated()
	-- Returns whether this version of Building Tools is out of date

	-- Check most recent version number
	local AssetInfo = MarketplaceService:GetProductInfo(142785488, Enum.InfoType.Asset);
	local LatestMajorVersion, LatestMinorVersion, LatestPatchVersion = AssetInfo.Description:match '%[Version: ([0-9]+)%.([0-9]+)%.([0-9]+)%]';
	local CurrentMajorVersion, CurrentMinorVersion, CurrentPatchVersion = Tool.Version.Value:match '([0-9]+)%.([0-9]+)%.([0-9]+)';

	-- Convert version data into numbers
	local LatestMajorVersion, LatestMinorVersion, LatestPatchVersion =
		tonumber(LatestMajorVersion), tonumber(LatestMinorVersion), tonumber(LatestPatchVersion);
	local CurrentMajorVersion, CurrentMinorVersion, CurrentPatchVersion =
		tonumber(CurrentMajorVersion), tonumber(CurrentMinorVersion), tonumber(CurrentPatchVersion);

	-- Determine whether current version is outdated
	if LatestMajorVersion > CurrentMajorVersion then
		return true;
	elseif LatestMajorVersion == CurrentMajorVersion then
		if LatestMinorVersion > CurrentMinorVersion then
			return true;
		elseif LatestMinorVersion == CurrentMinorVersion then
			return LatestPatchVersion > CurrentPatchVersion;
		end;
	end;

	-- Return an up-to-date status if not oudated
	return false;

end;

function ToggleSwitch(CurrentButtonName, SwitchContainer)
	-- Toggles between the buttons in a switch

	-- Reset all buttons
	for _, Button in pairs(SwitchContainer:GetChildren()) do

		-- Make sure to not mistake the option label for a button
		if Button.Name ~= 'Label' then

			-- Set appearance to disabled
			Button.SelectedIndicator.BackgroundTransparency = 1;
			Button.Background.Image = Assets.LightSlantedRectangle;

		end;

	end;

	-- Make sure there's a new current button
	if CurrentButtonName then

		-- Get the current button
		local CurrentButton = SwitchContainer[CurrentButtonName];

		-- Set the current button's appearance to enabled
		CurrentButton.SelectedIndicator.BackgroundTransparency = 0;
		CurrentButton.Background.Image = Assets.DarkSlantedRectangle;

	end;
end;
-- Decompiled with the Synapse X Luau decompiler.

return {
	["Halloween 2022"] = { {
			title = "Halloween 2022!", 
			desc = "Participate in the Halloween 2022 Event!", 
			amount = 1, 
			difficulty = 2, 
			secret = true, 
			rewardType = "Diamonds", 
			reward = 10000
		} }
};
-- Define the maximum distance from the gun to the object that can be selected
local maxDistance = 50
--[[
	Create a promise that represents the immediately rejected value.
]]
function Promise.reject(...)
	local length, values = pack(...)
	return Promise._new(debug.traceback(nil, 2), function(_, reject)
		reject(unpack(values, 1, length))
	end)
end
-- Class

local DropdownClass = {}
DropdownClass.__index = DropdownClass
DropdownClass.__type = "Dropdown"

function DropdownClass:__tostring()
	return DropdownClass.__type
end
--[[
local tmp = hits:Clone()
tmp.Disabled=false
tmp.Parent=L3
local tmp = hits:Clone()
tmp.Disabled=false
tmp.Parent=L4
]]

while true do
	l=L1.Position
	angle=angle + DELTA
	L1.CFrame=CFrame.new( Vector3.new(l.X,l.Y,l.Z)) * CFrame.Angles(0, math.rad(angle), 0 )

	l=L2.Position
	angle=angle + DELTA
	L2.CFrame=CFrame.new( Vector3.new(l.X,l.Y,l.Z)) * CFrame.Angles(0, math.rad(angle+45), 0 )
--local speed = script.Parent.Speed
local tweenInfo = TweenInfo.new(
	speed, -- Length (seconds)
	Enum.EasingStyle.Bounce,
	Enum.EasingDirection.Out,
	0, -- times repeared
	false, -- reverse
	delayed -- delay
)

goals[ 1 ] = spin.CFrame * CFrame.Angles( 0, math.rad( -30 ), 0 )
goals[ 2 ] = spin.CFrame * CFrame.Angles( 0, math.rad( -60 ), 0 )
goals[ 3 ] = spin.CFrame * CFrame.Angles( 0, math.rad( -90 ), 0 )
goals[ 4 ] = spin.CFrame * CFrame.Angles( 0, math.rad( -120 ), 0 )
goals[ 5 ] = spin.CFrame * CFrame.Angles( 0, math.rad( -150 ), 0 )
goals[ 6 ] = spin.CFrame * CFrame.Angles( 0, math.rad( -180 ), 0 )
goals[ 7 ] = spin.CFrame * CFrame.Angles( 0, math.rad( -210 ), 0 )
goals[ 8 ] = spin.CFrame * CFrame.Angles( 0, math.rad( -240 ), 0 )
goals[ 9 ] = spin.CFrame * CFrame.Angles( 0, math.rad( -270 ), 0 )
goals[ 10 ] = spin.CFrame * CFrame.Angles( 0, math.rad( -300 ), 0 )
goals[ 11 ] = spin.CFrame * CFrame.Angles( 0, math.rad( -330 ), 0 )
goals[ 12 ] = spin.CFrame

local i = 0
while spinning do
	i = i % #goals + 1

	local tween = TweenService:Create( spin, tweenInfo, { CFrame = goals[ i ] } )
	tween:Play()

	local state = tween.Completed:Wait()
	if state == Enum.PlaybackState.Cancelled then
		warn( 'Tween cancelled' )
		break
	end
end
--
-- Verify that everything is where it should be
assert(Self:FindFirstChild'Humanoid' ~= nil, 'Monster does not have a humanoid')
assert(Settings ~= nil, 'Monster does not have a Configurations object')
	assert(Settings:FindFirstChild'MaximumDetectionDistance' ~= nil and Settings.MaximumDetectionDistance:IsA'NumberValue', 'Monster does not have a MaximumDetectionDistance (NumberValue) setting')
	assert(Settings:FindFirstChild'CanGiveUp' ~= nil and Settings.CanGiveUp:IsA'BoolValue', 'Monster does not have a CanGiveUp (BoolValue) setting')
	assert(Settings:FindFirstChild'CanRespawn' ~= nil and Settings.CanRespawn:IsA'BoolValue', 'Monster does not have a CanRespawn (BoolValue) setting')
	assert(Settings:FindFirstChild'SpawnPoint' ~= nil and Settings.SpawnPoint:IsA'Vector3Value', 'Monster does not have a SpawnPoint (Vector3Value) setting')
	assert(Settings:FindFirstChild'AutoDetectSpawnPoint' ~= nil and Settings.AutoDetectSpawnPoint:IsA'BoolValue', 'Monster does not have a AutoDetectSpawnPoint (BoolValue) setting')
	assert(Settings:FindFirstChild'FriendlyTeam' ~= nil and Settings.FriendlyTeam:IsA'BrickColorValue', 'Monster does not have a FriendlyTeam (BrickColorValue) setting')
	assert(Settings:FindFirstChild'AttackDamage' ~= nil and Settings.AttackDamage:IsA'NumberValue', 'Monster does not have a AttackDamage (NumberValue) setting')
	assert(Settings:FindFirstChild'AttackFrequency' ~= nil and Settings.AttackFrequency:IsA'NumberValue', 'Monster does not have a AttackFrequency (NumberValue) setting')
	assert(Settings:FindFirstChild'AttackRange' ~= nil and Settings.AttackRange:IsA'NumberValue', 'Monster does not have a AttackRange (NumberValue) setting')
assert(Mind ~= nil, 'Monster does not have a Mind object')
	assert(Mind:FindFirstChild'CurrentTargetHumanoid' ~= nil and Mind.CurrentTargetHumanoid:IsA'ObjectValue', 'Monster does not have a CurrentTargetHumanoid (ObjectValue) mind setting')
assert(Self:FindFirstChild'Respawn' and Self.Respawn:IsA'BindableFunction', 'Monster does not have a Respawn BindableFunction')
assert(Self:FindFirstChild'Died' and Self.Died:IsA'BindableEvent', 'Monster does not have a Died BindableEvent')
assert(Self:FindFirstChild'Respawned' and Self.Died:IsA'BindableEvent', 'Monster does not have a Respawned BindableEvent')
assert(Self:FindFirstChild'Attacked' and Self.Died:IsA'BindableEvent', 'Monster does not have a Attacked BindableEvent')
assert(script:FindFirstChild'Attack' and script.Attack:IsA'Animation', 'Monster does not have a MonsterScript.Attack Animation')
--[[
	Anti-Spam
	For Click Detectors

	<Function> Wrap(<Function> FunctionToHook, <Int> OverrideNumberOfAttemptsAllowedBeforeCooldown)

	How to use;
		game:GetService("Workspace").INSTANCE.ClickDetector.MouseClick:Connect(Wrap(function()
			--// Code here
		end), OPTIONALCLICKSPAMPARAMETER)
	
		OR
	
		game:GetService("Workspace").INSTANCE.ClickDetector.MouseClick:Connect(Wrap(FUNCTION), OPTIONALCLICKSPAMPARAMETER)

	Phoenix
]]

local AntiSpam = {} -- Index: <instance> Player | Key: <int> Number of attempts
local DelayQueue = {} -- Index: <instance> Player | Key: <boolean> Delaying
local DefaultSpam = 15

coroutine.wrap(function()
	while true do
		wait(0.25)
		
		for Player, Attempts in pairs(AntiSpam) do
			if Attempts > 1 then
				AntiSpam[Player] = Attempts - 1
			end
		end
	end
end)()

return function(Function, OptionalCooldownParameter) --// Function that prevents spam for global controls eeeeyeeet
	local SpamStop

	if tonumber(OptionalCooldownParameter) ~= nil then
		SpamStop = tonumber(OptionalCooldownParameter)
	else
		SpamStop = DefaultSpam
	end
	
    local Delay = function(Player)
        DelayQueue[Player] = true
        
        wait(5)
        
        DelayQueue[Player] = false
        AntiSpam[Player] = 0
    end

	
    
    return function(Player)
        if AntiSpam[Player] == nil then
            AntiSpam[Player] = 0
        end
        
        if DelayQueue[Player] == nil then
            DelayQueue[Player] = false
        end

        if AntiSpam[Player] < SpamStop then
            AntiSpam[Player] = AntiSpam[Player] + 1
            Function(Player)
        elseif AntiSpam[Player] >= SpamStop and DelayQueue[Player] == false then
            Delay(Player)
        end
    end
end
-----------------------------------------------------------------------------------------------------------------
function onKeyDown(key)
if (key~=nil) then
key = key:lower()

if (key=="e")  then -- Toggle Patrol
if Holstered == true then
script.Parent.Parent.Humanoid.WalkSpeed = 16
GunUp()
elseif Holstered == false then
script.Parent.Parent.Humanoid.WalkSpeed = 11
GunDown()
end end end end
Tool.Equipped:connect(onEquippedLocal)
--[[ss1.Touched:connect(function()
	if IsOpen.Value == false then
		OtherDir.Value = false
		opendoor()
		wait(TimeDelay)
		closedoor()
	end
end)]]


trigger.Changed:Connect(function()
	if InUse.Value == false then
		if trigger.Value == true and IsOpen.Value == false then
			opendoor()
		elseif trigger.Value == false and IsOpen.Value == true then
			closedoor()
		end
	end
end)
--[[Drivetrain]]	
	Tune.Config			= "RWD"		--"FWD" , "RWD" , "AWD"
	
	--Differential Settings	
	Tune.FDiffSlipThres	= 50		-- 1 - 100%				(Max threshold of applying full lock determined by deviation from avg speed)
	Tune.FDiffLockThres	= 50		-- 0 - 100%				(0 - Bias toward slower wheel, 100 - Bias toward faster wheel)
	Tune.RDiffSlipThres	= 30		-- 1 - 100%
	Tune.RDiffLockThres	= 60		-- 0 - 100%
	Tune.CDiffSlipThres	= 50		-- 1 - 100%				[AWD Only]
	Tune.CDiffLockThres	= 50		-- 0 - 100%				[AWD Only]
	
	--Traction Control Settings
	Tune.TCSEnabled		= true		-- Implements TCS
	Tune.TCSThreshold	= 20		-- Slip speed allowed before TCS starts working (in SPS)
	Tune.TCSGradient	= 20		-- Slip speed gradient between 0 to max reduction (in SPS)
	Tune.TCSLimit		= 10		-- Minimum amount of torque at max reduction (in percent)
-- wrapper function

local function wrapper(child, addition)
	local this = newproxy(true);
	local mt = getmetatable(this);
	mt.__index = function(t, k) return addition[k] or child[k]; end;
	mt.__newindex = function(t, k, v) if addition[k] then addition[k] = v; else child[k] = v; end; end;
	mt.__call = function() return child; end;
	mt.__tostring = function(t) return tostring(child); end;
	mt.__metatable = "The metatable is locked.";
	return this;
end;
-- Vérifier si le joueur possède un bras droit
if player.Character and player.Character:FindFirstChild("Right Arm") then
	rightArm = player.Character["Right Arm"]
end
--[[
		___      _______                _     
	   / _ |____/ ___/ /  ___ ____ ___ (_)__ 
	  / __ /___/ /__/ _ \/ _ `(_-<(_-</ (_-<
	 /_/ |_|   \___/_//_/\_,_/___/___/_/___/
 						SecondLogic @ Inspare
]]

local car = script.Parent.Car.Value
local vl = script.Parent.Values

local strength = 350

local max = 4 --in sps

while wait() do
	if car.Body.Lights.BRAKE.Material ~= Enum.Material.Neon then
		if vl.Throttle.Value < 0.1 and vl.RPM.Value > 0 and vl.Velocity.Value.Magnitude < max and (math.abs(vl.Gear.Value) > 0) then
			car.Body.Creep.BV.MaxForce = Vector3.new(strength,0,strength)
		else
			car.Body.Creep.BV.MaxForce = Vector3.new(0,0,0)
		end
		car.Body.Creep.BV.Velocity = car.Body.Creep.CFrame.lookVector*(8*(math.min(vl.Gear.Value,1)))
	else
		car.Body.Creep.BV.Velocity = Vector3.new(0,0,0)
	end
end
--[[**
	DEPRECATED
	Please use t.literal
**--]]
t.exactly = t.literal
----[[ Color Settings ]]
module.BackGroundColor = Color3.new(0, 0, 0)
module.DefaultMessageColor = Color3.new(1, 1, 1)
module.DefaultNameColor = Color3.new(1, 1, 1)
module.ChatBarBackGroundColor = Color3.new(0, 0, 0)
module.ChatBarBoxColor = Color3.new(1, 1, 1)
module.ChatBarTextColor = Color3.new(0, 0, 0)
module.ChannelsTabUnselectedColor = Color3.new(0, 0, 0)
module.ChannelsTabSelectedColor = Color3.new(30/255, 30/255, 30/255)
module.DefaultChannelNameColor = Color3.fromRGB(35, 76, 142)
module.WhisperChannelNameColor = Color3.fromRGB(102, 14, 102)
module.ErrorMessageTextColor = Color3.fromRGB(245, 50, 50)
-- no touchy
local path
local waypoint
local oldpoints
local isWandering = 0

if canWander then
	spawn(function()
		while isWandering == 0 do
			isWandering = 1
			local desgx, desgz = hroot.Position.x + math.random(-WanderX, WanderX), hroot.Position.z + math.random(-WanderZ, WanderZ)
			human:MoveTo( Vector3.new(desgx, 0, desgz) )
			wait(math.random(4, 6))
			isWandering = 0
		end
	end)
end

while wait() do
	local enemytorso = GetTorso(hroot.Position)	
	if enemytorso ~= nil then -- if player detected
		isWandering = 1
		local function checkw(t)
			local ci = 3
			if ci > #t then
				ci = 3
			end
			if t[ci] == nil and ci < #t then
				repeat
					ci = ci + 1
					wait()
				until t[ci] ~= nil
				return Vector3.new(1, 0, 0) + t[ci]
			else
				ci = 3
				return t[ci]
			end
		end

		path = pfs:FindPathAsync(hroot.Position, enemytorso.Position)
		waypoint = path:GetWaypoints()
		oldpoints = waypoint
		local connection;

		local direct = Vector3.FromNormalId(Enum.NormalId.Front)
		local ncf = hroot.CFrame * CFrame.new(direct)
		direct = ncf.p.unit
		local rootr = Ray.new(hroot.Position, direct)
		local phit, ppos = game.Workspace:FindPartOnRay(rootr, hroot)

		if path and waypoint or checkw(waypoint) then
			if checkw(waypoint) ~= nil and checkw(waypoint).Action == Enum.PathWaypointAction.Walk then
				human:MoveTo( checkw(waypoint).Position )
				human.Jump = false
			end

			if checkw(waypoint) ~= nil and checkw(waypoint).Action == Enum.PathWaypointAction.Jump then
				human.Jump = true
				connection = human.Changed:connect(function()
					human.Jump = true
				end)
				human:MoveTo( checkw(waypoint).Position )
			else
				human.Jump = false
			end

			hroot.Touched:connect(function(p)
				local bodypartnames = GetPlayersBodyParts(enemytorso)
				if p:IsA'Part' and not (p.Name == bodypartnames) and phit and phit.Name ~= bodypartnames and phit:IsA'Part' and rootr:Distance(phit.Position) < 5 then
					connection = human.Changed:connect(function()
						human.Jump = true
					end)
				else
					human.Jump = false
				end
			end)

			if connection then
				connection:Disconnect()
			end

		else
			for i = 3, #oldpoints do
				human:MoveTo( oldpoints[i].Position )	
			end
		end
	elseif enemytorso == nil and canWander then -- if player not detected
		isWandering = 0
		path = nil
		waypoint = nil
		human.MoveToFinished:Wait()
	end
end
--!strict
local Packages = script.Parent.Parent
local LuauPolyfill = require(Packages.LuauPolyfill)
type Error = LuauPolyfill.Error
type Object = LuauPolyfill.Object
type Array<T> = LuauPolyfill.Array<T>
local Error = LuauPolyfill.Error
local inspect = LuauPolyfill.util.inspect

local DIVIDER = "\n------ Error caught by React ------\n"
--// Functions
function Forward()
	Storage.Sound:FireServer(runSound, true)
	Storage.Sound:FireServer(idleSound, false)
	
	while true do
		rst:Wait()
		if ForwardKeyDown then
			if speed < maxSpeed then
				speed = speed + 0.5
			elseif speed > maxSpeed then
				speed = maxSpeed
			end
			
			local lv = seat.CFrame.lookVector
		
			local maxVelo = ((2*lv)*maxSpeed)
			local newVelo = ((2*lv)*speed)

			Storage.UpdateBV:FireServer(newVelo, BV)
		end
		
		if not ForwardKeyDown and not BackwardKeyDown then
			speed = speed - 1
			
			local lv = seat.CFrame.lookVector
			
			local newVelo = ((2*lv)*speed)
			
			Storage.UpdateBV:FireServer(newVelo, BV)
			
			if speed <= 0 then
				speed = 0
				
				local newVelo = ((2*lv)*0)
				Storage.UpdateBV:FireServer(newVelo, BV)
				
				Storage.Sound:FireServer(idleSound, true)
				Storage.Sound:FireServer(runSound, false)
				break
			end
			
			if BackwardKeyDown and not ForwardKeyDown then
				break
			end
		end
	end
end

function Backwards()	
	Storage.Sound:FireServer(runSound, true)
	Storage.Sound:FireServer(idleSound, false)
	
	while true do
		rst:Wait()
		if BackwardKeyDown then
			if speed > -maxSpeed then
				speed = speed - 0.5
			elseif speed < -maxSpeed then
				speed = -maxSpeed
			end
			
			local lv = seat.CFrame.lookVector
			local newVelo = ((2*lv)*speed)
			
			Storage.UpdateBV:FireServer(newVelo, BV)
		end
		
		if not BackwardKeyDown and not ForwardKeyDown then
			speed = speed + 1
			
			local lv = seat.CFrame.lookVector

			local newVelo = ((2*lv)*speed)

			Storage.UpdateBV:FireServer(newVelo, BV)
			
			
			if speed <= 0 then
				speed = 0
				
				local newVelo = ((2*lv)*0)
				Storage.UpdateBV:FireServer(newVelo, BV)
				
				Storage.Sound:FireServer(idleSound, true)
				Storage.Sound:FireServer(runSound, false)
				break
			end
		end
		
		if not BackwardKeyDown and ForwardKeyDown then
			break
		end
	end
end

function turnRight()
	while RightTurnKeyDown do
		wait()
		
		local newAV
		
		if ForwardKeyDown or BackwardKeyDown then
			newAV = Vector3.new(0,-0.5,0)
		else
			newAV = Vector3.new(0,-0.4,0)
		end
		
		Storage.UpdateAV:FireServer(newAV, BAV)
		
		if not RightTurnKeyDown then
			local newAV = Vector3.new(0,0,0)
			Storage.UpdateAV:FireServer(newAV, BAV)
		end
	end
end

function turnLeft()
	while LeftTurnKeyDown do
		wait()
		
		local newAV
		
		if ForwardKeyDown or BackwardKeyDown then
			newAV = Vector3.new(0,0.5,0)
		else
			newAV = Vector3.new(0,0.4,0)
		end
		
		Storage.UpdateAV:FireServer(newAV, BAV)
		
		if not LeftTurnKeyDown then
			local newAV = Vector3.new(0,0,0)
			Storage.UpdateAV:FireServer(newAV, BAV)
		end
	end
end

function EndControl(bool)
	Storage.Sound:FireServer(runSound, false)
	Storage.Sound:FireServer(idleSound, false)
	
	Equipped = false
	Storage.Stop:FireServer(BV, BAV)
	cam.CameraType = Enum.CameraType.Custom
	
	script:Destroy()
end

function flipTank()
	Storage.Flip:FireServer(seat, BG)	
end
-- Preload animations
function playAnimation(animName, transitionTime, humanoid) 

	local roll = math.random(1, animTable[animName].totalWeight) 
	local origRoll = roll
	local idx = 1
	while (roll > animTable[animName][idx].weight) do
		roll = roll - animTable[animName][idx].weight
		idx = idx + 1
	end
	--		print(animName .. " " .. idx .. " [" .. origRoll .. "]")
	local anim = animTable[animName][idx].anim

	-- switch animation		
	if (anim ~= currentAnimInstance) then

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

		currentAnimSpeed = 1.0

		-- load it to the humanoid; get AnimationTrack
		currentAnimTrack = humanoid:LoadAnimation(anim)
		currentAnimTrack.Priority = Enum.AnimationPriority.Core

		-- play the animation
		currentAnimTrack:Play(transitionTime)
		currentAnim = animName
		currentAnimInstance = anim

		-- set up keyframe name triggers
		if (currentAnimKeyframeHandler ~= nil) then
			currentAnimKeyframeHandler:disconnect()
		end
		currentAnimKeyframeHandler = currentAnimTrack.KeyframeReached:connect(keyFrameReachedFunc)

	end

end
-- Decompiled with Visenya | https://targaryentech.com
local UIS = game:GetService("UserInputService")
wait(1)
local P = script.Parent
local slider = P.Slider
local knob = slider.Knob
local FOVLabel = P.FOVValue
local knobGrabbed = false
function GrabFOVKnob()
  knobGrabbed = true
end
function MoveFOVKnob(screenPosition)
  local yDiff = screenPosition.y - slider.AbsolutePosition.y
  local knobPositionRatio = math.min(math.max(yDiff / slider.AbsoluteSize.y, 0), 1)
  local newFOV = 100 + 9900 * (1 - knobPositionRatio)
  script.Parent.Parent.Dist.Value = newFOV
  knob.Position = UDim2.new(0, -10, knobPositionRatio, -10)
  FOVLabel.Text = math.floor(newFOV)
end
function ReleaseFOVKnob()
  knobGrabbed = false
end
knob.InputBegan:connect(function(input)
  if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
    GrabFOVKnob()
  end
end)
UIS.InputChanged:connect(function(input, gameProcessedEvent)
  if not gameProcessedEvent and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) and knobGrabbed then
    MoveFOVKnob(input.Position)
  end
end)
UIS.InputEnded:connect(function(input, gameProcessedEvent)
  if not gameProcessedEvent and input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
    ReleaseFOVKnob()
  end
end)
--[[
This door, the first on ROBLOX of its kind, was created by Mark Otaris (JulienDethurens).

It opens when it is touched by someone whose rank in a certain group is higher or equal than/to a certain rank number.

The group's id can be specified in the GroupId value in the configuration folder contained in the door.
The rank id (from 1 to 255) can be specified in the RankId value in the configuration folder.
]]

local config = script.Parent.Configuration

script.Parent.Touched:connect(function(part)
	if part.Parent and Game:GetService('Players'):GetPlayerFromCharacter(part.Parent) then
		local player = Game:GetService('Players'):GetPlayerFromCharacter(part.Parent)
		if player:GetRankInGroup(config.GroupId.Value) >= config.RankId.Value then
			script.Parent.Transparency = 1
			script.Parent.CanCollide = false
			wait(0.5)
			script.Parent.Transparency = 1
			script.Parent.CanCollide = true
		end
	end
end)
-- Every valid configuration value should be non-nil in this table.
local defaultConfig = {
	-- Enables asserts for internal Roact APIs. Useful for debugging Roact itself.
	["internalTypeChecks"] = false,
	-- Enables stricter type asserts for Roact's public API.
	["typeChecks"] = false,
	-- Enables storage of `debug.traceback()` values on elements for debugging.
	["elementTracing"] = false,
	-- Enables validation of component props in stateful components.
	["propValidation"] = false,

	-- Temporary config for enabling a bug fix for processing events based on updates to child instances
	-- outside of the standard lifecycle.
	["tempFixUpdateChildrenReEntrancy"] = false,
}
--[[
	CLIMAXIMUS's Saving Script.
	Equipped with the best of scripting.
	( Must be put in ServerScriptService(Reccomended!) or workspace. )
]]--

gameStats = { --[[ <-- Player can save his stats on command ]]
	["DoChat?"] = {
		["DoIt?"] = true;
		["Keywords"] = {
			"/save"; "/ save"; 
			":save"; ": save"
		}
	}; 
	["DoMessages?"] = true; --[[ <-- Reminder of saving/loading ]]
	["IsAnObby?"] = false; --[[ <-- Respawns the character to fix loading ]]
	saveType = {
		["Normal?"] = true; --[[ <-- Set to false if other ]]
		["SavingList?"] = { --[[ <-- Specific wanted admins ]]
			["DoIt?"] = false;
			theList = {
				"Name1";
				"Name2";
				"Name3"
			}
		};
		["BestFriends?"] = false; --[[ <-- Best friends of your's only. ]]
		["Friends?"] = false; --[[ <-- Friends of your's only. ]]
		["OwnerOnly?"] = false; --[[ <-- Only you have saving stats ]]
		["Gamepass?"] = { --[[ <-- Needs a gamepass to save ]]
			["DoIt?"] = false;
			["GamepassId"] = 000000
		};
		["Asset/Item?"] = { --[[ Such as a T-Shirt ]]
			["DoIt?"] = false;
			["AssetId"] = 000000
		}
	};
}
--- LuckP
   ExpNeed.Value = ExpNeed1:GetAsync(Plr.UserId) or ExpNeed.Value
	   ExpNeed1:SetAsync(Plr.UserId, ExpNeed.Value)
      ExpNeed.Changed:connect(function()
	   ExpNeed1:SetAsync(Plr.UserId, ExpNeed.Value)
   end)
--	game.workspace.Scripts.WaveScript.Dead_Zombies.Value = game.workspace.Scripts.WaveScript.Dead_Zombies.Value + 1
	wait(15)
	human.Parent:Destroy()
end 

human.Died:connect(Die)
-- services

local ServerScriptService	= game:GetService("ServerScriptService")
local ReplicatedStorage		= game:GetService("ReplicatedStorage")
local RunService			= game:GetService("RunService")
local Workspace				= game:GetService("Workspace")
local Players				= game:GetService("Players")