My kick script checks if the player has the shirt or not, and if they don't they get kicked, if they do they stay. But the problem is that it only checks the first shirt. It doesn't check for the other shirts.
local ShirtId1 = 2620211336 local ShirtId2 = 2620213086 local ShirtId3 = 2620212616 local Shirt_Name = "Group shirt" local Players = game:GetService("Players") local MarketplaceService = game:GetService("MarketplaceService") local PlayerOwnsShirt = MarketplaceService.PlayerOwnsAsset Players.PlayerAdded:Connect(function (player) local Success, doesPlayerOwnShirt = pcall(PlayerOwnsShirt, MarketplaceService, player, ShirtId1 or ShirtId2 or ShirtId3) if doesPlayerOwnShirt then print(player.Name.. " owns " .. Shirt_Name) else player:Kick("Sorry") print(player.Name .. " doesn't own " .. Shirt_Name) end end)
"or" has a few uses outside of conditionals. If you have a function that takes an argument, but it can also be sent without, you can set a default value with or like:
function foo(var) var = var or 10 end
Var will stay var, unless there is no var, in which case it will be 10.
This is what's happening in:
pcall(PlayerOwnsShirt, MarketplaceService, player, ShirtId1 or ShirtId2 or ShirtId3)
ShirtId1 exists, so it skips over the or and stays itself. You'll have to iterate through checks with each shirt on a separate check.
Here's how I'd do it
local shirtIds = { 2620211336, 2620213086, 2620212616 } local Shirt_Name = "Group shirt" local Players = game:GetService("Players") local MarketplaceService = game:GetService("MarketplaceService") local PlayerOwnsShirt = MarketplaceService.PlayerOwnsAsset Players.PlayerAdded:Connect(function (player) local doesPlayerOwnShirt = false for i, v in pairs(shirtIds) do local success = false repeat success, check = pcall(PlayerOwnsShirt, MarketplaceService, player, v) if not success then wait(1) end until (success == true) if check then doesPlayerOwnShirt = true break end end if doesPlayerOwnShirt then print(player.Name.. " owns " .. Shirt_Name) else player:Kick("Sorry") print(player.Name .. " doesn't own " .. Shirt_Name) end end)