Better Chat V3 | Feature-rich custom chat with replies, rich text, message editing, and more!

how do u make a poll can’t seem to get it to work i see there is a command /poll but can’t find what parameter(s) i have to send for it to a work?

awsome chat btw loving it

It needs to be enabled in the settings module, I was just not able to publish the changes yet to the loader.

If you insert the source code, you can see the template for the settings at the top of the MainModule script. You then just add it to settings and it should work, DM me if you need help.

1 Like

Windshake, water movement, and waterfalls already have pretty popular plugins. Also, this is a resource - not a plugin.

For some reason, this chat system makes my main datastore not save :smiling_face_with_tear:

Please someone help me, the chat system is very good, but when I put it on my game map it makes my main date to save things, and the dates obviously do not have the same name, the name of my date is “DataPlayers”.

1 Like

If you use DataStore service use ProfileService instead. Save your player data with ProfileService! (DataStore Module)

ok thx my friend, I will learn about.

I tried to use this thing that you recommended and I didn’t understand anything, I found it a bit confusing.

You didnt found anything else on the dev forum or article on it ?

Look in the configuration of BetterChat and turn off the option that saves data for the chat and see if that fixes your data saving.

I read about it, but I didn’t really understand how it works, I’m new

I already tried and nothing changed, I will post my date code in the chat

local dts = game:GetService('DataStoreService')

local MyData = dts:GetDataStore('DataPlayers')

local m = {} 

function m.save (plr)
	local lista = {}
	for Name, Value in pairs(plr:GetAttributes()) do
		lista[Name] = Value
	end 
	local tentativas = 0
	repeat
		local Ok, Info = pcall(function()
			return 	MyData:SetAsync(plr.UserId, lista)
		end)
		tentativas += 1
	until Ok or tentativas >= 5
end

function m.load (plr)
	local Ok, Data = pcall(function()
		return MyData:GetAsync(plr.UserId)
	end)
	if not Ok then
		plr:Kick('Failed to Load Your Data')
	end
	if not Data then return end
	for Name, Value in pairs(Data) do
		plr:SetAttribute(Name, Value)
	end 

end

return m

Oh geez, what’s that save code? Variable “Ok” is defined in the repeat scope but you try referencing it in until.

What do you mean, friend?

I would recommend learning ProfileService as there are some underlying problems with your save code, but this should work for your issue. BetterChat V3 only overwrites a specific, designated DataStore so as long as you’re not using the same DataStore for both: you will not run into any issues.

local tentativas, Ok, Info = 0
repeat
    Ok, Info = pcall(MyData.SetAsync, MyData, plr.UserId, lista)
    tentativas += 1
until Ok or tentativas >= 5

better code:

local ok, info
for i = 1, 5 do
   ok, info = pcall(MyData.SetAsync, MyData, plr.UserId, lista)
   if ok then
      break
   end
end
1 Like

Did as you 2 said, and in the end it didn’t work when adding the chat system T-T

local dts = game:GetService('DataStoreService')

local MyData = dts:GetDataStore('DataPlayers')

local m = {} 

function m.save (plr)
	local lista = {}
	for Name, Value in pairs(plr:GetAttributes()) do
		lista[Name] = Value
	end 
	local tentativas = 0
	local ok, info
	for i = 1, 5 do
		ok, info = pcall(MyData.SetAsync, MyData, plr.UserId, lista)
		if ok then
			break
		end
	end
end
function m.load (plr)
	local Ok, Data = pcall(function()
		return MyData:GetAsync(plr.UserId)
	end)
	if not Ok then
		plr:Kick('Failed to Load Your Data')
	end
	if not Data then return end
	for Name, Value in pairs(Data) do
		plr:SetAttribute(Name, Value)
	end 

end

return m



I modified the value on the server, and saved and returned to the client

I stopped and entered again

My save system, it detects when the player exits the game and saves

game.Players.PlayerRemoving:Connect(function(plr)
	activePlr[plr.Name] = nil
	dataStore.save(plr)
end)
game:BindToClose(function()
	for i, plr in ipairs(game.Players:GetPlayers()) do
		dataStore.save(plr)
	end
end)

The issue may be a problem with Studio not calling you leaving since it’s known to mess that up while in the studio. Think it should work fine in-game though. (You may want to test it just incase though)

I tested it in a game, and it didn’t save either