- Welcome to the Kancolle Wiki!
- If you have any questions regarding site content, account registration, etc., please visit the KanColle Wiki Discord
Module:Seasonal
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Seasonal/doc
local Utils = require('Module:Utils')
local format = require('Module:StringInterpolation').format
local getArgs = require('Module:GetArgs')
local artists = {
type = "artists",
index = { "Akira", "Amamiya Chiharu", "Ayaki", "bob", "drew", "Fujikawa", "hatsuko", "JiJi", "Konishi", "Kujou Ichiso", "Kusada Souta", "Kuu Ro Kuro", "Mikoto Akemi", "Parsley", "Rikka", "Shibafu", "Shimada Humikane", "Shizuma Yoshinori", "Shobon", "UGUME", "Yadokari", "Unknown" },
["Akira"] = {
ships = {"Commandant Teste", "Mizuho", "Northern Princess"}
},
["Amamiya Chiharu"] = {
url = "http://www.pixiv.net/member.php?id=2095023",
ships = {"Samidare", "Suzukaze"}
},
["Ayaki"] = {
url = "http://www.pixiv.net/member.php?id=8611",
ships = {"Hatsuharu", "Murakumo", "Nenohi", "Tatsuta", "Tenryuu"}
},
["bob"] = {
url = "http://www.pixiv.net/member.php?id=91521",
ships = {"Ashigara", "Chikuma", "Haguro", "Jintsuu", "Myoukou", "Nachi", "Naka", "Sendai", "Shouhou", "Tone"}
},
["drew"] = {
url = "http://www.pixiv.net/member.php?id=193293",
ships = {"Akebono", "Oboro", "Sazanami", "Ushio"}
},
["Fujikawa"] = {
ships = {"Akashi", "Akashi NPC", "Akigumo", "Asagumo", "Asashimo", "Hayashimo", "Irako", "Fujinami", "Kazagumo", "Kinugasa", "Kiyoshimo", "Makigumo", "Mamiya", "Naganami", "Okinami", "Ooyodo", "Ooyodo NPC", "Takanami", "Yamagumo", "Yuugumo"}
},
["hatsuko"] = {
url = "http://www.pixiv.net/member.php?id=237559",
ships = {"Aoba"}
},
["JiJi"] = {
url = "http://www.pixiv.net/member.php?id=3911",
ships = {"Aquila", "Libeccio", "Littorio", "Italia", "Pola", "Roma", "Zara"}
},
["Konishi"] = {
url = "http://www.pixiv.net/member.php?id=4258322",
ships = {"Abukuma", "Agano", "Arare", "Arashi", "Arashio", "Asashio", "Hagikaze", "Haruna", "Hatsukaze", "Hayasui", "Hiei", "Kagerou", "Kasumi", "Kinu", "Kirishima", "Kongou", "Kumano", "Kuroshio", "Maikaze", "Michishio", "Noshiro", "Nowaki", "Ooshio", "Oyashio", "Sakawa", "Shiranui", "Shoukaku", "Suzuya", "Warspite", "Yahagi", "Yura", "Yuubari", "Zuihou", "Zuikaku"}
},
["Kujou Ichiso"] = {
url = "http://www.pixiv.net/member.php?id=186655",
ships = {"Harusame", "Kawakaze", "Murasame", "Shigure", "Shiratsuyu", "Taigei", "Ryuuhou", "Umikaze", "Yamakaze", "Yuudachi"}
},
["Kusada Souta"] = {
url = "http://www.pixiv.net/member.php?id=303275",
ships = {"Kisaragi", "Minazuki", "Mutsuki", "Uzuki", "Yayoi"}
},
["Kuu Ro Kuro"] = {
url = "http://www.pixiv.net/member.php?id=29389",
ships = {"Akitsu Maru", "Amagi", "Chitose", "Chiyoda", "Hiyou", "I-26", "Isuzu", "Junyou", "Katsuragi", "Maruyu", "Nagara", "Natori", "Ryuujou", "Unryuu"}
},
["Mikoto Akemi"] = {
url = "http://www.pixiv.net/member.php?id=501378",
ships = {"Atago", "Takao"}
},
["Parsley"] = {
url = "http://www.pixiv.net/member.php?id=414162",
ships = {"Asakaze", "Choukai", "Hamakaze", "Harukaze", "Isokaze", "Kamikaze", "Kashima", "Katori", "Matsukaze", "Maya", "Tanikaze", "Urakaze"}
},
["Rikka"] = {
url = "http://www.pixiv.net/member.php?id=1926153",
ships = {"Fusou", "Yamashiro"}
},
["Shibafu"] = {
url = "http://www.pixiv.net/member.php?id=312614",
ships = {"Akagi", "Ayanami", "Fubuki", "Hatsuyuki", "Hiryuu", "Houshou", "Hyuuga", "I-401", "Ise", "Isonami", "Kaga", "Kitakami", "Mikuma", "Miyuki", "Mogami", "Ooi", "Shikinami", "Shirayuki", "Souryuu", "Uranami"}
},
["Shimada Humikane"] = {
url = "https://twitter.com/humikane",
ships = {"Bismarck", "Graf Zeppelin", "Prinz Eugen", "Taihou", "U-511", "Ro-500", "Z1", "Z3"}
},
["Shizuma Yoshinori"] = {
url = "http://www.pixiv.net/member.php?id=141206",
ships = {"Akitsushima", "Akizuki", "Amatsukaze", "Hatsuzuki", "I-13", "I-14", "Iowa", "Musashi", "Mutsu", "Nagato", "Saratoga", "Shimakaze", "Teruzuki", "Tokitsukaze", "Yamato", "Yukikaze"}
},
["Shobon"] = {
url = "http://www.pixiv.net/member.php?id=2572017",
ships = {"I-19", "I-168", "I-58", "I-8"}
},
["UGUME"] = {
url = "http://www.pixiv.net/member.php?id=1457830",
ships = {"Furutaka", "Kako", "Kiso", "Kuma", "Tama"}
},
["Yadokari"] = {
url = "http://www.pixiv.net/member.php?id=1828868",
ships = {"Akatsuki", "Fumizuki", "Hatsushimo", "Hibiki", "Верный", "Ikazuchi", "Inazuma", "Kikuzuki", "Mikazuki", "Mochizuki", "Nagatsuki", "Satsuki", "Wakaba"}
},
["Unknown"] = {
ships = { },
},
}
local seiyuus = {
type = "seiyuus",
index = { "Akasaki Chinatsu", "Bridcut Sarah Emi", "Chinami Hashimoto", "Endou Aya", "Fujita Saki", "Hayami Saori", "Hayasaka Kozue", "Hidaka Rina", "Hondo Kaede", "Horie Yui", "Iguchi Yuka", "Imamura Ayaka", "Ise Mariya", "Ishigami Shizuka", "Itou Shizuka", "Kanemoto Hisako", "Kawasumi Ayako", "Kayano Ai", "Kitou Akari", "Kobayashi Motoko", "Komatsu Mana", "Komatsu Mikako", "Kuno Misaki", "Misato", "Miyagawa Wakana", "Nakajima Megumi", "Nomizu Iori", "Noto Mamiko", "Ogura Yui", "Ootsubo Yuka", "Ozawa Ari", "Sakura Ayane", "Suzaki Aya", "Taketatsu Ayana", "Taneda Risa", "Tanibe Yumi", "Touyama Nao", "Uchida Shuu", "Uesaka Sumire", "Yamada Yuki", "Unknown" },
["Akasaki Chinatsu"] = {
url = "http://myanimelist.net/people/12652/Chinatsu_Akasaki",
ships = { "Aquila", "Pola", "Zara", },
},
["Bridcut Sarah Emi"] = {
url = "http://myanimelist.net/people/19371/Sarah_Emi_Bridcut",
ships = {"Hatsukaze", "Kumano", "Maikaze", "Suzuya", "Yuubari", },
},
["Chinami Hashimoto"] = {
url = "http://myanimelist.net/people/27761/Chinami_Hashimoto",
ships = {"Iowa", "Yamakaze"},
},
["Endou Aya"] = {
url = "http://myanimelist.net/people/54/Aya_Endou",
ships = {"Bismarck", "Z1", "Z3", },
},
["Fujita Saki"] = {
url = "http://myanimelist.net/people/504",
ships = {"Akagi", "Fusou", "Kagerou", "Kuroshio", "Shiranui", "Tokitsukaze", "Yamashiro", "Yukikaze", },
},
["Hayami Saori"] = {
url = "http://myanimelist.net/people/869/Saori_Hayami",
ships = {"Graf Zeppelin", "Hagikaze", },
},
["Hayasaka Kozue"] = {
url = nil,
ships = {"Akebono", "Oboro", "Sazanami", "Ushio", },
},
["Hidaka Rina"] = {
url = "http://myanimelist.net/people/5250/Rina_Hidaka",
ships = {"Fumizuki", "Kikuzuki", "Kisaragi", "Mikazuki", "Minazuki", "Mochizuki", "Mutsuki", "Nagatsuki", "Ryuujou", "Satsuki", "Uzuki", "Yayoi", },
},
["Hondo Kaede"] = {
url = "https://myanimelist.net/people/38659/Kaede_Hondo",
ships = { "Oyashio", },
},
["Horie Yui"] = {
url = "http://myanimelist.net/people/28/Yui_Horie",
ships = {"Amagi", "Asagumo", "Irako", "Mamiya", "Yamagumo", },
},
["Iguchi Yuka"] = {
url = "http://myanimelist.net/people/885/Yuka_Iguchi",
ships = {"Chikuma", "Isuzu", "Kaga", "Nagara", "Natori", "Tatsuta", "Tenryuu", "Tone", },
},
["Imamura Ayaka"] = {
url = "https://myanimelist.net/people/34697",
ships = {"I-13", "I-14"},
},
["Ise Mariya"] = {
url = "http://myanimelist.net/people/655/Mariya_Ise",
ships = {"I-401", },
},
["Ishigami Shizuka"] = {
url = "http://myanimelist.net/people/28755/Shizuka_Ishigami",
ships = {"Kawakaze", "Mizuho", "Umikaze", },
},
["Itou Shizuka"] = {
url = "https://myanimelist.net/people/93/Shizuka_Itou",
ships = { "Asakaze", "Saratoga", },
},
["Kanemoto Hisako"] = {
url = "http://myanimelist.net/people/8555/Hisako_Kanemoto",
ships = {"Harusame", "Hayashimo", "Kiyoshimo", },
},
["Kawasumi Ayako"] = {
url = "http://myanimelist.net/people/13/Ayako_Kawasumi",
ships = {"Isokaze", "Kamikaze", "Ooyodo", "Unryuu", },
},
["Kayano Ai"] = {
url = "http://myanimelist.net/people/10765/",
ships = {"Arashi", "Asashimo", "Kashima", "Katori", "Katsuragi", "U-511", "Ro-500"},
},
["Kitou Akari"] = {
url = "https://ja.wikipedia.org/wiki/%E9%AC%BC%E9%A0%AD%E6%98%8E%E9%87%8C",
ships = {"Kazagumo", "Libeccio", "Okinami"},
},
["Kobayashi Motoko"] = {
url = "http://myanimelist.net/people/12285/Motoko_Kobayashi",
ships = {"Hatsuharu", "Hatsushimo", "Nenohi", "Wakaba", },
},
["Komatsu Mana"] = {
url = "http://myanimelist.net/people/12941/Mana_Komatsu",
ships = {"Hamakaze", "Tanikaze", "Urakaze", "Zuihou", },
},
["Komatsu Mikako"] = {
url = "http://myanimelist.net/people/10071/Komatsu_Mikako",
ships = {"Akitsushima", "Teruzuki", },
},
["Kuno Misaki"] = {
url = "http://myanimelist.net/people/11641/Misaki_Kuno",
ships = {"Littorio", "Italia", "Roma", "Takanami", },
},
["Misato"] = {
url = "http://myanimelist.net/people/12759/Misato",
ships = {"I-19", "I-8", "Musashi", },
},
["Miyagawa Wakana"] = {
url = "http://www.animenewsnetwork.com.au/encyclopedia/people.php?id=98235",
ships = {"Arare", "Arashio", "Asashio", "Chitose", "Chiyoda", "Kasumi", "Michishio", "Ooshio", },
},
["Nakajima Megumi"] = {
url = "http://myanimelist.net/people/1105/Megumi_Nakajima",
ships = {"I-168", "I-58", "Hatsuzuki", "Kinugasa", "Mikuma", },
},
["Nomizu Iori"] = {
url = "http://myanimelist.net/people/8956/Iori_Nomizu",
ships = {"Abukuma", "Hayasui", "Kinu", "Shoukaku", "Zuikaku", },
},
["Noto Mamiko"] = {
url = "http://myanimelist.net/people/40/Mamiko_Noto",
ships = {"Akitsu Maru", "Harukaze", "Maruyu", "Taihou", },
},
["Ogura Yui"] = {
url = "http://myanimelist.net/people/10981/Yui_Ogura",
ships = {"Amatsukaze", "I-26", "Taigei", "Ryuuhou"},
},
["Ootsubo Yuka"] = {
url = "http://myanimelist.net/people/12452/Yuka_Ootsubo",
ships = {"Furutaka", "Hiyou", "Hyuuga", "Ise", "Junyou", "Kako", "Kitakami", "Ooi", },
},
["Ozawa Ari"] = {
url = "http://myanimelist.net/people/27395/Ari_Ozawa",
ships = {"Akizuki", "Nowaki", "Prinz Eugen", },
},
["Sakura Ayane"] = {
url = "http://myanimelist.net/people/11622/Ayane_Sakura",
ships = {"Jintsuu", "Kiso", "Kuma", "Mutsu", "Nagato", "Naka", "Sendai", "Shimakaze", "Tama", },
},
["Suzaki Aya"] = {
url = "http://myanimelist.net/people/19834/Aya_Suzaki",
ships = {"Akatsuki", "Aoba", "Hibiki", "Верный", "Houshou", "Ikazuchi", "Inazuma", "Mogami", },
},
["Taketatsu Ayana"] = {
url = "http://myanimelist.net/people/6996/Ayana_Taketatsu",
ships = {"Akigumo", "Makigumo", "Naganami", "Yamato", "Yuugumo", },
},
["Taneda Risa"] = {
url = "http://myanimelist.net/people/16135/Risa_Taneda",
ships = {"Akashi", "Ashigara", "Haguro", "Myoukou", "Nachi", "Samidare", "Shouhou", "Suzukaze", },
},
["Tanibe Yumi"] = {
url = "http://myanimelist.net/people/35951",
ships = {"Commandant Teste", "Murasame", "Shigure", "Shiratsuyu", "Yura", "Yuudachi", },
},
["Touyama Nao"] = {
url = "http://myanimelist.net/people/11184/Nao_Touyama",
ships = {"Atago", "Ayanami", "Choukai", "Haruna", "Hiei", "Kirishima", "Kongou", "Maya", "Shikinami", "Takao", },
},
["Uchida Shuu"] = {
url = false,
ships = { "Warspite" },
},
["Uesaka Sumire"] = {
url = "http://myanimelist.net/people/14441/Sumire_Uesaka",
ships = {"Fubuki", "Hatsuyuki", "Hiryuu", "Isonami", "Miyuki", "Murakumo", "Shirayuki", "Souryuu", "Uranami"},
},
["Yamada Yuki"] = {
url = "http://myanimelist.net/people/28053/Yuki_Yamada",
ships = {"Agano", "Noshiro", "Sakawa", "Yahagi", },
},
["Unknown"] = {
ships = {"Fujinami", "Matsukaze"},
},
}
local types = {
type = "types",
index = { "Destroyers", "Light Cruisers", "Heavy Cruisers", "Battleships", "Light Carriers", "Standard Carriers", "Submarines", "Auxiliaries", "NPC", "Bosses" },
["Destroyers"] = {
ships = { "Akatsuki", "Akebono", "Akigumo", "Akizuki", "Amagiri", "Amatsukaze", "Arare", "Arashi", "Arashio", "Asagumo", "Asakaze", "Asashimo", "Asashio", "Ayanami", "Fubuki", "Fujinami", "Fumizuki", "Hagikaze", "Hamakaze", "Harukaze", "Harusame", "Hatakaze", "Hatsuharu", "Hatsukaze", "Hatsushimo", "Hatsuyuki", "Hatsuzuki", "Hayashimo", "Hibiki", "Верный", "Ikazuchi", "Inazuma", "Isokaze", "Isonami", "Kagerou", "Kamikaze", "Kasumi", "Kawakaze", "Kazagumo", "Kikuzuki", "Kisaragi", "Kiyoshimo", "Kuroshio", "Libeccio", "Maikaze", "Makigumo", "Matsukaze", "Michishio", "Mikazuki", "Minazuki", "Miyuki", "Mochizuki", "Murakumo", "Murasame", "Mutsuki", "Naganami", "Nagatsuki", "Nenohi", "Nowaki", "Oboro", "Okinami", "Ooshio", "Oyashio", "Sagiri", "Samidare", "Satsuki", "Sazanami", "Shigure", "Shikinami", "Shimakaze", "Shiranui", "Shiratsuyu", "Shirayuki", "Suzukaze", "Takanami", "Tanikaze", "Teruzuki", "Tokitsukaze", "Umikaze", "Uranami", "Urakaze", "Ushio", "Uzuki", "Wakaba", "Yamagumo", "Yamakaze", "Yayoi", "Yukikaze", "Yuudachi", "Yuugumo", "Z1", "Z3" }
},
["Light Cruisers"] = {
ships = { "Abukuma", "Agano", "Isuzu", "Jintsuu", "Kinu", "Kiso", "Kitakami", "Kuma", "Nagara", "Naka", "Natori", "Noshiro", "Ooi", "Ooyodo", "Sakawa", "Sendai", "Tama", "Tatsuta", "Tenryuu", "Yahagi", "Yura", "Yuubari" }
},
["Heavy Cruisers"] = {
ships = { "Aoba", "Ashigara", "Atago", "Chikuma", "Choukai", "Furutaka", "Haguro", "Kako", "Kinugasa", "Kumano", "Maya", "Mikuma", "Mogami", "Myoukou", "Nachi", "Pola", "Prinz Eugen", "Suzuya", "Takao", "Tone", "Zara" }
},
["Battleships"] = {
ships = { "Bismarck", "Fusou", "Gangut", "Haruna", "Hiei", "Hyuuga", "Iowa", "Ise", "Kirishima", "Kongou", "Littorio", "Italia", "Musashi", "Mutsu", "Nagato", "Richelieu", "Roma", "Warspite", "Yamashiro", "Yamato" }
},
["Light Carriers"] = {
ships = { "Chitose", "Chiyoda", "Hiyou", "Houshou", "Jun'you", "Kasuga Maru", "Ryuuhou", "Ryuujou", "Shouhou", "Zuihou" }
},
["Standard Carriers"] = {
ships = { "Akagi", "Amagi", "Aquila", "Ark Royal", "Graf Zeppelin", "Hiryuu", "Kaga", "Katsuragi", "Saratoga", "Shoukaku", "Souryuu", "Taihou", "Unryuu", "Zuikaku" }
},
["Submarines"] = {
ships = { "I-13", "I-14", "I-19", "I-168", "I-58", "I-8", "I-401", "Luigi Torelli", "Maruyu", "U-511", "Ro-500", "I-26" }
},
["Auxiliaries"] = {
ships = { "Akashi", "Akitsu Maru", "Akitsushima", "Commandant Teste", "Etorofu", "Hayasui", "Kamoi", "Kashima", "Katori", "Kunashiri", "Matsuwa", "Mizuho", "Shimushu", "Taigei" }
},
["NPC"] = {
ships = { "Akashi NPC", "Irako", "Mamiya", "Ooyodo NPC" }
},
["Bosses"] = {
ships = { "Northern Princess" }
},
}
function find_type(ship)
for type, data in pairs(types) do
if data.ships and Utils.find(data.ships, ship) then
return type
end
end
return "?"
end
function gen(args, tbl, format)
local result = ""
local i = 0
local n = 0
for _, k in ipairs(tbl.index) do
local data = tbl[k]
local ships = Utils.filter(data.ships, function(ship) return Utils.find(args, ship) end)
if #ships > 0 then
i = i + 1
n = n + #ships
local ships_str = table.concat(Utils.map(ships, function(ship) return string.format("[[#%s|%s]]", args.art and (tbl.type == "types" and k or find_type(ship)) or ship, ship) end), ", ")
if data.url then
result = result .. string.format("|-\n|[%s %s]\n|%s\n", data.url, k, ships_str)
elseif tbl.type == "types" then
result = result .. string.format("|-\n|[[#%s|%s]] (%s)\n|%s\n", args[k] and (k .. " 2") or k, k, #ships, ships_str)
else
result = result .. string.format("|-\n|%s\n|%s\n", k, ships_str)
end
end
end
return format(result, i, n)
end
local Seasonal = {}
function Seasonal.toc(frame)
local args = getArgs{frame = frame:getParent()}
return
gen(args, types, function(r, i, n) return string.format([===[{| class="mw-collapsible mw-collapsed wikitable typography-xl-optout" style="width:100%%"
|-
!width=20%%|Class
!%s (%s)
]===], args.text or "Ship girls", n) .. r .. "|}" end)
.. "\n" ..
gen(args, args.art and artists or seiyuus, function(r, i, n) return string.format([===[{| class="mw-collapsible mw-collapsed wikitable typography-xl-optout" style="width:100%%"
|-
!width=20%%|[[%s]] (%s)
!
]===], args.art and "Glossary#List_of_Vessels_by_Artist|Artist" or "Glossary#List_of_Vessels_by_Seiyuu|Seiyuu", i) .. r .. "|}" end)
end
function Seasonal.include(frame)
local ship_row_template = [=[|align="center" rowspan="${rowspan}"|[[${ship}]]
]=]
local id_string_template = [[id="${ship}"]]
local quote_template = [=[|- ${id_string}
${ship_row}|align="center"|<span class="audio-button click-parent">[[File:${ship} ${season}${line}.ogg|Play]]</span>
|lang="ja"|${ja}
|${en}
|${note}]=]
local args = getArgs{frame = frame:getParent()}
local season, type = args[1], args[2]
local only = args.only
local result = {
"|-",
string.format([=[!colspan="5"|From [[Seasonal/%s|%s]]]=], season, season)
}
local seasonal_data = require(string.format("Module:Seasonal/%s", season))
for _, ship in ipairs(seasonal_data.index[type]) do
if only and Utils.find(args, ship) or not only and not Utils.find(args, ship) then
local ship_data = seasonal_data.ships[ship]
local quotes = Utils.ifilter(ship_data, function(quote)
return not Utils.find(args, string.format("%s/%s", ship, quote.line or ""))
end)
for i, quote in ipairs(quotes) do
local note = args[ship .. "." .. "note"]
if note and note == "nil" then
note = ""
elseif note and note:sub(-1) == "+" then
note = note:sub(1, -2) .. (quote.note or "")
end
table.insert(result, format{
quote_template,
id_string = i > 1 and "" or format{
id_string_template,
ship = ship,
},
ship_row = i > 1 and "" or format{
ship_row_template,
rowspan = #quotes,
ship = ship,
},
ship = quote.ship or ship,
season = quote.season or season,
line = quote.line and " " .. quote.line or "",
ja = quote.ja or "",
en = quote.en or "",
note = (quote.ship and "''As " .. quote.ship .. "''<br>" or "") .. (quote.line and "''" .. quote.line .. "''<br>" or "") .. (note or quote.note or ""),
})
end
end
end
return table.concat(result, "\n")
end
Seasonal.t = (""):sub(-1)
return Seasonal