User:Harimaron/Sandbox/Module:NewsDialogue
From Inkipedia, the Splatoon wiki
< User:Harimaron | Sandbox
local p = {
paramprefixes = { ['A'] = {['allowed'] = {'Splatoon', 'Splatoon 2', 'Splatoon 3'}, ['chr'] = 'A'}, ['B'] = {['allowed'] = {'Splatoon', 'Splatoon 2', 'Splatoon 3'}, ['chr'] = 'B'}, ['C'] = {['allowed'] = {'Splatoon' }, ['chr'] = 'A'}, ['M'] = {['allowed'] = {'Splatoon', 'Splatoon 2' }, ['chr'] = 'B'}, ['P'] = {['allowed'] = { 'Splatoon 2' }, ['chr'] = 'A'}, ['S'] = {['allowed'] = { 'Splatoon 3'}, ['chr'] = 'A'}, ['F'] = {['allowed'] = { 'Splatoon 3'}, ['chr'] = 'B'}, ['FR'] = {['allowed'] = { 'Splatoon 3'}, ['chr'] = 'B'}, ['FL'] = {['allowed'] = { 'Splatoon 3'}, ['chr'] = 'B'}, ['BML']= {['allowed'] = { 'Splatoon 3'}, ['chr'] = 'C'}, ['BM'] = {['allowed'] = { 'Splatoon 3'}, ['chr'] = 'C'} }, lpriority = { ['Splatoon'] = {'C', 'A', 'P', 'S', 'FL'}, ['Splatoon 2'] = {'P', 'A', 'C', 'S', 'FL'}, ['Splatoon 3'] = {'S', 'FL', 'BML', 'A', 'C', 'P'} }, rpriority = { ['Splatoon'] = {'M', 'B', 'BM', 'FR', 'F'}, ['Splatoon 2'] = {'M', 'B', 'BM', 'FR', 'F'}, ['Splatoon 3'] = {'BM', 'FR', 'F', 'B', 'M'} }
}
function p:IsAllowed(prefix, game)
local prefixdata = self.paramprefixes[prefix] if prefixdata then for _, v in pairs(prefixdata.allowed) do if (game == v) then return true end -- if game == v end -- for prefixdata.allowed end -- if prefixdata return false
end -- p:IsAllowed
function p:FindMatchingEntry(parentframeargs, pri, i, var1, var2)
for _, v in pairs(pri) do if parentframeargs[v..i..var1] then return v, v..i..var1 end if parentframeargs[v..i..var2] then return v, v..i..var2 end end -- for
end -- p:FindMatchingEntry
function p:HandleLforF_and_BM(parentframeargs, i, var1, var2)
if parentframeargs['F'..i..var1] and parentframeargs['BM'..i..var1] then return 'F', 'F'..i..var1 end if parentframeargs['F'..i..var2] and parentframeargs['BM'..i..var2] then return 'F', 'F'..i..var2 end
end -- p:HandleLforF_and_BM
function p:BuildRowArgs(parentframeargs, charargs, i, var1, var2, templateargs)
local game = templateargs.game or 'Splatoon 3' local lpri = self.lpriority[game] local Lc, L = self:FindMatchingEntry(parentframeargs, lpri, i, var1, var2) local rightfirst='false' if 'Splatoon 3' == game and not L then Lc, L = self:HandleLforF_and_BM(parentframeargs, i, var1, var2) end -- if local rpri = self.rpriority[game] local Rc, R = self:FindMatchingEntry(parentframeargs, rpri, i, var1, var2) if not R then Rc, R = self:FindMatchingEntry(parentframeargs, rpri, i, var1..'b', var2..'b') if R then rightfirst='true' end end -- if local _, Reg = self:FindMatchingEntry(parentframeargs, {'R'}, i, var1, var2)
if not (L or R) then return false end
templateargs.rightfirst = rightfirst templateargs.Cquote = parentframeargs[L] or if L then local chrL = self.paramprefixes[Lc].chr templateargs.C=charargs[chrL] templateargs.CEng=charargs[chrL..'Eng'] templateargs.Ccolor=charargs[chrL..'color'] templateargs.Cface=parentframeargs[Lc..i..'face'] or templateargs.CquoteEng=parentframeargs[L..'eng'] or else templateargs.C= templateargs.CEng= templateargs.Ccolor= templateargs.Cface= templateargs.CquoteEng= end -- L templateargs.Mquote = parentframeargs[R] or if R then local chrR = self.paramprefixes[Rc].chr templateargs.M=charargs[chrR] templateargs.MEng=charargs[chrR..'Eng'] templateargs.Mcolor=charargs[chrR..'color'] templateargs.Mface = parentframeargs[Rc..i..'face'] or templateargs.MquoteEng = parentframeargs[R..'eng'] or else templateargs.M= templateargs.MEng= templateargs.Mcolor= templateargs.Mface= templateargs.MquoteEng= end -- R templateargs.R = parentframeargs[Reg] or
return true
end -- p:BuildRowArgs
function p:ScanForMoreQuotes(parentframeargs, startindex)
local suffixes = {, 'A', 'b', 'Ab'} local i = startindex local trynext = true while trynext do i = i + 1 trynext = false for k, _ in pairs(self.paramprefixes) do if parentframeargs[k..i] or parentframeargs[k..i..'A'] or parentframeargs[k..i..'b'] or parentframeargs[k..i..'Ab'] then trynext = true break end -- if end -- for self.paramprefixes -- hard stop for extreme cases if i > 1000 then trynext = false end end -- while return i
end -- p:ScanForMoreQuotes
function p:GenerateNews dialogue(frame)
local templateargs ={ Qopen='"', Qclose='"', [':']=':', C='Callie', M='Marie', Ccolor='197, 2, 227', Mcolor='53, 133, 0', game='Splatoon', language='Eng' } local parentframeargs = frame:getParent().args local lang = parentframeargs.language or templateargs.language --Get the character names and punctuation per language: local charnameseng = {'Callie', 'Marie', 'Pearl', 'Marina', 'Shiver', 'Frye', 'Big Man'} local charnames = charnameseng if lang == 'Jap' then charnames = {'アオリ', 'ホタル', 'ヒメ', 'イイダ', 'フウカ', 'ウツホ', 'マンタロー'} templateargs.Qopen='「' templateargs.Qclose='」' templateargs[':']=':' elseif lang == 'Dut' then charnames = {'Callie', 'Marie', 'Lorelei', 'Mariana', 'Haya', 'Muriël', 'Ray'} elseif lang == 'Fre' then charnames = {'Ayo', 'Oly', 'Perle', 'Coralie', 'Pasquale', 'Angie', 'Raimi'} templateargs.Qopen='« ' templateargs.Qclose=' »' templateargs[':']=' :' elseif lang == 'Ger' then charnames = {'Aioli', 'Limone', 'Perla', 'Marina', 'Mako', 'Muri', 'Mantaro'} templateargs.Qopen='„' templateargs.Qclose='"' elseif lang == 'Ita' then charnames = {'Stella', 'Marina', 'Alga', 'Nori', 'Pinnuccia', 'Morena', 'Mantaleo'} templateargs.Qopen='«' templateargs.Qclose='»' elseif lang == 'Rus' then charnames = {'Кэлли', 'Мари', 'Жемчик', 'Мариша', 'Кулла', 'Мурия', 'Биг Ман'} templateargs.Qopen='«' templateargs.Qclose='»' elseif lang == 'Spa' or lang == 'SpaE' then charnames = {'Mar', 'Tina', 'Perla', 'Marina', 'Megan', 'Angie', 'Rayan'} templateargs.Qopen='«' templateargs.Qclose='»' elseif lang == 'SpaA' then charnames = {'Mar', 'Tina', 'Perla', 'Marina', 'Megan', 'Angie', 'Rayan'} elseif lang == 'ChiS' then charnames = {'小拟', '小萤', 'Pearl', 'Marina', '莎莎', '曼曼', '鬼福'} templateargs[':']=':' elseif lang == 'ChiT' then charnames = {'小擬', '小螢', 'Pearl', 'Marina', '莎莎', '曼曼', '鬼福'} templateargs.Qopen='「' templateargs.Qclose='」' templateargs[':']=':' elseif lang == 'Kor' then charnames = {'아오리', '호타루', 'Pearl', 'Marina', '후우카', '우츠호', '만타로'} end --'Eng' is handled by default --Game-specific settings: local game = parentframeargs.game or templateargs.game templateargs.game = game local idx1=5 local idx2=6 local idx3=7 if game == 'Splatoon' then idx1=1 idx2=2 idx3=0 elseif game == 'Splatoon 2' then idx1=3 idx2=4 idx3=0 end -- game local charargs = {} charargs.A=charnames[idx1] charargs.AEng=charnameseng[idx1] charargs.Acolor=frame:expandTemplate{ title='TextColor', args= { charargs.AEng } } charargs.B=charnames[idx2] charargs.BEng=charnameseng[idx2] charargs.Bcolor=frame:expandTemplate{ title='TextColor', args= { charargs.BEng } } if 0 < idx3 then charargs.C=charnames[idx3] charargs.CEng=charnameseng[idx3] charargs.Ccolor=frame:expandTemplate{ title='TextColor', args= { charargs.CEng } } end -- if idx3 --Use the default only for unspecified parameters: for k,v in pairs(templateargs) do if parentframeargs[k] ~= nil then templateargs[k] = parentframeargs[k] end end local ret = local numquotes=16 if parentframeargs['numquotes'] then local nq = tonumber(parentframeargs['numquotes']) if nq then numquotes=nq end else numquotes = self:ScanForMoreQuotes(parentframeargs, numquotes) end for i=1,numquotes do --Quote #A if self:BuildRowArgs(parentframeargs, charargs, i, , 'A', templateargs) then ret = ret..'|- valign=top\n'..frame:expandTemplate{ title='StageQuote', args = templateargs }..'\n' end --Quote #B if self:BuildRowArgs(parentframeargs, charargs, i, 'B', 'E', templateargs) then ret = ret..'|- valign=top\n'..frame:expandTemplate{ title='StageQuote', args = templateargs }..'\n' end if parentframeargs['Notes'..i] then ret = ret..'|-\n|colspan=3 style="background-color:#EED"|Notes: '..parentframeargs['Notes'..i]..'\n' end end return ret
end -- p:GenerateNews dialogue
function p.Generate(frame)
return p:GenerateNews dialogue(frame)
end -- p.Generate
return p