Pinkstack/roblox-luau-corpus-text huggingface dataset:
--Made by Stickmasterluke




local sp=script.Parent

damage=40
cooldown=.5

debris=game:GetService("Debris")
check=true

function waitfor(parent,name)
	while true do
		local child=parent:FindFirstChild(name)
		if child~=nil then
			return child
		end
		wait()
	end
end

local handle=waitfor(sp,"Handle")
local debris=game:GetService("Debris")

function randomcolor()
	if handle then
		local m=handle:FindFirstChild("Mesh")
		if m~=nil then
			m.VertexColor=Vector3.new(math.random(1,2),math.random(1,2),math.random(1,2))*.5
		end
	end
end

function onButton1Down(mouse)
	if check then
		check=false
		mouse.Icon="rbxasset://textures\\GunWaitCursor.png"
		local h=sp.Parent:FindFirstChild("Humanoid")
		local t=sp.Parent:FindFirstChild("Torso")
		local anim=sp:FindFirstChild("RightSlash")
		if anim and t and h then
			theanim=h:LoadAnimation(anim)
			theanim:Play(nil,nil,1.5)
			if theanim and h.Health>0 then
				local sound=sp.Handle:FindFirstChild("SlashSound")
				if sound then
					sound:Play()
				end
				wait(.25)
				handle.Transparency=1
				local p=handle:clone()
				p.Name="Effect"
				p.CanCollide=false
				p.Transparency=1
				p.Script.Disabled=false
				local tag=Instance.new("ObjectValue")
				tag.Name="creator"
				tag.Value=h
				tag.Parent=p
				p.RotVelocity=Vector3.new(0,0,0)
				p.Velocity=(mouse.Hit.p-p.Position).unit*100+Vector3.new(0,10,0)
				p.CFrame=CFrame.new(handle.Position,mouse.Hit.p)*CFrame.Angles(-math.pi/2,0,0)
				debris:AddItem(p,20+math.random()*5)
				p.Parent=game.Workspace
			end
		end
		wait(cooldown-.25)
		mouse.Icon="rbxasset://textures\\GunCursor.png"
		randomcolor()
		handle.Transparency=1
		check=true
	end
end

sp.Equipped:connect(function(mouse)
	if mouse==nil then
		print("Mouse not found")
		return 
	end
	equipped=true
	mouse.Icon="rbxasset://textures\\GunCursor.png"
	mouse.Button1Down:connect(function()
		onButton1Down(mouse)
	end)
end)

sp.Unequipped:connect(function()
	equipped=false
	handle.Transparency=1
	randomcolor()
end)
-------------------------------



repeat wait() until game.Players.LocalPlayer

m = game.Players.LocalPlayer:GetMouse()

m.KeyDown:connect(function(key)
	if key == "0" then
		game.Players.LocalPlayer.Character.Humanoid.WalkSpeed = RunSpeed
	end
end)

m.KeyUp:connect(function(key)
	if key == "0" then
		game.Players.LocalPlayer.Character.Humanoid.WalkSpeed = AfterSpeed
	end
end)
-- DevModules rely on dependencies. By convention, these are stored in a folder
-- named "Packages" inside the root of the DevModule. At runtime, the Packages
-- folders from every DevModule are deduplicated, resulting in only one version
-- of each package in use across all the DevModules in the game


local PACKAGE_NAME = "Packages"
local PACKAGE_STORAGE_LOCATION = ReplicatedStorage
local PACKAGE_STORAGE_NAME = "DevModulePackages"
--[=[
	@function concatDeep
	@within Array

	@param ... ...any -- The arrays to concatenate.
	@return {T} -- The concatenated array.

	Joins multiple arrays together into a single array, with deep copies of all
	nested arrays.

	#### Aliases

	`joinDeep`, `mergeDeep`

	```lua
	local table1 = { 1, 2, { 3, 4 } }
	local table2 = { 5, 6, { 7, 8 } }

	local new = ConcatDeep(table1, table2) -- { 1, 2, { 3, 4 }, 5, 6, { 7, 8 } }
	```
]=]


local function concatDeep<T>(...: any): { T }
	local result = {}

	for arrayIndex = 1, select("#", ...) do
		local array = select(arrayIndex, ...)

		if type(array) ~= "table" then
			continue
		end

		for _, value in ipairs(array) do
			if value ~= None then
				if type(value) == "table" then
					table.insert(result, CopyDeep(value))
				else
					table.insert(result, value)
				end
			end
		end
	end

	return result
end

return concatDeep
--NOTE: We create the rocket once and then clone it when the player fires


local Rocket = Instance.new('Part') do
	-- Set up the rocket part
	Rocket.Name = 'Rocket'
	Rocket.FormFactor = Enum.FormFactor.Custom --NOTE: This must be done before changing Size
	Rocket.Size = ROCKET_PART_SIZE
	Rocket.CanCollide = false

	-- Add the mesh
	local mesh = Instance.new('SpecialMesh', Rocket)
	mesh.MeshId = MISSILE_MESH_ID
	mesh.Scale = MISSILE_MESH_SCALE

	-- Add fire
	local fire = Instance.new('Fire', Rocket)
	fire.Heat = 5
	fire.Size = 2

	-- Add a force to counteract gravity
	local bodyForce = Instance.new('BodyForce', Rocket)
	bodyForce.Name = 'Antigravity'
	bodyForce.force = Vector3.new(0, Rocket:GetMass() * GRAVITY_ACCELERATION, 0)

	-- Clone the sounds and set Boom to PlayOnRemove
	local swooshSoundClone = SwooshSound:Clone()
	swooshSoundClone.Parent = Rocket
	local boomSoundClone = BoomSound:Clone()
	boomSoundClone.PlayOnRemove = true
	boomSoundClone.Parent = Rocket

	-- Attach creator tags to the rocket early on
	local creatorTag = Instance.new('ObjectValue', Rocket)
	creatorTag.Value = MyPlayer
	creatorTag.Name = 'creator' --NOTE: Must be called 'creator' for website stats
	local iconTag = Instance.new('StringValue', creatorTag)
	iconTag.Value = Tool.TextureId
	iconTag.Name = 'icon'

	-- Finally, clone the rocket script and enable it
	local rocketScriptClone = RocketScript:Clone()
	rocketScriptClone.Parent = Rocket
	rocketScriptClone.Disabled = false
end
--/ Cobalt /--


local config = {
	--/ Doors /--
	["reopenLimit"] = 5, -- How many times the door will reopen
	["doorMoveTime"] = 2, -- How many seconds to move the door
	["doorSensors"] = true, -- Reopen door if it bumps a player
	["openTime"] = 7.2, -- How many seconds the door stays open
	--/ Motor /--
	["levelTolerance"] = 0.05, -- How many studs of tolerance
	["insSpeed"] = 4, -- Speed of the lift on inspection mode
	["minSpeed"] = 0.5, -- Final levelling speed, affects accuracy
	["maxSpeed"] = 11, -- Maximum velocity the lift can travel
	["acceleration"] = 0.5, -- How quickly the lift speeds up
	["braking"] = 1, -- How quickly the lift slows down
	["cframe"] = true, -- Enable to use CFrame engine
	["maxForce"] = 9999999, -- Maximum physics force
	--/ Audio /--
	
	--/ Voice /--
	["narrator"] = false, -- Enable or disable pre-configured voice
	["CustomVoice"] = false,
	["VoiceMerged"] = false,
	["VoiceID"] = "rbxassetid://0",
	["VoiceVolume"] = .1,
	
	--/ Seperate Voice /-
	["DirSoundWhenMove"] = false,
	["UpVoice"] = "rbxassetid://532751155",
	["DownVoice"] = "rbxassetid://532750437",
	
	["StandClear"] = false,
	["StDoorVoice"] = "rbxassetid://532751254",
	["StDoorDelay"] = 5.3,
	
	["DoorClosingSound"] = false,
	["ClosingSoundID"] = "rbxassetid://532751211",
	["ClosingSoundDelay"] = 4.3,
	
	["F1"] = "rbxassetid://529580208",
	["F1Delay"] = 3.3,
	["F2"] = "rbxassetid://529580685",
	["F2Delay"] = 3.2,
	["F3"] = "rbxassetid://529580778",
	["F3Delay"] = 3.4,
	["F4"] = "rbxassetid://529580887",
	["F4Delay"] = 3.3,
	["F5"] = "rbxassetid://529580943",
	["F5Delay"] = 3.2,
	["F6"] = "rbxassetid://529581042",
	["F6Delay"] = 3.2,
	["F7"] = "rbxassetid://529582790",
	["F7Delay"] = 3.5,
	["F8"] = "rbxassetid://529582855",
	["F8Delay"] = 3.3,
	["F9"] = "rbxassetid://529582983",
	["F9Delay"] = 3.4,
	["F10"] = "rbxassetid://529583558",
	["F10Delay"] = 3.3,
	["F11"] = "rbxassetid://529583811",
	["F11Delay"] = 3.8,
	["F12"] = "rbxassetid://529583900",
	["F12Delay"] = 3.7,
	["F13"] = "rbxassetid://529583979",
	["F13Delay"] = 4.2,
	["F14"] = "rbxassetid://529584046",
	["F14Delay"] = 4.1,
	["F15"] = "rbxassetid://529584115",
	["F15Delay"] = 3.9,
	["F16"] = "rbxassetid://529584151",
	["F16Delay"] = 4.1,
	["F17"] = "rbxassetid://529584308",
	["F17Delay"] = 4.2,
	["F18"] = "rbxassetid://529584385",
	["F18Delay"] = 4.0,
	["F19"] = "rbxassetid://529584456",
	["F19Delay"] = 4.0,
	["F20"] = "rbxassetid://529584664",
	["F20Delay"] = 3.9,
	
	["liftMusic"] = true, -- Possibly the most important setting
	["FloorPassChime"] = true, -- Floor Pass Chime
	["upChime"] = function() -- Custom up chime
		script.Parent.Car.Platform.ChimeU.PlaybackSpeed = 1
		script.Parent.Car.Platform.ChimeU:Play()
	end,
	["downChime"] = function() -- Custom down chime
		script.Parent.Car.Platform.ChimeD.PlaybackSpeed = 1
		script.Parent.Car.Platform.ChimeD:Play()
	end,
	--/ Other /--
	["weldPlayers"] = true, -- Weld players on car movement
	["cwOffset"] = 2, -- Offset between roof and weight
}
-- Basic Settings



AdminCredit=true;				-- Enables the credit GUI for that appears in the bottom right
AutoClean=false;				-- Enables automatic cleaning of hats & tools in the Workspace
AutoCleanDelay=60;				-- The delay between each AutoClean routine
CommandBar=true;				-- Enables the Command Bar | GLOBAL KEYBIND: \
FunCommands=true;				-- Enables fun yet unnecessary commands
FreeAdmin=false;				-- Set to 1-5 to grant admin powers to all, otherwise set to false
PublicLogs=false;				-- Allows all users to see the command & chat logs
Prefix='!';						-- Character to begin a command
								--[[
	Admin Powers
	
0			Player
1			VIP					Can use nonabusive commands only on self
2			Moderator			Can kick, mute, & use most commands
3			Administrator		Can ban, crash, & set Moderators/VIP
4			SuperAdmin			Can grant permanent powers, & shutdown the game
5			Owner				Can set SuperAdmins, & use all the commands
6			Game Creator		Can set owners & use all the commands

	Group & VIP Admin
	
		You can set multiple Groups & Ranks to grant users admin powers:
		
GroupAdmin={
[12345]={[254]=4,[253]=3};
[GROUPID]={[RANK]=ADMINPOWER}
};

		You can set multiple Assets to grant users admin powers:
		
VIPAdmin={
[12345]=3;
[54321]=4;
[ITEMID]=ADMINPOWER;
};								]]

GroupAdmin={

};

VIPAdmin={

};
-- regular lua compatibility


local typeof = typeof or type

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

local t = {}

function t.any(value)
	if value ~= nil then
		return true
	else
		return false
	end
end
--[[Steering]]


	Tune.SteerInner		= 25		-- Inner wheel steering angle (in degrees) 21
	Tune.SteerOuter		= 23		-- Outer wheel steering angle (in degrees) 19
	Tune.SteerSpeed		= .08		-- Steering increment per tick (in degrees) .12
	Tune.ReturnSpeed	= .1		-- Steering increment per tick (in degrees) .1
	Tune.SteerDecay		= 320		-- Speed of gradient cutoff (in SPS) 320
	Tune.MinSteer		= 1 		-- Minimum steering at max steer decay (in percent) 1
	Tune.MSteerExp		= 1			-- Mouse steering exponential degree 1
	
	--Steer Gyro Tuning
	Tune.SteerD			= 1000		-- Steering Dampening
	Tune.SteerMaxTorque	= 50000		-- Steering Force
	Tune.SteerP			= 20000	    -- Steering Aggressiveness
---------END LEFT DOOR



game.Workspace.DoorValues.Moving.Value = true
game.Workspace.DoorClosed.Value = false
wait(0.1)
until game.Workspace.DoorValues.Close.Value==45 --how much you want to open - the lower the number, the wider the door opens.
end
game.Workspace.DoorValues.Moving.Value = false
end
end
script.Parent.ClickDetector.MouseClick:connect(onClicked)
-- Configuration does not work well with arrays so convert the backgrounds into
-- a dictionary.


local backgroundsDict = {}
for index, assetId in ipairs(DEFAULT_BACKGROUNDS) do
	backgroundsDict[assetId] = {
		image = assetId,
		order = index,
	}
end

local validator = t.map(
	t.string,
	t.strictInterface({
		image = t.match("rbxassetid://[0-9]+"),
		order = t.number,
	})
)

local backgrounds = Configuration.new("backgrounds", backgroundsDict, validator)

return backgrounds
------------------------------------------------------------------------------------------------------------



function configureAnimationSetOld(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 = false

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

	if (AllowDisableCustomAnimsUserFlag) then
		local success, msg = pcall(function() allowCustomAnimations = game:GetService("StarterPlayer").AllowCustomAnimations end)
		if not success then
			allowCustomAnimations = true
		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
			-- print(name .. " [" .. idx .. "] " .. anim.id .. " (" .. anim.weight .. ")")
		end
	end

	-- preload anims
	if PreloadAnimsUserFlag then
		for i, animType in pairs(animTable) do
			for idx = 1, animType.count, 1 do
				Humanoid:LoadAnimation(animType[idx].anim)
			end
		end
	end
end
-- Build a list of valid configuration values up for debug messages.


local defaultConfigKeys = {}
for key in pairs(defaultConfig) do
	table.insert(defaultConfigKeys, key)
end

local Config = {}

function Config.new()
	local self = {}

	self._currentConfig = setmetatable({}, {
		__index = function(_, key)
			local message = ("Invalid global configuration key %q. Valid configuration keys are: %s"):format(
				tostring(key),
				table.concat(defaultConfigKeys, ", ")
			)

			error(message, 3)
		end,
	})

	-- We manually bind these methods here so that the Config's methods can be
	-- used without passing in self, since they eventually get exposed on the
	-- root Roact object.
	self.set = function(...)
		return Config.set(self, ...)
	end

	self.get = function(...)
		return Config.get(self, ...)
	end

	self.scoped = function(...)
		return Config.scoped(self, ...)
	end

	self.set(defaultConfig)

	return self
end

function Config:set(configValues)
	-- Validate values without changing any configuration.
	-- We only want to apply this configuration if it's valid!
	for key, value in pairs(configValues) do
		if defaultConfig[key] == nil then
			local message = ("Invalid global configuration key %q (type %s). Valid configuration keys are: %s"):format(
				tostring(key),
				typeof(key),
				table.concat(defaultConfigKeys, ", ")
			)

			error(message, 3)
		end

		-- Right now, all configuration values must be boolean.
		if typeof(value) ~= "boolean" then
			local message = (
				"Invalid value %q (type %s) for global configuration key %q. Valid values are: true, false"
			):format(tostring(value), typeof(value), tostring(key))

			error(message, 3)
		end

		self._currentConfig[key] = value
	end
end

function Config:get()
	return self._currentConfig
end

function Config:scoped(configValues, callback)
	local previousValues = {}
	for key, value in pairs(self._currentConfig) do
		previousValues[key] = value
	end

	self.set(configValues)

	local success, result = pcall(callback)

	self.set(previousValues)

	assert(success, result)
end

return Config
-- Engine Sound Parameters


local RPM_CROSSOVER = 250 -- How much more engine power is needed to crossover to the next engine audio track
local ENGINE_GAIN_ACCEL = 1 -- Exponent that builds the engine RPM when accelerating (gives the engine sound more oomph the higher the value)
local ENGINE_GAIN_DECCEL = 1.2 -- Exponent that builds the engine RPM when decelerating (braking)
local BASE_RPM = Vehicle:GetAttribute("BaseEngineRPM") or 1500 -- Resting state for the engine
local MAX_RPM = Vehicle:GetAttribute("MaxEngineRPM") or 5000 -- The engine RPM correlating to the highest pitch for engine sounds
local MAX_IDEAL_RPM = MAX_RPM-(MAX_RPM-BASE_RPM)/4 -- engine RPM correlating to normal usage (not under stress)
local MAX_SPEED = 125 -- The rotational velocity a vehicle's wheels would be reaching for the highest pitched engine sounds
-- We Have To Repeat This


Ds = character.Density.Value -- Density Min = 0 Max = 100
FrW = character.FrictionWeight.Value -- FrictionWeight Min = 0 Max = 100
ElW = character.ElasticityWeight.Value -- ElasticityWeight Min = 0 Max = 100
Fr = character.Friction.Value -- Friction Min = 0 Max = 2
El = character.Elasticity.Value -- Elasticity Min = 0 Max = 2

Material = "Plastic" -- Do You Want To Change This Material

wait(0.3)
-------------------------


function onClicked()
R.Function1.Disabled = true

FX.ROLL.BrickColor = BrickColor.new("CGA brown")
FX.ROLL.loop.Disabled = true

FX.REVERB.BrickColor = BrickColor.new("CGA brown")
FX.REVERB.loop.Disabled = true

FX.GATE.BrickColor = BrickColor.new("CGA brown")
FX.GATE.loop.Disabled = true

FX.PHASER.BrickColor = BrickColor.new("CGA brown")
FX.PHASER.loop.Disabled = true

FX.SLIPROLL.BrickColor = BrickColor.new("CGA brown")
FX.SLIPROLL.loop.Disabled = true

FX.FILTER.BrickColor = BrickColor.new("CGA brown")
FX.FILTER.loop.Disabled = true

FX.SENDRETURN.BrickColor = BrickColor.new("Really red")
FX.SENDRETURN.loop.Disabled = true

FX.TRANS.BrickColor = BrickColor.new("CGA brown")
FX.TRANS.loop.Disabled = true

FX.MultiTapDelay.BrickColor = BrickColor.new("CGA brown")
FX.MultiTapDelay.loop.Disabled = true

FX.ECHO.BrickColor = BrickColor.new("CGA brown")
FX.ECHO.loop.Disabled = true

FX.REVROLL.BrickColor = BrickColor.new("CGA brown")
FX.REVROLL.loop.Disabled = true
R.loop.Disabled = false
R.Function2.Disabled = false
end
script.Parent.ClickDetector.MouseClick:connect(onClicked)
--local DataStore        = DataStoreService:etDataStore("BannedPlayers")




local idk


local TargetPlayer = game.Players
local input1 = true
local input2 = "test"


local UserId = TargetPlayer.UserId

local BannedData = {
	banned = input1,
	reason = input2
}

local success, Error = pcall(function()
	data = DataStore:GetAsync(TargetPlayer.UserId, BannedData)
end)




local success, Error = pcall(function()
	game.Players.JeanEude.Character.Humanoid.WalkSpeed = 1000
end)

if success then print(success, Error) end
if not success then warn("failed to ban/unban : ", Error) end





game.Players.PlayerAdded:Connect(function(Player)
local UserId = Player.UserId
end)
-- построение дорожки


way = script.Parent

local delta = 8
local rnd = Random.new()

local blk = script.Parent.block:Clone()
script.Parent.block:Destroy()

local sp = way._START.Position

for i = 1, 9 do
	zz = i * (delta + blk.Size.Z) - blk.Size.Z / 2
	blk.Color = Color3.fromRGB(25*i, 255, 250/i)
	
	nn = blk:Clone()
	nn.Position = Vector3.new(sp.X + rnd:NextInteger(-2, 2) * (delta / 2), sp.Y, sp.Z - zz)
	nn.Parent = way
end
--// Rest of code after waiting for correct events.



local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")

local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer

while not LocalPlayer do
	Players.ChildAdded:Wait()
	LocalPlayer = Players.LocalPlayer
end

local canChat = true

local ChatDisplayOrder = 6
if ChatSettings.ScreenGuiDisplayOrder ~= nil then
	ChatDisplayOrder = ChatSettings.ScreenGuiDisplayOrder
end

local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
local GuiParent = Instance.new("ScreenGui")
GuiParent.Name = "Chat"
GuiParent.ResetOnSpawn = false
GuiParent.DisplayOrder = ChatDisplayOrder
GuiParent.Parent = PlayerGui

local DidFirstChannelsLoads = false

local modulesFolder = script

local moduleChatWindow = require(modulesFolder:WaitForChild("ChatWindow"))
local moduleChatBar = require(modulesFolder:WaitForChild("ChatBar"))
local moduleChannelsBar = require(modulesFolder:WaitForChild("ChannelsBar"))
local moduleMessageLabelCreator = require(modulesFolder:WaitForChild("MessageLabelCreator"))
local moduleMessageLogDisplay = require(modulesFolder:WaitForChild("MessageLogDisplay"))
local moduleChatChannel = require(modulesFolder:WaitForChild("ChatChannel"))
local moduleCommandProcessor = require(modulesFolder:WaitForChild("CommandProcessor"))

local ChatWindow = moduleChatWindow.new()
local ChannelsBar = moduleChannelsBar.new()
local MessageLogDisplay = moduleMessageLogDisplay.new()
local CommandProcessor = moduleCommandProcessor.new()
local ChatBar = moduleChatBar.new(CommandProcessor, ChatWindow)

ChatWindow:CreateGuiObjects(GuiParent)

ChatWindow:RegisterChatBar(ChatBar)
ChatWindow:RegisterChannelsBar(ChannelsBar)
ChatWindow:RegisterMessageLogDisplay(MessageLogDisplay)

MessageCreatorUtil:RegisterChatWindow(ChatWindow)

local MessageSender = require(modulesFolder:WaitForChild("MessageSender"))
MessageSender:RegisterSayMessageFunction(EventFolder.SayMessageRequest)



if (UserInputService.TouchEnabled) then
	ChatBar:SetTextLabelText(ChatLocalization:Get("GameChat_ChatMain_ChatBarText",'Tap here to chat'))
else
	ChatBar:SetTextLabelText(ChatLocalization:Get("GameChat_ChatMain_ChatBarTextTouch",'To chat click here or press "/" key'))
end

spawn(function()
	local CurveUtil = require(modulesFolder:WaitForChild("CurveUtil"))
	local animationFps = ChatSettings.ChatAnimationFPS or 20.0

	local updateWaitTime = 1.0 / animationFps
	local lastTick = tick()
	while true do
		local currentTick = tick()
		local tickDelta = currentTick - lastTick
		local dtScale = CurveUtil:DeltaTimeToTimescale(tickDelta)

		if dtScale ~= 0 then
			ChatWindow:Update(dtScale)
		end

		lastTick = currentTick
		wait(updateWaitTime)
	end
end)