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

How do i fix Argument 2 missing or nil?

Asked by 5 years ago

So like I Am trying to make a datastore for a placement system and it is keep on saying Argument 2 missing or nil on this 1 line

DataStore:SetAsync(id, DataModule:SaveData(player))

Is there anyway to fix it?

Here is the full code and the code it sends to

local DataStore = game:GetService("DataStoreService"):GetDataStore("DataStore2")
local DataModule = require(game.ReplicatedStorage.Modules.DataModule)
function getEmpty()
    for _,t in pairs(workspace.Tycoons:GetChildren()) do
        if t:FindFirstChild("Owner").Value == "No Owner" then
            return t
        end
    end
end
function getTycoon(player)
    for _,t in pairs(workspace.Tycoons:GetChildren()) do
        if t:FindFirstChild("Owner").Value == player.Name then
            return t
        end
    end
end


game.Players.PlayerAdded:Connect(function(player)
    local id = player.UserId 

    getEmpty().Owner.Value = player.Name
    wait(.1)
    local Tycoon = getTycoon(player)
    player.CharacterAdded:Connect(function(char)
        wait(0.1)
        char:MoveTo(Tycoon.Plot.Position + Vector3.new(0, 15, 0))
    end)
    local hasData = DataStore:GetAsync(id)

    if hasData then


        if hasData["ItemPlacement"] then
            DataModule:LoadItemPlacement(player, hasData["ItemPlacement"])
    end
end
    spawn(function()
        while wait(30) do
            DataStore:SetAsync(id, DataModule:SaveData(player))
            warn("Autosave!")
        end
    end)
end)
game.Players.PlayerRemoving:connect(function(player)

    local id = player.UserId
    wait(.2)

    getTycoon(player).DroppedOres:ClearAllChildren()
    getTycoon(player).CurrentlyPlacing:ClearAllChildren()
    getTycoon(player).ItemHolder:ClearAllChildren()
    getTycoon(player).Owner.Value = "No Owner"
end)

DataModule

local module = {}
local mm = require(script.Parent.MathModule)

function getTycoon(player)
    for _,t in pairs(workspace.Tycoons:GetChildren()) do
        if t:FindFirstChild("Owner").Value == player.Name then
            return t
        end
    end
end


function module:LoadItemPlacement(player, data)
    local Tycoon = getTycoon(player)
    local base = Tycoon.Plot
    local baseframe = base.CFrame
    local itemHolder = Tycoon.ItemHolder
    for i,v in pairs(data) do
        for _,r in pairs(game.ReplicatedStorage.Models:GetChildren()) do
            if r.ItemId.Value == tonumber(v[1]) then
                local newitem = r:Clone()
                newitem.Parent = itemHolder
                newitem:SetPrimaryPartCFrame(baseframe:toWorldSpace(mm:decodeCFrame(v[2])))
            end
        end
    end
end



local function SaveItemPlacement(player)
    local Tycoon = getTycoon(player)
    local base = Tycoon.Plot
    local baseframe = base.CFrame
    local itemHolder = Tycoon.ItemHolder
    local itemstore = {}
    for i,v in pairs(itemHolder:GetChildren()) do
        local hitbox = v:FindFirstChild("Primary")
        local itemid = v.ItemId.Value
        local itemCframe = baseframe:toObjectSpace(v.PrimaryPart.CFrame)
        itemstore[tostring(i)] = {itemid, mm:encodeCFrame(itemCframe)}
    end
    return itemstore
end
function module:SaveData(player)

    local ItemPlacement = SaveItemPlacement(player)

end


return module
1
:SaveData has no return value and therefore using the call as an expression will evaluate to nil. User#24403 69 — 5y
0
How do i fix that? Corrupt_Wolfstrik3r 51 — 5y
1
By returning the function or something MachoPiggies 526 — 5y
0
Ah, well it say's auto saves but it does not load RIP Corrupt_Wolfstrik3r 51 — 5y

Answer this question