Module:GoodsData/Data

From Against the Storm Official Wiki

Documentation for this module may be created at Module:GoodsData/Data/doc


local CsvUtils = require("Module:CsvUtils")
local DATA_TEMPLATE_NAME = "Template:Goods_csv"

local VALUE_DIVISOR = 12

local INDEX_ID = "id"
local INDEX_NAME = "displayName"
local INDEX_DESCRIPTION = "description"
local INDEX_CATEGORY = "category"
local INDEX_EATABLE = "eatable"
local INDEX_BURNABLE = "canBeBurned"
local INDEX_BURN_TIME = "burningTime"
local INDEX_SELL_VALUE = "tradingSellValue"
local INDEX_BUY_VALUE = "tradingBuyValue"
local INDEX_ICON_FILENAME = "iconName"

local PATTERN_TUTORIAL = "tutorial"
mapNamesToIDs = {}

local function restructureGoodsTable(originalGoodsTable)

	-- A few constants we'll need only within this function.
	local DATA_ROWS = 2
	local INDEX_ORIGINAL_ID = 1
	local INDEX_ORIGINAL_NAME = 2
	local INDEX_ORIGINAL_DESCRIPTION= 3
	local INDEX_ORIGINAL_CATEGORY = 4
	local INDEX_ORIGINAL_EATABLE = 5
	local INDEX_ORIGINAL_BURNABLE = 6
	local INDEX_ORIGINAL_BURN_TIME = 7
	local INDEX_ORIGINAL_SELL_VALUE = 8
	local INDEX_ORIGINAL_BUY_VALUE = 9
	local INDEX_ORIGINAL_ICON_FILENAME = 10

	local newGoodsTable = {}
	for _, originalGood in ipairs(originalGoodsTable[DATA_ROWS]) do

		-- Skip over any rows where the ID contains the tutorial term.
		if not string.find(originalGood[INDEX_ORIGINAL_ID], PATTERN_TUTORIAL) then
			-- Copy over the content, mapping unhelpful indexes into headers keys.
			local newGood = {}
			newGood[INDEX_ID] = originalGood[INDEX_ORIGINAL_ID]
			newGood[INDEX_NAME] = originalGood[INDEX_ORIGINAL_NAME]
			newGood[INDEX_DESCRIPTION] = originalGood[INDEX_ORIGINAL_DESCRIPTION]
			newGood[INDEX_CATEGORY] = originalGood[INDEX_ORIGINAL_CATEGORY]
			newGood[INDEX_EATABLE] = originalGood[INDEX_ORIGINAL_EATABLE] == "True"
			newGood[INDEX_BURNABLE] = originalGood[INDEX_ORIGINAL_BURNABLE] == "True"
			if newGood[INDEX_BURNABLE] then
				newGood[INDEX_BURN_TIME] = tonumber(originalGood[INDEX_ORIGINAL_BURN_TIME])
			else
				newGood[INDEX_BURN_TIME] = 0
			end
			newGood[INDEX_SELL_VALUE] = tonumber(originalGood[INDEX_ORIGINAL_SELL_VALUE]) / VALUE_DIVISOR
			newGood[INDEX_BUY_VALUE] = tonumber(originalGood[INDEX_ORIGINAL_BUY_VALUE]) / VALUE_DIVISOR
			newGood[INDEX_ICON_FILENAME] = originalGood[INDEX_ORIGINAL_ICON_FILENAME] .. ".png"

			-- Also populate the map for looking up IDs with display names
			mapNamesToIDs[newGood[INDEX_NAME]] = newGood[INDEX_ID]

			newGoodsTable[newGood[INDEX_ID]] = newGood
		end
	end

	return newGoodsTable
end

-- Utility module retrieves the data as basic, flat lua tables. We don't
-- need to use the header lookup table that's returned with the data table.
local originalGoodsTable, _ = CsvUtils.extractTables(DATA_TEMPLATE_NAME)

-- Now restructure to be more conducive for data about goods.
goodsTable = restructureGoodsTable(originalGoodsTable)

return {goodsTable, mapNamesToIDs}