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

How do I return the Table with the metatable in it using Script Module?

Asked by 5 years ago
Edited 5 years ago

All this Script Module does is return the table that has a Metatable in it

-- Variables
local module = {}
local xp_lvl_DataStore = game:GetService('DataStoreService'):GetDataStore('xp/lvlStore')

-- Events
function module.XpLvlTable()
    local xpLvlModuleTable = {}
    local lvlControl = {
        __call = function(xpToAdd,key,xpLvlTable)
            -- Gets current lvl and xp
            local curLvl = xpLvlTable[2]
            local newXp = xpLvlTable[1] + xpToAdd
            -- Checks if you lvled up
            if curLvl ==  0 and newXp >= 10 then
                print('FIRST LVL UP')
                local newXp = newXp - 10
                -- Checks if can lvl up again
                for i = curLvl,350 do
                    if i == 350 then
                        table.remove(xpLvlTable,1)
                        table.insert(xpLvlTable,1,0)
                        table.remove(xpLvlTable,2)
                        table.insert(xpLvlTable,2,350)
                    elseif newXp - (10*i) < 0 then
                        -- Sets xp + lvl in the table then saves
                        table.remove(xpLvlTable,1)
                        table.insert(xpLvlTable,1,newXp)
                        table.remove(xpLvlTable,2)
                        table.insert(xpLvlTable,2,i)
                        xp_lvl_DataStore:SetAsync(key,xpLvlTable)
                        break
                    else
                        newXp = newXp - (10*i)
                    end
                end
            elseif curLvl == 350 then
                print('MAX LVL')
                -- Sets xp + lvl in xpLvlTable then saves
                table.remove(xpLvlTable,1)
                table.insert(xpLvlTable,1,0)
                xp_lvl_DataStore:SetAsync(key,xpLvlTable)
            elseif newXp >= 10*curLvl then
                print('LVL UP')
                -- Gets current lvl and xp
                local curLvl = xpLvlTable[2]
                local newXp = xpLvlTable[1] + xpToAdd
                -- Checks if you lvled up
                local newXp = newXp - 10*curLvl
                -- Checks if can lvl up again
                for i = curLvl,350 do
                    if i == 350 then
                        table.remove(xpLvlTable,1)
                        table.insert(xpLvlTable,1,0)
                        table.remove(xpLvlTable,2)
                        table.insert(xpLvlTable,2,350)
                    elseif newXp - (10*i) < 0 then
                        -- Sets xp + lvl in the xpLvlTable then saves
                        table.remove(xpLvlTable,1)
                        table.insert(xpLvlTable,1,newXp)
                        table.remove(xpLvlTable,2)
                        table.insert(xpLvlTable,2,i)
                        xp_lvl_DataStore:SetAsync(key,xpLvlTable)
                        break
                    else
                        newXp = newXp - (10*i)
                    end
                end
            else
                print('NO LVL')
                -- Sets xp then saves
                table.remove(xpLvlTable,1)
                table.insert(xpLvlTable,1,newXp)
                xp_lvl_DataStore:SetAsync(key,xpLvlTable)
            end
        end
    }
    table.insert(xpLvlModuleTable,1,lvlControl)
    return xpLvlModuleTable
end

return module

This is the Script that gets the error in line 21 "attempt to call local "xpLvlModuleTable" (a table value)"

-- Variables
local xp_lvl_DataStore = game:GetService('DataStoreService'):GetDataStore('xp/lvlStore')
local repStorage = game:GetService('ReplicatedStorage')
local serverScriptStore = game:GetService('ServerScriptService')
local xpChanger = repStorage:WaitForChild('Xp_LvlChanged')
local xpToAdd = 5
local part = script.Parent
local maxLvl = 350
local xp_LvlModule = require (serverScriptStore.Xp_LvlModule)

-- Events
local success,message = pcall (part.ClickDetector.MouseClick:Connect(function(plr)
    -- Variables
    local xpLvlModuleTable = xp_LvlModule.XpLvlTable()
    local key = 'Player-'..plr.UserId
    local xpLvlTable = xp_lvl_DataStore:GetAsync(key)
    -- Fire to player
    xpChanger:FireClient(plr,xpToAdd)
    -- Gets table to save
    print(xp_LvlModule.XpLvlTable())
    xpLvlModuleTable(xpToAdd,key,xpLvlTable)
    print('Xp: '..xpLvlTable[1]..' Lvl: '..xpLvlTable[2])
end))

Answer this question