Module:Sandbox/User:Jakesterwars/Skill calc/Helpers
		
		
		
		
		
		Jump to navigation
		Jump to search
		
		
	
Module documentation
This documentation is transcluded from Template:Module sandbox/doc. [edit] [history] [purge]
Module:Sandbox/User:Jakesterwars/Skill calc/Helpers requires Module:Addcommas.
Module:Sandbox/User:Jakesterwars/Skill calc/Helpers requires Module:Experience.
Module:Sandbox/User:Jakesterwars/Skill calc/Helpers requires Module:Yesno.
Module:Sandbox/User:Jakesterwars/Skill calc/Helpers is required by Module:Sandbox/User:Jakesterwars/Skill calc.
Module:Sandbox/User:Jakesterwars/Skill calc/Helpers is required by Module:Skill calc.
This module is a sandbox for Jakesterwars. It can be used to test changes to existing modules, prototype new modules, or just experimenting with lua features.
Invocations of this sandbox should be kept in userspace; if the module is intended for use in other namespaces, it should be moved out of the sandbox into a normal module and template.
This default documentation can be overridden by creating the /doc subpage of this module, as normal.
local p = {}
local yesNo = require('Module:Yesno')
local xp = require('Module:Experience').xp_at_level
local level = require('Module:Experience').level_at_xp_unr
local commas = require('Module:Addcommas')._add
function p.filterData(data, method, dataCriteria, goalLevel)
	local methodData = {}
	local addRow = false
	for i, v in ipairs(data) do
		if dataCriteria ~= 'Hide' or tonumber(v.level) <= tonumber(goalLevel) then
			if method == 'All' then
				table.insert(methodData, v)
			else
				for type in string.gmatch(v.type, '([^,]*)') do
					local formatted = string.gsub(type, '^%s*(.-)%s*$', '%1')
					if formatted == method then
						table.insert(methodData, v)
					end
				end	
			end
		end
	end
	-- Sort the data
	table.sort(methodData, function(a, b) return p.sortTable(a, b) end)
	
	return methodData
end
function p.calculateCurrentGoalInformation(curr, currToggle, goal, goalToggle)
	local currLevel, currXP, goalLevel, goalXP
    
    if currToggle == 'Level' and tonumber(curr) <= 99 then
    	if tonumber(curr) == 0 then
    		currLevel = 1
    		currXP = xp({args = {1}})
    	else
    		currLevel = curr
        	currXP = xp({args = {curr}})
        end
    else
    	currLevel = level({args = {curr}})
        currXP = curr
    end
    
    if goalToggle == 'Level' and tonumber(goal) <= 99 then
    	if tonumber(goal) == 0 then
    		goalLevel = 1
    		goalXP = xp({args = {1}})
    	else
    		goalLevel = goal
        	goalXP = xp({args = {goal}})
        end
    else
    	goalLevel = level({args = {goal}})
        goalXP = goal
    end
    -- Prevent negative values
    local remaining = math.ceil(goalXP - currXP)
    if remaining < 0 then
        remaining = 0
    end
    
    return { currentLevel = tonumber(currLevel), currentExperience = currXP, goalLevel = tonumber(goalLevel), goalExperience = goalXP, experienceRemaining = remaining }
end
function p.membersIcon(data)
	local icon
	if data then
		local membersOnly = yesNo(data, true)
		if membersOnly then
			icon = '[[File:Member icon.png|center|link=Members]]'
		else
			icon = '[[File:Free-to-play icon.png|center|link=Free-to-play]]'
		end
	else
		icon = '[[File:Free-to-play icon.png|center|link=Free-to-play]]'
	end
	
	return icon	
end
function p.checkForBoostingSetSkill(skill)
  return not not ({
    Woodcutting = true, Farming = true, Fishing = true, Mining = true, Firemaking = true, Construction = true, Prayer = true
  })[skill]
end
function p.determineSetValue(pieces, skill)
	local isEverythingTrue = true
	local value = 0
	for _, v in ipairs(pieces) do
		if v[1] == 'false' or v[1] == nil then
			isEverythingTrue = false
		else
			value = value + tonumber(v[2])
		end
	end
	
	if isEverythingTrue then
		return skill == 'Prayer' and 0.05 or 0.025
	else
		return value
	end
end
function p.createMessage(skill, bulkData)
    return string.format('To train %s from %s experience (level %s) to %s experience (level %s), %s experience is required.', 
    	skill, commas(bulkData.currentExperience), bulkData.currentLevel, commas(bulkData.goalExperience), bulkData.goalLevel, commas(bulkData.experienceRemaining))
end
function p.sortTable(a, b)
	local value = false
	
	if a.level == b.level then
		if a.xp == b.xp then
			if a.name == b.name then
				if a.title and b.title then
					value = a.title < b.title
				elseif a.title and not b.title then
					value = a.title < b.name
				elseif not a.title and b.title then
					value = a.name < b.title
				end
			else
				value = a.name < b.name	
			end
		else
			value = a.xp < b.xp
		end
	else
		value = a.level < b.level
	end
    
    return value
end
function p.jagexFloor(num, numDecimalPlaces)
  local mult = 10 ^ (numDecimalPlaces or 0)
  return math.floor(num * mult) / mult
end
function p.isRowGrey(actionLevel, currentLevel)
	local color = ''
	local aLevel = actionLevel and actionLevel or 1
	
	if aLevel > tonumber(currentLevel) then
		color = 'table-bg-fade'
	end
	
	return color
end
return p