Skip to content

Functions

Contains various server-specific miscellaneous functions.

ℹ️ This page is currently incomplete.

AddJoinFilter (Name (string), Function (function))

Adds the given function as a join filter. Will error if a joinfilter with this name already exists

    Functions.AddJoinFilter("No_bandits",function(Player:Player, PlayerData)
        if Player.Name == "SimulprodBandit" then
            return false, "Simulprod Bandit" -- second argument is the reason the player gets kicked
        end;

        return true;
    end);

RemoveJoinFilter (Name (string))

Removes the given joinfilter.

PlayerFinders

These are used when service.GetPlayers is called to search for players based on the user's input. The default built-in player finders (at the time of writing this) can be found below to be used as examples:

PlayerFinders = {
    ["me"] = {
        Match = "me";
        Prefix = true;
        Absolute = true;
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            table.insert(players,plr)
            plus()
        end;
    };

    ["all"] = {
        Match = "all";
        Prefix = true;
        Absolute = true;
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            local everyone = true
            if isKicking then
                for i,v in next,parent:GetChildren() do
                    local p = getplr(v)
                    if p.Name:lower():sub(1,#msg)==msg:lower() then
                        everyone = false
                        table.insert(players,p)
                        plus()
                    end
                end
            end
            if everyone then
                for i,v in next,parent:GetChildren() do
                    local p = getplr(v)
                    if p then
                        table.insert(players,p)
                        plus()
                    end
                end
            end
        end;
    };

    ["@everyone"] = {
        Match = "@everyone";
        Absolute = true;
        Function = function(...)
            return Functions.PlayerFinders.all.Function(...)
        end
    };

    ["others"] = {
        Match = "others";
        Prefix = true;
        Absolute = true;
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            for i,v in next,parent:GetChildren() do
                local p = getplr(v)
                if p ~= plr then
                    table.insert(players,p)
                    plus()
                end
            end
        end;
    };

    ["random"] = {
        Match = "random";
        Prefix = true;
        Absolute = true;
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            if #players>=#parent:GetChildren() then return end
            local rand = parent:GetChildren()[math.random(#parent:children())]
            local p = getplr(rand)
                for i,v in pairs(players) do
                if(v.Name == p.Name)then
                    Functions.PlayerFinders.random.Function(msg, plr, parent, players, getplr, plus, isKicking)
                    return;
                end
            end
                table.insert(players,p)
            plus();
        end;
    };

    ["admins"] = {
        Match = "admins";
        Prefix = true;
        Absolute = true;
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            for i,v in next,parent:GetChildren() do
                local p = getplr(v)
                if Admin.CheckAdmin(p,false) then
                    table.insert(players, p)
                    plus()
                end
            end
        end;
    };

    ["nonadmins"] = {
        Match = "nonadmins";
        Prefix = true;
        Absolute = true;
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            for i,v in next,parent:GetChildren() do
                local p = getplr(v)
                if not Admin.CheckAdmin(p,false) then
                    table.insert(players,p)
                    plus()
                end
            end
        end;
    };

    ["friends"] = {
        Match = "friends";
        Prefix = true;
        Absolute = true;
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            for i,v in next,parent:GetChildren() do
                local p = getplr(v)
                if p:IsFriendsWith(plr.userId) then
                    table.insert(players,p)
                    plus()
                end
            end
        end;
    };

    ["@username"] = {
        Match = "@";
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            local matched = tonumber(msg:match("@(.*)"))
            local foundNum = 0
                if matched then
                for i,v in next,parent:GetChildren() do
                    local p = getplr(v)
                    if p and p.Name == matched then
                        table.insert(players,p)
                        plus()
                        foundNum = foundNum+1
                    end
                end
            end
        end;
    };

    ["%team"] = {
        Match = "%";
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            local matched = msg:match("%%(.*)")
            if matched then
                for i,v in next,service.Teams:GetChildren() do
                    if v.Name:lower():sub(1,#matched) == matched:lower() then
                        for k,m in next,parent:GetChildren() do
                            local p = getplr(m)
                            if p.TeamColor == v.TeamColor then
                                table.insert(players,p)
                                plus()
                            end
                        end
                    end
                end
            end
        end;
    };

    ["$group"] = {
        Match = "$";
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            local matched = msg:match("%$(.*)")
            if matched and tonumber(matched) then
                for i,v in next,parent:children() do
                    local p = getplr(v)
                    if p:IsInGroup(tonumber(matched)) then
                        table.insert(players,p)
                        plus()
                    end
                end
            end
        end;
    };

    ["id-"] = {
        Match = "id-";
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            local matched = tonumber(msg:match("id%-(.*)"))
            local foundNum = 0
            if matched then
                for i,v in next,parent:children() do
                    local p = getplr(v)
                    if p and p.userId == matched then
                        table.insert(players,p)
                        plus()
                        foundNum = foundNum+1
                    end
                end
                if foundNum == 0 then
                    local ran,name = pcall(function() return service.Players:GetNameFromUserIdAsync(matched) end)
                    if ran and name then
                        local fakePlayer = service.Wrap(service.New("Folder"))
                        local data = {
                            Name = name;
                            ToString = name;
                            ClassName = "Player";
                            AccountAge = 0;
                            CharacterAppearanceId = tostring(matched);
                            UserId = tonumber(matched);
                            userId = tonumber(matched);
                            Parent = service.Players;
                            Character = Instance.new("Model");
                            Backpack = Instance.new("Folder");
                            PlayerGui = Instance.new("Folder");
                            PlayerScripts = Instance.new("Folder");
                            Kick = function() fakePlayer:Destroy() fakePlayer:SetSpecial("Parent", nil) end;
                            IsA = function(ignore, arg) if arg == "Player" then return true end end;
                        }
                        for i,v in next,data do fakePlayer:SetSpecial(i, v) end
                        table.insert(players, fakePlayer)
                        plus()
                    end
                end
            end
        end;
    };

    ["displayname-"] = {
        Match = "displayname-";
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            local matched = tonumber(msg:match("displayname%-(.*)"))
            local foundNum = 0
            if matched then
                for i,v in next,parent:children() do
                    local p = getplr(v)
                    if p and p.DisplayName == matched then
                        table.insert(players,p)
                        plus()
                        foundNum = foundNum+1
                    end
                end
            end
        end;
    };

    ["team-"] = {
        Match = "team-";
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            print(1)
            local matched = msg:match("team%-(.*)")
            if matched then
                for i,v in next,service.Teams:GetChildren() do
                    if v.Name:lower():sub(1,#matched) == matched:lower() then
                        for k,m in next,parent:GetChildren() do
                            local p = getplr(m)
                            if p.TeamColor == v.TeamColor then
                                table.insert(players, p)
                                plus()
                            end
                        end
                    end
                end
            end
        end;
    };

    ["group-"] = {
        Match = "group-";
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            local matched = msg:match("group%-(.*)")
            if matched and tonumber(matched) then
                for i,v in next,parent:children() do
                    local p = getplr(v)
                    if p:IsInGroup(tonumber(matched)) then
                        table.insert(players,p)
                        plus()
                    end
                end
            end
        end;
    };

    ["-name"] = {
        Match = "-";
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            local matched = msg:match("%-(.*)")
            if matched then
                local removes = service.GetPlayers(plr,matched,true)
                for i,v in next,players do
                    for k,p in next,removes do
                        if v.Name == p.Name then
                            table.remove(players,i)
                            plus()
                        end
                    end
                end
            end
        end;
    };

    ["#number"] = {
        Match = "#";
        Function = function(msg, plr, ...)
            local matched = msg:match("%#(.*)")
            if matched and tonumber(matched) then
                local num = tonumber(matched)
                if not num then
                    Remote.MakeGui(plr,'Output',{Title = 'Output'; Message = "Invalid number!"})
                end
                    for i = 1,num do
                    Functions.PlayerFinders.random.Function(msg, plr, ...)
                end
            end
        end;
    };

    ["radius-"] = {
        Match = "radius-";
        Function = function(msg, plr, parent, players, getplr, plus, isKicking)
            local matched = msg:match("radius%-(.*)")
            if matched and tonumber(matched) then
                local num = tonumber(matched)
                if not num then
                    Remote.MakeGui(plr,'Output',{Title = 'Output'; Message = "Invalid number!"})
                end
                    for i,v in next,parent:GetChildren() do
                    local p = getplr(v)
                    if p ~= plr and plr:DistanceFromCharacter(p.Character.Head.Position) <= num then
                        table.insert(players,p)
                        plus()
                    end
                end
            end
        end;
    };
};