97 lines
3.2 KiB
Lua
97 lines
3.2 KiB
Lua
local PlayerPermissionsModule = {}
|
|
|
|
local PlayersService = game:GetService("Players")
|
|
|
|
local PlayerGroupInfoMap = {}
|
|
local PlayerGroupInfoMapChanged = Instance.new("BindableEvent")
|
|
|
|
local PlayerCanManageInfoMap = {}
|
|
local PlayerCanManageInfoMapChanged = Instance.new("BindableEvent")
|
|
|
|
spawn(function()
|
|
local RobloxReplicatedStorage = game:GetService("RobloxReplicatedStorage")
|
|
local RemoveEvent_NewPlayerGroupDetails = RobloxReplicatedStorage:WaitForChild("NewPlayerGroupDetails", math.huge)
|
|
RemoveEvent_NewPlayerGroupDetails.OnClientEvent:Connect(function(userIdStr, groupDetails)
|
|
local player = PlayersService:GetPlayerByUserId(tonumber(userIdStr))
|
|
if player then
|
|
PlayerGroupInfoMap[player] = groupDetails
|
|
PlayerGroupInfoMapChanged:Fire()
|
|
end
|
|
end)
|
|
end)
|
|
|
|
coroutine.wrap(function()
|
|
local RobloxReplicatedStorage = game:GetService("RobloxReplicatedStorage")
|
|
local RemoveEvent_NewPlayerCanManageDetails = RobloxReplicatedStorage:WaitForChild("NewPlayerCanManageDetails", math.huge)
|
|
RemoveEvent_NewPlayerCanManageDetails.OnClientEvent:Connect(function(userIdStr, canManage)
|
|
local player = PlayersService:GetPlayerByUserId(tonumber(userIdStr))
|
|
if player then
|
|
PlayerCanManageInfoMap[player] = canManage
|
|
PlayerCanManageInfoMapChanged:Fire()
|
|
end
|
|
end)
|
|
end)()
|
|
|
|
PlayersService.PlayerRemoving:Connect(function(player)
|
|
PlayerGroupInfoMap[player] = nil
|
|
PlayerGroupInfoMapChanged:Fire()
|
|
end)
|
|
|
|
local function NewInGroupFunctionFactory(groupKey)
|
|
return function(player)
|
|
while not PlayerGroupInfoMap[player] and player.Parent do
|
|
PlayerGroupInfoMapChanged.Event:wait()
|
|
end
|
|
local groupInfo = PlayerGroupInfoMap[player]
|
|
if groupInfo and groupInfo[groupKey] then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
end
|
|
|
|
local function NewIsLocalizationExpertFunctionFactory()
|
|
local localizationCheckFunctions = {
|
|
NewInGroupFunctionFactory("SpanishLocalizationExpert"),
|
|
NewInGroupFunctionFactory("BrazilianLocalizationExpert"),
|
|
NewInGroupFunctionFactory("FrenchLocalizationExpert"),
|
|
NewInGroupFunctionFactory("GermanLocalizationExpert"),
|
|
}
|
|
return function(player)
|
|
for i = 1, #localizationCheckFunctions do
|
|
if localizationCheckFunctions[i](player) then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
end
|
|
|
|
local function IsPlaceOwnerFunctionFactory()
|
|
if game.CreatorType == Enum.CreatorType.Group then
|
|
return NewInGroupFunctionFactory("PlaceCreator")
|
|
end
|
|
return function(player)
|
|
return player.UserId == game.CreatorId
|
|
end
|
|
end
|
|
|
|
local function CanPlayerManagePlace(player)
|
|
while PlayerCanManageInfoMap[player] == nil and player.Parent do
|
|
PlayerCanManageInfoMapChanged.Event:Wait()
|
|
end
|
|
if PlayerCanManageInfoMap[player] ~= nil then
|
|
return PlayerCanManageInfoMap[player]
|
|
end
|
|
return false
|
|
end
|
|
|
|
PlayerPermissionsModule.IsPlayerAdminAsync = NewInGroupFunctionFactory("Admin")
|
|
PlayerPermissionsModule.IsPlayerInternAsync = NewInGroupFunctionFactory("Intern")
|
|
PlayerPermissionsModule.IsPlayerStarAsync = NewInGroupFunctionFactory("Star")
|
|
PlayerPermissionsModule.IsPlayerLocalizationExpertAsync = NewIsLocalizationExpertFunctionFactory()
|
|
PlayerPermissionsModule.IsPlayerPlaceOwnerAsync = IsPlaceOwnerFunctionFactory()
|
|
PlayerPermissionsModule.CanPlayerManagePlaceAsync = CanPlayerManagePlace
|
|
|
|
return PlayerPermissionsModule
|