Module:Param Parse: Difference between revisions

3,887 bytes added ,  Tuesday at 19:49
m
Fix pcall
No edit summary
m (Fix pcall)
(31 intermediate revisions by 8 users not shown)
Line 3:
--]=]
-- <nowiki>
require('strict')
local Infobox = require('Module:Infobox')
local currency = require('Module:Currency').parse
Line 34 ⟶ 35:
return nil
end
local num = parse.number(out)
if num == nil then
return nil
Line 40 ⟶ 41:
ret = ret .. num
count = count + 1
end
if count == 0 then
return nil
end
return ret
Line 107 ⟶ 111:
-- Premade Params --
--------------------
 
-- Standardized actions function
parse.actions = {
name = 'actions',
func = parse.has_content,
}
 
-- Standardized name function
Line 115 ⟶ 125:
category_incomplete = 'Needs name',
}
local rarities = {"Common", "Uncommon", "Rare", "Epic"}
-- Standardized examine function
function parse.get_rarity_func(name)
parse.examine = {
for _, rarity in ipairs(rarities) do
name = 'examine',
if name:sub(1, #rarity) == rarity then
func = parse.has_content,
return rarity
smw_property = 'Examine',
end
category_incomplete = 'Needs examine',
end
return nil
end
parse.rarity_from_name = {
name = 'rarity_from_name',
func = {name = parse.get_rarity_func, params = {Infobox.raw_param('name')}}
}
 
-- Standardized description function
function parse.description_func(description, examine)
if not description and examine then
description = examine
end
return parse.has_content(description)
end
parse.description = {
name = 'description',
func = {name = parse.description_func, params = {Infobox.raw_param('description'), Infobox.raw_param('examine')}},
smw_property = 'Description',
category_incomplete = 'Needs description',
}
 
Line 188 ⟶ 218:
['mine of mantuban'] = 'Mine of Mantuban',
['crenopolis'] = 'Crenopolis',
['stonemaw hill'] = 'Stonemaw Hill',
['bleakholm crags'] = 'Bleakholm Crags'
}
function parse.episode_func(episode)
Line 230 ⟶ 261:
['mine of mantuban'] = 'Yes',
['crenopolis'] = 'Yes',
['stonemaw hill'] = 'Yes',
['bleakholm crags'] = 'Yes'
}
function parse.premium_func(episode)
Line 247 ⟶ 279:
 
-- Release
local function unix_time(date)
-- Convert a time to unix time
if date == nil then
Line 287 ⟶ 319:
-- Value
function parse.value_func(val)
local status, val = pcall(currency, val)
return currency(val)
if status then
return val
end
end
parse.value = {
Line 447 ⟶ 482:
}
 
local valid_quest_types = {
-- Requirements
['main'] = 'Main',
function parse.requirements_func(value)
['side'] = 'Side'
local icon_map = {
}
scout = '[[File:Scout_icon.png|link=Scout|width=18x18]]',
function parse.quest_type_func(type)
knowledge = '[[File:Knowledge_icon.png|link=Knowledge|width=18x18]]',
local valid_type = valid_quest_types[string.lower(type or '')]
quest = '[[File:Quests_icon.png|link=Quests|width=18x18]]',
if valid_type then
min_weapon_strength = '[[File:Scout_icon.png|link=Scout|width=18x18]]'
return valid_type
}
else
return 'None'
end
return nil
end
function parse.quest_type_smw(type)
local valid_type = valid_quest_types[string.lower(type or '')]
if valid_type then
return valid_type
end
return nil
end
 
-- Quest type
local parts = {}
parse.quest_type = {
for part in value:gmatch("%w+") do
name = 'quest_type',
table.insert(parts, part)
func = parse.quest_type_func,
end
smw_property = 'quest_type',
smw_func = parse.quest_type_smw,
category_incomplete = 'Needs quest_type'
}
 
-- Quest
local profession = {parts[1], parts[2]}
function parse.quest_smw(quest)
local knowledge = {parts[3], parts[4]}
local if quest == {parts[5],'No' parts[6]}then
return nil
local min_weapon_strength = {parts[7], parts[8]}
end
return parse.has_content(quest)
end
 
parse.quest = {
return string.format(
name = 'quest',
"%s %s, %s %s, %s %s, %s %s",
func = parse.has_content,
icon_map[profession[1]], profession[2],
smw_property = 'Quest',
icon_map[knowledge[1]], knowledge[2],
smw_func = parse.quest_smw,
icon_map[quest[1]], quest[2],
category_incomplete = 'Needs quest'
icon_map[min_weapon_strength[1]], min_weapon_strength[2]
}
)
 
-- Unlock Level
function parse.unlock_level_func(profession, level)
local level_valid = parse.number(level)
local profession_valid = parse.has_content(profession)
local profession_valid_link = profession_valid
if not profession_valid and not level_valid then
return nil
end
if not profession_valid and level_valid then
-- Profession undefined but level defined, invalid, show an unknown profession
profession_valid = 'Unknown episode'
profession_valid_link = ''
end
if profession_valid and not level_valid then
-- Profession defined without level, invalid, show an unknown level
level_valid = '?'
end
return '[[File:'..profession_valid..'_icon.png|link='..profession_valid_link..'|width=18x18]] '..level_valid
end
 
function parse.unlock_level_smw(profession, level)
parse.requirements = {
local profession_valid = parse.has_content(profession)
name = 'requirements',
local funclevel_valid = parse.requirements_func,number(level)
smw_property = 'Requirements',
if not profession_valid then
category_incomplete = 'Needs requirements'
return nil
end
if not level_valid then
return nil
end
return level_valid
end
 
parse.unlock_level = {
name = 'unlock_level',
func = {name = parse.unlock_level_func, params = {Infobox.raw_param('profession_a'), Infobox.raw_param('unlock_level')}},
smw_property = 'Unlock level',
smw_func = {name = parse.unlock_level_smw, params = {Infobox.raw_param('profession_a'), Infobox.raw_param('unlock_level')}},
category_incomplete = 'Needs unlock level',
}
 
-- Knowledge
parse.knowledge = {
name = 'knowledge',
func = parse.number,
smw_property = 'Knowledge',
category_incomplete = 'Needs knowledge',
}
 
parse.health = {
name = 'health',
func = parse.number,
smw_property = 'Health',
category_incomplete = 'Needs health',
}
 
parse.experience = {
name = 'experience',
func = parse.number,
smw_property = 'Experience',
category_incomplete = 'Needs experience',
}
 
local valid_attack_styles = {
['none'] = 'None',
['impact'] = 'Impact',
['cryonae'] = 'Cryonae',
['arborae'] = 'Arborae',
['tempestae'] = 'Tempestae',
['infernae'] = 'Infernae',
['necromae'] = 'Necromae',
}
 
local function attack_style_func(style)
local attack_style = valid_attack_styles[string.lower(style or '')]
if attack_style then
if attack_style == 'None' then
return 'None'
else
return string.format('[[File:%s damage icon.png|18px|link=%s]] [[%s]]', attack_style, attack_style, attack_style)
end
end
return nil
end
 
local function attack_style_smw(style)
local attack_style = valid_attack_styles[string.lower(style or '')]
if attack_style then
return attack_style
else
return nil
end
end
 
parse.attack_style = {
name = 'attack_style',
func = attack_style_func,
smw_property = 'Attack style',
smw_func = attack_style_smw,
category_incomplete = 'Needs attack style',
}
 
parse.immune_to = {
name = 'immune_to',
func = attack_style_func,
smw_property = 'Immune to',
smw_func = attack_style_smw,
category_incomplete = 'Needs immune to',
}
 
parse.vulnerable_to = {
name = 'vulnerable_to',
func = attack_style_func,
smw_property = 'Vulnerable to',
smw_func = attack_style_smw,
category_incomplete = 'Needs vulnerable to',
}
 
227

edits