Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Table doesn't appear to be nil but I can't get the values inside?

Asked by 6 years ago

A very weird thing, this script stopped working, I can't see a reason, I know where the error is but not why it happends, the table is not nil but still when I use for i,v in pairs(table) it won't work. (It doesn't print out the values)

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local banEvent = ReplicatedStorage:WaitForChild("AddBan")

local unbanEvent = ReplicatedStorage:WaitForChild("RemoveBan")
local getBans = ReplicatedStorage:WaitForChild("GetBans")

local DataVersion = 4
Attempt = 0

local DataStore = game:GetService("DataStoreService")
local BanlistSave = DataStore:GetDataStore("BLA_"..DataVersion)

unbanPlace = 0
found = false

banList = {}
globalKey = 1920 -- If you want to clear this datastore just change this value

unbanList = {}   -- Add names to this list if you want them to be unbanned, load the server, then remove them
local CSPD = workspace:WaitForChild('CanSavePlayerData')

notFound = false
unbannedPlrFound = false

function getBanList()   
    local banListNC = BanlistSave:GetAsync(globalKey) or nil
    banList = {''}
    for index, save in pairs(banListNC) do -- PROBLEM IS HERE. It doesn't print anything!
        print(save)
    end
    for index, save in pairs(banListNC) do
        table.insert(banList,save)
        print(save)
    end     
end

if unbanList ~= nil then                  -- Checks if unbanlist is empty
    getBanList()
    for index, unban in pairs(unbanList) do
        for index, ban in pairs(banList) do
            if unban == ban then          -- Checks if player is actually banned
                table.remove(banList,ban) -- If so, remove the player out of the table
            end
        end
    end
end

game.Players.PlayerAdded:connect(function(plr) -- Player joined
    getBanList()                               -- Refreshed the banlist
    for index, bannedPlr in pairs(banList) do  -- Checks if the name of the player is the same as a name out of the banlist
        print(bannedPlr)
        if plr.Name == bannedPlr then
            plr:Kick("Your banned. If you think this is an error please contact one of our admins!") -- Kick if neccesary
        end
    end
end)

banEvent.OnServerEvent:connect(function(player, TargettedPlayer)    -- Bans player on remote event
    warn('conection remote event ban')
    print("banning "..TargettedPlayer)

    if banList == nil then
        banList = {}
        table.insert(banList, TargettedPlayer)

        BanlistSave:SetAsync(globalKey, banList)

        warn('error in banlist, banlist appears to be nil!')
    else
        for index, bannedPLR in pairs(banList) do
            if TargettedPlayer == bannedPLR then
                warn(TargettedPlayer..' is already banned!')
                found = true
            end
        end
        if found == true then
            warn('can\'t ban player because he is already banned')
        else
            table.insert(banList, TargettedPlayer)                      -- Adds name to datastore table
            print('succesfully stored values')
        end
        found = false
    end
    for index, gamePlayer in pairs(game.Players:GetPlayers()) do
        if gamePlayer.Name == TargettedPlayer then
            gamePlayer:Kick("admin "..player.Name.." has banned you. Believe this is an error? Message one of our admins!")  -- Kicks player
        end
    end

    CSPD.Value = false
    wait(5)
    warn('should be saving')
    BanlistSave:SetAsync(globalKey, banList)
    wait(2)
    CSPD.Value = true

end)

unbanEvent.OnServerEvent:connect(function(player, TargettedPlayer)  -- Unbans player on remote event
    warn('connection remote event unban')
    warn('player '..player.Name..' is trying to unban player '..TargettedPlayer)

    unbanPlace = 0
    for index, bannedPlr in pairs(banList) do
        if bannedPlr ~= TargettedPlayer then      -- Testing the place of the name
            unbanPlace = unbanPlace + 1
        else
            break
        end
    end

    unbanPlace = unbanPlace + 1

    CSPD.Value = false
    wait(5)

    print(unbanPlace)
    print(banList[unbanPlace])

    table.remove(banList, unbanPlace)                                -- Finally remove the player from the table
    unbanPlace = 0

    warn('should be saving')
    BanlistSave:SetAsync(globalKey, banList)                         -- Saves it (we don't want it to ban him again xD)

    CSPD.Value = true
    end)

function getBans.OnServerInvoke(player)                              -- Local script requesting banlist
    warn('sending banlist')
    print(banList)
    return banList
end


while wait(20) do                                                   -- Updates list every 20 seconds
    getBanList()
end

0
btw, I made this script myself lol, the comments are there because the script is to huge for me to take a look at when there is a problem. User#20388 0 — 6y
0
I know this wont help but dont you use ipairs when declaring a table? birdeater11 14 — 6y

Answer this question