Pinkstack/roblox-luau-corpus-text huggingface dataset:
--[[
	Stage implementation
]]



local Lobby = {}
Lobby.__index = Lobby
Lobby.PlayerAddedConnection = nil

function Lobby.new(gameStageHandler)
	local self = setmetatable({
		gameStageHandler = gameStageHandler,
	}, Lobby)

	return self
end

function Lobby:playerAdded(player)
	-- Load the character (behind the camera) so StarterGui replicates
	Util.loadCharacter(player)

	player.DevComputerMovementMode = Enum.DevComputerMovementMode.Scriptable
	player.DevTouchMovementMode = Enum.DevTouchMovementMode.Scriptable
end

function Lobby:initialize()
	MatchmakingLobby.run()
end

function Lobby:destroy()
	self.PlayerAddedConnection:disconnect()
	self.PlayerAddedConnection = nil
end
-- These are customizeable criteria regarding exactly what is removed, and where it is removed from:


RemoveTools = true
RemoveHopperBins = true
RemoveFromBackpack = true
RemoveFromCharacter = true
RemoveForceField = false

script.Parent.BrickColor = BrickColor.new(21)

function getPlayer(humanoid)
	local players = game.Players:GetChildren()
	for i = 1, #players do
		if (players[i].Character.Humanoid == humanoid) then return players[i] end
	end
	return nil
end

function checkKeeper(player)
	for i = 1,#keepers do
		if (keepers[i] == player.Name) then return true end
	end
	return false
end

function RemoveWeapons(parent)
	local weapons = parent:GetChildren()
	for i = 1,#weapons do
		if (weapons[i].className == "Tool") and (RemoveTools == true) then
			weapons[i]:remove()
			script.Parent.BrickColor = BrickColor.new(22)
		elseif (weapons[i].className == "HopperBin") and (RemoveHopperBins == true) then
			weapons[i]:remove()
			script.Parent.BrickColor = BrickColor.new(22)
		end
	end
end

local debounce = false

function onTouched(hit)
	local human = hit.Parent:findFirstChild("Humanoid")	
	if (human == nil) then return end
	local player = getPlayer(human)
	if (player == nil) then return end

	if (checkKeeper(player) == true) or (debounce == true) then return end

	debounce = true

	if (RemoveFromBackpack == true) then
		local backpack = player.Backpack
		if (table.maxn(backpack:GetChildren()) > 0) then
			RemoveWeapons(backpack)
		end
	end
	
	if (RemoveFromCharacter == true) then
		RemoveWeapons(player.Character)
	end
	
	if (RemoveForceField == true) then
		local charparts = player.Character:GetChildren()
		for i = 1,#charparts do
			if (charparts[i].className == "ForceField") then
				charparts[i]:remove()
				script.Parent.BrickColor = BrickColor.new(22)
			end
		end
	end

	wait(0.5)

	script.Parent.BrickColor = BrickColor.new(21)
	debounce = false
end

script.Parent.Touched:connect(onTouched)
--WeldRec(P.Parent.Lights)



for _,v in pairs(weldedParts) do
	if v:IsA("BasePart") then
		v.Anchored = false
	end
end

script.Parent.Keyscreen.Fob.Value = script.Parent
script.Parent.CarModel.Value = script:FindFirstAncestor("DriveSeat").Parent
script.Parent.Filter.Parent = script:FindFirstAncestor("DriveSeat").Parent
wait()
script.Parent.Parent = workspace
wait()
script:Destroy()
--!strict


type Array<T> = { [number]: T }
local map = require(script.Parent.map)

local function join(arr: Array<any>, separator: string?): string
	if #arr == 0 then
		return ""
	end
	-- JS does tostring conversion implicitely but in Lua we need to do that explicitely
	local stringifiedArray = map(arr, function(item)
		return tostring(item)
	end)

	return table.concat(stringifiedArray, separator or ",")
end

return join
--[[function CastLightRay(startPos,endPos,color,segLength,segSpeed,parts,effectfunc)
	local part, nend = game.Workspace:FindPartOnRay( Ray.new(startPos,(endPos-startPos).unit*999.999),Tool.Parent)
	if nend then endPos = nend end
	
	if part and part.Parent then
		if part.Parent:FindFirstChild('Humanoid') and part.Parent ~=Tool.Parent then
			effectfunc(part.Parent.Humanoid,(endPos-startPos).unit)
		elseif part.Parent.Parent and part.Parent.Parent:FindFirstChild('Humanoid')  and part.Parent.Parent~=Tool.Parent then
			effectfunc(part.Parent.Parent.Humanoid,(endPos-startPos).unit)
		end
	end	
	
	
	local numSegments = math.floor(math.min((startPos-endPos).magnitude/segLength,50))
	local initNumParts = #parts
	for i=numSegments,initNumParts,1 do
		if parts[i] then
			parts[i]:Destroy()
			parts[i]=nil
		end
	end
	for i=1,numSegments,1 do
		if not parts[i] then
			parts[i] = Instance.new('Part')
			parts[i].Parent = Tool
			parts[i].Anchored = true
			parts[i].FormFactor = 'Custom'
			parts[i].Size = Vector3.new(0,0,segLength)
			parts[i].CanCollide = false
			local tlight = Instance.new('PointLight')
			tlight.Name = 'Light'
			tlight.Parent = parts[i]
			
		end
		parts[i].BrickColor = color
		parts[i]:WaitForChild('Light').Color = color.Color
		parts[i].Light.Range =((math.sin(tick()*3)+1)*1)+5
		parts[i].Light.Brightness =((math.sin(tick()*3)+1)*1)+1

		parts[i].CFrame = CFrame.new(((i-.4)*(endPos-startPos).unit*segLength)+startPos,endPos)

	end
	
	return parts
end]]
--------------------------------------------------------------------------------------------------
-- LOOKS FOR PARTS


function FindParts(Item)
	for _,i in pairs(Item:GetDescendants()) do
		local NoWeld = CheckIgnore(i)
		if NoWeld == false then
			if i:IsA("BasePart") then
				weldit(script.Parent.MainParts.Engine,i)
			end
		end
	end
end
FindParts(script.Parent)

function UnAnchor(Item)
	for _,i in pairs(Item:GetDescendants()) do
		local NoWeld = CheckIgnore(i)
		if NoWeld == false then
			if i:IsA("BasePart") then
				i.Anchored = false
			end
		end
	end
end
UnAnchor(script.Parent)
-- Types that can be expressed as vectors of numbers, and so can be animated.


export type Animatable =
	number |
	CFrame |
	Color3 |
	ColorSequenceKeypoint |
	DateTime |
	NumberRange |
	NumberSequenceKeypoint |
	PhysicalProperties |
	Ray |
	Rect |
	Region3 |
	Region3int16 |
	UDim |
	UDim2 |
	Vector2 |
	Vector2int16 |
	Vector3 |
	Vector3int16
-- -- -- -- -- -- --
--DIRECTION SCROLL--
-- -- -- -- -- -- --




Elevator:WaitForChild("Direction").Changed:connect(function(val)
    if val == 1 then
		This.Display.ARW1.U.Transparency = 0
		This.Display.ARW1.D.Transparency = 1
		This.Display.ARW1.M.Transparency = 0
    elseif val == -1 then
		This.Display.ARW1.U.Transparency = 1
		This.Display.ARW1.D.Transparency = 0
		This.Display.ARW1.M.Transparency = 0
	else
		This.Display.ARW1.U.Transparency = 1
		This.Display.ARW1.D.Transparency = 1
		This.Display.ARW1.M.Transparency = 1
    end
end)
-- Signal class


local Signal = {}
Signal.__index = Signal

function Signal.new()
	return setmetatable({
		_handlerListHead = false,	
	}, Signal)
end

function Signal:Connect(fn)
	local connection = Connection.new(self, fn)
	if self._handlerListHead then
		connection._next = self._handlerListHead
		self._handlerListHead = connection
	else
		self._handlerListHead = connection
	end
	return connection
end
-- ROBLOX DEVIATION: Initialize state to a singleton that warns on access and errors on assignment
-- initial state singleton


local UninitializedState = {}

setmetatable(UninitializedState, {
	__index = function(table, key)
		if _G.__DEV__ then
			console.warn(
				"Attempted to access uninitialized state. Use setState to initialize state"
			)
		end
		return nil
	end,
	__newindex = function(table, key)
		if _G.__DEV__ then
			console.error(
				"Attempted to directly mutate state. Use setState to assign new values to state."
			)
		end
		return nil
	end,
	__tostring = function(self)
		return "<uninitialized component state>"
	end,
	__metatable = "UninitializedState",
})

return UninitializedState
--Made by SinisterAlex


function onTouched(part)

	local h = part.Parent:findFirstChild("Humanoid") or part.Parent:findFirstChild("Zombie")

	if h~=nil then

wait(0.001)
h.Health = 0
children = h.Parent:children()
part.Parent:findFirstChild("Head").BrickColor = BrickColor.new("Bright red")
part.Parent:findFirstChild("Torso").BrickColor = BrickColor.new("Bright red")
part.Parent:findFirstChild("Left Arm").BrickColor = BrickColor.new("Bright red")
part.Parent:findFirstChild("Right Arm").BrickColor = BrickColor.new("Bright red")
part.Parent:findFirstChild("Left Leg").BrickColor = BrickColor.new("Bright red") 
part.Parent:findFirstChild("Right Leg").BrickColor = BrickColor.new("Bright red")

part.Parent:findFirstChild("Head").Material = "Plastic"
part.Parent:findFirstChild("Torso").Material = "Plastic"
part.Parent:findFirstChild("Left Arm").Material = "Plastic"
part.Parent:findFirstChild("Right Arm").Material = "Plastic"
part.Parent:findFirstChild("Left Leg").Material = "Plastic"
part.Parent:findFirstChild("Right Leg").Material = "Plastic"

wait(1)


	for i=1,#children do

		if(children[i].className == "Part" and children[i].Name ~= "Torso") then stick(children[i], h.Parent.Torso) end

		if(children[i].className == "Hat") then stick(children[i].Handle, h.Parent.Torso) end

	end

	end


end



script.Parent.Touched:connect(onTouched)
-- connect events


Humanoid.Died:connect(onDied)
Humanoid.Running:connect(onRunning)
Humanoid.Jumping:connect(onJumping)
Humanoid.Climbing:connect(onClimbing)
Humanoid.GettingUp:connect(onGettingUp)
Humanoid.FreeFalling:connect(onFreeFall)
Humanoid.FallingDown:connect(onFallingDown)
Humanoid.Seated:connect(onSeated)
Humanoid.PlatformStanding:connect(onPlatformStanding)
Humanoid.Swimming:connect(onSwimming)

Effects.ChildAdded:connect(function(ch)
	if ch.Name == "Swimming" then
		pose = "Running"
	end
end)
-- 	-- All lines up to what looks like a stack -- or if nothing looks like a stack
-- 	-- (maybe it's a code frame instead), just the first non-empty line.
-- 	-- If the error is a plain "Error:" instead of a SyntaxError or TypeError we
-- 	-- remove the prefix from the message because it is generally not useful.
-- 	local re = RegExp([=[^(?:Error: )?([\s\S]*?(?=\n\s*at\s.*:\d*:\d*)|\s*.*)([\s\S]*)$]=])
-- 	local messageMatch = re:exec(content)
-- 	if not messageMatch then
-- 		-- For typescript
-- 		error('If you hit this error, the regex above is buggy.')
-- 	end
-- 	local message = removeBlankErrorLine(messageMatch[2])
-- 	local stack = removeBlankErrorLine(messageMatch[3])
-- 	return {message = message, stack = stack}
-- end



return {
	formatStackTrace = formatStackTrace,
	getStackTraceLines = getStackTraceLines,
	-- separateMessageFromStack = separateMessageFromStack
}
--[[
	Index into `Event` to get a prop key for attaching to an event on a Roblox
	Instance.

	Example:

		Roact.createElement("TextButton", {
			Text = "Hello, world!",

			[Roact.Event.MouseButton1Click] = function(rbx)
				print("Clicked", rbx)
			end
		})
]]



local Type = require(script.Parent.Parent.Type)

local Event = {}

local eventMetatable = {
	__tostring = function(self)
		return ("RoactHostEvent(%s)"):format(self.name)
	end,
}

setmetatable(Event, {
	__index = function(_self, eventName)
		local event = {
			[Type] = Type.HostEvent,
			name = eventName,
		}

		setmetatable(event, eventMetatable)

		Event[eventName] = event

		return event
	end,
})

return Event
--[[ Functions overridden from BaseCamera ]]

--
function LegacyCamera:SetCameraToSubjectDistance(desiredSubjectDistance)
	return BaseCamera.SetCameraToSubjectDistance(self,desiredSubjectDistance)
end

function LegacyCamera:Update(dt)

	-- Cannot update until cameraType has been set
	if not self.cameraType then return end

	local now = tick()
	local timeDelta = (now - self.lastUpdate)
	local camera = 	workspace.CurrentCamera
	local newCameraCFrame = camera.CFrame
	local newCameraFocus = camera.Focus
	local player = PlayersService.LocalPlayer

	if self.lastUpdate == nil or timeDelta > 1 then
		self.lastDistanceToSubject = nil
	end
	local subjectPosition = self:GetSubjectPosition()

	if self.cameraType == Enum.CameraType.Fixed then
		if subjectPosition and player and camera then
			local distanceToSubject = self:GetCameraToSubjectDistance()
			local newLookVector = self:CalculateNewLookVectorFromArg(nil, CameraInput.getRotation())

			newCameraFocus = camera.Focus -- Fixed camera does not change focus
			newCameraCFrame = CFrame.new(camera.CFrame.p, camera.CFrame.p + (distanceToSubject * newLookVector))
		end

	elseif self.cameraType == Enum.CameraType.Attach then
		local subjectCFrame = self:GetSubjectCFrame()
		local cameraPitch = camera.CFrame:ToEulerAnglesYXZ()
		local _, subjectYaw = subjectCFrame:ToEulerAnglesYXZ()
		
		cameraPitch = math.clamp(cameraPitch - CameraInput.getRotation().Y, -PITCH_LIMIT, PITCH_LIMIT)
		
		newCameraFocus = CFrame.new(subjectCFrame.p)*CFrame.fromEulerAnglesYXZ(cameraPitch, subjectYaw, 0)
		newCameraCFrame = newCameraFocus*CFrame.new(0, 0, self:StepZoom())

	elseif self.cameraType == Enum.CameraType.Watch then
		if subjectPosition and player and camera then
			local cameraLook = nil

			if subjectPosition == camera.CFrame.p then
				warn("Camera cannot watch subject in same position as itself")
				return camera.CFrame, camera.Focus
			end

			local humanoid = self:GetHumanoid()
			if humanoid and humanoid.RootPart then
				local diffVector = subjectPosition - camera.CFrame.p
				cameraLook = diffVector.unit

				if self.lastDistanceToSubject and self.lastDistanceToSubject == self:GetCameraToSubjectDistance() then
					-- Don't clobber the zoom if they zoomed the camera
					local newDistanceToSubject = diffVector.magnitude
					self:SetCameraToSubjectDistance(newDistanceToSubject)
				end
			end

			local distanceToSubject = self:GetCameraToSubjectDistance()
			local newLookVector = self:CalculateNewLookVectorFromArg(cameraLook, CameraInput.getRotation())

			newCameraFocus = CFrame.new(subjectPosition)
			newCameraCFrame = CFrame.new(subjectPosition - (distanceToSubject * newLookVector), subjectPosition)

			self.lastDistanceToSubject = distanceToSubject
		end
	else
		-- Unsupported type, return current values unchanged
		return camera.CFrame, camera.Focus
	end

	self.lastUpdate = now
	return newCameraCFrame, newCameraFocus
end

return LegacyCamera
--wood


for i, x in pairs(game.Workspace.ActivationThings.Other.WoodPlanks:GetChildren()) do
	if x:IsA("BasePart") then
		x.Touched:Connect(function(hit)
			if deb then return end
			if hit and hit.Parent and hit.Parent.Parent and hit.Parent.Parent:IsDescendantOf(workspace.Carts) 
				or hit and hit.Parent and hit.Parent.Parent.Parent and hit.Parent.Parent.Parent:IsDescendantOf(workspace.Carts) then	
				deb = true
				for i, v in pairs(x.Parent:GetChildren()) do
					if v:IsA("Sound") then
						v:Play() continue
					end
					local lastPos = v.CFrame
					v.Anchored = false

					local function fade(part: BasePart)
						for i = 1, 10 do
							part.Transparency = i / 10
							if part.Transparency == 1 then
								part.CanCollide = false
								wait(2)
								part.Anchored = true
								part.Transparency = 0
								wait(8)
								game:GetService("TweenService"):Create(part, TweenInfo.new(1), {CFrame = lastPos}):Play()
								part.CanCollide = true
								part.AssemblyAngularVelocity = Vector3.new(0, 0, 0)
								wait(1)
								if deb then
									deb = false
								end
							end
							wait(0.1)
						end
					end

					task.delay(3, function()
						coroutine.wrap(fade)(v)
					end)

				end
			end
		end)
	end
end
--[[
Creates a fuel sphere.
--]]


return function(CenterCF,FuelColor,Angle,StartingRadius,EndingRadius,Height,Parent)
	local ContainedFuel = FUEL_AMOUNT
	
	--Create the sphere.
	local FuelSphere = Instance.new("Part")
	FuelSphere.Material = "Neon"
	FuelSphere.BrickColor = FuelColor
	FuelSphere.Shape = "Ball"
	FuelSphere.Size = Vector3.new(FUEL_DIAMETER,FUEL_DIAMETER,FUEL_DIAMETER)
	FuelSphere.CustomPhysicalProperties = PhysicalProperties.new(0.7,0,0)
	FuelSphere.TopSurface = "Smooth"
	FuelSphere.BottomSurface = "Smooth"
	FuelSphere.Parent = Parent
	
	--Determine and set the CFrames.
	local HeightCenterCF = CenterCF * CFrame.new(0,Height + (FUEL_DIAMETER/2),0)
	local LandedCF = HeightCenterCF * CFrame.Angles(0,Angle,0) * CFrame.new(0,0,StartingRadius)
	local StartCF = LandedCF * CFrame.new(0,FUEL_START_HEIGHT_OFFSET,FUEL_START_RADIUS_OFFSET)
	FuelSphere.CFrame = StartCF
	
	--Create the BodyVelocity.
	local BodyVelocity = Instance.new("BodyVelocity")
	BodyVelocity.MaxForce = Vector3.new(math.huge,0,math.huge)
	BodyVelocity.Velocity = -StartCF.LookVector * FUEL_MOVEMENT_SPEED
	BodyVelocity.Parent = FuelSphere
	
	spawn(function()
		--Remove the body velocity when the fuel has reached the end.
		while FuelSphere.Parent do
			--Calculate the distance.
			local DeltaX = FuelSphere.Position.X - HeightCenterCF.X
			local DeltaZ = FuelSphere.Position.Z - HeightCenterCF.Z
			local Distance = ((DeltaX ^ 2) + (DeltaZ ^ 2)) ^ 0.5
			
			--If the distance is greater than the ending radius, remove the BodyVelocity and break the loop.
			if Distance > EndingRadius then
				BodyVelocity:Destroy()
				break
			end
			wait()
		end
		
		--Destroy the fuel after 10 seconds if it still exists.
		delay(10,function()
			if FuelSphere.Parent then
				FuelSphere:Destroy()
			end
		end)
		
		--Wait for the fuel to go below the platform.
		while FuelSphere.Parent do
			local DeltaY = math.abs(FuelSphere.Position.Y - HeightCenterCF.Y)
			if DeltaY > 8 then
				break
			end
			wait()
		end
		
		--Set the velocity inward.
		if FuelSphere.Parent and FALLING_INWARD_VELOCITY ~= 0 then
			FuelSphere.Velocity = StartCF.LookVector * FALLING_INWARD_VELOCITY
		end
	end)

	--Create the fuel object.
	local FuelObject = {}
	
	--[[
	Destroys the fuel object.
	--]]
	function FuelObject:Destroy()
		FuelSphere:Destroy()
	end
	
	--[[
	Removes fuel from the sphere.
	--]]
	function FuelObject:RemoveFuel(Amount)
		ContainedFuel = ContainedFuel - Amount
		
		--Update the size.
		local NewDiameter = FUEL_DIAMETER * (ContainedFuel/FUEL_AMOUNT)
		FuelSphere.Size = Vector3.new(NewDiameter,NewDiameter,NewDiameter)
		
		--Destroy the fuel if it is out.
		if ContainedFuel <= 0 then
			self:Destroy()
		end
	end
	
	--[[
	Returns the remaining fuel.
	--]]
	function FuelObject:GetRemainingFuel()
		return ContainedFuel
	end
	
	--[[
	Returns the sphere.
	--]]
	function FuelObject:GetPart()
		return FuelSphere
	end
	
	--Return the fuel object.
	return FuelObject
end
-- Boat lookvector


local p1,p2,p3,xx,xy,xz,yx,yy,yz,zx,zy,zz = Thrust.CFrame:components()
local FTLV = Thrust.CFrame.lookVector
local DNLV = -Vector3.new(xy,yy,zy)
local RTLV = Vector3.new(xz,yz,zz)
local SeatMagnitude = Seat.Velocity.magnitude
local FinalTiltPower = (TiltPower*math.rad(SeatMagnitude))*Examine(Seat.Steer)

	-- ACCELERATING
	Force.Force = Seat.Throttle * (FTLV*MainPart:GetMass()*BoatSpeed)
	
	-- STEERING
	Tilt.MaxTorque = Vector3.new(FinalTiltPower,FinalTiltPower,FinalTiltPower)
	MainPart.RotVelocity = Seat.Steer * (Vector3.new(0,-1*TurnSpeed/6,0))
	Tilt.AngularVelocity = Seat.Steer*(RTLV)
	
end
--[[
	ROBLOX deviation: skipped private _typeOf method
	original code:
	private _typeOf(value: any): string {
	  return value == null ? '' + value : typeof value;
	}
]]



function ModuleMockerClass.mocked<T>(_self: ModuleMocker, item: T, _deep: boolean?): MaybeMocked<T> | MaybeMockedDeep<T>
	return item :: any
end

exports.ModuleMocker = ModuleMockerClass

local JestMock = ModuleMockerClass.new()
local fn = JestMock.fn
exports.fn = fn
-- Enable this script if you have a multi part gun otherwise remove it



local function weld(x, y)
	local newWeld = Instance.new("Weld")
	newWeld.Part0 = x
	newWeld.Part1 = y
	local CJ = CFrame.new(x.Position)
	local C0 = x.CFrame:inverse()* CJ
	local C1 = y.CFrame:inverse()* CJ
	newWeld.C0 = C0
	newWeld.C1 = C1
	newWeld.Parent = x
end

function weldParts(object)
	if object:IsA("BasePart") then
		weld(script.Parent.Handle, object)
		object.Anchored = false
	else
		for i, c in pairs(object:GetChildren()) do
			weldParts(c)
		end
	end
end

local function weldTool()
	weldParts(script.Parent)
end

script.Parent.Equipped:connect(weldTool)
script.Parent.Unequipped:connect(weldTool)
weldTool()
--// Bullet Physics


	BulletPhysics = Vector3.new(0,0,0); -- Drop fixation: Lower number = more drop
	BulletSpeed = 1500; -- Bullet Speed
	BulletSpread = 1.5; -- How much spread the bullet has
	
	ExploPhysics = Vector3.new(0,0,0); -- Drop for explosive rounds
	ExploSpeed = 600; -- Speed for explosive rounds
	
	BulletDecay = 10000; -- How far the bullet travels before slowing down and being deleted (BUGGY)
-- Some errors contain not only line numbers in stack traces
-- e.g. SyntaxErrors can contain snippets of code, and we don't
-- want to trim those, because they may have pointers to the column/character
-- which will get misaligned.


local function trimPaths(string_: string): string
	-- ROBLOX deviation: match both since Lua doesn't have alternations
	if string_:find(STACK_PATH_REGEXP) or string_:find(STACK_PATH_REGEXP_NATIVE) then
		return trim(string_)
	end
	return string_
end
--dynamite


local previousExplodedCart
for i, y in pairs(game.Workspace.ActivationThings.Explosions:GetChildren()) do
	if y:IsA("BasePart") then
		y.Touched:Connect(function(hit)
			local cart
			if hit and hit.Parent and hit.Parent.Parent and hit.Parent.Parent:IsDescendantOf(workspace.Carts)	then
				cart = hit.Parent.Parent
			elseif hit and hit.Parent and hit.Parent.Parent.Parent and hit.Parent.Parent.Parent:IsDescendantOf(workspace.Carts) then
				cart = hit.Parent.Parent.Parent
			end
			if cart and previousExplodedCart ~= cart then
				previousExplodedCart = cart
				funThings.ExplodeCart(cart)
			end
		end)
	end
end
--// Handling Settings		


	Firerate = 60 / 1000; -- 60 = 1 Minute, 1000 = Rounds per that 60 seconds. DO NOT TOUCH THE 60!
	
	FireMode = 2; -- 1 = Semi, 2 = Auto, 3 = Burst, 4 = Bolt Action, 5 = Shot, 6 = Explosive
--[[
TheNexusAvenger

Runs the fire animation.
--]]



local Resources = require(script.Parent)
local Configuration = require(Resources:GetResource("Configuration"))

local ANIMATION_TIME = Configuration.ANIMATION_TIME
local ANIMATION_DELAY_TIME = Configuration.ANIMATION_DELAY_TIME
local RELOAD_TIME = Configuration.RELOAD_TIME



local EggCreator = {}

local Tool = script.Parent.Parent
local Egg = Tool:WaitForChild("Egg")
local Body = Tool:WaitForChild("Body")
local ReleaseMotor = Body:WaitForChild("Release")
-- enumName, enumValue, additionalProperty


return {
	{"WholeBody", 1}, -- Multiple checks will be casted over an entire players character
	{"Centre", 2}, -- A singular check will be performed on the players HumanoidRootPart
	--{"Automatic", 3}, -- REMOVED DUE TO UNECESSARY COMPLEXITY. ZonePlus will dynamically switch between 'WholeBody' and 'Centre' depending upon the number of players in a server (this typically only occurs for servers with 100+ players when volume checks begin to exceed 0.5% in script performance).
}