<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://umamusu.wiki/Module:Game/Banners/Data/history?feed=atom</id>
	<title>Module:Game/Banners/Data - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://umamusu.wiki/Module:Game/Banners/Data/history?feed=atom"/>
	<link rel="alternate" type="text/html" href="https://umamusu.wiki/Module:Game/Banners/Data/history"/>
	<updated>2026-06-04T09:18:18Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://umamusu.wiki/w/index.php?title=Module:Game/Banners/Data&amp;diff=36926&amp;oldid=prev</id>
		<title>GitBot: Automated from Git</title>
		<link rel="alternate" type="text/html" href="https://umamusu.wiki/w/index.php?title=Module:Game/Banners/Data&amp;diff=36926&amp;oldid=prev"/>
		<updated>2025-07-14T01:26:59Z</updated>

		<summary type="html">&lt;p&gt;Automated from Git&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 01:26, 14 July 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l95&quot;&gt;Line 95:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 95:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             .. &amp;quot; FROM gacha_available as ga WHERE ga.gacha_id=gacha_available.gacha_id&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             .. &amp;quot; FROM gacha_available as ga WHERE ga.gacha_id=gacha_available.gacha_id&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             .. &amp;quot; AND ga.is_pickup=1) &amp;gt;= 1 THEN is_pickup=1 ELSE rarity=3 END)&amp;quot;, gachaIdsInsert),&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             .. &amp;quot; AND ga.is_pickup=1) &amp;gt;= 1 THEN is_pickup=1 ELSE rarity=3 END)&amp;quot;, gachaIdsInsert),&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         order_by = &quot;recommend_order &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ASC&lt;/del&gt;&quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         order_by = &quot;recommend_order &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;DESC&lt;/ins&gt;&quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local gachaAvailableMap = {}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local gachaAvailableMap = {}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l108&quot;&gt;Line 108:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 108:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         from = &amp;quot;select_pickup&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         from = &amp;quot;select_pickup&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         where = string.format(&amp;quot;gacha_id IN (%s)&amp;quot;, gachaIdsInsert),&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         where = string.format(&amp;quot;gacha_id IN (%s)&amp;quot;, gachaIdsInsert),&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         order_by = &quot;recommend_order &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ASC&lt;/del&gt;&quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         order_by = &quot;recommend_order &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;DESC&lt;/ins&gt;&quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local selectPickupMap = {}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     local selectPickupMap = {}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>GitBot</name></author>
	</entry>
	<entry>
		<id>https://umamusu.wiki/w/index.php?title=Module:Game/Banners/Data&amp;diff=36914&amp;oldid=prev</id>
		<title>GitBot: Automated from Git</title>
		<link rel="alternate" type="text/html" href="https://umamusu.wiki/w/index.php?title=Module:Game/Banners/Data&amp;diff=36914&amp;oldid=prev"/>
		<updated>2025-07-13T23:01:13Z</updated>

		<summary type="html">&lt;p&gt;Automated from Git&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:01, 13 July 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l16&quot;&gt;Line 16:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 16:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;---@field pickups BannerPickupData[]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;---@field pickups BannerPickupData[]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;---@field selects BannerSelectPickupData[]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;---@field selects BannerSelectPickupData[]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;---@field hasRateup boolean&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;---@field startDateFormat string&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;---@field startDateFormat string&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;---@field startDateTime number&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;---@field startDateTime number&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l150&quot;&gt;Line 150:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 151:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             local startDate = os.date(&amp;quot;%B %d, %Y&amp;quot;, gacha_data.start_date) .. &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             local startDate = os.date(&amp;quot;%B %d, %Y&amp;quot;, gacha_data.start_date) .. &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             local endDate = os.date(&amp;quot;%B %d, %Y&amp;quot;, gacha_data.end_date) .. &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             local endDate = os.date(&amp;quot;%B %d, %Y&amp;quot;, gacha_data.end_date) .. &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;            local hasRateup = false&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             local pickups = {}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             local pickups = {}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             for _, gacha_available in ipairs(availables) do&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             for _, gacha_available in ipairs(availables) do&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;                if gacha_available.is_pickup == &#039;1&#039; then hasRateup = true end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                 local pickupData = { ---@type BannerPickupData&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                 local pickupData = { ---@type BannerPickupData&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                     cardId = gacha_available.card_id,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                     cardId = gacha_available.card_id,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l178&quot;&gt;Line 178:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 182:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                 pickups = pickups,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                 pickups = pickups,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                 selects = selects,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                 selects = selects,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;                hasRateup = hasRateup,&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                 startDateFormat = startDate,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                 startDateFormat = startDate,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                 startDateTime = tonumber(gacha_data.start_date) or 0,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                 startDateTime = tonumber(gacha_data.start_date) or 0,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>GitBot</name></author>
	</entry>
	<entry>
		<id>https://umamusu.wiki/w/index.php?title=Module:Game/Banners/Data&amp;diff=36905&amp;oldid=prev</id>
		<title>GitBot: Automated from Git</title>
		<link rel="alternate" type="text/html" href="https://umamusu.wiki/w/index.php?title=Module:Game/Banners/Data&amp;diff=36905&amp;oldid=prev"/>
		<updated>2025-07-13T22:46:10Z</updated>

		<summary type="html">&lt;p&gt;Automated from Git&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:46, 13 July 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--[[&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    !! THIS PAGE IS MANAGED BY GITLAB !!&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    ANY EDITS TO PAGE CONTENT WILL BE OVERWRITTEN&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    TO MAKE CHANGES, PLEASE SUBMIT A MERGE REQUEST AT https://gitlab.com/umamusume-wiki/lua-modules&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local Data = {}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local Data = {}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local Game = require(&amp;quot;Module:Game&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local Game = require(&amp;quot;Module:Game&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>GitBot</name></author>
	</entry>
	<entry>
		<id>https://umamusu.wiki/w/index.php?title=Module:Game/Banners/Data&amp;diff=36889&amp;oldid=prev</id>
		<title>Snep: Created page with &quot;local Data = {} local Game = require(&quot;Module:Game&quot;)  ---@class BannerData ---@field id string ---@field name string ---@field bannerType string ---@field cardType string ---@field imagePage string ---@field pickups BannerPickupData[] ---@field selects BannerSelectPickupData[] ---@field startDateFormat string ---@field startDateTime number ---@field endDateFormat string ---@field endDateTime number  ---@class BannerPickupData ---@field cardId string ---@field rarity strin...&quot;</title>
		<link rel="alternate" type="text/html" href="https://umamusu.wiki/w/index.php?title=Module:Game/Banners/Data&amp;diff=36889&amp;oldid=prev"/>
		<updated>2025-07-13T21:57:34Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local Data = {} local Game = require(&amp;quot;Module:Game&amp;quot;)  ---@class BannerData ---@field id string ---@field name string ---@field bannerType string ---@field cardType string ---@field imagePage string ---@field pickups BannerPickupData[] ---@field selects BannerSelectPickupData[] ---@field startDateFormat string ---@field startDateTime number ---@field endDateFormat string ---@field endDateTime number  ---@class BannerPickupData ---@field cardId string ---@field rarity strin...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local Data = {}&lt;br /&gt;
local Game = require(&amp;quot;Module:Game&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
---@class BannerData&lt;br /&gt;
---@field id string&lt;br /&gt;
---@field name string&lt;br /&gt;
---@field bannerType string&lt;br /&gt;
---@field cardType string&lt;br /&gt;
---@field imagePage string&lt;br /&gt;
---@field pickups BannerPickupData[]&lt;br /&gt;
---@field selects BannerSelectPickupData[]&lt;br /&gt;
---@field startDateFormat string&lt;br /&gt;
---@field startDateTime number&lt;br /&gt;
---@field endDateFormat string&lt;br /&gt;
---@field endDateTime number&lt;br /&gt;
&lt;br /&gt;
---@class BannerPickupData&lt;br /&gt;
---@field cardId string&lt;br /&gt;
---@field rarity string&lt;br /&gt;
---@field odds number&lt;br /&gt;
&lt;br /&gt;
---@class BannerSelectPickupData&lt;br /&gt;
---@field cardId string&lt;br /&gt;
---@field recommended boolean&lt;br /&gt;
&lt;br /&gt;
---Get a list of all (free gem) gacha banners on the JP server&lt;br /&gt;
---@return BannerData[] bannerDatas keyed by ID&lt;br /&gt;
function Data.getBannersJP()&lt;br /&gt;
    local gacha_datas = Game.queryMaster {&lt;br /&gt;
        from = &amp;quot;gacha_data&amp;quot;,&lt;br /&gt;
        where = &amp;quot;type IN (3, 11, 12)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    return Data._mapDatas(gacha_datas, false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---Get a list of all (free gem) gacha banners currently running on the JP server&lt;br /&gt;
---@return BannerData[] bannerDatas keyed by ID&lt;br /&gt;
function Data.getCurrentBannersJP()&lt;br /&gt;
    local time = os.time()&lt;br /&gt;
    local gacha_datas = Game.queryMaster {&lt;br /&gt;
        from = &amp;quot;gacha_data&amp;quot;,&lt;br /&gt;
        where = string.format(&amp;quot;type IN (3, 11, 12) AND start_date &amp;lt; %s AND end_date &amp;gt; %s&amp;quot;, time, time),&lt;br /&gt;
    }&lt;br /&gt;
    return Data._mapDatas(gacha_datas, false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---Get a list of all (free gem) gacha banners on the EN server&lt;br /&gt;
---@return BannerData[] bannerDatas keyed by ID&lt;br /&gt;
function Data.getBannersEN()&lt;br /&gt;
    local gacha_datas = Game.queryMasterEN {&lt;br /&gt;
        from = &amp;quot;gacha_data&amp;quot;,&lt;br /&gt;
        where = &amp;quot;type IN (3, 11, 12)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    return Data._mapDatas(gacha_datas, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---Get a list of all (free gem) gacha banners currently running on the EN server&lt;br /&gt;
---@return BannerData[] bannerDatas keyed by ID&lt;br /&gt;
function Data.getCurrentBannersEN()&lt;br /&gt;
    local time = os.time()&lt;br /&gt;
    local gacha_datas = Game.queryMasterEN {&lt;br /&gt;
        from = &amp;quot;gacha_data&amp;quot;,&lt;br /&gt;
        where = string.format(&amp;quot;type IN (3, 11, 12) AND start_date &amp;lt; %s AND end_date &amp;gt; %s&amp;quot;, time, time),&lt;br /&gt;
    }&lt;br /&gt;
    return Data._mapDatas(gacha_datas, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Data._mapDatas(gacha_datas, en)&lt;br /&gt;
    local gachaIds = {}&lt;br /&gt;
    for _, gacha_data in ipairs(gacha_datas) do&lt;br /&gt;
        table.insert(gachaIds, gacha_data.id)&lt;br /&gt;
    end&lt;br /&gt;
    local gachaIdsInsert = table.concat(gachaIds, &amp;#039;,&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    local banner_datas = (en and Game.queryMasterEN or Game.queryMaster) {&lt;br /&gt;
        from = &amp;quot;banner_data&amp;quot;,&lt;br /&gt;
        where = string.format(&amp;quot;transition IN (%s)&amp;quot;, gachaIdsInsert)&lt;br /&gt;
    }&lt;br /&gt;
    local gachaBannerMap = {}&lt;br /&gt;
    for _, banner_data in ipairs(banner_datas) do&lt;br /&gt;
        gachaBannerMap[banner_data.transition] = banner_data&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Select all units that are either marked as rateup, or, if banner has no ratups, are max rarity&lt;br /&gt;
    local gacha_availables = (en and Game.queryMasterEN or Game.queryMaster) {&lt;br /&gt;
        from = &amp;quot;gacha_available&amp;quot;,&lt;br /&gt;
        where = string.format(&amp;quot;gacha_id IN (%s) AND (CASE WHEN (SELECT count(*)&amp;quot;&lt;br /&gt;
            .. &amp;quot; FROM gacha_available as ga WHERE ga.gacha_id=gacha_available.gacha_id&amp;quot;&lt;br /&gt;
            .. &amp;quot; AND ga.is_pickup=1) &amp;gt;= 1 THEN is_pickup=1 ELSE rarity=3 END)&amp;quot;, gachaIdsInsert),&lt;br /&gt;
        order_by = &amp;quot;recommend_order ASC&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    local gachaAvailableMap = {}&lt;br /&gt;
    for _, gacha_available in ipairs(gacha_availables) do&lt;br /&gt;
        local key = gacha_available.gacha_id&lt;br /&gt;
        if gachaAvailableMap[key] == nil then gachaAvailableMap[key] = {} end&lt;br /&gt;
        table.insert(gachaAvailableMap[key], gacha_available)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    --- remove &amp;quot;not en and&amp;quot; when EN adds select_pickup table&lt;br /&gt;
    local select_pickups = not en and (en and Game.queryMasterEN or Game.queryMaster) {&lt;br /&gt;
        from = &amp;quot;select_pickup&amp;quot;,&lt;br /&gt;
        where = string.format(&amp;quot;gacha_id IN (%s)&amp;quot;, gachaIdsInsert),&lt;br /&gt;
        order_by = &amp;quot;recommend_order ASC&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    local selectPickupMap = {}&lt;br /&gt;
    for _, select_pickup in ipairs(select_pickups or {}) do&lt;br /&gt;
        local key = select_pickup.gacha_id&lt;br /&gt;
        if selectPickupMap[key] == nil then selectPickupMap[key] = {} end&lt;br /&gt;
        table.insert(selectPickupMap[key], select_pickup)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local gachaNames = en and Game.getENText(26, gachaIds) or Game.getJPText(26, gachaIds)&lt;br /&gt;
&lt;br /&gt;
    local gachaTypesMap = {&lt;br /&gt;
        [&amp;#039;1&amp;#039;] = &amp;quot;Debug&amp;quot;,&lt;br /&gt;
        [&amp;#039;2&amp;#039;] = &amp;quot;Ticket&amp;quot;,&lt;br /&gt;
        [&amp;#039;3&amp;#039;] = &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        [&amp;#039;5&amp;#039;] = &amp;quot;Paid Guarantee&amp;quot;,&lt;br /&gt;
        [&amp;#039;10&amp;#039;] = &amp;quot;Paid Group Select&amp;quot;,&lt;br /&gt;
        [&amp;#039;11&amp;#039;] = &amp;quot;Twinkle Collection&amp;quot;,&lt;br /&gt;
        [&amp;#039;12&amp;#039;] = &amp;quot;Select Pickup&amp;quot;,&lt;br /&gt;
        [&amp;#039;13&amp;#039;] = &amp;quot;Live Gacha?&amp;quot;,&lt;br /&gt;
        [&amp;#039;14&amp;#039;] = &amp;quot;Stepup&amp;quot;,&lt;br /&gt;
        [&amp;#039;15&amp;#039;] = &amp;quot;Stamp Sheet&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    local cardTypesMap = {&lt;br /&gt;
        [&amp;#039;1&amp;#039;] = &amp;quot;Trainee&amp;quot;,&lt;br /&gt;
        [&amp;#039;2&amp;#039;] = &amp;quot;Support&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    local datas = {}&lt;br /&gt;
    for _, gacha_data in ipairs(gacha_datas) do&lt;br /&gt;
        local banner_data = gachaBannerMap[gacha_data.id]&lt;br /&gt;
        local availables = gachaAvailableMap[gacha_data.id] or {}&lt;br /&gt;
        local selectPickups = selectPickupMap[gacha_data.id] or {}&lt;br /&gt;
        if banner_data ~= nil then&lt;br /&gt;
            local imagePage = string.format(&amp;quot;Game Banner %s %s.png&amp;quot;, banner_data.banner_image_id or banner_data&lt;br /&gt;
                .banner_id, en and &amp;quot;EN&amp;quot; or &amp;quot;JP&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            local name = gachaNames[gacha_data.id] or &amp;#039;&amp;#039;&lt;br /&gt;
            local bannerType = gachaTypesMap[gacha_data.type]&lt;br /&gt;
            local cardType = cardTypesMap[gacha_data.card_type]&lt;br /&gt;
&lt;br /&gt;
            local startDate = os.date(&amp;quot;%B %d, %Y&amp;quot;, gacha_data.start_date) .. &amp;#039;&amp;#039;&lt;br /&gt;
            local endDate = os.date(&amp;quot;%B %d, %Y&amp;quot;, gacha_data.end_date) .. &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
            local pickups = {}&lt;br /&gt;
            for _, gacha_available in ipairs(availables) do&lt;br /&gt;
                local pickupData = { ---@type BannerPickupData&lt;br /&gt;
                    cardId = gacha_available.card_id,&lt;br /&gt;
                    rarity = gacha_available.rarity,&lt;br /&gt;
                    odds = tonumber(gacha_available.odds) / 10000&lt;br /&gt;
                }&lt;br /&gt;
                table.insert(pickups, pickupData)&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            local selects = {}&lt;br /&gt;
            for _, select in ipairs(selectPickups) do&lt;br /&gt;
                local selectData = { ---@type BannerSelectPickupData&lt;br /&gt;
                    cardId = select.card_id,&lt;br /&gt;
                    recommended = select.recommend_type == &amp;#039;1&amp;#039;&lt;br /&gt;
                }&lt;br /&gt;
                table.insert(selects, selectData)&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            local data = { ---@type BannerData&lt;br /&gt;
                id = gacha_data.id,&lt;br /&gt;
                name = name,&lt;br /&gt;
                bannerType = bannerType,&lt;br /&gt;
                cardType = cardType,&lt;br /&gt;
                imagePage = imagePage,&lt;br /&gt;
                pickups = pickups,&lt;br /&gt;
                selects = selects,&lt;br /&gt;
                startDateFormat = startDate,&lt;br /&gt;
                startDateTime = tonumber(gacha_data.start_date) or 0,&lt;br /&gt;
                endDateFormat = endDate,&lt;br /&gt;
                endDateTime = tonumber(gacha_data.end_date) or 0,&lt;br /&gt;
            }&lt;br /&gt;
            datas[gacha_data.id] = data&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return datas&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return Data&lt;/div&gt;</summary>
		<author><name>Snep</name></author>
	</entry>
</feed>