Module:Cards: Difference between revisions

Jump to navigation Jump to search
oops
m (testing)
(oops)
 
(24 intermediate revisions by 2 users not shown)
Line 3: Line 3:
--local KeyData = mw.loadData( 'Module:Code/data')
--local KeyData = mw.loadData( 'Module:Code/data')
local all_cards = require("Module:Cards/data").cards
local all_cards = require("Module:Cards/data").cards
local all_langs = require("Module:Other_Languages/data").cards


--[[
--[[
Line 8: Line 9:


returns the respective stat of the card.
returns the respective stat of the card.
possible values for <stat>: name health scrap attack counter other desc summoncon tribes price  
possible values for <stat>: name health scrap attack counter other desc summoncon tribes price challenge
]]
]]
function p.GetStat(frame)
function p.GetStat(frame)
Line 17: Line 18:
local stat =  frame.args.stat or frame.args[2]   
local stat =  frame.args.stat or frame.args[2]   
stat = trim(stat)
stat = trim(stat)
return frame:preprocess(_getStat(card, stat))
local langCode = frame:expandTemplate{ title = 'USERLANG' } or 'en'
return frame:preprocess(_getStat(card, stat, langCode))
end  
end  


function _getStat(card, stat)
function _getStat(card, stat, langCode)
local langCode = langCode or mw.getCurrentFrame():expandTemplate{ title = 'USERLANG' } or 'en'
stat = string.lower(stat)
stat = string.lower(stat)
if stat == "name" then
if stat == "name" then
return card.Name or ""
return _getName(card, langCode) or ""
elseif stat == "health" then
elseif stat == "health" then
return card.Health or ""
return card.Health or ""
Line 35: Line 38:
return card.Other or ""
return card.Other or ""
elseif stat == "description" or stat == "desc" then
elseif stat == "description" or stat == "desc" then
return card.Desc or ""
return _getDesc(card, langCode) or ""
elseif stat == "summoncon" then
elseif stat == "summoncon" then
return card.SummonCon or ""
return card.SummonCon or ""
Line 47: Line 50:
end
end
return out
return out
elseif stat == "gold" then
return card.Gold or ""
elseif stat == "price" then
elseif stat == "price" then
return card.Price or ""
return card.Price or ""
elseif stat == "unlock" then
return card.Unlock or ""
elseif stat == "challenge" then
elseif stat == "challenge" then
return card.Challenge or ""
return card.Challenge or ""
else
else
error("Argument Invalid:" .. stat)
error("Argument Invalid:" .. stat) -- why is this necessary
end
end
end
function _getOtherLangs(card)
if all_langs[card.UniqueName] then
return all_langs[card.UniqueName]
end
if all_langs[card.Name] then
return all_langs[card.Name]
end
for _, langs in pairs(all_langs) do
if langs.en.Name == card.Name then
return langs
end
end
-- if no matches, the parent functions default to en
end
function _getName(card, langCode)
local target = langCode or mw.getCurrentFrame():expandTemplate{ title = 'USERLANG' } or "en"
if target ~= "en" and _getOtherLangs(card) and _getOtherLangs(card)[target] then
return _getOtherLangs(card)[target].Name or ""
end
return card.Name or ""
end
function _getDesc(card, langCode)
local target = langCode or mw.getCurrentFrame():expandTemplate{ title = 'USERLANG' } or "en"
if target ~= "en" and _getOtherLangs(card) and _getOtherLangs(card)[target] then
return _getOtherLangs(card)[target].Desc or ""
end
return card.Desc or ""
end
function p.testlang(name)
mw.log(_getStat(all_cards[name], "name"), _getName(all_cards[name], "ja"))
end
end


Line 62: Line 104:
returns a table based on the given paramenters.
returns a table based on the given paramenters.
<entry> is either a card name or type.
<entry> is either a card name or type.
Types include: Boss Pet NonPetCompanion Companion Item Shade Clunker EnemyClunker Enemy Miniboss Boss ShopItem  
Types include: Boss Pet NonPetCompanion Companion Item Shade Clunker EnemyClunker Enemy Miniboss Boss ShopItem
 
Append a tribename before the type to filter cards exclusive to that tribe, eg "SnowdwellersCompanion"


<entry_list> is a list of valid <entry> values, input as multiple parameters, ie <entry1>|<entry2>|... etc.
<entry_list> is a list of valid <entry> values, input as multiple parameters, ie <entry1>|<entry2>|... etc.


<header_list> is a list of valid stats, input as multiple parameters, ie <stat1>|<stat2>|... etc.
<header_list> is a list of valid stats, input as multiple parameters, ie <stat1>|<stat2>|... etc.
stats include: name health scrap attack counter other desc summoncon tribes price  
stats include: name health scrap attack counter other desc summoncon tribes price


The first usage option is used when only 1 entry is needed, eg the only entry is a type category. otherwise, use the second option.
The first usage option is used when only 1 entry is needed, eg the only entry is a type category. otherwise, use the second option.
Line 94: Line 138:


function p.testy()  
function p.testy()  
return _table({"Pet"}, {"Name", "Desc", "Challenge"})
return _table({"Pet", "SnowdwellersNonPetCompanion"}, {"name", "desc", "challenge"})
end
end


Line 126: Line 170:
   all_cards[entry].UniqueName = entry
   all_cards[entry].UniqueName = entry
   table.insert(entryList, all_cards[entry])
   table.insert(entryList, all_cards[entry])
   else
   else -- entry is a type category
  local tribe = nil
  for _, tribename in ipairs({"Snowdwellers", "Shademancers", "Clunkmasters"}) do
  if entry:sub(1, #tribename) == tribename then
  tribe = tribename
  entry = entry:sub(1+#tribename)
  end
  end
  for i, card in ipairs(sortedCards()) do
  for i, card in ipairs(sortedCards()) do
  if card.Types and card.Types[entry] then
  if card.Types and card.Types[entry]  
  and (tribe == nil or (tribe and card.Tribes and tableContains(card.Tribes, tribe)))
  then
    table.insert(entryList, card)
    table.insert(entryList, card)
    end
    end
Line 137: Line 190:
   if sortByChallenge then
   if sortByChallenge then
   table.sort(entryList, function(a,b)
   table.sort(entryList, function(a,b)
return a.ChallengeOrder < b.ChallengeOrder
  if a.ChallengeOrder and b.ChallengeOrder then
return a.ChallengeOrder and b.ChallengeOrder and a.ChallengeOrder < b.ChallengeOrder
  elseif a.ChallengeOrder ~= b.ChallengeOrder then
return a.ChallengeOrder and true
else
return a.Name < b.Name
end
end)
end)
   end
   end
Line 146: Line 205:
out = out.."|"
out = out.."|"
if header == "image" then
if header == "image" then
out = out.."{{CardArt|".. (card.Image or card.UniqueName) .."}}"
if card.Types and (card.Types["Charm"] or card.Types["CursedCharm"]) then
out = out.."{{CharmArt|"
else
out = out.."{{CardArt|"
end
out = out.. (card.Image or card.UniqueName) .."}}"
elseif header == "name" then
elseif header == "name" then
local link = card.Link or card.UniqueName
local link = card.Link or card.UniqueName
out = out.."style=\"text-align:center;\"|[[".. link .. "|" .. card.Name .."]]"
out = out.."style=\"text-align:center;\"|[[".. link .. "|" .. _getName(card) .."]]"
elseif header == "description" or header == "desc" or header == "summoncon" then
elseif header == "description" or header == "desc" or header == "summoncon" then
out = out.."style=\"text-align:center;\"|".. (_getStat(card, header) or "")
out = out.."style=\"text-align:center;\"|".. (_getStat(card, header) or "")
Line 173: Line 237:
end)
end)
return sortedTable
return sortedTable
end
function tableContains(table, value)
  for i = 1,#table do
    if (table[i] == value) then
      return true
    end
  end
  return false
end
end


Line 191: Line 264:
function _cardInfobox(card, params)
function _cardInfobox(card, params)
local out = "{{infobox|category=Card"
local out = "{{infobox|category=Card"
out = out .. "|name=" .. (params.name or card.Name or "")
out = out .. "|name=" .. (params.name or _getName(card) or card.Name or "<br>")
out = out .. "|image=" .. (params.image or "")
out = out .. "|image=" .. (params.image or "")
out = out .. "|width=" .. (params.width or "")
out = out .. "|width=" .. (params.width or "")
Line 199: Line 272:
out = out .. "|hpType=scrap"
out = out .. "|hpType=scrap"
end
end
out = out .. "|health=" .. (params.health or card.Health or card.Scrap or "")
out = out .. "|health=" .. (params.health or card.Health or card.Scrap or "<br>")
out = out .. "|attack=" .. (params.attack or card.Attack or "")
out = out .. "|attack=" .. (params.attack or card.Attack or "<br>")
out = out .. "|counter=" .. (params.counter or card.Counter or "")
out = out .. "|counter=" .. (params.counter or card.Counter or "<br>")
out = out .. "|other=<div style=\"text-align: center;\">" .. (params.other or card.Other or "") .. "</div>"
out = out .. "|other=<div style=\"text-align: center;\">" .. (params.other or card.Other or "<br>") .. "</div>"
out = out .. "|description=" .. (params.description or card.Desc or "")
out = out .. "|description=" .. (params.description or _getDesc(card) or card.Desc or "<br>")
out = out .. "|desCol=" .. (params.desCol or "")
out = out .. "|desCol=" .. (params.desCol or "")
if params.art then
out = out .. "|art=" .. params.art
else
out = out .. "|art=" .. (card.Image or card.UniqueName or card.Name) .. ".png"
end
out = out .. "}}"
out = out .. "}}"
     return out
     return out
Line 211: Line 289:
function trim(str)
function trim(str)
return str:match( "^%s*(.-)%s*$" )
return str:match( "^%s*(.-)%s*$" )
end
--[[
Usage: {{#invoke:Cards|CharmInfobox|<card>|<template_params>}}
returns the infobox of the charm.
<template_params> is a list of template parameters input as multiple parameters, ie <p1>=<data1>|<p2>=<data2>|... etc.
These parameters are the same parameters used by Template:Infobox
Parameters without inputs are autofilled with fitting module data, to the best of its ability.
]]
function p.CharmInfobox(frame)
local card = frame.args[1]
card = trim(card)
return frame:preprocess(_charmInfobox(all_cards[card], frame.args))
end
function _charmInfobox(card, params)
local out = "{{infobox|category=Charm"
out = out .. "|name=" .. (params.name or _getName(card) or card.Name or "<br>")
out = out .. "|image=" .. (params.image or "")
out = out .. "|width=" .. (params.width or "")
out = out .. "|description=" .. (params.description or _getDesc(card) or card.Desc or "<br>")
out = out .. "}}"
    return out
end
--[[
Usage: {{#invoke:Cards|Itembox|<card>|<template_params>}}
returns the itembox of the card.
<template_params> is a list of template parameters input as multiple parameters, ie <p1>=<data1>|<p2>=<data2>|... etc.
These parameters are the same parameters used by Template:Itembox
Parameters without inputs are autofilled with fitting module data, to the best of its ability.
]]
function p.Itembox(frame)
local card = frame.args[1]
card = trim(card)
return frame:preprocess(_itembox(all_cards[card], frame.args))
end
function _itembox(card, params)
local out = "{{itembox|category=Card"
out = out .. "|name=" .. (params.name or _getName(card) or card.Name or "<br>")
out = out .. "|image=" .. (params.image or "")
out = out .. "|attack=" .. (params.attack or card.Attack or "<br>")
out = out .. "|other=<div style=\"text-align: center;\">" .. (params.other or card.Other or "<br>") .. "</div>"
out = out .. "|description=" .. (params.description or _getDesc(card) or card.Desc or "<br>")
out = out .. "|desCol=" .. (params.desCol or "")
if params.art then
out = out .. "|art=" .. params.art
else
out = out .. "|art=" .. (card.Image or card.UniqueName or card.Name) .. ".png"
end
out = out .. "}}"
    return out
end
end


Line 234: Line 367:
     out = out .. " • "
     out = out .. " • "
     end
     end
     out = out.. "[[" .. (card.Link or card.UniqueName) .. "|" .. card.Name .. "]]"
     out = out.. "<div style=\"display: inline-block;\">[[" .. (card.Link or card.UniqueName) .. "|" .. _getName(card) .. "]]</div>"
     end
     end
     end
     end
1,291

edits

Navigation menu