Module:Skills/sandbox

local getArgs = require('Module:Arguments').getArgs local p = {} local function makeInvokeFunction(funcName) -- makes a function that can be returned from #invoke, using -- Module:Arguments. return function (frame) local args = getArgs(frame, {parentOnly = true}) return p[funcName](args) end end local styles = { ['skill'] = '\n|-\n!style="background:#000;color:#fff;border-radius:3.5px"|', ['skillc'] = '\n!style="background:#000;color:#fff;border-radius:3.5px"|', ['cost1'] = '\n|style="background:#222;border-radius:3.5px"|', ['cost2'] = '\n|style="background:#282828;border-radius:3.5px"|', ['effect1'] = '\n|style="background:#222;text-align:left;border-radius:3.5px"|', ['effect2'] = '\n|style="background:#282828;text-align:left;border-radius:3.5px"|', ['effect1p'] = '\n|colspan=2 style="background:#222;text-align:left;border-radius:3.5px"|', ['effect2p'] = '\n|colspan=2 style="background:#282828;text-align:left;border-radius:3.5px"|', ['order'] = '\n|style="background:#000;text-align:left;border-radius:3.5px"|', ['smt1table'] = '\n{|class="customtable smt1" width="100%"', ['p3table'] = '\n{|class="customtable p3" width="100%"', ['p4table'] = '\n{|class="customtable p4" width="100%"', ['statlow'] = '\n|style="background:#000;color:#fff;border-radius:3.5px"|', } p.row = makeInvokeFunction('_row') function p._row(args) local row = args[1] or args.row local game = args[2] or args.game local code = args[3] or args.code or args.Skill1 or args.Skill2 or args.Skill3 or args.Skill4 or args.Skill5 or args.Skill6 or args.Skill7 or args.Skill8 or args.Skill9 or args.Skill10 or args.Skill11 or args.Skill12 or args.Skill13 or args.Skill14 or args.Skill15 or args.Skill16 or args.Skill17 or args.Skill18 or args.Skill19 or args.Skill20 or args.Skill21 or args.Skill22 or args.Skill23 or args.Skill24 or args.Skill25 or args.Skill26 or args.Skill27 or args.Skill28 or args.Skill29 or args.Skill30 if not code or code ==  then return  end local level = args[4] or args.Level1 or args.Level2 or args.Level3 or args.Level4 or args.Level5 or args.Level6 or args.Level7 or args.Level8 or args.Level9 or args.Level10 or args.Level11 or args.Level12 or args.Level13 or args.Level14 or args.Level15 or args.Level16 or args.Level17 or args.Level18 or args.Level19 or args.Level20 or args.Level21 or args.Level22 or args.Level23 or args.Level24 or args.Level25 or args.Level26 or args.Level27 or args.Level28 or args.Level29 or args.Level30 if level == 'innate' or level == 'default' or level == 'Default' then level = 'Innate' end local data = require('Module:Skills/' .. game) local skill = data.skills[code] if not skill then local alias = data.aliases[code] if alias then code = alias skill = data.skills[code] else return 'Invalid parameter 3 of ' .. '"' .. code .. '". You may correct the skill name or modify module:Skills/' .. game .. ' if needed. '		end end if skill.name then code = skill.name end local skillcell = styles['skill'] .. code local cost = skill.cost if game == 'SMT3' then if cost == 'Convo' then cost = 'Convo ' elseif cost == 'Interrupt' then cost = 'Interrupt ' end end local cost1 = '\n||' .. cost local cost2 = styles['cost2'] .. cost local effect1 = styles['effect1'] .. skill.effect local effect2 = styles['effect2'] .. skill.effect local order = styles['order'] .. skill.cost local element1, element2 if skill.element then element1 = '\n||' .. skill.element or '' element2 = styles['cost2'] .. skill.element or '' end local level1, level2 if level then level1 = '\n||' .. level or '' level2 = styles['cost2'] .. level or '' elseif skill.pre then level1 = '\n||' .. skill.pre level2 = styles['cost2'] .. skill.pre end local result if row == 'r01' then result = skillcell .. effect1 -- Odd number row for enemy whose skill cost is irrelevant. elseif row == 'r02' then result = skillcell .. effect2 -- Even number row for enemy whose skill cost is irrelevant. elseif row == 'r11' then if game == 'SMT3' and skill.phy then result = skillcell .. styles['effect1p'] .. skill.effect -- Odd number row for enemy whose physical skills cost no HP. else result = skillcell .. cost1 .. effect1 -- Odd number row for demon which does not learn new skill on level gain. end elseif row == 'r12' then if game == 'SMT3' and skill.phy then result = skillcell .. styles['effect2p'] .. skill.effect -- Even number row for enemy whose physical skills cost no HP. else result = skillcell .. cost2 .. effect2 -- Even number row for demon which does not learn new skill on level gain. end result = skillcell .. cost2 .. effect2 -- Even number row for demon which does not learn new skill on level gain. elseif row == 'r21' then result = skillcell .. cost1 .. effect1 .. level1 -- Odd number row for demon/persona which learn new skill on level gain. elseif row == 'r22' then result = skillcell .. cost2 .. effect2 .. level2 -- Even number row for demon/persona which learn new skill on level gain. elseif row == 'r31' then result = skillcell .. effect1 .. level1 -- Odd number row for guest who learn new skill on level gain. elseif row == 'r32' then result = skillcell .. effect2 .. level2 -- Even number row for guest who learn new skill on level gain. elseif row == 'p12' then result = styles['skill'] .. level .. styles['skillc'] .. code .. effect1 -- Row for Persona 1 and 2 persona elseif row == 'rf' then result = skillcell .. effect1 .. order -- Row for Persona-specific fusion spell. elseif row == 'dk1' then result = skillcell .. element1 .. cost1 .. effect1 -- Odd number row for DemiKids stats skill list. elseif row == 'dk2' then result = skillcell .. element2 .. cost2 .. effect2 -- Odd number row for DemiKids stats skill list. elseif row == 'dkc1' then result = skillcell .. level1 .. element1 .. cost1 .. effect1 -- Odd number row for DemiKids stats combo skill list. elseif row == 'dkc2' then result = skillcell .. level2 .. element2 .. cost2 .. effect2 -- Odd number row for DemiKids stats combo skill list. else result = 'Invalid parameter 1 of ' .. '"' .. row .. '". '	end return result end p.SMTstats = makeInvokeFunction('_SMTstats') function p._SMTstats(args) local image = args[1] or args.Image or '' local magdrop = args[2] or args['Mag Drop'] or '' local mag = args[3] or args.MAG or '' local cp = args[4] or args.CP or '' local race = args[5] or args.Race or args.Clan or '' local alignment = args[6]or args.Alignment or args.Align or '' local level = args[7] or args.Level or '' local hp = args[8] or args.HP or '' local mp = args[9] or args.MP or '' local noa = args[10] or args.NOA or args.NOH or '' local str = args[11] or args.STR or args.st or '' local int = args[12] or args.INT or args['in'] or '' local mgc = args[13] or args.MGC or args.ma or '' local stm = args[14] or args.STM or args.vi or '' local agl = args[15] or args.AGL or args.ag or '' local lck = args[16] or args.LCK or args.lu or '' local atk = args[17] or args.Atk or '' local hit = args[18] or args.Hit or '' local def = args[19] or args.Def or '' local avd = args[20] or args.Avd or args.Eva or '' local mpw = args[21] or args.Mpw or '' local mef = args[22] or args.Mef or '' local drop = args[23] or args.Drop or '' local resist = args[24] or args.Resist or args.Affinity local skills = args[25] or args.Skills if image then image = styles['skill'] .. image elseif image ==  then image =  end local magt if mag~= or cp~= then magt = 'CP ' elseif magdrop~='' then magt = '| MAG ' end if race == 'Seraph' then race = 'Seraph' elseif race == 'Ghost' then race = 'Ghost' elseif race == 'Gaean' or race == 'Gaian' then race = 'Gaean' elseif race == 'Messian' then race = 'Messian' elseif race == mw.title.getCurrentTitle(race) then race =  .. race ..  else race = race end if resist then resist = styles['smt1table'] .. '\n!width=100|Resistances\n|style="background:#000;text-align:left;padding:0 5px"|' .. resist .. '\n|}' else resist = '' end local los = '' for k, v in ipairs(mw.text.split(skills, '\n')) do		local code = v		local data = require('Module:Skills/SMT1') local skill = data.skills[code] if not skill then local alias = data.aliases[code] if alias then code = alias skill = data.skills[code] else return 'Invalid parameter 3 of ' .. '"' .. code .. '". You may correct the skill name or modify module:Skills/SMT1 if needed. '			end end if skill.name then code = skill.name end local skillcell = styles['skill'] .. code local cost = skill.cost local effect = skill.effect if magdrop ~= '' then if (k % 2 == 0) then los = los .. skillcell .. styles['effect2'] .. effect else los = los .. skillcell .. styles['effect1'] .. effect end else if (k % 2 == 0) then los = los .. skillcell .. styles['cost2'] .. cost .. styles['effect2'] .. effect else los = los .. skillcell .. '\n||' .. cost .. styles['effect1'] .. effect end end end local categoryb, categoryd, categorya if magdrop then categoryb =  else categoryb =  end if mag then categoryd =  else categoryd =  end if alignment == 'Law' or alignment == 'Light-Law' or alignment == 'Neutral-Law' or alignment == 'Dark-Law' then categorya = '' elseif alignment == 'Neutral' or alignment == 'Light-Neutral' or alignment == 'Neutral-Neutral' or alignment == 'Dark-Neutral' then categorya = '' elseif alignment == 'Chaos' or alignment == 'Light-Chaos' or alignment == 'Neutral-Chaos' or alignment == 'Dark-Chaos' then categorya = '' elseif not alignment or alignment ==  or '-' then categorya =  end local costt if mag~= or cp~= then costt = styles['skillc'] .. 'Cost' elseif magdrop~= then costt =  end if cp then cp = ' / ' .. cp elseif cp ==  then cp =  end if not magdrop or magdrop == '' then magdrop = mag .. cp end local skillt if skills ~= '' then skillt = '\n!colspan="3"| List of Skills \n|-\n' .. styles['skillc'] .. 'Skill' .. costt .. styles['skillc'] .. 'Effect' else skillt = '' end local result result = '{|align="center" style="min-width:650px;text-align:center; background: #222222; border:2px solid #608341;border-radius:7px; clear:both; font-size:75%; font-family:verdana;"\n|-\n|\n{|width=100% cellpadding=0 cellspacing=0\n' .. image .. '\n|' .. styles['smt1table'] .. '\n! Race \n! Alignment \n!Level\n!HP\n!MP\n!' .. magt .. '\n|-' .. styles['statlow'] .. race .. styles['statlow'] .. alignment .. styles['statlow'] .. level .. styles['statlow'] .. hp .. styles['statlow'] .. mp .. styles['statlow'] .. magdrop .. '\n|}' .. styles['smt1table'] .. '\n!NOH \n!Strength\n!Intelligence\n!Magic\n!Vitality\n!Agility\n!Luck\n|-' .. styles['statlow'] .. noa .. styles['statlow'] .. str .. styles['statlow'] .. int .. styles['statlow'] .. mgc .. styles['statlow'] .. stm .. styles['statlow'] .. agl .. styles['statlow'] .. lck .. '\n|}' .. styles['smt1table'] .. '\n!Attack\n!Hit\n!Defense\n!Evasion\n!MPower \n!MEffect \n! Drop \n|-' .. styles['statlow'] .. atk .. styles['statlow'] .. hit .. styles['statlow'] .. def .. styles['statlow'] .. avd .. styles['statlow'] .. mpw .. styles['statlow'] .. mef .. styles['statlow'] .. drop .. '\n|}\n|}' .. resist .. styles['smt1table'] .. skillt .. los .. '\n|}\n|}' .. categoryb .. categoryd .. categorya return result end p.P4stats = makeInvokeFunction('_P4stats')

function p._P4stats(args) local boss = args[1] or args.Boss local hp = args[2] or args.HP	local sp = args[3] or args.SP	local level = args[4] or args.Level or '' local arcana = args[5] or args.Arcana or '' local strength = args[6]or args.Strength or args.st or '' local magic = args[7] or args.Magic or args.ma or '' local endurance = args[8] or args.Endurance or args.en or '' local agility = args[9] or args.Agility or args.ag or '' local luck = args[10] or args.Luck or args.lu or '' local resist = args[11] or args.Resist or args.Resists local block = args[12] or args.Block or args.Null or args.Immune local absorb = args[13] or args.Absorb or args.Absorbs or args.Drain local reflect = args[14] or args.Reflect or args.Reflects or args.Repel local weak = args[15] or args.Weak local phys = args[16] or args.Phys local fire = args[17] or args.Fire local ice = args[18] or args.Ice local elec = args[19] or args.Lit or args.Elec local wind = args[20] or args.Wind local light = args[21] or args.Light local dark = args[22] or args.Dark local alm = args[23] or args.Alm or args.Almighty local inherit = args[24] or args.Inherit local yen = args[25] or args.Yen local xp = args[26] or args.EXP local p4g = args[27] or args.P4G local skills = args[28] or args.Skills local result = '{|align="center" style="min-width:650px;text-align:center; background: #222; border:2px solid #FFE600; border-radius:7px; clear:both; font-size:75%; font-family:verdana;"\n|-\n|' .. styles['p4table'] .. '\n!Level\n! Arcana \n' if hp or mp then result = result .. '!HP\n!SP' end result = result .. '\n!ST\n!MA\n!EN\n!AG\n!LU' .. styles['skill'] .. level .. styles['skillc'] if arcana == mw.title.getCurrentTitle(arcana .. ' Arcana') then result = result ..  .. arcana ..  else result = result .. arcana end if hp or sp then result = result .. styles['skillc'] .. hp .. styles['skillc'] .. sp	end result = result .. styles['skillc'] .. strength .. styles['skillc'] .. magic .. styles['skillc'] .. endurance .. styles['skillc'] .. agility .. styles['skillc'] .. luck .. '\n|}' .. styles['p4table'] if phys or fire or ice or elec or wind or light or dark or alm or xp or yen then if not phys then phys = '' end if not fire then fire = '' end if not ice then ice = '' end if not elec then elec = '' end if not wind then wind = '' end if not light then light = '' end if not dark then dark = '' end if not alm then alm = '' end if not xp then xp = '' end if not yen then yen = '' end result = result .. '\n!Phys\n!Fire\n!Ice\n!Elec\n!Wind\n!Light\n!Dark\n!Almighty\n!EXP\n!Yen' .. styles['skill'] .. phys .. styles['skillc'] .. fire .. styles['skillc'] .. ice .. styles['skillc'] .. elec .. styles['skillc'] .. wind .. styles['skillc'] .. light .. styles['skillc'] .. dark .. styles['skillc'] .. alm .. styles['skillc'] .. xp .. styles['skillc'] .. yen elseif inherit or resist or block or absorb or reflect or weak then if not inherit then inherit = '-' end if not resist then resist = '-' end if not block then block = '-' end if not absorb then absorb = '-' end if not reflect then reflect = '-' end if not weak then weak = '-' else weak = ' ' .. weak .. ' ' end result = result .. '\n!Inherit\n!Resists\n!Block\n!Absorbs\n!Reflects\n!Weak' .. styles['skill'] .. inherit .. styles['skillc'] .. resist .. styles['skillc'] .. block .. styles['skillc'] .. absorb .. styles['skillc'] .. reflect .. styles['skillc'] .. weak end result = result .. '\n|}' local data = require('Module:Skills/P3') if skills then if hp or sp or boss then result = result .. styles['p4table'] .. '\n!colspan="2"| List of Skills ' .. styles['skill'] .. 'Skill' .. styles['skillc'] .. 'Effect' for k, v in ipairs(mw.text.split(skills, '\n')) do				local skill = data.skills[v] if not skill then local alias = data.aliases[v] if alias then v = alias skill = data.skills[v] else return 'Invalid parameter 3 of ' .. '"' .. v .. '". You may correct the skill name or modify module:Skills/P4 if needed. '					end end if skill.name then v = skill.name end local skillcell = styles['skill'] .. v				local effect = skill.effect if (k % 2 == 0) then result = result .. skillcell .. styles['effect2'] .. effect else result = result .. skillcell .. styles['effect1'] .. effect end end else result = result .. styles['p4table'] .. '\n!colspan="4"| List of Skills ' .. styles['skill'] .. 'Skill' .. styles['skillc'] .. 'Cost' .. styles['skillc'] .. 'Effect' .. styles['skillc'] .. 'Level' for k1, v1 in ipairs(mw.text.split(skills, '\n')) do -- Any entry on new line within "Skills" parameter is treated as new skill name. for k2, v2 in ipairs(mw.text.split(v1 .. '\\', '\\')) do -- Entry after backslash after skill name is treated as "level" for learning new skill per level gain. Any entry starting from second backslash on the same line is ignored until a new line. if k2 > 2 then break elseif (k2 % 2 == 0) then -- this checks even (true) or odd (false) number row. if (k1 % 2 == 0) then result = result .. styles['cost2'] .. v2 -- "v2" represents "Level" within "Skills" parameter on each new line after the backslash. else result = result .. styles['cost1'] .. v2							end else local skill = data.skills[v2] -- now v2 represents skill name if not skill then local alias = data.aliases[v2] if alias then v2 = alias skill = data.skills[v2] else return 'Invalid parameter 3 of ' .. '"' .. v2 .. '". You may correct the skill name or modify module:Skills/P4 if needed. '							end end if skill.name then v2 = skill.name end local skillcell = styles['skill'] .. v2						local cost = skill.cost local effect = skill.effect local level = skill.level if (k1 % 2 == 0) then result = result .. skillcell .. styles['cost2'] .. cost .. styles['effect2'] .. effect else result = result .. skillcell .. styles['cost1'] .. cost .. styles['effect1'] .. effect end end end end end end result = result .. '\n|}\n|}' if inherit or resist or block or absorb or reflect or weak then result = result .. ''		elseif p4g then result = result .. ''	end if boss then result = result .. '' end if phys or fire or ice or elec or wind or light or dark or alm or xp or yen then result = result .. '' end return result end

return p --