<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://kcwiki-en.mirairepository.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nanamin</id>
	<title>Kancolle Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://kcwiki-en.mirairepository.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nanamin"/>
	<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/Special:Contributions/Nanamin"/>
	<updated>2026-04-16T14:46:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=User:McDerp/Sandbox/Kongou&amp;diff=59200</id>
		<title>User:McDerp/Sandbox/Kongou</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=User:McDerp/Sandbox/Kongou&amp;diff=59200"/>
		<updated>2017-02-01T22:13:20Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: /* Quotes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:left; margin-right: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; margin-left: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
|-|Lv1 Base= {{KanmusuInfo|ID=021}}&lt;br /&gt;
|-|Lv25 Kai= {{KanmusuInfo|ID=021a}}&lt;br /&gt;
|-|Lv75 Kai Ni= {{KanmusuInfo|ID=149}}&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kongou is the nameship of the four Kongou-class fast battleships. Her sister ships are [[Hiei]], [[Haruna]] and [[Kirishima]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Classified as a Fast Battleship in-game. The Kongou-class boasts good all-around stats for daytime surface combat and a slightly higher evasion than other battleships. Battleships generally do not have torpedoes and thus they can not take part in the closing torpedo phase, nor gain an additional boost to their night-time firepower. In addition for being the largest surface vessels armed with conventional ballistic weapons, battleships have four equipment slots once fully upgraded and have access to catapult-based seaplanes that can enable daytime artillery spotting with the appropriate equipment setups.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Furthermore, due to her Fast speed she can take part in fleets that require a fleet consisting entirely of fast ships, opening up opportunities for alternate routes in select maps that have branching rules related to fleet speed. As a battleship, she enables an additional surface shelling phase in all daytime combat for both friendly and hostile forces.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; However, battleships do not come equipped with anti-submarine warfare (ASW) capabilities and are thus susceptible to enemy submarine squadrons, which is why battleships highly reliant on lighter ships like Destroyers or Light Cruisers to dispatch them. This is generally advised, as having a single battleship in an ASW-fleet enables an additional attack for all surface ships to dispatch submarines without the submarines gaining any additional attacks outside their opening and closing torpedoes. An Aviation Battleship is typically recommended, since they are capable of attacking submarines with their seaplane bombers but all aviation battleships are currently slow and might lead to unfavorable routes.&lt;br /&gt;
&lt;br /&gt;
TO-DO:&lt;br /&gt;
*New quotes template such as [[Fubuki]]&lt;br /&gt;
**Make collapsible categories for quotes &lt;br /&gt;
*Do the math for construction rates for the chosen recipes from Poi or stuff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Service History==&lt;br /&gt;
''Full article: [https://en.wikipedia.org/wiki/Japanese_battleship_Kong%C5%8D Wikipedia] &amp;lt;br&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
'''Kongou''' (金剛, &amp;quot;Indestructible&amp;quot;, named for Mount Kongō) was a warship of the Imperial Japanese Navy during World War I and World War II. She was the first battlecruiser of the Kongou-class, among the most heavily armed ships in any navy when built. Her designer was the British naval engineer George Thurston, and she was laid down in 1911 at Barrow-in-Furness in Britain by Vickers Shipbuilding Company. Kongou was the last Japanese capital ship constructed outside Japan. She was formally commissioned in 1913, and patrolled off the Chinese coast during World War I.&lt;br /&gt;
&lt;br /&gt;
Kongou underwent two major reconstructions. Beginning in 1929, the Imperial Japanese Navy rebuilt her as a battleship, strengthening her armor and improving her speed and power capabilities. In 1935, her superstructure was completely rebuilt, her speed was increased, and she was equipped with launch catapults for floatplanes. Now fast enough to accompany Japan's growing carrier fleet, Kongō was reclassified as a fast battleship. During the Second Sino-Japanese War, Kongou operated off the coast of mainland China before being redeployed to the Third Battleship Division in 1941. In 1942, she sailed as part of the Southern Force in preparation for the Battle of Singapore.&lt;br /&gt;
&lt;br /&gt;
Kongou fought in a large number of major naval actions of the Pacific War during World War II. She covered the Japanese Army's amphibious landings in British Malaya (part of present-day Malaysia) and the Dutch East Indies (now Indonesia) in 1942, before engaging American forces at the Battle of Midway and during the Guadalcanal Campaign. Throughout 1943, Kongou primarily remained at Truk Lagoon in the Caroline Islands, Kure Naval Base (near Hiroshima), Sasebo Naval Base (near Nagasaki), and Lingga Roads, and deployed several times in response to American aircraft carrier air raids on Japanese island bases scattered across the Pacific. Kongou participated in the Battle of the Philippine Sea and the Battle of Leyte Gulf in 1944 (22–23 October), engaging and sinking American vessels in the latter. Kongou was torpedoed and sunk by the submarine USS Sealion while transiting the Formosa Strait on 21 November 1944. She was the only Japanese battleship sunk by submarine in the Second World War, and the last battleship sunk by submarine in history.&lt;br /&gt;
&lt;br /&gt;
==Acquisition==&lt;br /&gt;
''' Available. ''' Buildable from [[Construction|Basic Construction]] and [[Construction#Large_Ship_Construction|Large Ship Construction]] or as a [[Drop_List|drop from selected worlds.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left; margin-right: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;height: 50px;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color: #47D147;&amp;quot; | Basic Construction&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;width: 50px;&amp;quot; |'''-OR-'''&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; style=&amp;quot;width: 150px; background: #FF8080;&amp;quot; | Large-Ship Construction&lt;br /&gt;
! style=&amp;quot;width: 100px;&amp;quot; |[[File:Development material.png]]&lt;br /&gt;
|- style=&amp;quot;width: 25px; height: 50px;&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 25px; background: #94DB94;&amp;quot; |{{Fuel}}&lt;br /&gt;
| style=&amp;quot;width: 50px; background-color: #94DB94;&amp;quot; |200&lt;br /&gt;
! style=&amp;quot;background-color: #D9D9D9;&amp;quot; |{{Steel}}&lt;br /&gt;
| style=&amp;quot;width: 50px; background-color: #D9D9D9;&amp;quot; |600&lt;br /&gt;
! style=&amp;quot;background: #94DB94;&amp;quot; |{{Fuel}}&lt;br /&gt;
| style=&amp;quot;width: 50px; background: #94DB94;&amp;quot; |2000&lt;br /&gt;
! style=&amp;quot;background: #D9D9D9;&amp;quot; |{{Steel}}&lt;br /&gt;
| style=&amp;quot;width: 50px; background: #D9D9D9;&amp;quot; |6000&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; style=&amp;quot;width: 100px; height: 100px;&amp;quot; |1&lt;br /&gt;
|- style=&amp;quot;width: 25px; height: 50px;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background: #CC0;&amp;quot; |{{Ammo}}&lt;br /&gt;
| style=&amp;quot;width: 50px; background: #CC0;&amp;quot; |600&lt;br /&gt;
! style=&amp;quot;background: #FB9;&amp;quot; |{{Bauxite}}&lt;br /&gt;
| style=&amp;quot;width: 50px; background: #FB9;&amp;quot; |300&lt;br /&gt;
! style=&amp;quot;background: #CC0;&amp;quot; |{{Ammo}}&lt;br /&gt;
| style=&amp;quot;width: 50px; background: #CC0;&amp;quot; |6000&lt;br /&gt;
! style=&amp;quot;background: #FB9;&amp;quot; |{{Bauxite}}&lt;br /&gt;
| style=&amp;quot;width: 50px; background: #FB9;&amp;quot; |300&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;height: 50px;&amp;quot; |% to obtain&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |~??%&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |% to obtain&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |~??%&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style = &amp;quot;float: left; width: auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
World 1=&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;  style = &amp;quot;width: 100%;&amp;quot; align = &amp;quot;center&amp;quot;&lt;br /&gt;
! align = &amp;quot;center&amp;quot; style = &amp;quot;width:50px&amp;quot; | 1-1&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:pink; width:150px&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Does Not Drop'''&lt;br /&gt;
! align = &amp;quot;center&amp;quot; style = &amp;quot;width:50px&amp;quot; | 1-2&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:pink; width:150px&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Does Not Drop'''&lt;br /&gt;
|-&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 1-3&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:pink&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Does Not Drop'''&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 1-4&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:pink&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Does Not Drop'''&lt;br /&gt;
|-&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 1-5&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:pink&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Does Not Drop'''&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 1-6&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:pink&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Does Not Drop'''&lt;br /&gt;
|}&lt;br /&gt;
|-|&lt;br /&gt;
World 2=&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;  style = &amp;quot;width: 100%;&amp;quot; align = &amp;quot;center&amp;quot;&lt;br /&gt;
! align = &amp;quot;center&amp;quot; style = &amp;quot;width:50px&amp;quot; | 2-1&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:yellow; width:150px&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Boss Node'''&lt;br /&gt;
! align = &amp;quot;center&amp;quot; style = &amp;quot;width:50px&amp;quot; | 2-2&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen; width:150px&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''All Nodes'''&lt;br /&gt;
|-&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 2-3&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''All Nodes'''&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 2-4&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''All Nodes'''&lt;br /&gt;
|-&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 2-5&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:yellow&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Boss Node'''&lt;br /&gt;
|}&lt;br /&gt;
|-|&lt;br /&gt;
World 3=&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;  style = &amp;quot;width: 100%;&amp;quot; align = &amp;quot;center&amp;quot;&lt;br /&gt;
! align = &amp;quot;center&amp;quot; style = &amp;quot;width:50px&amp;quot; | 3-1&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen; width:150px&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''All Nodes'''&lt;br /&gt;
! align = &amp;quot;center&amp;quot; style = &amp;quot;width:50px&amp;quot; | 3-2&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen; width:150px&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''All Nodes'''&lt;br /&gt;
|-&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 3-3&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''All Nodes'''&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 3-4&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''All Nodes'''&lt;br /&gt;
|-&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 3-5&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:pink&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Does Not Drop'''&lt;br /&gt;
|}&lt;br /&gt;
|-|&lt;br /&gt;
World 4=&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;  style = &amp;quot;width: 100%;&amp;quot; align = &amp;quot;center&amp;quot;&lt;br /&gt;
! align = &amp;quot;center&amp;quot; style = &amp;quot;width:50px&amp;quot; | 4-1&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen; width:150px&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''All Nodes'''&lt;br /&gt;
! align = &amp;quot;center&amp;quot; style = &amp;quot;width:50px&amp;quot; | 4-2&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen; width:150px&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''All Nodes'''&lt;br /&gt;
|-&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 4-3&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''All Nodes'''&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 4-4&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''All Nodes'''&lt;br /&gt;
|-&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 4-5&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''All Nodes'''&lt;br /&gt;
|}&lt;br /&gt;
|-|&lt;br /&gt;
World 5=&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;  style = &amp;quot;width: 100%;&amp;quot; align = &amp;quot;center&amp;quot;&lt;br /&gt;
! align = &amp;quot;center&amp;quot; style = &amp;quot;width:50px&amp;quot; | 5-1&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen; width:150px&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''All Nodes'''&lt;br /&gt;
! align = &amp;quot;center&amp;quot; style = &amp;quot;width:50px&amp;quot; | 5-2&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen; width:150px&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''All Nodes'''&lt;br /&gt;
|-&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 5-3&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:yellow&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Boss Node'''&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 5-4&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:yellow&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Boss Nodes'''&lt;br /&gt;
|-&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 5-5&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:pink&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Does Not Drop'''&lt;br /&gt;
|}&lt;br /&gt;
|-|&lt;br /&gt;
World 6=&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;  style = &amp;quot;width: 100%;&amp;quot; align = &amp;quot;center&amp;quot;&lt;br /&gt;
! align = &amp;quot;center&amp;quot; style = &amp;quot;width:50px&amp;quot; | 6-1&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen; width:150px&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''H, J, Boss Node'''&lt;br /&gt;
! align = &amp;quot;center&amp;quot; style = &amp;quot;width:50px&amp;quot; | 6-2&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:yellow; width:150px&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Boss Node'''&lt;br /&gt;
|-&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 6-3&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:lightgreen&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''E, F, Boss Node'''&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 6-4&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:yellow&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Boss Node'''&lt;br /&gt;
|-&lt;br /&gt;
! align = &amp;quot;center&amp;quot; | 6-5&lt;br /&gt;
| align = &amp;quot;center&amp;quot; style = &amp;quot;background:pink&amp;quot; | Nodes:&amp;lt;br&amp;gt;'''Boss Node'''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Quotes==&lt;br /&gt;
===Quotes (Basic)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;width:100%;font-size:14px;line-height:22px;&amp;quot;&lt;br /&gt;
!style=&amp;quot;width: 10%; text-align: center; background-color:#99CCFF&amp;quot; |Introduction&lt;br /&gt;
|-&lt;br /&gt;
|{{ShipquoteHeader}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Intro&lt;br /&gt;
|origin = 英国で産まれた帰国子女の金剛デース！&lt;br /&gt;
ヨロシクオネガイシマース！&lt;br /&gt;
|translation = It's the English-born returnee, Kongou!&lt;br /&gt;
Nice to meet you!&lt;br /&gt;
|audio = KongoGet.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Library&lt;br /&gt;
|origin = 超弩級戦艦として建造技術導入を兼ねて英国ヴィッカース社で建造された、金剛デース！&lt;br /&gt;
太平洋戦域でも持前の高速力を活かして、大活躍デース！ 期待してネ！&lt;br /&gt;
|translation = The super-dreadnought fitted with Western technology at Vickers in England, Kongou has arrived!&lt;br /&gt;
Even in the Pacific Theatre, I'll use the power of my speed to be of great use! Look forward to it!&lt;br /&gt;
|audio = KongoLibrary.ogg&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;width:100%;font-size:14px;line-height:22px;margin:0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;width: 10%; text-align: center; background-color:#99CCFF&amp;quot; |Base&lt;br /&gt;
|-&lt;br /&gt;
|{{ShipquoteHeader}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Secretary 1&lt;br /&gt;
|origin = 提督のHeartを掴むのは、私デース！&lt;br /&gt;
|translation = I will be the one wins over the Admiral's heart!&lt;br /&gt;
|audio = KongoSortie.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario =  Secretary 2&lt;br /&gt;
|origin = 戦果Resultがあがったヨー！&lt;br /&gt;
|translation = The battle results are in!&lt;br /&gt;
|audio = KongoReturn.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario =  Secretary 3&lt;br /&gt;
|origin = 撃ちます！Fire！&lt;br /&gt;
ヨロシクオネガイシマース！&lt;br /&gt;
|translation = Engaging! FIRE!&lt;br /&gt;
|audio = KongoBattleStart.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario =  Secretary (Idle)&lt;br /&gt;
|origin = Burning...Love！&lt;br /&gt;
|translation = Burning... Love!&lt;br /&gt;
|audio = KongoAttack.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Secretary (Married) &lt;br /&gt;
|origin = これでFinish！？な訳無いデショ！私は食らいついたら離さないワ！&lt;br /&gt;
|translation = You think I'm finished?! Think again! I won't let go once I've got you!&lt;br /&gt;
|audio = KongoNightBattle.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Wedding&lt;br /&gt;
|origin = 全砲門！Fire！&lt;br /&gt;
|translation = All guns, fire!&lt;br /&gt;
|audio = KongoNightAttack.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Show player's score&lt;br /&gt;
|origin = 私の活躍見てくれたの？もっと頑張るから目を離しちゃNoなんだからネ！&lt;br /&gt;
|translation = Did you see my exploits? I'll do even better, so don't look away!&lt;br /&gt;
|audio = KongoMVP.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Joining a fleet&lt;br /&gt;
|origin = あぁあっ！&lt;br /&gt;
|translation = Aah!&lt;br /&gt;
|audio = KongoHitMinor1.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Equipment 1&lt;br /&gt;
|origin = 提督ぅー！&lt;br /&gt;
|translation = Admiral~!&lt;br /&gt;
|audio = KongoHitMinor2.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Equipment 2&lt;br /&gt;
|origin = Shit！提督に貰った大切な装備が！&lt;br /&gt;
|translation = Shit! The precious equipment I got from the admiral!&lt;br /&gt;
|audio = KongoHitMajor.ogg&lt;br /&gt;
}}&lt;br /&gt;
{{ShipquoteKai&lt;br /&gt;
|scenario = Equipment 3&lt;br /&gt;
|origin = 提督･･･どうか武運長久を･･･私･･･ヴァルハラから見ているネ･･･&lt;br /&gt;
|translation = Admiral... May your fortunes hold...I'll... be watching from Valhalla...&lt;br /&gt;
|audio = KongoSunk.ogg&lt;br /&gt;
}}&lt;br /&gt;
{{ShipquoteKai&lt;br /&gt;
|scenario = Supply&lt;br /&gt;
|origin = 提督･･･どうか武運長久を･･･私･･･ヴァルハラから見ているネ･･･&lt;br /&gt;
|translation = Admiral... May your fortunes hold...I'll... be watching from Valhalla...&lt;br /&gt;
|audio = KongoSunk.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Docking (Minor damage)&lt;br /&gt;
|origin = Shit！提督に貰った大切な装備が！&lt;br /&gt;
|translation = Shit! The precious equipment I got from the admiral!&lt;br /&gt;
|audio = KongoHitMajor.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Docking (Major damage)&lt;br /&gt;
|origin = Shit！提督に貰った大切な装備が！&lt;br /&gt;
|translation = Shit! The precious equipment I got from the admiral!&lt;br /&gt;
|audio = KongoHitMajor.ogg&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;width:100%;font-size:14px;line-height:22px;margin:0;&amp;quot;&lt;br /&gt;
!style=&amp;quot;width: 10%; text-align: center; background-color:#99CCFF&amp;quot; |Sortie&lt;br /&gt;
|-&lt;br /&gt;
|{{ShipquoteHeader}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Starting a sortie&lt;br /&gt;
|origin = 提督のHeartを掴むのは、私デース！&lt;br /&gt;
|translation = I will be the one wins over the Admiral's heart!&lt;br /&gt;
|audio = KongoSortie.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Returning from sortie&lt;br /&gt;
|origin = 戦果Resultがあがったヨー！&lt;br /&gt;
|translation = The battle results are in!&lt;br /&gt;
|audio = KongoReturn.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Battle start&lt;br /&gt;
|origin = 撃ちます！Fire！&lt;br /&gt;
ヨロシクオネガイシマース！&lt;br /&gt;
|translation = Engaging! FIRE!&lt;br /&gt;
|audio = KongoBattleStart.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Attack&lt;br /&gt;
|origin = Burning...Love！&lt;br /&gt;
|translation = Burning... Love!&lt;br /&gt;
|audio = KongoAttack.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Night battle&lt;br /&gt;
|origin = これでFinish！？な訳無いデショ！私は食らいついたら離さないワ！&lt;br /&gt;
|translation = You think I'm finished?! Think again! I won't let go once I've got you!&lt;br /&gt;
|audio = KongoNightBattle.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Night attack&lt;br /&gt;
|origin = 全砲門！Fire！&lt;br /&gt;
|translation = All guns, fire!&lt;br /&gt;
|audio = KongoNightAttack.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = MVP&lt;br /&gt;
|origin = 私の活躍見てくれたの？もっと頑張るから目を離しちゃNoなんだからネ！&lt;br /&gt;
|translation = Did you see my exploits? I'll do even better, so don't look away!&lt;br /&gt;
|audio = KongoMVP.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Minor damage 1&lt;br /&gt;
|origin = あぁあっ！&lt;br /&gt;
|translation = Aah!&lt;br /&gt;
|audio = KongoHitMinor1.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = Minor damage 2&lt;br /&gt;
|origin = 提督ぅー！&lt;br /&gt;
|translation = Admiral~!&lt;br /&gt;
|audio = KongoHitMinor2.ogg&lt;br /&gt;
}}&lt;br /&gt;
|{{ShipquoteKai&lt;br /&gt;
|scenario = ≥Moderate damage&lt;br /&gt;
|origin = Shit！提督に貰った大切な装備が！&lt;br /&gt;
|translation = Shit! The precious equipment I got from the admiral!&lt;br /&gt;
|audio = KongoHitMajor.ogg&lt;br /&gt;
}}&lt;br /&gt;
{{ShipquoteKai&lt;br /&gt;
|scenario = Sunk&lt;br /&gt;
|origin = 提督･･･どうか武運長久を･･･私･･･ヴァルハラから見ているネ･･･&lt;br /&gt;
|translation = Admiral... May your fortunes hold...I'll... be watching from Valhalla...&lt;br /&gt;
|audio = KongoSunk.ogg&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==[[Kongou/Gallery|Gallery]]==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
21 3.png|Standard&lt;br /&gt;
21 4.png|Damaged&lt;br /&gt;
149 3.png|Kai Ni&lt;br /&gt;
149 4.png|Kai Ni damaged&lt;br /&gt;
KanMusu21 Nakau.png|[[Seasonal/Nakau_Collaboration|Nakau collaboration CG]]&lt;br /&gt;
KanMusu21 Nakau dmg.png|[[Seasonal/Nakau_Collaboration|Nakau CG damaged]]&lt;br /&gt;
KanMusu149 Nakau.png|[[Seasonal/Nakau_Collaboration|Kai Ni Nakau collaboration CG]]&lt;br /&gt;
KanMusu149 Nakau dmg.png|[[Seasonal/Nakau_Collaboration|Kai Ni Nakau CG damaged]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trivia==&lt;br /&gt;
*All parts used in her construction were manufactured in the U.K. &lt;br /&gt;
*She shares a similar design from the ''Revenge''-class and ''Queen Elizabeth''-class Battleships of the Royal Navy (her cousin battleships). &lt;br /&gt;
**Coincidentally, her cousin battleships, the ''Revenge''-class HMS ''Royal Oak'' and the ''Queen Elizabeth''-class HMS ''Barham'' were sunk by submarine in the same fashion. In total, there were three British built battleship sinkings in World War II caused by a submarine attack along with ''Kongou''.&lt;br /&gt;
*The radar wings that she and her sisters wear share a similar coloration and design to the alternative name for &amp;quot;金剛&amp;quot; which also means &amp;quot;[http://en.wikipedia.org/wiki/Vajra vajra]&amp;quot;, but may be more accurately &amp;quot;ghanta&amp;quot; (bells). [http://drilbudorje.tripod.com/_Dorje.htm See this page] (scroll to 12th Century) and compare to the CG artwork.&lt;br /&gt;
*Her affinity for tea is based on her British heritage.&lt;br /&gt;
*She probably if not most definitely has feelings for her admiral, as seen in her lines.&lt;br /&gt;
*She received her Kai Ni on November 1, 2013.&lt;br /&gt;
*She is still an existing JDS name as of present, along with ''[[Kirishima]]''.&lt;br /&gt;
*She is required by [[Quests#A16|quest A16]] and [[Quests#A40|quest A40]] as Kai Ni.&lt;br /&gt;
&lt;br /&gt;
===Appearances in derivative works===&lt;br /&gt;
*Kongou appears in the anime adaptation of Kantai Collection, and was also featured in the adaptation's [https://www.youtube.com/watch?v=ABZN292gvRo first trailer]. She played a big role in it, as she appears to be the only member of the Fifth Mobile Fleet Fubuki can get along with.&lt;br /&gt;
*Kongou appears as one of the main characters in ''[[Print media#side:Kongou|side:Kongou]]''.&lt;br /&gt;
*Kongou - along with other ships voiced by Nao Touyama - was featured in the first KanColle Drama CD, titled &amp;quot;Hiei's Curry&amp;quot; (比叡、カレーを作る). Due to one seiyuu doing all the voices, the CD's short story is also referred to as &amp;quot;One Nao Show&amp;quot;. A translated version of the short story can be found [https://www.youtube.com/watch?v=H71UmCq3lWc here]. &amp;lt;!-- An earlier revision also had this: https://soundcloud.com/masapusan/one-nao-show --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Kongou/Gallery|View Kongou CG]]&lt;br /&gt;
*[[EliteBB|List of battleships]]&lt;br /&gt;
*[[wikipedia:Japanese_battleship_Kongō|Wikipedia entry on battleship Kongou]]&lt;br /&gt;
* [http://www.nicovideo.jp/watch/sm22168432 Kongou's Hourlies]&lt;br /&gt;
{{shiplist}}&lt;br /&gt;
[[zh:金刚]]&lt;br /&gt;
[[Category:Kongou Class]]&lt;br /&gt;
[[Category:Battleships]]&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NodeInfo&amp;diff=114403</id>
		<title>Module:NodeInfo</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NodeInfo&amp;diff=114403"/>
		<updated>2016-07-23T20:03:00Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local BaseTable = require(&amp;quot;Module:BaseTable&amp;quot;)&lt;br /&gt;
local EnemyShip = require(&amp;quot;Module:EnemyShip&amp;quot;)&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local ShipBattleCardKai = require(&amp;quot;Module:ShipBattleCardKai&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local NodeInfo = BaseTable({&lt;br /&gt;
    _item_class = EnemyShip,&lt;br /&gt;
    _header_template = [[!#&lt;br /&gt;
    !Form&lt;br /&gt;
    !Fleet&lt;br /&gt;
    !AP/AS/AS+]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        node = [[| colspan=&amp;quot;${colspan}&amp;quot; rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;text-align: center; color: ${color}; background-color: ${bg_color};&amp;quot; |${values.node}]],&lt;br /&gt;
        formation = [[| style=&amp;quot;text-align: center; background-color: ${bg_color}; color: ${color};&amp;quot; |${values.formation}]],&lt;br /&gt;
        fleet = [[| style=&amp;quot;width: 500px; background-color: ${bg_color};&amp;quot; |${values.fleet}]],&lt;br /&gt;
        as = [[| style=&amp;quot;text-align: center; background-color: ${bg_color}; color: ${color};&amp;quot; |${values.as}]],&lt;br /&gt;
    },&lt;br /&gt;
    _empty_node_template = [[| style=&amp;quot;text-align: center;&amp;quot; |${values.node}&lt;br /&gt;
    | colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center;&amp;quot; |Must be my imagination (battle avoided)/No enemies sighted&amp;lt;br /&amp;gt;&amp;lt;span lang=&amp;quot;ja&amp;quot;&amp;gt;気のせいだった（戦闘回避）/敵影を見ず。(戦闘なし)&amp;lt;/span&amp;gt;]],&lt;br /&gt;
    _selection_node_template = [[|style=&amp;quot;text-align: center;&amp;quot; |${values.node}&lt;br /&gt;
    | colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center;&amp;quot; |You may choose which direction your fleet will go. Admiral, which path will you choose?&amp;lt;br /&amp;gt;&amp;lt;span lang=&amp;quot;ja&amp;quot;&amp;gt;艦隊針路選択可能！/艦隊の針路を選択できます。提督、どちらの針路をとられますか？&amp;lt;/span&amp;gt;]],&lt;br /&gt;
    _resource_node_template = [[| style=&amp;quot;text-align: center; background-color: ${values.bg_color}; color: ${values.color};&amp;quot; |${values.node}&lt;br /&gt;
    | style=&amp;quot;text-align: center; background-color: ${values.bg_color}; color: ${values.color};&amp;quot; |${values.node_type}&lt;br /&gt;
    | colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center; background-color: ${values.bg_color}; color: ${values.color};&amp;quot; |${values.text}]],&lt;br /&gt;
    _collapser_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${toggle_id} wikia-menu-button&amp;quot;&amp;gt;${button_display}&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-${toggle_id}&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapser_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;node&amp;quot;,&lt;br /&gt;
        &amp;quot;formation&amp;quot;,&lt;br /&gt;
        &amp;quot;fleet&amp;quot;,&lt;br /&gt;
        &amp;quot;as&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    _day_battle_color = &amp;quot;gold&amp;quot;,&lt;br /&gt;
    _night_battle_color = &amp;quot;blue&amp;quot;,&lt;br /&gt;
    _night_battle_bg_color = &amp;quot;lightblue&amp;quot;, -- #BBDEFB&lt;br /&gt;
    _aerial_battle_bg_color = &amp;quot;lightgreen&amp;quot;, -- #C8E6C9&lt;br /&gt;
    _dogfight_battle_bg_color = &amp;quot;#81C784&amp;quot;,&lt;br /&gt;
    _boss_battle_color = &amp;quot;red&amp;quot;,&lt;br /&gt;
    --_resource_node_bg_color = &amp;quot;lightgreen&amp;quot;,&lt;br /&gt;
    _resource_node_bg_color = &amp;quot;initial&amp;quot;,&lt;br /&gt;
    --_maelstrom_node_bg_color = &amp;quot;pink&amp;quot;,&lt;br /&gt;
    _maelstrom_node_bg_color = &amp;quot;initial&amp;quot;,&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:node(row)&lt;br /&gt;
    local color, bg_color = &amp;quot;initial&amp;quot;, &amp;quot;initial&amp;quot;&lt;br /&gt;
    if row.tags.boss then&lt;br /&gt;
        color = self._boss_battle_color&lt;br /&gt;
    end&lt;br /&gt;
    if row.tags.aerial then&lt;br /&gt;
        bg_color = self._aerial_battle_bg_color&lt;br /&gt;
    end&lt;br /&gt;
    if row.tags.dogfight then&lt;br /&gt;
        bg_color = self._dogfight_battle_bg_color&lt;br /&gt;
    end&lt;br /&gt;
    if row.tags.night then&lt;br /&gt;
        bg_color = self._night_battle_bg_color&lt;br /&gt;
    end&lt;br /&gt;
    return { values = { node = Formatting:japanese_text(row.node) }, color = color, bg_color = bg_color }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:formation(row)&lt;br /&gt;
    if row.tags.final then&lt;br /&gt;
        row.formation = row.formation .. &amp;quot;&amp;lt;br /&amp;gt;(Final)&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    local color = &amp;quot;initial&amp;quot;&lt;br /&gt;
    if row.tags.boss then&lt;br /&gt;
        color = self._boss_battle_color&lt;br /&gt;
    end&lt;br /&gt;
    return { values = { formation = row.formation }, color = color }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:fleet(row)&lt;br /&gt;
    return { values = { fleet = row.fleet } }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:as(row)&lt;br /&gt;
    color = &amp;quot;initial&amp;quot;&lt;br /&gt;
    if row.tags.boss then&lt;br /&gt;
        color = self._boss_battle_color&lt;br /&gt;
    end&lt;br /&gt;
    return { values = { as = row.as }, color = color }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:upcase(str)&lt;br /&gt;
    str = str:gsub(&amp;quot;(%s)(%l)&amp;quot;, function(a, b) return a .. string.upper(b) end)&lt;br /&gt;
    str = str:gsub(&amp;quot;^(%l)&amp;quot;, function(a) return string.upper(a) end)&lt;br /&gt;
    return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:insert_item(node, formation, fleet, as, tags, as_complete)&lt;br /&gt;
    local air_parity = (as_complete or as &amp;gt; 0) and string.format(&amp;quot;%.1d&amp;quot;, math.ceil((2./3.) * as)) or &amp;quot;??&amp;quot;&lt;br /&gt;
    local air_superiority = (as_complete or as &amp;gt; 0) and string.format(&amp;quot;%.1d&amp;quot;, math.ceil(as * (3 / 2))) or &amp;quot;??&amp;quot;&lt;br /&gt;
    local air_supremacy = (as_complete or as &amp;gt; 0) and tostring(as * 3) or &amp;quot;??&amp;quot;&lt;br /&gt;
    local air_string = not as_complete and as &amp;gt; 0 and (air_parity .. &amp;quot;+/&amp;quot; .. air_superiority .. &amp;quot;+/&amp;quot; .. air_supremacy .. &amp;quot;+&amp;quot;)&lt;br /&gt;
        or (air_parity .. &amp;quot;/&amp;quot; .. air_superiority .. &amp;quot;/&amp;quot; .. air_supremacy)&lt;br /&gt;
    table.insert(self._items, {&lt;br /&gt;
        node = node,&lt;br /&gt;
		formation = formation,&lt;br /&gt;
		fleet = fleet,&lt;br /&gt;
		as = air_string,&lt;br /&gt;
		tags = tags,&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:create_items() &lt;br /&gt;
    --Modes are as follows:&lt;br /&gt;
    --1 = Node&lt;br /&gt;
    --2 = Tag processing&lt;br /&gt;
    --3 = Resource type&lt;br /&gt;
    --4 = Amount of resources&lt;br /&gt;
    --5 = Formation&lt;br /&gt;
    --6 = Fleet building&lt;br /&gt;
    local mode = 1&lt;br /&gt;
    &lt;br /&gt;
    local node, formation = nil, nil&lt;br /&gt;
    local fleet = {}&lt;br /&gt;
    local as_rating, as_complete = 0, true&lt;br /&gt;
    &lt;br /&gt;
    local tags = {}&lt;br /&gt;
    local resource&lt;br /&gt;
	for index, item_key in ipairs(self._args) do&lt;br /&gt;
		if item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
		    if mode == 6 then --We're at a break and have built a full row; time to insert it&lt;br /&gt;
		        self:insert_item(node, formation, table.concat(fleet, &amp;quot; &amp;quot;), as_rating, tags, as_complete)&lt;br /&gt;
		    end&lt;br /&gt;
		    &lt;br /&gt;
			table.insert(self._items, &amp;quot;break&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			fleet, as_rating, as_complete = {}, 0, true&lt;br /&gt;
			tags = {}&lt;br /&gt;
			mode = 1&lt;br /&gt;
		else&lt;br /&gt;
			if mode == 1 then&lt;br /&gt;
			    --First item should always be the node&lt;br /&gt;
			    node = item_key&lt;br /&gt;
			    mode = 2&lt;br /&gt;
			elseif mode == 2 then&lt;br /&gt;
			    if mw.ustring.find(string.lower(item_key), &amp;quot;resource&amp;quot;) or string.lower(item_key) == &amp;quot;storm&amp;quot; then&lt;br /&gt;
			        local split = mw.ustring.find(item_key, '/')&lt;br /&gt;
			        if split then&lt;br /&gt;
			            tags[string.lower(mw.ustring.sub(item_key, 1, split - 1))] = true&lt;br /&gt;
			            item_key = mw.ustring.sub(item_key, split + 1)&lt;br /&gt;
			        end&lt;br /&gt;
			        tags[string.lower(item_key)] = true&lt;br /&gt;
			        mode = 3&lt;br /&gt;
			    elseif string.lower(item_key) == &amp;quot;empty&amp;quot; then&lt;br /&gt;
			        table.insert(self._items, node .. &amp;quot;/empty&amp;quot;)&lt;br /&gt;
			        mode = 1&lt;br /&gt;
			    elseif string.lower(item_key) == &amp;quot;select&amp;quot; then&lt;br /&gt;
			        table.insert(self._items, node .. &amp;quot;/select&amp;quot;)&lt;br /&gt;
			    else&lt;br /&gt;
			        while mw.ustring.find(item_key, '/') do&lt;br /&gt;
			            local split = mw.ustring.find(item_key, '/')&lt;br /&gt;
			            tags[string.lower(mw.ustring.sub(item_key, 1, split - 1))] = true&lt;br /&gt;
			            item_key = mw.ustring.sub(item_key, split + 1)&lt;br /&gt;
			        end&lt;br /&gt;
			        tags[string.lower(item_key)] = true&lt;br /&gt;
			        mode = 5&lt;br /&gt;
			    end&lt;br /&gt;
		    elseif mode == 3 then&lt;br /&gt;
		        resource = self:upcase(item_key)&lt;br /&gt;
		        mode = 4&lt;br /&gt;
		    elseif mode == 4 then&lt;br /&gt;
		        local amount = item_key&lt;br /&gt;
		        if tags[&amp;quot;storm&amp;quot;] and mw.ustring.sub(amount, 1, 1) ~= &amp;quot;-&amp;quot; then&lt;br /&gt;
		            amount = &amp;quot;-&amp;quot; .. amount&lt;br /&gt;
		        end&lt;br /&gt;
		        local boss = tags[&amp;quot;boss&amp;quot;] and &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot;&lt;br /&gt;
		        local string = node .. &amp;quot;/&amp;quot; .. resource .. &amp;quot;/&amp;quot; .. amount .. &amp;quot;/&amp;quot; .. boss&lt;br /&gt;
		        table.insert(self._items, string)&lt;br /&gt;
		        mode = 1&lt;br /&gt;
		    elseif mode == 5 then&lt;br /&gt;
		        formation = self:upcase(item_key)&lt;br /&gt;
		        mode = 6&lt;br /&gt;
		    else&lt;br /&gt;
		        --Fleets are of variable size, so we append onto a string until we hit the next node declaration&lt;br /&gt;
		        local split = mw.ustring.find(item_key, '/')&lt;br /&gt;
		        local ship_name, ship_suffix&lt;br /&gt;
		        if split then&lt;br /&gt;
		            ship_name = mw.ustring.sub(item_key, 1, split - 1)&lt;br /&gt;
		            ship_suffix = mw.ustring.sub(item_key, split + 1)&lt;br /&gt;
		        else&lt;br /&gt;
		            ship_name = item_key&lt;br /&gt;
		            ship_suffix = &amp;quot;&amp;quot;&lt;br /&gt;
		        end&lt;br /&gt;
&lt;br /&gt;
		        local ship = EnemyShip(ship_name, ship_suffix)&lt;br /&gt;
		        local ship_caption =&lt;br /&gt;
		            (ship:name() or &amp;quot;?&amp;quot;)&lt;br /&gt;
		            .. &amp;quot; (&amp;quot; .. (ship:api_id() or &amp;quot;?&amp;quot;) .. &amp;quot;): &amp;quot;&lt;br /&gt;
		            .. (ship:armor() or &amp;quot;?&amp;quot;) .. &amp;quot; Armor, &amp;quot; .. (ship:hp() or &amp;quot;?&amp;quot;) .. &amp;quot; HP&amp;quot;&lt;br /&gt;
		        table.insert(fleet, ShipBattleCardKai:get{ship = ship, caption = ship_caption, link = ship:link(), flagship = #fleet == 0})&lt;br /&gt;
&lt;br /&gt;
		        local ship_air_power = ship:air_power()&lt;br /&gt;
		        if ship_air_power then&lt;br /&gt;
		            as_rating = as_rating + ship_air_power&lt;br /&gt;
		        else&lt;br /&gt;
		            as_complete = false&lt;br /&gt;
		        end&lt;br /&gt;
            end&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if mode == 6 then&lt;br /&gt;
        self:insert_item(node, formation, table.concat(fleet, &amp;quot; &amp;quot;), as_rating, tags, as_complete)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:create_data_rows()&lt;br /&gt;
    for index, item in ipairs(self._items) do&lt;br /&gt;
		local row_values&lt;br /&gt;
		if type(item) == &amp;quot;string&amp;quot; then&lt;br /&gt;
			row_values = item&lt;br /&gt;
		else&lt;br /&gt;
			row_values = {}&lt;br /&gt;
			for _, column in ipairs(self._columns) do&lt;br /&gt;
				row_values[column] = self[column](self, item)&lt;br /&gt;
			end&lt;br /&gt;
			if index &amp;gt; 1 then&lt;br /&gt;
			    for _, column in ipairs(self._columns) do&lt;br /&gt;
			    	for i = index - 1, 1, -1 do&lt;br /&gt;
			    	    if column == &amp;quot;node&amp;quot; then&lt;br /&gt;
						    local previous_cell = self._data_rows[i][column]&lt;br /&gt;
    						if previous_cell then&lt;br /&gt;
	    					    if row_values[column].values.node == previous_cell.values.node then&lt;br /&gt;
		    				    	previous_cell.rowspan = previous_cell.rowspan and previous_cell.rowspan + 1 or 2&lt;br /&gt;
			    			    	row_values[column] = nil&lt;br /&gt;
				    		    else&lt;br /&gt;
					    	    	row_values[column].rowspan = 1&lt;br /&gt;
    					    		row_values[column].colspan = 1&lt;br /&gt;
    	    					end&lt;br /&gt;
	    	    				break&lt;br /&gt;
	    	    			end&lt;br /&gt;
		    			end&lt;br /&gt;
		            end&lt;br /&gt;
		        end&lt;br /&gt;
		    else&lt;br /&gt;
				for _, column in ipairs(self._columns) do&lt;br /&gt;
			    	row_values[column].rowspan = 1&lt;br /&gt;
			    	row_values[column].colspan = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(self._data_rows, row_values)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:process_resource_node(resource, amount)&lt;br /&gt;
    --Amount may or may not be just numbers&lt;br /&gt;
    local action, units, node_type, bg_color = &amp;quot;Gained&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;Resource&amp;quot;, self._resource_node_bg_color&lt;br /&gt;
    &lt;br /&gt;
    if mw.ustring.sub(amount, 1, 1) == &amp;quot;-&amp;quot; then&lt;br /&gt;
        action = &amp;quot;Lost&amp;quot;&lt;br /&gt;
        amount = mw.ustring.sub(amount, 2)&lt;br /&gt;
        node_type = &amp;quot;Storm&amp;quot;&lt;br /&gt;
        bg_color = self._maelstrom_node_bg_color&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if mw.ustring.find(amount, &amp;quot; &amp;quot;) then&lt;br /&gt;
        local split = mw.ustring.find(amount, &amp;quot; &amp;quot;)&lt;br /&gt;
        units = mw.ustring.sub(amount, split + 1)&lt;br /&gt;
        amount = mw.ustring.sub(amount, 1, split - 1)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local text = action .. &amp;quot; &amp;quot; .. amount .. &amp;quot; &amp;quot; .. resource .. &amp;quot; &amp;quot; .. units&lt;br /&gt;
    return text, node_type, bg_color&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:start_rows()&lt;br /&gt;
    self._rows = {}&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;toggle_id&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._collapser_template,&lt;br /&gt;
            toggle_id = self._args[&amp;quot;toggle_id&amp;quot;],&lt;br /&gt;
            button_display = self._args[&amp;quot;button_display&amp;quot;] or &amp;quot;Show/Hide Formation Table&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    table.insert(self._rows, self._header)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:build_rows()&lt;br /&gt;
    local bg_color&lt;br /&gt;
	for index, row_values in ipairs(self._data_rows) do&lt;br /&gt;
		if row_values ~= &amp;quot;break&amp;quot; then&lt;br /&gt;
			table.insert(self._rows, self._row_starter)&lt;br /&gt;
			if row_values == &amp;quot;header&amp;quot; then&lt;br /&gt;
				table.insert(self._rows, self._header)&lt;br /&gt;
			elseif type(row_values) == &amp;quot;table&amp;quot; then&lt;br /&gt;
			    if row_values[&amp;quot;node&amp;quot;] then&lt;br /&gt;
			        bg_color = row_values[&amp;quot;node&amp;quot;].bg_color&lt;br /&gt;
			    elseif bg_color == nil then&lt;br /&gt;
			        bg_color = &amp;quot;initial&amp;quot;&lt;br /&gt;
			    end&lt;br /&gt;
				for _, column in ipairs(self._columns) do&lt;br /&gt;
			        if row_values[column] then&lt;br /&gt;
				        row_values[column].bg_color = bg_color&lt;br /&gt;
				    end&lt;br /&gt;
					if row_values[column] then&lt;br /&gt;
						table.insert(self._rows, format(self._column_cell_templates[column] or self._cell, row_values[column]))&lt;br /&gt;
					end&lt;br /&gt;
			    end&lt;br /&gt;
    	elseif mw.ustring.find(row_values, '/') then&lt;br /&gt;
    	        --node/resource/amount/boss&lt;br /&gt;
    	        local values = {}&lt;br /&gt;
    	        while mw.ustring.find(row_values, '/') do&lt;br /&gt;
    	            local split = mw.ustring.find(row_values, '/')&lt;br /&gt;
    	            if split then&lt;br /&gt;
    	                table.insert(values, mw.ustring.sub(row_values, 1, split - 1))&lt;br /&gt;
    	                row_values = mw.ustring.sub(row_values, split + 1)&lt;br /&gt;
    	            end&lt;br /&gt;
	            end&lt;br /&gt;
	            table.insert(values, row_values)&lt;br /&gt;
	            if values[2] == &amp;quot;empty&amp;quot; then&lt;br /&gt;
	                table.insert(self._rows, format{self._empty_node_template, values = { node = Formatting:japanese_text(values[1]) } })&lt;br /&gt;
	            elseif values[2] == &amp;quot;select&amp;quot; then&lt;br /&gt;
	                table.insert(self._rows, format{self._selection_node_template, values = { node = Formatting:japanese_text(values[1]) } })&lt;br /&gt;
    	        else&lt;br /&gt;
	                local resource = Formatting:format_image{values[2] .. &amp;quot;.png&amp;quot;, caption = self:upcase(values[2]), size = &amp;quot;22x22px&amp;quot;}&lt;br /&gt;
	                local text, node_type, bg_color = self:process_resource_node(resource, values[3])&lt;br /&gt;
	                local color = &amp;quot;initial&amp;quot;&lt;br /&gt;
	                if values[4] == &amp;quot;true&amp;quot; then&lt;br /&gt;
	                    color = self._boss_battle_color&lt;br /&gt;
	                end&lt;br /&gt;
    	            table.insert(self._rows, format{self._resource_node_template, values = {&lt;br /&gt;
    	                node = Formatting:japanese_text(values[1]),&lt;br /&gt;
    	                text = text,&lt;br /&gt;
    	                node_type = node_type,&lt;br /&gt;
    	                color = color,&lt;br /&gt;
    	                bg_color = bg_color,&lt;br /&gt;
    	            }})&lt;br /&gt;
	            end&lt;br /&gt;
		    end&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:finish_rows()&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
	table.insert(self._rows, self._header_bottom or self._header)&lt;br /&gt;
	table.insert(self._rows, self._table_end)&lt;br /&gt;
	&lt;br /&gt;
	if self._args[&amp;quot;toggle_id&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, self._collapser_end)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NodeInfo&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NodeInfo&amp;diff=114392</id>
		<title>Module:NodeInfo</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NodeInfo&amp;diff=114392"/>
		<updated>2016-02-20T12:37:20Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local BaseTable = require(&amp;quot;Module:BaseTable&amp;quot;)&lt;br /&gt;
local EnemyShip = require(&amp;quot;Module:EnemyShip&amp;quot;)&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local ShipBattleCardKai = require(&amp;quot;Module:ShipBattleCardKai&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local NodeInfo = BaseTable({&lt;br /&gt;
    _item_class = EnemyShip,&lt;br /&gt;
    _header_template = [[!#&lt;br /&gt;
    !Form&lt;br /&gt;
    !Fleet&lt;br /&gt;
    !AP/AS/AS+]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        node = [[| colspan=&amp;quot;${colspan}&amp;quot; rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;text-align: center; color: ${color}; background-color: ${bg_color};&amp;quot; |${values.node}]],&lt;br /&gt;
        formation = [[| style=&amp;quot;text-align: center; background-color: ${bg_color}; color: ${color};&amp;quot; |${values.formation}]],&lt;br /&gt;
        fleet = [[| style=&amp;quot;width: 500px; background-color: ${bg_color};&amp;quot; |${values.fleet}]],&lt;br /&gt;
        as = [[| style=&amp;quot;text-align: center; background-color: ${bg_color}; color: ${color};&amp;quot; |${values.as}]],&lt;br /&gt;
    },&lt;br /&gt;
    _empty_node_template = [[| style=&amp;quot;text-align: center;&amp;quot; |${values.node}&lt;br /&gt;
    | colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center;&amp;quot; |Must be my imagination (battle avoided)]],&lt;br /&gt;
    _selection_node_template = [[|style=&amp;quot;text-align: center;&amp;quot; |${values.node}&lt;br /&gt;
    | colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center;&amp;quot; |You may choose which direction your fleet will go. Admiral, which path will you choose?]],&lt;br /&gt;
    _resource_node_template = [[| style=&amp;quot;text-align: center; background-color: ${values.bg_color}; color: ${values.color};&amp;quot; |${values.node}&lt;br /&gt;
    | style=&amp;quot;text-align: center; background-color: ${values.bg_color}; color: ${values.color};&amp;quot; |${values.node_type}&lt;br /&gt;
    | colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center; background-color: ${values.bg_color}; color: ${values.color};&amp;quot; |${values.text}]],&lt;br /&gt;
    _collapser_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${toggle_id} wikia-menu-button&amp;quot;&amp;gt;${button_display}&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-${toggle_id}&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapser_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;node&amp;quot;,&lt;br /&gt;
        &amp;quot;formation&amp;quot;,&lt;br /&gt;
        &amp;quot;fleet&amp;quot;,&lt;br /&gt;
        &amp;quot;as&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    _day_battle_color = &amp;quot;gold&amp;quot;,&lt;br /&gt;
    _night_battle_color = &amp;quot;blue&amp;quot;,&lt;br /&gt;
    _night_battle_bg_color = &amp;quot;lightblue&amp;quot;,&lt;br /&gt;
    _aerial_battle_bg_color = &amp;quot;lightgreen&amp;quot;,&lt;br /&gt;
    _dogfight_battle_bg_color = &amp;quot;green&amp;quot;,&lt;br /&gt;
    _boss_battle_color = &amp;quot;red&amp;quot;,&lt;br /&gt;
    --_resource_node_bg_color = &amp;quot;lightgreen&amp;quot;,&lt;br /&gt;
    _resource_node_bg_color = &amp;quot;initial&amp;quot;,&lt;br /&gt;
    --_maelstrom_node_bg_color = &amp;quot;pink&amp;quot;,&lt;br /&gt;
    _maelstrom_node_bg_color = &amp;quot;initial&amp;quot;,&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:node(row)&lt;br /&gt;
    local color, bg_color = &amp;quot;initial&amp;quot;, &amp;quot;initial&amp;quot;&lt;br /&gt;
    if row.tags.boss then&lt;br /&gt;
        color = self._boss_battle_color&lt;br /&gt;
    end&lt;br /&gt;
    if row.tags.aerial then&lt;br /&gt;
        bg_color = self._aerial_battle_bg_color&lt;br /&gt;
    end&lt;br /&gt;
    if row.tags.dogfight then&lt;br /&gt;
        bg_color = self._dogfight_battle_bg_color&lt;br /&gt;
    end&lt;br /&gt;
    if row.tags.night then&lt;br /&gt;
        bg_color = self._night_battle_bg_color&lt;br /&gt;
    end&lt;br /&gt;
    return { values = { node = row.node }, color = color, bg_color = bg_color }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:formation(row)&lt;br /&gt;
    if row.tags.final then&lt;br /&gt;
        row.formation = row.formation .. &amp;quot; (Final)&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    local color = &amp;quot;initial&amp;quot;&lt;br /&gt;
    if row.tags.boss then&lt;br /&gt;
        color = self._boss_battle_color&lt;br /&gt;
    end&lt;br /&gt;
    return { values = { formation = row.formation }, color = color }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:fleet(row)&lt;br /&gt;
    return { values = { fleet = row.fleet } }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:as(row)&lt;br /&gt;
    color = &amp;quot;initial&amp;quot;&lt;br /&gt;
    if row.tags.boss then&lt;br /&gt;
        color = self._boss_battle_color&lt;br /&gt;
    end&lt;br /&gt;
    return { values = { as = row.as }, color = color }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:upcase(str)&lt;br /&gt;
    str = str:gsub(&amp;quot;(%s)(%l)&amp;quot;, function(a, b) return a .. string.upper(b) end)&lt;br /&gt;
    str = str:gsub(&amp;quot;^(%l)&amp;quot;, function(a) return string.upper(a) end)&lt;br /&gt;
    return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:insert_item(node, formation, fleet, as, tags)&lt;br /&gt;
    local air_parity = string.format(&amp;quot;%.1d&amp;quot;, math.ceil((2./3.) * as))&lt;br /&gt;
    local air_superiority = string.format(&amp;quot;%.1d&amp;quot;, math.ceil(as * (3 / 2)))&lt;br /&gt;
    local air_supremacy = tostring(as * 3)&lt;br /&gt;
    local air_string = air_parity .. &amp;quot;/&amp;quot; .. air_superiority .. &amp;quot;/&amp;quot; .. air_supremacy&lt;br /&gt;
    table.insert(self._items, {&lt;br /&gt;
        node = node,&lt;br /&gt;
		formation = formation,&lt;br /&gt;
		fleet = fleet,&lt;br /&gt;
		as = air_string,&lt;br /&gt;
		tags = tags,&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:create_items() &lt;br /&gt;
    --Modes are as follows:&lt;br /&gt;
    --1 = Node&lt;br /&gt;
    --2 = Tag processing&lt;br /&gt;
    --3 = Resource type&lt;br /&gt;
    --4 = Amount of resources&lt;br /&gt;
    --5 = Formation&lt;br /&gt;
    --6 = Fleet building&lt;br /&gt;
    local mode = 1&lt;br /&gt;
    &lt;br /&gt;
    local node, formation = nil, nil&lt;br /&gt;
    local fleet = {}&lt;br /&gt;
    local as_rating = 0&lt;br /&gt;
    &lt;br /&gt;
    local tags = {}&lt;br /&gt;
    local resource&lt;br /&gt;
	for index, item_key in ipairs(self._args) do&lt;br /&gt;
		if item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
		    if mode == 6 then --We're at a break and have built a full row; time to insert it&lt;br /&gt;
		        self:insert_item(node, formation, table.concat(fleet, &amp;quot; &amp;quot;), as_rating, tags)&lt;br /&gt;
		    end&lt;br /&gt;
		    &lt;br /&gt;
			table.insert(self._items, &amp;quot;break&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			fleet, as_rating = {}, 0&lt;br /&gt;
			tags = {}&lt;br /&gt;
			mode = 1&lt;br /&gt;
		else&lt;br /&gt;
			if mode == 1 then&lt;br /&gt;
			    --First item should always be the node&lt;br /&gt;
			    node = item_key&lt;br /&gt;
			    mode = 2&lt;br /&gt;
			elseif mode == 2 then&lt;br /&gt;
			    if mw.ustring.find(string.lower(item_key), &amp;quot;resource&amp;quot;) or string.lower(item_key) == &amp;quot;storm&amp;quot; then&lt;br /&gt;
			        local split = mw.ustring.find(item_key, '/')&lt;br /&gt;
			        if split then&lt;br /&gt;
			            tags[string.lower(mw.ustring.sub(item_key, 1, split - 1))] = true&lt;br /&gt;
			            item_key = mw.ustring.sub(item_key, split + 1)&lt;br /&gt;
			        end&lt;br /&gt;
			        tags[string.lower(item_key)] = true&lt;br /&gt;
			        mode = 3&lt;br /&gt;
			    elseif string.lower(item_key) == &amp;quot;empty&amp;quot; then&lt;br /&gt;
			        table.insert(self._items, node .. &amp;quot;/empty&amp;quot;)&lt;br /&gt;
			        mode = 1&lt;br /&gt;
			    elseif string.lower(item_key) == &amp;quot;select&amp;quot; then&lt;br /&gt;
			        table.insert(self._items, node .. &amp;quot;/select&amp;quot;)&lt;br /&gt;
			    else&lt;br /&gt;
			        while mw.ustring.find(item_key, '/') do&lt;br /&gt;
			            local split = mw.ustring.find(item_key, '/')&lt;br /&gt;
			            tags[string.lower(mw.ustring.sub(item_key, 1, split - 1))] = true&lt;br /&gt;
			            item_key = mw.ustring.sub(item_key, split + 1)&lt;br /&gt;
			        end&lt;br /&gt;
			        tags[string.lower(item_key)] = true&lt;br /&gt;
			        mode = 5&lt;br /&gt;
			    end&lt;br /&gt;
		    elseif mode == 3 then&lt;br /&gt;
		        resource = self:upcase(item_key)&lt;br /&gt;
		        mode = 4&lt;br /&gt;
		    elseif mode == 4 then&lt;br /&gt;
		        local amount = item_key&lt;br /&gt;
		        if tags[&amp;quot;storm&amp;quot;] and mw.ustring.sub(amount, 1, 1) ~= &amp;quot;-&amp;quot; then&lt;br /&gt;
		            amount = &amp;quot;-&amp;quot; .. amount&lt;br /&gt;
		        end&lt;br /&gt;
		        local boss = tags[&amp;quot;boss&amp;quot;] and &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot;&lt;br /&gt;
		        local string = node .. &amp;quot;/&amp;quot; .. resource .. &amp;quot;/&amp;quot; .. amount .. &amp;quot;/&amp;quot; .. boss&lt;br /&gt;
		        table.insert(self._items, string)&lt;br /&gt;
		        mode = 1&lt;br /&gt;
		    elseif mode == 5 then&lt;br /&gt;
		        formation = self:upcase(item_key)&lt;br /&gt;
		        mode = 6&lt;br /&gt;
		    else&lt;br /&gt;
		        --Fleets are of variable size, so we append onto a string until we hit the next node declaration&lt;br /&gt;
		        local split = mw.ustring.find(item_key, '/')&lt;br /&gt;
		        local ship_name, ship_suffix&lt;br /&gt;
		        if split then&lt;br /&gt;
		            ship_name = mw.ustring.sub(item_key, 1, split - 1)&lt;br /&gt;
		            ship_suffix = mw.ustring.sub(item_key, split + 1)&lt;br /&gt;
		        else&lt;br /&gt;
		            ship_name = item_key&lt;br /&gt;
		            ship_suffix = &amp;quot;&amp;quot;&lt;br /&gt;
		        end&lt;br /&gt;
		        local ship = EnemyShip(ship_name, ship_suffix)&lt;br /&gt;
		        &lt;br /&gt;
		        table.insert(fleet, ShipBattleCardKai:get{ship = ship, caption = ship:name(), link = ship:link(), flagship = #fleet == 0})&lt;br /&gt;
		        &lt;br /&gt;
		        if ship:air_power() then&lt;br /&gt;
		            as_rating = as_rating + ship:air_power()&lt;br /&gt;
		        end&lt;br /&gt;
            end&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if mode == 6 then&lt;br /&gt;
        self:insert_item(node, formation, table.concat(fleet, &amp;quot; &amp;quot;), as_rating, tags)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:create_data_rows()&lt;br /&gt;
    for index, item in ipairs(self._items) do&lt;br /&gt;
		local row_values&lt;br /&gt;
		if type(item) == &amp;quot;string&amp;quot; then&lt;br /&gt;
			row_values = item&lt;br /&gt;
		else&lt;br /&gt;
			row_values = {}&lt;br /&gt;
			for _, column in ipairs(self._columns) do&lt;br /&gt;
				row_values[column] = self[column](self, item)&lt;br /&gt;
			end&lt;br /&gt;
			if index &amp;gt; 1 then&lt;br /&gt;
			    for _, column in ipairs(self._columns) do&lt;br /&gt;
			    	for i = index - 1, 1, -1 do&lt;br /&gt;
			    	    if column == &amp;quot;node&amp;quot; then&lt;br /&gt;
						    local previous_cell = self._data_rows[i][column]&lt;br /&gt;
    						if previous_cell then&lt;br /&gt;
	    					    if row_values[column].values.node == previous_cell.values.node then&lt;br /&gt;
		    				    	previous_cell.rowspan = previous_cell.rowspan and previous_cell.rowspan + 1 or 2&lt;br /&gt;
			    			    	row_values[column] = nil&lt;br /&gt;
				    		    else&lt;br /&gt;
					    	    	row_values[column].rowspan = 1&lt;br /&gt;
    					    		row_values[column].colspan = 1&lt;br /&gt;
    	    					end&lt;br /&gt;
	    	    				break&lt;br /&gt;
	    	    			end&lt;br /&gt;
		    			end&lt;br /&gt;
		            end&lt;br /&gt;
		        end&lt;br /&gt;
		    else&lt;br /&gt;
				for _, column in ipairs(self._columns) do&lt;br /&gt;
			    	row_values[column].rowspan = 1&lt;br /&gt;
			    	row_values[column].colspan = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(self._data_rows, row_values)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:process_resource_node(resource, amount)&lt;br /&gt;
    --Amount may or may not be just numbers&lt;br /&gt;
    local action, units, node_type, bg_color = &amp;quot;Gained&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;Resource&amp;quot;, self._resource_node_bg_color&lt;br /&gt;
    &lt;br /&gt;
    if mw.ustring.sub(amount, 1, 1) == &amp;quot;-&amp;quot; then&lt;br /&gt;
        action = &amp;quot;Lost&amp;quot;&lt;br /&gt;
        amount = mw.ustring.sub(amount, 2)&lt;br /&gt;
        node_type = &amp;quot;Storm&amp;quot;&lt;br /&gt;
        bg_color = self._maelstrom_node_bg_color&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if mw.ustring.find(amount, &amp;quot; &amp;quot;) then&lt;br /&gt;
        local split = mw.ustring.find(amount, &amp;quot; &amp;quot;)&lt;br /&gt;
        units = mw.ustring.sub(amount, split + 1)&lt;br /&gt;
        amount = mw.ustring.sub(amount, 1, split - 1)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local text = action .. &amp;quot; &amp;quot; .. amount .. &amp;quot; &amp;quot; .. resource .. &amp;quot; &amp;quot; .. units&lt;br /&gt;
    return text, node_type, bg_color&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:start_rows()&lt;br /&gt;
    self._rows = {}&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;toggle_id&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._collapser_template,&lt;br /&gt;
            toggle_id = self._args[&amp;quot;toggle_id&amp;quot;],&lt;br /&gt;
            button_display = self._args[&amp;quot;button_display&amp;quot;] or &amp;quot;Show/Hide Formation Table&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    table.insert(self._rows, self._header)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:build_rows()&lt;br /&gt;
    local bg_color&lt;br /&gt;
	for index, row_values in ipairs(self._data_rows) do&lt;br /&gt;
		if row_values ~= &amp;quot;break&amp;quot; then&lt;br /&gt;
			table.insert(self._rows, self._row_starter)&lt;br /&gt;
			if row_values == &amp;quot;header&amp;quot; then&lt;br /&gt;
				table.insert(self._rows, self._header)&lt;br /&gt;
			elseif type(row_values) == &amp;quot;table&amp;quot; then&lt;br /&gt;
			    if row_values[&amp;quot;node&amp;quot;] then&lt;br /&gt;
			        bg_color = row_values[&amp;quot;node&amp;quot;].bg_color&lt;br /&gt;
			    elseif bg_color == nil then&lt;br /&gt;
			        bg_color = &amp;quot;initial&amp;quot;&lt;br /&gt;
			    end&lt;br /&gt;
				for _, column in ipairs(self._columns) do&lt;br /&gt;
			        if row_values[column] then&lt;br /&gt;
				        row_values[column].bg_color = bg_color&lt;br /&gt;
				    end&lt;br /&gt;
					if row_values[column] then&lt;br /&gt;
						table.insert(self._rows, format(self._column_cell_templates[column] or self._cell, row_values[column]))&lt;br /&gt;
					end&lt;br /&gt;
			    end&lt;br /&gt;
    	elseif mw.ustring.find(row_values, '/') then&lt;br /&gt;
    	        --node/resource/amount/boss&lt;br /&gt;
    	        local values = {}&lt;br /&gt;
    	        while mw.ustring.find(row_values, '/') do&lt;br /&gt;
    	            local split = mw.ustring.find(row_values, '/')&lt;br /&gt;
    	            if split then&lt;br /&gt;
    	                table.insert(values, mw.ustring.sub(row_values, 1, split - 1))&lt;br /&gt;
    	                row_values = mw.ustring.sub(row_values, split + 1)&lt;br /&gt;
    	            end&lt;br /&gt;
	            end&lt;br /&gt;
	            table.insert(values, row_values)&lt;br /&gt;
	            if values[2] == &amp;quot;empty&amp;quot; then&lt;br /&gt;
	                table.insert(self._rows, format{self._empty_node_template, values = { node = values[1] } })&lt;br /&gt;
	            elseif values[2] == &amp;quot;select&amp;quot; then&lt;br /&gt;
	                table.insert(self._rows, format{self._selection_node_template, values = { node = values[1] } })&lt;br /&gt;
    	        else&lt;br /&gt;
	                local resource = Formatting:format_image{values[2] .. &amp;quot;.png&amp;quot;, caption = self:upcase(values[2]), size = &amp;quot;22x22px&amp;quot;}&lt;br /&gt;
	                local text, node_type, bg_color = self:process_resource_node(resource, values[3])&lt;br /&gt;
	                local color = &amp;quot;initial&amp;quot;&lt;br /&gt;
	                if values[4] == &amp;quot;true&amp;quot; then&lt;br /&gt;
	                    color = self._boss_battle_color&lt;br /&gt;
	                end&lt;br /&gt;
    	            table.insert(self._rows, format{self._resource_node_template, values = {&lt;br /&gt;
    	                node = values[1],&lt;br /&gt;
    	                text = text,&lt;br /&gt;
    	                node_type = node_type,&lt;br /&gt;
    	                color = color,&lt;br /&gt;
    	                bg_color = bg_color,&lt;br /&gt;
    	            }})&lt;br /&gt;
	            end&lt;br /&gt;
		    end&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:finish_rows()&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
	table.insert(self._rows, self._header_bottom or self._header)&lt;br /&gt;
	table.insert(self._rows, self._table_end)&lt;br /&gt;
	&lt;br /&gt;
	if self._args[&amp;quot;toggle_id&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, self._collapser_end)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NodeInfo&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NodeInfo&amp;diff=114391</id>
		<title>Module:NodeInfo</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NodeInfo&amp;diff=114391"/>
		<updated>2016-02-20T12:32:16Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local BaseTable = require(&amp;quot;Module:BaseTable&amp;quot;)&lt;br /&gt;
local EnemyShip = require(&amp;quot;Module:EnemyShip&amp;quot;)&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local ShipBattleCardKai = require(&amp;quot;Module:ShipBattleCardKai&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local NodeInfo = BaseTable({&lt;br /&gt;
    _item_class = EnemyShip,&lt;br /&gt;
    _header_template = [[!#&lt;br /&gt;
    !Form&lt;br /&gt;
    !Fleet&lt;br /&gt;
    !AP/AS/AS+]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        node = [[| colspan=&amp;quot;${colspan}&amp;quot; rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;text-align: center; color: ${color}; background-color: ${bg_color};&amp;quot; |${values.node}]],&lt;br /&gt;
        formation = [[| style=&amp;quot;text-align: center; background-color: ${bg_color}; color: ${color};&amp;quot; |${values.formation}]],&lt;br /&gt;
        fleet = [[| style=&amp;quot;width: 500px; background-color: ${bg_color};&amp;quot; |${values.fleet}]],&lt;br /&gt;
        as = [[| style=&amp;quot;text-align: center; background-color: ${bg_color}; color: ${color};&amp;quot; |${values.as}]],&lt;br /&gt;
    },&lt;br /&gt;
    _empty_node_template = [[| style=&amp;quot;text-align: center;&amp;quot; |${values.node}&lt;br /&gt;
    | colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center;&amp;quot; |Must be my imagination (battle avoided)]],&lt;br /&gt;
    _selection_node_template = [[|style=&amp;quot;text-align: center;&amp;quot; |${values.node}&lt;br /&gt;
    | colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center;&amp;quot; |You may choose which direction your fleet will go. Admiral, which path will you choose?]],&lt;br /&gt;
    _resource_node_template = [[| style=&amp;quot;text-align: center; background-color: ${values.bg_color}; color: ${values.color};&amp;quot; |${values.node}&lt;br /&gt;
    | style=&amp;quot;text-align: center; background-color: ${values.bg_color}; color: ${values.color};&amp;quot; |${values.node_type}&lt;br /&gt;
    | colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align: center; background-color: ${values.bg_color}; color: ${values.color};&amp;quot; |${values.text}]],&lt;br /&gt;
    _collapser_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${toggle_id} wikia-menu-button&amp;quot;&amp;gt;${button_display}&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-${toggle_id}&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapser_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;node&amp;quot;,&lt;br /&gt;
        &amp;quot;formation&amp;quot;,&lt;br /&gt;
        &amp;quot;fleet&amp;quot;,&lt;br /&gt;
        &amp;quot;as&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    _day_battle_color = &amp;quot;gold&amp;quot;,&lt;br /&gt;
    _night_battle_color = &amp;quot;blue&amp;quot;,&lt;br /&gt;
    _night_battle_bg_color = &amp;quot;lightblue&amp;quot;,&lt;br /&gt;
    _aerial_battle_bg_color = &amp;quot;lightgreen&amp;quot;,&lt;br /&gt;
    _boss_battle_color = &amp;quot;red&amp;quot;,&lt;br /&gt;
    --_resource_node_bg_color = &amp;quot;lightgreen&amp;quot;,&lt;br /&gt;
    _resource_node_bg_color = &amp;quot;initial&amp;quot;,&lt;br /&gt;
    --_maelstrom_node_bg_color = &amp;quot;pink&amp;quot;,&lt;br /&gt;
    _maelstrom_node_bg_color = &amp;quot;initial&amp;quot;,&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:node(row)&lt;br /&gt;
    local color, bg_color = &amp;quot;initial&amp;quot;, &amp;quot;initial&amp;quot;&lt;br /&gt;
    if row.tags.boss then&lt;br /&gt;
        color = self._boss_battle_color&lt;br /&gt;
    end&lt;br /&gt;
    if row.tags.aerial or row.tags.dogfight then&lt;br /&gt;
        bg_color = self._aerial_battle_bg_color&lt;br /&gt;
    end&lt;br /&gt;
    if row.tags.night then&lt;br /&gt;
        bg_color = self._night_battle_bg_color&lt;br /&gt;
    end&lt;br /&gt;
    return { values = { node = row.node }, color = color, bg_color = bg_color }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:formation(row)&lt;br /&gt;
    if row.tags.final then&lt;br /&gt;
        row.formation = row.formation .. &amp;quot; (Final)&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    local color = &amp;quot;initial&amp;quot;&lt;br /&gt;
    if row.tags.boss then&lt;br /&gt;
        color = self._boss_battle_color&lt;br /&gt;
    end&lt;br /&gt;
    return { values = { formation = row.formation }, color = color }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:fleet(row)&lt;br /&gt;
    return { values = { fleet = row.fleet } }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:as(row)&lt;br /&gt;
    color = &amp;quot;initial&amp;quot;&lt;br /&gt;
    if row.tags.boss then&lt;br /&gt;
        color = self._boss_battle_color&lt;br /&gt;
    end&lt;br /&gt;
    return { values = { as = row.as }, color = color }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:upcase(str)&lt;br /&gt;
    str = str:gsub(&amp;quot;(%s)(%l)&amp;quot;, function(a, b) return a .. string.upper(b) end)&lt;br /&gt;
    str = str:gsub(&amp;quot;^(%l)&amp;quot;, function(a) return string.upper(a) end)&lt;br /&gt;
    return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:insert_item(node, formation, fleet, as, tags)&lt;br /&gt;
    local air_parity = string.format(&amp;quot;%.1d&amp;quot;, math.ceil((2./3.) * as))&lt;br /&gt;
    local air_superiority = string.format(&amp;quot;%.1d&amp;quot;, math.ceil(as * (3 / 2)))&lt;br /&gt;
    local air_supremacy = tostring(as * 3)&lt;br /&gt;
    local air_string = air_parity .. &amp;quot;/&amp;quot; .. air_superiority .. &amp;quot;/&amp;quot; .. air_supremacy&lt;br /&gt;
    table.insert(self._items, {&lt;br /&gt;
        node = node,&lt;br /&gt;
		formation = formation,&lt;br /&gt;
		fleet = fleet,&lt;br /&gt;
		as = air_string,&lt;br /&gt;
		tags = tags,&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:create_items() &lt;br /&gt;
    --Modes are as follows:&lt;br /&gt;
    --1 = Node&lt;br /&gt;
    --2 = Tag processing&lt;br /&gt;
    --3 = Resource type&lt;br /&gt;
    --4 = Amount of resources&lt;br /&gt;
    --5 = Formation&lt;br /&gt;
    --6 = Fleet building&lt;br /&gt;
    local mode = 1&lt;br /&gt;
    &lt;br /&gt;
    local node, formation = nil, nil&lt;br /&gt;
    local fleet = {}&lt;br /&gt;
    local as_rating = 0&lt;br /&gt;
    &lt;br /&gt;
    local tags = {}&lt;br /&gt;
    local resource&lt;br /&gt;
	for index, item_key in ipairs(self._args) do&lt;br /&gt;
		if item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
		    if mode == 6 then --We're at a break and have built a full row; time to insert it&lt;br /&gt;
		        self:insert_item(node, formation, table.concat(fleet, &amp;quot; &amp;quot;), as_rating, tags)&lt;br /&gt;
		    end&lt;br /&gt;
		    &lt;br /&gt;
			table.insert(self._items, &amp;quot;break&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			fleet, as_rating = {}, 0&lt;br /&gt;
			tags = {}&lt;br /&gt;
			mode = 1&lt;br /&gt;
		else&lt;br /&gt;
			if mode == 1 then&lt;br /&gt;
			    --First item should always be the node&lt;br /&gt;
			    node = item_key&lt;br /&gt;
			    mode = 2&lt;br /&gt;
			elseif mode == 2 then&lt;br /&gt;
			    if mw.ustring.find(string.lower(item_key), &amp;quot;resource&amp;quot;) or string.lower(item_key) == &amp;quot;storm&amp;quot; then&lt;br /&gt;
			        local split = mw.ustring.find(item_key, '/')&lt;br /&gt;
			        if split then&lt;br /&gt;
			            tags[string.lower(mw.ustring.sub(item_key, 1, split - 1))] = true&lt;br /&gt;
			            item_key = mw.ustring.sub(item_key, split + 1)&lt;br /&gt;
			        end&lt;br /&gt;
			        tags[string.lower(item_key)] = true&lt;br /&gt;
			        mode = 3&lt;br /&gt;
			    elseif string.lower(item_key) == &amp;quot;empty&amp;quot; then&lt;br /&gt;
			        table.insert(self._items, node .. &amp;quot;/empty&amp;quot;)&lt;br /&gt;
			        mode = 1&lt;br /&gt;
			    elseif string.lower(item_key) == &amp;quot;select&amp;quot; then&lt;br /&gt;
			        table.insert(self._items, node .. &amp;quot;/select&amp;quot;)&lt;br /&gt;
			    else&lt;br /&gt;
			        while mw.ustring.find(item_key, '/') do&lt;br /&gt;
			            local split = mw.ustring.find(item_key, '/')&lt;br /&gt;
			            tags[string.lower(mw.ustring.sub(item_key, 1, split - 1))] = true&lt;br /&gt;
			            item_key = mw.ustring.sub(item_key, split + 1)&lt;br /&gt;
			        end&lt;br /&gt;
			        tags[string.lower(item_key)] = true&lt;br /&gt;
			        mode = 5&lt;br /&gt;
			    end&lt;br /&gt;
		    elseif mode == 3 then&lt;br /&gt;
		        resource = self:upcase(item_key)&lt;br /&gt;
		        mode = 4&lt;br /&gt;
		    elseif mode == 4 then&lt;br /&gt;
		        local amount = item_key&lt;br /&gt;
		        if tags[&amp;quot;storm&amp;quot;] and mw.ustring.sub(amount, 1, 1) ~= &amp;quot;-&amp;quot; then&lt;br /&gt;
		            amount = &amp;quot;-&amp;quot; .. amount&lt;br /&gt;
		        end&lt;br /&gt;
		        local boss = tags[&amp;quot;boss&amp;quot;] and &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot;&lt;br /&gt;
		        local string = node .. &amp;quot;/&amp;quot; .. resource .. &amp;quot;/&amp;quot; .. amount .. &amp;quot;/&amp;quot; .. boss&lt;br /&gt;
		        table.insert(self._items, string)&lt;br /&gt;
		        mode = 1&lt;br /&gt;
		    elseif mode == 5 then&lt;br /&gt;
		        formation = self:upcase(item_key)&lt;br /&gt;
		        mode = 6&lt;br /&gt;
		    else&lt;br /&gt;
		        --Fleets are of variable size, so we append onto a string until we hit the next node declaration&lt;br /&gt;
		        local split = mw.ustring.find(item_key, '/')&lt;br /&gt;
		        local ship_name, ship_suffix&lt;br /&gt;
		        if split then&lt;br /&gt;
		            ship_name = mw.ustring.sub(item_key, 1, split - 1)&lt;br /&gt;
		            ship_suffix = mw.ustring.sub(item_key, split + 1)&lt;br /&gt;
		        else&lt;br /&gt;
		            ship_name = item_key&lt;br /&gt;
		            ship_suffix = &amp;quot;&amp;quot;&lt;br /&gt;
		        end&lt;br /&gt;
		        local ship = EnemyShip(ship_name, ship_suffix)&lt;br /&gt;
		        &lt;br /&gt;
		        table.insert(fleet, ShipBattleCardKai:get{ship = ship, caption = ship:name(), link = ship:link(), flagship = #fleet == 0})&lt;br /&gt;
		        &lt;br /&gt;
		        if ship:air_power() then&lt;br /&gt;
		            as_rating = as_rating + ship:air_power()&lt;br /&gt;
		        end&lt;br /&gt;
            end&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    if mode == 6 then&lt;br /&gt;
        self:insert_item(node, formation, table.concat(fleet, &amp;quot; &amp;quot;), as_rating, tags)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:create_data_rows()&lt;br /&gt;
    for index, item in ipairs(self._items) do&lt;br /&gt;
		local row_values&lt;br /&gt;
		if type(item) == &amp;quot;string&amp;quot; then&lt;br /&gt;
			row_values = item&lt;br /&gt;
		else&lt;br /&gt;
			row_values = {}&lt;br /&gt;
			for _, column in ipairs(self._columns) do&lt;br /&gt;
				row_values[column] = self[column](self, item)&lt;br /&gt;
			end&lt;br /&gt;
			if index &amp;gt; 1 then&lt;br /&gt;
			    for _, column in ipairs(self._columns) do&lt;br /&gt;
			    	for i = index - 1, 1, -1 do&lt;br /&gt;
			    	    if column == &amp;quot;node&amp;quot; then&lt;br /&gt;
						    local previous_cell = self._data_rows[i][column]&lt;br /&gt;
    						if previous_cell then&lt;br /&gt;
	    					    if row_values[column].values.node == previous_cell.values.node then&lt;br /&gt;
		    				    	previous_cell.rowspan = previous_cell.rowspan and previous_cell.rowspan + 1 or 2&lt;br /&gt;
			    			    	row_values[column] = nil&lt;br /&gt;
				    		    else&lt;br /&gt;
					    	    	row_values[column].rowspan = 1&lt;br /&gt;
    					    		row_values[column].colspan = 1&lt;br /&gt;
    	    					end&lt;br /&gt;
	    	    				break&lt;br /&gt;
	    	    			end&lt;br /&gt;
		    			end&lt;br /&gt;
		            end&lt;br /&gt;
		        end&lt;br /&gt;
		    else&lt;br /&gt;
				for _, column in ipairs(self._columns) do&lt;br /&gt;
			    	row_values[column].rowspan = 1&lt;br /&gt;
			    	row_values[column].colspan = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(self._data_rows, row_values)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:process_resource_node(resource, amount)&lt;br /&gt;
    --Amount may or may not be just numbers&lt;br /&gt;
    local action, units, node_type, bg_color = &amp;quot;Gained&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;Resource&amp;quot;, self._resource_node_bg_color&lt;br /&gt;
    &lt;br /&gt;
    if mw.ustring.sub(amount, 1, 1) == &amp;quot;-&amp;quot; then&lt;br /&gt;
        action = &amp;quot;Lost&amp;quot;&lt;br /&gt;
        amount = mw.ustring.sub(amount, 2)&lt;br /&gt;
        node_type = &amp;quot;Storm&amp;quot;&lt;br /&gt;
        bg_color = self._maelstrom_node_bg_color&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if mw.ustring.find(amount, &amp;quot; &amp;quot;) then&lt;br /&gt;
        local split = mw.ustring.find(amount, &amp;quot; &amp;quot;)&lt;br /&gt;
        units = mw.ustring.sub(amount, split + 1)&lt;br /&gt;
        amount = mw.ustring.sub(amount, 1, split - 1)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local text = action .. &amp;quot; &amp;quot; .. amount .. &amp;quot; &amp;quot; .. resource .. &amp;quot; &amp;quot; .. units&lt;br /&gt;
    return text, node_type, bg_color&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:start_rows()&lt;br /&gt;
    self._rows = {}&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;toggle_id&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._collapser_template,&lt;br /&gt;
            toggle_id = self._args[&amp;quot;toggle_id&amp;quot;],&lt;br /&gt;
            button_display = self._args[&amp;quot;button_display&amp;quot;] or &amp;quot;Show/Hide Formation Table&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    table.insert(self._rows, self._header)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:build_rows()&lt;br /&gt;
    local bg_color&lt;br /&gt;
	for index, row_values in ipairs(self._data_rows) do&lt;br /&gt;
		if row_values ~= &amp;quot;break&amp;quot; then&lt;br /&gt;
			table.insert(self._rows, self._row_starter)&lt;br /&gt;
			if row_values == &amp;quot;header&amp;quot; then&lt;br /&gt;
				table.insert(self._rows, self._header)&lt;br /&gt;
			elseif type(row_values) == &amp;quot;table&amp;quot; then&lt;br /&gt;
			    if row_values[&amp;quot;node&amp;quot;] then&lt;br /&gt;
			        bg_color = row_values[&amp;quot;node&amp;quot;].bg_color&lt;br /&gt;
			    elseif bg_color == nil then&lt;br /&gt;
			        bg_color = &amp;quot;initial&amp;quot;&lt;br /&gt;
			    end&lt;br /&gt;
				for _, column in ipairs(self._columns) do&lt;br /&gt;
			        if row_values[column] then&lt;br /&gt;
				        row_values[column].bg_color = bg_color&lt;br /&gt;
				    end&lt;br /&gt;
					if row_values[column] then&lt;br /&gt;
						table.insert(self._rows, format(self._column_cell_templates[column] or self._cell, row_values[column]))&lt;br /&gt;
					end&lt;br /&gt;
			    end&lt;br /&gt;
    	elseif mw.ustring.find(row_values, '/') then&lt;br /&gt;
    	        --node/resource/amount/boss&lt;br /&gt;
    	        local values = {}&lt;br /&gt;
    	        while mw.ustring.find(row_values, '/') do&lt;br /&gt;
    	            local split = mw.ustring.find(row_values, '/')&lt;br /&gt;
    	            if split then&lt;br /&gt;
    	                table.insert(values, mw.ustring.sub(row_values, 1, split - 1))&lt;br /&gt;
    	                row_values = mw.ustring.sub(row_values, split + 1)&lt;br /&gt;
    	            end&lt;br /&gt;
	            end&lt;br /&gt;
	            table.insert(values, row_values)&lt;br /&gt;
	            if values[2] == &amp;quot;empty&amp;quot; then&lt;br /&gt;
	                table.insert(self._rows, format{self._empty_node_template, values = { node = values[1] } })&lt;br /&gt;
	            elseif values[2] == &amp;quot;select&amp;quot; then&lt;br /&gt;
	                table.insert(self._rows, format{self._selection_node_template, values = { node = values[1] } })&lt;br /&gt;
    	        else&lt;br /&gt;
	                local resource = Formatting:format_image{values[2] .. &amp;quot;.png&amp;quot;, caption = self:upcase(values[2]), size = &amp;quot;22x22px&amp;quot;}&lt;br /&gt;
	                local text, node_type, bg_color = self:process_resource_node(resource, values[3])&lt;br /&gt;
	                local color = &amp;quot;initial&amp;quot;&lt;br /&gt;
	                if values[4] == &amp;quot;true&amp;quot; then&lt;br /&gt;
	                    color = self._boss_battle_color&lt;br /&gt;
	                end&lt;br /&gt;
    	            table.insert(self._rows, format{self._resource_node_template, values = {&lt;br /&gt;
    	                node = values[1],&lt;br /&gt;
    	                text = text,&lt;br /&gt;
    	                node_type = node_type,&lt;br /&gt;
    	                color = color,&lt;br /&gt;
    	                bg_color = bg_color,&lt;br /&gt;
    	            }})&lt;br /&gt;
	            end&lt;br /&gt;
		    end&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NodeInfo:finish_rows()&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
	table.insert(self._rows, self._header_bottom or self._header)&lt;br /&gt;
	table.insert(self._rows, self._table_end)&lt;br /&gt;
	&lt;br /&gt;
	if self._args[&amp;quot;toggle_id&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, self._collapser_end)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NodeInfo&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Light_Cruiser_Princess&amp;diff=107527</id>
		<title>Light Cruiser Princess</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Light_Cruiser_Princess&amp;diff=107527"/>
		<updated>2015-11-18T22:30:12Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: /* Quotes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Info==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
===Basic===&lt;br /&gt;
{{EnemyShipInfoKai|Light Cruiser Princess/|los=auto|los_max=auto|evasion=auto|evasion_max=auto|asw=auto|asw_max=auto}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Basic II===&lt;br /&gt;
{{EnemyShipInfoKai|Light Cruiser Princess/II|los=auto|los_max=auto|evasion=auto|evasion_max=auto|asw=auto|asw_max=auto}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
===Basic III===&lt;br /&gt;
{{EnemyShipInfoKai|Light Cruiser Princess/III|los=auto|los_max=auto|evasion=auto|evasion_max=auto|asw=auto|asw_max=auto}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{EnemyShipCategoriesKai|Light Cruiser Princess/}}&lt;br /&gt;
&lt;br /&gt;
==Quotes==&lt;br /&gt;
{{Abyssquote&lt;br /&gt;
| 開幕前 =アナタノ…カエリミチハ…ナイノ……。（ヘッヘッヘッ）　モウ…ナイノヨォ……！ &lt;br /&gt;
| EN1 = There is...no way back...for you...... (Hehehe) It's already...gone......!&lt;br /&gt;
| Note1 = &lt;br /&gt;
| 砲撃 =コナクテイイノニ…ナンデクルノォ…？ &lt;br /&gt;
| EN0 = You don't have to come... Why are you coming...?&lt;br /&gt;
| Note0 = &lt;br /&gt;
| 被弾 =?????   ニクラシヤ… &lt;br /&gt;
| EN2 =???  Thou shalt be avenged... &lt;br /&gt;
| Note2 = &lt;br /&gt;
| 昼戦終了時 = &lt;br /&gt;
| EN3 = &lt;br /&gt;
| Note3 = &lt;br /&gt;
|Clip1 = &lt;br /&gt;
|Clip0 = &lt;br /&gt;
|Clip2 =&lt;br /&gt;
|Clip3 =}}&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Character ==&lt;br /&gt;
&amp;lt;!--* '''[[Glossary#List of Vessels by Japanese Voice Actresses|Seiyuu]]''': Ishigami Shizuka ?--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
* [[Fall 2015 Event]] E-2 Boss&lt;br /&gt;
&lt;br /&gt;
{{Enemyshiplist}}&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122180</id>
		<title>Module:EventComp</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122180"/>
		<updated>2015-08-10T06:58:55Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local BaseTable = require('Module:BaseTable')&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local EventComp = {&lt;br /&gt;
    _item_class = Ship,&lt;br /&gt;
    _equip_class = Equipment,&lt;br /&gt;
    _table_start = [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]],&lt;br /&gt;
    _header_template = [[]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        ship = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;border-bottom: 1px solid grey;&amp;quot; |${values.ship}]],&lt;br /&gt;
        level = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;width: 100px; text-align: center; border-bottom: 1px solid grey;&amp;quot; |${values.level}]],&lt;br /&gt;
        equipment = [[| style=&amp;quot;${style}&amp;quot; |${equip_name}]],&lt;br /&gt;
    },&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;ship&amp;quot;,&lt;br /&gt;
        &amp;quot;level&amp;quot;,&lt;br /&gt;
        &amp;quot;equipment&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    _blank_battle_card = &amp;quot;Empty card.png&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function EventComp:ship(entry)&lt;br /&gt;
    return { values = { ship = Formatting:format_image{entry.ship:battle_card() or self._blank_battle_card, link = entry.ship:link(), caption = entry.ship:name() } }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:level(entry)&lt;br /&gt;
    return { values = { level = entry.level }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:equipment(entry)&lt;br /&gt;
    return entry.equips&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_hq_level()&lt;br /&gt;
    local bracket = tonumber(self._args['hq'] or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    self._elos = -(bracket * 0.61)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_equipment(equip, planes)&lt;br /&gt;
    --Fighter power&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        self._fighter_power = self._fighter_power + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    --Effective Line of Sight&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_items()&lt;br /&gt;
    local entry = {&lt;br /&gt;
        ship = nil,&lt;br /&gt;
        level = nil,&lt;br /&gt;
        equips = {},&lt;br /&gt;
    }&lt;br /&gt;
    for index, item_key in ipairs(self._args) do&lt;br /&gt;
        if index == #self._args then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
        elseif item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            &lt;br /&gt;
            entry = {&lt;br /&gt;
                ship = nil,&lt;br /&gt;
                level = nil,&lt;br /&gt;
                equips = {},&lt;br /&gt;
            }&lt;br /&gt;
        elseif entry.ship and entry.level then&lt;br /&gt;
            local equip = self._equip_class(item_key)&lt;br /&gt;
            table.insert(entry.equips, equip)&lt;br /&gt;
            self:process_equipment(equip, select(2, entry.ship:slot(#entry.equips)))&lt;br /&gt;
        elseif entry.ship then&lt;br /&gt;
            entry.level = tonumber(item_key)&lt;br /&gt;
            &lt;br /&gt;
            --Perform eLoS calculation&lt;br /&gt;
            local los = entry.ship:los() or 0&lt;br /&gt;
            local los_max = entry.ship:los_max() or los&lt;br /&gt;
            los = math.floor(los + ((los_max - los) * entry.level / 99))&lt;br /&gt;
            self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
        else&lt;br /&gt;
            entry.ship = self._item_class(item_key)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_data_rows()&lt;br /&gt;
    for _, item in ipairs(self._items) do&lt;br /&gt;
        local row_values = {}&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            row_values[column] = self[column](self, item)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._data_rows, row_values)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_rows()&lt;br /&gt;
    for _, row_values in ipairs(self._data_rows) do&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            if column == &amp;quot;equipment&amp;quot; then&lt;br /&gt;
                for index, equip in ipairs(row_values[column]) do&lt;br /&gt;
                    local values = { equip_name = Formatting:format_link(equip:link()), style = &amp;quot;&amp;quot; }&lt;br /&gt;
                    if index == #row_values[column] then values.style = &amp;quot;border-bottom: 1px solid grey;&amp;quot; end&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;| style=\&amp;quot;&amp;quot; .. values.style .. &amp;quot;\&amp;quot; |&amp;quot; .. Formatting:format_image{Formatting:format_equipment_icon(equip:icon()), size = '20px'})&lt;br /&gt;
                    table.insert(self._rows, format(self._column_cell_templates[column], values))&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;|-&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, format(self._column_cell_templates[column], row_values[column]))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--If this isn't separate, &amp;quot;frame&amp;quot; is nil and gives an error when testing with the debug console&lt;br /&gt;
function EventComp:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    self._items = {}&lt;br /&gt;
    self._data_rows = {}&lt;br /&gt;
    self._rows = { [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]] }&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    &lt;br /&gt;
    self:build_items()&lt;br /&gt;
    self:build_data_rows()&lt;br /&gt;
    self:build_rows()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;|}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, &amp;quot;HQ level: &amp;quot; .. self._args['hq'] .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;Fighter Power: &amp;quot; .. self._fighter_power .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;eLoS: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, self._elos))&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(self._rows, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp.Build(frame)&lt;br /&gt;
    local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
    return EventComp:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return EventComp&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122179</id>
		<title>Module:EventComp</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122179"/>
		<updated>2015-08-10T06:58:12Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local BaseTable = require('Module:BaseTable')&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local EventComp = {&lt;br /&gt;
    _item_class = Ship,&lt;br /&gt;
    _equip_class = Equipment,&lt;br /&gt;
    _table_start = [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]],&lt;br /&gt;
    _header_template = [[]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        ship = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;border-bottom: 1px solid grey;&amp;quot; |${values.ship}]],&lt;br /&gt;
        level = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;width: 100px; text-align: center; border-bottom: 1px solid grey;&amp;quot; |${values.level}]],&lt;br /&gt;
        equipment = [[| style=&amp;quot;${style}&amp;quot; |${equip_name}]],&lt;br /&gt;
    },&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;ship&amp;quot;,&lt;br /&gt;
        &amp;quot;level&amp;quot;,&lt;br /&gt;
        &amp;quot;equipment&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    _blank_battle_card = &amp;quot;Empty card.png&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function EventComp:ship(entry)&lt;br /&gt;
    return { values = { ship = Formatting:format_image{entry.ship:battle_card() or self._blank_battle_card, link = entry.ship:link(), caption = entry.ship:name() } }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:level(entry)&lt;br /&gt;
    return { values = { level = entry.level }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:equipment(entry)&lt;br /&gt;
    return entry.equips&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_hq_level()&lt;br /&gt;
    local bracket = tonumber(self._args['hq'] or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    self._elos = -(bracket * 0.61)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_equipment(equip, slot)&lt;br /&gt;
    --Fighter power&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        self._fighter_power = self._fighter_power + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    --Effective Line of Sight&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_items()&lt;br /&gt;
    local entry = {&lt;br /&gt;
        ship = nil,&lt;br /&gt;
        level = nil,&lt;br /&gt;
        equips = {},&lt;br /&gt;
    }&lt;br /&gt;
    for index, item_key in ipairs(self._args) do&lt;br /&gt;
        if index == #self._args then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
        elseif item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            &lt;br /&gt;
            entry = {&lt;br /&gt;
                ship = nil,&lt;br /&gt;
                level = nil,&lt;br /&gt;
                equips = {},&lt;br /&gt;
            }&lt;br /&gt;
        elseif entry.ship and entry.level then&lt;br /&gt;
            local equip = self._equip_class(item_key)&lt;br /&gt;
            table.insert(entry.equips, equip)&lt;br /&gt;
            self:process_equipment(equip, select(2, entry.ship:slot(#entry.equips)))&lt;br /&gt;
        elseif entry.ship then&lt;br /&gt;
            entry.level = tonumber(item_key)&lt;br /&gt;
            &lt;br /&gt;
            --Perform eLoS calculation&lt;br /&gt;
            local los = entry.ship:los() or 0&lt;br /&gt;
            local los_max = entry.ship:los_max() or los&lt;br /&gt;
            los = math.floor(los + ((los_max - los) * entry.level / 99))&lt;br /&gt;
            self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
        else&lt;br /&gt;
            entry.ship = self._item_class(item_key)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_data_rows()&lt;br /&gt;
    for _, item in ipairs(self._items) do&lt;br /&gt;
        local row_values = {}&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            row_values[column] = self[column](self, item)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._data_rows, row_values)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_rows()&lt;br /&gt;
    for _, row_values in ipairs(self._data_rows) do&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            if column == &amp;quot;equipment&amp;quot; then&lt;br /&gt;
                for index, equip in ipairs(row_values[column]) do&lt;br /&gt;
                    local values = { equip_name = Formatting:format_link(equip:link()), style = &amp;quot;&amp;quot; }&lt;br /&gt;
                    if index == #row_values[column] then values.style = &amp;quot;border-bottom: 1px solid grey;&amp;quot; end&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;| style=\&amp;quot;&amp;quot; .. values.style .. &amp;quot;\&amp;quot; |&amp;quot; .. Formatting:format_image{Formatting:format_equipment_icon(equip:icon()), size = '20px'})&lt;br /&gt;
                    table.insert(self._rows, format(self._column_cell_templates[column], values))&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;|-&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, format(self._column_cell_templates[column], row_values[column]))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--If this isn't separate, &amp;quot;frame&amp;quot; is nil and gives an error when testing with the debug console&lt;br /&gt;
function EventComp:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    self._items = {}&lt;br /&gt;
    self._data_rows = {}&lt;br /&gt;
    self._rows = { [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]] }&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    &lt;br /&gt;
    self:build_items()&lt;br /&gt;
    self:build_data_rows()&lt;br /&gt;
    self:build_rows()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;|}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, &amp;quot;HQ level: &amp;quot; .. self._args['hq'] .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;Fighter Power: &amp;quot; .. self._fighter_power .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;eLoS: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, self._elos))&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(self._rows, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp.Build(frame)&lt;br /&gt;
    local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
    return EventComp:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return EventComp&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122178</id>
		<title>Module:EventComp</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122178"/>
		<updated>2015-08-10T06:57:23Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local BaseTable = require('Module:BaseTable')&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local EventComp = {&lt;br /&gt;
    _item_class = Ship,&lt;br /&gt;
    _equip_class = Equipment,&lt;br /&gt;
    _table_start = [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]],&lt;br /&gt;
    _header_template = [[]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        ship = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;border-bottom: 1px solid grey;&amp;quot; |${values.ship}]],&lt;br /&gt;
        level = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;width: 100px; text-align: center; border-bottom: 1px solid grey;&amp;quot; |${values.level}]],&lt;br /&gt;
        equipment = [[| style=&amp;quot;${style}&amp;quot; |${equip_name}]],&lt;br /&gt;
    },&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;ship&amp;quot;,&lt;br /&gt;
        &amp;quot;level&amp;quot;,&lt;br /&gt;
        &amp;quot;equipment&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    _blank_battle_card = &amp;quot;Empty card.png&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function EventComp:ship(entry)&lt;br /&gt;
    return { values = { ship = Formatting:format_image{entry.ship:battle_card() or self._blank_battle_card, link = entry.ship:link(), caption = entry.ship:name() } }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:level(entry)&lt;br /&gt;
    return { values = { level = entry.level }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:equipment(entry)&lt;br /&gt;
    return entry.equips&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_hq_level()&lt;br /&gt;
    local bracket = tonumber(self._args['hq'] or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    self._elos = -(bracket * 0.61)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_equipment(ship, equip, slot)&lt;br /&gt;
    --Fighter power&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        self._fighter_power = self._fighter_power + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    --Effective Line of Sight&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_items()&lt;br /&gt;
    local entry = {&lt;br /&gt;
        ship = nil,&lt;br /&gt;
        level = nil,&lt;br /&gt;
        equips = {},&lt;br /&gt;
    }&lt;br /&gt;
    for index, item_key in ipairs(self._args) do&lt;br /&gt;
        if index == #self._args then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
        elseif item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            &lt;br /&gt;
            entry = {&lt;br /&gt;
                ship = nil,&lt;br /&gt;
                level = nil,&lt;br /&gt;
                equips = {},&lt;br /&gt;
            }&lt;br /&gt;
        elseif entry.ship and entry.level then&lt;br /&gt;
            local equip = self._equip_class(item_key)&lt;br /&gt;
            table.insert(entry.equips, equip)&lt;br /&gt;
            self:process_equipment(equip, select(2, entry.ship:slot(#entry.equips)))&lt;br /&gt;
        elseif entry.ship then&lt;br /&gt;
            entry.level = tonumber(item_key)&lt;br /&gt;
            &lt;br /&gt;
            --Perform eLoS calculation&lt;br /&gt;
            local los = entry.ship:los() or 0&lt;br /&gt;
            local los_max = entry.ship:los_max() or los&lt;br /&gt;
            los = math.floor(los + ((los_max - los) * entry.level / 99))&lt;br /&gt;
            self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
        else&lt;br /&gt;
            entry.ship = self._item_class(item_key)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_data_rows()&lt;br /&gt;
    for _, item in ipairs(self._items) do&lt;br /&gt;
        local row_values = {}&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            row_values[column] = self[column](self, item)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._data_rows, row_values)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_rows()&lt;br /&gt;
    for _, row_values in ipairs(self._data_rows) do&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            if column == &amp;quot;equipment&amp;quot; then&lt;br /&gt;
                for index, equip in ipairs(row_values[column]) do&lt;br /&gt;
                    local values = { equip_name = Formatting:format_link(equip:link()), style = &amp;quot;&amp;quot; }&lt;br /&gt;
                    if index == #row_values[column] then values.style = &amp;quot;border-bottom: 1px solid grey;&amp;quot; end&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;| style=\&amp;quot;&amp;quot; .. values.style .. &amp;quot;\&amp;quot; |&amp;quot; .. Formatting:format_image{Formatting:format_equipment_icon(equip:icon()), size = '20px'})&lt;br /&gt;
                    table.insert(self._rows, format(self._column_cell_templates[column], values))&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;|-&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, format(self._column_cell_templates[column], row_values[column]))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--If this isn't separate, &amp;quot;frame&amp;quot; is nil and gives an error when testing with the debug console&lt;br /&gt;
function EventComp:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    self._items = {}&lt;br /&gt;
    self._data_rows = {}&lt;br /&gt;
    self._rows = { [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]] }&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    &lt;br /&gt;
    self:build_items()&lt;br /&gt;
    self:build_data_rows()&lt;br /&gt;
    self:build_rows()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;|}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, &amp;quot;HQ level: &amp;quot; .. self._args['hq'] .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;Fighter Power: &amp;quot; .. self._fighter_power .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;eLoS: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, self._elos))&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(self._rows, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp.Build(frame)&lt;br /&gt;
    local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
    return EventComp:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return EventComp&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122177</id>
		<title>Module:EventComp</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122177"/>
		<updated>2015-08-10T06:56:51Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local BaseTable = require('Module:BaseTable')&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local EventComp = {&lt;br /&gt;
    _item_class = Ship,&lt;br /&gt;
    _equip_class = Equipment,&lt;br /&gt;
    _table_start = [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]],&lt;br /&gt;
    _header_template = [[]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        ship = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;border-bottom: 1px solid grey;&amp;quot; |${values.ship}]],&lt;br /&gt;
        level = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;width: 100px; text-align: center; border-bottom: 1px solid grey;&amp;quot; |${values.level}]],&lt;br /&gt;
        equipment = [[| style=&amp;quot;${style}&amp;quot; |${equip_name}]],&lt;br /&gt;
    },&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;ship&amp;quot;,&lt;br /&gt;
        &amp;quot;level&amp;quot;,&lt;br /&gt;
        &amp;quot;equipment&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    _blank_battle_card = &amp;quot;Empty card.png&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function EventComp:ship(entry)&lt;br /&gt;
    return { values = { ship = Formatting:format_image{entry.ship:battle_card() or self._blank_battle_card, link = entry.ship:link(), caption = entry.ship:name() } }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:level(entry)&lt;br /&gt;
    return { values = { level = entry.level }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:equipment(entry)&lt;br /&gt;
    return entry.equips&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_hq_level()&lt;br /&gt;
    local bracket = tonumber(self._args['hq'] or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    self._elos = -(bracket * 0.61)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_equipment(ship, equip, slot)&lt;br /&gt;
    --Fighter power&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        self._fighter_power = self._fighter_power + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    --Effective Line of Sight&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_items()&lt;br /&gt;
    local entry = {&lt;br /&gt;
        ship = nil,&lt;br /&gt;
        level = nil,&lt;br /&gt;
        equips = {},&lt;br /&gt;
    }&lt;br /&gt;
    for index, item_key in ipairs(self._args) do&lt;br /&gt;
        if index == #self._args then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
        elseif item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            &lt;br /&gt;
            entry = {&lt;br /&gt;
                ship = nil,&lt;br /&gt;
                level = nil,&lt;br /&gt;
                equips = {},&lt;br /&gt;
            }&lt;br /&gt;
        elseif entry.ship and entry.level then&lt;br /&gt;
            local equip = self._equip_class(item_key)&lt;br /&gt;
            table.insert(entry.equips, equip)&lt;br /&gt;
            self:process_equipment(equip, select(2, ship:slot(#entry.equips)))&lt;br /&gt;
        elseif entry.ship then&lt;br /&gt;
            entry.level = tonumber(item_key)&lt;br /&gt;
            &lt;br /&gt;
            --Perform eLoS calculation&lt;br /&gt;
            local los = entry.ship:los() or 0&lt;br /&gt;
            local los_max = entry.ship:los_max() or los&lt;br /&gt;
            los = math.floor(los + ((los_max - los) * entry.level / 99))&lt;br /&gt;
            self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
        else&lt;br /&gt;
            entry.ship = self._item_class(item_key)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_data_rows()&lt;br /&gt;
    for _, item in ipairs(self._items) do&lt;br /&gt;
        local row_values = {}&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            row_values[column] = self[column](self, item)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._data_rows, row_values)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_rows()&lt;br /&gt;
    for _, row_values in ipairs(self._data_rows) do&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            if column == &amp;quot;equipment&amp;quot; then&lt;br /&gt;
                for index, equip in ipairs(row_values[column]) do&lt;br /&gt;
                    local values = { equip_name = Formatting:format_link(equip:link()), style = &amp;quot;&amp;quot; }&lt;br /&gt;
                    if index == #row_values[column] then values.style = &amp;quot;border-bottom: 1px solid grey;&amp;quot; end&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;| style=\&amp;quot;&amp;quot; .. values.style .. &amp;quot;\&amp;quot; |&amp;quot; .. Formatting:format_image{Formatting:format_equipment_icon(equip:icon()), size = '20px'})&lt;br /&gt;
                    table.insert(self._rows, format(self._column_cell_templates[column], values))&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;|-&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, format(self._column_cell_templates[column], row_values[column]))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--If this isn't separate, &amp;quot;frame&amp;quot; is nil and gives an error when testing with the debug console&lt;br /&gt;
function EventComp:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    self._items = {}&lt;br /&gt;
    self._data_rows = {}&lt;br /&gt;
    self._rows = { [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]] }&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    &lt;br /&gt;
    self:build_items()&lt;br /&gt;
    self:build_data_rows()&lt;br /&gt;
    self:build_rows()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;|}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, &amp;quot;HQ level: &amp;quot; .. self._args['hq'] .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;Fighter Power: &amp;quot; .. self._fighter_power .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;eLoS: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, self._elos))&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(self._rows, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp.Build(frame)&lt;br /&gt;
    local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
    return EventComp:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return EventComp&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122176</id>
		<title>Module:EventComp</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122176"/>
		<updated>2015-08-10T05:00:32Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local BaseTable = require('Module:BaseTable')&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local EventComp = {&lt;br /&gt;
    _item_class = Ship,&lt;br /&gt;
    _equip_class = Equipment,&lt;br /&gt;
    _table_start = [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]],&lt;br /&gt;
    _header_template = [[]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        ship = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;border-bottom: 1px solid grey;&amp;quot; |${values.ship}]],&lt;br /&gt;
        level = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;width: 100px; text-align: center; border-bottom: 1px solid grey;&amp;quot; |${values.level}]],&lt;br /&gt;
        equipment = [[| style=&amp;quot;${style}&amp;quot; |${equip_name}]],&lt;br /&gt;
    },&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;ship&amp;quot;,&lt;br /&gt;
        &amp;quot;level&amp;quot;,&lt;br /&gt;
        &amp;quot;equipment&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    _blank_battle_card = &amp;quot;Empty card.png&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function EventComp:ship(entry)&lt;br /&gt;
    return { values = { ship = Formatting:format_image{entry.ship:battle_card() or self._blank_battle_card, link = entry.ship:link(), caption = entry.ship:name() } }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:level(entry)&lt;br /&gt;
    return { values = { level = entry.level }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:equipment(entry)&lt;br /&gt;
    return entry.equips&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_hq_level()&lt;br /&gt;
    local bracket = tonumber(self._args['hq'] or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    self._elos = -(bracket * 0.61)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_equipment(equip)&lt;br /&gt;
    --Fighter power&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        self._fighter_power = self._fighter_power + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    --Effective Line of Sight&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_items()&lt;br /&gt;
    local entry = {&lt;br /&gt;
        ship = nil,&lt;br /&gt;
        level = nil,&lt;br /&gt;
        equips = {},&lt;br /&gt;
    }&lt;br /&gt;
    for index, item_key in ipairs(self._args) do&lt;br /&gt;
        if index == #self._args then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
        elseif item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            &lt;br /&gt;
            entry = {&lt;br /&gt;
                ship = nil,&lt;br /&gt;
                level = nil,&lt;br /&gt;
                equips = {},&lt;br /&gt;
            }&lt;br /&gt;
        elseif entry.ship and entry.level then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
        elseif entry.ship then&lt;br /&gt;
            entry.level = tonumber(item_key)&lt;br /&gt;
            &lt;br /&gt;
            --Perform eLoS calculation&lt;br /&gt;
            local los = entry.ship:los() or 0&lt;br /&gt;
            local los_max = entry.ship:los_max() or los&lt;br /&gt;
            los = math.floor(los + ((los_max - los) * entry.level / 99))&lt;br /&gt;
            self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
        else&lt;br /&gt;
            entry.ship = self._item_class(item_key)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_data_rows()&lt;br /&gt;
    for _, item in ipairs(self._items) do&lt;br /&gt;
        local row_values = {}&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            row_values[column] = self[column](self, item)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._data_rows, row_values)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_rows()&lt;br /&gt;
    for _, row_values in ipairs(self._data_rows) do&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            if column == &amp;quot;equipment&amp;quot; then&lt;br /&gt;
                for index, equip in ipairs(row_values[column]) do&lt;br /&gt;
                    self:process_equipment(equip)&lt;br /&gt;
                    local values = { equip_name = Formatting:format_link(equip:link()), style = &amp;quot;&amp;quot; }&lt;br /&gt;
                    if index == #row_values[column] then values.style = &amp;quot;border-bottom: 1px solid grey;&amp;quot; end&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;| style=\&amp;quot;&amp;quot; .. values.style .. &amp;quot;\&amp;quot; |&amp;quot; .. Formatting:format_image{Formatting:format_equipment_icon(equip:icon()), size = '20px'})&lt;br /&gt;
                    table.insert(self._rows, format(self._column_cell_templates[column], values))&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;|-&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, format(self._column_cell_templates[column], row_values[column]))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--If this isn't separate, &amp;quot;frame&amp;quot; is nil and gives an error when testing with the debug console&lt;br /&gt;
function EventComp:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    self._items = {}&lt;br /&gt;
    self._data_rows = {}&lt;br /&gt;
    self._rows = { [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]] }&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    &lt;br /&gt;
    self:build_items()&lt;br /&gt;
    self:build_data_rows()&lt;br /&gt;
    self:build_rows()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;|}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, &amp;quot;HQ level: &amp;quot; .. self._args['hq'] .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;Fighter Power: &amp;quot; .. self._fighter_power .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;eLoS: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, self._elos))&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(self._rows, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp.Build(frame)&lt;br /&gt;
    local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
    return EventComp:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return EventComp&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122175</id>
		<title>Module:EventComp</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122175"/>
		<updated>2015-08-10T04:35:39Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: Undo revision 404945 by Nanamin (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local BaseTable = require('Module:BaseTable')&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local EventComp = {&lt;br /&gt;
    _item_class = Ship,&lt;br /&gt;
    _equip_class = Equipment,&lt;br /&gt;
    _table_start = [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]],&lt;br /&gt;
    _header_template = [[]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        ship = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;border-bottom: 1px solid grey;&amp;quot; |${values.ship}]],&lt;br /&gt;
        level = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;width: 100px; text-align: center; border-bottom: 1px solid grey;&amp;quot; |${values.level}]],&lt;br /&gt;
        equipment = [[| style=&amp;quot;${style}&amp;quot; |${equip_name}]],&lt;br /&gt;
    },&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;ship&amp;quot;,&lt;br /&gt;
        &amp;quot;level&amp;quot;,&lt;br /&gt;
        &amp;quot;equipment&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    _blank_battle_card = &amp;quot;Empty card.png&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function EventComp:ship(entry)&lt;br /&gt;
    return { values = { ship = Formatting:format_image{entry.ship:battle_card() or self._blank_battle_card, link = entry.ship:link(), caption = entry.ship:name() } }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:level(entry)&lt;br /&gt;
    return { values = { level = entry.level }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:equipment(entry)&lt;br /&gt;
    return entry.equips&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_hq_level()&lt;br /&gt;
    local bracket = tonumber(self._args['hq'] or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    self._elos = -(bracket * 0.61)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_equipment(equip)&lt;br /&gt;
    --Fighter power&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        self._fighter_power = self._fighter_power + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    --Effective Line of Sight&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_items()&lt;br /&gt;
    local entry = {&lt;br /&gt;
        ship = nil,&lt;br /&gt;
        level = nil,&lt;br /&gt;
        equips = {},&lt;br /&gt;
    }&lt;br /&gt;
    for index, item_key in ipairs(self._args) do&lt;br /&gt;
        if index == #self._args then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
        elseif item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            &lt;br /&gt;
            entry = {&lt;br /&gt;
                ship = nil,&lt;br /&gt;
                level = nil,&lt;br /&gt;
                equips = {},&lt;br /&gt;
            }&lt;br /&gt;
        elseif entry.ship and entry.level then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
        elseif entry.ship then&lt;br /&gt;
            entry.level = tonumber(item_key)&lt;br /&gt;
            &lt;br /&gt;
            --Perform eLoS calculation&lt;br /&gt;
            local los = entry.ship:los() or 0&lt;br /&gt;
            local los_max = entry.ship:los_max() or los&lt;br /&gt;
            los = math.floor(los + ((los_max - los) * entry.level / 99))&lt;br /&gt;
            self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
        else&lt;br /&gt;
            entry.ship = self._item_class(item_key)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_data_rows()&lt;br /&gt;
    for _, item in ipairs(self._items) do&lt;br /&gt;
        local row_values = {}&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            row_values[column] = self[column](self, item)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._data_rows, row_values)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_rows()&lt;br /&gt;
    for _, row_values in ipairs(self._data_rows) do&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            if column == &amp;quot;equipment&amp;quot; then&lt;br /&gt;
                for index, equip in ipairs(row_values[column]) do&lt;br /&gt;
                    self:process_equipment(equip)&lt;br /&gt;
                    local values = { equip_name = Formatting:format_link(equip:link()), style = &amp;quot;&amp;quot; }&lt;br /&gt;
                    if index == #row_values[column] then values.style = &amp;quot;border-bottom: 1px solid grey;&amp;quot; end&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;| style=\&amp;quot;&amp;quot; .. values.style .. &amp;quot;\&amp;quot; |&amp;quot; .. Formatting:format_image{Formatting:format_equipment_icon(equip:icon())})&lt;br /&gt;
                    table.insert(self._rows, format(self._column_cell_templates[column], values))&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;|-&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, format(self._column_cell_templates[column], row_values[column]))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--If this isn't separate, &amp;quot;frame&amp;quot; is nil and gives an error when testing with the debug console&lt;br /&gt;
function EventComp:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    self._items = {}&lt;br /&gt;
    self._data_rows = {}&lt;br /&gt;
    self._rows = { [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]] }&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    &lt;br /&gt;
    self:build_items()&lt;br /&gt;
    self:build_data_rows()&lt;br /&gt;
    self:build_rows()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;|}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, &amp;quot;HQ level: &amp;quot; .. self._args['hq'] .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;Fighter Power: &amp;quot; .. self._fighter_power .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;eLoS: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, self._elos))&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(self._rows, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp.Build(frame)&lt;br /&gt;
    local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
    return EventComp:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return EventComp&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122174</id>
		<title>Module:EventComp</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122174"/>
		<updated>2015-08-10T04:34:53Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: Undo revision 404947 by Nanamin (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local BaseTable = require('Module:BaseTable')&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local EventComp = {&lt;br /&gt;
    _item_class = Ship,&lt;br /&gt;
    _equip_class = Equipment,&lt;br /&gt;
    _table_start = [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]],&lt;br /&gt;
    _header_template = [[]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        ship = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;border-bottom: 1px solid grey;&amp;quot; |${values.ship}]],&lt;br /&gt;
        level = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;width: 100px; text-align: center; border-bottom: 1px solid grey;&amp;quot; |${values.level}]],&lt;br /&gt;
        equipment = [[| style=&amp;quot;${style}&amp;quot; |${equip_name}]],&lt;br /&gt;
    },&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;ship&amp;quot;,&lt;br /&gt;
        &amp;quot;level&amp;quot;,&lt;br /&gt;
        &amp;quot;equipment&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    _blank_battle_card = &amp;quot;Empty card.png&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function EventComp:ship(entry)&lt;br /&gt;
    return { values = { ship = Formatting:format_image{entry.ship:battle_card() or self._blank_battle_card, link = entry.ship:link(), caption = entry.ship:name() } }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:level(entry)&lt;br /&gt;
    return { values = { level = entry.level }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:equipment(entry)&lt;br /&gt;
    return entry.equips&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_hq_level()&lt;br /&gt;
    local bracket = tonumber(self._args['hq'] or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    self._elos = -(bracket * 0.61)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_equipment(equip)&lt;br /&gt;
    --Fighter power&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        self._fighter_power = self._fighter_power + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    --Effective Line of Sight&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_items()&lt;br /&gt;
    local entry = {&lt;br /&gt;
        ship = nil,&lt;br /&gt;
        level = nil,&lt;br /&gt;
        equips = {},&lt;br /&gt;
    }&lt;br /&gt;
    for index, item_key in ipairs(self._args) do&lt;br /&gt;
        if item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            &lt;br /&gt;
            entry = {&lt;br /&gt;
                ship = nil,&lt;br /&gt;
                level = nil,&lt;br /&gt;
                equips = {},&lt;br /&gt;
            }&lt;br /&gt;
        elseif entry.ship and entry.level then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
        elseif entry.ship then&lt;br /&gt;
            entry.level = tonumber(item_key)&lt;br /&gt;
            &lt;br /&gt;
            --Perform eLoS calculation&lt;br /&gt;
            local los = entry.ship:los() or 0&lt;br /&gt;
            local los_max = entry.ship:los_max() or los&lt;br /&gt;
            los = math.floor(los + ((los_max - los) * entry.level / 99))&lt;br /&gt;
            self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
        else&lt;br /&gt;
            entry.ship = self._item_class(item_key)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
    table.insert(self._items, entry)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_data_rows()&lt;br /&gt;
    for _, item in ipairs(self._items) do&lt;br /&gt;
        local row_values = {}&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            row_values[column] = self[column](self, item)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._data_rows, row_values)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_rows()&lt;br /&gt;
    for _, row_values in ipairs(self._data_rows) do&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            if column == &amp;quot;equipment&amp;quot; then&lt;br /&gt;
                for index, equip in ipairs(row_values[column]) do&lt;br /&gt;
                    self:process_equipment(equip)&lt;br /&gt;
                    local values = { equip_name = Formatting:format_link(equip:link()), style = &amp;quot;&amp;quot; }&lt;br /&gt;
                    if index == #row_values[column] then values.style = &amp;quot;border-bottom: 1px solid grey;&amp;quot; end&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;| style=\&amp;quot;&amp;quot; .. values.style .. &amp;quot;\&amp;quot; |&amp;quot; .. Formatting:format_image{Formatting:format_equipment_icon(equip:icon())})&lt;br /&gt;
                    table.insert(self._rows, format(self._column_cell_templates[column], values))&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;|-&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, format(self._column_cell_templates[column], row_values[column]))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--If this isn't separate, &amp;quot;frame&amp;quot; is nil and gives an error when testing with the debug console&lt;br /&gt;
function EventComp:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    self._items = {}&lt;br /&gt;
    self._data_rows = {}&lt;br /&gt;
    self._rows = { [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]] }&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    &lt;br /&gt;
    self:build_items()&lt;br /&gt;
    self:build_data_rows()&lt;br /&gt;
    self:build_rows()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;|}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, &amp;quot;HQ level: &amp;quot; .. self._args['hq'] .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;Fighter Power: &amp;quot; .. self._fighter_power .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;eLoS: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, self._elos))&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(self._rows, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp.Build(frame)&lt;br /&gt;
    local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
    return EventComp:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return EventComp&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122173</id>
		<title>Module:EventComp</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122173"/>
		<updated>2015-08-10T04:34:40Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: Undo revision 404950 by Nanamin (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local BaseTable = require('Module:BaseTable')&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local EventComp = {&lt;br /&gt;
    _item_class = Ship,&lt;br /&gt;
    _equip_class = Equipment,&lt;br /&gt;
    _table_start = [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]],&lt;br /&gt;
    _header_template = [[]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        ship = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;border-bottom: 1px solid grey;&amp;quot; |${values.ship}]],&lt;br /&gt;
        level = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;width: 100px; text-align: center; border-bottom: 1px solid grey;&amp;quot; |${values.level}]],&lt;br /&gt;
        equipment = [[| style=&amp;quot;${style}&amp;quot; |${equip_name}]],&lt;br /&gt;
    },&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;ship&amp;quot;,&lt;br /&gt;
        &amp;quot;level&amp;quot;,&lt;br /&gt;
        &amp;quot;equipment&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    _blank_battle_card = &amp;quot;Empty card.png&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function EventComp:ship(entry)&lt;br /&gt;
    return { values = { ship = Formatting:format_image{entry.ship:battle_card() or self._blank_battle_card, link = entry.ship:link(), caption = entry.ship:name() } }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:level(entry)&lt;br /&gt;
    return { values = { level = entry.level }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:equipment(entry)&lt;br /&gt;
    return entry.equips&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_hq_level()&lt;br /&gt;
    local bracket = tonumber(self._args['hq'] or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    self._elos = -(bracket * 0.61)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_equipment(equip)&lt;br /&gt;
    --Fighter power&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        self._fighter_power = self._fighter_power + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    --Effective Line of Sight&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_items()&lt;br /&gt;
    local entry = {&lt;br /&gt;
        ship = nil,&lt;br /&gt;
        level = nil,&lt;br /&gt;
        equips = {},&lt;br /&gt;
    }&lt;br /&gt;
    for index, item_key in ipairs(self._args) do&lt;br /&gt;
        if item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            &lt;br /&gt;
            entry = {&lt;br /&gt;
                ship = nil,&lt;br /&gt;
                level = nil,&lt;br /&gt;
                equips = {},&lt;br /&gt;
            }&lt;br /&gt;
        elseif entry.ship and entry.level then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
        elseif entry.ship then&lt;br /&gt;
            entry.level = tonumber(item_key)&lt;br /&gt;
            &lt;br /&gt;
            --Perform eLoS calculation&lt;br /&gt;
            local los = entry.ship:los() or 0&lt;br /&gt;
            local los_max = entry.ship:los_max() or los&lt;br /&gt;
            los = math.floor(los + ((los_max - los) * entry.level / 99))&lt;br /&gt;
            self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
        else&lt;br /&gt;
            entry.ship = self._item_class(item_key)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._items, entry)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_data_rows()&lt;br /&gt;
    for _, item in ipairs(self._items) do&lt;br /&gt;
        local row_values = {}&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            row_values[column] = self[column](self, item)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._data_rows, row_values)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_rows()&lt;br /&gt;
    for _, row_values in ipairs(self._data_rows) do&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            if column == &amp;quot;equipment&amp;quot; then&lt;br /&gt;
                for index, equip in ipairs(row_values[column]) do&lt;br /&gt;
                    self:process_equipment(equip)&lt;br /&gt;
                    local values = { equip_name = Formatting:format_link(equip:link()), style = &amp;quot;&amp;quot; }&lt;br /&gt;
                    if index == #row_values[column] then values.style = &amp;quot;border-bottom: 1px solid grey;&amp;quot; end&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;| style=\&amp;quot;&amp;quot; .. values.style .. &amp;quot;\&amp;quot; |&amp;quot; .. Formatting:format_image{Formatting:format_equipment_icon(equip:icon())})&lt;br /&gt;
                    table.insert(self._rows, format(self._column_cell_templates[column], values))&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;|-&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, format(self._column_cell_templates[column], row_values[column]))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--If this isn't separate, &amp;quot;frame&amp;quot; is nil and gives an error when testing with the debug console&lt;br /&gt;
function EventComp:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    self._items = {}&lt;br /&gt;
    self._data_rows = {}&lt;br /&gt;
    self._rows = { [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]] }&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    &lt;br /&gt;
    self:build_items()&lt;br /&gt;
    self:build_data_rows()&lt;br /&gt;
    self:build_rows()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;|}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, &amp;quot;HQ level: &amp;quot; .. self._args['hq'] .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;Fighter Power: &amp;quot; .. self._fighter_power .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;eLoS: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, self._elos))&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(self._rows, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp.Build(frame)&lt;br /&gt;
    local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
    return EventComp:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return EventComp&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122172</id>
		<title>Module:EventComp</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122172"/>
		<updated>2015-08-10T04:33:49Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local BaseTable = require('Module:BaseTable')&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local EventComp = {&lt;br /&gt;
    _item_class = Ship,&lt;br /&gt;
    _equip_class = Equipment,&lt;br /&gt;
    _table_start = [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]],&lt;br /&gt;
    _header_template = [[]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        ship = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;border-bottom: 1px solid grey;&amp;quot; |${values.ship}]],&lt;br /&gt;
        level = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;width: 100px; text-align: center; border-bottom: 1px solid grey;&amp;quot; |${values.level}]],&lt;br /&gt;
        equipment = [[| style=&amp;quot;${style}&amp;quot; |${equip_name}]],&lt;br /&gt;
    },&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;ship&amp;quot;,&lt;br /&gt;
        &amp;quot;level&amp;quot;,&lt;br /&gt;
        &amp;quot;equipment&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    _blank_battle_card = &amp;quot;Empty card.png&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function EventComp:ship(entry)&lt;br /&gt;
    return { values = { ship = Formatting:format_image{entry.ship:battle_card() or self._blank_battle_card, link = entry.ship:link(), caption = entry.ship:name() } }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:level(entry)&lt;br /&gt;
    return { values = { level = entry.level }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:equipment(entry)&lt;br /&gt;
    return entry.equips&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_hq_level()&lt;br /&gt;
    local bracket = tonumber(self._args['hq'] or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    self._elos = -(bracket * 0.61)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_equipment(equip)&lt;br /&gt;
    --Fighter power&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        self._fighter_power = self._fighter_power + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    --Effective Line of Sight&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_items()&lt;br /&gt;
    local entry = {&lt;br /&gt;
        ship = nil,&lt;br /&gt;
        level = nil,&lt;br /&gt;
        equips = {},&lt;br /&gt;
    }&lt;br /&gt;
    for index, item_key in ipairs(self._args) do&lt;br /&gt;
        if item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
            if entry.ship then&lt;br /&gt;
                table.insert(self._items, entry)&lt;br /&gt;
                &lt;br /&gt;
                entry = {&lt;br /&gt;
                    ship = nil,&lt;br /&gt;
                    level = nil,&lt;br /&gt;
                    equips = {},&lt;br /&gt;
                }&lt;br /&gt;
            end&lt;br /&gt;
        elseif entry.ship and entry.level then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
        elseif entry.ship then&lt;br /&gt;
            entry.level = tonumber(item_key)&lt;br /&gt;
            &lt;br /&gt;
            --Perform eLoS calculation&lt;br /&gt;
            local los = entry.ship:los() or 0&lt;br /&gt;
            local los_max = entry.ship:los_max() or los&lt;br /&gt;
            los = math.floor(los + ((los_max - los) * entry.level / 99))&lt;br /&gt;
            self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
        else&lt;br /&gt;
            entry.ship = self._item_class(item_key)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._items, entry)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_data_rows()&lt;br /&gt;
    for _, item in ipairs(self._items) do&lt;br /&gt;
        local row_values = {}&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            row_values[column] = self[column](self, item)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._data_rows, row_values)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_rows()&lt;br /&gt;
    for _, row_values in ipairs(self._data_rows) do&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            if column == &amp;quot;equipment&amp;quot; then&lt;br /&gt;
                for index, equip in ipairs(row_values[column]) do&lt;br /&gt;
                    self:process_equipment(equip)&lt;br /&gt;
                    local values = { equip_name = Formatting:format_link(equip:link()), style = &amp;quot;&amp;quot; }&lt;br /&gt;
                    if index == #row_values[column] then values.style = &amp;quot;border-bottom: 1px solid grey;&amp;quot; end&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;| style=\&amp;quot;&amp;quot; .. values.style .. &amp;quot;\&amp;quot; |&amp;quot; .. Formatting:format_image{Formatting:format_equipment_icon(equip:icon())})&lt;br /&gt;
                    table.insert(self._rows, format(self._column_cell_templates[column], values))&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;|-&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, format(self._column_cell_templates[column], row_values[column]))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--If this isn't separate, &amp;quot;frame&amp;quot; is nil and gives an error when testing with the debug console&lt;br /&gt;
function EventComp:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    self._items = {}&lt;br /&gt;
    self._data_rows = {}&lt;br /&gt;
    self._rows = { [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]] }&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    &lt;br /&gt;
    self:build_items()&lt;br /&gt;
    self:build_data_rows()&lt;br /&gt;
    self:build_rows()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;|}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, &amp;quot;HQ level: &amp;quot; .. self._args['hq'] .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;Fighter Power: &amp;quot; .. self._fighter_power .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;eLoS: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, self._elos))&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(self._rows, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp.Build(frame)&lt;br /&gt;
    local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
    return EventComp:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return EventComp&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122171</id>
		<title>Module:EventComp</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122171"/>
		<updated>2015-08-10T04:32:36Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local BaseTable = require('Module:BaseTable')&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local EventComp = {&lt;br /&gt;
    _item_class = Ship,&lt;br /&gt;
    _equip_class = Equipment,&lt;br /&gt;
    _table_start = [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]],&lt;br /&gt;
    _header_template = [[]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        ship = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;border-bottom: 1px solid grey;&amp;quot; |${values.ship}]],&lt;br /&gt;
        level = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;width: 100px; text-align: center; border-bottom: 1px solid grey;&amp;quot; |${values.level}]],&lt;br /&gt;
        equipment = [[| style=&amp;quot;${style}&amp;quot; |${equip_name}]],&lt;br /&gt;
    },&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;ship&amp;quot;,&lt;br /&gt;
        &amp;quot;level&amp;quot;,&lt;br /&gt;
        &amp;quot;equipment&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    _blank_battle_card = &amp;quot;Empty card.png&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function EventComp:ship(entry)&lt;br /&gt;
    return { values = { ship = Formatting:format_image{entry.ship:battle_card() or self._blank_battle_card, link = entry.ship:link(), caption = entry.ship:name() } }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:level(entry)&lt;br /&gt;
    return { values = { level = entry.level }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:equipment(entry)&lt;br /&gt;
    return entry.equips&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_hq_level()&lt;br /&gt;
    local bracket = tonumber(self._args['hq'] or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    self._elos = -(bracket * 0.61)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_equipment(equip)&lt;br /&gt;
    --Fighter power&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        self._fighter_power = self._fighter_power + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    --Effective Line of Sight&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_items()&lt;br /&gt;
    local entry = {&lt;br /&gt;
        ship = nil,&lt;br /&gt;
        level = nil,&lt;br /&gt;
        equips = {},&lt;br /&gt;
    }&lt;br /&gt;
    for index, item_key in ipairs(self._args) do&lt;br /&gt;
        if item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            &lt;br /&gt;
            entry = {&lt;br /&gt;
                ship = nil,&lt;br /&gt;
                level = nil,&lt;br /&gt;
                equips = {},&lt;br /&gt;
            }&lt;br /&gt;
        elseif entry.ship and entry.level then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
        elseif entry.ship then&lt;br /&gt;
            entry.level = tonumber(item_key)&lt;br /&gt;
            &lt;br /&gt;
            --Perform eLoS calculation&lt;br /&gt;
            local los = entry.ship:los() or 0&lt;br /&gt;
            local los_max = entry.ship:los_max() or los&lt;br /&gt;
            los = math.floor(los + ((los_max - los) * entry.level / 99))&lt;br /&gt;
            self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
        else&lt;br /&gt;
            entry.ship = self._item_class(item_key)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._items, entry)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_data_rows()&lt;br /&gt;
    for _, item in ipairs(self._items) do&lt;br /&gt;
        local row_values = {}&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            row_values[column] = self[column](self, item)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._data_rows, row_values)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_rows()&lt;br /&gt;
    for _, row_values in ipairs(self._data_rows) do&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            if column == &amp;quot;equipment&amp;quot; then&lt;br /&gt;
                for index, equip in ipairs(row_values[column]) do&lt;br /&gt;
                    self:process_equipment(equip)&lt;br /&gt;
                    local values = { equip_name = Formatting:format_link(equip:link()), style = &amp;quot;&amp;quot; }&lt;br /&gt;
                    if index == #row_values[column] then values.style = &amp;quot;border-bottom: 1px solid grey;&amp;quot; end&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;| style=\&amp;quot;&amp;quot; .. values.style .. &amp;quot;\&amp;quot; |&amp;quot; .. Formatting:format_image{Formatting:format_equipment_icon(equip:icon())})&lt;br /&gt;
                    table.insert(self._rows, format(self._column_cell_templates[column], values))&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;|-&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, format(self._column_cell_templates[column], row_values[column]))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--If this isn't separate, &amp;quot;frame&amp;quot; is nil and gives an error when testing with the debug console&lt;br /&gt;
function EventComp:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    self._items = {}&lt;br /&gt;
    self._data_rows = {}&lt;br /&gt;
    self._rows = { [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]] }&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    &lt;br /&gt;
    self:build_items()&lt;br /&gt;
    self:build_data_rows()&lt;br /&gt;
    self:build_rows()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;|}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, &amp;quot;HQ level: &amp;quot; .. self._args['hq'] .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;Fighter Power: &amp;quot; .. self._fighter_power .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;eLoS: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, self._elos))&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(self._rows, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp.Build(frame)&lt;br /&gt;
    local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
    return EventComp:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return EventComp&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122170</id>
		<title>Module:EventComp</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122170"/>
		<updated>2015-08-10T04:31:28Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local BaseTable = require('Module:BaseTable')&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local EventComp = {&lt;br /&gt;
    _item_class = Ship,&lt;br /&gt;
    _equip_class = Equipment,&lt;br /&gt;
    _table_start = [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]],&lt;br /&gt;
    _header_template = [[]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        ship = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;border-bottom: 1px solid grey;&amp;quot; |${values.ship}]],&lt;br /&gt;
        level = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;width: 100px; text-align: center; border-bottom: 1px solid grey;&amp;quot; |${values.level}]],&lt;br /&gt;
        equipment = [[| style=&amp;quot;${style}&amp;quot; |${equip_name}]],&lt;br /&gt;
    },&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;ship&amp;quot;,&lt;br /&gt;
        &amp;quot;level&amp;quot;,&lt;br /&gt;
        &amp;quot;equipment&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    _blank_battle_card = &amp;quot;Empty card.png&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function EventComp:ship(entry)&lt;br /&gt;
    return { values = { ship = Formatting:format_image{entry.ship:battle_card() or self._blank_battle_card, link = entry.ship:link(), caption = entry.ship:name() } }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:level(entry)&lt;br /&gt;
    return { values = { level = entry.level }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:equipment(entry)&lt;br /&gt;
    return entry.equips&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_hq_level()&lt;br /&gt;
    local bracket = tonumber(self._args['hq'] or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    self._elos = -(bracket * 0.61)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_equipment(equip)&lt;br /&gt;
    --Fighter power&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        self._fighter_power = self._fighter_power + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    --Effective Line of Sight&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_items()&lt;br /&gt;
    local entry = {&lt;br /&gt;
        ship = nil,&lt;br /&gt;
        level = nil,&lt;br /&gt;
        equips = {},&lt;br /&gt;
    }&lt;br /&gt;
    for index, item_key in ipairs(self._args) do&lt;br /&gt;
        if item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            &lt;br /&gt;
            entry = {&lt;br /&gt;
                ship = nil,&lt;br /&gt;
                level = nil,&lt;br /&gt;
                equips = {},&lt;br /&gt;
            }&lt;br /&gt;
        elseif entry.ship and entry.level then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
        elseif entry.ship then&lt;br /&gt;
            entry.level = tonumber(item_key)&lt;br /&gt;
            &lt;br /&gt;
            --Perform eLoS calculation&lt;br /&gt;
            local los = entry.ship:los() or 0&lt;br /&gt;
            local los_max = entry.ship:los_max() or los&lt;br /&gt;
            los = math.floor(los + ((los_max - los) * entry.level / 99))&lt;br /&gt;
            self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
        else&lt;br /&gt;
            entry.ship = self._item_class(item_key)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
    table.insert(self._items, entry)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_data_rows()&lt;br /&gt;
    for _, item in ipairs(self._items) do&lt;br /&gt;
        local row_values = {}&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            row_values[column] = self[column](self, item)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._data_rows, row_values)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_rows()&lt;br /&gt;
    for _, row_values in ipairs(self._data_rows) do&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            if column == &amp;quot;equipment&amp;quot; then&lt;br /&gt;
                for index, equip in ipairs(row_values[column]) do&lt;br /&gt;
                    self:process_equipment(equip)&lt;br /&gt;
                    local values = { equip_name = Formatting:format_link(equip:link()), style = &amp;quot;&amp;quot; }&lt;br /&gt;
                    if index == #row_values[column] then values.style = &amp;quot;border-bottom: 1px solid grey;&amp;quot; end&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;| style=\&amp;quot;&amp;quot; .. values.style .. &amp;quot;\&amp;quot; |&amp;quot; .. Formatting:format_image{Formatting:format_equipment_icon(equip:icon())})&lt;br /&gt;
                    table.insert(self._rows, format(self._column_cell_templates[column], values))&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;|-&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, format(self._column_cell_templates[column], row_values[column]))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--If this isn't separate, &amp;quot;frame&amp;quot; is nil and gives an error when testing with the debug console&lt;br /&gt;
function EventComp:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    self._items = {}&lt;br /&gt;
    self._data_rows = {}&lt;br /&gt;
    self._rows = { [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]] }&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    &lt;br /&gt;
    self:build_items()&lt;br /&gt;
    self:build_data_rows()&lt;br /&gt;
    self:build_rows()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;|}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, &amp;quot;HQ level: &amp;quot; .. self._args['hq'] .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;Fighter Power: &amp;quot; .. self._fighter_power .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;eLoS: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, self._elos))&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(self._rows, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp.Build(frame)&lt;br /&gt;
    local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
    return EventComp:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return EventComp&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122169</id>
		<title>Module:EventComp</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122169"/>
		<updated>2015-08-10T04:28:08Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local BaseTable = require('Module:BaseTable')&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local EventComp = {&lt;br /&gt;
    _item_class = Ship,&lt;br /&gt;
    _equip_class = Equipment,&lt;br /&gt;
    _table_start = [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]],&lt;br /&gt;
    _header_template = [[]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        ship = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;border-bottom: 1px solid grey;&amp;quot; |${values.ship}]],&lt;br /&gt;
        level = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;width: 100px; text-align: center; border-bottom: 1px solid grey;&amp;quot; |${values.level}]],&lt;br /&gt;
        equipment = [[| style=&amp;quot;${style}&amp;quot; |${equip_name}]],&lt;br /&gt;
    },&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;ship&amp;quot;,&lt;br /&gt;
        &amp;quot;level&amp;quot;,&lt;br /&gt;
        &amp;quot;equipment&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    _blank_battle_card = &amp;quot;Empty card.png&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function EventComp:ship(entry)&lt;br /&gt;
    return { values = { ship = Formatting:format_image{entry.ship:battle_card() or self._blank_battle_card, link = entry.ship:link(), caption = entry.ship:name() } }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:level(entry)&lt;br /&gt;
    return { values = { level = entry.level }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:equipment(entry)&lt;br /&gt;
    return entry.equips&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_hq_level()&lt;br /&gt;
    local bracket = tonumber(self._args['hq'] or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    self._elos = -(bracket * 0.61)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_equipment(equip)&lt;br /&gt;
    --Fighter power&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        self._fighter_power = self._fighter_power + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    --Effective Line of Sight&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_items()&lt;br /&gt;
    local entry = {&lt;br /&gt;
        ship = nil,&lt;br /&gt;
        level = nil,&lt;br /&gt;
        equips = {},&lt;br /&gt;
    }&lt;br /&gt;
    for index, item_key in ipairs(self._args) do&lt;br /&gt;
        if index == #self._args then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
        elseif item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            &lt;br /&gt;
            entry = {&lt;br /&gt;
                ship = nil,&lt;br /&gt;
                level = nil,&lt;br /&gt;
                equips = {},&lt;br /&gt;
            }&lt;br /&gt;
        elseif entry.ship and entry.level then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
        elseif entry.ship then&lt;br /&gt;
            entry.level = tonumber(item_key)&lt;br /&gt;
            &lt;br /&gt;
            --Perform eLoS calculation&lt;br /&gt;
            local los = entry.ship:los() or 0&lt;br /&gt;
            local los_max = entry.ship:los_max() or los&lt;br /&gt;
            los = math.floor(los + ((los_max - los) * entry.level / 99))&lt;br /&gt;
            self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
        else&lt;br /&gt;
            entry.ship = self._item_class(item_key)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_data_rows()&lt;br /&gt;
    for _, item in ipairs(self._items) do&lt;br /&gt;
        local row_values = {}&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            row_values[column] = self[column](self, item)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._data_rows, row_values)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_rows()&lt;br /&gt;
    for _, row_values in ipairs(self._data_rows) do&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            if column == &amp;quot;equipment&amp;quot; then&lt;br /&gt;
                for index, equip in ipairs(row_values[column]) do&lt;br /&gt;
                    self:process_equipment(equip)&lt;br /&gt;
                    local values = { equip_name = Formatting:format_link(equip:link()), style = &amp;quot;&amp;quot; }&lt;br /&gt;
                    if index == #row_values[column] then values.style = &amp;quot;border-bottom: 1px solid grey;&amp;quot; end&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;| style=\&amp;quot;&amp;quot; .. values.style .. &amp;quot;\&amp;quot; |&amp;quot; .. Formatting:format_image{Formatting:format_equipment_icon(equip:icon())})&lt;br /&gt;
                    table.insert(self._rows, format(self._column_cell_templates[column], values))&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;|-&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, format(self._column_cell_templates[column], row_values[column]))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--If this isn't separate, &amp;quot;frame&amp;quot; is nil and gives an error when testing with the debug console&lt;br /&gt;
function EventComp:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    self._items = {}&lt;br /&gt;
    self._data_rows = {}&lt;br /&gt;
    self._rows = { [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]] }&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    &lt;br /&gt;
    self:build_items()&lt;br /&gt;
    self:build_data_rows()&lt;br /&gt;
    self:build_rows()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;|}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, &amp;quot;HQ level: &amp;quot; .. self._args['hq'] .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;Fighter Power: &amp;quot; .. self._fighter_power .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;eLoS: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, self._elos))&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(self._rows, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp.Build(frame)&lt;br /&gt;
    local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
    return EventComp:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return EventComp&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122168</id>
		<title>Module:EventComp</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:EventComp&amp;diff=122168"/>
		<updated>2015-08-10T04:27:32Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: Created page with &amp;quot;local getArgs = require('Module:GetArgs')  local BaseTable = require('Module:BaseTable') local Ship = require('Module:Ship') local Equipment = require('Module:Equipment') loca...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local BaseTable = require('Module:BaseTable')&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local EventComp = {&lt;br /&gt;
    _item_class = Ship,&lt;br /&gt;
    _equip_class = Equipment,&lt;br /&gt;
    _table_start = [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]],&lt;br /&gt;
    _header_template = [[]],&lt;br /&gt;
    _column_cell_templates = {&lt;br /&gt;
        ship = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;border-bottom: 1px solid grey;&amp;quot; |${values.ship}]],&lt;br /&gt;
        level = [[| rowspan=&amp;quot;${rowspan}&amp;quot; style=&amp;quot;width: 100px; text-align: center; border-bottom: 1px solid grey;&amp;quot; |${values.level}]],&lt;br /&gt;
        equipment = [[| style=&amp;quot;${style}&amp;quot; |${equip_name}]],&lt;br /&gt;
    },&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;quot;ship&amp;quot;,&lt;br /&gt;
        &amp;quot;level&amp;quot;,&lt;br /&gt;
        &amp;quot;equipment&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    _blank_battle_card = &amp;quot;Empty card.png&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function EventComp:ship(entry)&lt;br /&gt;
    return { values = { ship = Formatting:format_image{entry.ship:battle_card() or self._blank_battle_card, link = entry.ship:link(), caption = entry.ship:name() } }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:level(entry)&lt;br /&gt;
    return { values = { level = entry.level }, rowspan = #entry.equips }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:equipment(entry)&lt;br /&gt;
    return entry.equips&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_hq_level()&lt;br /&gt;
    local bracket = tonumber(self._args['hq'] or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    self._elos = -(bracket * 0.61)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:process_equipment(equip)&lt;br /&gt;
    --Fighter power&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        self._fighter_power = self._fighter_power + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    --Effective Line of Sight&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_items()&lt;br /&gt;
    local entry = {&lt;br /&gt;
        ship = nil,&lt;br /&gt;
        level = nil,&lt;br /&gt;
        equips = {},&lt;br /&gt;
    }&lt;br /&gt;
    for index, item_key in ipairs(self._args) do&lt;br /&gt;
        if index == #self._args then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
        elseif item_key == &amp;quot;-&amp;quot; then&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            &lt;br /&gt;
            entry = {&lt;br /&gt;
                ship = nil,&lt;br /&gt;
                level = nil,&lt;br /&gt;
                equips = {},&lt;br /&gt;
            }&lt;br /&gt;
        elseif entry.ship and entry.level then&lt;br /&gt;
            table.insert(entry.equips, self._equip_class(item_key))&lt;br /&gt;
        elseif entry.ship then&lt;br /&gt;
            entry.level = tonumber(item_key)&lt;br /&gt;
            &lt;br /&gt;
            --Perform eLoS calculation&lt;br /&gt;
            local los = entry.ship:los() or 0&lt;br /&gt;
            local los_max = entry.ship:los_max() or los&lt;br /&gt;
            los = math.floor(los + ((los_max - los) * entry.level / 99))&lt;br /&gt;
            self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
        else&lt;br /&gt;
            entry.ship = self._item_class(item_key)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_data_rows()&lt;br /&gt;
    for _, item in ipairs(self._items) do&lt;br /&gt;
        local row_values = {}&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            row_values[column] = self[column](self, item)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._data_rows, row_values)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp:build_rows()&lt;br /&gt;
    for _, row_values in ipairs(self._data_rows) do&lt;br /&gt;
        for _, column in ipairs(self._columns) do&lt;br /&gt;
            if column == &amp;quot;equipment&amp;quot; then&lt;br /&gt;
                for index, equip in ipairs(row_values[column]) do&lt;br /&gt;
                    self:process_equipment(equip)&lt;br /&gt;
                    local values = { equip_name = Formatting:format_link(equip:link()), style = &amp;quot;&amp;quot; }&lt;br /&gt;
                    if index == #row_values[column] then values.style = &amp;quot;border-bottom: 1px solid grey;&amp;quot; end&lt;br /&gt;
                    table.insert(self._rows, [[ style=&amp;quot;]] .. values.style .. [[&amp;quot; |&amp;quot; ]] .. Formatting:format_image{Formatting:format_equipment_icon(equip:icon())})&lt;br /&gt;
                    table.insert(self._rows, format(self._column_cell_templates[column], values))&lt;br /&gt;
                    table.insert(self._rows, &amp;quot;|-&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, format(self._column_cell_templates[column], row_values[column]))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--If this isn't separate, &amp;quot;frame&amp;quot; is nil and gives an error when testing with the debug console&lt;br /&gt;
function EventComp:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    self._items = {}&lt;br /&gt;
    self._data_rows = {}&lt;br /&gt;
    self._rows = { [[{| style=&amp;quot;border-collapse: collapse;&amp;quot;]] }&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    &lt;br /&gt;
    self:build_items()&lt;br /&gt;
    self:build_data_rows()&lt;br /&gt;
    self:build_rows()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;|}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, &amp;quot;HQ level: &amp;quot; .. self._args['hq'] .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;Fighter Power: &amp;quot; .. self._fighter_power .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;eLoS: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, self._elos))&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(self._rows, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function EventComp.Build(frame)&lt;br /&gt;
    local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
    return EventComp:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return EventComp&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminShipInfo&amp;diff=88046</id>
		<title>Module:NanaminShipInfo</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminShipInfo&amp;diff=88046"/>
		<updated>2015-08-01T03:28:36Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local NanaminShipInfo = {&lt;br /&gt;
    _sorted_entries = {},&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{| style=&amp;quot;width: 100%; text-align: center;&amp;quot;]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _ship_card_template = [[| style=&amp;quot;width: 40%; padding-left: 5%; border-left: 1px solid lightblue;&amp;quot; |&amp;lt;div class=&amp;quot;mw-customtoggle-${class}&amp;quot;&amp;gt;${ship_card}&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _level_template = [[| style=&amp;quot;width: 10%;&amp;quot; |${level}]],&lt;br /&gt;
    _embedded_start = [[| colspan=&amp;quot;2&amp;quot; |]],&lt;br /&gt;
    _embedded_table = [[{| class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-${name}&amp;quot; style=&amp;quot;width: 100%; text-align: left; padding-left: 10%;&amp;quot;&lt;br /&gt;
    | &amp;lt;b&amp;gt;Class&amp;lt;/b&amp;gt;: ${class}&lt;br /&gt;
    |-&lt;br /&gt;
    | &amp;lt;b&amp;gt;Extra Leveling&amp;lt;/b&amp;gt;: ${extra_levels}&lt;br /&gt;
    |-&lt;br /&gt;
    | &amp;lt;b&amp;gt;Notes&amp;lt;/b&amp;gt;: ${notes}&lt;br /&gt;
    |}]],&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminShipInfo:sort_arguments(args)&lt;br /&gt;
    --Support two methods of entry:&lt;br /&gt;
    ---Each value on a separate line&lt;br /&gt;
    ---Each value on the same line, separated by slashes&lt;br /&gt;
    --Name/Remodel/Level/Extra Leveling&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for _, item in ipairs(args) do&lt;br /&gt;
        if item == &amp;quot;-&amp;quot; and #entry &amp;gt; 2 then&lt;br /&gt;
            local ship = Ship(entry[1], entry[2])&lt;br /&gt;
            local types = {&lt;br /&gt;
                [2] = &amp;quot;Destroyer&amp;quot;,&lt;br /&gt;
                [3] = &amp;quot;Light Cruiser&amp;quot;,&lt;br /&gt;
                [4] = &amp;quot;Light Cruiser&amp;quot;,&lt;br /&gt;
                [5] = &amp;quot;Heavy Cruiser&amp;quot;,&lt;br /&gt;
                [6] = &amp;quot;Heavy Cruiser&amp;quot;,&lt;br /&gt;
                [7] = &amp;quot;Carrier&amp;quot;,&lt;br /&gt;
                [8] = &amp;quot;Battleship&amp;quot;,&lt;br /&gt;
                [9] = &amp;quot;Battleship&amp;quot;,&lt;br /&gt;
                [10] = &amp;quot;Battleship&amp;quot;,&lt;br /&gt;
                [11] = &amp;quot;Carrier&amp;quot;,&lt;br /&gt;
                [12] = &amp;quot;Battleship&amp;quot;,&lt;br /&gt;
                [13] = &amp;quot;Submarine&amp;quot;,&lt;br /&gt;
                [14] = &amp;quot;Submarine&amp;quot;,&lt;br /&gt;
                [18] = &amp;quot;Carrier&amp;quot;,&lt;br /&gt;
            }&lt;br /&gt;
            if ship:type() then&lt;br /&gt;
                local type = types[ship:type()] or &amp;quot;Other&amp;quot;&lt;br /&gt;
                if not self._sorted_entries[type] then&lt;br /&gt;
                    self._sorted_entries[type] = {}&lt;br /&gt;
                end&lt;br /&gt;
                table.insert(self._sorted_entries[type], { [1] = ship, [2] = tonumber(entry[3]), [3] = entry[4], [4] = entry[5] })&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            while mw.ustring.find(item, '/') do&lt;br /&gt;
                local split = mw.ustring.find(item, '/')&lt;br /&gt;
                local new_entry = mw.ustring.sub(item, 1, split - 1)&lt;br /&gt;
                if new_entry == &amp;quot;-&amp;quot; then new_entry = &amp;quot;&amp;quot; end&lt;br /&gt;
                table.insert(entry, new_entry)&lt;br /&gt;
                item = mw.ustring.sub(item, split + 1)&lt;br /&gt;
            end&lt;br /&gt;
            if item == &amp;quot;-&amp;quot; then item = &amp;quot;&amp;quot; end&lt;br /&gt;
            table.insert(entry, item)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminShipInfo:embed_table(entry)&lt;br /&gt;
if entry[3] == &amp;quot;&amp;quot; then entry[3] = &amp;quot;N/A&amp;quot; end&lt;br /&gt;
local name = entry[1]:nick() and entry[1]:nick() or entry[1]:name()&lt;br /&gt;
table.insert(self._rows, self._embedded_start)&lt;br /&gt;
table.insert(self._rows, format{self._embedded_table,&lt;br /&gt;
    name = name:gsub(&amp;quot; &amp;quot;, &amp;quot;&amp;quot;),&lt;br /&gt;
    class = entry[1]:class():name(),&lt;br /&gt;
    extra_levels = entry[3] or &amp;quot;N/A&amp;quot;,&lt;br /&gt;
    notes = entry[4] or &amp;quot;None&amp;quot;,&lt;br /&gt;
})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminShipInfo:build_table(class, remove_headers)&lt;br /&gt;
    if self._sorted_entries[class] ~= nil or class == &amp;quot;All&amp;quot; then&lt;br /&gt;
        if not remove_headers then&lt;br /&gt;
            table.insert(self._rows, [[&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;]])&lt;br /&gt;
            table.insert(self._rows, &amp;quot;=&amp;quot; .. class .. &amp;quot;s=&amp;quot;)&lt;br /&gt;
            table.insert(self._rows, [[&amp;lt;/div&amp;gt;]])&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._table_start)&lt;br /&gt;
        &lt;br /&gt;
        local entries = {}&lt;br /&gt;
        if class == &amp;quot;All&amp;quot; then&lt;br /&gt;
            for ship_type, entry_table in pairs(self._sorted_entries) do&lt;br /&gt;
                for _, entry in pairs(entry_table) do&lt;br /&gt;
                    table.insert(entries, entry)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            entries = self._sorted_entries[class]&lt;br /&gt;
        end&lt;br /&gt;
        table.sort(entries, function(a, b) return a[2] &amp;lt; b[2] end)&lt;br /&gt;
        local count = 0&lt;br /&gt;
        for a = #entries, 1, -1 do&lt;br /&gt;
            count = count + 1&lt;br /&gt;
            &lt;br /&gt;
            local name = entries[a][1]:nick() and entries[a][1]:nick() or entries[a][1]:name()&lt;br /&gt;
            local image = string.gsub(entries[a][1]:battle_card(), &amp;quot;FastBB&amp;quot;, &amp;quot;BC&amp;quot;)&lt;br /&gt;
            table.insert(self._rows, format{self._ship_card_template,&lt;br /&gt;
                class = name:gsub(&amp;quot; &amp;quot;, &amp;quot;&amp;quot;),&lt;br /&gt;
                ship_card = Formatting:format_image{image, align = &amp;quot;left&amp;quot;, valign = &amp;quot;center&amp;quot;},&lt;br /&gt;
            })&lt;br /&gt;
            table.insert(self._rows, format{self._level_template,&lt;br /&gt;
                level = entries[a][2],&lt;br /&gt;
            })&lt;br /&gt;
            &lt;br /&gt;
            if count % 2 == 0 then&lt;br /&gt;
                table.insert(self._rows, self._row_starter)&lt;br /&gt;
                self:embed_table(entries[a + 1])&lt;br /&gt;
                self:embed_table(entries[a])&lt;br /&gt;
                table.insert(self._rows, self._row_starter)&lt;br /&gt;
            elseif a == 1 then&lt;br /&gt;
                table.insert(self._rows, self._row_starter)&lt;br /&gt;
                self:embed_table(entries[a])&lt;br /&gt;
                table.insert(self._rows, self._embedded_start)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._table_end)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminShipInfo:build_one(class, remove_headers)&lt;br /&gt;
    self:build_table(class, remove_headers)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminShipInfo:build_all()&lt;br /&gt;
    self:build_table(&amp;quot;All&amp;quot;, true)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminShipInfo:Main(args)&lt;br /&gt;
    self:sort_arguments(args)&lt;br /&gt;
    --mw.log(self._sorted_entries[&amp;quot;Light Cruiser&amp;quot;][&amp;quot;111&amp;quot;][1][1])&lt;br /&gt;
    table.insert(self._rows, &amp;quot;__NOTOC__&amp;quot;)&lt;br /&gt;
    if args[&amp;quot;class&amp;quot;] then return self:build_one(args[&amp;quot;class&amp;quot;], args[&amp;quot;remove_headers&amp;quot;]) end&lt;br /&gt;
    if args[&amp;quot;all&amp;quot;] then return self:build_all() end&lt;br /&gt;
    self:build_table(&amp;quot;Battleship&amp;quot;)&lt;br /&gt;
    self:build_table(&amp;quot;Carrier&amp;quot;)&lt;br /&gt;
    self:build_table(&amp;quot;Heavy Cruiser&amp;quot;)&lt;br /&gt;
    self:build_table(&amp;quot;Light Cruiser&amp;quot;)&lt;br /&gt;
    self:build_table(&amp;quot;Destroyer&amp;quot;)&lt;br /&gt;
    self:build_table(&amp;quot;Submarine&amp;quot;)&lt;br /&gt;
    self:build_table(&amp;quot;Other&amp;quot;)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminShipInfo.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminShipInfo:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminShipInfo&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminShipInfo&amp;diff=88045</id>
		<title>Module:NanaminShipInfo</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminShipInfo&amp;diff=88045"/>
		<updated>2015-07-08T04:08:19Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local NanaminShipInfo = {&lt;br /&gt;
    _sorted_entries = {},&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{| style=&amp;quot;width: 100%; text-align: center;&amp;quot;]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _ship_card_template = [[| style=&amp;quot;width: 40%; padding-left: 5%; border-left: 1px solid lightblue;&amp;quot; |&amp;lt;div class=&amp;quot;mw-customtoggle-${class}&amp;quot;&amp;gt;${ship_card}&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _level_template = [[| style=&amp;quot;width: 10%;&amp;quot; |${level}]],&lt;br /&gt;
    _embedded_start = [[| colspan=&amp;quot;2&amp;quot; |]],&lt;br /&gt;
    _embedded_table = [[{| class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-${name}&amp;quot; style=&amp;quot;width: 100%; text-align: left; padding-left: 10%;&amp;quot;&lt;br /&gt;
    | &amp;lt;b&amp;gt;Class&amp;lt;/b&amp;gt;: ${class}&lt;br /&gt;
    |-&lt;br /&gt;
    | &amp;lt;b&amp;gt;Extra Leveling&amp;lt;/b&amp;gt;: ${extra_levels}&lt;br /&gt;
    |-&lt;br /&gt;
    | &amp;lt;b&amp;gt;Notes&amp;lt;/b&amp;gt;: ${notes}&lt;br /&gt;
    |}]],&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminShipInfo:sort_arguments(args)&lt;br /&gt;
    --Support two methods of entry:&lt;br /&gt;
    ---Each value on a separate line&lt;br /&gt;
    ---Each value on the same line, separated by slashes&lt;br /&gt;
    --Name/Remodel/Level/Extra Leveling&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for _, item in ipairs(args) do&lt;br /&gt;
        if item == &amp;quot;-&amp;quot; and #entry &amp;gt; 2 then&lt;br /&gt;
            local ship = Ship(entry[1], entry[2])&lt;br /&gt;
            local types = {&lt;br /&gt;
                [2] = &amp;quot;Destroyer&amp;quot;,&lt;br /&gt;
                [3] = &amp;quot;Light Cruiser&amp;quot;,&lt;br /&gt;
                [4] = &amp;quot;Light Cruiser&amp;quot;,&lt;br /&gt;
                [5] = &amp;quot;Heavy Cruiser&amp;quot;,&lt;br /&gt;
                [6] = &amp;quot;Heavy Cruiser&amp;quot;,&lt;br /&gt;
                [7] = &amp;quot;Carrier&amp;quot;,&lt;br /&gt;
                [8] = &amp;quot;Battleship&amp;quot;,&lt;br /&gt;
                [9] = &amp;quot;Battleship&amp;quot;,&lt;br /&gt;
                [10] = &amp;quot;Battleship&amp;quot;,&lt;br /&gt;
                [11] = &amp;quot;Carrier&amp;quot;,&lt;br /&gt;
                [12] = &amp;quot;Battleship&amp;quot;,&lt;br /&gt;
                [13] = &amp;quot;Submarine&amp;quot;,&lt;br /&gt;
                [14] = &amp;quot;Submarine&amp;quot;,&lt;br /&gt;
                [18] = &amp;quot;Carrier&amp;quot;,&lt;br /&gt;
            }&lt;br /&gt;
            if ship:type() then&lt;br /&gt;
                local type = types[ship:type()] or &amp;quot;Other&amp;quot;&lt;br /&gt;
                if not self._sorted_entries[type] then&lt;br /&gt;
                    self._sorted_entries[type] = {}&lt;br /&gt;
                end&lt;br /&gt;
                table.insert(self._sorted_entries[type], { [1] = ship, [2] = tonumber(entry[3]), [3] = entry[4], [4] = entry[5] })&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            while mw.ustring.find(item, '/') do&lt;br /&gt;
                local split = mw.ustring.find(item, '/')&lt;br /&gt;
                local new_entry = mw.ustring.sub(item, 1, split - 1)&lt;br /&gt;
                if new_entry == &amp;quot;-&amp;quot; then new_entry = &amp;quot;&amp;quot; end&lt;br /&gt;
                table.insert(entry, new_entry)&lt;br /&gt;
                item = mw.ustring.sub(item, split + 1)&lt;br /&gt;
            end&lt;br /&gt;
            if item == &amp;quot;-&amp;quot; then item = &amp;quot;&amp;quot; end&lt;br /&gt;
            table.insert(entry, item)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminShipInfo:embed_table(entry)&lt;br /&gt;
if entry[3] == &amp;quot;&amp;quot; then entry[3] = &amp;quot;N/A&amp;quot; end&lt;br /&gt;
local name = entry[1]:nick() and entry[1]:nick() or entry[1]:name()&lt;br /&gt;
table.insert(self._rows, self._embedded_start)&lt;br /&gt;
table.insert(self._rows, format{self._embedded_table,&lt;br /&gt;
    name = name:gsub(&amp;quot; &amp;quot;, &amp;quot;&amp;quot;),&lt;br /&gt;
    class = entry[1]:class():name(),&lt;br /&gt;
    extra_levels = entry[3] or &amp;quot;N/A&amp;quot;,&lt;br /&gt;
    notes = entry[4] or &amp;quot;None&amp;quot;,&lt;br /&gt;
})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminShipInfo:build_table(class, remove_headers)&lt;br /&gt;
    if self._sorted_entries[class] ~= nil or class == &amp;quot;All&amp;quot; then&lt;br /&gt;
        if not remove_headers then&lt;br /&gt;
            table.insert(self._rows, [[&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;]])&lt;br /&gt;
            table.insert(self._rows, &amp;quot;=&amp;quot; .. class .. &amp;quot;s=&amp;quot;)&lt;br /&gt;
            table.insert(self._rows, [[&amp;lt;/div&amp;gt;]])&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._table_start)&lt;br /&gt;
        &lt;br /&gt;
        local entries = {}&lt;br /&gt;
        if class == &amp;quot;All&amp;quot; then&lt;br /&gt;
            for ship_type, entry_table in pairs(self._sorted_entries) do&lt;br /&gt;
                for _, entry in pairs(entry_table) do&lt;br /&gt;
                    table.insert(entries, entry)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            entries = self._sorted_entries[class]&lt;br /&gt;
        end&lt;br /&gt;
        table.sort(entries, function(a, b) return a[2] &amp;lt; b[2] end)&lt;br /&gt;
        local count = 0&lt;br /&gt;
        for a = #entries, 1, -1 do&lt;br /&gt;
            count = count + 1&lt;br /&gt;
            &lt;br /&gt;
            local name = entries[a][1]:nick() and entries[a][1]:nick() or entries[a][1]:name()&lt;br /&gt;
            local image = string.gsub(entries[a][1]:battle_card(), &amp;quot;FastBB&amp;quot;, &amp;quot;BC&amp;quot;)&lt;br /&gt;
            table.insert(self._rows, format{self._ship_card_template,&lt;br /&gt;
                class = name:gsub(&amp;quot; &amp;quot;, &amp;quot;&amp;quot;),&lt;br /&gt;
                ship_card = Formatting:format_image{image, align = &amp;quot;left&amp;quot;, valign = &amp;quot;center&amp;quot;},&lt;br /&gt;
            })&lt;br /&gt;
            table.insert(self._rows, format{self._level_template,&lt;br /&gt;
                level = entries[a][2],&lt;br /&gt;
            })&lt;br /&gt;
            &lt;br /&gt;
            if count % 2 == 0 then&lt;br /&gt;
                table.insert(self._rows, self._row_starter)&lt;br /&gt;
                self:embed_table(entries[a + 1])&lt;br /&gt;
                self:embed_table(entries[a])&lt;br /&gt;
                table.insert(self._rows, self._row_starter)&lt;br /&gt;
            elseif a == 1 then&lt;br /&gt;
                table.insert(self._rows, self._row_starter)&lt;br /&gt;
                self:embed_table(entries[a])&lt;br /&gt;
                table.insert(self._rows, self._embedded_start)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._table_end)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminShipInfo:build_one(class, remove_headers)&lt;br /&gt;
    self:build_table(class, remove_headers)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminShipInfo:build_all()&lt;br /&gt;
    self:build_table(&amp;quot;All&amp;quot;, true)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminShipInfo:Main(args)&lt;br /&gt;
    self:sort_arguments(args)&lt;br /&gt;
    --mw.log(self._sorted_entries[&amp;quot;Light Cruiser&amp;quot;][&amp;quot;111&amp;quot;][1][1])&lt;br /&gt;
    table.insert(self._rows, &amp;quot;__NOTOC__&amp;quot;)&lt;br /&gt;
    if args[&amp;quot;class&amp;quot;] then return self:build_one(args[&amp;quot;class&amp;quot;], args[&amp;quot;remove_headers&amp;quot;]) end&lt;br /&gt;
    if args[&amp;quot;all&amp;quot;] then return self:build_all() end&lt;br /&gt;
    self:build_table(&amp;quot;Battleship&amp;quot;)&lt;br /&gt;
    self:build_table(&amp;quot;Carrier&amp;quot;)&lt;br /&gt;
    self:build_table(&amp;quot;Heavy Cruiser&amp;quot;)&lt;br /&gt;
    self:build_table(&amp;quot;Light Cruiser&amp;quot;)&lt;br /&gt;
    self:build_table(&amp;quot;Destroyer&amp;quot;)&lt;br /&gt;
    self:build_table(&amp;quot;Submarine&amp;quot;)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminShipInfo.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminShipInfo:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminShipInfo&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:ShipRemodelListKai&amp;diff=88248</id>
		<title>Module:ShipRemodelListKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:ShipRemodelListKai&amp;diff=88248"/>
		<updated>2015-07-05T21:25:03Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: Why are you formatting ship codes for the ammo/steel requirements?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local BaseTable = require('Module:BaseTable')&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local ResourceIcons = require('Module:ResourceIcons')&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local ShipRemodelListKai = BaseTable{&lt;br /&gt;
	_header_template = [[! colspan=5 | Before Remodel&lt;br /&gt;
! rowspan=2 style=&amp;quot;width:30px;&amp;quot; | ⇒&lt;br /&gt;
! colspan=3 | After Remodel&lt;br /&gt;
! colspan=2 | Required Resources&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 50px;&amp;quot; | No.&lt;br /&gt;
! style=&amp;quot;width: 100px;&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;width: 30px;&amp;quot; | Type&lt;br /&gt;
! style=&amp;quot;width: 30px;&amp;quot; | Level&lt;br /&gt;
! style=&amp;quot;width: 30px;&amp;quot; | ${blueprint}&lt;br /&gt;
! style=&amp;quot;width: 50px;&amp;quot; | No.&lt;br /&gt;
! style=&amp;quot;width: 100px;&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;width: 30px;&amp;quot; | Type&lt;br /&gt;
! style=&amp;quot;width: 30px; text-align: center; vertical-align: middle; background-color: darkgoldenrod;&amp;quot; | ${ammo}&lt;br /&gt;
! style=&amp;quot;width: 30px; text-align: center; vertical-align: middle; background-color: lightgrey;&amp;quot; | ${steel}]],&lt;br /&gt;
	_header_template_bottom = [[! style=&amp;quot;width: 50px;&amp;quot; | No.&lt;br /&gt;
! style=&amp;quot;width: 100px;&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;width: 30px;&amp;quot; | Type&lt;br /&gt;
! style=&amp;quot;width: 30px;&amp;quot; | Level&lt;br /&gt;
! style=&amp;quot;width: 30px;&amp;quot; | ${blueprint}&lt;br /&gt;
! rowspan=2 style=&amp;quot;width:30px;&amp;quot; | ⇒&lt;br /&gt;
! style=&amp;quot;width: 50px;&amp;quot; | No.&lt;br /&gt;
! style=&amp;quot;width: 100px;&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;width: 30px;&amp;quot; | Type&lt;br /&gt;
! style=&amp;quot;width: 30px; text-align: center; vertical-align: middle; background-color: darkgoldenrod;&amp;quot; | ${ammo}&lt;br /&gt;
! style=&amp;quot;width: 30px; text-align: center; vertical-align: middle; background-color: lightgrey;&amp;quot; | ${steel}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=5 | Before Remodel&lt;br /&gt;
! colspan=3 | After Remodel&lt;br /&gt;
! colspan=2 | Required Resources]],&lt;br /&gt;
	_columns = {&lt;br /&gt;
		&amp;quot;id&amp;quot;,&lt;br /&gt;
		&amp;quot;name&amp;quot;,&lt;br /&gt;
		&amp;quot;type&amp;quot;,&lt;br /&gt;
		&amp;quot;remodel_level&amp;quot;,&lt;br /&gt;
		&amp;quot;remodel_blueprint&amp;quot;,&lt;br /&gt;
		&amp;quot;arrow&amp;quot;,&lt;br /&gt;
		&amp;quot;id_after&amp;quot;,&lt;br /&gt;
		&amp;quot;name_after&amp;quot;,&lt;br /&gt;
		&amp;quot;type_after&amp;quot;,&lt;br /&gt;
		&amp;quot;ammo&amp;quot;,&lt;br /&gt;
		&amp;quot;steel&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	_empty_cell = [[| style=&amp;quot;text-align: center; vertical-align: middle;&amp;quot; | -]],&lt;br /&gt;
	_column_empty_cells = {&lt;br /&gt;
		arrow = [[| style=&amp;quot;text-align: center; vertical-align: middle;&amp;quot; | ⇒]],&lt;br /&gt;
	},&lt;br /&gt;
	_item_class = Ship,&lt;br /&gt;
	_dash = &amp;quot;-&amp;quot;,&lt;br /&gt;
	_arrow = &amp;quot;⇒&amp;quot;,&lt;br /&gt;
	_question_marks = &amp;quot;??&amp;quot;,&lt;br /&gt;
	_fragment_prefix = &amp;quot;shipremodellistkai&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ShipRemodelListKai:id(ship)&lt;br /&gt;
	return {values = {value = Formatting:format_stat(ship:id())}, &lt;br /&gt;
		bg_color = self._transparent, --Formatting:format_ship_back(back), &lt;br /&gt;
		extra_style = &amp;quot;&amp;quot;, --Formatting:extra_style_background_image(back and back &amp;gt; 7, back and back &amp;gt; 6) or &amp;quot;&amp;quot;&lt;br /&gt;
		text_align = self._center_align&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ShipRemodelListKai:name(ship)&lt;br /&gt;
	return {values = {value = Formatting:id_span(tostring(ship:api_id() or mw.ustring.lower(mw.ustring.gsub(ship:name(), &amp;quot;%s+&amp;quot;))), self._fragment_prefix, Formatting:format_link(ship:link()))}, bg_color = self._transparent, text_align = self._center_align}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ShipRemodelListKai:type(ship)&lt;br /&gt;
	return {values = {value = Formatting:format_ship_code(ship:type())}, bg_color = self._transparent, text_align = self._center_align}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ShipRemodelListKai:remodel_level(ship)&lt;br /&gt;
	self._remodel_to = ship:remodel_to()&lt;br /&gt;
	local remodel_level = false&lt;br /&gt;
	if self._remodel_to then&lt;br /&gt;
		self._remodel_to = Ship(self._remodel_to)&lt;br /&gt;
		remodel_level = self._remodel_to:remodel_level()&lt;br /&gt;
	end&lt;br /&gt;
	return {values = {value = remodel_level == false and self._dash or Formatting:format_stat(remodel_level)}, bg_color = self._transparent, text_align = self._center_align}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ShipRemodelListKai:remodel_blueprint()&lt;br /&gt;
	local value = self._dash&lt;br /&gt;
	if self._remodel_to then&lt;br /&gt;
		value = Formatting:format_blueprint_requirement_simple(self._remodel_to:remodel_blueprint(), true)&lt;br /&gt;
	elseif self._remodel_to == nil then&lt;br /&gt;
		value = self._question_marks&lt;br /&gt;
	end&lt;br /&gt;
	return {values = {value = value}, bg_color = self._transparent, text_align = self._center_align}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ShipRemodelListKai:arrow()&lt;br /&gt;
	return {values = {value = self._arrow}, bg_color = self._transparent, text_align = self._center_align}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ShipRemodelListKai:id_after()&lt;br /&gt;
	local id_after = self._remodel_to == nil and self._question_marks or self._dash&lt;br /&gt;
	if self._remodel_to then&lt;br /&gt;
		id_after = Formatting:format_stat(self._remodel_to:id())&lt;br /&gt;
	end&lt;br /&gt;
	return {values = {value = id_after}, &lt;br /&gt;
		bg_color = self._transparent, --Formatting:format_ship_back(back), &lt;br /&gt;
		extra_style = &amp;quot;&amp;quot;, --Formatting:extra_style_background_image(back and back &amp;gt; 7, back and back &amp;gt; 6) or &amp;quot;&amp;quot;&lt;br /&gt;
		text_align = self._center_align&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ShipRemodelListKai:name_after()&lt;br /&gt;
	local name_after = self._remodel_to == nil and self._question_marks or self._dash&lt;br /&gt;
	if self._remodel_to then&lt;br /&gt;
		name_after = Formatting:fragment_link(tostring(self._remodel_to:api_id() or mw.ustring.lower(mw.ustring.gsub(self._remodel_to:name(), &amp;quot;%s+&amp;quot;))), self._fragment_prefix, self._remodel_to:name())&lt;br /&gt;
	end&lt;br /&gt;
	return {values = {value = name_after}, bg_color = self._transparent, text_align = self._center_align}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ShipRemodelListKai:type_after()&lt;br /&gt;
	local type_after = self._remodel_to == nil and self._question_marks or self._dash&lt;br /&gt;
	if self._remodel_to then&lt;br /&gt;
		type_after = Formatting:format_ship_code(self._remodel_to:type())&lt;br /&gt;
	end&lt;br /&gt;
	return {values = {value = type_after}, bg_color = self._transparent, text_align = self._center_align}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ShipRemodelListKai:ammo()&lt;br /&gt;
	local ammo = self._remodel_to == nil and self._question_marks or self._dash&lt;br /&gt;
	if self._remodel_to then&lt;br /&gt;
		ammo = self._remodel_to:remodel_cost().ammo&lt;br /&gt;
	end&lt;br /&gt;
	return {values = {value = ammo}, bg_color = self._transparent, text_align = self._center_align}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ShipRemodelListKai:steel()&lt;br /&gt;
	local steel = self._remodel_to == nil and self._question_marks or self._dash&lt;br /&gt;
	if self._remodel_to then&lt;br /&gt;
		steel = self._remodel_to:remodel_cost().steel&lt;br /&gt;
	end&lt;br /&gt;
	return {values = {value = steel}, bg_color = self._transparent, text_align = self._center_align}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
ShipRemodelListKai.process_item_key = Ship.process_item_key&lt;br /&gt;
&lt;br /&gt;
ShipRemodelListKai.build_rows = ShipRemodelListKai.build_rows_breaks_as_empty_rows&lt;br /&gt;
&lt;br /&gt;
function ShipRemodelListKai:create_header()&lt;br /&gt;
	local header_icons = {&lt;br /&gt;
		blueprint = ResourceIcons.blueprint,&lt;br /&gt;
		ammo = ResourceIcons.ammo,&lt;br /&gt;
		steel = ResourceIcons.steel,&lt;br /&gt;
	}&lt;br /&gt;
	for key, value in pairs(header_icons) do&lt;br /&gt;
		header_icons[key] = Formatting:format_image{value, caption = Formatting:format_resource_name(key), size = key == &amp;quot;blueprint&amp;quot; and &amp;quot;x18px&amp;quot; or nil}&lt;br /&gt;
	end&lt;br /&gt;
	self._header = format(self._header_template, header_icons)&lt;br /&gt;
	self._header_bottom = format(self._header_template_bottom, header_icons)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return ShipRemodelListKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88098</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88098"/>
		<updated>2015-05-09T10:57:00Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id} wikia-menu-button&amp;quot;&amp;gt;Click this button to view the fleet&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[&amp;lt;table class=&amp;quot;nanaminfleetkai&amp;quot;&amp;gt;]],&lt;br /&gt;
    _table_end = [[&amp;lt;/table&amp;gt;]],&lt;br /&gt;
    _row_starter = [[&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;]],&lt;br /&gt;
    _added_cell_template = [[&amp;lt;td colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color:${bg_color};&amp;quot;&amp;gt;'''${content}'''&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _ship_template = [[&amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;${ship_card}&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _equip_template = [[&amp;lt;td&amp;gt;${equip_icon}&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;${style}&amp;quot;&amp;gt;${equip_link}&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _blank_entry = [[&amp;lt;td style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _id = &amp;quot;&amp;quot;,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    math.randomseed(os.time())&lt;br /&gt;
    math.random(); math.random(); math.random()&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. (self._args[&amp;quot;hq&amp;quot;] or &amp;quot;0&amp;quot;) .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        ship_card = ship and ship:name() or &amp;quot;Invalid Ship Name&amp;quot;&lt;br /&gt;
    elseif ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, format{self._ship_template, ship_card = ship_card})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_link, style&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
        style = &amp;quot;background-color:&amp;quot; .. self._equip_locked_bg .. &amp;quot;;&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
        style = &amp;quot;background-color:&amp;quot; .. self._equip_locked_bg .. &amp;quot;;&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
            equip_link = Functions.shorten_name(&amp;quot;&amp;quot;, equip:name())&lt;br /&gt;
        else&lt;br /&gt;
            equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot;, link = &amp;quot;&amp;quot; }&lt;br /&gt;
            equip_link = Formatting:format_link(Functions.shorten_name(equip:link()))&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
        equip_icon = equip_icon or &amp;quot;&amp;quot;,&lt;br /&gt;
        style = style or &amp;quot;&amp;quot;,&lt;br /&gt;
        equip_link = equip_link,&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            table.insert(self._rows, self._blank_entry)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                table.insert(self._rows, self._blank_entry)&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, self._blank_entry)&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    if not self._args[&amp;quot;hq&amp;quot;] then elos = elos .. &amp;quot; #ERROR:MissingHQ&amp;quot; end&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
                card = ship:name()&lt;br /&gt;
                content = content .. &amp;quot;*&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            content = content .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    self:generate_id()&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_button_template, id = self._id})&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_div_start, id = self._id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88097</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88097"/>
		<updated>2015-05-08T12:20:07Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id} wikia-menu-button&amp;quot;&amp;gt;Click this button to view the fleet&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[&amp;lt;table class=&amp;quot;nanaminfleetkai&amp;quot;&amp;gt;]],&lt;br /&gt;
    _table_end = [[&amp;lt;/table&amp;gt;]],&lt;br /&gt;
    _row_starter = [[&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;]],&lt;br /&gt;
    _added_cell_template = [[&amp;lt;td colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color:${bg_color};&amp;quot;&amp;gt;'''${content}'''&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _ship_template = [[&amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;${ship_card}&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _equip_template = [[&amp;lt;td&amp;gt;${equip_icon}&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;${style}&amp;quot;&amp;gt;${equip_link}&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _blank_entry = [[&amp;lt;td style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _id = &amp;quot;&amp;quot;,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    math.randomseed(os.time())&lt;br /&gt;
    math.random(); math.random(); math.random()&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        ship_card = ship and ship:name() or &amp;quot;Invalid Ship Name&amp;quot;&lt;br /&gt;
    elseif ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, format{self._ship_template, ship_card = ship_card})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_link, style&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
        style = &amp;quot;background-color:&amp;quot; .. self._equip_locked_bg .. &amp;quot;;&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
        style = &amp;quot;background-color:&amp;quot; .. self._equip_locked_bg .. &amp;quot;;&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
            equip_link = Functions.shorten_name(&amp;quot;&amp;quot;, equip:name())&lt;br /&gt;
        else&lt;br /&gt;
            equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot;, link = &amp;quot;&amp;quot; }&lt;br /&gt;
            equip_link = Formatting:format_link(Functions.shorten_name(equip:link()))&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
        equip_icon = equip_icon or &amp;quot;&amp;quot;,&lt;br /&gt;
        style = style or &amp;quot;&amp;quot;,&lt;br /&gt;
        equip_link = equip_link,&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            table.insert(self._rows, self._blank_entry)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                table.insert(self._rows, self._blank_entry)&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, self._blank_entry)&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
                card = ship:name()&lt;br /&gt;
                content = content .. &amp;quot;*&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            content = content .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    self:generate_id()&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_button_template, id = self._id})&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_div_start, id = self._id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88096</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88096"/>
		<updated>2015-05-08T12:19:56Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id} wikia-menu-button&amp;quot;&amp;gt;Click this button to view the fleet&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[&amp;lt;table class=&amp;quot;nanaminfleetkai&amp;quot;&amp;gt;]],&lt;br /&gt;
    _table_end = [[&amp;lt;/table&amp;gt;]],&lt;br /&gt;
    _row_starter = [[&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;]],&lt;br /&gt;
    _added_cell_template = [[&amp;lt;td colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color:${bg_color};&amp;quot;&amp;gt;'''${content}'''&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _ship_template = [[&amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;${ship_card}&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _equip_template = [[&amp;lt;td&amp;gt;${equip_icon}&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;${style}&amp;quot;&amp;gt;${equip_link}&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _blank_entry = [[&amp;lt;td style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _id = &amp;quot;&amp;quot;,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    math.randomseed(os.time())&lt;br /&gt;
    math.random(); math.random(); math.random()&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        ship_card = ship and ship:name() or &amp;quot;Invalid Ship Name&amp;quot;&lt;br /&gt;
    elseif ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, format{self._ship_template, ship_card = ship_card})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_link, style&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
        style = &amp;quot;background-color:&amp;quot; .. self._equip_locked_bg .. &amp;quot;;&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
        style = &amp;quot;background-color:&amp;quot; .. self._equip_locked_bg .. &amp;quot;;&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
            equip_link = Functions.shorten_name(&amp;quot;&amp;quot;, equip:name())&lt;br /&gt;
        else&lt;br /&gt;
            equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot;, link = &amp;quot;&amp;quot; }&lt;br /&gt;
            mw.log(Functions.shorten_name(equip:link()))&lt;br /&gt;
            equip_link = Formatting:format_link(Functions.shorten_name(equip:link()))&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
        equip_icon = equip_icon or &amp;quot;&amp;quot;,&lt;br /&gt;
        style = style or &amp;quot;&amp;quot;,&lt;br /&gt;
        equip_link = equip_link,&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            table.insert(self._rows, self._blank_entry)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                table.insert(self._rows, self._blank_entry)&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, self._blank_entry)&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
                card = ship:name()&lt;br /&gt;
                content = content .. &amp;quot;*&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            content = content .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    self:generate_id()&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_button_template, id = self._id})&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_div_start, id = self._id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90544</id>
		<title>Module:NanaminFunctions</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90544"/>
		<updated>2015-05-08T12:19:16Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local Ship = require(&amp;quot;Module:Ship&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local NanaminFunctions = {}&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.split(haystack, needle)&lt;br /&gt;
    local special_inputs = {&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount&amp;quot;,&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount Kai&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    local result = {}&lt;br /&gt;
    while mw.ustring.find(haystack, needle) do&lt;br /&gt;
        local split = mw.ustring.find(haystack, needle)&lt;br /&gt;
        local input = mw.ustring.sub(haystack, 1, split - 1)&lt;br /&gt;
        &lt;br /&gt;
        for _, value in pairs(special_inputs) do&lt;br /&gt;
            if mw.ustring.sub(haystack, 1, #value) == value then&lt;br /&gt;
                input = mw.ustring.sub(haystack, 1, #value)&lt;br /&gt;
                haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
                split = mw.ustring.find(haystack, needle) or 0&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        table.insert(result, input)&lt;br /&gt;
        haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
        if split == 0 then haystack = &amp;quot;&amp;quot; end&lt;br /&gt;
    end&lt;br /&gt;
    if haystack ~= &amp;quot;&amp;quot; then table.insert(result, haystack) end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_fighter_power(current_fp, equip, planes)&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        current_fp = current_fp + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    return current_fp&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos_ship(current_elos, entry, use_los)&lt;br /&gt;
    if entry[3] == nil then return current_elos end&lt;br /&gt;
    local ship = Ship(entry[1], entry[2])&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if use_los then&lt;br /&gt;
        los = tonumber(entry[3])&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos(current_elos, equip)&lt;br /&gt;
    --[[Effective LoS = Dive Bomber LoS x (1.04) + Torpedo Bomber LoS x (1.37)&lt;br /&gt;
    + Carrier-based Recon Plane LoS x (1.66) + Recon Seaplane LoS x (2.00)&lt;br /&gt;
    + Seaplane Bomber LoS x (1.78) + Small Radar LoS x (1.00) + Large Radar LoS x (0.99)&lt;br /&gt;
    + Searchlight LoS x (0.91) + √(base LoS of each ship) * (1.69)&lt;br /&gt;
    + (HQ Lv. rounded up to the next multiple of 5) x (-0.61)--]]&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        current_elos = current_elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.get_hq_bracket(hq_level)&lt;br /&gt;
    local bracket = tonumber(hq_level or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return bracket&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.process_legacy_name(name)&lt;br /&gt;
    local names = {&lt;br /&gt;
        [&amp;quot;12cm Naval Gun&amp;quot;] = &amp;quot;12cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Naval Gun&amp;quot;] = &amp;quot;12.7cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin Mount Type-B Kai 2&amp;quot;] = &amp;quot;12.7cm Twin Gun Mount Model B Kai Ni&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;14cm Naval Gun&amp;quot;] = &amp;quot;14cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Main)&amp;quot;] = &amp;quot;15.5cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.2) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.2) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.3) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.3) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;SKC34 20.3cm Twin Cannon&amp;quot;] = &amp;quot;SKC34 20.3cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Prototype 41cm Triple Cannon&amp;quot;] = &amp;quot;Prototype 41cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 51cm Twin Cannon&amp;quot;] = &amp;quot;Prototype 51cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;15.2cm Naval Gun&amp;quot;] = &amp;quot;15.2cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Secondary)&amp;quot;] = &amp;quot;15.5cm Triple Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15cm Twin Gun Mount&amp;quot;] = &amp;quot;15cm Twin Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;8cm Twin High-angle Mount&amp;quot;] = &amp;quot;8cm High-angle Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount (Carriage)&amp;quot;] = &amp;quot;10cm Twin High-angle Carriage Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;12.7cm High-angle Mount&amp;quot;] = &amp;quot;12.7cm Single High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount (Late Model)&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount (Late Model)&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;12.7cm High-angle Gun + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;12.7mm Machine Gun&amp;quot;] = &amp;quot;12.7mm Single Machine Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Autocannon&amp;quot;] = &amp;quot;25mm Single Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;BI-type 40mm Twin Machine Gun&amp;quot;] = &amp;quot;Type Bi 40mm Twin Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Triple Autocannon Mount (Concentrated Deployment)&amp;quot;] = &amp;quot;25mm Triple Autocannon Mount Concentrated Deployment&amp;quot;,  &lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;61cm Quad Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quad Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quint Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quintuple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Hull-mount O2 Torpedoes&amp;quot;] = &amp;quot;53cm Bow (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Submarine Bow Torpedo Mount (8 tubes)&amp;quot;] = &amp;quot;Submarine 53cm Bow Torpedo Mount (8 tubes)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type A Ko-hyoteki&amp;quot;] = &amp;quot;Kouhyouteki&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 21&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter (Skilled)&amp;quot;] = &amp;quot;Type 0 Fighter Model 21 (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 52 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 52&amp;quot;,&lt;br /&gt;
        [&amp;quot;Zero Fighter Type 52 Type C (601 Air Group)&amp;quot;] = &amp;quot;Zero Fighter Model 52C (601 Air Group)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Shiden Kai 2&amp;quot;] = &amp;quot;Shiden Kai Ni&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 62 Zero Fighter-bomber&amp;quot;] = &amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 2 Recon Aircraft&amp;quot;] = &amp;quot;Type 2 Reconnaissance Aircraft&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 0 Recon Seaplane&amp;quot;] = &amp;quot;Type 0 Reconnaissance Seaplane&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 98 Recon Seaplane (Night Recon)&amp;quot;] = &amp;quot;Type 98 Reconnaissance Seaplane (Night Recon)&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Ka-type Observation Autogyro&amp;quot;] = &amp;quot;No. Ka Observation Autogyro&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Spotter/Liaison (ASW)&amp;quot;] = &amp;quot;Type 3 Command Liaison Aircraft (ASW)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 22 Surface RADAR Kai 4&amp;quot;] = &amp;quot;No. 22 Surface Radar Kai Yon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 13 AIR RADAR Kai&amp;quot;] = &amp;quot;No. 13 Air Radar Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Air RADAR Kai&amp;quot;] = &amp;quot;No. 21 Air Radar Kai&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 93 Passive SONAR&amp;quot;] = &amp;quot;Type 93 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 SONAR&amp;quot;] = &amp;quot;Type 3 Active Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Passive SONAR&amp;quot;] = &amp;quot;Type 0 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 94 Depth Charge&amp;quot;] = &amp;quot;Type 94 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Depth Charge&amp;quot;] = &amp;quot;Type 3 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 91 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 91 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 1 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 1 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Improved Steam Turbine&amp;quot;] = &amp;quot;Improved Kanhon Type Turbine&amp;quot;,&lt;br /&gt;
        [&amp;quot;Enhanced Steam Boiler&amp;quot;] = &amp;quot;Enhanced Kanhon Type Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;New High Pressure-Temperature Steam Boiler&amp;quot;] = &amp;quot;New Model High Temperature High Pressure Boiler&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Repair Team&amp;quot;] = &amp;quot;Emergency Repair Personnel&amp;quot;,&lt;br /&gt;
        [&amp;quot;Repair Goddess&amp;quot;] = &amp;quot;Emergency Repair Goddess&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Medium)&amp;quot;] = &amp;quot;Extension Bulge (Medium)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Large)&amp;quot;] = &amp;quot;Extension Bulge (Large)&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Drum Canister&amp;quot;] = &amp;quot;Drum Canister (Transport Use)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Daihatsu-class Landing Craft&amp;quot;] = &amp;quot;Daihatsu Landing Craft&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    --Radar/sonar names without any special pieces&lt;br /&gt;
    name = name:gsub(&amp;quot;^Type%s(.+)%sRADAR$&amp;quot;, &amp;quot;No. %1 Radar&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    name = names[name] or name&lt;br /&gt;
    return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.shorten_name(page, name)&lt;br /&gt;
    if not name then&lt;br /&gt;
        name = page&lt;br /&gt;
    end&lt;br /&gt;
    --This takes an equipment name listed on Sandbox/EquipmentListKai/TypeSorted&lt;br /&gt;
    --and switches it with a shorter version of the name.&lt;br /&gt;
    local shortened = {&lt;br /&gt;
        [&amp;quot;12cm Single Gun Mount&amp;quot;] = &amp;quot;12cm Naval Gun&amp;quot; ,&lt;br /&gt;
        [&amp;quot;12.7cm Single Gun Mount&amp;quot;] = &amp;quot;12.7cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin Gun Mount Model B Kai Ni&amp;quot;] = &amp;quot;12.7cm Twin Mount Type-B Kai 2&amp;quot; ,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;14cm Single Gun Mount&amp;quot;] = &amp;quot;14cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount&amp;quot;] = &amp;quot;15.5cm Triple Gun Mount (Main)&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm (No.2) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm(no.2) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm (No.3) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm(no.3) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;SKC34 20.3cm Twin Gun Mount&amp;quot;] = &amp;quot;SKC34 20.3cm Twin Cannon&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;35.6cm Twin Gun Mount (Dazzle Camouflage)&amp;quot;] = &amp;quot;35.6cm Twin Gun Mount (Dazzle)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 41cm Triple Gun Mount&amp;quot;] = &amp;quot;Prototype 41cm Triple Cannon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 51cm Twin Gun Mount&amp;quot;] = &amp;quot;Prototype 51cm Twin Cannon&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;15.2cm Single Gun Mount&amp;quot;] = &amp;quot;15.2cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Secondary Gun Mount&amp;quot;] = &amp;quot;15.5cm Triple Gun (Secondary)&amp;quot;,&lt;br /&gt;
        [&amp;quot;15cm Twin Secondary Gun Mount&amp;quot;] = &amp;quot;15cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;OTO 152mm Triple Rapid Fire Gun Mount&amp;quot;] = &amp;quot;152mm Triple Rapid Fire Gun&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;8cm High-angle Gun&amp;quot;] = &amp;quot;8cm Twin High-angle Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount&amp;quot;] = &amp;quot;10cm Twin HA Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Carriage Mount&amp;quot;] = &amp;quot;10cm Twin HA Gun(Carriage)&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;10cm Twin HA Gun + AAFD&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Single High-angle Gun Mount&amp;quot;] = &amp;quot;12.7cm High-angle Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Gun Mount (Late Model)&amp;quot;] = &amp;quot;12.7cm Twin HA Gun (L M)&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm High-angle Gun + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;12.7cm High-angle Gun + AAFD&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;12.7mm Single Machine Gun Mount&amp;quot;] = &amp;quot;12.7mm Machine Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Single Autocannon Mount&amp;quot;] = &amp;quot;25mm Autocannon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type Bi 40mm Twin Autocannon Mount&amp;quot;] = &amp;quot;BI-type 40mm Twin Machine Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Triple Autocannon Mount Concentrated Deployment&amp;quot;] = &amp;quot;25mm Triple Autocannon (C D)&amp;quot;,  &lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;61cm Quadruple Torpedo Mount&amp;quot;] = &amp;quot;61cm Quad Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Triple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Triple (Oxygen) Torpedo&amp;quot;,               &lt;br /&gt;
        [&amp;quot;61cm Quadruple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Quad Oxygen Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quintuple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Quint Oxygen Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Bow (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;53cm Hull-mount O2 Torpedoes&amp;quot;,&lt;br /&gt;
        [&amp;quot;Submarine 53cm Bow Torpedo Mount (8 tubes)&amp;quot;] = &amp;quot;53cm Submarine Bow Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;Kouhyouteki&amp;quot;] = &amp;quot;Type A Ko-hyoteki&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype FaT Type 95 Oxygen Torpedo Kai&amp;quot;] = &amp;quot;Prototype FaT Type 95 Torpedo&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 21&amp;quot;] = &amp;quot;Type 21 Zero Fighter&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 21 (Skilled)&amp;quot;] = &amp;quot;Type 21 Zero Fighter (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 52&amp;quot;] = &amp;quot;Type 52 Zero Fighter&amp;quot;,&lt;br /&gt;
        [&amp;quot;Zero Fighter Model 52C (601 Air Group)&amp;quot;] = &amp;quot;Zero Fighter Type 52 C (601)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (Skilled)&amp;quot;] = &amp;quot;Type 97 Torp Bomber (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (931 Air Group)&amp;quot;] = &amp;quot;Type 97 Torpedo Bomber (931)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (Tomonaga Squadron)&amp;quot;] = &amp;quot;Torpeo Bomber (Tomonaga)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Tenzan Model 12 (Tomonaga Squadron)&amp;quot;] = &amp;quot;Tenzan Model 12 (Tomonaga)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;] = &amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 99 Dive Bomber (Egusa Squadron)&amp;quot;] = &amp;quot;Type 99 Dive Bomber (Egusa)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 2 Reconnaissance Aircraft&amp;quot;] = &amp;quot;Type 2 Recon Aircraft&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 0 Reconnaissance Seaplane&amp;quot;] = &amp;quot;Type 0 Recon Seaplane&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 98 Reconnaissance Seaplane (Night Recon)&amp;quot;] = &amp;quot;Night Recon&amp;quot;,&lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;No. Ka Observation Autogyro&amp;quot;] = &amp;quot;Ka-type Observation Autogyro&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Command Liaison Aircraft (ASW)&amp;quot;] = &amp;quot;Type 3 Spotter/Liaison (ASW)&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;No. 13 Air Radar&amp;quot;] = &amp;quot;Type 13 Air RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 14 Air Radar&amp;quot;] = &amp;quot;Type 14 Air RADAR &amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 21 Air Radar&amp;quot;] = &amp;quot;Type 21 Air RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 22 Surface Radar&amp;quot;] = &amp;quot;Type 22 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 33 Surface Radar&amp;quot;] = &amp;quot;Type 33 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 32 Surface Radar&amp;quot;] = &amp;quot;Type 32 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 22 Surface Radar Kai Yon&amp;quot;] = &amp;quot;Type 22 Surface RADAR Kai 4&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 13 Air Radar Kai&amp;quot;] = &amp;quot;Type 13 AIR RADAR Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 21 Air Radar Kai&amp;quot;] = &amp;quot;Type 21 Air RADAR Kai&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 93 Passive Sonar&amp;quot;] = &amp;quot;Type 93 Passive SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Active Sonar&amp;quot;] = &amp;quot;Type 3 SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Passive Sonar&amp;quot;] = &amp;quot;Type 0 Passive SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 94 Depth Charge Projector&amp;quot;] = &amp;quot;Type 94 Depth Charge&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Depth Charge Projector&amp;quot;] = &amp;quot;Type 3 Depth Charge&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 91 Armor Piercing Shell&amp;quot;] = &amp;quot;Type 91 Armor-Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 1 Armor Piercing Shell&amp;quot;] = &amp;quot;Type 1 Armor-Piercing Shell&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Improved Kanhon Type Turbine&amp;quot;] = &amp;quot;Improved Steam Turbine&amp;quot;,&lt;br /&gt;
        [&amp;quot;Enhanced Kanhon Type Boiler&amp;quot;] = &amp;quot;Enhanced Steam Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;New Model High Temperature High Pressure Boiler&amp;quot;] = &amp;quot;High Pressure-Temperature Boiler&amp;quot;,&lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;Emergency Repair Personnel&amp;quot;] = &amp;quot;Repair Team&amp;quot;,&lt;br /&gt;
        [&amp;quot;Emergency Repair Goddess&amp;quot;] = &amp;quot;Repair Goddess&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Extension Bulge (Medium)&amp;quot;] = &amp;quot;Anti-torpedo Bulge (Medium)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Extension Bulge (Large)&amp;quot;] = &amp;quot;Anti-torpedo Bulge (Large)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Pugliese Underwater Protection Bulkhead&amp;quot;] = &amp;quot;Pugliese Protection Bulkhead&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Skilled Carrier-based Aircraft Maintenance Personnel&amp;quot;] = &amp;quot;SCAMP&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Drum Canister (Transport Use)&amp;quot;] = &amp;quot;Drum Canister&amp;quot;,&lt;br /&gt;
        [&amp;quot;Daihatsu Landing Craft&amp;quot;] = &amp;quot;Daihatsu-class Landing Craft&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if page ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        return page, shortened[name] or name&lt;br /&gt;
    else&lt;br /&gt;
        return shortened[name] or name&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFunctions&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90543</id>
		<title>Module:NanaminFunctions</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90543"/>
		<updated>2015-05-08T12:18:21Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local Ship = require(&amp;quot;Module:Ship&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local NanaminFunctions = {}&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.split(haystack, needle)&lt;br /&gt;
    local special_inputs = {&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount&amp;quot;,&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount Kai&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    local result = {}&lt;br /&gt;
    while mw.ustring.find(haystack, needle) do&lt;br /&gt;
        local split = mw.ustring.find(haystack, needle)&lt;br /&gt;
        local input = mw.ustring.sub(haystack, 1, split - 1)&lt;br /&gt;
        &lt;br /&gt;
        for _, value in pairs(special_inputs) do&lt;br /&gt;
            if mw.ustring.sub(haystack, 1, #value) == value then&lt;br /&gt;
                input = mw.ustring.sub(haystack, 1, #value)&lt;br /&gt;
                haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
                split = mw.ustring.find(haystack, needle) or 0&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        table.insert(result, input)&lt;br /&gt;
        haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
        if split == 0 then haystack = &amp;quot;&amp;quot; end&lt;br /&gt;
    end&lt;br /&gt;
    if haystack ~= &amp;quot;&amp;quot; then table.insert(result, haystack) end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_fighter_power(current_fp, equip, planes)&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        current_fp = current_fp + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    return current_fp&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos_ship(current_elos, entry, use_los)&lt;br /&gt;
    if entry[3] == nil then return current_elos end&lt;br /&gt;
    local ship = Ship(entry[1], entry[2])&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if use_los then&lt;br /&gt;
        los = tonumber(entry[3])&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos(current_elos, equip)&lt;br /&gt;
    --[[Effective LoS = Dive Bomber LoS x (1.04) + Torpedo Bomber LoS x (1.37)&lt;br /&gt;
    + Carrier-based Recon Plane LoS x (1.66) + Recon Seaplane LoS x (2.00)&lt;br /&gt;
    + Seaplane Bomber LoS x (1.78) + Small Radar LoS x (1.00) + Large Radar LoS x (0.99)&lt;br /&gt;
    + Searchlight LoS x (0.91) + √(base LoS of each ship) * (1.69)&lt;br /&gt;
    + (HQ Lv. rounded up to the next multiple of 5) x (-0.61)--]]&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        current_elos = current_elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.get_hq_bracket(hq_level)&lt;br /&gt;
    local bracket = tonumber(hq_level or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return bracket&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.process_legacy_name(name)&lt;br /&gt;
    local names = {&lt;br /&gt;
        [&amp;quot;12cm Naval Gun&amp;quot;] = &amp;quot;12cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Naval Gun&amp;quot;] = &amp;quot;12.7cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin Mount Type-B Kai 2&amp;quot;] = &amp;quot;12.7cm Twin Gun Mount Model B Kai Ni&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;14cm Naval Gun&amp;quot;] = &amp;quot;14cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Main)&amp;quot;] = &amp;quot;15.5cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.2) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.2) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.3) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.3) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;SKC34 20.3cm Twin Cannon&amp;quot;] = &amp;quot;SKC34 20.3cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Prototype 41cm Triple Cannon&amp;quot;] = &amp;quot;Prototype 41cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 51cm Twin Cannon&amp;quot;] = &amp;quot;Prototype 51cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;15.2cm Naval Gun&amp;quot;] = &amp;quot;15.2cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Secondary)&amp;quot;] = &amp;quot;15.5cm Triple Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15cm Twin Gun Mount&amp;quot;] = &amp;quot;15cm Twin Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;8cm Twin High-angle Mount&amp;quot;] = &amp;quot;8cm High-angle Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount (Carriage)&amp;quot;] = &amp;quot;10cm Twin High-angle Carriage Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;12.7cm High-angle Mount&amp;quot;] = &amp;quot;12.7cm Single High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount (Late Model)&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount (Late Model)&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;12.7cm High-angle Gun + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;12.7mm Machine Gun&amp;quot;] = &amp;quot;12.7mm Single Machine Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Autocannon&amp;quot;] = &amp;quot;25mm Single Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;BI-type 40mm Twin Machine Gun&amp;quot;] = &amp;quot;Type Bi 40mm Twin Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Triple Autocannon Mount (Concentrated Deployment)&amp;quot;] = &amp;quot;25mm Triple Autocannon Mount Concentrated Deployment&amp;quot;,  &lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;61cm Quad Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quad Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quint Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quintuple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Hull-mount O2 Torpedoes&amp;quot;] = &amp;quot;53cm Bow (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Submarine Bow Torpedo Mount (8 tubes)&amp;quot;] = &amp;quot;Submarine 53cm Bow Torpedo Mount (8 tubes)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type A Ko-hyoteki&amp;quot;] = &amp;quot;Kouhyouteki&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 21&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter (Skilled)&amp;quot;] = &amp;quot;Type 0 Fighter Model 21 (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 52 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 52&amp;quot;,&lt;br /&gt;
        [&amp;quot;Zero Fighter Type 52 Type C (601 Air Group)&amp;quot;] = &amp;quot;Zero Fighter Model 52C (601 Air Group)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Shiden Kai 2&amp;quot;] = &amp;quot;Shiden Kai Ni&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 62 Zero Fighter-bomber&amp;quot;] = &amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 2 Recon Aircraft&amp;quot;] = &amp;quot;Type 2 Reconnaissance Aircraft&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 0 Recon Seaplane&amp;quot;] = &amp;quot;Type 0 Reconnaissance Seaplane&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 98 Recon Seaplane (Night Recon)&amp;quot;] = &amp;quot;Type 98 Reconnaissance Seaplane (Night Recon)&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Ka-type Observation Autogyro&amp;quot;] = &amp;quot;No. Ka Observation Autogyro&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Spotter/Liaison (ASW)&amp;quot;] = &amp;quot;Type 3 Command Liaison Aircraft (ASW)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 22 Surface RADAR Kai 4&amp;quot;] = &amp;quot;No. 22 Surface Radar Kai Yon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 13 AIR RADAR Kai&amp;quot;] = &amp;quot;No. 13 Air Radar Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Air RADAR Kai&amp;quot;] = &amp;quot;No. 21 Air Radar Kai&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 93 Passive SONAR&amp;quot;] = &amp;quot;Type 93 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 SONAR&amp;quot;] = &amp;quot;Type 3 Active Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Passive SONAR&amp;quot;] = &amp;quot;Type 0 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 94 Depth Charge&amp;quot;] = &amp;quot;Type 94 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Depth Charge&amp;quot;] = &amp;quot;Type 3 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 91 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 91 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 1 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 1 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Improved Steam Turbine&amp;quot;] = &amp;quot;Improved Kanhon Type Turbine&amp;quot;,&lt;br /&gt;
        [&amp;quot;Enhanced Steam Boiler&amp;quot;] = &amp;quot;Enhanced Kanhon Type Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;New High Pressure-Temperature Steam Boiler&amp;quot;] = &amp;quot;New Model High Temperature High Pressure Boiler&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Repair Team&amp;quot;] = &amp;quot;Emergency Repair Personnel&amp;quot;,&lt;br /&gt;
        [&amp;quot;Repair Goddess&amp;quot;] = &amp;quot;Emergency Repair Goddess&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Medium)&amp;quot;] = &amp;quot;Extension Bulge (Medium)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Large)&amp;quot;] = &amp;quot;Extension Bulge (Large)&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Drum Canister&amp;quot;] = &amp;quot;Drum Canister (Transport Use)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Daihatsu-class Landing Craft&amp;quot;] = &amp;quot;Daihatsu Landing Craft&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    --Radar/sonar names without any special pieces&lt;br /&gt;
    name = name:gsub(&amp;quot;^Type%s(.+)%sRADAR$&amp;quot;, &amp;quot;No. %1 Radar&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    name = names[name] or name&lt;br /&gt;
    return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.shorten_name(page, name)&lt;br /&gt;
    if not name then&lt;br /&gt;
        name = page&lt;br /&gt;
        page = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    --This takes an equipment name listed on Sandbox/EquipmentListKai/TypeSorted&lt;br /&gt;
    --and switches it with a shorter version of the name.&lt;br /&gt;
    local shortened = {&lt;br /&gt;
        [&amp;quot;12cm Single Gun Mount&amp;quot;] = &amp;quot;12cm Naval Gun&amp;quot; ,&lt;br /&gt;
        [&amp;quot;12.7cm Single Gun Mount&amp;quot;] = &amp;quot;12.7cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin Gun Mount Model B Kai Ni&amp;quot;] = &amp;quot;12.7cm Twin Mount Type-B Kai 2&amp;quot; ,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;14cm Single Gun Mount&amp;quot;] = &amp;quot;14cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount&amp;quot;] = &amp;quot;15.5cm Triple Gun Mount (Main)&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm (No.2) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm(no.2) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm (No.3) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm(no.3) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;SKC34 20.3cm Twin Gun Mount&amp;quot;] = &amp;quot;SKC34 20.3cm Twin Cannon&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;35.6cm Twin Gun Mount (Dazzle Camouflage)&amp;quot;] = &amp;quot;35.6cm Twin Gun Mount (Dazzle)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 41cm Triple Gun Mount&amp;quot;] = &amp;quot;Prototype 41cm Triple Cannon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 51cm Twin Gun Mount&amp;quot;] = &amp;quot;Prototype 51cm Twin Cannon&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;15.2cm Single Gun Mount&amp;quot;] = &amp;quot;15.2cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Secondary Gun Mount&amp;quot;] = &amp;quot;15.5cm Triple Gun (Secondary)&amp;quot;,&lt;br /&gt;
        [&amp;quot;15cm Twin Secondary Gun Mount&amp;quot;] = &amp;quot;15cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;OTO 152mm Triple Rapid Fire Gun Mount&amp;quot;] = &amp;quot;152mm Triple Rapid Fire Gun&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;8cm High-angle Gun&amp;quot;] = &amp;quot;8cm Twin High-angle Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount&amp;quot;] = &amp;quot;10cm Twin HA Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Carriage Mount&amp;quot;] = &amp;quot;10cm Twin HA Gun(Carriage)&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;10cm Twin HA Gun + AAFD&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Single High-angle Gun Mount&amp;quot;] = &amp;quot;12.7cm High-angle Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Gun Mount (Late Model)&amp;quot;] = &amp;quot;12.7cm Twin HA Gun (L M)&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm High-angle Gun + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;12.7cm High-angle Gun + AAFD&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;12.7mm Single Machine Gun Mount&amp;quot;] = &amp;quot;12.7mm Machine Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Single Autocannon Mount&amp;quot;] = &amp;quot;25mm Autocannon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type Bi 40mm Twin Autocannon Mount&amp;quot;] = &amp;quot;BI-type 40mm Twin Machine Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Triple Autocannon Mount Concentrated Deployment&amp;quot;] = &amp;quot;25mm Triple Autocannon (C D)&amp;quot;,  &lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;61cm Quadruple Torpedo Mount&amp;quot;] = &amp;quot;61cm Quad Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Triple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Triple (Oxygen) Torpedo&amp;quot;,               &lt;br /&gt;
        [&amp;quot;61cm Quadruple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Quad Oxygen Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quintuple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Quint Oxygen Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Bow (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;53cm Hull-mount O2 Torpedoes&amp;quot;,&lt;br /&gt;
        [&amp;quot;Submarine 53cm Bow Torpedo Mount (8 tubes)&amp;quot;] = &amp;quot;53cm Submarine Bow Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;Kouhyouteki&amp;quot;] = &amp;quot;Type A Ko-hyoteki&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype FaT Type 95 Oxygen Torpedo Kai&amp;quot;] = &amp;quot;Prototype FaT Type 95 Torpedo&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 21&amp;quot;] = &amp;quot;Type 21 Zero Fighter&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 21 (Skilled)&amp;quot;] = &amp;quot;Type 21 Zero Fighter (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 52&amp;quot;] = &amp;quot;Type 52 Zero Fighter&amp;quot;,&lt;br /&gt;
        [&amp;quot;Zero Fighter Model 52C (601 Air Group)&amp;quot;] = &amp;quot;Zero Fighter Type 52 C (601)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (Skilled)&amp;quot;] = &amp;quot;Type 97 Torp Bomber (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (931 Air Group)&amp;quot;] = &amp;quot;Type 97 Torpedo Bomber (931)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (Tomonaga Squadron)&amp;quot;] = &amp;quot;Torpeo Bomber (Tomonaga)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Tenzan Model 12 (Tomonaga Squadron)&amp;quot;] = &amp;quot;Tenzan Model 12 (Tomonaga)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;] = &amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 99 Dive Bomber (Egusa Squadron)&amp;quot;] = &amp;quot;Type 99 Dive Bomber (Egusa)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 2 Reconnaissance Aircraft&amp;quot;] = &amp;quot;Type 2 Recon Aircraft&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 0 Reconnaissance Seaplane&amp;quot;] = &amp;quot;Type 0 Recon Seaplane&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 98 Reconnaissance Seaplane (Night Recon)&amp;quot;] = &amp;quot;Night Recon&amp;quot;,&lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;No. Ka Observation Autogyro&amp;quot;] = &amp;quot;Ka-type Observation Autogyro&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Command Liaison Aircraft (ASW)&amp;quot;] = &amp;quot;Type 3 Spotter/Liaison (ASW)&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;No. 13 Air Radar&amp;quot;] = &amp;quot;Type 13 Air RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 14 Air Radar&amp;quot;] = &amp;quot;Type 14 Air RADAR &amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 21 Air Radar&amp;quot;] = &amp;quot;Type 21 Air RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 22 Surface Radar&amp;quot;] = &amp;quot;Type 22 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 33 Surface Radar&amp;quot;] = &amp;quot;Type 33 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 32 Surface Radar&amp;quot;] = &amp;quot;Type 32 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 22 Surface Radar Kai Yon&amp;quot;] = &amp;quot;Type 22 Surface RADAR Kai 4&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 13 Air Radar Kai&amp;quot;] = &amp;quot;Type 13 AIR RADAR Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 21 Air Radar Kai&amp;quot;] = &amp;quot;Type 21 Air RADAR Kai&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 93 Passive Sonar&amp;quot;] = &amp;quot;Type 93 Passive SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Active Sonar&amp;quot;] = &amp;quot;Type 3 SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Passive Sonar&amp;quot;] = &amp;quot;Type 0 Passive SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 94 Depth Charge Projector&amp;quot;] = &amp;quot;Type 94 Depth Charge&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Depth Charge Projector&amp;quot;] = &amp;quot;Type 3 Depth Charge&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 91 Armor Piercing Shell&amp;quot;] = &amp;quot;Type 91 Armor-Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 1 Armor Piercing Shell&amp;quot;] = &amp;quot;Type 1 Armor-Piercing Shell&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Improved Kanhon Type Turbine&amp;quot;] = &amp;quot;Improved Steam Turbine&amp;quot;,&lt;br /&gt;
        [&amp;quot;Enhanced Kanhon Type Boiler&amp;quot;] = &amp;quot;Enhanced Steam Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;New Model High Temperature High Pressure Boiler&amp;quot;] = &amp;quot;High Pressure-Temperature Boiler&amp;quot;,&lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;Emergency Repair Personnel&amp;quot;] = &amp;quot;Repair Team&amp;quot;,&lt;br /&gt;
        [&amp;quot;Emergency Repair Goddess&amp;quot;] = &amp;quot;Repair Goddess&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Extension Bulge (Medium)&amp;quot;] = &amp;quot;Anti-torpedo Bulge (Medium)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Extension Bulge (Large)&amp;quot;] = &amp;quot;Anti-torpedo Bulge (Large)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Pugliese Underwater Protection Bulkhead&amp;quot;] = &amp;quot;Pugliese Protection Bulkhead&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Skilled Carrier-based Aircraft Maintenance Personnel&amp;quot;] = &amp;quot;SCAMP&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Drum Canister (Transport Use)&amp;quot;] = &amp;quot;Drum Canister&amp;quot;,&lt;br /&gt;
        [&amp;quot;Daihatsu Landing Craft&amp;quot;] = &amp;quot;Daihatsu-class Landing Craft&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if page ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        return page, shortened[name] or name&lt;br /&gt;
    else&lt;br /&gt;
        return shortened[name] or name&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFunctions&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88095</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88095"/>
		<updated>2015-05-07T22:45:39Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id} wikia-menu-button&amp;quot;&amp;gt;Click this button to view the fleet&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[&amp;lt;table class=&amp;quot;nanaminfleetkai&amp;quot;&amp;gt;]],&lt;br /&gt;
    _table_end = [[&amp;lt;/table&amp;gt;]],&lt;br /&gt;
    _row_starter = [[&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;]],&lt;br /&gt;
    _added_cell_template = [[&amp;lt;td colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color:${bg_color};&amp;quot;&amp;gt;'''${content}'''&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _ship_template = [[&amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;${ship_card}&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _equip_template = [[&amp;lt;td&amp;gt;${equip_icon}&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;${style}&amp;quot;&amp;gt;${equip_link}&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _blank_entry = [[&amp;lt;td style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _id = &amp;quot;&amp;quot;,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    math.randomseed(os.time())&lt;br /&gt;
    math.random(); math.random(); math.random()&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        ship_card = ship and ship:name() or &amp;quot;Invalid Ship Name&amp;quot;&lt;br /&gt;
    elseif ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, format{self._ship_template, ship_card = ship_card})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_link, style&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
        style = &amp;quot;background-color:&amp;quot; .. self._equip_locked_bg .. &amp;quot;;&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
        style = &amp;quot;background-color:&amp;quot; .. self._equip_locked_bg .. &amp;quot;;&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
            equip_link = Functions.shorten_name(&amp;quot;&amp;quot;, equip:name())&lt;br /&gt;
        else&lt;br /&gt;
            equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot;, link = &amp;quot;&amp;quot; }&lt;br /&gt;
            equip_link = Formatting:format_link(Functions.shorten_name(equip:link()))&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
        equip_icon = equip_icon or &amp;quot;&amp;quot;,&lt;br /&gt;
        style = style or &amp;quot;&amp;quot;,&lt;br /&gt;
        equip_link = equip_link,&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            table.insert(self._rows, self._blank_entry)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                table.insert(self._rows, self._blank_entry)&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, self._blank_entry)&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
                card = ship:name()&lt;br /&gt;
                content = content .. &amp;quot;*&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            content = content .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    self:generate_id()&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_button_template, id = self._id})&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_div_start, id = self._id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90542</id>
		<title>Module:NanaminFunctions</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90542"/>
		<updated>2015-05-07T22:44:24Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local Ship = require(&amp;quot;Module:Ship&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local NanaminFunctions = {}&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.split(haystack, needle)&lt;br /&gt;
    local special_inputs = {&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount&amp;quot;,&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount Kai&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    local result = {}&lt;br /&gt;
    while mw.ustring.find(haystack, needle) do&lt;br /&gt;
        local split = mw.ustring.find(haystack, needle)&lt;br /&gt;
        local input = mw.ustring.sub(haystack, 1, split - 1)&lt;br /&gt;
        &lt;br /&gt;
        for _, value in pairs(special_inputs) do&lt;br /&gt;
            if mw.ustring.sub(haystack, 1, #value) == value then&lt;br /&gt;
                input = mw.ustring.sub(haystack, 1, #value)&lt;br /&gt;
                haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
                split = mw.ustring.find(haystack, needle) or 0&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        table.insert(result, input)&lt;br /&gt;
        haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
        if split == 0 then haystack = &amp;quot;&amp;quot; end&lt;br /&gt;
    end&lt;br /&gt;
    if haystack ~= &amp;quot;&amp;quot; then table.insert(result, haystack) end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_fighter_power(current_fp, equip, planes)&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        current_fp = current_fp + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    return current_fp&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos_ship(current_elos, entry, use_los)&lt;br /&gt;
    if entry[3] == nil then return current_elos end&lt;br /&gt;
    local ship = Ship(entry[1], entry[2])&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if use_los then&lt;br /&gt;
        los = tonumber(entry[3])&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos(current_elos, equip)&lt;br /&gt;
    --[[Effective LoS = Dive Bomber LoS x (1.04) + Torpedo Bomber LoS x (1.37)&lt;br /&gt;
    + Carrier-based Recon Plane LoS x (1.66) + Recon Seaplane LoS x (2.00)&lt;br /&gt;
    + Seaplane Bomber LoS x (1.78) + Small Radar LoS x (1.00) + Large Radar LoS x (0.99)&lt;br /&gt;
    + Searchlight LoS x (0.91) + √(base LoS of each ship) * (1.69)&lt;br /&gt;
    + (HQ Lv. rounded up to the next multiple of 5) x (-0.61)--]]&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        current_elos = current_elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.get_hq_bracket(hq_level)&lt;br /&gt;
    local bracket = tonumber(hq_level or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return bracket&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.process_legacy_name(name)&lt;br /&gt;
    local names = {&lt;br /&gt;
        [&amp;quot;12cm Naval Gun&amp;quot;] = &amp;quot;12cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Naval Gun&amp;quot;] = &amp;quot;12.7cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin Mount Type-B Kai 2&amp;quot;] = &amp;quot;12.7cm Twin Gun Mount Model B Kai Ni&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;14cm Naval Gun&amp;quot;] = &amp;quot;14cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Main)&amp;quot;] = &amp;quot;15.5cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.2) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.2) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.3) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.3) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;SKC34 20.3cm Twin Cannon&amp;quot;] = &amp;quot;SKC34 20.3cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Prototype 41cm Triple Cannon&amp;quot;] = &amp;quot;Prototype 41cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 51cm Twin Cannon&amp;quot;] = &amp;quot;Prototype 51cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;15.2cm Naval Gun&amp;quot;] = &amp;quot;15.2cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Secondary)&amp;quot;] = &amp;quot;15.5cm Triple Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15cm Twin Gun Mount&amp;quot;] = &amp;quot;15cm Twin Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;8cm Twin High-angle Mount&amp;quot;] = &amp;quot;8cm High-angle Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount (Carriage)&amp;quot;] = &amp;quot;10cm Twin High-angle Carriage Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;12.7cm High-angle Mount&amp;quot;] = &amp;quot;12.7cm Single High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount (Late Model)&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount (Late Model)&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;12.7cm High-angle Gun + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;12.7mm Machine Gun&amp;quot;] = &amp;quot;12.7mm Single Machine Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Autocannon&amp;quot;] = &amp;quot;25mm Single Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;BI-type 40mm Twin Machine Gun&amp;quot;] = &amp;quot;Type Bi 40mm Twin Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Triple Autocannon Mount (Concentrated Deployment)&amp;quot;] = &amp;quot;25mm Triple Autocannon Mount Concentrated Deployment&amp;quot;,  &lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;61cm Quad Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quad Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quint Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quintuple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Hull-mount O2 Torpedoes&amp;quot;] = &amp;quot;53cm Bow (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Submarine Bow Torpedo Mount (8 tubes)&amp;quot;] = &amp;quot;Submarine 53cm Bow Torpedo Mount (8 tubes)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type A Ko-hyoteki&amp;quot;] = &amp;quot;Kouhyouteki&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 21&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter (Skilled)&amp;quot;] = &amp;quot;Type 0 Fighter Model 21 (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 52 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 52&amp;quot;,&lt;br /&gt;
        [&amp;quot;Zero Fighter Type 52 Type C (601 Air Group)&amp;quot;] = &amp;quot;Zero Fighter Model 52C (601 Air Group)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Shiden Kai 2&amp;quot;] = &amp;quot;Shiden Kai Ni&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 62 Zero Fighter-bomber&amp;quot;] = &amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 2 Recon Aircraft&amp;quot;] = &amp;quot;Type 2 Reconnaissance Aircraft&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 0 Recon Seaplane&amp;quot;] = &amp;quot;Type 0 Reconnaissance Seaplane&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 98 Recon Seaplane (Night Recon)&amp;quot;] = &amp;quot;Type 98 Reconnaissance Seaplane (Night Recon)&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Ka-type Observation Autogyro&amp;quot;] = &amp;quot;No. Ka Observation Autogyro&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Spotter/Liaison (ASW)&amp;quot;] = &amp;quot;Type 3 Command Liaison Aircraft (ASW)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 22 Surface RADAR Kai 4&amp;quot;] = &amp;quot;No. 22 Surface Radar Kai Yon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 13 AIR RADAR Kai&amp;quot;] = &amp;quot;No. 13 Air Radar Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Air RADAR Kai&amp;quot;] = &amp;quot;No. 21 Air Radar Kai&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 93 Passive SONAR&amp;quot;] = &amp;quot;Type 93 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 SONAR&amp;quot;] = &amp;quot;Type 3 Active Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Passive SONAR&amp;quot;] = &amp;quot;Type 0 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 94 Depth Charge&amp;quot;] = &amp;quot;Type 94 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Depth Charge&amp;quot;] = &amp;quot;Type 3 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 91 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 91 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 1 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 1 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Improved Steam Turbine&amp;quot;] = &amp;quot;Improved Kanhon Type Turbine&amp;quot;,&lt;br /&gt;
        [&amp;quot;Enhanced Steam Boiler&amp;quot;] = &amp;quot;Enhanced Kanhon Type Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;New High Pressure-Temperature Steam Boiler&amp;quot;] = &amp;quot;New Model High Temperature High Pressure Boiler&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Repair Team&amp;quot;] = &amp;quot;Emergency Repair Personnel&amp;quot;,&lt;br /&gt;
        [&amp;quot;Repair Goddess&amp;quot;] = &amp;quot;Emergency Repair Goddess&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Medium)&amp;quot;] = &amp;quot;Extension Bulge (Medium)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Large)&amp;quot;] = &amp;quot;Extension Bulge (Large)&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Drum Canister&amp;quot;] = &amp;quot;Drum Canister (Transport Use)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Daihatsu-class Landing Craft&amp;quot;] = &amp;quot;Daihatsu Landing Craft&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    --Radar/sonar names without any special pieces&lt;br /&gt;
    name = name:gsub(&amp;quot;^Type%s(.+)%sRADAR$&amp;quot;, &amp;quot;No. %1 Radar&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    name = names[name] or name&lt;br /&gt;
    return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.shorten_name(page, name)&lt;br /&gt;
    --This takes an equipment name listed on Sandbox/EquipmentListKai/TypeSorted&lt;br /&gt;
    --and switches it with a shorter version of the name.&lt;br /&gt;
    local shortened = {&lt;br /&gt;
        [&amp;quot;12cm Single Gun Mount&amp;quot;] = &amp;quot;12cm Naval Gun&amp;quot; ,&lt;br /&gt;
        [&amp;quot;12.7cm Single Gun Mount&amp;quot;] = &amp;quot;12.7cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin Gun Mount Model B Kai Ni&amp;quot;] = &amp;quot;12.7cm Twin Mount Type-B Kai 2&amp;quot; ,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;14cm Single Gun Mount&amp;quot;] = &amp;quot;14cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount&amp;quot;] = &amp;quot;15.5cm Triple Gun Mount (Main)&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm (No.2) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm(no.2) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm (No.3) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm(no.3) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;SKC34 20.3cm Twin Gun Mount&amp;quot;] = &amp;quot;SKC34 20.3cm Twin Cannon&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;35.6cm Twin Gun Mount (Dazzle Camouflage)&amp;quot;] = &amp;quot;35.6cm Twin Gun Mount (Dazzle)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 41cm Triple Gun Mount&amp;quot;] = &amp;quot;Prototype 41cm Triple Cannon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 51cm Twin Gun Mount&amp;quot;] = &amp;quot;Prototype 51cm Twin Cannon&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;15.2cm Single Gun Mount&amp;quot;] = &amp;quot;15.2cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Secondary Gun Mount&amp;quot;] = &amp;quot;15.5cm Triple Gun (Secondary)&amp;quot;,&lt;br /&gt;
        [&amp;quot;15cm Twin Secondary Gun Mount&amp;quot;] = &amp;quot;15cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;OTO 152mm Triple Rapid Fire Gun Mount&amp;quot;] = &amp;quot;152mm Triple Rapid Fire Gun&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;8cm High-angle Gun&amp;quot;] = &amp;quot;8cm Twin High-angle Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount&amp;quot;] = &amp;quot;10cm Twin HA Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Carriage Mount&amp;quot;] = &amp;quot;10cm Twin HA Gun(Carriage)&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;10cm Twin HA Gun + AAFD&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Single High-angle Gun Mount&amp;quot;] = &amp;quot;12.7cm High-angle Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Gun Mount (Late Model)&amp;quot;] = &amp;quot;12.7cm Twin HA Gun (L M)&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm High-angle Gun + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;12.7cm High-angle Gun + AAFD&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;12.7mm Single Machine Gun Mount&amp;quot;] = &amp;quot;12.7mm Machine Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Single Autocannon Mount&amp;quot;] = &amp;quot;25mm Autocannon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type Bi 40mm Twin Autocannon Mount&amp;quot;] = &amp;quot;BI-type 40mm Twin Machine Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Triple Autocannon Mount Concentrated Deployment&amp;quot;] = &amp;quot;25mm Triple Autocannon (C D)&amp;quot;,  &lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;61cm Quadruple Torpedo Mount&amp;quot;] = &amp;quot;61cm Quad Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Triple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Triple (Oxygen) Torpedo&amp;quot;,               &lt;br /&gt;
        [&amp;quot;61cm Quadruple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Quad Oxygen Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quintuple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Quint Oxygen Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Bow (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;53cm Hull-mount O2 Torpedoes&amp;quot;,&lt;br /&gt;
        [&amp;quot;Submarine 53cm Bow Torpedo Mount (8 tubes)&amp;quot;] = &amp;quot;53cm Submarine Bow Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;Kouhyouteki&amp;quot;] = &amp;quot;Type A Ko-hyoteki&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype FaT Type 95 Oxygen Torpedo Kai&amp;quot;] = &amp;quot;Prototype FaT Type 95 Torpedo&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 21&amp;quot;] = &amp;quot;Type 21 Zero Fighter&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 21 (Skilled)&amp;quot;] = &amp;quot;Type 21 Zero Fighter (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 52&amp;quot;] = &amp;quot;Type 52 Zero Fighter&amp;quot;,&lt;br /&gt;
        [&amp;quot;Zero Fighter Model 52C (601 Air Group)&amp;quot;] = &amp;quot;Zero Fighter Type 52 C (601)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (Skilled)&amp;quot;] = &amp;quot;Type 97 Torp Bomber (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (931 Air Group)&amp;quot;] = &amp;quot;Type 97 Torpedo Bomber (931)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (Tomonaga Squadron)&amp;quot;] = &amp;quot;Torpeo Bomber (Tomonaga)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Tenzan Model 12 (Tomonaga Squadron)&amp;quot;] = &amp;quot;Tenzan Model 12 (Tomonaga)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;] = &amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 99 Dive Bomber (Egusa Squadron)&amp;quot;] = &amp;quot;Type 99 Dive Bomber (Egusa)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 2 Reconnaissance Aircraft&amp;quot;] = &amp;quot;Type 2 Recon Aircraft&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 0 Reconnaissance Seaplane&amp;quot;] = &amp;quot;Type 0 Recon Seaplane&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 98 Reconnaissance Seaplane (Night Recon)&amp;quot;] = &amp;quot;Night Recon&amp;quot;,&lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;No. Ka Observation Autogyro&amp;quot;] = &amp;quot;Ka-type Observation Autogyro&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Command Liaison Aircraft (ASW)&amp;quot;] = &amp;quot;Type 3 Spotter/Liaison (ASW)&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;No. 13 Air Radar&amp;quot;] = &amp;quot;Type 13 Air RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 14 Air Radar&amp;quot;] = &amp;quot;Type 14 Air RADAR &amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 21 Air Radar&amp;quot;] = &amp;quot;Type 21 Air RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 22 Surface Radar&amp;quot;] = &amp;quot;Type 22 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 33 Surface Radar&amp;quot;] = &amp;quot;Type 33 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 32 Surface Radar&amp;quot;] = &amp;quot;Type 32 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 22 Surface Radar Kai Yon&amp;quot;] = &amp;quot;Type 22 Surface RADAR Kai 4&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 13 Air Radar Kai&amp;quot;] = &amp;quot;Type 13 AIR RADAR Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 21 Air Radar Kai&amp;quot;] = &amp;quot;Type 21 Air RADAR Kai&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 93 Passive Sonar&amp;quot;] = &amp;quot;Type 93 Passive SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Active Sonar&amp;quot;] = &amp;quot;Type 3 SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Passive Sonar&amp;quot;] = &amp;quot;Type 0 Passive SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 94 Depth Charge Projector&amp;quot;] = &amp;quot;Type 94 Depth Charge&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Depth Charge Projector&amp;quot;] = &amp;quot;Type 3 Depth Charge&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 91 Armor Piercing Shell&amp;quot;] = &amp;quot;Type 91 Armor-Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 1 Armor Piercing Shell&amp;quot;] = &amp;quot;Type 1 Armor-Piercing Shell&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Improved Kanhon Type Turbine&amp;quot;] = &amp;quot;Improved Steam Turbine&amp;quot;,&lt;br /&gt;
        [&amp;quot;Enhanced Kanhon Type Boiler&amp;quot;] = &amp;quot;Enhanced Steam Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;New Model High Temperature High Pressure Boiler&amp;quot;] = &amp;quot;High Pressure-Temperature Boiler&amp;quot;,&lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;Emergency Repair Personnel&amp;quot;] = &amp;quot;Repair Team&amp;quot;,&lt;br /&gt;
        [&amp;quot;Emergency Repair Goddess&amp;quot;] = &amp;quot;Repair Goddess&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Extension Bulge (Medium)&amp;quot;] = &amp;quot;Anti-torpedo Bulge (Medium)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Extension Bulge (Large)&amp;quot;] = &amp;quot;Anti-torpedo Bulge (Large)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Pugliese Underwater Protection Bulkhead&amp;quot;] = &amp;quot;Pugliese Protection Bulkhead&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Skilled Carrier-based Aircraft Maintenance Personnel&amp;quot;] = &amp;quot;SCAMP&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Drum Canister (Transport Use)&amp;quot;] = &amp;quot;Drum Canister&amp;quot;,&lt;br /&gt;
        [&amp;quot;Daihatsu Landing Craft&amp;quot;] = &amp;quot;Daihatsu-class Landing Craft&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if page ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        return page, shortened[name] or name&lt;br /&gt;
    else&lt;br /&gt;
        return shortened[name] or name&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFunctions&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88094</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88094"/>
		<updated>2015-05-07T22:31:02Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id} wikia-menu-button&amp;quot;&amp;gt;Click this button to view the fleet&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[&amp;lt;table class=&amp;quot;nanaminfleetkai&amp;quot;&amp;gt;]],&lt;br /&gt;
    _table_end = [[&amp;lt;/table&amp;gt;]],&lt;br /&gt;
    _row_starter = [[&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;]],&lt;br /&gt;
    _added_cell_template = [[&amp;lt;td colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color:${bg_color};&amp;quot;&amp;gt;'''${content}'''&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _ship_template = [[&amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;${ship_card}&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _equip_template = [[&amp;lt;td&amp;gt;${equip_icon}&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;${style}&amp;quot;&amp;gt;${equip_link}&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _blank_entry = [[&amp;lt;td style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _id = &amp;quot;&amp;quot;,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    math.randomseed(os.time())&lt;br /&gt;
    math.random(); math.random(); math.random()&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        ship_card = ship and ship:name() or &amp;quot;Invalid Ship Name&amp;quot;&lt;br /&gt;
    elseif ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, format{self._ship_template, ship_card = ship_card})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_link, style&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
        style = &amp;quot;background-color:&amp;quot; .. self._equip_locked_bg .. &amp;quot;;&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
        style = &amp;quot;background-color:&amp;quot; .. self._equip_locked_bg .. &amp;quot;;&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
            equip_link = equip:name()&lt;br /&gt;
        else&lt;br /&gt;
            equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot;, link = &amp;quot;&amp;quot; }&lt;br /&gt;
            equip_link = Formatting:format_link(Functions.shorten_name(equip:link()))&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
        equip_icon = equip_icon or &amp;quot;&amp;quot;,&lt;br /&gt;
        style = style or &amp;quot;&amp;quot;,&lt;br /&gt;
        equip_link = equip_link,&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            table.insert(self._rows, self._blank_entry)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                table.insert(self._rows, self._blank_entry)&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, self._blank_entry)&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
                card = ship:name()&lt;br /&gt;
                content = content .. &amp;quot;*&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            content = content .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    self:generate_id()&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_button_template, id = self._id})&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_div_start, id = self._id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90541</id>
		<title>Module:NanaminFunctions</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90541"/>
		<updated>2015-05-07T22:29:48Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local Ship = require(&amp;quot;Module:Ship&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local NanaminFunctions = {}&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.split(haystack, needle)&lt;br /&gt;
    local special_inputs = {&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount&amp;quot;,&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount Kai&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    local result = {}&lt;br /&gt;
    while mw.ustring.find(haystack, needle) do&lt;br /&gt;
        local split = mw.ustring.find(haystack, needle)&lt;br /&gt;
        local input = mw.ustring.sub(haystack, 1, split - 1)&lt;br /&gt;
        &lt;br /&gt;
        for _, value in pairs(special_inputs) do&lt;br /&gt;
            if mw.ustring.sub(haystack, 1, #value) == value then&lt;br /&gt;
                input = mw.ustring.sub(haystack, 1, #value)&lt;br /&gt;
                haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
                split = mw.ustring.find(haystack, needle) or 0&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        table.insert(result, input)&lt;br /&gt;
        haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
        if split == 0 then haystack = &amp;quot;&amp;quot; end&lt;br /&gt;
    end&lt;br /&gt;
    if haystack ~= &amp;quot;&amp;quot; then table.insert(result, haystack) end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_fighter_power(current_fp, equip, planes)&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        current_fp = current_fp + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    return current_fp&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos_ship(current_elos, entry, use_los)&lt;br /&gt;
    if entry[3] == nil then return current_elos end&lt;br /&gt;
    local ship = Ship(entry[1], entry[2])&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if use_los then&lt;br /&gt;
        los = tonumber(entry[3])&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos(current_elos, equip)&lt;br /&gt;
    --[[Effective LoS = Dive Bomber LoS x (1.04) + Torpedo Bomber LoS x (1.37)&lt;br /&gt;
    + Carrier-based Recon Plane LoS x (1.66) + Recon Seaplane LoS x (2.00)&lt;br /&gt;
    + Seaplane Bomber LoS x (1.78) + Small Radar LoS x (1.00) + Large Radar LoS x (0.99)&lt;br /&gt;
    + Searchlight LoS x (0.91) + √(base LoS of each ship) * (1.69)&lt;br /&gt;
    + (HQ Lv. rounded up to the next multiple of 5) x (-0.61)--]]&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        current_elos = current_elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.get_hq_bracket(hq_level)&lt;br /&gt;
    local bracket = tonumber(hq_level or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return bracket&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.process_legacy_name(name)&lt;br /&gt;
    local names = {&lt;br /&gt;
        [&amp;quot;12cm Naval Gun&amp;quot;] = &amp;quot;12cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Naval Gun&amp;quot;] = &amp;quot;12.7cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin Mount Type-B Kai 2&amp;quot;] = &amp;quot;12.7cm Twin Gun Mount Model B Kai Ni&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;14cm Naval Gun&amp;quot;] = &amp;quot;14cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Main)&amp;quot;] = &amp;quot;15.5cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.2) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.2) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.3) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.3) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;SKC34 20.3cm Twin Cannon&amp;quot;] = &amp;quot;SKC34 20.3cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Prototype 41cm Triple Cannon&amp;quot;] = &amp;quot;Prototype 41cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 51cm Twin Cannon&amp;quot;] = &amp;quot;Prototype 51cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;15.2cm Naval Gun&amp;quot;] = &amp;quot;15.2cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Secondary)&amp;quot;] = &amp;quot;15.5cm Triple Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15cm Twin Gun Mount&amp;quot;] = &amp;quot;15cm Twin Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;8cm Twin High-angle Mount&amp;quot;] = &amp;quot;8cm High-angle Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount (Carriage)&amp;quot;] = &amp;quot;10cm Twin High-angle Carriage Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;12.7cm High-angle Mount&amp;quot;] = &amp;quot;12.7cm Single High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount (Late Model)&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount (Late Model)&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;12.7cm High-angle Gun + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;12.7mm Machine Gun&amp;quot;] = &amp;quot;12.7mm Single Machine Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Autocannon&amp;quot;] = &amp;quot;25mm Single Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;BI-type 40mm Twin Machine Gun&amp;quot;] = &amp;quot;Type Bi 40mm Twin Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Triple Autocannon Mount (Concentrated Deployment)&amp;quot;] = &amp;quot;25mm Triple Autocannon Mount Concentrated Deployment&amp;quot;,  &lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;61cm Quad Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quad Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quint Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quintuple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Hull-mount O2 Torpedoes&amp;quot;] = &amp;quot;53cm Bow (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Submarine Bow Torpedo Mount (8 tubes)&amp;quot;] = &amp;quot;Submarine 53cm Bow Torpedo Mount (8 tubes)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type A Ko-hyoteki&amp;quot;] = &amp;quot;Kouhyouteki&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 21&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter (Skilled)&amp;quot;] = &amp;quot;Type 0 Fighter Model 21 (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 52 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 52&amp;quot;,&lt;br /&gt;
        [&amp;quot;Zero Fighter Type 52 Type C (601 Air Group)&amp;quot;] = &amp;quot;Zero Fighter Model 52C (601 Air Group)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Shiden Kai 2&amp;quot;] = &amp;quot;Shiden Kai Ni&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 62 Zero Fighter-bomber&amp;quot;] = &amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 2 Recon Aircraft&amp;quot;] = &amp;quot;Type 2 Reconnaissance Aircraft&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 0 Recon Seaplane&amp;quot;] = &amp;quot;Type 0 Reconnaissance Seaplane&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 98 Recon Seaplane (Night Recon)&amp;quot;] = &amp;quot;Type 98 Reconnaissance Seaplane (Night Recon)&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Ka-type Observation Autogyro&amp;quot;] = &amp;quot;No. Ka Observation Autogyro&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Spotter/Liaison (ASW)&amp;quot;] = &amp;quot;Type 3 Command Liaison Aircraft (ASW)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 22 Surface RADAR Kai 4&amp;quot;] = &amp;quot;No. 22 Surface Radar Kai Yon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 13 AIR RADAR Kai&amp;quot;] = &amp;quot;No. 13 Air Radar Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Air RADAR Kai&amp;quot;] = &amp;quot;No. 21 Air Radar Kai&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 93 Passive SONAR&amp;quot;] = &amp;quot;Type 93 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 SONAR&amp;quot;] = &amp;quot;Type 3 Active Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Passive SONAR&amp;quot;] = &amp;quot;Type 0 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 94 Depth Charge&amp;quot;] = &amp;quot;Type 94 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Depth Charge&amp;quot;] = &amp;quot;Type 3 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 91 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 91 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 1 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 1 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Improved Steam Turbine&amp;quot;] = &amp;quot;Improved Kanhon Type Turbine&amp;quot;,&lt;br /&gt;
        [&amp;quot;Enhanced Steam Boiler&amp;quot;] = &amp;quot;Enhanced Kanhon Type Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;New High Pressure-Temperature Steam Boiler&amp;quot;] = &amp;quot;New Model High Temperature High Pressure Boiler&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Repair Team&amp;quot;] = &amp;quot;Emergency Repair Personnel&amp;quot;,&lt;br /&gt;
        [&amp;quot;Repair Goddess&amp;quot;] = &amp;quot;Emergency Repair Goddess&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Medium)&amp;quot;] = &amp;quot;Extension Bulge (Medium)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Large)&amp;quot;] = &amp;quot;Extension Bulge (Large)&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Drum Canister&amp;quot;] = &amp;quot;Drum Canister (Transport Use)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Daihatsu-class Landing Craft&amp;quot;] = &amp;quot;Daihatsu Landing Craft&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    --Radar/sonar names without any special pieces&lt;br /&gt;
    name = name:gsub(&amp;quot;^Type%s(.+)%sRADAR$&amp;quot;, &amp;quot;No. %1 Radar&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    name = names[name] or name&lt;br /&gt;
    return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.shorten_name(page, name)&lt;br /&gt;
    --This takes an equipment name listed on Sandbox/EquipmentListKai/TypeSorted&lt;br /&gt;
    --and switches it with a shorter version of the name.&lt;br /&gt;
    local shortened = {&lt;br /&gt;
        [&amp;quot;12cm Single Gun Mount&amp;quot;] = &amp;quot;12cm Naval Gun&amp;quot; ,&lt;br /&gt;
        [&amp;quot;12.7cm Single Gun Mount&amp;quot;] = &amp;quot;12.7cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin Gun Mount Model B Kai Ni&amp;quot;] = &amp;quot;12.7cm Twin Mount Type-B Kai 2&amp;quot; ,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;14cm Single Gun Mount&amp;quot;] = &amp;quot;14cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount&amp;quot;] = &amp;quot;15.5cm Triple Gun Mount (Main)&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm (No.2) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm(no.2) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm (No.3) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm(no.3) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;SKC34 20.3cm Twin Gun Mount&amp;quot;] = &amp;quot;SKC34 20.3cm Twin Cannon&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;35.6cm Twin Gun Mount (Dazzle Camouflage)&amp;quot;] = &amp;quot;35.6cm Twin Gun Mount (Dazzle)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 41cm Triple Gun Mount&amp;quot;] = &amp;quot;Prototype 41cm Triple Cannon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 51cm Twin Gun Mount&amp;quot;] = &amp;quot;Prototype 51cm Twin Cannon&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;15.2cm Single Gun Mount&amp;quot;] = &amp;quot;15.2cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Secondary Gun Mount&amp;quot;] = &amp;quot;15.5cm Triple Gun (Secondary)&amp;quot;,&lt;br /&gt;
        [&amp;quot;15cm Twin Secondary Gun Mount&amp;quot;] = &amp;quot;15cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;OTO 152mm Triple Rapid Fire Gun Mount&amp;quot;] = &amp;quot;152mm Triple Rapid Fire Gun&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;8cm High-angle Gun&amp;quot;] = &amp;quot;8cm Twin High-angle Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount&amp;quot;] = &amp;quot;10cm Twin HA Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Carriage Mount&amp;quot;] = &amp;quot;10cm Twin HA Gun(Carriage)&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;10cm Twin HA Gun + AAFD&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Single High-angle Gun Mount&amp;quot;] = &amp;quot;12.7cm High-angle Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Gun Mount (Late Model)&amp;quot;] = &amp;quot;12.7cm Twin HA Gun (L M)&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm High-angle Gun + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;12.7cm High-angle Gun + AAFD&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;12.7mm Single Machine Gun Mount&amp;quot;] = &amp;quot;12.7mm Machine Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Single Autocannon Mount&amp;quot;] = &amp;quot;25mm Autocannon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type Bi 40mm Twin Autocannon Mount&amp;quot;] = &amp;quot;BI-type 40mm Twin Machine Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Triple Autocannon Mount Concentrated Deployment&amp;quot;] = &amp;quot;25mm Triple Autocannon (C D)&amp;quot;,  &lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;61cm Quadruple Torpedo Mount&amp;quot;] = &amp;quot;61cm Quad Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Triple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Triple (Oxygen) Torpedo&amp;quot;,               &lt;br /&gt;
        [&amp;quot;61cm Quadruple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Quad Oxygen Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quintuple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Quint Oxygen Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Bow (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;53cm Hull-mount O2 Torpedoes&amp;quot;,&lt;br /&gt;
        [&amp;quot;Submarine 53cm Bow Torpedo Mount (8 tubes)&amp;quot;] = &amp;quot;53cm Submarine Bow Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;Kouhyouteki&amp;quot;] = &amp;quot;Type A Ko-hyoteki&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype FaT Type 95 Oxygen Torpedo Kai&amp;quot;] = &amp;quot;Prototype FaT Type 95 Torpedo&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 21&amp;quot;] = &amp;quot;Type 21 Zero Fighter&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 21 (Skilled)&amp;quot;] = &amp;quot;Type 21 Zero Fighter (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 52&amp;quot;] = &amp;quot;Type 52 Zero Fighter&amp;quot;,&lt;br /&gt;
        [&amp;quot;Zero Fighter Model 52C (601 Air Group)&amp;quot;] = &amp;quot;Zero Fighter Type 52 C (601)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (Skilled)&amp;quot;] = &amp;quot;Type 97 Torp Bomber (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (931 Air Group)&amp;quot;] = &amp;quot;Type 97 Torpedo Bomber (931)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (Tomonaga Squadron)&amp;quot;] = &amp;quot;Torpeo Bomber (Tomonaga)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Tenzan Model 12 (Tomonaga Squadron)&amp;quot;] = &amp;quot;Tenzan Model 12 (Tomonaga)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;] = &amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 99 Dive Bomber (Egusa Squadron)&amp;quot;] = &amp;quot;Type 99 Dive Bomber (Egusa)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 2 Reconnaissance Aircraft&amp;quot;] = &amp;quot;Type 2 Recon Aircraft&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 0 Reconnaissance Seaplane&amp;quot;] = &amp;quot;Type 0 Recon Seaplane&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 98 Reconnaissance Seaplane (Night Recon)&amp;quot;] = &amp;quot;Night Recon&amp;quot;,&lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;No. Ka Observation Autogyro&amp;quot;] = &amp;quot;Ka-type Observation Autogyro&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Command Liaison Aircraft (ASW)&amp;quot;] = &amp;quot;Type 3 Spotter/Liaison (ASW)&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;No. 13 Air Radar&amp;quot;] = &amp;quot;Type 13 Air RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 14 Air Radar&amp;quot;] = &amp;quot;Type 14 Air RADAR &amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 21 Air Radar&amp;quot;] = &amp;quot;Type 21 Air RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 22 Surface Radar&amp;quot;] = &amp;quot;Type 22 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 33 Surface Radar&amp;quot;] = &amp;quot;Type 33 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 32 Surface Radar&amp;quot;] = &amp;quot;Type 32 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 22 Surface Radar Kai Yon&amp;quot;] = &amp;quot;Type 22 Surface RADAR Kai 4&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 13 Air Radar Kai&amp;quot;] = &amp;quot;Type 13 AIR RADAR Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 21 Air Radar Kai&amp;quot;] = &amp;quot;Type 21 Air RADAR Kai&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 93 Passive Sonar&amp;quot;] = &amp;quot;Type 93 Passive SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Active Sonar&amp;quot;] = &amp;quot;Type 3 SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Passive Sonar&amp;quot;] = &amp;quot;Type 0 Passive SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 94 Depth Charge Projector&amp;quot;] = &amp;quot;Type 94 Depth Charge&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Depth Charge Projector&amp;quot;] = &amp;quot;Type 3 Depth Charge&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 91 Armor Piercing Shell&amp;quot;] = &amp;quot;Type 91 Armor-Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 1 Armor Piercing Shell&amp;quot;] = &amp;quot;Type 1 Armor-Piercing Shell&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Improved Kanhon Type Turbine&amp;quot;] = &amp;quot;Improved Steam Turbine&amp;quot;,&lt;br /&gt;
        [&amp;quot;Enhanced Kanhon Type Boiler&amp;quot;] = &amp;quot;Enhanced Steam Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;New Model High Temperature High Pressure Boiler&amp;quot;] = &amp;quot;High Pressure-Temperature Boiler&amp;quot;,&lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;Emergency Repair Personnel&amp;quot;] = &amp;quot;Repair Team&amp;quot;,&lt;br /&gt;
        [&amp;quot;Emergency Repair Goddess&amp;quot;] = &amp;quot;Repair Goddess&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Extension Bulge (Medium)&amp;quot;] = &amp;quot;Anti-torpedo Bulge (Medium)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Extension Bulge (Large)&amp;quot;] = &amp;quot;Anti-torpedo Bulge (Large)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Pugliese Underwater Protection Bulkhead&amp;quot;] = &amp;quot;Pugliese Protection Bulkhead&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Skilled Carrier-based Aircraft Maintenance Personnel&amp;quot;] = &amp;quot;SCAMP&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Drum Canister (Transport Use)&amp;quot;] = &amp;quot;Drum Canister&amp;quot;,&lt;br /&gt;
        [&amp;quot;Daihatsu Landing Craft&amp;quot;] = &amp;quot;Daihatsu-class Landing Craft&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return page, shortened[name] or name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFunctions&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90540</id>
		<title>Module:NanaminFunctions</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90540"/>
		<updated>2015-05-07T22:28:29Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local Ship = require(&amp;quot;Module:Ship&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local NanaminFunctions = {}&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.split(haystack, needle)&lt;br /&gt;
    local special_inputs = {&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount&amp;quot;,&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount Kai&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    local result = {}&lt;br /&gt;
    while mw.ustring.find(haystack, needle) do&lt;br /&gt;
        local split = mw.ustring.find(haystack, needle)&lt;br /&gt;
        local input = mw.ustring.sub(haystack, 1, split - 1)&lt;br /&gt;
        &lt;br /&gt;
        for _, value in pairs(special_inputs) do&lt;br /&gt;
            if mw.ustring.sub(haystack, 1, #value) == value then&lt;br /&gt;
                input = mw.ustring.sub(haystack, 1, #value)&lt;br /&gt;
                haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
                split = mw.ustring.find(haystack, needle) or 0&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        table.insert(result, input)&lt;br /&gt;
        haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
        if split == 0 then haystack = &amp;quot;&amp;quot; end&lt;br /&gt;
    end&lt;br /&gt;
    if haystack ~= &amp;quot;&amp;quot; then table.insert(result, haystack) end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_fighter_power(current_fp, equip, planes)&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        current_fp = current_fp + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    return current_fp&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos_ship(current_elos, entry, use_los)&lt;br /&gt;
    if entry[3] == nil then return current_elos end&lt;br /&gt;
    local ship = Ship(entry[1], entry[2])&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if use_los then&lt;br /&gt;
        los = tonumber(entry[3])&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos(current_elos, equip)&lt;br /&gt;
    --[[Effective LoS = Dive Bomber LoS x (1.04) + Torpedo Bomber LoS x (1.37)&lt;br /&gt;
    + Carrier-based Recon Plane LoS x (1.66) + Recon Seaplane LoS x (2.00)&lt;br /&gt;
    + Seaplane Bomber LoS x (1.78) + Small Radar LoS x (1.00) + Large Radar LoS x (0.99)&lt;br /&gt;
    + Searchlight LoS x (0.91) + √(base LoS of each ship) * (1.69)&lt;br /&gt;
    + (HQ Lv. rounded up to the next multiple of 5) x (-0.61)--]]&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        current_elos = current_elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.get_hq_bracket(hq_level)&lt;br /&gt;
    local bracket = tonumber(hq_level or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return bracket&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.process_legacy_name(name)&lt;br /&gt;
    local names = {&lt;br /&gt;
        [&amp;quot;12cm Naval Gun&amp;quot;] = &amp;quot;12cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Naval Gun&amp;quot;] = &amp;quot;12.7cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin Mount Type-B Kai 2&amp;quot;] = &amp;quot;12.7cm Twin Gun Mount Model B Kai Ni&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;14cm Naval Gun&amp;quot;] = &amp;quot;14cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Main)&amp;quot;] = &amp;quot;15.5cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.2) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.2) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.3) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.3) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;SKC34 20.3cm Twin Cannon&amp;quot;] = &amp;quot;SKC34 20.3cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Prototype 41cm Triple Cannon&amp;quot;] = &amp;quot;Prototype 41cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 51cm Twin Cannon&amp;quot;] = &amp;quot;Prototype 51cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;15.2cm Naval Gun&amp;quot;] = &amp;quot;15.2cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Secondary)&amp;quot;] = &amp;quot;15.5cm Triple Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15cm Twin Gun Mount&amp;quot;] = &amp;quot;15cm Twin Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;8cm Twin High-angle Mount&amp;quot;] = &amp;quot;8cm High-angle Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount (Carriage)&amp;quot;] = &amp;quot;10cm Twin High-angle Carriage Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;12.7cm High-angle Mount&amp;quot;] = &amp;quot;12.7cm Single High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount (Late Model)&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount (Late Model)&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;12.7cm High-angle Gun + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;12.7mm Machine Gun&amp;quot;] = &amp;quot;12.7mm Single Machine Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Autocannon&amp;quot;] = &amp;quot;25mm Single Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;BI-type 40mm Twin Machine Gun&amp;quot;] = &amp;quot;Type Bi 40mm Twin Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Triple Autocannon Mount (Concentrated Deployment)&amp;quot;] = &amp;quot;25mm Triple Autocannon Mount Concentrated Deployment&amp;quot;,  &lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;61cm Quad Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quad Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quint Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quintuple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Hull-mount O2 Torpedoes&amp;quot;] = &amp;quot;53cm Bow (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Submarine Bow Torpedo Mount (8 tubes)&amp;quot;] = &amp;quot;Submarine 53cm Bow Torpedo Mount (8 tubes)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type A Ko-hyoteki&amp;quot;] = &amp;quot;Kouhyouteki&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 21&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter (Skilled)&amp;quot;] = &amp;quot;Type 0 Fighter Model 21 (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 52 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 52&amp;quot;,&lt;br /&gt;
        [&amp;quot;Zero Fighter Type 52 Type C (601 Air Group)&amp;quot;] = &amp;quot;Zero Fighter Model 52C (601 Air Group)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Shiden Kai 2&amp;quot;] = &amp;quot;Shiden Kai Ni&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 62 Zero Fighter-bomber&amp;quot;] = &amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 2 Recon Aircraft&amp;quot;] = &amp;quot;Type 2 Reconnaissance Aircraft&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 0 Recon Seaplane&amp;quot;] = &amp;quot;Type 0 Reconnaissance Seaplane&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 98 Recon Seaplane (Night Recon)&amp;quot;] = &amp;quot;Type 98 Reconnaissance Seaplane (Night Recon)&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Ka-type Observation Autogyro&amp;quot;] = &amp;quot;No. Ka Observation Autogyro&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Spotter/Liaison (ASW)&amp;quot;] = &amp;quot;Type 3 Command Liaison Aircraft (ASW)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 22 Surface RADAR Kai 4&amp;quot;] = &amp;quot;No. 22 Surface Radar Kai Yon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 13 AIR RADAR Kai&amp;quot;] = &amp;quot;No. 13 Air Radar Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Air RADAR Kai&amp;quot;] = &amp;quot;No. 21 Air Radar Kai&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 93 Passive SONAR&amp;quot;] = &amp;quot;Type 93 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 SONAR&amp;quot;] = &amp;quot;Type 3 Active Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Passive SONAR&amp;quot;] = &amp;quot;Type 0 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 94 Depth Charge&amp;quot;] = &amp;quot;Type 94 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Depth Charge&amp;quot;] = &amp;quot;Type 3 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 91 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 91 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 1 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 1 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Improved Steam Turbine&amp;quot;] = &amp;quot;Improved Kanhon Type Turbine&amp;quot;,&lt;br /&gt;
        [&amp;quot;Enhanced Steam Boiler&amp;quot;] = &amp;quot;Enhanced Kanhon Type Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;New High Pressure-Temperature Steam Boiler&amp;quot;] = &amp;quot;New Model High Temperature High Pressure Boiler&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Repair Team&amp;quot;] = &amp;quot;Emergency Repair Personnel&amp;quot;,&lt;br /&gt;
        [&amp;quot;Repair Goddess&amp;quot;] = &amp;quot;Emergency Repair Goddess&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Medium)&amp;quot;] = &amp;quot;Extension Bulge (Medium)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Large)&amp;quot;] = &amp;quot;Extension Bulge (Large)&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Drum Canister&amp;quot;] = &amp;quot;Drum Canister (Transport Use)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Daihatsu-class Landing Craft&amp;quot;] = &amp;quot;Daihatsu Landing Craft&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    --Radar/sonar names without any special pieces&lt;br /&gt;
    name = name:gsub(&amp;quot;^Type%s(.+)%sRADAR$&amp;quot;, &amp;quot;No. %1 Radar&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    name = names[name] or name&lt;br /&gt;
    return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.shorten_name(page, name)&lt;br /&gt;
    --This takes an equipment name listed on Sandbox/EquipmentListKai/TypeSorted&lt;br /&gt;
    --and switches it with a shorter version of the name.&lt;br /&gt;
    local shortened = {&lt;br /&gt;
        [&amp;quot;12cm Single Gun Mount&amp;quot;] = &amp;quot;12cm Naval Gun&amp;quot; ,&lt;br /&gt;
        [&amp;quot;12.7cm Single Gun Mount&amp;quot;] = &amp;quot;12.7cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin Gun Mount Model B Kai Ni&amp;quot;] = &amp;quot;12.7cm Twin Mount Type-B Kai 2&amp;quot; ,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;14cm Single Gun Mount&amp;quot;] = &amp;quot;14cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount&amp;quot;] = &amp;quot;15.5cm Triple Gun Mount (Main)&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm (No.2) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm(no.2) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm (No.3) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm(no.3) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;SKC34 20.3cm Twin Gun Mount&amp;quot;] = &amp;quot;SKC34 20.3cm Twin Cannon&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;35.6cm Twin Gun Mount (Dazzle Camouflage)&amp;quot;] = &amp;quot;35.6cm Twin Gun Mount (Dazzle)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 41cm Triple Gun Mount&amp;quot;] = &amp;quot;Prototype 41cm Triple Cannon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 51cm Twin Gun Mount&amp;quot;] = &amp;quot;Prototype 51cm Twin Cannon&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;15.2cm Single Gun Mount&amp;quot;] = &amp;quot;15.2cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Secondary Gun Mount&amp;quot;] = &amp;quot;15.5cm Triple Gun (Secondary)&amp;quot;,&lt;br /&gt;
        [&amp;quot;15cm Twin Secondary Gun Mount&amp;quot;] = &amp;quot;15cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;OTO 152mm Triple Rapid Fire Gun Mount&amp;quot;] = &amp;quot;152mm Triple Rapid Fire Gun&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;8cm High-angle Gun&amp;quot;] = &amp;quot;8cm Twin High-angle Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount&amp;quot;] = &amp;quot;10cm Twin HA Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Carriage Mount&amp;quot;] = &amp;quot;10cm Twin HA Gun(Carriage)&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;10cm Twin HA Gun + AAFD&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Single High-angle Gun Mount&amp;quot;] = &amp;quot;12.7cm High-angle Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Gun Mount (Late Model)&amp;quot;] = &amp;quot;12.7cm Twin HA Gun (L M)&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm High-angle Gun + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;12.7cm High-angle Gun + AAFD&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;12.7mm Single Machine Gun Mount&amp;quot;] = &amp;quot;12.7mm Machine Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Single Autocannon Mount&amp;quot;] = &amp;quot;25mm Autocannon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type Bi 40mm Twin Autocannon Mount&amp;quot;] = &amp;quot;BI-type 40mm Twin Machine Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Triple Autocannon Mount Concentrated Deployment&amp;quot;] = &amp;quot;25mm Triple Autocannon (C D)&amp;quot;,  &lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;61cm Quadruple Torpedo Mount&amp;quot;] = &amp;quot;61cm Quad Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Triple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Triple (Oxygen) Torpedo&amp;quot;,               &lt;br /&gt;
        [&amp;quot;61cm Quadruple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Quad Oxygen Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quintuple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Quint Oxygen Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Bow (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;53cm Hull-mount O2 Torpedoes&amp;quot;,&lt;br /&gt;
        [&amp;quot;Submarine 53cm Bow Torpedo Mount (8 tubes)&amp;quot;] = &amp;quot;53cm Submarine Bow Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;Kouhyouteki&amp;quot;] = &amp;quot;Type A Ko-hyoteki&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype FaT Type 95 Oxygen Torpedo Kai&amp;quot;] = &amp;quot;Prototype FaT Type 95 Torpedo&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 21&amp;quot;] = &amp;quot;Type 21 Zero Fighter&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 21 (Skilled)&amp;quot;] = &amp;quot;Type 21 Zero Fighter (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 52&amp;quot;] = &amp;quot;Type 52 Zero Fighter&amp;quot;,&lt;br /&gt;
        [&amp;quot;Zero Fighter Model 52C (601 Air Group)&amp;quot;] = &amp;quot;Zero Fighter Type 52 C (601)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (Skilled)&amp;quot;] = &amp;quot;Type 97 Torp Bomber (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (931 Air Group)&amp;quot;] = &amp;quot;Type 97 Torpedo Bomber (931)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (Tomonaga Squadron)&amp;quot;] = &amp;quot;Torpeo Bomber (Tomonaga)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Tenzan Model 12 (Tomonaga Squadron)&amp;quot;] = &amp;quot;Tenzan Model 12 (Tomonaga)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;] = &amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 99 Dive Bomber (Egusa Squadron)&amp;quot;] = &amp;quot;Type 99 Dive Bomber (Egusa)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 2 Reconnaissance Aircraft&amp;quot;] = &amp;quot;Type 2 Recon Aircraft&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 0 Reconnaissance Seaplane&amp;quot;] = &amp;quot;Type 0 Recon Seaplane&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 98 Reconnaissance Seaplane (Night Recon)&amp;quot;] = &amp;quot;Night Recon&amp;quot;,&lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;No. Ka Observation Autogyro&amp;quot;] = &amp;quot;Ka-type Observation Autogyro&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Command Liaison Aircraft (ASW)&amp;quot;] = &amp;quot;Type 3 Spotter/Liaison (ASW)&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;No. 13 Air Radar&amp;quot;] = &amp;quot;Type 13 Air RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 14 Air Radar&amp;quot;] = &amp;quot;Type 14 Air RADAR &amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 21 Air Radar&amp;quot;] = &amp;quot;Type 21 Air RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 22 Surface Radar&amp;quot;] = &amp;quot;Type 22 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 33 Surface Radar&amp;quot;] = &amp;quot;Type 33 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 32 Surface Radar&amp;quot;] = &amp;quot;Type 32 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 22 Surface Radar Kai Yon&amp;quot;] = &amp;quot;Type 22 Surface RADAR Kai 4&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 13 Air Radar Kai&amp;quot;] = &amp;quot;Type 13 AIR RADAR Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 21 Air Radar Kai&amp;quot;] = &amp;quot;Type 21 Air RADAR Kai&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 93 Passive Sonar&amp;quot;] = &amp;quot;Type 93 Passive SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Active Sonar&amp;quot;] = &amp;quot;Type 3 SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Passive Sonar&amp;quot;] = &amp;quot;Type 0 Passive SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 94 Depth Charge Projector&amp;quot;] = &amp;quot;Type 94 Depth Charge&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Depth Charge Projector&amp;quot;] = &amp;quot;Type 3 Depth Charge&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 91 Armor Piercing Shell&amp;quot;] = &amp;quot;Type 91 Armor-Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 1 Armor Piercing Shell&amp;quot;] = &amp;quot;Type 1 Armor-Piercing Shell&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Improved Kanhon Type Turbine&amp;quot;] = &amp;quot;Improved Steam Turbine&amp;quot;,&lt;br /&gt;
        [&amp;quot;Enhanced Kanhon Type Boiler&amp;quot;] = &amp;quot;Enhanced Steam Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;New Model High Temperature High Pressure Boiler&amp;quot;] = &amp;quot;High Pressure-Temperature Boiler&amp;quot;,&lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;Emergency Repair Personnel&amp;quot;] = &amp;quot;Repair Team&amp;quot;,&lt;br /&gt;
        [&amp;quot;Emergency Repair Goddess&amp;quot;] = &amp;quot;Repair Goddess&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Extension Bulge (Medium)&amp;quot;] = &amp;quot;Anti-torpedo Bulge (Medium)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Extension Bulge (Large)&amp;quot;] = &amp;quot;Anti-torpedo Bulge (Large)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Pugliese Underwater Protection Bulkhead&amp;quot;] = &amp;quot;Pugliese Protection Bulkhead&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Skilled Carrier-based Aircraft Maintenance Personnel&amp;quot;] = &amp;quot;SCAMP&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Drum Canister (Transport Use)&amp;quot;] = &amp;quot;Drum Canister&amp;quot;,&lt;br /&gt;
        [&amp;quot;Daihatsu Landing Craft&amp;quot;] = &amp;quot;Daihatsu-class Landing Craft&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return page, shortened[name] or page, name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFunctions&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90539</id>
		<title>Module:NanaminFunctions</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90539"/>
		<updated>2015-05-07T22:23:42Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local Ship = require(&amp;quot;Module:Ship&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local NanaminFunctions = {}&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.split(haystack, needle)&lt;br /&gt;
    local special_inputs = {&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount&amp;quot;,&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount Kai&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    local result = {}&lt;br /&gt;
    while mw.ustring.find(haystack, needle) do&lt;br /&gt;
        local split = mw.ustring.find(haystack, needle)&lt;br /&gt;
        local input = mw.ustring.sub(haystack, 1, split - 1)&lt;br /&gt;
        &lt;br /&gt;
        for _, value in pairs(special_inputs) do&lt;br /&gt;
            if mw.ustring.sub(haystack, 1, #value) == value then&lt;br /&gt;
                input = mw.ustring.sub(haystack, 1, #value)&lt;br /&gt;
                haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
                split = mw.ustring.find(haystack, needle) or 0&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        table.insert(result, input)&lt;br /&gt;
        haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
        if split == 0 then haystack = &amp;quot;&amp;quot; end&lt;br /&gt;
    end&lt;br /&gt;
    if haystack ~= &amp;quot;&amp;quot; then table.insert(result, haystack) end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_fighter_power(current_fp, equip, planes)&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        current_fp = current_fp + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    return current_fp&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos_ship(current_elos, entry, use_los)&lt;br /&gt;
    if entry[3] == nil then return current_elos end&lt;br /&gt;
    local ship = Ship(entry[1], entry[2])&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if use_los then&lt;br /&gt;
        los = tonumber(entry[3])&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos(current_elos, equip)&lt;br /&gt;
    --[[Effective LoS = Dive Bomber LoS x (1.04) + Torpedo Bomber LoS x (1.37)&lt;br /&gt;
    + Carrier-based Recon Plane LoS x (1.66) + Recon Seaplane LoS x (2.00)&lt;br /&gt;
    + Seaplane Bomber LoS x (1.78) + Small Radar LoS x (1.00) + Large Radar LoS x (0.99)&lt;br /&gt;
    + Searchlight LoS x (0.91) + √(base LoS of each ship) * (1.69)&lt;br /&gt;
    + (HQ Lv. rounded up to the next multiple of 5) x (-0.61)--]]&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        current_elos = current_elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.get_hq_bracket(hq_level)&lt;br /&gt;
    local bracket = tonumber(hq_level or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return bracket&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.process_legacy_name(name)&lt;br /&gt;
    local names = {&lt;br /&gt;
        [&amp;quot;12cm Naval Gun&amp;quot;] = &amp;quot;12cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Naval Gun&amp;quot;] = &amp;quot;12.7cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin Mount Type-B Kai 2&amp;quot;] = &amp;quot;12.7cm Twin Gun Mount Model B Kai Ni&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;14cm Naval Gun&amp;quot;] = &amp;quot;14cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Main)&amp;quot;] = &amp;quot;15.5cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.2) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.2) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.3) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.3) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;SKC34 20.3cm Twin Cannon&amp;quot;] = &amp;quot;SKC34 20.3cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Prototype 41cm Triple Cannon&amp;quot;] = &amp;quot;Prototype 41cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 51cm Twin Cannon&amp;quot;] = &amp;quot;Prototype 51cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;15.2cm Naval Gun&amp;quot;] = &amp;quot;15.2cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Secondary)&amp;quot;] = &amp;quot;15.5cm Triple Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15cm Twin Gun Mount&amp;quot;] = &amp;quot;15cm Twin Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;8cm Twin High-angle Mount&amp;quot;] = &amp;quot;8cm High-angle Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount (Carriage)&amp;quot;] = &amp;quot;10cm Twin High-angle Carriage Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;12.7cm High-angle Mount&amp;quot;] = &amp;quot;12.7cm Single High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount (Late Model)&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount (Late Model)&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;12.7cm High-angle Gun + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;12.7mm Machine Gun&amp;quot;] = &amp;quot;12.7mm Single Machine Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Autocannon&amp;quot;] = &amp;quot;25mm Single Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;BI-type 40mm Twin Machine Gun&amp;quot;] = &amp;quot;Type Bi 40mm Twin Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Triple Autocannon Mount (Concentrated Deployment)&amp;quot;] = &amp;quot;25mm Triple Autocannon Mount Concentrated Deployment&amp;quot;,  &lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;61cm Quad Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quad Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quint Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quintuple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Hull-mount O2 Torpedoes&amp;quot;] = &amp;quot;53cm Bow (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Submarine Bow Torpedo Mount (8 tubes)&amp;quot;] = &amp;quot;Submarine 53cm Bow Torpedo Mount (8 tubes)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type A Ko-hyoteki&amp;quot;] = &amp;quot;Kouhyouteki&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 21&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter (Skilled)&amp;quot;] = &amp;quot;Type 0 Fighter Model 21 (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 52 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 52&amp;quot;,&lt;br /&gt;
        [&amp;quot;Zero Fighter Type 52 Type C (601 Air Group)&amp;quot;] = &amp;quot;Zero Fighter Model 52C (601 Air Group)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Shiden Kai 2&amp;quot;] = &amp;quot;Shiden Kai Ni&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 62 Zero Fighter-bomber&amp;quot;] = &amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 2 Recon Aircraft&amp;quot;] = &amp;quot;Type 2 Reconnaissance Aircraft&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 0 Recon Seaplane&amp;quot;] = &amp;quot;Type 0 Reconnaissance Seaplane&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 98 Recon Seaplane (Night Recon)&amp;quot;] = &amp;quot;Type 98 Reconnaissance Seaplane (Night Recon)&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Ka-type Observation Autogyro&amp;quot;] = &amp;quot;No. Ka Observation Autogyro&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Spotter/Liaison (ASW)&amp;quot;] = &amp;quot;Type 3 Command Liaison Aircraft (ASW)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 22 Surface RADAR Kai 4&amp;quot;] = &amp;quot;No. 22 Surface Radar Kai Yon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 13 AIR RADAR Kai&amp;quot;] = &amp;quot;No. 13 Air Radar Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Air RADAR Kai&amp;quot;] = &amp;quot;No. 21 Air Radar Kai&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 93 Passive SONAR&amp;quot;] = &amp;quot;Type 93 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 SONAR&amp;quot;] = &amp;quot;Type 3 Active Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Passive SONAR&amp;quot;] = &amp;quot;Type 0 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 94 Depth Charge&amp;quot;] = &amp;quot;Type 94 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Depth Charge&amp;quot;] = &amp;quot;Type 3 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Type 91 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 91 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 1 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 1 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Improved Steam Turbine&amp;quot;] = &amp;quot;Improved Kanhon Type Turbine&amp;quot;,&lt;br /&gt;
        [&amp;quot;Enhanced Steam Boiler&amp;quot;] = &amp;quot;Enhanced Kanhon Type Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;New High Pressure-Temperature Steam Boiler&amp;quot;] = &amp;quot;New Model High Temperature High Pressure Boiler&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Repair Team&amp;quot;] = &amp;quot;Emergency Repair Personnel&amp;quot;,&lt;br /&gt;
        [&amp;quot;Repair Goddess&amp;quot;] = &amp;quot;Emergency Repair Goddess&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Medium)&amp;quot;] = &amp;quot;Extension Bulge (Medium)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Large)&amp;quot;] = &amp;quot;Extension Bulge (Large)&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
        [&amp;quot;Drum Canister&amp;quot;] = &amp;quot;Drum Canister (Transport Use)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Daihatsu-class Landing Craft&amp;quot;] = &amp;quot;Daihatsu Landing Craft&amp;quot;,&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    --Radar/sonar names without any special pieces&lt;br /&gt;
    name = name:gsub(&amp;quot;^Type%s(.+)%sRADAR$&amp;quot;, &amp;quot;No. %1 Radar&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    name = names[name] or name&lt;br /&gt;
    return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.shorten_name(name)&lt;br /&gt;
    --This takes an equipment name listed on Sandbox/EquipmentListKai/TypeSorted&lt;br /&gt;
    --and switches it with a shorter version of the name.&lt;br /&gt;
    local shortened = {&lt;br /&gt;
        [&amp;quot;12cm Single Gun Mount&amp;quot;] = &amp;quot;12cm Naval Gun&amp;quot; ,&lt;br /&gt;
        [&amp;quot;12.7cm Single Gun Mount&amp;quot;] = &amp;quot;12.7cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin Gun Mount Model B Kai Ni&amp;quot;] = &amp;quot;12.7cm Twin Mount Type-B Kai 2&amp;quot; ,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;14cm Single Gun Mount&amp;quot;] = &amp;quot;14cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount&amp;quot;] = &amp;quot;15.5cm Triple Gun Mount (Main)&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm (No.2) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm(no.2) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm (No.3) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm(no.3) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;SKC34 20.3cm Twin Gun Mount&amp;quot;] = &amp;quot;SKC34 20.3cm Twin Cannon&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;35.6cm Twin Gun Mount (Dazzle Camouflage)&amp;quot;] = &amp;quot;35.6cm Twin Gun Mount (Dazzle)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 41cm Triple Gun Mount&amp;quot;] = &amp;quot;Prototype 41cm Triple Cannon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 51cm Twin Gun Mount&amp;quot;] = &amp;quot;Prototype 51cm Twin Cannon&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;15.2cm Single Gun Mount&amp;quot;] = &amp;quot;15.2cm Naval Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Secondary Gun Mount&amp;quot;] = &amp;quot;15.5cm Triple Gun (Secondary)&amp;quot;,&lt;br /&gt;
        [&amp;quot;15cm Twin Secondary Gun Mount&amp;quot;] = &amp;quot;15cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;OTO 152mm Triple Rapid Fire Gun Mount&amp;quot;] = &amp;quot;152mm Triple Rapid Fire Gun&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;8cm High-angle Gun&amp;quot;] = &amp;quot;8cm Twin High-angle Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount&amp;quot;] = &amp;quot;10cm Twin HA Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Carriage Mount&amp;quot;] = &amp;quot;10cm Twin HA Gun(Carriage)&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;10cm Twin HA Gun + AAFD&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Single High-angle Gun Mount&amp;quot;] = &amp;quot;12.7cm High-angle Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Gun Mount (Late Model)&amp;quot;] = &amp;quot;12.7cm Twin HA Gun (L M)&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm High-angle Gun + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;12.7cm High-angle Gun + AAFD&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;12.7mm Single Machine Gun Mount&amp;quot;] = &amp;quot;12.7mm Machine Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Single Autocannon Mount&amp;quot;] = &amp;quot;25mm Autocannon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type Bi 40mm Twin Autocannon Mount&amp;quot;] = &amp;quot;BI-type 40mm Twin Machine Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Triple Autocannon Mount Concentrated Deployment&amp;quot;] = &amp;quot;25mm Triple Autocannon (C D)&amp;quot;,  &lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;61cm Quadruple Torpedo Mount&amp;quot;] = &amp;quot;61cm Quad Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Triple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Triple (Oxygen) Torpedo&amp;quot;,               &lt;br /&gt;
        [&amp;quot;61cm Quadruple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Quad Oxygen Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quintuple (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;61cm Quint Oxygen Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Bow (Oxygen) Torpedo Mount&amp;quot;] = &amp;quot;53cm Hull-mount O2 Torpedoes&amp;quot;,&lt;br /&gt;
        [&amp;quot;Submarine 53cm Bow Torpedo Mount (8 tubes)&amp;quot;] = &amp;quot;53cm Submarine Bow Torpedo&amp;quot;,&lt;br /&gt;
        [&amp;quot;Kouhyouteki&amp;quot;] = &amp;quot;Type A Ko-hyoteki&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype FaT Type 95 Oxygen Torpedo Kai&amp;quot;] = &amp;quot;Prototype FaT Type 95 Torpedo&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 21&amp;quot;] = &amp;quot;Type 21 Zero Fighter&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 21 (Skilled)&amp;quot;] = &amp;quot;Type 21 Zero Fighter (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 52&amp;quot;] = &amp;quot;Type 52 Zero Fighter&amp;quot;,&lt;br /&gt;
        [&amp;quot;Zero Fighter Model 52C (601 Air Group)&amp;quot;] = &amp;quot;Zero Fighter Type 52 C (601)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (Skilled)&amp;quot;] = &amp;quot;Type 97 Torp Bomber (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (931 Air Group)&amp;quot;] = &amp;quot;Type 97 Torpedo Bomber (931)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 97 Torpedo Bomber (Tomonaga Squadron)&amp;quot;] = &amp;quot;Torpeo Bomber (Tomonaga)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Tenzan Model 12 (Tomonaga Squadron)&amp;quot;] = &amp;quot;Tenzan Model 12 (Tomonaga)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;] = &amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 99 Dive Bomber (Egusa Squadron)&amp;quot;] = &amp;quot;Type 99 Dive Bomber (Egusa)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 2 Reconnaissance Aircraft&amp;quot;] = &amp;quot;Type 2 Recon Aircraft&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 0 Reconnaissance Seaplane&amp;quot;] = &amp;quot;Type 0 Recon Seaplane&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 98 Reconnaissance Seaplane (Night Recon)&amp;quot;] = &amp;quot;Night Recon&amp;quot;,&lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;No. Ka Observation Autogyro&amp;quot;] = &amp;quot;Ka-type Observation Autogyro&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Command Liaison Aircraft (ASW)&amp;quot;] = &amp;quot;Type 3 Spotter/Liaison (ASW)&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;No. 13 Air Radar&amp;quot;] = &amp;quot;Type 13 Air RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 14 Air Radar&amp;quot;] = &amp;quot;Type 14 Air RADAR &amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 21 Air Radar&amp;quot;] = &amp;quot;Type 21 Air RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 22 Surface Radar&amp;quot;] = &amp;quot;Type 22 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 33 Surface Radar&amp;quot;] = &amp;quot;Type 33 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 32 Surface Radar&amp;quot;] = &amp;quot;Type 32 Surface RADAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 22 Surface Radar Kai Yon&amp;quot;] = &amp;quot;Type 22 Surface RADAR Kai 4&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 13 Air Radar Kai&amp;quot;] = &amp;quot;Type 13 AIR RADAR Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;No. 21 Air Radar Kai&amp;quot;] = &amp;quot;Type 21 Air RADAR Kai&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 93 Passive Sonar&amp;quot;] = &amp;quot;Type 93 Passive SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Active Sonar&amp;quot;] = &amp;quot;Type 3 SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Passive Sonar&amp;quot;] = &amp;quot;Type 0 Passive SONAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 94 Depth Charge Projector&amp;quot;] = &amp;quot;Type 94 Depth Charge&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Depth Charge Projector&amp;quot;] = &amp;quot;Type 3 Depth Charge&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Type 91 Armor Piercing Shell&amp;quot;] = &amp;quot;Type 91 Armor-Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 1 Armor Piercing Shell&amp;quot;] = &amp;quot;Type 1 Armor-Piercing Shell&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Improved Kanhon Type Turbine&amp;quot;] = &amp;quot;Improved Steam Turbine&amp;quot;,&lt;br /&gt;
        [&amp;quot;Enhanced Kanhon Type Boiler&amp;quot;] = &amp;quot;Enhanced Steam Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;New Model High Temperature High Pressure Boiler&amp;quot;] = &amp;quot;High Pressure-Temperature Boiler&amp;quot;,&lt;br /&gt;
       &lt;br /&gt;
        [&amp;quot;Emergency Repair Personnel&amp;quot;] = &amp;quot;Repair Team&amp;quot;,&lt;br /&gt;
        [&amp;quot;Emergency Repair Goddess&amp;quot;] = &amp;quot;Repair Goddess&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Extension Bulge (Medium)&amp;quot;] = &amp;quot;Anti-torpedo Bulge (Medium)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Extension Bulge (Large)&amp;quot;] = &amp;quot;Anti-torpedo Bulge (Large)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Pugliese Underwater Protection Bulkhead&amp;quot;] = &amp;quot;Pugliese Protection Bulkhead&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Skilled Carrier-based Aircraft Maintenance Personnel&amp;quot;] = &amp;quot;SCAMP&amp;quot;,&lt;br /&gt;
               &lt;br /&gt;
        [&amp;quot;Drum Canister (Transport Use)&amp;quot;] = &amp;quot;Drum Canister&amp;quot;,&lt;br /&gt;
        [&amp;quot;Daihatsu Landing Craft&amp;quot;] = &amp;quot;Daihatsu-class Landing Craft&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return shortened[name] or name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFunctions&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88093</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88093"/>
		<updated>2015-05-06T08:44:16Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id} wikia-menu-button&amp;quot;&amp;gt;Click this button to view the fleet&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[&amp;lt;table class=&amp;quot;nanaminfleetkai&amp;quot;&amp;gt;]],&lt;br /&gt;
    _table_end = [[&amp;lt;/table&amp;gt;]],&lt;br /&gt;
    _row_starter = [[&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;]],&lt;br /&gt;
    _added_cell_template = [[&amp;lt;td colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color:${bg_color};&amp;quot;&amp;gt;'''${content}'''&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _ship_template = [[&amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;${ship_card}&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _equip_template = [[&amp;lt;td&amp;gt;${equip_icon}&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;${style}&amp;quot;&amp;gt;${equip_link}&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _blank_entry = [[&amp;lt;td style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _id = &amp;quot;&amp;quot;,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    math.randomseed(os.time())&lt;br /&gt;
    math.random(); math.random(); math.random()&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        ship_card = ship and ship:name() or &amp;quot;Invalid Ship Name&amp;quot;&lt;br /&gt;
    elseif ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, format{self._ship_template, ship_card = ship_card})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_link, style&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
        style = &amp;quot;background-color:&amp;quot; .. self._equip_locked_bg .. &amp;quot;;&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
        style = &amp;quot;background-color:&amp;quot; .. self._equip_locked_bg .. &amp;quot;;&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
            equip_link = equip:name()&lt;br /&gt;
        else&lt;br /&gt;
            equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot;, link = &amp;quot;&amp;quot; }&lt;br /&gt;
            equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
        equip_icon = equip_icon or &amp;quot;&amp;quot;,&lt;br /&gt;
        style = style or &amp;quot;&amp;quot;,&lt;br /&gt;
        equip_link = equip_link,&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            table.insert(self._rows, self._blank_entry)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                table.insert(self._rows, self._blank_entry)&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, self._blank_entry)&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
                card = ship:name()&lt;br /&gt;
                content = content .. &amp;quot;*&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            content = content .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    self:generate_id()&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_button_template, id = self._id})&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_div_start, id = self._id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88092</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88092"/>
		<updated>2015-05-06T08:42:16Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id} wikia-menu-button&amp;quot;&amp;gt;Click this button to view the fleet&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[&amp;lt;table class=&amp;quot;nanaminfleetkai&amp;quot;&amp;gt;]],&lt;br /&gt;
    _table_end = [[&amp;lt;/table&amp;gt;]],&lt;br /&gt;
    _row_starter = [[&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;]],&lt;br /&gt;
    _added_cell_template = [[&amp;lt;td colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color:${bg_color};&amp;quot;&amp;gt;'''${content}'''&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _ship_template = [[&amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;${ship_card}&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _equip_template = [[&amp;lt;td&amp;gt;${equip_icon}&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;${style}&amp;quot;&amp;gt;${equip_link}&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    _blank_entry = [[&amp;lt;td style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _id = &amp;quot;&amp;quot;,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    math.randomseed(os.time())&lt;br /&gt;
    math.random(); math.random(); math.random()&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        ship_card = ship and ship:name() or &amp;quot;Invalid Ship Name&amp;quot;&lt;br /&gt;
    elseif ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, format{self._ship_template, ship_card = ship_card})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_link, style&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
        style = &amp;quot;background-color:&amp;quot; .. self._equip_locked_bg .. &amp;quot;;&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
        style = &amp;quot;background-color:&amp;quot; .. self._equip_locked_bg .. &amp;quot;;&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
            equip_link = equip:name()&lt;br /&gt;
        else&lt;br /&gt;
            equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot;, link = &amp;quot;&amp;quot; }&lt;br /&gt;
            equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
        equip_icon = equip_icon or &amp;quot;&amp;quot;,&lt;br /&gt;
        style = style or &amp;quot;&amp;quot;,&lt;br /&gt;
        equip_link = equip_link,&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            table.insert(self._rows, self._blank_entry)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                table.insert(self._rows, self._blank_entry)&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._rows, self._blank_entry)&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
                card = ship:name()&lt;br /&gt;
                content = content .. &amp;quot;*&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            content = content .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    self:generate_id()&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_button_template, id = self._id})&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_div_start, id = self._id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    table.insert(self._rows, &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;)&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88091</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88091"/>
		<updated>2015-05-06T04:38:58Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id} wikia-menu-button&amp;quot;&amp;gt;Click this button to view the fleet&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{|]],&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _added_cell_template = [[| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; font-weight: bold;&amp;quot; |${content}]],&lt;br /&gt;
    _ship_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color};&amp;quot; |${ship_card}]],&lt;br /&gt;
    _ship_text_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; width: 165px;&amp;quot; |${ship_name}]],&lt;br /&gt;
    _equip_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px;&amp;quot; |${equip_icon}&lt;br /&gt;
| style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    _equip_text_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px; text-align: center;&amp;quot; | -&lt;br /&gt;
| style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _ship_card_bg = &amp;quot;transparent&amp;quot;,&lt;br /&gt;
    _equip_icon_bg = &amp;quot;#8DCDEE&amp;quot;,&lt;br /&gt;
    _equip_bg = &amp;quot;#E4F3FB&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _id = &amp;quot;&amp;quot;,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    math.randomseed(os.time())&lt;br /&gt;
    math.random(); math.random(); math.random()&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._ship_text_template,&lt;br /&gt;
            bg_color = self._equip_bg,&lt;br /&gt;
            ship_name = ship:name() or &amp;quot;No Name Given&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._ship_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_card = ship_card,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_bg_color, equip_link&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot;, link = &amp;quot;&amp;quot; }&lt;br /&gt;
        equip_bg_color = self._equip_bg&lt;br /&gt;
        equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._equip_text_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_icon = equip_icon,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
                card = ship:name()&lt;br /&gt;
                content = content .. &amp;quot;*&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            content = content .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    self:generate_id()&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_button_template, id = self._id})&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_div_start, id = self._id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88090</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88090"/>
		<updated>2015-05-05T21:23:27Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id} wikia-menu-button&amp;quot;&amp;gt;Click this button to view the fleet&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{|]],&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _added_cell_template = [[| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; font-weight: bold;&amp;quot; |${content}]],&lt;br /&gt;
    _ship_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color};&amp;quot; |${ship_card}]],&lt;br /&gt;
    _ship_text_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; width: 165px;&amp;quot; |${ship_name}]],&lt;br /&gt;
    _equip_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px;&amp;quot; |${equip_icon}&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    _equip_text_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px; text-align: center;&amp;quot; | -&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _ship_card_bg = &amp;quot;transparent&amp;quot;,&lt;br /&gt;
    _equip_icon_bg = &amp;quot;#8DCDEE&amp;quot;,&lt;br /&gt;
    _equip_bg = &amp;quot;#E4F3FB&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _id = &amp;quot;&amp;quot;,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:customize_colors()&lt;br /&gt;
    --[[&lt;br /&gt;
    self._header_bg = self._args[&amp;quot;header_bg&amp;quot;] or self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._args[&amp;quot;ship_card_bg&amp;quot;] or self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._args[&amp;quot;equip_icon_bg&amp;quot;] or self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._args[&amp;quot;equip_bg&amp;quot;] or self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._args[&amp;quot;equip_locked_bg&amp;quot;] or self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._args[&amp;quot;extra_cells_bg&amp;quot;] or self._extra_cells_bg&lt;br /&gt;
    ]]--&lt;br /&gt;
    --Temporarily removing functionality because peoples' custom colors are causing eye strain for some&lt;br /&gt;
    self._header_bg = self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._extra_cells_bg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    math.randomseed(os.time())&lt;br /&gt;
    math.random(); math.random(); math.random()&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._ship_text_template,&lt;br /&gt;
            bg_color = self._equip_bg,&lt;br /&gt;
            ship_name = ship:name() or &amp;quot;No Name Given&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._ship_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_card = ship_card,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_bg_color, equip_link&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot; }&lt;br /&gt;
        equip_bg_color = self._equip_bg&lt;br /&gt;
        equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._equip_text_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_icon = equip_icon,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
                card = ship:name()&lt;br /&gt;
                content = content .. &amp;quot;*&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            content = content .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:customize_colors()&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    self:generate_id()&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_button_template, id = self._id})&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_div_start, id = self._id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90538</id>
		<title>Module:NanaminFunctions</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90538"/>
		<updated>2015-05-05T12:56:35Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local Ship = require(&amp;quot;Module:Ship&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local NanaminFunctions = {}&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.split(haystack, needle)&lt;br /&gt;
    local special_inputs = {&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount&amp;quot;,&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount Kai&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    local result = {}&lt;br /&gt;
    while mw.ustring.find(haystack, needle) do&lt;br /&gt;
        local split = mw.ustring.find(haystack, needle)&lt;br /&gt;
        local input = mw.ustring.sub(haystack, 1, split - 1)&lt;br /&gt;
        &lt;br /&gt;
        for _, value in pairs(special_inputs) do&lt;br /&gt;
            if mw.ustring.sub(haystack, 1, #value) == value then&lt;br /&gt;
                input = mw.ustring.sub(haystack, 1, #value)&lt;br /&gt;
                haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
                split = mw.ustring.find(haystack, needle) or 0&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        table.insert(result, input)&lt;br /&gt;
        haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
        if split == 0 then haystack = &amp;quot;&amp;quot; end&lt;br /&gt;
    end&lt;br /&gt;
    if haystack ~= &amp;quot;&amp;quot; then table.insert(result, haystack) end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_fighter_power(current_fp, equip, planes)&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        current_fp = current_fp + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    return current_fp&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos_ship(current_elos, entry, use_los)&lt;br /&gt;
    if entry[3] == nil then return current_elos end&lt;br /&gt;
    local ship = Ship(entry[1], entry[2])&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if use_los then&lt;br /&gt;
        los = tonumber(entry[3])&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos(current_elos, equip)&lt;br /&gt;
    --[[Effective LoS = Dive Bomber LoS x (1.04) + Torpedo Bomber LoS x (1.37)&lt;br /&gt;
    + Carrier-based Recon Plane LoS x (1.66) + Recon Seaplane LoS x (2.00)&lt;br /&gt;
    + Seaplane Bomber LoS x (1.78) + Small Radar LoS x (1.00) + Large Radar LoS x (0.99)&lt;br /&gt;
    + Searchlight LoS x (0.91) + √(base LoS of each ship) * (1.69)&lt;br /&gt;
    + (HQ Lv. rounded up to the next multiple of 5) x (-0.61)--]]&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        current_elos = current_elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.get_hq_bracket(hq_level)&lt;br /&gt;
    local bracket = tonumber(hq_level or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return bracket&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.process_legacy_name(name)&lt;br /&gt;
    local names = {&lt;br /&gt;
        [&amp;quot;12cm Naval Gun&amp;quot;] = &amp;quot;12cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Naval Gun&amp;quot;] = &amp;quot;12.7cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;14cm Naval Gun&amp;quot;] = &amp;quot;14cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Main)&amp;quot;] = &amp;quot;15.5cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.2) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.2) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.3) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.3) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;SKC34 20.3cm Twin Cannon&amp;quot;] = &amp;quot;SKC34 20.3cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 41cm Triple Cannon&amp;quot;] = &amp;quot;Prototype 41cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 51cm Twin Cannon&amp;quot;] = &amp;quot;Prototype 51cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.2cm Naval Gun&amp;quot;] = &amp;quot;15.2cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Secondary)&amp;quot;] = &amp;quot;15.5cm Triple Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15cm Twin Gun Mount&amp;quot;] = &amp;quot;15cm Twin Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;8cm Twin High-angle Mount&amp;quot;] = &amp;quot;8cm High-angle Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount (Carriage)&amp;quot;] = &amp;quot;10cm Twin High-angle Carriage Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm High-angle Mount&amp;quot;] = &amp;quot;12.7cm Single High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount (Late Model)&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount (Late Model)&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;12.7cm High-angle Gun + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7mm Machine Gun&amp;quot;] = &amp;quot;12.7mm Single Machine Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Autocannon&amp;quot;] = &amp;quot;25mm Single Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;BI-type 40mm Twin Machine Gun&amp;quot;] = &amp;quot;Type Bi 40mm Twin Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quad Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quad Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quint Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quintuple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Hull-mount O2 Torpedoes&amp;quot;] = &amp;quot;53cm Bow (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Submarine Bow Torpedo Mount (8 tubes)&amp;quot;] = &amp;quot;Submarine 53cm Bow Torpedo Mount (8 tubes)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type A Ko-hyoteki&amp;quot;] = &amp;quot;Kouhyouteki&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 21&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter (Skilled)&amp;quot;] = &amp;quot;Type 0 Fighter Model 21 (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 52 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 52&amp;quot;,&lt;br /&gt;
        [&amp;quot;Zero Fighter Type 52 Type C (601 Air Group)&amp;quot;] = &amp;quot;Zero Fighter Model 52C (601 Air Group)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Shiden Kai 2&amp;quot;] = &amp;quot;Shiden Kai Ni&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 62 Zero Fighter-bomber&amp;quot;] = &amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 2 Recon Aircraft&amp;quot;] = &amp;quot;Type 2 Reconnaissance Aircraft&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Recon Seaplane&amp;quot;] = &amp;quot;Type 0 Reconnaissance Seaplane&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 98 Recon Seaplane (Night Recon)&amp;quot;] = &amp;quot;Type 98 Reconnaissance Seaplane (Night Recon)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ka-type Observation Autogyro&amp;quot;] = &amp;quot;No. Ka Observation Autogyro&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Spotter/Liaison (ASW)&amp;quot;] = &amp;quot;Type 3 Command Liaison Aircraft (ASW)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 22 Surface RADAR Kai 4&amp;quot;] = &amp;quot;No. 22 Surface Radar Kai Yon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 13 AIR RADAR Kai&amp;quot;] = &amp;quot;No. 13 Air Radar Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Air RADAR Kai&amp;quot;] = &amp;quot;No. 21 Air Radar Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 93 Passive SONAR&amp;quot;] = &amp;quot;Type 93 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 SONAR&amp;quot;] = &amp;quot;Type 3 Active Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Passive SONAR&amp;quot;] = &amp;quot;Type 0 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 94 Depth Charge&amp;quot;] = &amp;quot;Type 94 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Depth Charge&amp;quot;] = &amp;quot;Type 3 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 91 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 91 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 1 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 1 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Improved Steam Turbine&amp;quot;] = &amp;quot;Improved Kanhon Type Turbine&amp;quot;,&lt;br /&gt;
        [&amp;quot;Enhanced Steam Boiler&amp;quot;] = &amp;quot;Enhanced Kanhon Type Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;New High Pressure-Temperature Steam Boiler&amp;quot;] = &amp;quot;New Model High Temperature High Pressure Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Medium)&amp;quot;] = &amp;quot;Extension Bulge (Medium)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Large)&amp;quot;] = &amp;quot;Extension Bulge (Large)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Drum Canister&amp;quot;] = &amp;quot;Drum Canister (Transport Use)&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    --Radar/sonar names without any special pieces&lt;br /&gt;
    name = name:gsub(&amp;quot;^Type%s(.+)%sRADAR$&amp;quot;, &amp;quot;No. %1 Radar&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    name = names[name] or name&lt;br /&gt;
    return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.shorten_name(name)&lt;br /&gt;
    --This takes an equipment name listed on Sandbox/EquipmentListKai/TypeSorted&lt;br /&gt;
    --and switches it with a shorter version of the name.&lt;br /&gt;
    local shortened = {&lt;br /&gt;
        [&amp;quot;Example&amp;quot;] = &amp;quot;Ex&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return shortened[name] or name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFunctions&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88089</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88089"/>
		<updated>2015-05-03T22:24:59Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id} wikia-menu-button&amp;quot;&amp;gt;Click this button to view the fleet&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{|]],&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _added_cell_template = [[| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; font-weight: bold;&amp;quot; |${content}]],&lt;br /&gt;
    _ship_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color};&amp;quot; |${ship_card}]],&lt;br /&gt;
    _ship_text_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; width: 165px;&amp;quot; |${ship_name}]],&lt;br /&gt;
    _equip_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px;&amp;quot; |${equip_icon}&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    _equip_text_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px; text-align: center;&amp;quot; | -&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _ship_card_bg = &amp;quot;transparent&amp;quot;,&lt;br /&gt;
    _equip_icon_bg = &amp;quot;#8DCDEE&amp;quot;,&lt;br /&gt;
    _equip_bg = &amp;quot;#E4F3FB&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _id = &amp;quot;&amp;quot;,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:customize_colors()&lt;br /&gt;
    --[[&lt;br /&gt;
    self._header_bg = self._args[&amp;quot;header_bg&amp;quot;] or self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._args[&amp;quot;ship_card_bg&amp;quot;] or self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._args[&amp;quot;equip_icon_bg&amp;quot;] or self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._args[&amp;quot;equip_bg&amp;quot;] or self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._args[&amp;quot;equip_locked_bg&amp;quot;] or self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._args[&amp;quot;extra_cells_bg&amp;quot;] or self._extra_cells_bg&lt;br /&gt;
    ]]--&lt;br /&gt;
    --Temporarily removing functionality because peoples' custom colors are causing eye strain for some&lt;br /&gt;
    self._header_bg = self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._extra_cells_bg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    math.randomseed(os.time())&lt;br /&gt;
    math.random(); math.random(); math.random()&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._ship_text_template,&lt;br /&gt;
            bg_color = self._equip_bg,&lt;br /&gt;
            ship_name = ship:name() or &amp;quot;No Name Given&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._ship_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_card = ship_card,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_bg_color, equip_link&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot; }&lt;br /&gt;
        equip_bg_color = self._equip_bg&lt;br /&gt;
        equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._equip_text_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_icon = equip_icon,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then card = ship:name() end&lt;br /&gt;
            content = content .. &amp;quot;*&amp;quot; .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:customize_colors()&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    self:generate_id()&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_button_template, id = self._id})&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_div_start, id = self._id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88088</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88088"/>
		<updated>2015-05-03T07:35:58Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id} wikia-menu-button&amp;quot;&amp;gt;Click this button to view the fleet&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{|]],&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _added_cell_template = [[| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; font-weight: bold;&amp;quot; |${content}]],&lt;br /&gt;
    _ship_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color};&amp;quot; |${ship_card}]],&lt;br /&gt;
    _ship_text_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; width: 165px;&amp;quot; |${ship_name}]],&lt;br /&gt;
    _equip_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px;&amp;quot; |${equip_icon}&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    _equip_text_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px; text-align: center;&amp;quot; | -&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _ship_card_bg = &amp;quot;transparent&amp;quot;,&lt;br /&gt;
    _equip_icon_bg = &amp;quot;#8DCDEE&amp;quot;,&lt;br /&gt;
    _equip_bg = &amp;quot;#E4F3FB&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _id = &amp;quot;&amp;quot;,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:customize_colors()&lt;br /&gt;
    --[[&lt;br /&gt;
    self._header_bg = self._args[&amp;quot;header_bg&amp;quot;] or self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._args[&amp;quot;ship_card_bg&amp;quot;] or self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._args[&amp;quot;equip_icon_bg&amp;quot;] or self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._args[&amp;quot;equip_bg&amp;quot;] or self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._args[&amp;quot;equip_locked_bg&amp;quot;] or self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._args[&amp;quot;extra_cells_bg&amp;quot;] or self._extra_cells_bg&lt;br /&gt;
    ]]--&lt;br /&gt;
    --Temporarily removing functionality because peoples' custom colors are causing eye strain for some&lt;br /&gt;
    self._header_bg = self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._extra_cells_bg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    --No built-in hashing algorithms, so we'll just cheat and use the route, HQ level and a random number&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._ship_text_template,&lt;br /&gt;
            bg_color = self._equip_bg,&lt;br /&gt;
            ship_name = ship:name() or &amp;quot;No Name Given&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._ship_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_card = ship_card,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_bg_color, equip_link&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot; }&lt;br /&gt;
        equip_bg_color = self._equip_bg&lt;br /&gt;
        equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._equip_text_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_icon = equip_icon,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then card = ship:name() end&lt;br /&gt;
            content = content .. &amp;quot;*&amp;quot; .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:customize_colors()&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    self:generate_id()&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_button_template, id = self._id})&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_div_start, id = self._id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88087</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88087"/>
		<updated>2015-05-03T07:08:29Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id} wikia-menu-button&amp;quot;&amp;gt;Click this button to view the fleet&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{|]],&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _added_cell_template = [[| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; font-weight: bold;&amp;quot; |${content}]],&lt;br /&gt;
    _ship_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color};&amp;quot; |${ship_card}]],&lt;br /&gt;
    _ship_text_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; width: 165px;&amp;quot; |${ship_name}]],&lt;br /&gt;
    _equip_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px;&amp;quot; |${equip_icon}&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    _equip_text_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px; text-align: center;&amp;quot; | -&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _ship_card_bg = &amp;quot;transparent&amp;quot;,&lt;br /&gt;
    _equip_icon_bg = &amp;quot;#8DCDEE&amp;quot;,&lt;br /&gt;
    _equip_bg = &amp;quot;#E4F3FB&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _id = &amp;quot;&amp;quot;,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:customize_colors()&lt;br /&gt;
    --[[&lt;br /&gt;
    self._header_bg = self._args[&amp;quot;header_bg&amp;quot;] or self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._args[&amp;quot;ship_card_bg&amp;quot;] or self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._args[&amp;quot;equip_icon_bg&amp;quot;] or self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._args[&amp;quot;equip_bg&amp;quot;] or self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._args[&amp;quot;equip_locked_bg&amp;quot;] or self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._args[&amp;quot;extra_cells_bg&amp;quot;] or self._extra_cells_bg&lt;br /&gt;
    ]]--&lt;br /&gt;
    --Temporarily removing functionality because peoples' custom colors are causing eye strain for some&lt;br /&gt;
    self._header_bg = self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._extra_cells_bg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    --No built-in hashing algorithms, so we'll just cheat and use the route, HQ level and a random number&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._ship_text_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_name = ship:name() or &amp;quot;No Name Given&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._ship_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_card = ship_card,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_bg_color, equip_link&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot; }&lt;br /&gt;
        equip_bg_color = self._equip_bg&lt;br /&gt;
        equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._equip_text_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_icon = equip_icon,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then card = ship:name() end&lt;br /&gt;
            content = content .. &amp;quot;*&amp;quot; .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:customize_colors()&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    self:generate_id()&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_button_template, id = self._id})&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_div_start, id = self._id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88086</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88086"/>
		<updated>2015-05-03T06:57:08Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id}&amp;quot;&amp;gt;Click this button to view the fleet&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{|]],&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _added_cell_template = [[| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; font-weight: bold;&amp;quot; |${content}]],&lt;br /&gt;
    _ship_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color};&amp;quot; |${ship_card}]],&lt;br /&gt;
    _ship_text_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; width: 165px;&amp;quot; |${ship_name}]],&lt;br /&gt;
    _equip_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px;&amp;quot; |${equip_icon}&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    _equip_text_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px; text-align: center;&amp;quot; | -&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _ship_card_bg = &amp;quot;transparent&amp;quot;,&lt;br /&gt;
    _equip_icon_bg = &amp;quot;#8DCDEE&amp;quot;,&lt;br /&gt;
    _equip_bg = &amp;quot;#E4F3FB&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:customize_colors()&lt;br /&gt;
    --[[&lt;br /&gt;
    self._header_bg = self._args[&amp;quot;header_bg&amp;quot;] or self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._args[&amp;quot;ship_card_bg&amp;quot;] or self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._args[&amp;quot;equip_icon_bg&amp;quot;] or self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._args[&amp;quot;equip_bg&amp;quot;] or self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._args[&amp;quot;equip_locked_bg&amp;quot;] or self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._args[&amp;quot;extra_cells_bg&amp;quot;] or self._extra_cells_bg&lt;br /&gt;
    ]]--&lt;br /&gt;
    --Temporarily removing functionality because peoples' custom colors are causing eye strain for some&lt;br /&gt;
    self._header_bg = self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._extra_cells_bg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    --No built-in hashing algorithms, so we'll just cheat and use the route, HQ level and a random number&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._ship_text_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_name = ship:name() or &amp;quot;No Name Given&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._ship_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_card = ship_card,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_bg_color, equip_link&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot; }&lt;br /&gt;
        equip_bg_color = self._equip_bg&lt;br /&gt;
        equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._equip_text_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_icon = equip_icon,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then card = ship:name() end&lt;br /&gt;
            content = content .. &amp;quot;*&amp;quot; .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:customize_colors()&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    local id = self:generate_id()&lt;br /&gt;
    --table.insert(self._rows, format{self._collapse_button_template, id = id})&lt;br /&gt;
    --table.insert(self._rows, format{self._collapse_div_start, id = id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    --table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88085</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88085"/>
		<updated>2015-05-03T06:56:26Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id}&amp;quot;&amp;gt;Click this button to view the fleet&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{|]],&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _added_cell_template = [[| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; font-weight: bold;&amp;quot; |${content}]],&lt;br /&gt;
    _ship_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color};&amp;quot; |${ship_card}]],&lt;br /&gt;
    _ship_text_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; width: 165px;&amp;quot; |${ship_name}]],&lt;br /&gt;
    _equip_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px;&amp;quot; |${equip_icon}&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    _equip_text_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px; text-align: center;&amp;quot; | -&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _ship_card_bg = &amp;quot;transparent&amp;quot;,&lt;br /&gt;
    _equip_icon_bg = &amp;quot;#8DCDEE&amp;quot;,&lt;br /&gt;
    _equip_bg = &amp;quot;#E4F3FB&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:customize_colors()&lt;br /&gt;
    --[[&lt;br /&gt;
    self._header_bg = self._args[&amp;quot;header_bg&amp;quot;] or self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._args[&amp;quot;ship_card_bg&amp;quot;] or self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._args[&amp;quot;equip_icon_bg&amp;quot;] or self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._args[&amp;quot;equip_bg&amp;quot;] or self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._args[&amp;quot;equip_locked_bg&amp;quot;] or self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._args[&amp;quot;extra_cells_bg&amp;quot;] or self._extra_cells_bg&lt;br /&gt;
    ]]--&lt;br /&gt;
    --Temporarily removing functionality because peoples' custom colors are causing eye strain for some&lt;br /&gt;
    self._header_bg = self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._extra_cells_bg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    --No built-in hashing algorithms, so we'll just cheat and use the route, HQ level and a random number&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._ship_text_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_name = ship:name() or &amp;quot;No Name Given&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._ship_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_card = ship_card,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_bg_color, equip_link&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot; }&lt;br /&gt;
        equip_bg_color = self._equip_bg&lt;br /&gt;
        equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._equip_text_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_icon = equip_icon,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then card = ship:name() end&lt;br /&gt;
            content = content .. &amp;quot;*&amp;quot; .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:customize_colors()&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    local id = self:generate_id()&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_button_template, id = id})&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_div_start, id = id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88084</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88084"/>
		<updated>2015-05-03T06:54:56Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _collapse_button_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${id}&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_start = [[&amp;lt;div id=&amp;quot;mw-customcollapsible-${id}&amp;quot; class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;]],&lt;br /&gt;
    _collapse_div_end = [[&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{|]],&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _added_cell_template = [[| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; font-weight: bold;&amp;quot; |${content}]],&lt;br /&gt;
    _ship_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color};&amp;quot; |${ship_card}]],&lt;br /&gt;
    _ship_text_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; width: 165px;&amp;quot; |${ship_name}]],&lt;br /&gt;
    _equip_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px;&amp;quot; |${equip_icon}&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    _equip_text_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px; text-align: center;&amp;quot; | -&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _ship_card_bg = &amp;quot;transparent&amp;quot;,&lt;br /&gt;
    _equip_icon_bg = &amp;quot;#8DCDEE&amp;quot;,&lt;br /&gt;
    _equip_bg = &amp;quot;#E4F3FB&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:customize_colors()&lt;br /&gt;
    --[[&lt;br /&gt;
    self._header_bg = self._args[&amp;quot;header_bg&amp;quot;] or self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._args[&amp;quot;ship_card_bg&amp;quot;] or self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._args[&amp;quot;equip_icon_bg&amp;quot;] or self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._args[&amp;quot;equip_bg&amp;quot;] or self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._args[&amp;quot;equip_locked_bg&amp;quot;] or self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._args[&amp;quot;extra_cells_bg&amp;quot;] or self._extra_cells_bg&lt;br /&gt;
    ]]--&lt;br /&gt;
    --Temporarily removing functionality because peoples' custom colors are causing eye strain for some&lt;br /&gt;
    self._header_bg = self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._extra_cells_bg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:generate_id()&lt;br /&gt;
    --No built-in hashing algorithms, so we'll just cheat and use the route, HQ level and a random number&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._ship_text_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_name = ship:name() or &amp;quot;No Name Given&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._ship_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_card = ship_card,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_bg_color, equip_link&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot; }&lt;br /&gt;
        equip_bg_color = self._equip_bg&lt;br /&gt;
        equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._equip_text_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_icon = equip_icon,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then card = ship:name() end&lt;br /&gt;
            content = content .. &amp;quot;*&amp;quot; .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:customize_colors()&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    local id = self:generate_id()&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_button_template, id = id})&lt;br /&gt;
    table.insert(self._rows, format{self._collapse_div_start, id = id})&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    table.insert(self._rows, self._collapse_div_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88083</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88083"/>
		<updated>2015-05-03T06:39:36Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{|]],&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _added_cell_template = [[| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; font-weight: bold;&amp;quot; |${content}]],&lt;br /&gt;
    _ship_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color};&amp;quot; |${ship_card}]],&lt;br /&gt;
    _ship_text_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; width: 165px;&amp;quot; |${ship_name}]],&lt;br /&gt;
    _equip_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px;&amp;quot; |${equip_icon}&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    _equip_text_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px; text-align: center;&amp;quot; | -&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _ship_card_bg = &amp;quot;transparent&amp;quot;,&lt;br /&gt;
    _equip_icon_bg = &amp;quot;#8DCDEE&amp;quot;,&lt;br /&gt;
    _equip_bg = &amp;quot;#E4F3FB&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:customize_colors()&lt;br /&gt;
    --[[&lt;br /&gt;
    self._header_bg = self._args[&amp;quot;header_bg&amp;quot;] or self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._args[&amp;quot;ship_card_bg&amp;quot;] or self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._args[&amp;quot;equip_icon_bg&amp;quot;] or self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._args[&amp;quot;equip_bg&amp;quot;] or self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._args[&amp;quot;equip_locked_bg&amp;quot;] or self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._args[&amp;quot;extra_cells_bg&amp;quot;] or self._extra_cells_bg&lt;br /&gt;
    ]]--&lt;br /&gt;
    --Temporarily removing functionality because peoples' custom colors are causing eye strain for some&lt;br /&gt;
    self._header_bg = self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._extra_cells_bg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._ship_text_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_name = ship:name() or &amp;quot;No Name Given&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._ship_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_card = ship_card,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_bg_color, equip_link&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot; }&lt;br /&gt;
        equip_bg_color = self._equip_bg&lt;br /&gt;
        equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._equip_text_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_icon = equip_icon,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then card = ship:name() end&lt;br /&gt;
            content = content .. &amp;quot;*&amp;quot; .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:customize_colors()&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88082</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88082"/>
		<updated>2015-05-03T06:38:57Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{|]],&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _added_cell_template = [[| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; font-weight: bold;&amp;quot; |${content}]],&lt;br /&gt;
    _ship_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color};&amp;quot; |${ship_card}]],&lt;br /&gt;
    _ship_text_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; width: 165px;&amp;quot; |${ship_name}]],&lt;br /&gt;
    _equip_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px;&amp;quot; |${equip_icon}&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    _equip_text_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px; text-align: center;&amp;quot; | -&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _ship_card_bg = &amp;quot;transparent&amp;quot;,&lt;br /&gt;
    _equip_icon_bg = &amp;quot;#8DCDEE&amp;quot;,&lt;br /&gt;
    _equip_bg = &amp;quot;#E4F3FB&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:customize_colors()&lt;br /&gt;
    --[[&lt;br /&gt;
    self._header_bg = self._args[&amp;quot;header_bg&amp;quot;] or self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._args[&amp;quot;ship_card_bg&amp;quot;] or self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._args[&amp;quot;equip_icon_bg&amp;quot;] or self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._args[&amp;quot;equip_bg&amp;quot;] or self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._args[&amp;quot;equip_locked_bg&amp;quot;] or self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._args[&amp;quot;extra_cells_bg&amp;quot;] or self._extra_cells_bg&lt;br /&gt;
    ]]--&lt;br /&gt;
    --Temporarily removing functionality because peoples' custom colors are causing eye strain for some&lt;br /&gt;
    self._header_bg = self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._extra_cells_bg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._ship_text_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_name = ship:name() or &amp;quot;No Name Given&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._ship_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_card = ship_card,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_bg_color, equip_link&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot; }&lt;br /&gt;
        equip_bg_color = self._equip_bg&lt;br /&gt;
        equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._equip_text_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_icon = equip_icon,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            if self._args[&amp;quot;text_only&amp;quot;] then card = ship:name() end&lt;br /&gt;
            content = content .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:customize_colors()&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88081</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88081"/>
		<updated>2015-05-03T06:32:55Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{|]],&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _added_cell_template = [[| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; font-weight: bold;&amp;quot; |${content}]],&lt;br /&gt;
    _ship_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color};&amp;quot; |${ship_card}]],&lt;br /&gt;
    _ship_text_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; width: 165px;&amp;quot; |${ship_name}]],&lt;br /&gt;
    _equip_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px;&amp;quot; |${equip_icon}&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    _equip_text_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px; text-align: center;&amp;quot; | -&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _ship_card_bg = &amp;quot;transparent&amp;quot;,&lt;br /&gt;
    _equip_icon_bg = &amp;quot;#8DCDEE&amp;quot;,&lt;br /&gt;
    _equip_bg = &amp;quot;#E4F3FB&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:customize_colors()&lt;br /&gt;
    --[[&lt;br /&gt;
    self._header_bg = self._args[&amp;quot;header_bg&amp;quot;] or self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._args[&amp;quot;ship_card_bg&amp;quot;] or self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._args[&amp;quot;equip_icon_bg&amp;quot;] or self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._args[&amp;quot;equip_bg&amp;quot;] or self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._args[&amp;quot;equip_locked_bg&amp;quot;] or self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._args[&amp;quot;extra_cells_bg&amp;quot;] or self._extra_cells_bg&lt;br /&gt;
    ]]--&lt;br /&gt;
    --Temporarily removing functionality because peoples' custom colors are causing eye strain for some&lt;br /&gt;
    self._header_bg = self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._extra_cells_bg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._ship_text_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_name = ship:name() or &amp;quot;No Name Given&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._ship_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_card = ship_card,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_bg_color, equip_link&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot; }&lt;br /&gt;
        equip_bg_color = self._equip_bg&lt;br /&gt;
        equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._equip_text_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_icon = equip_icon,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            content = content .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:customize_colors()&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88080</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88080"/>
		<updated>2015-05-03T06:16:47Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{|]],&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _added_cell_template = [[| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; font-weight: bold;&amp;quot; |${content}]],&lt;br /&gt;
    _ship_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color};&amp;quot; |${ship_card}]],&lt;br /&gt;
    _ship_text_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center;&amp;quot; |${ship_name}]],&lt;br /&gt;
    _equip_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px;&amp;quot; |${equip_icon}&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    _equip_text_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px; text-align: center;&amp;quot; | -&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _ship_card_bg = &amp;quot;transparent&amp;quot;,&lt;br /&gt;
    _equip_icon_bg = &amp;quot;#8DCDEE&amp;quot;,&lt;br /&gt;
    _equip_bg = &amp;quot;#E4F3FB&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:customize_colors()&lt;br /&gt;
    --[[&lt;br /&gt;
    self._header_bg = self._args[&amp;quot;header_bg&amp;quot;] or self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._args[&amp;quot;ship_card_bg&amp;quot;] or self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._args[&amp;quot;equip_icon_bg&amp;quot;] or self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._args[&amp;quot;equip_bg&amp;quot;] or self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._args[&amp;quot;equip_locked_bg&amp;quot;] or self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._args[&amp;quot;extra_cells_bg&amp;quot;] or self._extra_cells_bg&lt;br /&gt;
    ]]--&lt;br /&gt;
    --Temporarily removing functionality because peoples' custom colors are causing eye strain for some&lt;br /&gt;
    self._header_bg = self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._extra_cells_bg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._ship_text_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_name = ship:name() or &amp;quot;No Name Given&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._ship_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_card = ship_card,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_bg_color, equip_link&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot; }&lt;br /&gt;
        equip_bg_color = self._equip_bg&lt;br /&gt;
        equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._equip_text_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_icon = equip_icon,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            content = content .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:customize_colors()&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88079</id>
		<title>Module:NanaminFleetKai</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFleetKai&amp;diff=88079"/>
		<updated>2015-05-03T06:09:59Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require('Module:Ship')&lt;br /&gt;
local ShipCardKai = require('Module:ShipCardKai')&lt;br /&gt;
local Equipment = require('Module:Equipment')&lt;br /&gt;
&lt;br /&gt;
local Formatting = require('Module:Formatting')&lt;br /&gt;
local format = require('Module:StringInterpolation').format&lt;br /&gt;
&lt;br /&gt;
local Functions = require('Module:NanaminFunctions')&lt;br /&gt;
&lt;br /&gt;
local NanaminFleetKai = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _items = {},&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{|]],&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    _added_cell_template = [[| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background: ${bg_color}; text-align: center; font-weight: bold;&amp;quot; |${content}]],&lt;br /&gt;
    _ship_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color};&amp;quot; |${ship_card}]],&lt;br /&gt;
    _ship_text_template = [[| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;background: ${bg_color};&amp;quot; |${ship_name}]],&lt;br /&gt;
    _equip_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px;&amp;quot; |${equip_icon}&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    _equip_text_template = [[| style=&amp;quot;background-color: ${icon_bg_color}; width: 15px;&amp;quot; | -&lt;br /&gt;
    | style=&amp;quot;background-color: ${equip_bg_color}; width: 175px; text-align: center;&amp;quot; |${equip_link}]],&lt;br /&gt;
    &lt;br /&gt;
    _header_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    _ship_card_bg = &amp;quot;transparent&amp;quot;,&lt;br /&gt;
    _equip_icon_bg = &amp;quot;#8DCDEE&amp;quot;,&lt;br /&gt;
    _equip_bg = &amp;quot;#E4F3FB&amp;quot;,&lt;br /&gt;
    _equip_locked_bg = &amp;quot;#CDDBE2&amp;quot;,&lt;br /&gt;
    _extra_cells_bg = &amp;quot;#98D2F0&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _blank = &amp;quot;Empty_ship_slot.png&amp;quot;,&lt;br /&gt;
    _size = &amp;quot;120x165px&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _hq_lvl = 0,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:customize_colors()&lt;br /&gt;
    --[[&lt;br /&gt;
    self._header_bg = self._args[&amp;quot;header_bg&amp;quot;] or self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._args[&amp;quot;ship_card_bg&amp;quot;] or self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._args[&amp;quot;equip_icon_bg&amp;quot;] or self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._args[&amp;quot;equip_bg&amp;quot;] or self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._args[&amp;quot;equip_locked_bg&amp;quot;] or self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._args[&amp;quot;extra_cells_bg&amp;quot;] or self._extra_cells_bg&lt;br /&gt;
    ]]--&lt;br /&gt;
    --Temporarily removing functionality because peoples' custom colors are causing eye strain for some&lt;br /&gt;
    self._header_bg = self._header_bg&lt;br /&gt;
    self._ship_card_bg = self._ship_card_bg&lt;br /&gt;
    self._equip_icon_bg = self._equip_icon_bg&lt;br /&gt;
    self._equip_bg = self._equip_bg&lt;br /&gt;
    self._equip_locked_bg = self._equip_locked_bg&lt;br /&gt;
    self._extra_cells_bg = self._extra_cells_bg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_hq_level()&lt;br /&gt;
    self._hq_lvl = tonumber(self._args[&amp;quot;hq&amp;quot;] or 0)&lt;br /&gt;
    &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5&lt;br /&gt;
    if tonumber(self._args[&amp;quot;hq&amp;quot;] or 0) % 5 == 0 then&lt;br /&gt;
        self._hq_lvl = self._hq_lvl + 5&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_los(entry)&lt;br /&gt;
    local ship = Ship(entry[1], entry[2] ~= &amp;quot;/&amp;quot; and entry[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if self._args[&amp;quot;use_los&amp;quot;] then&lt;br /&gt;
        los = tonumber(entry[3]) or 0&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    self._elos = self._elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_args(args)&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for index, item in ipairs(args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
            table.insert(self._items, mw.ustring.sub(item, 2))&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; and #entry &amp;gt; 0 then&lt;br /&gt;
            self:process_los(entry)&lt;br /&gt;
            table.insert(self._items, entry)&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local processed = Functions.split(item, '/')&lt;br /&gt;
            for _, item in ipairs(processed) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        self:process_los(entry)&lt;br /&gt;
        table.insert(self._items, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:process_equipment(equip, plane_count)&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        self._elos = self._elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if can_fight[equip:type()] then&lt;br /&gt;
        if plane_count and equip:aa() then&lt;br /&gt;
            self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa())&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_ship_row(ship)&lt;br /&gt;
    local ship_card&lt;br /&gt;
    if ship and ship:name() then&lt;br /&gt;
        ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}&lt;br /&gt;
    else&lt;br /&gt;
        ship_card = Formatting:format_image{self._blank, size = self._size}&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._ship_text_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_name = ship:name() or &amp;quot;No Name Given&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._ship_template,&lt;br /&gt;
            bg_color = self._ship_card_bg,&lt;br /&gt;
            ship_card = ship_card,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_equip_row(ship, entry, slot)&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_bg_color, equip_link&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_bg_color = self._equip_locked_bg&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self:process_equipment(equip, select(2, ship:slot(slot)))&lt;br /&gt;
        equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot; }&lt;br /&gt;
        equip_bg_color = self._equip_bg&lt;br /&gt;
        equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
    end&lt;br /&gt;
    if self._args[&amp;quot;text_only&amp;quot;] then&lt;br /&gt;
        table.insert(self._rows, format{self._equip_text_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
            icon_bg_color = self._equip_icon_bg,&lt;br /&gt;
            equip_icon = equip_icon,&lt;br /&gt;
            equip_bg_color = equip_bg_color,&lt;br /&gt;
            equip_link = equip_link,&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_header(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._header_bg })&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:build_table()&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while i &amp;lt; #self._items do&lt;br /&gt;
        if type(self._items[i]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship1 = Ship(self._items[i][1], self._items[i][2] ~= &amp;quot;/&amp;quot; and self._items[i][2] or &amp;quot;&amp;quot;)&lt;br /&gt;
        self:insert_ship_row(ship1)&lt;br /&gt;
        self:insert_equip_row(ship1, self._items[i], 1)&lt;br /&gt;
        &lt;br /&gt;
        if type(self._items[i + 1]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            --self:add_header(self._items[i])&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
        local ship2&lt;br /&gt;
        if self._items[i + 1] then&lt;br /&gt;
            if self._items[i + 1][2] then self._items[i + 1][2] = self._items[i + 1][2]:gsub('/', '') end&lt;br /&gt;
            ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2])&lt;br /&gt;
            self:insert_ship_row(ship2)&lt;br /&gt;
            self:insert_equip_row(ship2, self._items[i + 1], 1)&lt;br /&gt;
        else&lt;br /&gt;
            self:insert_ship_row(nil)&lt;br /&gt;
            self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for j = 2, 4 do&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
            self:insert_equip_row(ship1, self._items[i], j)&lt;br /&gt;
            if self._items[i + 1] then&lt;br /&gt;
                self:insert_equip_row(ship2, self._items[i + 1], j)&lt;br /&gt;
            else&lt;br /&gt;
                self:insert_equip_row(nil, nil, 1)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        i = i + 2&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:insert_extra(content)&lt;br /&gt;
    table.insert(self._rows, self._row_starter)&lt;br /&gt;
    table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:add_extras()&lt;br /&gt;
    local elos = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (self._hq_lvl * 0.61))&lt;br /&gt;
    local content = &amp;quot;Effective Line of Sight: &amp;quot; .. elos .. &amp;quot; // Fighter Power: &amp;quot; .. tostring(self._fighter_power)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    content = &amp;quot;Route Taken: &amp;quot; .. (self._args[&amp;quot;route&amp;quot;] or &amp;quot;&amp;quot;)&lt;br /&gt;
    self:insert_extra(content)&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;difficulty&amp;quot;] then&lt;br /&gt;
        self:insert_extra(&amp;quot;Difficulty Chosen: &amp;quot; .. self._args[&amp;quot;difficulty&amp;quot;])&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if self._args[&amp;quot;drops&amp;quot;] then&lt;br /&gt;
        local drops = Functions.split(self._args[&amp;quot;drops&amp;quot;], '/')&lt;br /&gt;
        content = &amp;quot;Notable Drops&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
        for i = 1, #drops do&lt;br /&gt;
            local ship = Ship(drops[i], &amp;quot;&amp;quot;)&lt;br /&gt;
            local card = ShipCardKai:battle_card{ship = ship, link = ship:link(), caption = ship:name()}&lt;br /&gt;
            content = content .. card .. &amp;quot; &amp;quot;&lt;br /&gt;
            if i % 3 == 0 then&lt;br /&gt;
                content = mw.ustring.sub(content, 1, -2) .. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        self:insert_extra(content)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:customize_colors()&lt;br /&gt;
    self:process_hq_level()&lt;br /&gt;
    self:process_args(args)&lt;br /&gt;
    table.insert(self._rows, self._table_start)&lt;br /&gt;
    self:build_table()&lt;br /&gt;
    self:add_extras()&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
    return table.concat(self._rows, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFleetKai.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return NanaminFleetKai:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFleetKai&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90537</id>
		<title>Module:NanaminFunctions</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:NanaminFunctions&amp;diff=90537"/>
		<updated>2015-04-29T21:53:29Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local Ship = require(&amp;quot;Module:Ship&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local NanaminFunctions = {}&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.split(haystack, needle)&lt;br /&gt;
    local special_inputs = {&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount&amp;quot;,&lt;br /&gt;
        &amp;quot;381mm/50 Triple Gun Mount Kai&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    local result = {}&lt;br /&gt;
    while mw.ustring.find(haystack, needle) do&lt;br /&gt;
        local split = mw.ustring.find(haystack, needle)&lt;br /&gt;
        local input = mw.ustring.sub(haystack, 1, split - 1)&lt;br /&gt;
        &lt;br /&gt;
        for _, value in pairs(special_inputs) do&lt;br /&gt;
            if mw.ustring.sub(haystack, 1, #value) == value then&lt;br /&gt;
                input = mw.ustring.sub(haystack, 1, #value)&lt;br /&gt;
                haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
                split = mw.ustring.find(haystack, needle) or 0&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        table.insert(result, input)&lt;br /&gt;
        haystack = mw.ustring.sub(haystack, split + 1)&lt;br /&gt;
        if split == 0 then haystack = &amp;quot;&amp;quot; end&lt;br /&gt;
    end&lt;br /&gt;
    if haystack ~= &amp;quot;&amp;quot; then table.insert(result, haystack) end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_fighter_power(current_fp, equip, planes)&lt;br /&gt;
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted&lt;br /&gt;
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }&lt;br /&gt;
    if types_allowed[equip:type()] and equip:aa() then&lt;br /&gt;
        current_fp = current_fp + math.floor(math.sqrt(planes) * equip:aa())&lt;br /&gt;
    end&lt;br /&gt;
    return current_fp&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos_ship(current_elos, entry, use_los)&lt;br /&gt;
    if entry[3] == nil then return current_elos end&lt;br /&gt;
    local ship = Ship(entry[1], entry[2])&lt;br /&gt;
    local los = ship:los() or 0&lt;br /&gt;
    local los_max = ship:los_max() or los&lt;br /&gt;
    if use_los then&lt;br /&gt;
        los = tonumber(entry[3])&lt;br /&gt;
    else&lt;br /&gt;
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos + math.sqrt(los) * 1.69&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.add_to_elos(current_elos, equip)&lt;br /&gt;
    --[[Effective LoS = Dive Bomber LoS x (1.04) + Torpedo Bomber LoS x (1.37)&lt;br /&gt;
    + Carrier-based Recon Plane LoS x (1.66) + Recon Seaplane LoS x (2.00)&lt;br /&gt;
    + Seaplane Bomber LoS x (1.78) + Small Radar LoS x (1.00) + Large Radar LoS x (0.99)&lt;br /&gt;
    + Searchlight LoS x (0.91) + √(base LoS of each ship) * (1.69)&lt;br /&gt;
    + (HQ Lv. rounded up to the next multiple of 5) x (-0.61)--]]&lt;br /&gt;
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }&lt;br /&gt;
    if multiplier[equip:type()] ~= nil and equip:los() then&lt;br /&gt;
        current_elos = current_elos + (equip:los() * multiplier[equip:type()])&lt;br /&gt;
    end&lt;br /&gt;
    return current_elos&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.get_hq_bracket(hq_level)&lt;br /&gt;
    local bracket = tonumber(hq_level or 0)&lt;br /&gt;
 &lt;br /&gt;
    --Get bracket of 5&lt;br /&gt;
    bracket = bracket - (bracket % 5) + 5&lt;br /&gt;
    if tonumber(hq_level or 0) % 5 == 0 then&lt;br /&gt;
        bracket = bracket + 5&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return bracket&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NanaminFunctions.process_legacy_name(name)&lt;br /&gt;
    local names = {&lt;br /&gt;
        [&amp;quot;12cm Naval Gun&amp;quot;] = &amp;quot;12cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Naval Gun&amp;quot;] = &amp;quot;12.7cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;14cm Naval Gun&amp;quot;] = &amp;quot;14cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Main)&amp;quot;] = &amp;quot;15.5cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.2) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.2) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;20.3cm(no.3) Twin Gun Mount&amp;quot;] = &amp;quot;20.3cm (No.3) Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;SKC34 20.3cm Twin Cannon&amp;quot;] = &amp;quot;SKC34 20.3cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 41cm Triple Cannon&amp;quot;] = &amp;quot;Prototype 41cm Triple Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;Prototype 51cm Twin Cannon&amp;quot;] = &amp;quot;Prototype 51cm Twin Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.2cm Naval Gun&amp;quot;] = &amp;quot;15.2cm Single Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15.5cm Triple Gun Mount (Secondary)&amp;quot;] = &amp;quot;15.5cm Triple Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;15cm Twin Gun Mount&amp;quot;] = &amp;quot;15cm Twin Secondary Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;8cm Twin High-angle Mount&amp;quot;] = &amp;quot;8cm High-angle Gun&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Gun Mount (Carriage)&amp;quot;] = &amp;quot;10cm Twin High-angle Carriage Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;10cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm High-angle Mount&amp;quot;] = &amp;quot;12.7cm Single High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount (Late Model)&amp;quot;] = &amp;quot;12.7cm Twin High-angle Gun Mount (Late Model)&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7cm Twin High-angle Mount + Anti-Aircraft Fire Director&amp;quot;] = &amp;quot;12.7cm High-angle Gun + Anti-Aircraft Fire Director&amp;quot;,&lt;br /&gt;
        [&amp;quot;12.7mm Machine Gun&amp;quot;] = &amp;quot;12.7mm Single Machine Gun Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;25mm Autocannon&amp;quot;] = &amp;quot;25mm Single Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;BI-type 40mm Twin Machine Gun&amp;quot;] = &amp;quot;Type Bi 40mm Twin Autocannon Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quad Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quad Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quadruple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;61cm Quint Oxygen Torpedo Mount&amp;quot;] = &amp;quot;61cm Quintuple (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Hull-mount O2 Torpedoes&amp;quot;] = &amp;quot;53cm Bow (Oxygen) Torpedo Mount&amp;quot;,&lt;br /&gt;
        [&amp;quot;53cm Submarine Bow Torpedo Mount (8 tubes)&amp;quot;] = &amp;quot;Submarine 53cm Bow Torpedo Mount (8 tubes)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type A Ko-hyoteki&amp;quot;] = &amp;quot;Kouhyouteki&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 21&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Zero Fighter (Skilled)&amp;quot;] = &amp;quot;Type 0 Fighter Model 21 (Skilled)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 52 Zero Fighter&amp;quot;] = &amp;quot;Type 0 Fighter Model 52&amp;quot;,&lt;br /&gt;
        [&amp;quot;Zero Fighter Type 52 Type C (601 Air Group)&amp;quot;] = &amp;quot;Zero Fighter Model 52C (601 Air Group)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Shiden Kai 2&amp;quot;] = &amp;quot;Shiden Kai Ni&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 62 Zero Fighter-bomber&amp;quot;] = &amp;quot;Type 0 Fighter Model 62 (Fighter-bomber)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 2 Recon Aircraft&amp;quot;] = &amp;quot;Type 2 Reconnaissance Aircraft&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Recon Seaplane&amp;quot;] = &amp;quot;Type 0 Reconnaissance Seaplane&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 98 Recon Seaplane (Night Recon)&amp;quot;] = &amp;quot;Type 98 Reconnaissance Seaplane (Night Recon)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ka-type Observation Autogyro&amp;quot;] = &amp;quot;No. Ka Observation Autogyro&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Spotter/Liaison (ASW)&amp;quot;] = &amp;quot;Type 3 Command Liaison Aircraft (ASW)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 22 Surface RADAR Kai 4&amp;quot;] = &amp;quot;No. 22 Surface Radar Kai Yon&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 13 AIR RADAR Kai&amp;quot;] = &amp;quot;No. 13 Air Radar Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 21 Air RADAR Kai&amp;quot;] = &amp;quot;No. 21 Air Radar Kai&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 93 Passive SONAR&amp;quot;] = &amp;quot;Type 93 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 SONAR&amp;quot;] = &amp;quot;Type 3 Active Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 0 Passive SONAR&amp;quot;] = &amp;quot;Type 0 Passive Sonar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 94 Depth Charge&amp;quot;] = &amp;quot;Type 94 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 3 Depth Charge&amp;quot;] = &amp;quot;Type 3 Depth Charge Projector&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 91 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 91 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Type 1 Armor-Piercing (AP) Shell&amp;quot;] = &amp;quot;Type 1 Armor Piercing Shell&amp;quot;,&lt;br /&gt;
        [&amp;quot;Improved Steam Turbine&amp;quot;] = &amp;quot;Improved Kanhon Type Turbine&amp;quot;,&lt;br /&gt;
        [&amp;quot;Enhanced Steam Boiler&amp;quot;] = &amp;quot;Enhanced Kanhon Type Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;New High Pressure-Temperature Steam Boiler&amp;quot;] = &amp;quot;New Model High Temperature High Pressure Boiler&amp;quot;,&lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Medium)&amp;quot;] = &amp;quot;Extension Bulge (Medium)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Anti-torpedo Bulge (Large)&amp;quot;] = &amp;quot;Extension Bulge (Large)&amp;quot;,&lt;br /&gt;
        [&amp;quot;Drum Canister&amp;quot;] = &amp;quot;Drum Canister (Transport Use)&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    --Radar/sonar names without any special pieces&lt;br /&gt;
    name = name:gsub(&amp;quot;^Type%s(.+)%sRADAR$&amp;quot;, &amp;quot;No. %1 Radar&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    name = names[name] or name&lt;br /&gt;
    return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return NanaminFunctions&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
	<entry>
		<id>https://kcwiki-en.mirairepository.net/w/index.php?title=Module:CombinedFleet&amp;diff=122164</id>
		<title>Module:CombinedFleet</title>
		<link rel="alternate" type="text/html" href="https://kcwiki-en.mirairepository.net/w/index.php?title=Module:CombinedFleet&amp;diff=122164"/>
		<updated>2015-04-29T02:13:52Z</updated>

		<summary type="html">&lt;p&gt;Nanamin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local getArgs = require('Module:GetArgs')&lt;br /&gt;
&lt;br /&gt;
local Ship = require(&amp;quot;Module:Ship&amp;quot;)&lt;br /&gt;
local Equipment = require(&amp;quot;Module:Equipment&amp;quot;)&lt;br /&gt;
local Formatting = require(&amp;quot;Module:Formatting&amp;quot;)&lt;br /&gt;
local format = require(&amp;quot;Module:StringInterpolation&amp;quot;).format&lt;br /&gt;
&lt;br /&gt;
local Functions = require(&amp;quot;Module:NanaminFunctions&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local CombinedFleet = {&lt;br /&gt;
    _rows = {},&lt;br /&gt;
    _ship_list = { [&amp;quot;main&amp;quot;] = {}, [&amp;quot;escort&amp;quot;] = {} },&lt;br /&gt;
    _counts = { [&amp;quot;main&amp;quot;] = {}, [&amp;quot;escort&amp;quot;] = {} },&lt;br /&gt;
    &lt;br /&gt;
    _table_start = [[{| class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-${table_name}-${id}&amp;quot;]],&lt;br /&gt;
    _table_end = [[|}]],&lt;br /&gt;
    _row_starter = &amp;quot;|-&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _header_top_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${toggle_class}&amp;quot; style=&amp;quot;width: 615px; background: #A596B5; border-top-right-radius: 60px; border-top-left-radius: 60px; text-align: center; font-size: 18px; color: #000040; cursor: hand; cursor: pointer;&amp;quot;&amp;gt;''Main Fleet''&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _header_mid_template = [[&amp;lt;div class=&amp;quot;mw-customtoggle-${toggle_class}&amp;quot; style=&amp;quot;width: 615px; background: #A596B5; text-align:center; font-size: 18px; color:#000040; cursor: hand; cursor: pointer;&amp;quot;&amp;gt;''${text}''&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    _header_bot_template = [[&amp;lt;div style=&amp;quot;width: 615px; background: #A596B5; border-bottom-right-radius: 60px; border-bottom-left-radius: 60px; text-align: center; font-size: 18px; color:#000040;&amp;quot;&amp;gt;''${map}''&amp;lt;/div&amp;gt;]],&lt;br /&gt;
    &lt;br /&gt;
    _ship_image_template = [[| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #BDACA0; height: 50px;&amp;quot; mode=&amp;quot;packed&amp;quot; |&amp;lt;div style=&amp;quot;float: left; margin-top: 7px; margin-left: 3px;&amp;quot;&amp;gt;${position_image}&amp;lt;/div&amp;gt;${ship_card}]],&lt;br /&gt;
    _equip_template = [[| style=&amp;quot;height: 46px; min-width: 22px; text-align: center; background-color: #BDACA0;&amp;quot; |${equip_icon}&lt;br /&gt;
| style=&amp;quot;width: 175px; text-align: center; background: #E3D6C9;&amp;quot; |${equip_link}]],&lt;br /&gt;
    _info_template = [[| style=&amp;quot;background-color: #363636; height: 25px; width: 611px;&amp;quot; |&lt;br /&gt;
    {| style=&amp;quot;margin: 5px 62px 0 5px;&amp;quot;&amp;gt;&lt;br /&gt;
    | style=&amp;quot;width: 147px; color: #20B2B5;&amp;quot; | ${label}&lt;br /&gt;
    | style=&amp;quot;width: 438px; background-color: #F1E7E0; border: 2px solid #D0B118; border-top-left-radius: 10px; border-bottom-left-radius: 10px; border-bottom-right-radius: 10px; border-top-right-radius: 10px; vertical-align: center; text-align: center;&amp;quot; | ${value}&lt;br /&gt;
    |}]],&lt;br /&gt;
    &lt;br /&gt;
    _blank_battle_card = &amp;quot;Empty card.png&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    _id = &amp;quot;&amp;quot;,&lt;br /&gt;
    _fighter_power = 0,&lt;br /&gt;
    _elos = 0,&lt;br /&gt;
    _hq_level = 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function CombinedFleet:easy_errors()&lt;br /&gt;
    --For people that don't know Lua, some errors may not make sense despite being basic&lt;br /&gt;
    --This will provide something for missing variables&lt;br /&gt;
    if self._args == nil then error(&amp;quot;No information has been provided.&amp;quot;) end&lt;br /&gt;
    &lt;br /&gt;
    local must_have = { &amp;quot;route&amp;quot;, &amp;quot;hq_level&amp;quot;, &amp;quot;map_name&amp;quot; }&lt;br /&gt;
    for _, var_name in ipairs(must_have) do&lt;br /&gt;
        if self._args[var_name] == nil then&lt;br /&gt;
            error(&amp;quot;\&amp;quot;&amp;quot; .. var_name .. &amp;quot;\&amp;quot; must be provided. Please double-check that you have this variable and that it is spelled correctly&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CombinedFleet:generate_id()&lt;br /&gt;
    --No built-in hashing algorithms, so we'll just cheat and use the route, HQ level and a random number&lt;br /&gt;
    self._id = self._args[&amp;quot;route&amp;quot;]:gsub(&amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) .. self._args[&amp;quot;hq_level&amp;quot;] .. tostring(math.random(1000000,9999999))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CombinedFleet:organize_args()&lt;br /&gt;
    local entry = {}&lt;br /&gt;
    for _, item in ipairs(self._args) do&lt;br /&gt;
        if mw.ustring.sub(item, 1, 1) == &amp;quot;#&amp;quot; then&lt;br /&gt;
        elseif item == &amp;quot;-&amp;quot; then&lt;br /&gt;
            if #self._ship_list.main &amp;lt; 6 then&lt;br /&gt;
                table.insert(self._ship_list.main, entry)&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(self._ship_list.escort, entry)&lt;br /&gt;
            end&lt;br /&gt;
            entry = {}&lt;br /&gt;
        else&lt;br /&gt;
            local split = Functions.split(item, '/')&lt;br /&gt;
            for _, item in pairs(split) do&lt;br /&gt;
                table.insert(entry, item)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #entry &amp;gt; 0 then&lt;br /&gt;
        table.insert(self._ship_list.escort, entry)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CombinedFleet:process_equipment(ship, entry, slot)&lt;br /&gt;
    if not ship._equipment then return &amp;quot;&amp;quot;, &amp;quot;- Locked -&amp;quot; end --No idea why this fixes ship:slots() being nil&lt;br /&gt;
    local slots = ship and ship:slots() or 0&lt;br /&gt;
    local equip_icon, equip_link&lt;br /&gt;
    if slot &amp;gt; slots then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_link = &amp;quot;- Locked -&amp;quot;&lt;br /&gt;
    elseif entry[slot + 3] == nil then&lt;br /&gt;
        equip_icon = &amp;quot;&amp;quot;&lt;br /&gt;
        equip_link = &amp;quot;- Unequipped -&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local equip = Equipment(Functions.process_legacy_name(entry[slot + 3]))&lt;br /&gt;
        self._fighter_power = Functions.add_to_fighter_power(self._fighter_power, equip, select(2, ship:slot(slot)))&lt;br /&gt;
        self._elos = Functions.add_to_elos(self._elos, equip)&lt;br /&gt;
        equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon()), size = &amp;quot;22x22px&amp;quot;, link = &amp;quot;&amp;quot; }&lt;br /&gt;
        equip_link = Formatting:format_link(equip:link())&lt;br /&gt;
    end&lt;br /&gt;
    return equip_icon, equip_link&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CombinedFleet:insert_top_header()&lt;br /&gt;
    table.insert(self._rows, format{self._header_top_template,&lt;br /&gt;
        toggle_class = &amp;quot;main-fleet-&amp;quot; .. self._id,&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CombinedFleet:insert_mid_header(text)&lt;br /&gt;
    table.insert(self._rows, format{self._header_mid_template,&lt;br /&gt;
        toggle_class = string.lower(text:gsub(&amp;quot; &amp;quot;, &amp;quot;-&amp;quot;)) .. &amp;quot;-&amp;quot; .. self._id,&lt;br /&gt;
        text = text,&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CombinedFleet:insert_bot_header()&lt;br /&gt;
    table.insert(self._rows, format{self._header_bot_template,&lt;br /&gt;
        map = self._args[&amp;quot;map_name&amp;quot;],&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CombinedFleet:build_table(table_name)&lt;br /&gt;
    table.insert(self._rows, format{self._table_start,&lt;br /&gt;
        table_name = table_name .. &amp;quot;-fleet&amp;quot;,&lt;br /&gt;
        id = self._id,&lt;br /&gt;
    })&lt;br /&gt;
    &lt;br /&gt;
    local ship_list = self._ship_list[table_name]&lt;br /&gt;
    for i = 1, 6, 3 do&lt;br /&gt;
        local ship_suffix1 = ship_list[i][2] and ship_list[i][2]:gsub('/', '') or ship_list[i][2]&lt;br /&gt;
        local ship_suffix2 = ship_list[i + 1][2] and ship_list[i + 1][2]:gsub('/', '') or ship_list[i + 1][2]&lt;br /&gt;
        local ship_suffix3 = ship_list[i + 2][2] and ship_list[i + 2][2]:gsub('/', '') or ship_list[i + 2][2]&lt;br /&gt;
        local ships = {&lt;br /&gt;
            ship1 = Ship(ship_list[i][1], ship_suffix1),&lt;br /&gt;
            ship2 = Ship(ship_list[i + 1][1], ship_suffix2),&lt;br /&gt;
            ship3 = Ship(ship_list[i + 2][1], ship_suffix3),&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        for a = 1, 3 do&lt;br /&gt;
            local ship = ships[&amp;quot;ship&amp;quot; .. a]&lt;br /&gt;
            self._elos = Functions.add_to_elos_ship(self._elos, ship_list[i], self._args[&amp;quot;use_los&amp;quot;] or false)&lt;br /&gt;
            local ship_type = Formatting:format_ship_code(ship:type())&lt;br /&gt;
            self._counts[table_name][ship_type] = self._counts[table_name][ship_type] and self._counts[table_name][ship_type] + 1 or 1&lt;br /&gt;
            local ship_card = Formatting:format_image{ship:battle_card() or self._blank_battle_card, link = ship:link(), caption = ship:name(), align = &amp;quot;center&amp;quot;, size = &amp;quot;160x40px&amp;quot;}&lt;br /&gt;
            table.insert(self._rows, format{self._ship_image_template,&lt;br /&gt;
                position_image = Formatting:format_image{&amp;quot;Ship position &amp;quot; .. tostring(i + a - 1) .. &amp;quot; icon.png&amp;quot;, link = &amp;quot;&amp;quot;},&lt;br /&gt;
                ship_card = ship_card,&lt;br /&gt;
            })&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
        for a = 1, 4 do&lt;br /&gt;
            for b = 1, 3 do&lt;br /&gt;
                local ship = ships[&amp;quot;ship&amp;quot; .. b]&lt;br /&gt;
                local equip = ship_list[i + b - 1]&lt;br /&gt;
                local equip_icon, equip_link = self:process_equipment(ship, equip, a)&lt;br /&gt;
                table.insert(self._rows, format{self._equip_template,&lt;br /&gt;
                    equip_icon = equip_icon,&lt;br /&gt;
                    equip_link = equip_link,&lt;br /&gt;
                })&lt;br /&gt;
            end&lt;br /&gt;
            table.insert(self._rows, self._row_starter)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        if i % 3 == 0 then&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CombinedFleet:build_info_table()&lt;br /&gt;
    local counts = { [&amp;quot;main&amp;quot;] = &amp;quot;&amp;quot;, [&amp;quot;escort&amp;quot;] = &amp;quot;&amp;quot; }&lt;br /&gt;
    for fleet, ship_types in pairs(self._counts) do&lt;br /&gt;
        for ship_type, count in pairs(ship_types) do&lt;br /&gt;
            counts[fleet] = counts[fleet] .. tostring(count) .. &amp;quot; &amp;quot; .. ship_type:gsub(&amp;quot;^BC$&amp;quot;, &amp;quot;FBB&amp;quot;) .. &amp;quot; + &amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        counts[fleet] = mw.ustring.sub(counts[fleet], 1, -4)&lt;br /&gt;
    end&lt;br /&gt;
    local information = {&lt;br /&gt;
        {&lt;br /&gt;
            [&amp;quot;label&amp;quot;] = &amp;quot;Main Fleet Comp&amp;quot;,&lt;br /&gt;
            [&amp;quot;value&amp;quot;] = counts[&amp;quot;main&amp;quot;],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            [&amp;quot;label&amp;quot;] = &amp;quot;Escort Fleet Comp&amp;quot;,&lt;br /&gt;
            [&amp;quot;value&amp;quot;] = counts[&amp;quot;escort&amp;quot;],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            [&amp;quot;label&amp;quot;] = &amp;quot;Route Taken&amp;quot;,&lt;br /&gt;
            [&amp;quot;value&amp;quot;] = self._args[&amp;quot;route&amp;quot;],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            [&amp;quot;label&amp;quot;] = &amp;quot;Fighter Power&amp;quot;,&lt;br /&gt;
            [&amp;quot;value&amp;quot;] = tostring(self._fighter_power),&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            [&amp;quot;label&amp;quot;] = &amp;quot;Effective Line of Sight&amp;quot;,&lt;br /&gt;
            [&amp;quot;value&amp;quot;] = string.format(&amp;quot;%.2f&amp;quot;, self._elos - (Functions.get_hq_bracket(self._args[&amp;quot;hq_level&amp;quot;]) * 0.61)),&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            [&amp;quot;label&amp;quot;] = &amp;quot;HQ Level&amp;quot;,&lt;br /&gt;
            [&amp;quot;value&amp;quot;] = tostring(self._args[&amp;quot;hq_level&amp;quot;])&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            [&amp;quot;label&amp;quot;] = &amp;quot;Teitoku Notes&amp;quot;,&lt;br /&gt;
            [&amp;quot;value&amp;quot;] = self._args[&amp;quot;notes&amp;quot;] or &amp;quot;&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, format{self._table_start,&lt;br /&gt;
        table_name = &amp;quot;fleet-info&amp;quot;,&lt;br /&gt;
        id = self._id,&lt;br /&gt;
    })&lt;br /&gt;
    for _, set in ipairs(information) do&lt;br /&gt;
        table.insert(self._rows, format{self._info_template,&lt;br /&gt;
            label = set.label,&lt;br /&gt;
            value = set.value,&lt;br /&gt;
        })&lt;br /&gt;
        table.insert(self._rows, self._row_starter)&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(self._rows, self._table_end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CombinedFleet:Main(args)&lt;br /&gt;
    self._args = args&lt;br /&gt;
    &lt;br /&gt;
    self:easy_errors()&lt;br /&gt;
    self:organize_args()&lt;br /&gt;
    self:generate_id()&lt;br /&gt;
    &lt;br /&gt;
    table.insert(self._rows, [[&amp;lt;div style=&amp;quot;display: table; margin: 0 auto;&amp;quot;&amp;gt;]])&lt;br /&gt;
    self:insert_top_header()&lt;br /&gt;
    self:build_table(&amp;quot;main&amp;quot;)&lt;br /&gt;
    self:insert_mid_header(&amp;quot;Escort Fleet&amp;quot;)&lt;br /&gt;
    self:build_table(&amp;quot;escort&amp;quot;)&lt;br /&gt;
    self:insert_mid_header(&amp;quot;Fleet Info&amp;quot;)&lt;br /&gt;
    self:build_info_table()&lt;br /&gt;
    self:insert_bot_header()&lt;br /&gt;
    table.insert(self._rows, [[&amp;lt;/div&amp;gt;]])&lt;br /&gt;
    &lt;br /&gt;
    return table.concat(self._rows, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CombinedFleet.Begin(frame)&lt;br /&gt;
	local args = getArgs{frame = frame:getParent()}&lt;br /&gt;
	return CombinedFleet:Main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return CombinedFleet&lt;/div&gt;</summary>
		<author><name>Nanamin</name></author>
	</entry>
</feed>