Locating problem

To simplify my problem, I will insert an item “data” in a table
Two elements here- Item Name, Item Data
The current problem is how my code is structured, tables are “wonky”?
I don’t know how to explain, sorry for my bad English.

local module = {
	["ItemAwardType"] = "Tower",  -- Tower, Money, Item
	["ItemAward"] = "Betty Bloxxer",
	["Betty Bloxxer"] = {
		["Name"] = "Betty Bloxxer",
		["Price"] = 100,
		["Image"] = "rbxassetid://5164241067"
	},
	["ChangeAmount"] = 2,
	["TIXAmount"] = 25,
	["TIXProduce"] = 10,
	["NextLevel"] = "Baseplate 0-2"
}

return module

^^^ Item Analogy: Item Name- ItemAward, Item Data- [“Betty Bloxxer”]

ServerStorage.Bricks.Bindables.LevelData.Event:Connect(function(win, map, findLevelData, plr)
	local playerData = ReplicatedStorage.Bricks.Functions.GetDataServer:Invoke(plr)
	
	local levelData = require(findLevelData)
	if levelData.ItemAwardType == "Money" then
	elseif levelData.ItemAwardType == "SubtleItem" then
		if not table.find(playerData["SubtleItems"], levelData[levelData.ItemAward]) then
			table.insert(playerData["SubtleItems"], levelData[levelData.ItemAward])
		end
	elseif levelData.ItemAwardType == "Tower" then
		-- Here
		if not data["OwnedPackets"][levelData[levelData.ItemAward]] then
			table.insert(data["OwnedPackets"], levelData[levelData.ItemAward])
		end
	end

	if not table.find(playerData.OwnedLevels, map.Name) then
		table.insert(playerData.OwnedLevels, map.Name)
		if levelData["ChangeAmount"] then
			playerData["AmountPackets"] = levelData["ChangeAmount"]
		end
	end

	if levelData["NextLevel"] then
		playerData["CurrentLevel"] = levelData["NextLevel"]
		playerData["SelectedLevel"] = levelData["NextLevel"]
	end
end)

^^^ The main code

elseif levelData.ItemAwardType == "Tower" then
		-- Here
		if not data["OwnedPackets"][levelData[levelData.ItemAward]] then
			table.insert(data["OwnedPackets"], levelData[levelData.ItemAward])
		end
	end

A snippet of the main code

ServerScriptService.Datastore3:137: attempt to index nil with table

^^^ My output
I’ll attempt to explain again, basically what I EXPECT my code to do is to; (I actually am trying so hard, it’s unexplainable for me.)

  • Check if item data is not already in the data[“OwnedPackets”]
  • Insert the item data to data[“OwnedPackets”]
1 Like

What does line 137 of your Datastore3 script look like?

This is line 137 of Datastore3.

Seems like "OwnedPackets" does not exist in data.
You might want to initialize it first with something like this:

if nil == data["OwnedPackets"] then
	data["OwnedPackets"] = {}
end

The problem has been located with this code:

local levelData = require(game.ServerScriptService.ModuleScript)
local data = {}

-- without this if-block "attempt to index nil with table" error happens in line: 10
if nil == data["OwnedPackets"] then
	data["OwnedPackets"] = {}
end

if not data["OwnedPackets"][levelData[levelData.ItemAward]] then  --- line: 10
	table.insert(data["OwnedPackets"], levelData[levelData.ItemAward])
end

print("data", data)
2 Likes