Chat bubble color change (gamepass)

I’m trying to make a Game-Pass chat system for my game (Changes the chat bubble color)
but since you cant get the Game-Pass Async of another player from a LocalScript.

LocalScript:

local ChatService = game:FindService("Chat") or game:GetService("Chat")
local Players = game:FindService("Players") or game:GetService("Players")
local MarketplaceService = game:FindService("MarketplaceService") or game:GetService("MarketplaceService")

ChatService.BubbleChatEnabled = true

local VipGamepassID = 19553315

local BubbleChatSettings = {
	UserSpecificSettings = {
	}
}

ChatService:SetBubbleChatSettings(BubbleChatSettings)

local Player = Players.LocalPlayer
local PlayerBoughtThisGamePass =  MarketplaceService:UserOwnsGamePassAsync(Player.UserId, VipGamepassID)
if PlayerBoughtThisGamePass and not BubbleChatSettings.UserSpecificSettings[Player.UserId] then
	BubbleChatSettings.UserSpecificSettings[Player.UserId] = {
		BackgroundGradient = {
			Enabled = true,
			Rotation = 90,
			Color = ColorSequence.new(Color3.fromRGB(255, 200, 0), Color3.fromRGB(255, 255, 100)),
			Transparency = NumberSequence.new({
				NumberSequenceKeypoint.new(0, 0),
				NumberSequenceKeypoint.new(1, 0.25)
			})
		}
	}
	ChatService:SetBubbleChatSettings(BubbleChatSettings)
end

--wait()
Players.PlayerAdded:Connect(function(Player)
	local PlayerBoughtThisGamePass =  MarketplaceService:UserOwnsGamePassAsync(Player.UserId, VipGamepassID)
	if PlayerBoughtThisGamePass and not BubbleChatSettings.UserSpecificSettings[Player.UserId] then
		BubbleChatSettings.UserSpecificSettings[Player.UserId] = {
			BackgroundGradient = {
				Enabled = true,
				Rotation = 90,
				Color = ColorSequence.new(Color3.fromRGB(255, 200, 0), Color3.fromRGB(255, 255, 100)),
				Transparency = NumberSequence.new({
					NumberSequenceKeypoint.new(0, 0),
					NumberSequenceKeypoint.new(1, 0.25)
				})
			}
		}
		ChatService:SetBubbleChatSettings(BubbleChatSettings)
	end
end)

for i,Player in pairs(Players:GetPlayers()) do
	local PlayerBoughtThisGamePass =  MarketplaceService:UserOwnsGamePassAsync(Player.UserId, VipGamepassID)
	if PlayerBoughtThisGamePass and not BubbleChatSettings.UserSpecificSettings[Player.UserId] then
		BubbleChatSettings.UserSpecificSettings[Player.UserId] = {
			BackgroundGradient = {
				Enabled = true,
				Rotation = 90,
				Color = ColorSequence.new(Color3.fromRGB(255, 200, 0), Color3.fromRGB(255, 255, 100)),
				Transparency = NumberSequence.new({
					NumberSequenceKeypoint.new(0, 0),
					NumberSequenceKeypoint.new(1, 0.25)
				})
			}
		}
		ChatService:SetBubbleChatSettings(BubbleChatSettings)
	end
end

You should make a RemoteFunction that connects to a server script, when called from the client checks if the userid passes through the parameter owns the gamepass

Is your issue being able to check if they own the gamepass? You can just make a new value and check if they own that value.

local G = game.GetService
local MPS = G(game,'MarketplaceService')
local PlyrService = G(game,'Players')

spawn = function(w)
coroutine.wrap(w)()
end

PlyrService.PlayerAdded:Connect(function(plyr)
	spawn(function()
		local data = nil
		local s, e = pcall(function()
			data = MPS:UserOwnsGamePassAsync(plyr.UserId,19553315)
		end)
		if not s then
			wait(10)
			s, e = pcall(function()
				data = MPS:UserOwnsGamePassAsync(plyr.UserId,19553315)
			end)
		end
		if data then
			local w = Instance.new("BoolValue")
			w.Name = 'ownvip'
			w.Parent = plyr
		end
	end)
end)
-- check
if plyr:FindFirstChild('ownvip') then
-- boom
end
3 Likes