Module:Sandbox/One Bar: Difference between revisions

From The Deadlock Wiki
Jump to navigation Jump to search
One Bar (talk | contribs)
m convert to string
One Bar (talk | contribs)
m null check
Line 48: Line 48:
for i=1,4 do
for i=1,4 do
local ability = ability_data[hero_key][tostring(i)]
local ability = ability_data[hero_key][tostring(i)]
hero_row:tag('td'):wikitext(ability["Name"]):done()
if (ability ~= nil) then
local ability_text = ""
hero_row:tag('td'):wikitext(ability["Name"]):done()
-- Nowhere close to all the instances of ability spirit scaling
local ability_text = ""
-- probably too much nil check but I want the table to print for now
-- Nowhere close to all the instances of ability spirit scaling
if (ability["Info1"] ~= nil and ability["Info1"]["Main"] ~= nil  
-- probably too much nil check but I want the table to print for now
and ability["Info1"]["Main"]["Props"] ~= nil) then
if (ability["Info1"] ~= nil and ability["Info1"]["Main"] ~= nil  
for _, prop in ipairs(ability["Info1"]["Main"]["Props"]) do
and ability["Info1"]["Main"]["Props"] ~= nil) then
if (prop["Scale"] ~= nil) then
for _, prop in ipairs(ability["Info1"]["Main"]["Props"]) do
ability_text = ability_text .. format_spirit_scale(frame, prop["Name"], prop["Value"], prop["Scale"]["Value"])
if (prop["Scale"] ~= nil) then
ability_text = ability_text .. format_spirit_scale(frame, prop["Name"], prop["Value"], prop["Scale"]["Value"])
end
end
else
ability_text = "-"
end
end
end
else
else
ability_text = "-"
hero_row:tag('td'):wikitext(""):done()
end
end
hero_row:tag('td'):wikitext(ability_text):done()
hero_row:tag('td'):wikitext(ability_text):done()

Revision as of 23:37, 27 January 2026

Documentation for this module may be created at Module:Sandbox/One Bar/doc

local p = {};
local item_data = mw.loadJsonData("Data:ItemData.json")
local heroes_data = mw.loadJsonData("Data:HeroData.json")
local ability_data = mw.loadJsonData("Data:AbilityCards.json")

local function format_spirit_scale(frame, key, base, scale)
	local spirit_scale = frame:expandTemplate{ title = "ss", args = {(scale or 0)}}
	return key ..": ".. (base or 0) .. "+" .. spirit_scale .. "\n"
end

-- Outputs a wikitable of heroes and their stats' and abilities' spirit scaling
-- @function   p.write_spirit_scaling_table
-- @param      {}
-- @return     {string}
p.write_spirit_scaling_table = function(frame)
	local filtered_heroes = {}
	for hero_key, hero in pairs(heroes_data) do
		if (not hero["IsDisabled"]) then
			filtered_heroes[hero_key] = hero
		end
	end
	
	local create_table = mw.html.create("table"):addClass("wikitable sortable"):done()
	local header = mw.html.create("tr")
	header
		:tag("th"):wikitext("Hero"):done()
		:tag("th"):wikitext("Stats"):done()
		:tag("th"):attr("colspan", 2):wikitext("First Skill"):done()
		:tag("th"):attr("colspan", 2):wikitext("Second Skill"):done()
		:tag("th"):attr("colspan", 2):wikitext("Third Skill"):done()
		:tag("th"):attr("colspan", 2):wikitext("Ultimate"):done()
	create_table:node(header)
	
	for hero_key, hero in pairs(filtered_heroes) do
		local hero_icon = frame:expandTemplate{ title = "HeroIcon", args = {hero["Name"]}}
		local spirit_scaling = hero["SpiritScaling"]
		local hero_row = mw.html.create("tr")
		hero_row:tag('td'):wikitext(hero_icon):done()
		stats_text = ""
		if (spirit_scaling ~= nil) then
			for k, v in pairs(spirit_scaling) do
				stats_text = stats_text .. format_spirit_scale(frame, k, hero[k], v)
			end
		else
			stats_text = "-"
		end
		hero_row:tag('td'):wikitext(stats_text):done()
		for i=1,4 do
			local ability = ability_data[hero_key][tostring(i)]
			if (ability ~= nil) then
				hero_row:tag('td'):wikitext(ability["Name"]):done()
				local ability_text = ""
				-- Nowhere close to all the instances of ability spirit scaling
				-- probably too much nil check but I want the table to print for now
				if (ability["Info1"] ~= nil and ability["Info1"]["Main"] ~= nil 
					and ability["Info1"]["Main"]["Props"] ~= nil) then
					for _, prop in ipairs(ability["Info1"]["Main"]["Props"]) do
						if (prop["Scale"] ~= nil) then
							ability_text = ability_text .. format_spirit_scale(frame, prop["Name"], prop["Value"], prop["Scale"]["Value"])
						end
					end
				else
					ability_text = "-"
					end
			else
				hero_row:tag('td'):wikitext(""):done()
			end
			hero_row:tag('td'):wikitext(ability_text):done()
		end
		create_table:node(hero_row)
	end
	
	return tostring(create_table)
end

local function get_disabled_items_array()
	local disabledItems = {}
	for k, v in pairs(item_data) do
		if (v["IsDisabled"] == true and v["Name"] ~= nil) then
			disabledItems[k] = v
		end
	end
	return disabledItems
end

p.disabledItemsTable = function(frame)
	local requirements = {}
	local listofItems = ""
	local filteredData = {}
	filteredData = get_disabled_items_array()
	
	local createTable = mw.html.create('table')
			:addClass('wikitable sortable')
			:tag('caption'):wikitext("List of items"):done()
		
	local createTableHeader = mw.html.create('tr')
	createTableHeader
		:tag('th'):wikitext('Variable'):done()
		:tag('th'):wikitext('Name'):done()
		:tag('th'):wikitext('Category'):done()
		:tag('th'):wikitext('Description'):done()
		
	createTable:node(createTableHeader)
	
	-- query all the filtered items. itemName is the item table.
	for internalName, itemName in pairs(filteredData) do 
		local display = itemName["Name"]
		
		listofItems = listofItems .. itemName["Name"] .. "<br/>"
		
		
		local categoryDisplay = itemName["Slot"]
		
		local description = itemName["Description"]
		
		local tableData = mw.html.create('tr')
		tableData
			:tag('td'):wikitext(internalName):done()
			:tag('td'):wikitext(display):done()
			:tag('td'):wikitext(categoryDisplay):done()
			:tag('td'):wikitext(description):done()
			
		table.insert(requirements, tableData)
			
	end	
	
	for _, row in ipairs(requirements) do
		createTable:node(row)
	end
	
	return tostring(createTable)
end

return p