Module:Param Parse: Difference between revisions
m
Fix pcall
No edit summary |
m (Fix pcall) |
||
(101 intermediate revisions by 14 users not shown) | |||
Line 3:
--]=]
-- <nowiki>
require('strict')
local Infobox = require('Module:Infobox')
local currency = require('Module:Currency').parse
local parse = {}
Line 20 ⟶ 22:
num = string.gsub(num or '',',','')
return tonumber(num)
end
-- Standardized number range: Accepts '1' and '1-5'
function parse.number_or_number_range(prenum)
if not prenum then return end
local ret = ''
local count = 0
for out in string.gmatch(prenum, "[^-]+") do
if count == 1 then
ret = ret .. "➨\n"
elseif count == 3 then
return nil
end
local num = parse.number(out)
if num == nil then
return nil
end
ret = ret .. num
count = count + 1
end
if count == 0 then
return nil
end
return ret
end
function parse.number_or_number_range_low(prenum)
if not prenum then return end
local count = 0
local value = nil
for out in string.gmatch(prenum, "[^-]+") do
if parse.number(out) == nil then
return nil
end
count = count + 1
if count == 1 then
value = out
end
if count > 2 then
return nil
end
end
return parse.number(value)
end
function parse.number_or_number_range_high(prenum)
if not prenum then return end
local count = 0
local value = nil
for out in string.gmatch(prenum, "[^-]+") do
if parse.number(out) == nil then
return nil
end
count = count + 1
if count == 2 then
value = out
end
if count > 2 then
return nil
end
end
return parse.number(value)
end
Line 47 ⟶ 111:
-- Premade Params --
--------------------
-- Standardized actions function
parse.actions = {
name = 'actions',
func = parse.has_content,
}
-- Standardized name function
Line 55 ⟶ 125:
category_incomplete = 'Needs name',
}
local rarities = {"Common", "Uncommon", "Rare", "Epic"}
function parse.get_rarity_func(name)
for _, rarity in ipairs(rarities) do
if name:sub(1, #rarity) == rarity then
return rarity
end
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 123 ⟶ 213:
-- Episode
local valid_episodes = {
['none'] = 'None',
['hopeport'] = 'Hopeport',
['hopeforest'] = 'Hopeforest',
['mine of mantuban'] = 'Mine of Mantuban',
['crenopolis'] = 'Crenopolis',
['stonemaw hill'] = 'Stonemaw Hill',
['bleakholm crags'] = 'Bleakholm Crags'
}
function parse.episode_func(episode)
local valid_episode = valid_episodes[string.lower(episode or '')]
if valid_episode then
return '[[File:Unknown episode icon.png|18px|link=]] None'
else
return '[[File:'..valid_episode..' episode icon.png|18px|link='..valid_episode..']] [['..valid_episode..']]'
end
end
return nil
Line 148 ⟶ 245:
smw_func = parse.episode_smw,
category_incomplete = 'Needs episode',
}
parse.additional_episode = {
name = 'additional_episode',
func = parse.episode_func,
smw_property = 'Additional Episode',
smw_func = parse.episode_smw,
category_complete = 'Infobox with two episodes',
}
-- Premium
local premium_episodes = {
['none'] = 'No',
['hopeport'] = 'No',
['hopeforest'] = 'No',
['mine of mantuban'] = 'Yes',
['crenopolis'] = 'Yes',
['stonemaw hill'] = 'Yes',
['bleakholm crags'] = 'Yes'
}
function parse.premium_func(episode)
local premium_episode = premium_episodes[string.lower(episode or '')]
return premium_episode
end
function parse.premium_smw(episode)
return parse.yes_no_smw(parse.premium_func(episode))
end
parse.premium = {
name = 'premium',
func = {name = parse.premium_func, params = {Infobox.raw_param('episode')}},
smw_property = 'Premium',
smw_func = {name = parse.
}
-- Release
local function unix_time(date)
-- Convert a time to unix time
if date == nil then
Line 176 ⟶ 295:
return nil
end
local formatted_date = os.date('[[%
formatted_date = string.gsub(formatted_date, '
local iso_date = os.date('%Y-%m-%d', time) -- 2024-01-01
local update_string = formatted_date .. ' ([[Game updates/' .. iso_date .. '|Update]])'
return update_string
end
function parse.release_smw(date)
Line 198 ⟶ 319:
-- Value
function parse.value_func(val)
local status, val =
if
return
end
end
parse.value = {
Line 224 ⟶ 332:
}
-- Profession
function parse.profession_bubble_func(profession, level)
local profession_valid = parse.has_content(profession)
local profession_valid_link = profession_valid
local level_valid = parse.number_or_number_range(level)
local category_error = false
if not profession_valid and not level_valid then
Line 234 ⟶ 343:
if not profession_valid and level_valid then
-- Profession undefined but level defined, invalid, show an unknown profession
profession_valid = 'Unknown
profession_valid_link = ''
category_error = true
end
Line 242 ⟶ 352:
category_error = true
end
return '[[File:'..profession_valid..' icon.png|x30px|link='..profession_valid_link..']] '..level_valid..(category_error and '[[Category:Invalid
end
function parse.profession_bubble_smw(profession, level)
Line 258 ⟶ 368:
name = 'profession_bubble_a',
func = {name = parse.profession_bubble_func, params = {Infobox.raw_param('profession_a'), Infobox.raw_param('profession_a_level')}},
smw_property = 'Profession Requirement A',
smw_func = {name = parse.profession_bubble_smw, params = {Infobox.raw_param('profession_a'), Infobox.raw_param('profession_a_level')}},
}
parse.profession_a_smw = {
name = 'profession_a',
func = parse.has_content,
smw_property = 'Profession A',
}
parse.profession_a_level_smw = {
name = 'profession_a_level',
func = parse.number_or_number_range_low,
smw_property = 'Profession Level A',
}
parse.profession_a_level_high_smw = {
name = 'profession_a_level_high',
func = {name = parse.number_or_number_range_high, params = {Infobox.raw_param('profession_a_level')}},
smw_property = 'Profession Level A High',
}
parse.profession_bubble_b = {
name = 'profession_bubble_b',
func = {name = parse.profession_bubble_func, params = {Infobox.raw_param('profession_b'), Infobox.raw_param('profession_b_level')}},
smw_property = 'Profession Requirement B',
smw_func = {name = parse.profession_bubble_smw, params = {Infobox.raw_param('profession_b'), Infobox.raw_param('profession_b_level')}},
}
parse.profession_b_smw = {
name = 'profession_b',
func = parse.has_content,
smw_property = 'Profession B',
}
parse.profession_b_level_smw = {
name = 'profession_b_level',
func = parse.number_or_number_range_low,
smw_property = 'Profession Level B',
}
parse.profession_b_level_high_smw = {
name = 'profession_b_level_high',
func = {name = parse.number_or_number_range_high, params = {Infobox.raw_param('profession_b_level')}},
smw_property = 'Profession Level B High',
}
Line 278 ⟶ 418:
name = 'variant',
func = parse.has_content,
smw_property = 'Variant of',
category_incomplete = 'Needs variant'
}
Line 288 ⟶ 428:
smw_func = parse.yes_no_smw,
category_incomplete = 'Needs passiveness'
}
parse.aggressive = {
name = 'aggressive',
func = parse.yes_no,
smw_property = 'Aggressive',
smw_func = parse.yes_no_smw,
category_incomplete = 'Needs aggressiveness'
}
function parse.difficulty_func(val)
if val == "0" then
return "☆☆☆☆☆"
end
if val == "1" then
return "★☆☆☆☆"
end
if val == "2" then
return "★★☆☆☆"
end
if val == "3" then
return "★★★☆☆"
end
if val == "4" then
return "★★★★☆"
end
if val == "5" then
return "★★★★★"
end
return "N/A"
end
function parse.difficulty_smw(val)
if val == 'N/A' then
return -1
end
val = tonumber(val) -- Intentionally do not use parse.tonumber here
if val == nil then
return nil
end
if val >= 0 and val <= 5 and math.floor(val) == val then
return val
end
return nil
end
-- Quest difficulty
parse.difficulty = {
name = 'difficulty',
func = parse.difficulty_func,
smw_property = 'Difficulty',
smw_func = parse.difficulty_smw,
category_incomplete = 'Needs difficulty'
}
local valid_quest_types = {
['main'] = 'Main',
['side'] = 'Side'
}
function parse.quest_type_func(type)
local valid_type = valid_quest_types[string.lower(type or '')]
if valid_type then
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
parse.quest_type = {
name = 'quest_type',
func = parse.quest_type_func,
smw_property = 'quest_type',
smw_func = parse.quest_type_smw,
category_incomplete = 'Needs quest_type'
}
-- Quest
function parse.quest_smw(quest)
if quest == 'No' then
return nil
end
return parse.has_content(quest)
end
parse.quest = {
name = 'quest',
func = parse.has_content,
smw_property = 'Quest',
smw_func = parse.quest_smw,
category_incomplete = 'Needs quest'
}
-- 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)
local profession_valid = parse.has_content(profession)
local level_valid = parse.number(level)
if not profession_valid then
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',
}
|