Pinkstack/roblox-luau-corpus-text huggingface dataset:
--edit the below function to execute code when this response is chosen OR this prompt is shown
--player is the player speaking to the dialogue, and dialogueFolder is the object containing the dialogue data


return function(player, dialogueFolder)
	local plrData = require(game.ReplicatedStorage.Source.Modules.Util):GetPlayerData(player)
	plrData.Money.Gold.Value = plrData.Money.Gold.Value - 5
	plrData.Character.Injuries.Burned.Value = false
end
--[[Drivetrain]]

	
	Tune.Config			= "FWD"		--"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	= 50		-- 1 - 100%
	Tune.RDiffLockThres	= 50		-- 0 - 100%
	Tune.CDiffSlipThres	= 50		-- 1 - 100%				[AWD Only]
	Tune.CDiffLockThres	= 50		-- 0 - 100%				[AWD Only]
	
	--Traction Control Settings
	Tune.TCSEnabled		= true		-- Implements TCS
	Tune.TCSThreshold	= 20		-- Slip speed allowed before TCS starts working (in SPS)
	Tune.TCSGradient	= 4		-- Slip speed gradient between 0 to max reduction (in SPS)
	Tune.TCSLimit		= 10		-- Minimum amount of torque at max reduction (in percent)
--[[
    Gets the os.date of specified os.time, and then returns a formatted string of human readable data. If no format is
    specified, the string will fall back on the default format. Create formats by appending os.date keys with $.
]]


function ReadableDate.fromTime(time, format)
	local output = format or DEFAULT_FORMAT
	local dateTable = os.date("*t", time)

	for type, amount in pairs(dateTable) do
		output = string.gsub(output, string.format("$%s", type), tostring(amount))
	end

	return output
end

return ReadableDate
--------------------------------------------------------------------------



local _WHEELTUNE = {
																		--[[	
			SS6 Presets
	[Eco]		
		WearSpeed = 1,
		TargetFriction = .7,
		MinFriction = .1,
	[Road]		
		WearSpeed = 2,
		TargetFriction = .7,
		MinFriction = .1,
	[Sport]		
		WearSpeed = 3,
		TargetFriction = .79,
		MinFriction = .1,											]]

	TireWearOn 		= true	,
	
	--Friction and Wear
	FWearSpeed		= .4	,
	FTargetFriction	= .5	,
	FMinFriction 	= .1	,
	
	RWearSpeed		= .4	,
	RTargetFriction	= .7	,
	RMinFriction	= .1	,
	
	--Tire Slip
	TCSOffRatio		= 1/3	,
	WheelLockRatio	= 1/2	,	--SS6 Default = 1/4
	WheelspinRatio	= 1/1.1	,	--SS6 Default = 1/1.2
	
	--Wheel Properties
	FFrictionWeight	= 1		,	--SS6 Default = 1
	RFrictionWeight	= 1		,	--SS6 Default = 1
	FLgcyFrWeight	= 10	,
	RLgcyFrWeight	= 10	,
	
	FElasticity		= .5		,	--SS6 Default = .5
	RElasticity		= .5		,	--SS6 Default = .5
	FLgcyElasticity	= 0		,
	RLgcyElasticity	= 0		,
	
	FElastWeight	= 1		,	--SS6 Default = 1
	RElastWeight	= 1		,	--SS6 Default = 1
	FLgcyElWeight	= 10	,
	RLgcyElWeight	= 10	,
	
	--Wear Regen
	RegenSpeed		= 3.6		--SS6 Default = 3.6
}
--[[Run]]



	--Print Version
	local ver=require(car["A-Chassis Tune"].README)
	print("//INSPARE: AC6 Loaded - Build "..ver)
	
	--Runtime Loop
	while wait() do
		--Steering
		Steering()
		
		--Powertrain
		Engine()
		
		--Flip
		if _Tune.AutoFlip then Flip() end
		
		--Update External Values
		_IsOn = car.DriveSeat.IsOn.Value
		_InControls = script.Parent.ControlsOpen.Value
		script.Parent.Values.Gear.Value = _CGear
		script.Parent.Values.RPM.Value = _RPM
		script.Parent.Values.Horsepower.Value = _HP
		script.Parent.Values.Torque.Value = _HP * 5250 / _RPM
		script.Parent.Values.TransmissionMode.Value = _TMode
		script.Parent.Values.Throttle.Value = _GThrot
		script.Parent.Values.Brake.Value = _GBrake
		script.Parent.Values.SteerC.Value = _GSteerC*(1-math.min(car.DriveSeat.Velocity.Magnitude/_Tune.SteerDecay,1-(_Tune.MinSteer/100)))
		script.Parent.Values.SteerT.Value = _GSteerT
		script.Parent.Values.PBrake.Value = _PBrake
		script.Parent.Values.TCS.Value = _TCS
		script.Parent.Values.TCSActive.Value = _TCSActive
		script.Parent.Values.ABS.Value = _ABS
		script.Parent.Values.ABSActive.Value = _ABSActive
		script.Parent.Values.MouseSteerOn.Value = _MSteer
		script.Parent.Values.Velocity.Value = car.DriveSeat.Velocity
		
	end
--[[**
	Gets whatever object is stored with the given index, if it exists. This was added since Maid allows getting the task using `__index`.
	@param [t:any] Index The index that the object is stored under.
	@returns [t:any?] This will return the object if it is found, but it won't return anything if it doesn't exist.
**--]]


function Janitor.__index:Get(Index)
	local This = self[IndicesReference]
	if This then
		return This[Index]
	end
end
------------------
------------------




while true do
	local p = game.Players:GetChildren()
	for i = 1,#p do
		if p[i].Character~=nil then
			if p[i].Character:findFirstChild("Torso")~=nil then
				if (p[i].Character.Torso.Position - script.Parent.Torso.Position).magnitude < 5 then
					local anim = Instance.new("StringValue")
					anim.Value = possibleAnims[math.random(1, #possibleAnims)]
					anim.Name = "Axe"
					anim.Parent = script.Parent.LinkedSword
				end
			end
		end
	end
	wait(0.5)
end
-- Making Motor3D



local Joint = script.Parent.LimbsJoint

Joint.LeftLegAnimation.LeftL.Part1 = Joint.LeftLegAnimation
Joint.RightLegAnimation.RightL.Part1 = Joint.RightLegAnimation

Joint.LeftLegAnimation.LeftL.Part0 = script.Parent.UpperTorso
Joint.RightLegAnimation.RightL.Part0 = script.Parent.UpperTorso

Joint.LeftArmAnimation.LeftA.Part1 = Joint.LeftArmAnimation
Joint.RightArmAnimation.RightA.Part1 = Joint.RightArmAnimation

Joint.LeftArmAnimation.LeftA.Part0 = script.Parent.UpperTorso
Joint.RightArmAnimation.RightA.Part0 = script.Parent.UpperTorso
--!strict


export type WeakMap<K, V> = {
	-- method definitions
	get: (self: WeakMap<K, V>, K) -> V,
	set: (self: WeakMap<K, V>, K, V) -> WeakMap<K, V>,
	has: (self: WeakMap<K, V>, K) -> boolean,
}

type WeakMapPrivate<K, V> = {
	_weakMap: { [K]: V },
	-- method definitions
	get: (self: WeakMapPrivate<K, V>, K) -> V,
	set: (self: WeakMapPrivate<K, V>, K, V) -> WeakMapPrivate<K, V>,
	has: (self: WeakMapPrivate<K, V>, K) -> boolean,
}
type WeakMap_Statics = {
	new: <K, V>() -> WeakMap<K, V>,
}

local WeakMap: WeakMapPrivate<any, any> & WeakMap_Statics = {} :: any;
(WeakMap :: any).__index = WeakMap

function WeakMap.new<K, V>(): WeakMap<K, V>
	local weakMap = setmetatable({}, { __mode = "k" })
	return setmetatable({ _weakMap = weakMap }, WeakMap) :: any
end

function WeakMap:get(key)
	return self._weakMap[key]
end

function WeakMap:set(key, value)
	self._weakMap[key] = value
	return self
end

function WeakMap:has(key): boolean
	return self._weakMap[key] ~= nil
end

return WeakMap :: WeakMap<any, any> & WeakMap_Statics
--<DON'T TOUCH THE SCRIPT UNLESS YOU KNOW WHAT YOU ARE DOING!



local RS = game:GetService('ReplicatedStorage')
local TS = game:GetService('TweenService')

local Tool = script.Parent
local TextureArray = {}

local Activated = false
local Debounce = false
local Cooldown = 1
local Prop = nil
local LaughAnim = nil

Tool.Activated:Connect(function()
	if not Debounce then
		Debounce = true
		task.delay(Cooldown, function()
			Debounce = false
		end)
		
		local Character = Tool.Parent
		
		if not Activated then
			Activated = true
			
			LaughAnim = Character.Humanoid:LoadAnimation(RS.SkyV4.Laugh)
			LaughAnim:Play()
			Character.HumanoidRootPart.Anchored = true
			
			Prop = RS.SkyV4.Props.Wings:Clone()
			Prop.Parent = Character
	 
			local Attachment = Instance.new('Attachment')
			Attachment.Parent = Character.HumanoidRootPart
			Attachment.Position = Vector3.new(0,-2.5,0)

			local Wave = RS.SkyV4.Effects.Wave:Clone()
			Wave.Parent = Attachment

			local Smoke = RS.SkyV4.Effects.Smoke:Clone()
			Smoke.Parent = Character.HumanoidRootPart

			local Pixel = RS.SkyV4.Effects.Pixel:Clone()
			Pixel.Parent = Character.HumanoidRootPart

			local Laugh = RS.SkyV4.Sound.Laugh:Clone()
			Laugh.Parent = Character.HumanoidRootPart

			local SmokeSound = RS.SkyV4.Sound.Smoke:Clone()
			SmokeSound.Parent = Character.HumanoidRootPart

			Laugh:Play()

			task.delay(1.6,function()
				Laugh:Destroy()
				task.wait(0.25)
				Character.HumanoidRootPart.Anchored = false
				LaughAnim:Stop()
			end)

			SmokeSound:Play()

			local Tween = TS:Create(SmokeSound, TweenInfo.new(1.5), {Volume = 0})
			Tween:Play()

			Tween.Completed:Connect(function()
				SmokeSound:Destroy()
			end)	

			Wave:Emit(2)
			Smoke:Emit(100)
			Pixel:Emit(50)

			for _, Item in ipairs(Character.Humanoid:GetAccessories()) do
				local Hair = Item.Handle:FindFirstChild("HairAttachment") ~= nil
				if Hair then
					TextureArray[Item] = {TextureID = Item.Handle.TextureID, Color = Item.Handle.Color, Material = Item.Handle.Material}
					Item.Handle.Color = Color3.fromRGB(255, 255, 0)
					Item.Handle.TextureID = ''
					Item.Handle.Material = Enum.Material.Neon
				end
			end
			
		elseif Activated then
			Activated = false
			
			local Tween = TS:Create(Prop.Handle, TweenInfo.new(0.5), {Transparency = 1})
			Tween:Play()

			Tween.Completed:Connect(function()
				Prop:Destroy()
			end)
			
			for _, Item in ipairs(Character.Humanoid:GetAccessories()) do
				local Hair = Item.Handle:FindFirstChild("HairAttachment") ~= nil
				if Hair then
					Item.Handle.Color = TextureArray[Item].Color
					Item.Handle.Material = TextureArray[Item].Material
					Item.Handle.TextureID = TextureArray[Item].TextureID
					TextureArray[Item] = nil
				end
			end
		end
	end
end)
--[=[
	Constructs a new Maid which will clean up when the brio dies.
	Will error if the Brio is dead.

	:::info
	Calling this while the brio is already dead will throw a error.
	:::

	```lua
	local brio = Brio.new("a")
	local maid = brio:ToMaid()
	maid:GiveTask(function()
		print("Cleaning up!")
	end)
	brio:Kill() --> Cleaning up!
	```

	@return Maid
]=]


function Brio:ToMaid()
	assert(self._values ~= nil, "Brio is dead")

	local maid = Maid.new()

	maid:GiveTask(self:GetDiedSignal():Connect(function()
		maid:DoCleaning()
	end))

	return maid
end
-- Also set this to true if you want the thumbstick to not affect throttle, only triggers when a gamepad is conected


local onlyTriggersForThrottle = false
local ZERO_VECTOR3 = Vector3.new(0,0,0)

local bindAtPriorityFlagExists, bindAtPriorityFlagEnabled = pcall(function()
	return UserSettings():IsUserFeatureEnabled("UserPlayerScriptsBindAtPriority")
end)
local FFlagPlayerScriptsBindAtPriority = bindAtPriorityFlagExists and bindAtPriorityFlagEnabled
---Strobe SCRIPT, DO NOT EDIT!---




for i,v in pairs(game.workspace.PLights:GetChildren()) do
	spawn(function()
		while true do
			wait(math.random())
			v.MLSelling.Dimmer:Invoke(180)
			wait(0.001)
			v.MLSelling.Dimmer:Invoke(0)
			
			

		end
	end)
end
--[[
	Manages batch updating of spring objects.
]]



local RunService = game:GetService("RunService")

local Package = script.Parent.Parent
local PubTypes = require(Package.PubTypes)
local Types = require(Package.Types)
local packType = require(Package.Animation.packType)
local springCoefficients = require(Package.Animation.springCoefficients)
local updateAll = require(Package.Dependencies.updateAll)
local logError = require(Package.Logging.logError)

type Set<T> = {[T]: any}
type Spring = Types.Spring<any>

local SpringScheduler = {}

local WEAK_KEYS_METATABLE = {__mode = "k"}
-- If you want to know how to retexture a hat, read this:  http://www.roblox.com/Forum/ShowPost.aspx?PostID=10502388










debounce = true

function onTouched(hit)
	if (hit.Parent:findFirstChild("Humanoid") ~= nil and debounce == true) then
		debounce = false
		h = Instance.new("Hat")
		p = Instance.new("Part")
		h.Name = "Handle"   -- It doesn't make a difference, but if you want to make your place in Explorer neater, change this to the name of your hat.
		p.Parent = h
		p.Position = hit.Parent:findFirstChild("Head").Position
		p.Name = "Handle" 
		p.formFactor = 0
		p.Size = Vector3.new(2, 2, 2) 
		p.BottomSurface = 0 
		p.TopSurface = 0 
		p.Locked = true 
		script.Parent.Mesh:clone().Parent = p
		h.Parent = hit.Parent
		h.AttachmentPos = Vector3.new(0, 0.300000012, 0.219999999) -- Change these to change the positiones of your hat, as I said earlier.
		wait(5)		debounce = true
	end
end

script.Parent.Touched:connect(onTouched)
--[[
	Returns the target CFrame for the camera while in Dead mode
]]


function CameraStateDead.getTargetCFrame(targetPart)
	local _, yaw, _ = targetPart.CFrame:toEulerAnglesYXZ()

	return CFrame.new(targetPart.CFrame.p) * CFrame.fromEulerAnglesYXZ(0, yaw, 0) * CFrame.new(0, 15, 10) * -- Offset
		CFrame.Angles(math.rad(-20), 0, 0) -- Rotation
end
--[=[
	Retrieves an attribute, and if it is nil, returns the default
	instead.
	@param instance Instance
	@param attributeName string
	@param default T?
	@return T?
]=]


function AttributeUtils.getAttribute(instance, attributeName, default)
	local value = instance:GetAttribute(attributeName)
	if value == nil then
		return default
	end

	return value
end
--// Commands
--// Highly recommended you disable Intellesense before editing this...


return function(Vargs)
	local server = Vargs.Server;
	local service = Vargs.Service;
	local Settings = server.Settings
	local Functions, Commands, Admin, Anti, Core, HTTP, Logs, Remote, Process, Variables, Deps
	
	local function Init()
		Functions = server.Functions;
		Admin = server.Admin;
		Anti = server.Anti;
		Core = server.Core;
		HTTP = server.HTTP;
		Logs = server.Logs;
		Remote = server.Remote;
		Process = server.Process;
		Variables = server.Variables;
		Commands = server.Commands;
		Deps = server.Deps;

		--// Automatic New Command Caching and Ability to do server.Commands[":ff"]
		setmetatable(Commands, {
			__index = function(self, ind)
				local targInd = Admin.CommandCache[ind:lower()]
				if targInd then
					return rawget(Commands, targInd)
				end
			end;

			__newindex = function(self, ind, val)
				rawset(Commands, ind, val)
				if val and type(val) == "table" and val.Commands and val.Prefix then
					for i,cmd in next,val.Commands do
						Admin.PrefixCache[val.Prefix] = true;
						Admin.CommandCache[(val.Prefix..cmd):lower()] = ind;
					end
				end
			end;
		})
		
		Logs:AddLog("Script", "Loading Command Modules...")
		
		--// Load command modules
		if server.CommandModules then
			for i,module in next,server.CommandModules:GetChildren() do
				local func = require(module)
				local ran,tab = pcall(func, Vargs, getfenv())
				
				if ran and tab and type(tab) == "table" then
					for ind,cmd in next,tab do
						Commands[ind] = cmd;
					end
					
					Logs:AddLog("Script", "Loaded Command Module: ".. module.Name)
				elseif not ran then
					warn("CMDMODULE ".. module.Name .. " failed to load:")
					warn(tostring(tab))
					Logs:AddLog("Script", "Loading Command Module Failed: ".. module.Name)
				end
			end
		end
		
		--// Cache commands
		Admin.CacheCommands();
		
		Logs:AddLog("Script", "Commands Module Initialized")
	end;

	server.Commands = {
		Init = Init;
	};
end
-- events



REMOTES.Kick.OnServerEvent:Connect(function(player, other)
	local squad	= GetSquad(other)
	
	if squad then
		if player.Name == squad.Leader.Value then
			LeaveSquad(other)
		end
	end
end)

REMOTES.SetLeader.OnServerEvent:Connect(function(player, other)
	local squad	= GetSquad(other)
	
	if squad then
		if player.Name == squad.Leader.Value then
			squad.Leader.Value	= other.Name
		end
	end
end)

REMOTES.ToggleQueue.OnServerEvent:connect(function(player)
	local squad	= GetSquad(player)
	
	if squad then
		if player.Name == squad.Leader.Value then
			if squad.Queue.Value == "Solo" then
				squad.Queue.Value	= "Squad"
			elseif squad.Queue.Value == "Squad" then
				if #squad.Players:GetChildren() <= 1 then
					squad.Queue.Value	= "Solo"
					squad.Fill.Value	= false
				end
			end
		end
	end
end)

REMOTES.ToggleFill.OnServerEvent:connect(function(player)
	local squad	= GetSquad(player)
	
	if squad then
		if player.Name == squad.Leader.Value then
			if squad.Queue.Value == "Solo" then
				squad.Fill.Value	= false
			else
				squad.Fill.Value	= not squad.Fill.Value
			end
		end
	end
end)


REMOTES.SendInvite.OnServerEvent:connect(function(from, to)
	local squad	= GetSquad(from)
	
	if squad.Leader.Value == from.Name then
		if #squad.Players:GetChildren() < MAX_SQUAD_SIZE then
			local success	= false
			pcall(function()
				response	= REMOTES.RespondToInvite:InvokeClient(to, from.Name)
			end)
			
			if response and from:IsDescendantOf(Players) then
				local squad	= GetSquad(from)
				if #squad.Players:GetChildren() < MAX_SQUAD_SIZE then
					AddPlayerToSquad(to, squad)
				end
			end
		end
	end
end)

REMOTES.Ready.OnServerEvent:connect(function(player, ready)
	local squad	= GetSquad(player)
	
	if squad then
		squad.Players[player.Name].Value	= ready
	end
end)

REMOTES.LeaveSquad.OnServerEvent:connect(function(player)
	LeaveSquad(player)
end)

Players.PlayerAdded:connect(function(player)
	local info		= player:GetJoinData()
	local squadName	= info.TeleportData
	
	PLAYER_DATA:WaitForChild(player.Name)
	
	if squadName then
		local currentSquad	= SQUADS:FindFirstChild(squadName)
		
		if currentSquad then
			if #currentSquad.Players:GetChildren() < MAX_SQUAD_SIZE then
				AddPlayerToSquad(player, currentSquad)
			else
				AddPlayerToSquad(player, CreateSquad())
			end
		else
			AddPlayerToSquad(player, CreateSquad(squadName))
		end
	else
		AddPlayerToSquad(player, CreateSquad())
	end
end)

Players.PlayerRemoving:connect(function(player)
	RemovePlayer(player)
end)
--[=[
	Accepts an array of Promises and returns a Promise that is resolved as soon as `count` Promises are resolved from the input array. The resolved array values are in the order that the Promises resolved in. When this Promise resolves, all other pending Promises are cancelled if they have no other consumers.

	`count` 0 results in an empty array. The resultant array will never have more than `count` elements.

	```lua
	local promises = {
		returnsAPromise("example 1"),
		returnsAPromise("example 2"),
		returnsAPromise("example 3"),
	}

	return Promise.some(promises, 2) -- Only resolves with first 2 promises to resolve
	```

	@param promises {Promise<T>}
	@param count number
	@return Promise<{T}>
]=]


function Promise.some(promises, amount)
	assert(type(amount) == "number", "Bad argument #2 to Promise.some: must be a number")

	return Promise._all(debug.traceback(nil, 2), promises, amount)
end
--functions


function pose1()
	local player = game.Players.LocalPlayer
	if (player == nil) then return end
	char = player.Character
	Rshoulder = char.Torso:findFirstChild("Right Shoulder")
	Lshoulder = char.Torso:findFirstChild("Left Shoulder")
	Rhip = char.Torso:findFirstChild("Right Hip")
	Lhip = char.Torso:findFirstChild("Left Hip")
	if (Rshoulder ~= nil) then Rshoulder.DesiredAngle = 0 end
	if (Lshoulder ~= nil) then Lshoulder.DesiredAngle = 0 end
	if (Rhip ~= nil) then Rhip.DesiredAngle = 0 end
	if (Lhip ~= nil) then Lhip.DesiredAngle = 0 end
end

function noanimate()
	local player = game.Players.LocalPlayer
	if (player == nil) then return end
	char = player.Character
	local Anim = char:findFirstChild("Animate")
	if (Anim ~= nil) then
		Anim.Parent = player
	end
end

function animate()
	local player = game.Players.LocalPlayer
	if (player == nil) then return end
	char = player.Character
	local Anim = player:findFirstChild("Animate")
	if (Anim ~= nil) then
		Anim.Parent = char
		wait()
		Rshoulder = char.Torso:findFirstChild("Right Shoulder")
		Lshoulder = char.Torso:findFirstChild("Left Shoulder")
		Rhip = char.Torso:findFirstChild("Right Hip")
		Lhip = char.Torso:findFirstChild("Left Hip")
		if (Rshoulder ~= nil) then
			Rshoulder.Parent = nil
			Rshoulder.Parent = char.Torso
		end
		if (Lshoulder ~= nil) then
			 Lshoulder.Parent = nil
			 Lshoulder.Parent = char.Torso
		end
		if (Rhip ~= nil) then
			 Rhip.Parent = nil
			 Rhip.Parent = char.Torso
		end
		if (Lhip ~= nil) then
			 Lhip.Parent = nil
			 Lhip.Parent = char.Torso end
		end
end

function FalconPUUUNCH(mouse)
	local player = game.Players.LocalPlayer
	if (player == nil) then return end
	char = player.Character
	if (punchload == false) then
		Rarm = char:findFirstChild("Right Arm")
		Torso = char.Torso
		Rshoulder = Torso:findFirstChild("Right Shoulder")
		if (Rarm ~= nil) and (Rshoulder ~= nil) then
			punchload = true
			mouse.Icon = "rbxasset://textures\\GunWaitCursor.png"
			noanimate()
			pose1()
			Rshoulder.MaxVelocity = 1
			Rshoulder.DesiredAngle = 0
			wait(0.5)
			hurtc = hurt:clone()
			hurtc.Disabled = false
			hurtc.Parent = Rarm
			hurtc.Owner.Value = player.Name
			Rshoulder.DesiredAngle = 2
			wait(0.1)
			Rshoulder.MaxVelocity = 0.1
			wait(1)
			while hurtc.Enabled.Value == true do
				wait(0.1)
			end
			hurtc:remove()
			animate()
			punchload = false
			mouse.Icon = "rbxasset://textures\\GunCursor.png"
		end
	end
end
-- ================================================================================
-- PUBLIC FUNCTIONS
-- ================================================================================


function GuiController:UpdateSpeed()
	
end -- GuiController:UpdateSpeed()


function GuiController:Start(s)
	speeder = s
	primary = speeder.PrimaryPart
	engine = speeder.engine
	
	BoostSetup()
end -- GuiController:Start()


function GuiController:Stop()
	
end -- GuiController:Stop()
--------------------------------------------------------------------------------



local function SetWaterState(ReadyToUse: boolean)
	for _, WaterPart in Fountain.Water:GetChildren() do
		if WaterPart:IsA("BasePart") then
			if not WaterColor[WaterPart] then
				WaterColor[WaterPart] = WaterPart.Color
			end
			Tween:Play(WaterPart, {1, "Circular"}, {Color = ReadyToUse and WaterColor[WaterPart] or Color3.fromRGB(118, 118, 118)})
		end
	end
end

Fountain.Healed.OnClientEvent:Connect(function(ServerTime: number)
	SetWaterState(false)
	Tween:Play(BillboardGui.Header, {1, "Circular"}, {TextTransparency = 0.7})
	BillboardGui.Cooldown.Visible = true
	
	while true do
		local Difference = workspace:GetServerTimeNow() - ServerTime
		local ReadyToUse = Difference > Timer
		if ReadyToUse then
			break
		end
		BillboardGui.Cooldown.Text = "-".. math.ceil(Timer-Difference) .."-"
		task.wait(0.2)
	end
	
	SetWaterState(true)
	Tween:Play(BillboardGui.Header, {1, "Circular"}, {TextTransparency = 0})
	BillboardGui.Cooldown.Visible = false
end)
--[[
	A limited, simple implementation of a Signal.

	Handlers are fired in order, and (dis)connections are properly handled when
	executing an event.
]]



local function immutableAppend(list, ...)
	local new = {}
	local len = #list

	for key = 1, len do
		new[key] = list[key]
	end

	for i = 1, select("#", ...) do
		new[len + i] = select(i, ...)
	end

	return new
end

local function immutableRemoveValue(list, removeValue)
	local new = {}

	for i = 1, #list do
		if list[i] ~= removeValue then
			table.insert(new, list[i])
		end
	end

	return new
end

local Signal = {}

Signal.__index = Signal

function Signal.new()
	local self = {
		_listeners = {}
	}

	setmetatable(self, Signal)

	return self
end

function Signal:connect(callback)
	local listener = {
		callback = callback,
		disconnected = false,
	}

	self._listeners = immutableAppend(self._listeners, listener)

	local function disconnect()
		listener.disconnected = true
		self._listeners = immutableRemoveValue(self._listeners, listener)
	end

	return {
		disconnect = disconnect
	}
end

function Signal:fire(...)
	for _, listener in ipairs(self._listeners) do
		if not listener.disconnected then
			listener.callback(...)
		end
	end
end

return Signal