helialprofile.png
Welcome to IOPWiki, Commander. You can contribute to this wiki without an account. Learn how to contribute.

Module:PNCStats

From IOP Wiki
Jump to navigation Jump to search

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

--This is a module to take the raw hero data and export all values for a given character, growth stage and value type
--The returned list is a string with comma separators in order to interface Lua and Javascript
--"Base", "Growth" and "Extra" data is related to hero rarity, "Potential" data is related to hero breakthrough
local p = {}

function p.display( frame )
	--Get invoke parameters
	local hero_ids = tonumber(frame.args[1])--1001... Value type-sanitized but not checked for range, all lists return 0 if not in range
	local level_id = tonumber(frame.args[2])--1 to 10. Value sanitized upstream by Widget:
	local type_id = frame.args[3]--atrBaseDic, atrGrowthDic, atrExtraDic or potential
	
	--Import raw values
	if type_id == 'potential' then
		potential_module = require("Module:Hero_potential")
		potential = potential_module.hero_potential
	else
		hero_module = require("Module:Hero_star")
		hero_star = hero_module.hero_star
	end
	
	local attributes = {102,103,104,105,107,109,110,112,115,126,127,128,202,203,204,212,226,227,228}
	--[[Info from LuaConfigs.attribute. 
	Other attributes exist but are not affected by hero growth. 
	Numbers >200 needed for atrExtraDic values.
	102,202 = Max HP
	103,203 = ATK
	104,204 = Physical Defense
	105 = Attack Speed
	107 = Dodge Rate
	109 = Critical Rate
	110 = Critical Damage (constant so far, but still explicitly included in the raw data)
	112,212 = Physical Penetration
	115 = HP Regeneration at turn end
	126,226 = Hashrate
	127,227 = Operands Defense
	128,228 = Operands Penetration]]

	local attributes_list = ''
	if type_id == 'potential' then
		for k,v in ipairs(attributes) do
			--The raw data sometimes skips values,
			--so we have to check and default to 0 where necessary
			if potential[hero_ids] and potential[hero_ids][level_id-1]['atrDic'] and potential[hero_ids][level_id-1]['atrDic'][v] then
				attributes_list = attributes_list..potential[hero_ids][level_id-1]['atrDic'][v]..','
			else
				attributes_list = attributes_list..'0,'
			end
		end
	else
		for k,v in ipairs(attributes) do
			--The raw data sometimes skips attributes,
			--so we have to check and default to 0 where necessary
			if hero_star[hero_ids] and hero_star[hero_ids][level_id][type_id] and hero_star[hero_ids][level_id][type_id][v] then
				attributes_list = attributes_list..hero_star[hero_ids][level_id][type_id][v]..','
			else
				attributes_list = attributes_list..'0,'
			end
		end
	end
	
	--Return raw list with comma separators
	--It is possible to have a valid list filled with 0, data check must be performed elsewhere
	return tostring( attributes_list )
end

return p