Module:Item/Mod: Difference between revisions

From Growtopia
Jump to navigationJump to search
>HashJona
m fix keys typo
>HashJona
add ItemModError category
Line 67: Line 67:
end
end
end
end
 
local n = #parsedEffects
local n = #parsedEffects
local description = ""
local description = ""
if #keys ~= n
then
table.insert(categories, "[[Category:ItemModError]]")
end
if n == 1  
if n == 1  
Line 82: Line 87:
description = firstPart .. ", and " .. parsedEffects[n]
description = firstPart .. ", and " .. parsedEffects[n]
end
end
return {
return {
description = description,
description = description,

Revision as of 08:20, 4 March 2025

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

local effect = {
	['Double Jump'] = 'jump a second time in mid-air',
	['Speedy'] = 'move faster on land',
	['Punch Damage'] = 'break blocks faster',
	['Punch Range'] = 'punch one tile further',
	['Punch Power'] = 'knock back other players further',
	['Skin Color'] = function(args)
		local skin = args['skin'] or 'a specific tone'
		return 'change their skin color to ' .. skin
	end,
	['Miscellaneous'] = function(args)
		return args['misc'] or ""
	end,
	['Light Source'] = 'emit light in [[Dark Background Block (block category)|dark areas]]',
	['Build Range'] = 'build one tile further',
	['Punch Pull'] = 'pull other players towards them upon punching them',
	['High Jump'] = 'jump higher',
	['Slow Fall'] = 'glide slowly to the ground when holding the jump button',
	['Wall Climbing'] = 'cling onto [[Climbing Wall|Climbing Walls]] by pressing the jump button',
	['Fire Hose'] = 'extinguish [[Fire|fires]]',
	['Fireproof'] = 'take 50% less damage from [[Lava Pain Block (block category)|lava pain blocks]]',
	['Ghost Immunity'] = 'immunity against certain types of ghosts',
	['Healing'] = 'heal faster than usual after receiving damage from hitting a [[Pain Block (block category)|pain block]]',
	['XP Buff'] = 'gain more [[Leveling|XP]]',
	['Slippery'] = 'glide on any surface as if it is [[Slippery Block (block category)|slippery]]',
	['Putt Putt Putt'] = 'move slower, but allows the player to harvest trees by walking through them',
	['Damage Reduction'] = 'break blocks more slowly',
	['Knock Back Reduction'] = 'resist a percentage of knockback when [[Punching|punched]] by other players',
	['Speedy in Water'] = 'move faster in water',
	['Float on Water'] = 'float on [[Water Bucket|water]]',
	['Grow Effect'] = 'expand in size',
	['Zombie Weapon'] = 'kill [[G-Virus|zombies]] during a Pandemic',
	['Low Jump'] = 'decrease the player\'s jump height',
	['Card Battle Health'] = 'adds 2 additional health to the player during card battles against a [[Villains|villain]] or another player',	
	['Night Vision'] = 'eliminate the darkness effect created by [[Dark Background Block (block category)|dark background blocks]]'
}

local item = {}

function item.parseEffects(args)
	local parsedEffects = {}
	local categories = {}
	
	local keys = {}
	for k, _ in pairs(args) do
		if type(k) == 'number'
		then
			table.insert(keys, k)
		end
	end

	table.sort(keys)

	for i = 2, #keys do
		local argIndex = keys[i]
		local key = args[argIndex]
		local text = effect[key]
		
		if type(effect[key]) == "function"
		then
			text = effect[key](args)
		end
		if text and string.len(text) > 0
		then
			table.insert(categories, "[[Category:" .. key .. " Mod Items]]")
			table.insert(parsedEffects, text)
		end
	end
	
	local n = #parsedEffects
	local description = ""
	
	if #keys ~= n 
	then
		table.insert(categories, "[[Category:ItemModError]]")
	end
	
	if n == 1 
	then
		description = parsedEffects[1]
	elseif n == 2 
	then
		description = parsedEffects[1] .. " and " .. parsedEffects[2]
	elseif n >= 3 
	then
		local firstPart = table.concat(parsedEffects, ", ", 1, n - 1)
		description = firstPart .. ", and " .. parsedEffects[n]
	end
	
	return {
		description = description,
		categories = table.concat(categories)
	}
end

function item.description(frame) 
	local parent = frame:getParent().args
	local title = mw.title.getCurrentTitle().text or 'unknown'
	local label = parent['label'] or parent[1]
    local parsedEffects =  item.parseEffects(parent)
    local baseSentence = "When equipped, the '''" .. title .. "''' grants the ''" .. label .. "'' [[Mods|mod]]"
    local fullSentence
    
    if parsedEffects.description == ""
    then 
    	fullSentence = baseSentence .. "."
    else 
    	fullSentence = baseSentence.. ", which allows the player to " .. parsedEffects.description .. "."
    end
    return fullSentence .. parsedEffects.categories
end

return item