diff --git a/assets/cn/template/TEMPLATE_SIREN_fengfan_ghost_xl.png b/assets/cn/template/TEMPLATE_SIREN_fengfan_ghost_xl.png new file mode 100644 index 000000000..214055458 Binary files /dev/null and b/assets/cn/template/TEMPLATE_SIREN_fengfan_ghost_xl.png differ diff --git a/assets/cn/template/TEMPLATE_SIREN_fengfan_xl.png b/assets/cn/template/TEMPLATE_SIREN_fengfan_xl.png new file mode 100644 index 000000000..db178631c Binary files /dev/null and b/assets/cn/template/TEMPLATE_SIREN_fengfan_xl.png differ diff --git a/campaign/Readme.md b/campaign/Readme.md index e08e93208..08200628e 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -12,154 +12,154 @@ To add a new event, add a new row in here, and run `python -m module.config.conf **CN, EN, JP, TW** Event names in GUI. If an event is not aired on some servers, use `-`. -| Aired Date | Directory | Event Name | CN | EN | JP | TW | -| ---------- | ------------------------ | -------------------------------------------- | ---------------------- | -------------------------------------------- | ------------------------------------ | ------------------------ | -| 20170607 | war archives 20181020 en | Strive, Wish, and Strategize | 努力、希望和计划 | Strive, Wish, and Strategize | 努力、希望と計画 | 努力、希望和計劃 | -| 20170802 | war archives 20191031 en | Divergent Chessboard | 异色格 | Divergent Chessboard | 鏡写されし異色 | 異色格 | -| 20170928 | war archives 20190321 en | Visitors Dyed in Red | 红染的参访者 | Visitors Dyed in Red | 紅染の来訪者 | 紅染的參訪者 | -| 20171026 | war archives 20190620 en | Glorious Battle | 光荣的一战 | Glorious Battle | 栄光なる最終戦 | 光榮的一戰 | -| 20171228 | war archives 20181026 en | Fallen Wings | 坠落之翼 | Fallen Wings | 闇に堕ちた青き翼 | 墜落之翼 | -| 20180119 | war archives 20191010 en | Encircling Graf Spee | 围剿斯佩伯爵 | Encircling Graf Spee | アドミラル・グラーフ・シュペー追撃戦 | 圍剿斯佩伯爵 | -| 20180226 | war archives 20190221 en | Winter\'s Crown | 凛冬王冠 | Winter\'s Crown | 凛冽なりし冬の王冠 | 凜冬王冠 | -| 20180607 | war archives 20180607 cn | Ink Stained Steel Sakura | 墨染的钢铁之花 | Ink Stained Steel Sakura | 墨染まりし鋼の桜 | 墨染的鋼鐵之花 | -| 20180726 | war archives 20180726 cn | Iris of Light and Dark | 光与影的鸢尾之华 | Iris of Light and Dark | 光と影のアイリス | 光與影的鳶尾之華 | -| 20210121 | war archives 20181227 cn | Crimson Echoes | 苍红的回响 | Crimson Echoes | 縹映る深緋の残響 | 蒼紅的迴響 | -| 20210513 | war archives 20200820 cn | Scherzo of Iron and Blood | 铁血音符誓言 | Scherzo of Iron and Blood | 黒鉄の楽章 誓いの海 | - | -| 20211014 | war archives 20211014 cn | Crescendo of Polaris | 激奏的Polaris | Crescendo of Polaris | 激奏のポラリス | - | -| 20220113 | war archives 20190911 cn | Empyreal Tragicomedy | 神圣的悲喜剧 | Empyreal Tragicomedy | 悲歎せし焔海の詩 | - | -| 20220407 | war archives 20210325 cn | Ashen Simulacrum | 箱庭疗法 | Ashen Simulacrum | 開かれし紺碧の砂箱 | - | -| 20220721 | war archives 20210624 cn | Swirling Cherry Blossoms | 浮樱影华 | Swirling Cherry Blossoms | 翳りし満ちる影の華 | - | -| 20220901 | war archives 20200806 cn | The Enigma and the Shark | 最重要的宝物 | The Enigma and the Shark | 鉄血鮫とエニグマ | - | -| 20221013 | war archives 20201029 cn | Universe in Unison | 激唱的UNIVERSE | Universe in Unison | 激唱のユニバース | - | -| 20221117 | war archives 20200903 cn | Stars of the Shimmering Fjord | 峡湾间的星辰 | Stars of the Shimmering Fjord | 輝ける峡湾の星 | - | -| 20221117 | war archives 20210819 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | - | -| 20211028 | war archives 20211028 cn | Skybound Oratorio | 穹顶下的圣咏曲 | Skybound Oratorio | 神穹を衝く聖歌 | 穹頂下的聖詠曲 | -| 20230420 | war archives 20220210 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | 北境序曲 | -| 20230511 | war archives 20220414 cn | Aurora Noctis | 永夜幻光 | Aurora Noctis | 極夜照らす幻光 | 永夜幻光 | -| 20230831 | war archives 20201229 cn | Inverted Orthant | 负象限作战 | Inverted Orthant | 虚畳なりし限象 | - | -| 20200227 | event 20200227 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | - | -| 20200312 | event 20200312 cn | The Solomon Ranger | 复刻斯图尔特的硝烟 | The Solomon Ranger Rerun | 南洋に靡く硝煙(復刻) | - | -| 20200326 | event 20200326 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | - | -| 20200423 | event 20200423 cn | Crimson Echoes | 复刻苍红的回响 | Crimson Echoes Rerun | 縹映る深緋の残響(復刻) | - | -| 20200507 | event 20200507 cn | The Way Home in the Night | 夜幕下的归途 | The Way Home in the Night | 帰路は海色の陰りへと | - | -| 20200521 | event 20200521 cn | Skybound Oratorio | 穹顶下的圣咏曲 | - | 神穹を衝く聖歌 | - | -| 20200521 | event 20200521 en | Iris of Light and Dark | - | Iris of Light and Dark Rerun | - | - | -| 20200603 | event 20200603 cn | Counterattack Within the Fjord | 峡湾间的反击 | - | 峡湾間の反撃 | - | -| 20200603 | event 20200603 en | Prelude under the Moon | - | Prelude under the Moon Rerun | - | - | -| 20200611 | event 20200611 en | Skybound Oratorio | - | Skybound Oratorio | - | - | -| 20200624 | raid 20200624 | Air Raid Drills with Essex | 复刻特别演习埃塞克斯级 | Air Raid Drills with Essex Rerun | 特別演習超空強襲波(復刻) | 特別演習埃塞克斯級 | -| 20200716 | event 20200716 en | Ink Stained Steel Sakura | - | Ink Stained Steel Sakura Rerun | - | - | -| 20200723 | event 20200723 cn | Aurora Noctis | 永夜幻光 | Aurora Noctis | 極夜照らす幻光 | - | -| 20200806 | event 20200806 cn | The Enigma and the Shark | 复刻最重要的宝物 | - | 鉄血鮫とエニグマ(復刻) | - | -| 20200820 | event 20200820 cn | Scherzo of Iron and Blood | 复刻铁血音符誓言 | Scherzo of Iron and Blood Rerun | 黒鉄の楽章 誓いの海(復刻) | - | -| 20200903 | event 20200903 en | Stars of the Shimmering Fjord | - | Stars of the Shimmering Fjord | - | - | -| 20200917 | event 20200917 cn | Dreamwaker's Butterfly | 蝶海梦花 | Dreamwaker's Butterfly | 刹那觀る胡蝶の夢 | - | -| 20201002 | event 20201002 en | Counterattack Within the Fjord | - | Counterattack Within the Fjord | - | - | -| 20201012 | event 20201012 cn | Sundered Blue | 划破海空之翼 | - | 奔る彩帆の青 | - | -| 20201029 | event 20201029 cn | Universe in Unison | 激唱的UNIVERSE | Universe in Unison | 激唱のユニバース | - | -| 20201105 | event 20200312 cn | The Solomon Ranger | - | - | - | 斯圖爾特的硝煙 | -| 20201112 | event 20200903 en | Stars of the Shimmering Fjord | 复刻峡湾间的星辰 | - | 輝ける峡湾の星(復刻) | - | -| 20201112 | event 20201012 cn | Sundered Blue | - | Sundered Blue | - | - | -| 20201126 | event 20201126 cn | Vacation Lane | 假日航线 | Vacation Lane | バケーションレーン | - | -| 20201210 | event 20200806 cn | The Enigma and the Shark | - | The Enigma and the Shark Rerun | - | - | -| 20201229 | event 20201229 cn | Inverted Orthant | 负象限作战 | Inverted Orthant | 虚畳なりし限象 | - | -| 20210121 | event 20210121 cn | Empyreal Tragicomedy | 复刻神圣的悲喜剧 | Empyreal Tragicomedy Rerun | 悲歎せし焔海の詩(復刻) | - | -| 20210225 | event 20210225 cn | Khorovod of Dawn's Rime | 破晓冰华 | Khorovod of Dawn's Rime | 暁射す氷華の嵐 | - | -| 20210225 | event 20210225 tw | Northern Overture | - | - | - | 北境序曲 | -| 20210325 | event 20210325 cn | Ashen Simulacrum | 复刻箱庭疗法 | Ashen Simulacrum Rerun | 開かれし紺碧の砂箱(復刻) | - | -| 20210415 | event 20210415 tw | Encircling Graf Spee | - | - | - | 復刻圍剿施佩伯爵 | -| 20210422 | event 20210422 cn | Daedalian Hymn | 复兴的赞美诗 | Daedalian Hymn | 讃える復興の迷路 | - | -| 20210429 | event 20210429 tw | Ink Stained Steel Sakura | - | - | - | 復刻墨染的鋼鐵之花 | -| 20210527 | event 20210527 tw | Microlayer Medley | - | - | - | 微層混合 | -| 20210527 | event 20210527 cn | Mirror Involution | 镜位螺旋 | Mirror Involution | 照らす螺旋の鏡海 | - | -| 20210610 | event 20210610 tw | The Way Home in the Night | - | - | - | 夜幕下的歸途 | -| 20210624 | event 20210624 tw | Skybound Oratorio | - | - | - | 穹頂下的聖詠曲 | -| 20210624 | event 20210624 cn | Swirling Cherry Blossoms | 复刻浮樱影华 | Swirling Cherry Blossoms Rerun | 翳りし満ちる影の華(復刻) | - | -| 20210708 | raid 20210708 | Cross Wave | 复刻穿越彼方的水线 | Cross Wave rerun | 交錯する新たな波 (復刻) | - | -| 20210708 | event 20200903 en | Stars of the Shimmering Fjord | - | - | - | 峽灣間的星辰 | -| 20210722 | event 20210722 cn | Azur Anthem | 响彻碧海的偶像歌 | Azur Anthem | 海に響くアイドルの歌 | - | -| 20210729 | event 20200723 cn | Aurora Noctis | - | - | - | 永夜幻光 | -| 20210812 | event 20200806 cn | The Enigma and the Shark | - | - | - | 最重要的寶物 | -| 20210819 | event 20210819 cn | Microlayer Medley | 复刻微层混合 | Microlayer Medley Rerun | 闇靄払う銀翼(復刻) | - | -| 20210826 | event 20210722 cn | Azur Anthem | - | - | - | 響徹碧海的偶像歌 | -| 20210916 | event 20210916 cn | Upon the Shimmering Blue | 碧海光粼 | Upon the Shimmering Blue | 駆けよ 碧海の吹き風 | - | -| 20210923 | event 20200917 cn | Dreamwaker's Butterfly | - | - | - | 蝶海夢花 | -| 20211008 | event 20201012 cn | Sundered Blue | - | - | - | 劃破海空之翼 | -| 20211014 | raid 20210708 | Cross Wave | - | - | - | 穿越彼方的水線 | -| 20211028 | event 20211028 cn | Skybound Oratorio | 复刻穹顶下的圣咏曲 | Skybound Oratorio Rerun | 神穹を衝く聖歌(復刻) | - | -| 20211028 | event 20211028 tw | Iris of Light and Dark | - | - | - | 復刻光與影的鳶尾之華 | -| 20211111 | event 20211111 cn | The Flame-Touched Dagger | 杰诺瓦的焰火 | The Flame-Touched Dagger | 燈火のシニエ | - | -| 20211125 | event 20211125 cn | World-spanning Arclight | 交汇世界的弧光 | World-spanning Arclight | 弧光は交わる世界にて | - | -| 20211130 | event 20211125 cn | World-spanning Arclight | - | - | - | 交匯世界的弧光 | -| 20211214 | event 20200603 cn | Counterattack Within the Fjord | - | - | - | 峽灣間的反擊 | -| 20211229 | event 20211229 cn | Tower of Transcendence | 逆转彩虹之塔 | Tower of Transcendence | 遡望せし虹彩の塔 | - | -| 20211230 | event 20201229 cn | Inverted Orthant | - | - | - | 負象限作戰 | -| 20220127 | raid 20220127 | Mystery Investigation | 演习神秘事件调查 | Mystery Investigation | 秘密事件調査 | - | -| 20220210 | event 20220210 cn | Northern Overture Rerun | 复刻北境序曲 | Northern Overture Rerun | 凍絶の北海(復刻) | - | -| 20220224 | event 20210225 cn | Khorovod of Dawn's Rime | - | - | - | 破曉冰華 | -| 20220224 | event 20220224 cn | Abyssal Refrain | 深度回音 | Abyssal Refrain | 鳴動せし星霜の淵 | - | -| 20220310 | event 20200603 cn | Counterattack Within the Fjord | 复刻峡湾间的反击 | Counterattack Within the Fjord Rerun | 峡湾間の反撃(復刻) | - | -| 20220310 | event 20220310 tw | The Solomon Ranger | - | - | - | 復刻斯圖爾特的硝煙 | -| 20220324 | event 20220324 cn | Virtual Tower | 虚像构筑之塔 | Virtual Tower | 幻像の塔 | - | -| 20220324 | event 20210422 cn | Daedalian Hymn | - | - | - | 復興的讚美詩 | -| 20220407 | event 20220407 tw | Crimson Echoes | - | - | - | 蒼紅的迴響(復刻) | -| 20220414 | event 20220414 cn | Aurora Noctis | 复刻永夜幻光 | Aurora Noctis Rerun | 極夜照らす幻光(復刻) | - | -| 20220428 | event 20220428 cn | Rondo at Rainbow's End | 虹彩的终幕曲 | Rondo at Rainbow's End | 吟ずる瑠璃の楽章 | - | -| 20220505 | raid 20200624 | Air Raid Drills with Essex | - | - | - | 特別演習埃塞克斯級(復刻) | -| 20220526 | event 20220526 cn | Pledge of the Radiant Court | 泠誓光庭 | Pledge of the Radiant Court | 诚閃の剣 搖光の城 | - | -| 20220526 | event 20210527 cn | Mirror Involution | - | - | - | 鏡位螺旋 | -| 20220616 | event 20201012 cn | Sundered Blue | 复刻划破海空之翼 | Sundered Blue Rerun | 奔る彩帆の青(復刻) | - | -| 20220616 | event 20200820 cn | Scherzo of Iron and Blood | - | - | - | 復刻鐵血音符誓言 | -| 20220630 | raid 20210708 | Cross Wave | - | - | - | 復刻穿越彼方的水線 | -| 20220630 | raid 20220630 | Angel of Iris | 来自鸢尾的天使 | Angel of Iris | アイリスの天使 | - | -| 20220714 | event 20201029 cn | Universe in Unison | - | - | - | 激唱的UNIVERSE | -| 20220714 | event 20200917 cn | Dreamwaker's Butterfly | 复刻蝶海梦花 | Dreamwaker's Butterfly Rerun | 刹那觀る胡蝶の夢(復刻) | - | -| 20220728 | event 20220728 cn | Aquilifer's Ballade | 雄鹰的叙事歌 | Aquilifer's Ballade | 鋼鷲の冒険譚 | - | -| 20220804 | event 20211028 cn | Skybound Oratorio Rerun | - | - | - | 復刻穹頂下的聖詠曲 | -| 20220818 | event 20220324 cn | Virtual Tower | - | - | - | 虛像構築之塔 | -| 20220818 | event 20220818 cn | Operation Convergence | 远汇点作战 | Operation Convergence | 結像点作戦 | - | -| 20220901 | event 20200903 en | Stars of the Shimmering Fjord | - | - | - | 復刻峽灣間的星辰 | -| 20220915 | event 20210916 cn | Upon the Shimmering Blue | - | - | - | 碧海光粼 | -| 20220915 | event 20220915 cn | Violet Tempest Blooming Lycoris | 紫绛槿岚 | Violet Tempest Blooming Lycoris | 赫の涙月 菫の暁風 | - | -| 20221021 | event 20210121 cn | Empyreal Tragicomedy | - | - | - | 復刻神聖的悲喜劇 | -| 20221027 | raid 20221027 | Fight! Royal Maid | 战斗!皇家女仆队3rd | Fight On, Royal Maids!(Part 3) | 戦え!ロイヤルメイド隊3rd | - | -| 20221103 | event 20211111 cn | The Flame-Touched Dagger | - | - | - | 杰諾瓦的焰火 | -| 20221110 | event 20201229 cn | Inverted Orthant | 复刻负象限作战 | Inverted Orthant Rerun | 虚畳なりし限象(復刻) | - | -| 20221117 | event 20210325 cn | Ashen Simulacrum | - | - | - | 復刻箱庭療法 | -| 20221124 | event 20221124 cn | The Alchemist and the Archipelago of Secrets | 炼金术士与秘密遗迹群岛 | The Alchemist and the Archipelago of Secrets | 錬金術士と謎の遺跡群島 | - | -| 20221201 | event 20221124 cn | The Alchemist and the Archipelago of Secrets | - | - | - | 鍊金術士與秘密遺跡群島 | -| 20221222 | event 20221222 cn | Parallel Superimposition | 定向折叠 | Parallel Superimposition | 積重なる事象の幻界 | - | -| 20221222 | event 20211229 cn | Tower of Transcendence | - | - | - | 逆轉彩虹之塔 | -| 20230105 | event 20210225 cn | Khorovod of Dawn's Rime | 复刻破晓冰华 | Khorovod of Dawn's Rime Rerun | 暁射す氷華の嵐(復刻) | - | -| 20230105 | event 20210610 tw | The Way Home in the Night | - | - | - | 復刻夜幕下的歸途 | -| 20230118 | raid 20230118 | Winter Pathfinder | 冬日的寻路人 | Winter Pathfinder | 冬の案内人 | - | -| 20230118 | raid 20220127 | - | - | - | - | 演習神秘事件調查 | -| 20230202 | event 20200806 cn | The Enigma and the Shark | - | - | - | 復刻最重要的寶物 | -| 20230216 | event 20220224 cn | Abyssal Refrain | - | - | - | 深度回音 | -| 20230223 | event 20230223 cn | Revelations of Dust | 湮烬尘墟 | Revelations of Dust | 黙示の遺構 | - | -| 20230309 | event 20210624 cn | Swirling Cherry Blossoms | - | - | - | 復刻-浮櫻影華 | -| 20230309 | event 20210422 cn | Daedalian Hymn | 复刻复兴的赞美诗 | Daedalian Hymn Rerun | 讃える復興の迷路(復刻) | - | -| 20230323 | raid 20220630 | Angel of Iris | - | - | - | 來自鳶尾的天使 | -| 20230323 | coalition 20230323 | Frostfall | 极地风暴 | Frostfall | 星霜海嵐 | - | -| 20230413 | event 20211111 cn | The Flame-Touched Dagger | 复刻杰诺瓦的焰火 | The Flame-Touched Dagger Rerun | 復刻-燈火のシニエ | - | -| 20230413 | event 20210819 cn | Microlayer Medley | - | - | - | 復刻-微層混合 | -| 20230427 | event 20201126 cn | Vacation Lane | 假日航线 | Vacation Lane | バケーションレーン | 假日航線 | -| 20230525 | event 20220526 cn | Pledge of the Radiant Court | - | - | - | 泠誓光庭 | -| 20230525 | event 20230525 cn | Confluence of Nothingness | 空相交汇点 | Confluence of Nothingness | 覆天せし万象の塵 | - | -| 20230615 | event 20200603 cn | Counterattack Within the Fjord | - | - | - | 復刻峽灣間的反擊 | -| 20230621 | event 20210527 cn | Mirror Involution Rerun | 复刻镜位螺旋 | Mirror Involution Rerun | 照らす螺旋の鏡海(復刻) | - | -| 20230629 | event 20220428 cn | Rondo at Rainbow's End | - | - | - | 虹彩的終幕曲 | -| 20230629 | raid 20230629 | Reflections of the Oasis | 绿洲往事 | Reflections of the Oasis | 緑地伽話 | - | -| 20230713 | event 20220818 cn | Operation Convergence | - | - | 結像点作戦 | 遠匯點作戰 | -| 20230720 | event 20211125 cn | World-spanning Arclight | 复刻交汇世界的弧光 | World-spanning Arclight Rerun | 弧光は交わる世界にて(復刻) | - | -| 20230727 | event 20200917 cn | Dreamwaker's Butterfly | - | - | - | 復刻-蝶海夢花 | -| 20230803 | event 20211125 cn | World-spanning Arclight | - | - | - | 復刻-交匯世界的弧光 | -| 20230803 | event 20230803 cn | Anthem of Remembrance | 奏响鸢尾之歌 | Anthem of Remembrance | 燃ゆる聖都の回想曲 | - | -| 20230817 | event 20230817 cn | The Fool's Scales | 愚者的天平 | The Fool's Scales | 愚者の天秤 | - | -| 20230817 | event 20220414 cn | Aurora Noctis | - | - | - | 復刻-永夜幻光 | -| 20230824 | coalition 20230323 | Frostfall | - | - | - | 極地風暴 | -| 20230914 | event 20220915 cn | Violet Tempest Blooming Lycoris | - | - | - | 紫絳槿嵐 | -| 20230914 | event 20230914 cn | Effulgence Before Eclipse | 须臾望月抄 | Effulgence Before Eclipse | 須臾望月抄 | - | -| 20231012 | event 20201229 cn | Inverted Orthant | - | - | - | 復刻-負象限作戰 | - +| Aired Date | Directory | Event Name | CN | EN | JP | TW | +|------------|--------------------------|----------------------------------------------|----------------------| -------------------------------------------- | ------------------------------------ | ------------------------ | +| 20170607 | war archives 20181020 en | Strive, Wish, and Strategize | 努力、希望和计划 | Strive, Wish, and Strategize | 努力、希望と計画 | 努力、希望和計劃 | +| 20170802 | war archives 20191031 en | Divergent Chessboard | 异色格 | Divergent Chessboard | 鏡写されし異色 | 異色格 | +| 20170928 | war archives 20190321 en | Visitors Dyed in Red | 红染的参访者 | Visitors Dyed in Red | 紅染の来訪者 | 紅染的參訪者 | +| 20171026 | war archives 20190620 en | Glorious Battle | 光荣的一战 | Glorious Battle | 栄光なる最終戦 | 光榮的一戰 | +| 20171228 | war archives 20181026 en | Fallen Wings | 坠落之翼 | Fallen Wings | 闇に堕ちた青き翼 | 墜落之翼 | +| 20180119 | war archives 20191010 en | Encircling Graf Spee | 围剿斯佩伯爵 | Encircling Graf Spee | アドミラル・グラーフ・シュペー追撃戦 | 圍剿斯佩伯爵 | +| 20180226 | war archives 20190221 en | Winter\'s Crown | 凛冬王冠 | Winter\'s Crown | 凛冽なりし冬の王冠 | 凜冬王冠 | +| 20180607 | war archives 20180607 cn | Ink Stained Steel Sakura | 墨染的钢铁之花 | Ink Stained Steel Sakura | 墨染まりし鋼の桜 | 墨染的鋼鐵之花 | +| 20180726 | war archives 20180726 cn | Iris of Light and Dark | 光与影的鸢尾之华 | Iris of Light and Dark | 光と影のアイリス | 光與影的鳶尾之華 | +| 20210121 | war archives 20181227 cn | Crimson Echoes | 苍红的回响 | Crimson Echoes | 縹映る深緋の残響 | 蒼紅的迴響 | +| 20210513 | war archives 20200820 cn | Scherzo of Iron and Blood | 铁血音符誓言 | Scherzo of Iron and Blood | 黒鉄の楽章 誓いの海 | - | +| 20211014 | war archives 20211014 cn | Crescendo of Polaris | 激奏的Polaris | Crescendo of Polaris | 激奏のポラリス | - | +| 20220113 | war archives 20190911 cn | Empyreal Tragicomedy | 神圣的悲喜剧 | Empyreal Tragicomedy | 悲歎せし焔海の詩 | - | +| 20220407 | war archives 20210325 cn | Ashen Simulacrum | 箱庭疗法 | Ashen Simulacrum | 開かれし紺碧の砂箱 | - | +| 20220721 | war archives 20210624 cn | Swirling Cherry Blossoms | 浮樱影华 | Swirling Cherry Blossoms | 翳りし満ちる影の華 | - | +| 20220901 | war archives 20200806 cn | The Enigma and the Shark | 最重要的宝物 | The Enigma and the Shark | 鉄血鮫とエニグマ | - | +| 20221013 | war archives 20201029 cn | Universe in Unison | 激唱的UNIVERSE | Universe in Unison | 激唱のユニバース | - | +| 20221117 | war archives 20200903 cn | Stars of the Shimmering Fjord | 峡湾间的星辰 | Stars of the Shimmering Fjord | 輝ける峡湾の星 | - | +| 20221117 | war archives 20210819 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | - | +| 20211028 | war archives 20211028 cn | Skybound Oratorio | 穹顶下的圣咏曲 | Skybound Oratorio | 神穹を衝く聖歌 | 穹頂下的聖詠曲 | +| 20230420 | war archives 20220210 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | 北境序曲 | +| 20230511 | war archives 20220414 cn | Aurora Noctis | 永夜幻光 | Aurora Noctis | 極夜照らす幻光 | 永夜幻光 | +| 20230831 | war archives 20201229 cn | Inverted Orthant | 负象限作战 | Inverted Orthant | 虚畳なりし限象 | - | +| 20200227 | event 20200227 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | - | +| 20200312 | event 20200312 cn | The Solomon Ranger | 复刻斯图尔特的硝烟 | The Solomon Ranger Rerun | 南洋に靡く硝煙(復刻) | - | +| 20200326 | event 20200326 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | - | +| 20200423 | event 20200423 cn | Crimson Echoes | 复刻苍红的回响 | Crimson Echoes Rerun | 縹映る深緋の残響(復刻) | - | +| 20200507 | event 20200507 cn | The Way Home in the Night | 夜幕下的归途 | The Way Home in the Night | 帰路は海色の陰りへと | - | +| 20200521 | event 20200521 cn | Skybound Oratorio | 穹顶下的圣咏曲 | - | 神穹を衝く聖歌 | - | +| 20200521 | event 20200521 en | Iris of Light and Dark | - | Iris of Light and Dark Rerun | - | - | +| 20200603 | event 20200603 cn | Counterattack Within the Fjord | 峡湾间的反击 | - | 峡湾間の反撃 | - | +| 20200603 | event 20200603 en | Prelude under the Moon | - | Prelude under the Moon Rerun | - | - | +| 20200611 | event 20200611 en | Skybound Oratorio | - | Skybound Oratorio | - | - | +| 20200624 | raid 20200624 | Air Raid Drills with Essex | 复刻特别演习埃塞克斯级 | Air Raid Drills with Essex Rerun | 特別演習超空強襲波(復刻) | 特別演習埃塞克斯級 | +| 20200716 | event 20200716 en | Ink Stained Steel Sakura | - | Ink Stained Steel Sakura Rerun | - | - | +| 20200723 | event 20200723 cn | Aurora Noctis | 永夜幻光 | Aurora Noctis | 極夜照らす幻光 | - | +| 20200806 | event 20200806 cn | The Enigma and the Shark | 复刻最重要的宝物 | - | 鉄血鮫とエニグマ(復刻) | - | +| 20200820 | event 20200820 cn | Scherzo of Iron and Blood | 复刻铁血音符誓言 | Scherzo of Iron and Blood Rerun | 黒鉄の楽章 誓いの海(復刻) | - | +| 20200903 | event 20200903 en | Stars of the Shimmering Fjord | - | Stars of the Shimmering Fjord | - | - | +| 20200917 | event 20200917 cn | Dreamwaker's Butterfly | 蝶海梦花 | Dreamwaker's Butterfly | 刹那觀る胡蝶の夢 | - | +| 20201002 | event 20201002 en | Counterattack Within the Fjord | - | Counterattack Within the Fjord | - | - | +| 20201012 | event 20201012 cn | Sundered Blue | 划破海空之翼 | - | 奔る彩帆の青 | - | +| 20201029 | event 20201029 cn | Universe in Unison | 激唱的UNIVERSE | Universe in Unison | 激唱のユニバース | - | +| 20201105 | event 20200312 cn | The Solomon Ranger | - | - | - | 斯圖爾特的硝煙 | +| 20201112 | event 20200903 en | Stars of the Shimmering Fjord | 复刻峡湾间的星辰 | - | 輝ける峡湾の星(復刻) | - | +| 20201112 | event 20201012 cn | Sundered Blue | - | Sundered Blue | - | - | +| 20201126 | event 20201126 cn | Vacation Lane | 假日航线 | Vacation Lane | バケーションレーン | - | +| 20201210 | event 20200806 cn | The Enigma and the Shark | - | The Enigma and the Shark Rerun | - | - | +| 20201229 | event 20201229 cn | Inverted Orthant | 负象限作战 | Inverted Orthant | 虚畳なりし限象 | - | +| 20210121 | event 20210121 cn | Empyreal Tragicomedy | 复刻神圣的悲喜剧 | Empyreal Tragicomedy Rerun | 悲歎せし焔海の詩(復刻) | - | +| 20210225 | event 20210225 cn | Khorovod of Dawn's Rime | 破晓冰华 | Khorovod of Dawn's Rime | 暁射す氷華の嵐 | - | +| 20210225 | event 20210225 tw | Northern Overture | - | - | - | 北境序曲 | +| 20210325 | event 20210325 cn | Ashen Simulacrum | 复刻箱庭疗法 | Ashen Simulacrum Rerun | 開かれし紺碧の砂箱(復刻) | - | +| 20210415 | event 20210415 tw | Encircling Graf Spee | - | - | - | 復刻圍剿施佩伯爵 | +| 20210422 | event 20210422 cn | Daedalian Hymn | 复兴的赞美诗 | Daedalian Hymn | 讃える復興の迷路 | - | +| 20210429 | event 20210429 tw | Ink Stained Steel Sakura | - | - | - | 復刻墨染的鋼鐵之花 | +| 20210527 | event 20210527 tw | Microlayer Medley | - | - | - | 微層混合 | +| 20210527 | event 20210527 cn | Mirror Involution | 镜位螺旋 | Mirror Involution | 照らす螺旋の鏡海 | - | +| 20210610 | event 20210610 tw | The Way Home in the Night | - | - | - | 夜幕下的歸途 | +| 20210624 | event 20210624 tw | Skybound Oratorio | - | - | - | 穹頂下的聖詠曲 | +| 20210624 | event 20210624 cn | Swirling Cherry Blossoms | 复刻浮樱影华 | Swirling Cherry Blossoms Rerun | 翳りし満ちる影の華(復刻) | - | +| 20210708 | raid 20210708 | Cross Wave | 复刻穿越彼方的水线 | Cross Wave rerun | 交錯する新たな波 (復刻) | - | +| 20210708 | event 20200903 en | Stars of the Shimmering Fjord | - | - | - | 峽灣間的星辰 | +| 20210722 | event 20210722 cn | Azur Anthem | 响彻碧海的偶像歌 | Azur Anthem | 海に響くアイドルの歌 | - | +| 20210729 | event 20200723 cn | Aurora Noctis | - | - | - | 永夜幻光 | +| 20210812 | event 20200806 cn | The Enigma and the Shark | - | - | - | 最重要的寶物 | +| 20210819 | event 20210819 cn | Microlayer Medley | 复刻微层混合 | Microlayer Medley Rerun | 闇靄払う銀翼(復刻) | - | +| 20210826 | event 20210722 cn | Azur Anthem | - | - | - | 響徹碧海的偶像歌 | +| 20210916 | event 20210916 cn | Upon the Shimmering Blue | 碧海光粼 | Upon the Shimmering Blue | 駆けよ 碧海の吹き風 | - | +| 20210923 | event 20200917 cn | Dreamwaker's Butterfly | - | - | - | 蝶海夢花 | +| 20211008 | event 20201012 cn | Sundered Blue | - | - | - | 劃破海空之翼 | +| 20211014 | raid 20210708 | Cross Wave | - | - | - | 穿越彼方的水線 | +| 20211028 | event 20211028 cn | Skybound Oratorio | 复刻穹顶下的圣咏曲 | Skybound Oratorio Rerun | 神穹を衝く聖歌(復刻) | - | +| 20211028 | event 20211028 tw | Iris of Light and Dark | - | - | - | 復刻光與影的鳶尾之華 | +| 20211111 | event 20211111 cn | The Flame-Touched Dagger | 杰诺瓦的焰火 | The Flame-Touched Dagger | 燈火のシニエ | - | +| 20211125 | event 20211125 cn | World-spanning Arclight | 交汇世界的弧光 | World-spanning Arclight | 弧光は交わる世界にて | - | +| 20211130 | event 20211125 cn | World-spanning Arclight | - | - | - | 交匯世界的弧光 | +| 20211214 | event 20200603 cn | Counterattack Within the Fjord | - | - | - | 峽灣間的反擊 | +| 20211229 | event 20211229 cn | Tower of Transcendence | 逆转彩虹之塔 | Tower of Transcendence | 遡望せし虹彩の塔 | - | +| 20211230 | event 20201229 cn | Inverted Orthant | - | - | - | 負象限作戰 | +| 20220127 | raid 20220127 | Mystery Investigation | 演习神秘事件调查 | Mystery Investigation | 秘密事件調査 | - | +| 20220210 | event 20220210 cn | Northern Overture Rerun | 复刻北境序曲 | Northern Overture Rerun | 凍絶の北海(復刻) | - | +| 20220224 | event 20210225 cn | Khorovod of Dawn's Rime | - | - | - | 破曉冰華 | +| 20220224 | event 20220224 cn | Abyssal Refrain | 深度回音 | Abyssal Refrain | 鳴動せし星霜の淵 | - | +| 20220310 | event 20200603 cn | Counterattack Within the Fjord | 复刻峡湾间的反击 | Counterattack Within the Fjord Rerun | 峡湾間の反撃(復刻) | - | +| 20220310 | event 20220310 tw | The Solomon Ranger | - | - | - | 復刻斯圖爾特的硝煙 | +| 20220324 | event 20220324 cn | Virtual Tower | 虚像构筑之塔 | Virtual Tower | 幻像の塔 | - | +| 20220324 | event 20210422 cn | Daedalian Hymn | - | - | - | 復興的讚美詩 | +| 20220407 | event 20220407 tw | Crimson Echoes | - | - | - | 蒼紅的迴響(復刻) | +| 20220414 | event 20220414 cn | Aurora Noctis | 复刻永夜幻光 | Aurora Noctis Rerun | 極夜照らす幻光(復刻) | - | +| 20220428 | event 20220428 cn | Rondo at Rainbow's End | 虹彩的终幕曲 | Rondo at Rainbow's End | 吟ずる瑠璃の楽章 | - | +| 20220505 | raid 20200624 | Air Raid Drills with Essex | - | - | - | 特別演習埃塞克斯級(復刻) | +| 20220526 | event 20220526 cn | Pledge of the Radiant Court | 泠誓光庭 | Pledge of the Radiant Court | 诚閃の剣 搖光の城 | - | +| 20220526 | event 20210527 cn | Mirror Involution | - | - | - | 鏡位螺旋 | +| 20220616 | event 20201012 cn | Sundered Blue | 复刻划破海空之翼 | Sundered Blue Rerun | 奔る彩帆の青(復刻) | - | +| 20220616 | event 20200820 cn | Scherzo of Iron and Blood | - | - | - | 復刻鐵血音符誓言 | +| 20220630 | raid 20210708 | Cross Wave | - | - | - | 復刻穿越彼方的水線 | +| 20220630 | raid 20220630 | Angel of Iris | 来自鸢尾的天使 | Angel of Iris | アイリスの天使 | - | +| 20220714 | event 20201029 cn | Universe in Unison | - | - | - | 激唱的UNIVERSE | +| 20220714 | event 20200917 cn | Dreamwaker's Butterfly | 复刻蝶海梦花 | Dreamwaker's Butterfly Rerun | 刹那觀る胡蝶の夢(復刻) | - | +| 20220728 | event 20220728 cn | Aquilifer's Ballade | 雄鹰的叙事歌 | Aquilifer's Ballade | 鋼鷲の冒険譚 | - | +| 20220804 | event 20211028 cn | Skybound Oratorio Rerun | - | - | - | 復刻穹頂下的聖詠曲 | +| 20220818 | event 20220324 cn | Virtual Tower | - | - | - | 虛像構築之塔 | +| 20220818 | event 20220818 cn | Operation Convergence | 远汇点作战 | Operation Convergence | 結像点作戦 | - | +| 20220901 | event 20200903 en | Stars of the Shimmering Fjord | - | - | - | 復刻峽灣間的星辰 | +| 20220915 | event 20210916 cn | Upon the Shimmering Blue | - | - | - | 碧海光粼 | +| 20220915 | event 20220915 cn | Violet Tempest Blooming Lycoris | 紫绛槿岚 | Violet Tempest Blooming Lycoris | 赫の涙月 菫の暁風 | - | +| 20221021 | event 20210121 cn | Empyreal Tragicomedy | - | - | - | 復刻神聖的悲喜劇 | +| 20221027 | raid 20221027 | Fight! Royal Maid | 战斗!皇家女仆队3rd | Fight On, Royal Maids!(Part 3) | 戦え!ロイヤルメイド隊3rd | - | +| 20221103 | event 20211111 cn | The Flame-Touched Dagger | - | - | - | 杰諾瓦的焰火 | +| 20221110 | event 20201229 cn | Inverted Orthant | 复刻负象限作战 | Inverted Orthant Rerun | 虚畳なりし限象(復刻) | - | +| 20221117 | event 20210325 cn | Ashen Simulacrum | - | - | - | 復刻箱庭療法 | +| 20221124 | event 20221124 cn | The Alchemist and the Archipelago of Secrets | 炼金术士与秘密遗迹群岛 | The Alchemist and the Archipelago of Secrets | 錬金術士と謎の遺跡群島 | - | +| 20221201 | event 20221124 cn | The Alchemist and the Archipelago of Secrets | - | - | - | 鍊金術士與秘密遺跡群島 | +| 20221222 | event 20221222 cn | Parallel Superimposition | 定向折叠 | Parallel Superimposition | 積重なる事象の幻界 | - | +| 20221222 | event 20211229 cn | Tower of Transcendence | - | - | - | 逆轉彩虹之塔 | +| 20230105 | event 20210225 cn | Khorovod of Dawn's Rime | 复刻破晓冰华 | Khorovod of Dawn's Rime Rerun | 暁射す氷華の嵐(復刻) | - | +| 20230105 | event 20210610 tw | The Way Home in the Night | - | - | - | 復刻夜幕下的歸途 | +| 20230118 | raid 20230118 | Winter Pathfinder | 冬日的寻路人 | Winter Pathfinder | 冬の案内人 | - | +| 20230118 | raid 20220127 | - | - | - | - | 演習神秘事件調查 | +| 20230202 | event 20200806 cn | The Enigma and the Shark | - | - | - | 復刻最重要的寶物 | +| 20230216 | event 20220224 cn | Abyssal Refrain | - | - | - | 深度回音 | +| 20230223 | event 20230223 cn | Revelations of Dust | 湮烬尘墟 | Revelations of Dust | 黙示の遺構 | - | +| 20230309 | event 20210624 cn | Swirling Cherry Blossoms | - | - | - | 復刻-浮櫻影華 | +| 20230309 | event 20210422 cn | Daedalian Hymn | 复刻复兴的赞美诗 | Daedalian Hymn Rerun | 讃える復興の迷路(復刻) | - | +| 20230323 | raid 20220630 | Angel of Iris | - | - | - | 來自鳶尾的天使 | +| 20230323 | coalition 20230323 | Frostfall | 极地风暴 | Frostfall | 星霜海嵐 | - | +| 20230413 | event 20211111 cn | The Flame-Touched Dagger | 复刻杰诺瓦的焰火 | The Flame-Touched Dagger Rerun | 復刻-燈火のシニエ | - | +| 20230413 | event 20210819 cn | Microlayer Medley | - | - | - | 復刻-微層混合 | +| 20230427 | event 20201126 cn | Vacation Lane | 假日航线 | Vacation Lane | バケーションレーン | 假日航線 | +| 20230525 | event 20220526 cn | Pledge of the Radiant Court | - | - | - | 泠誓光庭 | +| 20230525 | event 20230525 cn | Confluence of Nothingness | 空相交汇点 | Confluence of Nothingness | 覆天せし万象の塵 | - | +| 20230615 | event 20200603 cn | Counterattack Within the Fjord | - | - | - | 復刻峽灣間的反擊 | +| 20230621 | event 20210527 cn | Mirror Involution Rerun | 复刻镜位螺旋 | Mirror Involution Rerun | 照らす螺旋の鏡海(復刻) | - | +| 20230629 | event 20220428 cn | Rondo at Rainbow's End | - | - | - | 虹彩的終幕曲 | +| 20230629 | raid 20230629 | Reflections of the Oasis | 绿洲往事 | Reflections of the Oasis | 緑地伽話 | - | +| 20230713 | event 20220818 cn | Operation Convergence | - | - | 結像点作戦 | 遠匯點作戰 | +| 20230720 | event 20211125 cn | World-spanning Arclight | 复刻交汇世界的弧光 | World-spanning Arclight Rerun | 弧光は交わる世界にて(復刻) | - | +| 20230727 | event 20200917 cn | Dreamwaker's Butterfly | - | - | - | 復刻-蝶海夢花 | +| 20230803 | event 20211125 cn | World-spanning Arclight | - | - | - | 復刻-交匯世界的弧光 | +| 20230803 | event 20230803 cn | Anthem of Remembrance | 奏响鸢尾之歌 | Anthem of Remembrance | 燃ゆる聖都の回想曲 | - | +| 20230817 | event 20230817 cn | The Fool's Scales | 愚者的天平 | The Fool's Scales | 愚者の天秤 | - | +| 20230817 | event 20220414 cn | Aurora Noctis | - | - | - | 復刻-永夜幻光 | +| 20230824 | coalition 20230323 | Frostfall | - | - | - | 極地風暴 | +| 20230914 | event 20220915 cn | Violet Tempest Blooming Lycoris | - | - | - | 紫絳槿嵐 | +| 20230914 | event 20230914 cn | Effulgence Before Eclipse | 须臾望月抄 | Effulgence Before Eclipse | 須臾望月抄 | - | +| 20231012 | event 20201229 cn | Inverted Orthant | - | - | - | 復刻-負象限作戰 | +| 20231026 | event 20231026 cn | Tempesta and the Fountain of Youth | 飓风与青春之泉 | - | - | 復刻-負象限作戰 | diff --git a/campaign/event_20231026_cn/campaign_base.py b/campaign/event_20231026_cn/campaign_base.py new file mode 100644 index 000000000..33aa6421e --- /dev/null +++ b/campaign/event_20231026_cn/campaign_base.py @@ -0,0 +1,63 @@ +import numpy as np + +from module.base.button import Button +from module.base.utils import get_color +from module.campaign.campaign_base import CampaignBase as CampaignBase_ +from module.logger import logger +from module.campaign.assets import CHAPTER_NEXT, CHAPTER_PREV + + +class CampaignBase(CampaignBase_): + STAGE_INCREASE = [ + 'T1 > T2 > T3', + 'T4 > T5 > T6', + ] + + def campaign_set_chapter(self, name, mode='normal'): + """ + Args: + name (str): Campaign name, such as '7-2', 'd3', 'sp3'. + mode (str): 'normal' or 'hard'. + """ + chapter, stage = self._campaign_separate_name(name) + name = chapter + stage + + if chapter.isdigit(): + self.ui_goto_campaign() + self.campaign_ensure_mode('normal') + self.campaign_ensure_chapter(index=chapter) + if mode == 'hard': + self.campaign_ensure_mode('hard') + + elif chapter in 'abcd' or chapter == 'ex_sp': + self.ui_goto_event() + if chapter in 'ab': + self.campaign_ensure_mode('normal') + elif chapter in 'cd': + self.campaign_ensure_mode('hard') + elif chapter == 'ex_sp': + self.campaign_ensure_mode('ex') + self.campaign_ensure_chapter(index=chapter) + + elif chapter == 'sp': + self.ui_goto_sp() + self.campaign_ensure_chapter(index=chapter) + + elif chapter in ['t', 'ts', 'ht', 'hts']: + self.ui_goto_event() + # Campaign mode + if chapter in ['t', 'ts']: + self.campaign_ensure_mode('normal') + if chapter in ['ht', 'hts']: + self.campaign_ensure_mode('hard') + if chapter == 'ex_sp': + self.campaign_ensure_mode('ex') + if chapter in ['t', 'ht']: + if stage in ["1", "2", "3"]: + self.device.click(CHAPTER_PREV) + elif stage in ["4", "5", "6"]: + self.device.click(CHAPTER_NEXT) + # Get stage + self.campaign_ensure_chapter(index=1) + else: + logger.warning(f'Unknown campaign chapter: {name}') diff --git a/campaign/event_20231026_cn/ex.py b/campaign/event_20231026_cn/ex.py new file mode 100644 index 000000000..240b34cf9 --- /dev/null +++ b/campaign/event_20231026_cn/ex.py @@ -0,0 +1,64 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +MAP = CampaignMap('EX') +MAP.shape = 'E7' +MAP.camera_data = ['C4'] +MAP.camera_data_spawn_point = ['C4'] +MAP.map_data = """ + ++ ++ ++ ++ ++ + -- ++ ++ ++ -- + -- ++ ++ ++ -- + ++ ++ MB ++ ++ + ++ -- -- -- ++ + -- -- SP -- -- + -- ++ ++ ++ -- +""" +MAP.weight_data = """ + 50 50 50 50 50 + 50 50 50 50 50 + 50 50 50 50 50 + 50 50 50 50 50 + 50 50 50 50 50 + 50 50 50 50 50 + 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'boss': 1}, +] +A1, B1, C1, D1, E1, \ +A2, B2, C2, D2, E2, \ +A3, B3, C3, D3, E3, \ +A4, B4, C4, D4, E4, \ +A5, B5, C5, D5, E5, \ +A6, B6, C6, D6, E6, \ +A7, B7, C7, D7, E7, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = False + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_0(self): + return self.clear_boss() diff --git a/campaign/event_20231026_cn/sp.py b/campaign/event_20231026_cn/sp.py new file mode 100644 index 000000000..66c6347cf --- /dev/null +++ b/campaign/event_20231026_cn/sp.py @@ -0,0 +1,88 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +MAP = CampaignMap('SP') +MAP.shape = 'G8' +MAP.camera_data = ['D2', 'D6'] +MAP.camera_data_spawn_point = ['D6'] +MAP.map_data = """ + ++ ++ -- MB -- ++ ++ + ++ ++ -- -- -- ++ ++ + -- -- -- -- -- -- -- + -- -- -- __ -- -- -- + ++ ++ SP -- SP ++ ++ + ME -- -- -- -- -- ME + -- ME -- ME -- ME -- + ++ -- ME -- ME -- ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0}, + {'battle': 1}, + {'battle': 2}, + {'battle': 3, 'enemy': 7}, + {'battle': 4}, + {'battle': 5}, + {'battle': 6}, + {'battle': 7, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, \ +A2, B2, C2, D2, E2, F2, G2, \ +A3, B3, C3, D3, E3, F3, G3, \ +A4, B4, C4, D4, E4, F4, G4, \ +A5, B5, C5, D5, E5, F5, G5, \ +A6, B6, C6, D6, E6, F6, G6, \ +A7, B7, C7, D7, E7, F7, G7, \ +A8, B8, C8, D8, E8, F8, G8, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['mali', 'weida', 'jinluhao'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = False + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=2): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_7(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/event_20231026_cn/t1.py b/campaign/event_20231026_cn/t1.py new file mode 100644 index 000000000..ed7961f78 --- /dev/null +++ b/campaign/event_20231026_cn/t1.py @@ -0,0 +1,74 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +MAP = CampaignMap('T1') +MAP.shape = 'I8' +MAP.camera_data = ['E2', 'E5', 'F2', 'F5'] +MAP.camera_data_spawn_point = ['F5', 'E5'] +MAP.map_data = """ + ++ -- -- -- -- -- -- ++ MB + -- ME -- -- ME -- ME -- -- + -- -- ME ++ ++ -- -- -- -- + -- -- -- Me ++ Me -- ME ++ + -- ME -- -- MS -- -- -- ++ + -- ++ ++ -- __ -- Me -- -- + -- ME -- SP -- SP -- ++ -- + -- -- -- -- -- -- -- -- -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 1}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['DD'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/event_20231026_cn/t2.py b/campaign/event_20231026_cn/t2.py new file mode 100644 index 000000000..13447d623 --- /dev/null +++ b/campaign/event_20231026_cn/t2.py @@ -0,0 +1,75 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .t1 import Config as ConfigBase + +MAP = CampaignMap('T2') +MAP.shape = 'I8' +MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] +MAP.camera_data_spawn_point = ['F2'] +MAP.map_data = """ + -- -- -- ++ ++ -- -- SP -- + -- ME -- ++ ++ MS -- -- SP + ME -- ME -- MB -- __ -- -- + ++ -- ++ Me -- Me -- MS -- + ME -- -- -- -- ++ ++ ++ -- + -- ME -- ME -- -- Me -- -- + -- ++ ++ -- -- ME ++ ME -- + -- -- -- -- -- -- -- -- -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 1}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['fengfan_xl'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/event_20231026_cn/t3.py b/campaign/event_20231026_cn/t3.py new file mode 100644 index 000000000..1d01a37a2 --- /dev/null +++ b/campaign/event_20231026_cn/t3.py @@ -0,0 +1,76 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .t1 import Config as ConfigBase + +MAP = CampaignMap('T3') +MAP.shape = 'J8' +MAP.camera_data = ['D3', 'D6', 'G3', 'G6'] +MAP.camera_data_spawn_point = ['D3'] +MAP.map_data = """ + ++ ++ -- -- -- -- ++ ++ -- -- + MB ++ -- SP -- -- -- -- ME -- + -- -- SP -- -- MS ++ -- -- ME + Me -- -- -- MS -- Me -- ME -- + -- Me ++ ++ -- ++ ++ -- -- ++ + ME -- -- Me __ Me -- -- Me -- + ++ ME -- -- -- -- -- ME ++ ++ + -- -- ME ++ ++ ++ ME -- ++ ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4}, + {'battle': 5, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['CL', 'CA'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/event_20231026_cn/t4.py b/campaign/event_20231026_cn/t4.py new file mode 100644 index 000000000..f0d0b311c --- /dev/null +++ b/campaign/event_20231026_cn/t4.py @@ -0,0 +1,76 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .t1 import Config as ConfigBase + +MAP = CampaignMap('T4') +MAP.shape = 'J8' +MAP.camera_data = ['D3', 'D6', 'G3', 'G6'] +MAP.camera_data_spawn_point = ['G3'] +MAP.map_data = """ + ++ ++ -- -- -- -- -- -- ++ ++ + -- ME -- Me ++ -- -- SP MB ++ + ME -- -- -- -- MS -- -- SP -- + -- ME -- ME ME -- __ -- -- -- + -- -- ++ ++ -- Me -- MS -- Me + ++ ++ ++ -- ME -- -- -- ++ -- + ++ ++ ++ ++ ME -- ME -- Me -- + ++ ++ ++ ++ -- ME -- ++ ++ ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['CL', 'CA'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/event_20231026_cn/t5.py b/campaign/event_20231026_cn/t5.py new file mode 100644 index 000000000..03870f139 --- /dev/null +++ b/campaign/event_20231026_cn/t5.py @@ -0,0 +1,91 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .t1 import Config as ConfigBase + +MAP = CampaignMap('T5') +MAP.shape = 'I10' +MAP.camera_data = ['D3', 'D7', 'D8', 'F3', 'F7', 'F8'] +MAP.camera_data_spawn_point = ['D8', 'F8'] +MAP.map_data = """ + ++ ++ ++ ++ ++ ++ ++ ++ ++ + -- ME -- ++ ++ ++ -- ME -- + -- -- ME ++ ++ ++ ME -- -- + ME -- -- ++ MB ++ -- -- ME + -- ME -- -- -- -- -- ME -- + ++ -- ME Me -- Me ME -- ++ + -- Me ++ ++ MS ++ ++ Me -- + ME -- MS -- __ -- MS -- ME + -- Me -- -- -- -- -- Me -- + ++ ++ ++ SP -- SP ++ ++ ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'battle': 1, 'enemy': 2, 'siren': 1}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5}, + {'battle': 6, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ +A9, B9, C9, D9, E9, F9, G9, H9, I9, \ +A10, B10, C10, D10, E10, F10, G10, H10, I10, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['fengfan_ghost_xl'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_6(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/event_20231026_cn/t6.py b/campaign/event_20231026_cn/t6.py new file mode 100644 index 000000000..ab06e2e24 --- /dev/null +++ b/campaign/event_20231026_cn/t6.py @@ -0,0 +1,91 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .t1 import Config as ConfigBase + +MAP = CampaignMap('T6') +MAP.shape = 'I10' +MAP.camera_data = ['E5', 'E8'] +MAP.camera_data_spawn_point = ['E8'] +MAP.map_data = """ + -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- -- -- -- + -- -- ++ ++ ++ ++ ++ -- -- + -- -- ++ MS -- MS ++ -- -- + -- -- ++ -- MB -- ++ -- -- + -- -- ++ -- MS -- ++ -- -- + -- -- ++ ++ -- ++ ++ -- -- + -- ME -- SP -- SP -- ME -- + -- Me -- -- __ -- -- Me -- + -- -- ME ME -- ME ME -- -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 8, 'siren': 3}, + {'battle': 1}, + {'battle': 2}, + {'battle': 3}, + {'battle': 4}, + {'battle': 5}, + {'battle': 6, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ +A9, B9, C9, D9, E9, F9, G9, H9, I9, \ +A10, B10, C10, D10, E10, F10, G10, H10, I10, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['BB', 'CV'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_6(self): + return self.fleet_boss.clear_boss() diff --git a/module/campaign/campaign_ui.py b/module/campaign/campaign_ui.py index f6fd2cacd..3d2df02fe 100644 --- a/module/campaign/campaign_ui.py +++ b/module/campaign/campaign_ui.py @@ -83,9 +83,11 @@ class CampaignUI(CampaignEvent, CampaignOcr): if mode == 'ex': logger.warning('Trying to goto EX, but no EX mode switch') elif mode == 'normal': - MODE_SWITCH_1.set('hard', main=self) + if self.appear(SWITCH_1_NORMAL): + MODE_SWITCH_1.set('hard', main=self) elif mode == 'hard': - MODE_SWITCH_1.set('normal', main=self) + if self.appear(SWITCH_1_HARD): + MODE_SWITCH_1.set('normal', main=self) else: logger.warning(f'Unknown campaign mode: {mode}') else: diff --git a/module/campaign/run.py b/module/campaign/run.py index d7568df81..14835e84b 100644 --- a/module/campaign/run.py +++ b/module/campaign/run.py @@ -231,7 +231,8 @@ class CampaignRun(CampaignEvent, ShopStatus): 'event_20200917_cn', 'event_20221124_cn', 'event_20230525_cn', - 'event_20211125_cn', # chapter T + 'event_20211125_cn', + 'event_20231026_cn',# chapter T ]: name = convert.get(name, name) else: @@ -388,6 +389,15 @@ class CampaignRun(CampaignEvent, ShopStatus): self.device.click_record_clear() try: self.campaign.run() + if self.config.task.command in ['ResearchFarm', 'ResearchFarm2', 'ResearchFarm3', 'ResearchFarm4', 'ResearchFarm5', 'ResearchFarm6']: + CurrentTimes = deep_get(self.config.data, "ResearchFarmingSetting.ResearchFarmingSetting.CurrentCampaignTimes") + 1 + CheckInterval = deep_get(self.config.data, "ResearchFarmingSetting.ResearchFarmingSetting.CheckInterval") + self.config.modified["ResearchFarmingSetting.ResearchFarmingSetting.CurrentCampaignTimes"] = CurrentTimes + if CurrentTimes % CheckInterval == 0: + from module.research_farming.farming import ResearchFarming + ResearchFarming(config=self.config, device=self.device).CheckResearchShipExperience() + self.config.update() + except ScriptEnd as e: logger.hr('Script end') logger.info(str(e)) diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 6a5baf0aa..a68b1505e 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1694,13 +1694,14 @@ "event_20230525_cn", "event_20230803_cn", "event_20230817_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20231026_cn" ], "display": "hide", - "cn": "event_20230914_cn", + "cn": "event_20231026_cn", "en": "event_20230914_cn", "jp": "event_20230914_cn", - "tw": "event_20201229_cn" + "tw": "event_20231026_cn" }, "Mode": { "type": "select", @@ -2016,12 +2017,13 @@ "event_20230525_cn", "event_20230803_cn", "event_20230817_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20231026_cn" ], - "cn": "event_20230914_cn", + "cn": "event_20231026_cn", "en": "event_20230914_cn", "jp": "event_20230914_cn", - "tw": "event_20201229_cn" + "tw": "event_20231026_cn" }, "Mode": { "type": "select", @@ -2452,12 +2454,13 @@ "event_20230525_cn", "event_20230803_cn", "event_20230817_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20231026_cn" ], - "cn": "event_20230914_cn", + "cn": "event_20231026_cn", "en": "event_20230914_cn", "jp": "event_20230914_cn", - "tw": "event_20220915_cn" + "tw": "event_20231026_cn" }, "Mode": { "type": "select", @@ -2888,12 +2891,13 @@ "event_20230525_cn", "event_20230803_cn", "event_20230817_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20231026_cn" ], - "cn": "event_20230914_cn", + "cn": "event_20231026_cn", "en": "event_20230914_cn", "jp": "event_20230914_cn", - "tw": "event_20201229_cn" + "tw": "event_20231026_cn" }, "Mode": { "type": "select", @@ -4237,13 +4241,14 @@ "event_20230525_cn", "event_20230803_cn", "event_20230817_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20231026_cn" ], "display": "disabled", - "cn": "event_20230914_cn", + "cn": "event_20231026_cn", "en": "event_20230914_cn", "jp": "event_20230914_cn", - "tw": "event_20201229_cn" + "tw": "event_20231026_cn" }, "Mode": { "type": "select", @@ -4691,13 +4696,14 @@ "event_20230525_cn", "event_20230803_cn", "event_20230817_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20231026_cn" ], "display": "disabled", - "cn": "event_20230914_cn", + "cn": "event_20231026_cn", "en": "event_20230914_cn", "jp": "event_20230914_cn", - "tw": "event_20201229_cn" + "tw": "event_20231026_cn" }, "Mode": { "type": "select", @@ -5145,13 +5151,14 @@ "event_20230525_cn", "event_20230803_cn", "event_20230817_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20231026_cn" ], "display": "disabled", - "cn": "event_20230914_cn", + "cn": "event_20231026_cn", "en": "event_20230914_cn", "jp": "event_20230914_cn", - "tw": "event_20201229_cn" + "tw": "event_20231026_cn" }, "Mode": { "type": "select", @@ -5599,13 +5606,14 @@ "event_20230525_cn", "event_20230803_cn", "event_20230817_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20231026_cn" ], "display": "disabled", - "cn": "event_20230914_cn", + "cn": "event_20231026_cn", "en": "event_20230914_cn", "jp": "event_20230914_cn", - "tw": "event_20201229_cn" + "tw": "event_20231026_cn" }, "Mode": { "type": "select", @@ -6043,13 +6051,14 @@ "event_20230525_cn", "event_20230803_cn", "event_20230817_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20231026_cn" ], "display": "disabled", - "cn": "event_20230914_cn", + "cn": "event_20231026_cn", "en": "event_20230914_cn", "jp": "event_20230914_cn", - "tw": "event_20201229_cn" + "tw": "event_20231026_cn" }, "Mode": { "type": "select", diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index dc4de287b..ddf43156f 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -724,6 +724,7 @@ "event_20230803_cn": "Anthem of Remembrance", "event_20230817_cn": "The Fools Scales", "event_20230914_cn": "Effulgence Before Eclipse", + "event_20231026_cn": "飓风与青春之泉", "raid_20200624": "Air Raid Drills with Essex Rerun", "raid_20210708": "Cross Wave rerun", "raid_20220127": "Mystery Investigation", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 6a8c32b27..5e3fd9694 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -724,6 +724,7 @@ "event_20230803_cn": "燃ゆる聖都の回想曲", "event_20230817_cn": "愚者の天秤", "event_20230914_cn": "須臾望月抄", + "event_20231026_cn": "飓风与青春之泉", "raid_20200624": "特別演習超空強襲波(復刻)", "raid_20210708": "交錯する新たな波 (復刻)", "raid_20220127": "秘密事件調査", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 172cba9a4..0fe0c414b 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -724,6 +724,7 @@ "event_20230803_cn": "奏响鸢尾之歌", "event_20230817_cn": "愚者的天平", "event_20230914_cn": "须臾望月抄", + "event_20231026_cn": "飓风与青春之泉", "raid_20200624": "复刻特别演习埃塞克斯级", "raid_20210708": "复刻穿越彼方的水线", "raid_20220127": "演习神秘事件调查", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 61a2c5216..cd7e223cb 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -724,6 +724,7 @@ "event_20230803_cn": "Anthem of Remembrance", "event_20230817_cn": "The Fools Scales", "event_20230914_cn": "Effulgence Before Eclipse", + "event_20231026_cn": "復刻-負象限作戰", "raid_20200624": "特別演習埃塞克斯級(復刻)", "raid_20210708": "復刻穿越彼方的水線", "raid_20220127": "演習神秘事件調查", diff --git a/module/template/assets.py b/module/template/assets.py index 85932cf72..0d72aedfc 100644 --- a/module/template/assets.py +++ b/module/template/assets.py @@ -89,6 +89,8 @@ TEMPLATE_SIREN_DogPink = Template(file={'cn': './assets/cn/template/TEMPLATE_SIR TEMPLATE_SIREN_Dorsetshire = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Dorsetshire.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Dorsetshire.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Dorsetshire.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Dorsetshire.gif'}) TEMPLATE_SIREN_DukeOfYork = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_DukeOfYork.gif', 'en': './assets/en/template/TEMPLATE_SIREN_DukeOfYork.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_DukeOfYork.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_DukeOfYork.gif'}) TEMPLATE_SIREN_ELpurple = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_ELpurple.gif', 'en': './assets/en/template/TEMPLATE_SIREN_ELpurple.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_ELpurple.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_ELpurple.gif'}) +TEMPLATE_SIREN_fengfan_ghost_xl = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_fengfan_ghost_xl.png', 'en': './assets/cn/template/TEMPLATE_SIREN_fengfan_ghost_xl.png', 'jp': './assets/cn/template/TEMPLATE_SIREN_fengfan_ghost_xl.png', 'tw': './assets/cn/template/TEMPLATE_SIREN_fengfan_ghost_xl.png'}) +TEMPLATE_SIREN_fengfan_xl = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_fengfan_xl.png', 'en': './assets/cn/template/TEMPLATE_SIREN_fengfan_xl.png', 'jp': './assets/cn/template/TEMPLATE_SIREN_fengfan_xl.png', 'tw': './assets/cn/template/TEMPLATE_SIREN_fengfan_xl.png'}) TEMPLATE_SIREN_Formidable = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Formidable.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Formidable.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Formidable.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Formidable.gif'}) TEMPLATE_SIREN_Gascogne = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Gascogne.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Gascogne.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Gascogne.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Gascogne.gif'}) TEMPLATE_SIREN_Gloucester = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Gloucester.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Gloucester.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Gloucester.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Gloucester.gif'})