ksaa 2025.9b1__py3-none-any.whl → 2025.9b3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kaa/application/core/idle_mode.py +172 -0
- kaa/application/core/misc_core.py +33 -0
- kaa/common.py +22 -0
- kaa/config/const.py +255 -0
- kaa/config/produce.py +257 -0
- kaa/config/schema.py +258 -0
- kaa/db/drink.py +84 -0
- kaa/db/sqlite.py +42 -0
- kaa/errors.py +59 -0
- kaa/game_ui/dialog.py +66 -0
- kaa/game_ui/drinks_overview.py +166 -0
- kaa/game_ui/idols_overview.py +182 -0
- kaa/game_ui/schedule.py +162 -0
- kaa/game_ui/scrollable.py +347 -0
- kaa/image_db/db.py +199 -0
- kaa/main/gr.py +2847 -0
- kaa/main/kaa.py +298 -0
- kaa/metadata.py +695 -0
- kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
- kaa/resources/drinks/img_general_pdrink_1-001.png +0 -0
- kaa/resources/drinks/img_general_pdrink_1-002.png +0 -0
- kaa/resources/drinks/img_general_pdrink_1-003.png +0 -0
- kaa/resources/drinks/img_general_pdrink_1-004.png +0 -0
- kaa/resources/drinks/img_general_pdrink_1-006.png +0 -0
- kaa/resources/drinks/img_general_pdrink_1-008.png +0 -0
- kaa/resources/drinks/img_general_pdrink_1-009.png +0 -0
- kaa/resources/drinks/img_general_pdrink_1-010.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-001.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-003.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-004.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-005.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-006.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-007.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-008.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-009.png +0 -0
- kaa/resources/drinks/img_general_pdrink_2-010.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-001.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-002.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-004.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-005.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-006.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-007.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-008.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-009.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-010.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-011.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-012.png +0 -0
- kaa/resources/drinks/img_general_pdrink_3-013.png +0 -0
- kaa/resources/game.db +0 -0
- kaa/resources/game_ver.txt +0 -0
- kaa/resources/idol_cards/i_card-skin-fktn-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hrnm-3-013_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hrnm-3-013_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-shro-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-shro-3-014_1.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_acc-0_002.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-0_001.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-0_002.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-0_005.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-0_006.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-0_009.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-0_010.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-0_014.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-0_020.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-0_021.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_001.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_002.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_003.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_004.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_019.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_020.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_021.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_022-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_022-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_022-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_022-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_022-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_022-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_022-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_022-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_022-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_022-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_022-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_023.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_027.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_028.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_029.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_036.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_037.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_038.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_040.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_041.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_042.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_044.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_046.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_074-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_074-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_074-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_074-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_074-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_074-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_074-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_074-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_074-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_074-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-1_074-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_001-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_001-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_001-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_001-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_001-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_001-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_001-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_001-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_001-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_001-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_001-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_002-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_002-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_002-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_002-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_002-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_002-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_002-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_002-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_002-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_002-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_002-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_003-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_003-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_003-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_003-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_003-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_003-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_003-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_003-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_003-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_003-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_003-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_009-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_009-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_009-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_009-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_009-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_009-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_009-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_009-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_009-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_009-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_009-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_030-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_030-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_030-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_030-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_030-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_030-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_030-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_030-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_030-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_030-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_030-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_031-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_031-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_031-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_031-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_031-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_031-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_031-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_031-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_031-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_031-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_031-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_032-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_032-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_032-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_032-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_032-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_032-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_032-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_032-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_032-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_032-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_032-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_033-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_033-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_033-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_033-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_033-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_033-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_033-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_033-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_033-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_033-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_033-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_042-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_042-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_042-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_042-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_042-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_042-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_042-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_042-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_042-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_042-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_042-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_045-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_045-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_045-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_045-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_045-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_045-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_045-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_045-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_045-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_045-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_045-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_046-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_046-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_046-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_046-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_046-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_046-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_046-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_046-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_046-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_046-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_046-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_047-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_047-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_047-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_047-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_047-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_047-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_047-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_047-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_047-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_047-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_047-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_048-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_048-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_048-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_048-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_048-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_048-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_048-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_048-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_048-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_048-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_048-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_049-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_049-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_049-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_049-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_049-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_049-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_049-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_049-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_049-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_049-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_049-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_059-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_059-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_059-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_059-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_059-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_059-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_059-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_059-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_059-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_059-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_059-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_061-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_061-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_061-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_061-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_061-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_061-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_061-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_061-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_061-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_061-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_061-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_062-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_062-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_062-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_062-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_062-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_062-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_062-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_062-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_062-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_062-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_062-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_063-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_063-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_063-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_063-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_063-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_063-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_063-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_063-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_063-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_063-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_063-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_065-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_065-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_065-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_065-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_065-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_065-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_065-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_065-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_065-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_065-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_065-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_067-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_067-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_067-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_067-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_067-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_067-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_067-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_067-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_067-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_067-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_067-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_068-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_068-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_068-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_068-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_068-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_068-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_068-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_068-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_068-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_068-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_068-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_069-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_069-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_069-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_069-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_069-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_069-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_069-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_069-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_069-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_069-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_069-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_070-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_070-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_070-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_070-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_070-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_070-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_070-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_070-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_070-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_070-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_070-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_071-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_071-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_071-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_071-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_071-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_071-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_071-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_071-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_071-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_071-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_071-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_072-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_072-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_072-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_072-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_072-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_072-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_072-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_072-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_072-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_072-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_072-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_073-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_073-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_073-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_073-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_073-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_073-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_073-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_073-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_073-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_073-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_073-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_081-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_081-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_081-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_081-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_081-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_081-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_081-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_081-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_081-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_081-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_081-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_082-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_082-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_082-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_082-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_082-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_082-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_082-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_082-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_082-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_082-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-2_082-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_001-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_001-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_001-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_001-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_001-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_001-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_001-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_001-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_001-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_001-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_001-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_010-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_010-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_010-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_010-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_010-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_010-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_010-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_010-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_010-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_010-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_010-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_029-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_029-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_029-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_029-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_029-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_029-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_029-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_029-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_029-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_029-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_029-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_030-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_030-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_030-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_030-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_030-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_030-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_030-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_030-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_030-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_030-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_030-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_031-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_031-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_031-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_031-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_031-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_031-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_031-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_031-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_031-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_031-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_031-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_032-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_032-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_032-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_032-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_032-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_032-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_032-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_032-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_032-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_032-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_032-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_038-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_038-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_038-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_038-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_038-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_038-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_038-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_038-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_038-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_038-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_038-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_039-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_039-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_039-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_039-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_039-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_039-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_039-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_039-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_039-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_039-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_039-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_045-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_045-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_045-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_045-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_045-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_045-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_045-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_045-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_045-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_045-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_045-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_049-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_049-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_049-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_049-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_049-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_049-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_049-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_049-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_049-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_049-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_049-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_050-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_050-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_050-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_050-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_050-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_050-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_050-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_050-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_050-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_050-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_050-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_052-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_052-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_052-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_052-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_052-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_052-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_052-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_052-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_052-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_052-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_052-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_053-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_053-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_053-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_053-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_053-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_053-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_053-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_053-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_053-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_053-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_053-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_054-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_054-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_054-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_054-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_054-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_054-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_054-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_054-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_054-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_054-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_054-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_055-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_055-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_055-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_055-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_055-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_055-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_055-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_055-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_055-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_055-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_055-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_056-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_056-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_056-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_056-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_056-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_056-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_056-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_056-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_056-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_056-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_056-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_057-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_057-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_057-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_057-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_057-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_057-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_057-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_057-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_057-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_057-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_057-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_065-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_065-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_065-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_065-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_065-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_065-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_065-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_065-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_065-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_065-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_act-3_065-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_010.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_011.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_012.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_013.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_014.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_015.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_016.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_017.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_018.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_053.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_054.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_055.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_056.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_057.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_058.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_059.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_060.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_061.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_062.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_063.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_064.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_065.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_066.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-1_067.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-2_016.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-2_017.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-2_018.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-2_019.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-2_020.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-2_021.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-2_022.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-2_023.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-2_024.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-2_083.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-2_084.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-2_085.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_013.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_014.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_015.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_016.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_017.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_018.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_019.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_020.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_021.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_022.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_066.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_067.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_068.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_069.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_070.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_071.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_072.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_073.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_074.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_075.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_076.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_077.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_078.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_079.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_080.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_081.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_082.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_083.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_084.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_085.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_086.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_087.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_096.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_097.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_098.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_099.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_100.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_101.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_102.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_103.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_104.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_105.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_106.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_107.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_108.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_110.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_111.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_112.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_113.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_114.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_115.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_117.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_118.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_119.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_120.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_122.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_123.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_127.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_128.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_129.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_130.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_131.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_132.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_133.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_134.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_135.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_136.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_137.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_138.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_139.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_143.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_144.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_145.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_ido-3_146.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-0_003.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-0_007.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-0_008.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-0_011.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-0_012.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-0_013.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-0_015.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_005-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_005-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_005-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_005-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_005-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_005-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_005-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_005-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_005-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_005-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_005-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_006.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_007.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_008.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_009.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_024.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_025.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_030.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_031.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_032.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_033.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_034.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_035.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_039.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_048.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_049.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_050.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-1_051.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_004-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_004-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_004-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_004-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_004-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_004-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_004-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_004-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_004-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_004-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_004-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_008-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_008-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_008-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_008-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_008-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_008-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_008-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_008-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_008-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_008-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_008-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_011-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_011-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_011-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_011-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_011-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_011-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_011-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_011-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_011-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_011-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_011-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_012-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_012-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_012-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_012-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_012-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_012-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_012-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_012-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_012-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_012-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_012-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_014-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_014-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_014-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_014-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_014-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_014-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_014-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_014-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_014-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_014-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_014-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_034-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_034-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_034-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_034-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_034-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_034-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_034-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_034-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_034-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_034-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_034-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_035-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_035-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_035-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_035-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_035-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_035-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_035-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_035-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_035-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_035-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_035-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_036-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_036-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_036-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_036-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_036-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_036-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_036-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_036-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_036-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_036-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_036-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_037-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_037-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_037-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_037-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_037-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_037-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_037-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_037-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_037-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_037-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_037-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_038-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_038-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_038-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_038-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_038-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_038-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_038-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_038-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_038-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_038-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_038-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_039-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_039-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_039-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_039-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_039-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_039-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_039-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_039-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_039-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_039-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_039-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_040-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_040-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_040-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_040-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_040-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_040-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_040-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_040-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_040-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_040-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_040-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_041-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_041-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_041-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_041-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_041-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_041-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_041-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_041-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_041-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_041-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_041-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_043-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_043-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_043-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_043-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_043-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_043-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_043-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_043-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_043-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_043-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_043-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_050-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_050-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_050-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_050-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_050-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_050-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_050-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_050-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_050-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_050-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_050-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_051-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_051-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_051-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_051-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_051-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_051-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_051-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_051-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_051-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_051-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_051-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_052-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_052-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_052-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_052-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_052-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_052-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_052-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_052-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_052-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_052-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_052-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_053-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_053-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_053-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_053-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_053-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_053-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_053-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_053-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_053-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_053-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_053-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_054-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_054-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_054-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_054-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_054-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_054-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_054-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_054-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_054-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_054-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_054-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_055-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_055-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_055-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_055-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_055-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_055-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_055-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_055-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_055-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_055-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_055-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_056-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_056-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_056-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_056-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_056-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_056-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_056-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_056-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_056-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_056-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_056-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_057-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_057-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_057-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_057-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_057-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_057-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_057-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_057-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_057-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_057-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_057-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_058-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_058-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_058-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_058-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_058-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_058-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_058-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_058-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_058-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_058-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_058-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_060-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_060-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_060-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_060-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_060-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_060-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_060-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_060-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_060-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_060-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_060-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_064-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_064-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_064-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_064-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_064-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_064-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_064-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_064-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_064-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_064-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_064-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_066-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_066-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_066-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_066-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_066-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_066-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_066-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_066-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_066-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_066-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_066-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_074-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_074-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_074-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_074-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_074-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_074-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_074-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_074-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_074-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_074-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_074-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_075-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_075-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_075-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_075-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_075-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_075-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_075-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_075-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_075-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_075-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_075-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_076-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_076-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_076-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_076-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_076-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_076-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_076-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_076-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_076-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_076-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_076-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_077-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_077-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_077-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_077-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_077-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_077-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_077-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_077-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_077-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_077-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_077-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_078-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_078-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_078-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_078-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_078-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_078-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_078-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_078-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_078-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_078-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_078-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_079-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_079-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_079-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_079-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_079-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_079-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_079-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_079-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_079-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_079-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_079-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_080-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_080-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_080-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_080-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_080-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_080-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_080-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_080-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_080-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_080-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-2_080-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_002-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_002-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_002-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_002-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_002-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_002-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_002-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_002-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_002-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_002-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_002-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_003-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_003-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_003-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_003-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_003-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_003-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_003-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_003-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_003-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_003-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_003-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_004-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_004-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_004-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_004-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_004-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_004-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_004-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_004-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_004-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_004-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_004-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_005-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_005-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_005-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_005-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_005-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_005-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_005-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_005-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_005-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_005-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_005-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_006-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_006-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_006-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_006-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_006-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_006-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_006-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_006-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_006-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_006-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_006-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_011-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_011-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_011-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_011-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_011-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_011-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_011-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_011-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_011-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_011-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_011-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_012-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_012-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_012-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_012-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_012-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_012-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_012-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_012-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_012-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_012-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_012-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_033-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_033-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_033-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_033-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_033-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_033-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_033-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_033-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_033-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_033-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_033-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_034-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_034-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_034-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_034-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_034-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_034-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_034-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_034-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_034-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_034-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_034-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_035-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_035-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_035-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_035-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_035-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_035-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_035-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_035-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_035-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_035-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_035-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_036-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_036-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_036-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_036-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_036-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_036-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_036-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_036-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_036-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_036-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_036-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_040-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_040-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_040-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_040-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_040-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_040-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_040-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_040-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_040-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_040-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_040-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_041-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_041-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_041-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_041-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_041-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_041-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_041-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_041-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_041-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_041-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_041-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_042-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_042-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_042-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_042-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_042-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_042-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_042-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_042-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_042-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_042-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_042-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_043-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_043-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_043-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_043-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_043-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_043-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_043-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_043-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_043-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_043-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_043-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_044-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_044-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_044-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_044-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_044-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_044-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_044-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_044-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_044-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_044-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_044-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_058-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_058-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_058-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_058-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_058-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_058-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_058-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_058-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_058-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_058-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_058-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_061-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_061-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_061-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_061-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_061-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_061-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_061-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_061-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_061-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_061-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_061-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_062-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_062-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_062-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_062-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_062-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_062-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_062-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_062-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_062-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_062-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_062-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_063-amao.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_063-fktn.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_063-hrnm.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_063-hski.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_063-hume.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_063-jsna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_063-kcna.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_063-kllj.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_063-shro.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_063-ssmk.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_men-3_063-ttmr.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_025.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_026.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_027.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_028.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_029.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_086.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_087.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_088.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_090.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_091.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_092.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_093.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_094.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_095.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-2_096.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_023.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_024.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_025.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_026.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_027.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_037.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_046.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_047.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_048.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_088.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_089.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_090.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_091.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_092.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_093.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_094.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_095.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_109.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_121.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_124.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_125.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_126.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_152.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_155.png +0 -0
- kaa/resources/skill_cards/img_general_skillcard_sup-3_158.png +0 -0
- kaa/sprites/03a4f7be-8eea-4506-b8ba-19cef95612af.png +0 -0
- kaa/sprites/207594fa-6a0b-45ec-aeff-b3e45348c508.png +0 -0
- kaa/sprites/484ba2a3-3a4b-42c1-bde1-8f0631017e73.png +0 -0
- kaa/sprites/a3736105-b3e6-467b-888a-f93b8f4d37be.png +0 -0
- kaa/tasks/R.py +602 -0
- kaa/tasks/actions/commu.py +99 -0
- kaa/tasks/actions/loading.py +55 -0
- kaa/tasks/actions/scenes.py +82 -0
- kaa/tasks/actions/stats.py +51 -0
- kaa/tasks/daily/acquire_activity_funds.py +37 -0
- kaa/tasks/daily/acquire_presents.py +44 -0
- kaa/tasks/daily/assignment.py +198 -0
- kaa/tasks/daily/capsule_toys.py +126 -0
- kaa/tasks/daily/club_reward.py +84 -0
- kaa/tasks/daily/contest.py +206 -0
- kaa/tasks/daily/mission_reward.py +146 -0
- kaa/tasks/daily/purchase.py +224 -0
- kaa/tasks/daily/upgrade_support_card.py +58 -0
- kaa/tasks/end_game.py +105 -0
- kaa/tasks/produce/cards.py +460 -0
- kaa/tasks/produce/common.py +396 -0
- kaa/tasks/produce/in_purodyuusu.py +893 -0
- kaa/tasks/produce/non_lesson_actions.py +318 -0
- kaa/tasks/produce/p_drink.py +43 -0
- kaa/tasks/produce/produce.py +428 -0
- kaa/tasks/start_game.py +201 -0
- kaa/util/paths.py +23 -0
- ksaa-2025.9b3.dist-info/METADATA +200 -0
- ksaa-2025.9b3.dist-info/RECORD +2054 -0
- ksaa-2025.9b3.dist-info/entry_points.txt +2 -0
- ksaa-2025.9b3.dist-info/top_level.txt +1 -0
- kotonebot/__init__.py +0 -40
- kotonebot/backend/bot.py +0 -302
- kotonebot/backend/color.py +0 -525
- kotonebot/backend/context/__init__.py +0 -3
- kotonebot/backend/context/context.py +0 -1001
- kotonebot/backend/context/task_action.py +0 -176
- kotonebot/backend/core.py +0 -126
- kotonebot/backend/debug/__init__.py +0 -1
- kotonebot/backend/debug/entry.py +0 -89
- kotonebot/backend/debug/mock.py +0 -79
- kotonebot/backend/debug/server.py +0 -223
- kotonebot/backend/debug/vars.py +0 -346
- kotonebot/backend/dispatch.py +0 -228
- kotonebot/backend/flow_controller.py +0 -197
- kotonebot/backend/image.py +0 -748
- kotonebot/backend/loop.py +0 -277
- kotonebot/backend/ocr.py +0 -511
- kotonebot/backend/preprocessor.py +0 -103
- kotonebot/client/__init__.py +0 -10
- kotonebot/client/device.py +0 -500
- kotonebot/client/fast_screenshot.py +0 -378
- kotonebot/client/host/__init__.py +0 -12
- kotonebot/client/host/adb_common.py +0 -94
- kotonebot/client/host/custom.py +0 -114
- kotonebot/client/host/leidian_host.py +0 -202
- kotonebot/client/host/mumu12_host.py +0 -245
- kotonebot/client/host/protocol.py +0 -213
- kotonebot/client/host/windows_common.py +0 -55
- kotonebot/client/implements/__init__.py +0 -7
- kotonebot/client/implements/adb.py +0 -85
- kotonebot/client/implements/adb_raw.py +0 -159
- kotonebot/client/implements/nemu_ipc/__init__.py +0 -8
- kotonebot/client/implements/nemu_ipc/external_renderer_ipc.py +0 -280
- kotonebot/client/implements/nemu_ipc/nemu_ipc.py +0 -327
- kotonebot/client/implements/remote_windows.py +0 -193
- kotonebot/client/implements/uiautomator2.py +0 -82
- kotonebot/client/implements/windows.py +0 -168
- kotonebot/client/protocol.py +0 -69
- kotonebot/client/registration.py +0 -24
- kotonebot/config/__init__.py +0 -1
- kotonebot/config/base_config.py +0 -96
- kotonebot/config/manager.py +0 -36
- kotonebot/debug_entry.py +0 -42
- kotonebot/errors.py +0 -72
- kotonebot/interop/win/message_box.py +0 -314
- kotonebot/interop/win/reg.py +0 -37
- kotonebot/interop/win/shortcut.py +0 -43
- kotonebot/interop/win/task_dialog.py +0 -469
- kotonebot/kaa/application/core/idle_mode.py +0 -172
- kotonebot/kaa/application/core/misc_core.py +0 -33
- kotonebot/kaa/common.py +0 -22
- kotonebot/kaa/config/const.py +0 -255
- kotonebot/kaa/config/produce.py +0 -257
- kotonebot/kaa/config/schema.py +0 -249
- kotonebot/kaa/db/sqlite.py +0 -25
- kotonebot/kaa/errors.py +0 -52
- kotonebot/kaa/game_ui/dialog.py +0 -66
- kotonebot/kaa/game_ui/idols_overview.py +0 -176
- kotonebot/kaa/game_ui/schedule.py +0 -162
- kotonebot/kaa/game_ui/scrollable.py +0 -346
- kotonebot/kaa/image_db/db.py +0 -179
- kotonebot/kaa/main/gr.py +0 -2825
- kotonebot/kaa/main/kaa.py +0 -298
- kotonebot/kaa/metadata.py +0 -649
- kotonebot/kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
- kotonebot/kaa/resources/game.db +0 -0
- kotonebot/kaa/resources/game_ver.txt +0 -0
- kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-014_0.png +0 -0
- kotonebot/kaa/tasks/R.py +0 -586
- kotonebot/kaa/tasks/actions/__init__.py +0 -0
- kotonebot/kaa/tasks/actions/commu.py +0 -99
- kotonebot/kaa/tasks/actions/loading.py +0 -55
- kotonebot/kaa/tasks/actions/scenes.py +0 -82
- kotonebot/kaa/tasks/actions/stats.py +0 -51
- kotonebot/kaa/tasks/daily/__init__.py +0 -0
- kotonebot/kaa/tasks/daily/acquire_activity_funds.py +0 -37
- kotonebot/kaa/tasks/daily/acquire_presents.py +0 -44
- kotonebot/kaa/tasks/daily/assignment.py +0 -198
- kotonebot/kaa/tasks/daily/capsule_toys.py +0 -125
- kotonebot/kaa/tasks/daily/club_reward.py +0 -84
- kotonebot/kaa/tasks/daily/contest.py +0 -206
- kotonebot/kaa/tasks/daily/mission_reward.py +0 -146
- kotonebot/kaa/tasks/daily/purchase.py +0 -224
- kotonebot/kaa/tasks/daily/upgrade_support_card.py +0 -58
- kotonebot/kaa/tasks/end_game.py +0 -105
- kotonebot/kaa/tasks/produce/__init__.py +0 -0
- kotonebot/kaa/tasks/produce/cards.py +0 -395
- kotonebot/kaa/tasks/produce/common.py +0 -396
- kotonebot/kaa/tasks/produce/in_purodyuusu.py +0 -870
- kotonebot/kaa/tasks/produce/non_lesson_actions.py +0 -318
- kotonebot/kaa/tasks/produce/p_drink.py +0 -43
- kotonebot/kaa/tasks/produce/produce.py +0 -428
- kotonebot/kaa/tasks/start_game.py +0 -199
- kotonebot/kaa/util/paths.py +0 -23
- kotonebot/logging/__init__.py +0 -2
- kotonebot/logging/log.py +0 -18
- kotonebot/primitives/__init__.py +0 -17
- kotonebot/primitives/geometry.py +0 -290
- kotonebot/primitives/visual.py +0 -63
- kotonebot/tools/__init__.py +0 -0
- kotonebot/tools/mirror.py +0 -354
- kotonebot/ui/__init__.py +0 -0
- kotonebot/ui/file_host/sensio.py +0 -36
- kotonebot/ui/file_host/tmp_send.py +0 -54
- kotonebot/ui/pushkit/__init__.py +0 -3
- kotonebot/ui/pushkit/image_host.py +0 -87
- kotonebot/ui/pushkit/protocol.py +0 -13
- kotonebot/ui/pushkit/wxpusher.py +0 -53
- kotonebot/ui/user.py +0 -144
- kotonebot/util.py +0 -409
- ksaa-2025.9b1.dist-info/METADATA +0 -199
- ksaa-2025.9b1.dist-info/RECORD +0 -757
- ksaa-2025.9b1.dist-info/entry_points.txt +0 -2
- ksaa-2025.9b1.dist-info/top_level.txt +0 -1
- {kotonebot/kaa → kaa}/application/adapter/misc_adapter.py +0 -0
- {kotonebot/kaa → kaa}/config/__init__.py +0 -0
- {kotonebot/kaa → kaa}/config/migrations/__init__.py +0 -0
- {kotonebot/kaa → kaa}/config/migrations/_idol.py +0 -0
- {kotonebot/kaa → kaa}/config/migrations/_v1_to_v2.py +0 -0
- {kotonebot/kaa → kaa}/config/migrations/_v2_to_v3.py +0 -0
- {kotonebot/kaa → kaa}/config/migrations/_v3_to_v4.py +0 -0
- {kotonebot/kaa → kaa}/config/migrations/_v4_to_v5.py +0 -0
- {kotonebot/kaa → kaa}/config/migrations/_v5_to_v6.py +0 -0
- {kotonebot/kaa → kaa}/config/upgrade.py +0 -0
- {kotonebot/kaa → kaa}/db/__init__.py +0 -0
- {kotonebot/kaa → kaa}/db/constants.py +0 -0
- {kotonebot/kaa → kaa}/db/idol_card.py +0 -0
- {kotonebot/kaa → kaa}/game_ui/__init__.py +0 -0
- {kotonebot/kaa → kaa}/game_ui/badge.py +0 -0
- {kotonebot/kaa → kaa}/game_ui/common.py +0 -0
- {kotonebot/kaa → kaa}/game_ui/commu_event_buttons.py +0 -0
- {kotonebot/kaa → kaa}/game_ui/primary_button.py +0 -0
- {kotonebot/kaa → kaa}/game_ui/toolbar.py +0 -0
- {kotonebot/kaa → kaa}/image_db/__init__.py +0 -0
- {kotonebot/kaa → kaa}/image_db/descriptors/__init__.py +0 -0
- {kotonebot/kaa → kaa}/image_db/descriptors/hist.py +0 -0
- {kotonebot/kaa → kaa}/kaa_context.py +0 -0
- {kotonebot/kaa → kaa}/main/__init__.py +0 -0
- {kotonebot/kaa → kaa}/main/cli.py +0 -0
- {kotonebot/kaa → kaa}/main/dmm_host.py +0 -0
- {kotonebot/backend → kaa/resources}/__init__.py +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-014_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-015_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-015_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-004_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-004_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-014_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-014_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-014_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-014_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-004_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-004_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-014_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-014_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-004_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-004_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-004_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-004_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kcna-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-004_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-004_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-kllj-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-004_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-004_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-shro-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-005_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-005_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-014_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ssmk-3-014_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-1-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-1-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-1-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-1-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-2-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-2-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-000_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-000_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-001_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-001_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-002_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-002_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-003_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-003_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-004_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-004_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-006_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-006_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-007_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-007_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-008_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-008_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-009_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-009_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-010_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-010_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-011_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-011_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-012_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-012_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-013_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-013_1.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-014_0.png +0 -0
- {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-ttmr-3-014_1.png +0 -0
- {kotonebot/kaa → kaa}/sprites/00551158-fee9-483f-b034-549139a96f58.png +0 -0
- /kotonebot/kaa/sprites/0d1ecf0b-b090-42b2-b895-cb1f5b415af8.png → /kaa/sprites/031cd28e-a1e6-469f-b6af-c68cc4b2dc2e.png +0 -0
- /kotonebot/kaa/sprites/85f1cf4f-7d07-403a-917b-02b273680c21.png → /kaa/sprites/037ce002-5d67-412f-928a-5fcc3cd3df0f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/05890a1b-8764-4e9f-9d21-65d292c22e13.png +0 -0
- /kotonebot/kaa/sprites/a4aabbbe-6400-4bcb-a95f-32a7d611bf5b.png → /kaa/sprites/05eeb26a-2ecb-4804-ae68-85221fcdbe00.png +0 -0
- /kotonebot/kaa/sprites/9932dfd8-7c97-47dd-b6bb-e8c8d593f762.png → /kaa/sprites/08d4f0d1-43d5-44f8-814f-eba273f96903.png +0 -0
- {kotonebot/kaa → kaa}/sprites/0949c622-9067-4f0d-bac2-3f938a1d2ed2.png +0 -0
- {kotonebot/kaa → kaa}/sprites/0bf5e34e-afc6-4447-bbac-67026ce2ad26.png +0 -0
- {kotonebot/kaa → kaa}/sprites/0c0627be-4a09-4450-a078-1858d3ace532.png +0 -0
- {kotonebot/kaa → kaa}/sprites/0d9ac648-eefa-4869-ac99-1b0c83649681.png +0 -0
- {kotonebot/kaa → kaa}/sprites/0f7d581d-cea3-4039-9205-732e4cd29293.png +0 -0
- /kotonebot/kaa/sprites/22bda7ef-ad0d-4020-a667-6ae77b4805ca.png → /kaa/sprites/11ecc94a-6fd2-476e-8910-0fea18678068.png +0 -0
- {kotonebot/kaa → kaa}/sprites/1652f06a-5417-49ef-8949-4854772d9ab7.png +0 -0
- {kotonebot/kaa → kaa}/sprites/16fbc93d-b294-4001-b4e9-ee2af181415f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/185f7838-92a7-460b-9340-f60858948ce9.png +0 -0
- {kotonebot/kaa → kaa}/sprites/1926f2f9-4bd7-48eb-9eba-28ec4efb0606.png +0 -0
- /kotonebot/kaa/sprites/62390db3-c5bc-4868-bfb3-958acceff9cd.png → /kaa/sprites/19b610df-ac4a-463c-afdb-88a67dc7bc27.png +0 -0
- /kotonebot/kaa/sprites/002e7b92-11f4-487a-af55-334663e2b8cd.png → /kaa/sprites/1a0ee299-39f0-494f-864c-62253020b670.png +0 -0
- /kotonebot/kaa/sprites/3868b12d-8d93-4754-91bd-797680d24e22.png → /kaa/sprites/1b675788-acb2-46c0-9ffc-c50ed770ae37.png +0 -0
- /kotonebot/kaa/sprites/ea7dd69b-b02f-499d-acee-6bd35a033a73.png → /kaa/sprites/1d3b859a-f9ea-489d-82da-ec42a273b2a1.png +0 -0
- /kotonebot/kaa/sprites/13a5d0e7-776e-40c2-8a52-dd3e016913b4.png → /kaa/sprites/1f96ddc2-c429-4806-9bc1-802136d37a6f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/213016c2-c3a2-43d8-86a3-ab4d27666ced.png +0 -0
- /kotonebot/kaa/sprites/ff232b25-39b4-4dcb-9e21-1d82b9e0bb7d.png → /kaa/sprites/21c9b731-8bfd-47a7-8933-175dc47e642f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/23d88465-65d9-4718-8725-8dbf0a98a5a4.png +0 -0
- {kotonebot/kaa → kaa}/sprites/24dc7158-036c-4a66-9280-e934f470be53.png +0 -0
- {kotonebot/kaa → kaa}/sprites/24e99232-9434-457f-a9a0-69dd7ecf675f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/25f00ee3-8dfe-42d1-a67e-191fa5c3df4b.png +0 -0
- /kotonebot/kaa/sprites/67176e48-eaa5-46dd-bbaf-85b1b324ba48.png → /kaa/sprites/273b2d25-da0f-41f5-995c-b8d5533008fe.png +0 -0
- /kotonebot/kaa/sprites/835e3ad1-8f73-4e2e-bdd5-9a5fb866858f.png → /kaa/sprites/291c1c6e-9e3c-440d-98f9-dfe2c27ce751.png +0 -0
- /kotonebot/kaa/sprites/fe0a26ac-906c-4809-9de5-43cb4a467a9d.png → /kaa/sprites/2ae53e6d-f9e1-4d14-b6bf-637a36ab9fc7.png +0 -0
- {kotonebot/kaa → kaa}/sprites/2bd6fe88-99fa-443d-8e42-bb3de5881213.png +0 -0
- {kotonebot/kaa → kaa}/sprites/2ededcf5-1d80-4e2a-9c83-2a31998331ce.png +0 -0
- /kotonebot/kaa/sprites/f1fcc488-584d-4c61-8489-8b1b539151a9.png → /kaa/sprites/2ee4c3a8-c412-4734-ab52-88521e751f9a.png +0 -0
- /kotonebot/kaa/sprites/fbba87fb-50e5-4c2f-9218-82f1ffb7a5ba.png → /kaa/sprites/2f39035d-7e56-43ce-ade1-000ac6632cd7.png +0 -0
- {kotonebot/kaa → kaa}/sprites/303cccc1-c674-4d3a-8c89-19ea729fdbef.png +0 -0
- {kotonebot/kaa → kaa}/sprites/30a6f399-6999-4f04-bb77-651e0214112f.png +0 -0
- /kotonebot/kaa/sprites/824c9efd-21ea-4e26-a1fa-9e909d8b98d6.png → /kaa/sprites/336cd0be-5f48-4286-b6e4-820ef8ba55dd.png +0 -0
- /kotonebot/kaa/sprites/981e63c5-d615-44dd-9ad6-60f6b415cdaf.png → /kaa/sprites/33e3097a-50ed-4b1f-a806-f765eefba6e8.png +0 -0
- /kotonebot/kaa/sprites/01106370-2321-4696-a60e-dc76b565a097.png → /kaa/sprites/372bf1ba-8a61-4893-9ec1-336826d78464.png +0 -0
- /kotonebot/kaa/sprites/b53035c7-43a6-4d83-a51c-dd6b7cd14a1e.png → /kaa/sprites/3823cd03-e50a-45ee-bd9f-627d5d41ae82.png +0 -0
- {kotonebot/kaa → kaa}/sprites/3942ae40-7f22-412c-aebe-4b064f68db9b.png +0 -0
- /kotonebot/kaa/sprites/1e324ce8-b56f-45d5-9476-713dabfdecf9.png → /kaa/sprites/3ae23a66-efd4-4c21-83f7-aa0b2f045a50.png +0 -0
- {kotonebot/kaa → kaa}/sprites/3b473fe6-e147-477f-b088-9b8fb042a4f6.png +0 -0
- {kotonebot/kaa → kaa}/sprites/3c8b477a-8eda-407e-9e9f-7540c8808f89.png +0 -0
- {kotonebot/kaa → kaa}/sprites/3f637e86-6b74-4693-9131-1fe411fc21e5.png +0 -0
- /kotonebot/kaa/sprites/848c8b04-c953-473d-94b1-2a2d5cdbd9c4.png → /kaa/sprites/3f838a2c-a020-4a3e-a9c0-551132d057a2.png +0 -0
- /kotonebot/kaa/sprites/3de9bd37-90ef-45ec-88c0-03c4fd50fb51.png → /kaa/sprites/3fba6323-e557-4920-9548-f26b75a351c5.png +0 -0
- {kotonebot/kaa → kaa}/sprites/4096cffa-a889-4622-852e-760fc7022d93.png +0 -0
- /kotonebot/kaa/sprites/76a65fb7-4429-4288-a164-bd121974ee6b.png → /kaa/sprites/42c2b7b0-1d6f-420e-abfc-076763638275.png +0 -0
- /kotonebot/kaa/sprites/53d082f9-9cac-4ca0-b166-3a3599c4f757.png → /kaa/sprites/42d5c5fb-2600-41e5-9480-2796b6d631d6.png +0 -0
- /kotonebot/kaa/sprites/78a12e3b-ac32-4e96-8998-30f92318a36b.png → /kaa/sprites/42e2b5df-19dd-493d-8739-4c2ad596331b.png +0 -0
- {kotonebot/kaa → kaa}/sprites/447d0e44-5d87-4b7c-8e60-edb111fe1639.png +0 -0
- /kotonebot/kaa/sprites/d3bfc1c2-a202-42c2-9e19-61b949a340c7.png → /kaa/sprites/4484618e-b4e4-4f8d-9c10-d32c4809c528.png +0 -0
- {kotonebot/kaa → kaa}/sprites/44ba8515-4a60-42c9-8878-b42e4e34ee15.png +0 -0
- /kotonebot/kaa/sprites/23b37aad-1de3-43e2-84e6-78f6f0f28fba.png → /kaa/sprites/44f1d955-dbe5-48ff-887a-c720578a39e7.png +0 -0
- {kotonebot/kaa → kaa}/sprites/4503db6b-7224-4b81-9971-e7cfa56e10f2.png +0 -0
- /kotonebot/kaa/sprites/bd101208-a87c-405c-987a-d46e1b6f0358.png → /kaa/sprites/46049707-af5d-4dcd-9620-6a20eb8748e7.png +0 -0
- {kotonebot/kaa → kaa}/sprites/4695f96b-c4f5-4bb6-a021-a13b6ceb2883.png +0 -0
- {kotonebot/kaa → kaa}/sprites/4883c564-f950-4a29-9f5f-6f924123cd22.png +0 -0
- /kotonebot/kaa/sprites/6e9ef52c-937f-47f1-9687-899a528d7599.png → /kaa/sprites/4a43008e-f6ff-4302-99f6-77b9e082e64d.png +0 -0
- /kotonebot/kaa/sprites/24458a04-ca4d-4330-9dd6-f074feac9a17.png → /kaa/sprites/4ab6a7b3-fb00-42e6-8535-e2be8bc6f92b.png +0 -0
- /kotonebot/kaa/sprites/003c315c-418c-410e-ba45-290150097a25.png → /kaa/sprites/4c84d3da-5086-43a1-b820-53c19a90c533.png +0 -0
- /kotonebot/kaa/sprites/ac02de52-42fa-4767-81f8-97fbac3bd8a0.png → /kaa/sprites/4c99205c-6787-463f-ae4d-bb1951c79686.png +0 -0
- /kotonebot/kaa/sprites/5aac4900-ccd2-4a72-9135-0804fe14e6e2.png → /kaa/sprites/4d6d0a7e-d006-4233-b4de-9024c4b08ce8.png +0 -0
- {kotonebot/kaa → kaa}/sprites/4d78add6-1027-4939-bb51-f99fca7db2ce.png +0 -0
- /kotonebot/kaa/sprites/98a8e860-39cf-416c-b435-64a33579c6e8.png → /kaa/sprites/4e83a559-b52d-4369-8def-e2af428a8638.png +0 -0
- /kotonebot/kaa/sprites/26262f2d-e12b-4992-8c14-15679cae4298.png → /kaa/sprites/4f020d14-f2b0-4d6b-b6f7-4be27932517e.png +0 -0
- /kotonebot/kaa/sprites/a0ddc404-a653-4d76-842f-faf7f93851ed.png → /kaa/sprites/5011f0a8-bb49-44ec-be4e-afbf7c4d5431.png +0 -0
- {kotonebot/kaa → kaa}/sprites/5031808b-5525-4118-92b4-317ec8bda985.png +0 -0
- {kotonebot/kaa → kaa}/sprites/50e23c8a-7ba2-4c9c-9cfb-196c260fa1d5.png +0 -0
- /kotonebot/kaa/sprites/0c2a1e9f-85be-4fec-a8ae-4e417c58d5a5.png → /kaa/sprites/512a1801-f3ff-4204-9ccb-90af00c90ff1.png +0 -0
- /kotonebot/kaa/sprites/66eee7a5-3d0e-430f-850b-7fff14b3671f.png → /kaa/sprites/518b81e0-0ba6-4b63-a73f-07dccb3b5cc6.png +0 -0
- {kotonebot/kaa → kaa}/sprites/55f7db71-0a18-4b3d-b847-57959b8d2e32.png +0 -0
- /kotonebot/kaa/sprites/d7e25596-8452-4eb3-aaa8-5997be3dd851.png → /kaa/sprites/56e88b0b-d73e-4304-ab7d-6865feb66dd3.png +0 -0
- /kotonebot/kaa/sprites/a1087827-1065-4f35-b04f-854ddf2d7e70.png → /kaa/sprites/579de834-fb1d-4cb9-801c-6885de92a290.png +0 -0
- {kotonebot/kaa → kaa}/sprites/582d36c0-0916-4706-9833-4fbc026701f5.png +0 -0
- /kotonebot/kaa/sprites/5d51ee71-a2fb-414a-ab48-c5d3c1a3b945.png → /kaa/sprites/59c4ab1b-494e-4ac1-b21a-c6364bf7ae8a.png +0 -0
- /kotonebot/kaa/sprites/b54343ba-8b17-4d72-b379-805ae3062d86.png → /kaa/sprites/5a0f1984-2dad-424c-aa7d-a83c7d8c3c8d.png +0 -0
- /kotonebot/kaa/sprites/279ab0e2-1601-4bfb-8d27-4019fc4dcd3d.png → /kaa/sprites/5aa3920c-12ae-4678-8509-da660b4173de.png +0 -0
- /kotonebot/kaa/sprites/24d55c2b-dfe8-4a80-9f39-94045478f5a5.png → /kaa/sprites/5bf12674-852b-4d9c-b065-886b8a29b3b8.png +0 -0
- {kotonebot/kaa → kaa}/sprites/5d36b880-7b3f-49b1-a018-7de59867d376.png +0 -0
- /kotonebot/kaa/sprites/d37153d2-f699-4608-abbf-43d6bd8b1469.png → /kaa/sprites/5d8f949c-e68d-44e6-a798-43b3f7f76db6.png +0 -0
- {kotonebot/kaa → kaa}/sprites/5ebcde3b-f0fd-4e5d-b3de-ada8f0b5e03b.png +0 -0
- /kotonebot/kaa/sprites/f62bfba7-3d6b-4bdd-9821-ca8370ee2ff4.png → /kaa/sprites/5fa8ba1e-5c58-4a39-b389-4c0d3d60c313.png +0 -0
- /kotonebot/kaa/sprites/23f8844e-9272-4a5c-badf-a30676fd22da.png → /kaa/sprites/608f1b36-9c20-4c25-9881-7ef3579cabaa.png +0 -0
- /kotonebot/kaa/sprites/e857f00d-81bd-4fbc-9043-c9252a075da3.png → /kaa/sprites/65291397-50c3-4b7b-8630-ab530f445bdb.png +0 -0
- /kotonebot/kaa/sprites/0ffd0b92-78f6-4661-a2c3-3c337b75d3bb.png → /kaa/sprites/662dadc7-04d2-48be-824e-c7b1d3719676.png +0 -0
- /kotonebot/kaa/sprites/0d39671a-cfa3-4832-93e8-6ab61cece799.png → /kaa/sprites/67664fe3-0300-4b56-844c-1bbf0bfac3da.png +0 -0
- /kotonebot/kaa/sprites/e8407109-ffa8-496b-a499-e78db90db540.png → /kaa/sprites/68b0d741-f1c2-4c29-bd06-85468ed4ff87.png +0 -0
- /kotonebot/kaa/sprites/c542ba3e-e0c0-41a1-8cc7-dd7454b12400.png → /kaa/sprites/69412d23-7c85-4717-a0c6-1f7826d9cbb2.png +0 -0
- {kotonebot/kaa → kaa}/sprites/6b58d90d-2e5e-4b7f-bc01-941f2633de89.png +0 -0
- {kotonebot/kaa → kaa}/sprites/6cd80be8-c9b3-4ba5-bf17-3ffc9b000743.png +0 -0
- /kotonebot/kaa/sprites/634b1421-7f65-452c-a4e2-e40a5028938a.png → /kaa/sprites/6d6b7b99-ad18-4e5d-bdc3-dac225752eb7.png +0 -0
- /kotonebot/kaa/sprites/d5c4ef47-257f-49a2-81e3-ba7ab6fa0f62.png → /kaa/sprites/6dffeb89-24ff-4d56-a059-367cd0a16a48.png +0 -0
- /kotonebot/kaa/sprites/c41567a3-84bf-4e71-9eb1-f577c0348215.png → /kaa/sprites/6f499758-a73a-476f-93b5-d422dbc965c3.png +0 -0
- /kotonebot/kaa/sprites/7516da41-7cbf-4c18-8630-3baecc225764.png → /kaa/sprites/6fd65854-70c0-4ef7-ad6d-5f576c2ce0d2.png +0 -0
- {kotonebot/kaa → kaa}/sprites/70898bf8-56c5-4f84-becb-629c9ab6a7da.png +0 -0
- /kotonebot/kaa/sprites/6774c674-5100-4422-a82b-deb9bd5d49ee.png → /kaa/sprites/7373803b-3557-4c6b-9b9b-fdb191af3286.png +0 -0
- {kotonebot/kaa → kaa}/sprites/74ec3510-583d-4a76-ac69-38480fbf1387.png +0 -0
- /kotonebot/kaa/sprites/4b595d09-a5ed-47d6-9c7b-e471792db801.png → /kaa/sprites/75684858-63a9-4b26-a175-67c6648d9bbe.png +0 -0
- /kotonebot/kaa/sprites/75f0339c-9acf-4971-a3c2-e302f56b1f93.png → /kaa/sprites/783ebf90-f6d7-419b-81e2-19787425682e.png +0 -0
- {kotonebot/kaa → kaa}/sprites/79abd239-5eed-4195-9fa8-d729daa874ca.png +0 -0
- /kotonebot/kaa/sprites/db4ca499-5cd3-4332-b232-28ddbedd4741.png → /kaa/sprites/7ed170b5-d1ec-47ed-b4e1-000c7da241a3.png +0 -0
- {kotonebot/kaa → kaa}/sprites/81c97cd3-df53-44d3-bf3d-1eb4dc67b62a.png +0 -0
- /kotonebot/kaa/sprites/5c926d27-63c7-466f-9e34-65144153e0d2.png → /kaa/sprites/830691ea-cf58-4429-ab54-32414583a4ee.png +0 -0
- {kotonebot/kaa → kaa}/sprites/835489e2-b29b-426c-b4c9-3bb9f8eb6195.png +0 -0
- /kotonebot/kaa/sprites/156cb3bd-0523-4a76-8747-8d4ce23fed7b.png → /kaa/sprites/8357bf4e-80aa-4a33-a874-3d7c1b47d452.png +0 -0
- {kotonebot/kaa → kaa}/sprites/83d0a033-466c-463a-bb8c-be0f2953e9b2.png +0 -0
- {kotonebot/kaa → kaa}/sprites/8424ecdd-8857-4764-9fd0-d4bfa440c128.png +0 -0
- /kotonebot/kaa/sprites/23a39277-a6ac-4a49-9c6a-1fca1a3a4d9b.png → /kaa/sprites/8780a0c9-d947-4ce3-924a-59d378b2d08a.png +0 -0
- /kotonebot/kaa/sprites/7d817b98-53ff-491c-b608-b07a0c143009.png → /kaa/sprites/897358a6-6569-4643-8b60-77047287577d.png +0 -0
- /kotonebot/kaa/sprites/46198a1d-888e-4a12-827e-51cdd4fc30a2.png → /kaa/sprites/89b14f97-894e-45b2-968c-97f28b833c73.png +0 -0
- {kotonebot/kaa → kaa}/sprites/8c179a21-be6f-4db8-a9b0-9afeb5c36b1c.png +0 -0
- {kotonebot/kaa → kaa}/sprites/8ded6c98-85ea-4858-a66d-4fc8caecb7c5.png +0 -0
- {kotonebot/kaa → kaa}/sprites/8f8b7b46-53bb-42ab-907a-4ea87eb09ab4.png +0 -0
- {kotonebot/kaa → kaa}/sprites/921eefeb-730e-46fc-9924-d338fb286592.png +0 -0
- /kotonebot/kaa/sprites/9a7f06a5-448b-4410-84fa-0a4c938620f7.png → /kaa/sprites/92ed005c-291c-425e-ab0f-455be98ef149.png +0 -0
- /kotonebot/kaa/sprites/a99307de-c12f-4cf5-921b-b80bf03bbac3.png → /kaa/sprites/93133c4d-39e6-4ead-a6ce-3ea6303066b0.png +0 -0
- {kotonebot/kaa → kaa}/sprites/9340b854-025c-40da-9387-385d38433bef.png +0 -0
- {kotonebot/kaa → kaa}/sprites/9483fae5-3a72-4684-9403-d25d2c602d3d.png +0 -0
- /kotonebot/kaa/sprites/a4b50bf5-7dfe-4bbb-8bd7-528c9147b71e.png → /kaa/sprites/97a1cef5-7240-4456-a1c7-09a7c8edd8fd.png +0 -0
- /kotonebot/kaa/sprites/d7ceaf00-e488-4273-968c-315962bf4837.png → /kaa/sprites/97b1f9c2-3899-49a7-b23d-8e422beaf0ca.png +0 -0
- /kotonebot/kaa/sprites/f7084b2c-5411-4180-9404-377240af1857.png → /kaa/sprites/99023408-1bb5-43ad-8c70-3a10761d9956.png +0 -0
- /kotonebot/kaa/sprites/8e7b53fd-d962-43b7-a203-3d480c649c83.png → /kaa/sprites/99276e06-774a-4ddb-b6a1-4fa827ae1997.png +0 -0
- /kotonebot/kaa/sprites/d5ad9b97-3175-4c49-a1f7-5da663125af3.png → /kaa/sprites/9a34ecf2-75f6-4fc6-9214-e27bb7be4b89.png +0 -0
- /kotonebot/kaa/sprites/1b39e16c-d8e2-4f4c-bc6d-a4511184f8af.png → /kaa/sprites/9b12235d-baf7-4a76-9fd3-c9a5da9e9dc7.png +0 -0
- /kotonebot/kaa/sprites/8e6b9237-f94a-4e21-9b2c-45e3d4833b6d.png → /kaa/sprites/9b5a6710-1a7b-44b0-ad36-7f1d1b62c014.png +0 -0
- /kotonebot/kaa/sprites/92c1a9ba-994b-4635-b1b6-1fa157f227f6.png → /kaa/sprites/9e86ada7-3094-49a2-9704-86af78aaeaa8.png +0 -0
- {kotonebot/kaa → kaa}/sprites/9fd0753f-c607-4d49-82d1-40bda27e014f.png +0 -0
- {kotonebot/interop/win → kaa/sprites}/__init__.py +0 -0
- {kotonebot/kaa → kaa}/sprites/a0bd6a5f-784d-4f0a-9d66-10f4b80c8d3e.png +0 -0
- {kotonebot/kaa → kaa}/sprites/a1df3af1-a3e7-4521-a085-e4dc3cd1cc57.png +0 -0
- /kotonebot/kaa/sprites/4e284d43-9d58-4afa-be66-b61825ef2be3.png → /kaa/sprites/a1fec50c-8fcc-4fe2-8968-9253489d90db.png +0 -0
- {kotonebot/kaa → kaa}/sprites/a48324ae-7c1a-489e-b3c4-93d12267f88d.png +0 -0
- /kotonebot/kaa/sprites/11c5034e-d258-422d-850c-a4495b346778.png → /kaa/sprites/a6a411ed-fbb0-4814-808d-5719cccd93bf.png +0 -0
- /kotonebot/kaa/sprites/71bbe862-b9f7-47ab-b4f1-f0b87732bd39.png → /kaa/sprites/a92a8ca8-b166-45c7-9508-d9e2955305ee.png +0 -0
- /kotonebot/kaa/sprites/7cddb93a-175c-4875-a2fb-136cdfc365a7.png → /kaa/sprites/a9fbfe75-ee6f-46a4-81a5-81bf465d4bb0.png +0 -0
- {kotonebot/kaa → kaa}/sprites/a9fcaf04-0c1f-4b0f-bb5b-ede9da96180f.png +0 -0
- /kotonebot/kaa/sprites/1d25aa70-8137-4c63-8dcf-a5b5a8f950e6.png → /kaa/sprites/ab8a2dfe-01e8-408b-896a-b948823bbc03.png +0 -0
- /kotonebot/kaa/sprites/112f47b8-e71f-426f-9081-0c8efb6ced72.png → /kaa/sprites/ac9e9295-1063-4c39-aa8a-4b033c89dd3c.png +0 -0
- {kotonebot/kaa → kaa}/sprites/adc533a7-970b-4c5b-a037-2181531a35d6.png +0 -0
- {kotonebot/kaa → kaa}/sprites/ae9fe233-9acc-4e96-ba8e-1fb1d9bc2ea5.png +0 -0
- {kotonebot/kaa → kaa}/sprites/b0283997-7931-476d-a92f-d7569f6ea34c.png +0 -0
- /kotonebot/kaa/sprites/37d24544-1791-474d-8f74-b1dbe0dd3c6b.png → /kaa/sprites/b1ac9ebe-d393-4c8a-9282-e1334f2835f6.png +0 -0
- /kotonebot/kaa/sprites/9cdd7af5-0e25-4226-8c7b-93c8c633c27b.png → /kaa/sprites/b1b0f042-0e4b-42c9-ab6f-b5e9ab3afcaf.png +0 -0
- {kotonebot/kaa → kaa}/sprites/b2af59e9-60e3-4d97-8c72-c7ba092113a3.png +0 -0
- {kotonebot/kaa → kaa}/sprites/b2e1bf3c-2c36-4fb5-9db7-c10a29563a37.png +0 -0
- /kotonebot/kaa/sprites/0519d61c-0451-42a2-96ed-baa5ef026655.png → /kaa/sprites/b4576ed5-6e78-430d-b977-82f9030b70bd.png +0 -0
- {kotonebot/kaa → kaa}/sprites/b62bf889-da3c-495a-8707-f3bde73efe92.png +0 -0
- {kotonebot/kaa → kaa}/sprites/b6b94f21-ef4b-4425-9c7e-ca2b574b0add.png +0 -0
- /kotonebot/kaa/sprites/a3f07286-a699-4f5c-9912-835b3781b4f7.png → /kaa/sprites/b74a9b0a-daad-4d2e-920e-5a6f2b15e67e.png +0 -0
- /kotonebot/kaa/sprites/16d914f3-c3be-479e-932a-4c336c08b94e.png → /kaa/sprites/b9f51636-7f8e-4297-991f-b686d105c97b.png +0 -0
- {kotonebot/kaa → kaa}/sprites/bab6c393-692c-4681-ac0d-76c0d9dabea6.png +0 -0
- /kotonebot/kaa/sprites/8498ac20-4ec2-474b-961f-cbf488da9a23.png → /kaa/sprites/bb384d8c-4b92-402a-a89e-ec5e1b9203ea.png +0 -0
- /kotonebot/kaa/sprites/a8aacbc9-1238-414c-b1e6-5ea1a01407c2.png → /kaa/sprites/bb3b7c29-f31e-42c1-8f1a-6ec95e766592.png +0 -0
- /kotonebot/kaa/sprites/6588da9e-a9b5-4313-9f67-e03f213f3fa4.png → /kaa/sprites/bb7cab97-c1bc-498d-af71-535769f1f4b0.png +0 -0
- {kotonebot/kaa → kaa}/sprites/bc7155ac-18c9-4335-9ec2-c8762d37a057.png +0 -0
- /kotonebot/kaa/sprites/84795df2-e6d9-40fb-aef5-98fbf9c17399.png → /kaa/sprites/c1788160-27ba-4faa-9fb3-3d07e07bad82.png +0 -0
- /kotonebot/kaa/sprites/88d89e04-2242-4ed7-be23-edd6535121ac.png → /kaa/sprites/c2cf69b5-f4e5-4f7f-a406-880ff11e5f4d.png +0 -0
- {kotonebot/kaa → kaa}/sprites/c3f536d6-a04a-4651-b3f9-dd2c22593f7f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/c5b7d67e-7260-4f08-a0e9-4d31ce9bbecf.png +0 -0
- /kotonebot/kaa/sprites/e0effef4-869d-4a0c-8db3-1c41cd255555.png → /kaa/sprites/c614fecb-c6b6-492c-8c58-9e8ba05f43cb.png +0 -0
- {kotonebot/kaa → kaa}/sprites/c78c38cc-7b61-4dc4-820d-0a5b684ef52e.png +0 -0
- /kotonebot/kaa/sprites/91e2c2d3-b629-4c49-97d5-ed99dada3243.png → /kaa/sprites/c7ed0a32-b15d-4fdd-a0a4-4be756619c78.png +0 -0
- {kotonebot/kaa → kaa}/sprites/c948f136-416f-447e-8152-54a1cd1d1329.png +0 -0
- {kotonebot/kaa → kaa}/sprites/c954e153-d3e9-4488-869f-d00cfdfac5ee.png +0 -0
- /kotonebot/kaa/sprites/86db7d47-f634-4be4-b9e2-371e7868aded.png → /kaa/sprites/ca42efda-8bd8-416e-9f0c-d54c6af990bf.png +0 -0
- {kotonebot/kaa → kaa}/sprites/cb3d0ca7-8d14-408a-a2f5-2e25f7b86d6c.png +0 -0
- {kotonebot/kaa → kaa}/sprites/cbf4ce9c-f8d8-4fb7-a197-15bb9847df04.png +0 -0
- {kotonebot/kaa → kaa}/sprites/cc60b509-2ed5-493d-bb9f-333c6d2a6006.png +0 -0
- {kotonebot/kaa → kaa}/sprites/cc8a495d-330d-447d-8a80-a8a6ecc409c5.png +0 -0
- {kotonebot/kaa → kaa}/sprites/ccbcb114-7f73-43d1-904a-3a7ae660c531.png +0 -0
- {kotonebot/kaa → kaa}/sprites/ce1d1d6f-38f2-48bf-98bd-6e091c7ca5b8.png +0 -0
- {kotonebot/kaa → kaa}/sprites/ce20a856-5629-4f8e-a8e1-d1bd14e18e4f.png +0 -0
- /kotonebot/kaa/sprites/c6649b6a-7d03-454c-902b-7462092878df.png → /kaa/sprites/ce279078-fd78-4551-9aef-551bf0bcd012.png +0 -0
- {kotonebot/kaa → kaa}/sprites/cfc9c8e8-cbe1-49f0-9afa-ead7f9455a2e.png +0 -0
- /kotonebot/kaa/sprites/fc7e4b97-0d87-4de9-b7ac-87ca670b6ff2.png → /kaa/sprites/cfd5b23c-f823-4551-8986-385a6d08ac4f.png +0 -0
- /kotonebot/kaa/sprites/9a275932-f760-4373-ab27-86c5caf19136.png → /kaa/sprites/d0befb58-59f3-4956-af23-bacd9395f161.png +0 -0
- {kotonebot/kaa → kaa}/sprites/d271a24f-efe8-424d-8fd5-f6b3756ba4ca.png +0 -0
- /kotonebot/kaa/sprites/50f138f4-7500-42c1-8121-2f03703d8f8f.png → /kaa/sprites/d2eb65a1-738c-4e3b-bc61-78ec078632fe.png +0 -0
- {kotonebot/kaa → kaa}/sprites/d3424d31-0502-4623-996e-f0194e5085ce.png +0 -0
- /kotonebot/kaa/sprites/12d59cc0-cef6-472d-b424-edaae52463ca.png → /kaa/sprites/d3a6ddfd-5bb3-47ef-a022-1024d5c3ecf2.png +0 -0
- {kotonebot/kaa → kaa}/sprites/d3cc3323-51af-4882-ae12-49e7384b746d.png +0 -0
- /kotonebot/kaa/sprites/aee9d67f-d6be-4cf5-9c30-331f6d5f0f84.png → /kaa/sprites/d605f177-46dc-43e2-9e3f-dc5ceb4bd729.png +0 -0
- /kotonebot/kaa/sprites/783cbcad-eefc-4a04-910e-9ff4288d3c18.png → /kaa/sprites/d60da1fc-f6cb-4d60-8eee-cb51284b6051.png +0 -0
- {kotonebot/kaa → kaa}/sprites/d6b64759-26b7-45b1-bf8e-5c0d98611e0d.png +0 -0
- /kotonebot/kaa/sprites/2b3a82fd-79b3-400c-988a-248a7b277542.png → /kaa/sprites/d73318df-f20e-4a3f-b63a-af4abdc33c9f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/d7667903-7149-4f2f-9c15-d8a4b5f4d347.png +0 -0
- {kotonebot/kaa → kaa}/sprites/d83f338d-dde3-494b-9bea-cae511e3517c.png +0 -0
- /kotonebot/kaa/sprites/e872aa76-2947-4209-abd7-5ecb56fdc9d6.png → /kaa/sprites/d8e422b6-830e-47a7-a2db-b63e17a21d51.png +0 -0
- {kotonebot/kaa → kaa}/sprites/d982d2b5-4bc0-4ae9-a516-f29c2848d64b.png +0 -0
- {kotonebot/kaa → kaa}/sprites/da439e8c-3b74-4371-9657-0736d826c7d1.png +0 -0
- {kotonebot/kaa → kaa}/sprites/daf3d823-b7f1-4584-acf3-90b9d880332c.png +0 -0
- {kotonebot/kaa → kaa}/sprites/db7d3f03-1f7f-43bf-8125-f7c2d345fca2.png +0 -0
- /kotonebot/kaa/sprites/4af83157-f237-4072-a732-1e59814485e7.png → /kaa/sprites/dcc75592-c284-4e22-a229-600c1b30aa68.png +0 -0
- /kotonebot/kaa/sprites/246f9799-5367-4fb4-877d-821fb4acad71.png → /kaa/sprites/dd9108fb-d251-4cc1-a0e7-3dae7362b7f6.png +0 -0
- {kotonebot/kaa → kaa}/sprites/de325534-3fd3-480a-9eb8-eb47960a753a.png +0 -0
- /kotonebot/kaa/sprites/704bf40a-4125-4260-9dd7-fa8ac13f00df.png → /kaa/sprites/de80639f-e431-426b-b37d-306045f49fa9.png +0 -0
- {kotonebot/kaa → kaa}/sprites/df991b42-ed8e-4f2c-bf0c-aa7522f147b6.png +0 -0
- /kotonebot/kaa/sprites/2704de68-4349-4695-8102-4dcd93fe82c7.png → /kaa/sprites/dfb9a168-a243-4752-a76c-8c52afaa9c4b.png +0 -0
- /kotonebot/kaa/sprites/49587e50-e978-461f-b49c-7f92347923f5.png → /kaa/sprites/e4084dd2-3db9-4a16-893b-d18bb0b60b26.png +0 -0
- {kotonebot/kaa → kaa}/sprites/e4683def-8d1d-472b-a5ab-bb3885c0c98e.png +0 -0
- /kotonebot/kaa/sprites/8df4515c-ff60-432c-a624-ae3658bf7e0c.png → /kaa/sprites/e5a018d1-1def-4511-97fd-55f6bc10a60c.png +0 -0
- {kotonebot/kaa → kaa}/sprites/e5e84f9e-28da-4cf4-bcba-c9145fe39b07.png +0 -0
- /kotonebot/kaa/sprites/f7c7f2cf-337b-4dd6-a90b-7f5c452a1640.png → /kaa/sprites/e62a2b06-9aa5-43a3-8c5b-9de75957ad59.png +0 -0
- {kotonebot/kaa → kaa}/sprites/e6b45405-cd9f-4c6e-a9f1-6ec953747c65.png +0 -0
- /kotonebot/kaa/sprites/be2c3ab5-9d63-47bc-93f1-110b9668d5e2.png → /kaa/sprites/e7bc9fce-8b1a-4ce8-a812-0211c4d5558f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/e88c9ad1-ec37-4fcd-b086-862e1e7ce8fd.png +0 -0
- /kotonebot/kaa/sprites/8ed3f006-facb-4ba0-9034-24a3a7729012.png → /kaa/sprites/e8ca45b5-262b-40b7-8d2e-69e1e4d5c5a7.png +0 -0
- {kotonebot/kaa → kaa}/sprites/e9ee330d-dfca-440e-8b8c-0a3b4e8c8730.png +0 -0
- {kotonebot/kaa → kaa}/sprites/ea1ba124-9cb3-4427-969a-bacd47e7d920.png +0 -0
- /kotonebot/kaa/sprites/13338d14-2b0d-4630-a5d2-dc273f62524e.png → /kaa/sprites/ea9ff1a6-f8ae-4af3-bf12-5078fc51d87f.png +0 -0
- {kotonebot/kaa → kaa}/sprites/eaad330d-4e50-4b55-be2c-8da0f72764d9.png +0 -0
- {kotonebot/kaa → kaa}/sprites/eaba6ebe-f0df-4918-aee5-ef4e3ffedcf0.png +0 -0
- /kotonebot/kaa/sprites/1b82310e-8422-4be6-b31b-bc7693def4e4.png → /kaa/sprites/ec613742-5f1f-4001-82d3-26f8c3e25314.png +0 -0
- {kotonebot/kaa → kaa}/sprites/ee4e512b-4982-49b6-9c71-31984b58e1d0.png +0 -0
- /kotonebot/kaa/sprites/5479a383-3e75-4082-a118-fdae784228f4.png → /kaa/sprites/ee9ad821-991c-43d2-8947-f46016e2f534.png +0 -0
- {kotonebot/kaa → kaa}/sprites/eef25cf9-afd0-43b1-b9c5-fbd997bd5fe0.png +0 -0
- /kotonebot/kaa/sprites/564e9739-a90d-4c17-9d29-b3edb6aef1e9.png → /kaa/sprites/ef5fdf85-d2cc-42e6-bd14-c29042bcf72c.png +0 -0
- {kotonebot/kaa → kaa}/sprites/f1f21925-3e22-4dd1-b53b-bb52bcf26c2b.png +0 -0
- /kotonebot/kaa/sprites/c5127f24-fa81-4d61-876f-ac0a377bf00e.png → /kaa/sprites/f2248e03-41fb-486c-9d87-97b3acc0089a.png +0 -0
- /kotonebot/kaa/sprites/8cb9d744-6b49-452b-b0b6-e441446050ef.png → /kaa/sprites/f42771a1-460b-4636-b8e1-e38472bdda8b.png +0 -0
- {kotonebot/kaa → kaa}/sprites/f43c313b-8a7b-467b-8442-fc5bcb8b4388.png +0 -0
- {kotonebot/kaa → kaa}/sprites/f5c16d2f-ebc5-4617-9b96-971696af7c52.png +0 -0
- /kotonebot/kaa/sprites/8034f626-ae01-42c0-8f73-a3d1c9aaff5c.png → /kaa/sprites/f659d1b8-f2e2-43c2-9421-7af3b2cae001.png +0 -0
- {kotonebot/kaa → kaa}/sprites/f6ca6bd3-543f-4779-8367-c5c883f04b95.png +0 -0
- /kotonebot/kaa/sprites/105df024-ece9-4c9c-9479-9f7423f4abec.png → /kaa/sprites/f7051f86-9e8a-4a01-8e3e-23f8c092aa0d.png +0 -0
- /kotonebot/kaa/sprites/2ad65f0c-3b9c-46ad-808e-11c6d6db7417.png → /kaa/sprites/f8e38b5e-6820-423c-937c-27aff9cd528c.png +0 -0
- /kotonebot/kaa/sprites/cf5dcb2b-c5bd-4e38-a2bb-2673db821f79.png → /kaa/sprites/f9135063-fa0d-4ff0-8b37-d4c09dc28f18.png +0 -0
- /kotonebot/kaa/sprites/a4c42000-2421-4b02-b83e-60e1397304b0.png → /kaa/sprites/f9baa6dd-506a-4c2b-a3b7-a4dbff4f53ae.png +0 -0
- {kotonebot/kaa → kaa}/sprites/fad5eec2-5fd5-412f-9abb-987a3087dc54.png +0 -0
- /kotonebot/kaa/sprites/b94087df-db46-4ae3-bf93-8548a25a1a23.png → /kaa/sprites/fc044ce0-8456-401f-ace2-6c91b6e60b19.png +0 -0
- /kotonebot/kaa/sprites/b45b4340-65ce-49df-a265-9f3cd876fced.png → /kaa/sprites/febc5122-b2d3-4e63-a054-28de0e3eba05.png +0 -0
- {kotonebot/kaa → kaa/tasks}/__init__.py +0 -0
- {kotonebot/kaa/resources → kaa/tasks/actions}/__init__.py +0 -0
- {kotonebot/kaa → kaa}/tasks/clear_logs.py +0 -0
- {kotonebot/kaa/sprites → kaa/tasks/daily}/__init__.py +0 -0
- {kotonebot/kaa/tasks → kaa/tasks/produce}/__init__.py +0 -0
- {kotonebot/kaa → kaa}/util/trace.py +0 -0
- {ksaa-2025.9b1.dist-info → ksaa-2025.9b3.dist-info}/WHEEL +0 -0
- {ksaa-2025.9b1.dist-info → ksaa-2025.9b3.dist-info}/licenses/LICENSE +0 -0
kotonebot/kaa/main/gr.py
DELETED
|
@@ -1,2825 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import traceback
|
|
3
|
-
import zipfile
|
|
4
|
-
import logging
|
|
5
|
-
import copy
|
|
6
|
-
import sys
|
|
7
|
-
import subprocess
|
|
8
|
-
import json
|
|
9
|
-
from functools import partial
|
|
10
|
-
from itertools import chain
|
|
11
|
-
from datetime import datetime, timedelta
|
|
12
|
-
from typing import List, Dict, Tuple, Literal, Generator, Callable, Any, get_args, cast
|
|
13
|
-
|
|
14
|
-
import cv2
|
|
15
|
-
import gradio as gr
|
|
16
|
-
|
|
17
|
-
from kotonebot.kaa.errors import ProduceSolutionNotFoundError
|
|
18
|
-
from kotonebot.kaa.main import Kaa
|
|
19
|
-
from kotonebot.kaa.db import IdolCard
|
|
20
|
-
from kotonebot.backend.context.context import vars
|
|
21
|
-
from kotonebot.errors import ContextNotInitializedError
|
|
22
|
-
from kotonebot.client.host import Mumu12Host, LeidianHost
|
|
23
|
-
from kotonebot.config.manager import load_config, save_config
|
|
24
|
-
from kotonebot.config.base_config import UserConfig, BackendConfig
|
|
25
|
-
from kotonebot.backend.context import task_registry, ContextStackVars
|
|
26
|
-
from kotonebot.kaa.config import (
|
|
27
|
-
BaseConfig, APShopItems, CapsuleToysConfig, ClubRewardConfig, PurchaseConfig, ActivityFundsConfig,
|
|
28
|
-
PresentsConfig, AssignmentConfig, ContestConfig, ProduceConfig,
|
|
29
|
-
MissionRewardConfig, DailyMoneyShopItems, ProduceAction,
|
|
30
|
-
RecommendCardDetectionMode, TraceConfig, StartGameConfig, EndGameConfig, UpgradeSupportCardConfig, MiscConfig,
|
|
31
|
-
IdleModeConfig,
|
|
32
|
-
)
|
|
33
|
-
from kotonebot.kaa.config.produce import ProduceSolution, ProduceSolutionManager, ProduceData
|
|
34
|
-
from kotonebot.kaa.application.adapter.misc_adapter import create_desktop_shortcut
|
|
35
|
-
from kotonebot.kaa.application.core.idle_mode import IdleModeManager
|
|
36
|
-
|
|
37
|
-
logger = logging.getLogger(__name__)
|
|
38
|
-
GradioInput = gr.Textbox | gr.Number | gr.Checkbox | gr.Dropdown | gr.Radio | gr.Slider | gr.Tabs | gr.Tab
|
|
39
|
-
ConfigKey = Literal[
|
|
40
|
-
# backend
|
|
41
|
-
'adb_ip', 'adb_port',
|
|
42
|
-
'screenshot_method', 'keep_screenshots',
|
|
43
|
-
'check_emulator', 'emulator_path',
|
|
44
|
-
'adb_emulator_name', 'emulator_args',
|
|
45
|
-
'_mumu_index', '_leidian_index',
|
|
46
|
-
'mumu_background_mode', 'target_screenshot_interval',
|
|
47
|
-
|
|
48
|
-
# purchase
|
|
49
|
-
'purchase_enabled',
|
|
50
|
-
'money_enabled', 'ap_enabled',
|
|
51
|
-
'ap_items', 'money_items', 'money_refresh',
|
|
52
|
-
|
|
53
|
-
# assignment
|
|
54
|
-
'assignment_enabled',
|
|
55
|
-
'mini_live_reassign', 'mini_live_duration',
|
|
56
|
-
'online_live_reassign', 'online_live_duration',
|
|
57
|
-
'contest_enabled',
|
|
58
|
-
'select_which_contestant', 'when_no_set',
|
|
59
|
-
|
|
60
|
-
# produce
|
|
61
|
-
'produce_enabled', 'selected_solution_id', 'produce_count',
|
|
62
|
-
'mission_reward_enabled',
|
|
63
|
-
|
|
64
|
-
# club reward
|
|
65
|
-
'club_reward_enabled',
|
|
66
|
-
'selected_note',
|
|
67
|
-
|
|
68
|
-
# upgrade support card
|
|
69
|
-
'upgrade_support_card_enabled',
|
|
70
|
-
|
|
71
|
-
# capsule toys
|
|
72
|
-
'capsule_toys_enabled', 'friend_capsule_toys_count',
|
|
73
|
-
'sense_capsule_toys_count', 'logic_capsule_toys_count',
|
|
74
|
-
'anomaly_capsule_toys_count',
|
|
75
|
-
|
|
76
|
-
# start game
|
|
77
|
-
'start_game_enabled', 'start_through_kuyo',
|
|
78
|
-
'game_package_name', 'kuyo_package_name',
|
|
79
|
-
'disable_gakumas_localify', 'dmm_game_path',
|
|
80
|
-
|
|
81
|
-
# end game
|
|
82
|
-
'exit_kaa', 'kill_game', 'kill_dmm',
|
|
83
|
-
'kill_emulator', 'shutdown', 'hibernate',
|
|
84
|
-
'restore_gakumas_localify',
|
|
85
|
-
|
|
86
|
-
'activity_funds',
|
|
87
|
-
'presents',
|
|
88
|
-
'mission_reward',
|
|
89
|
-
'activity_funds_enabled',
|
|
90
|
-
'presents_enabled',
|
|
91
|
-
'trace_recommend_card_detection',
|
|
92
|
-
|
|
93
|
-
# misc
|
|
94
|
-
'check_update', 'auto_install_update', 'expose_to_lan',
|
|
95
|
-
|
|
96
|
-
# idle
|
|
97
|
-
'idle_enabled', 'idle_seconds', 'idle_minimize_on_pause',
|
|
98
|
-
|
|
99
|
-
'_selected_backend_index'
|
|
100
|
-
|
|
101
|
-
]
|
|
102
|
-
CONFIG_KEY_VALUE: tuple[str] = get_args(ConfigKey)
|
|
103
|
-
ConfigSetFunction = Callable[[BaseConfig, Dict[ConfigKey, Any]], None]
|
|
104
|
-
ConfigBuilderReturnValue = Tuple[ConfigSetFunction, Dict[ConfigKey, GradioInput]]
|
|
105
|
-
|
|
106
|
-
def _save_bug_report(
|
|
107
|
-
title: str,
|
|
108
|
-
description: str,
|
|
109
|
-
version: str,
|
|
110
|
-
upload: bool,
|
|
111
|
-
path: str | None = None
|
|
112
|
-
) -> Generator[str, None, str]:
|
|
113
|
-
"""
|
|
114
|
-
保存报告
|
|
115
|
-
|
|
116
|
-
:param title: 标题
|
|
117
|
-
:param description: 描述
|
|
118
|
-
:param version: 版本号
|
|
119
|
-
:param upload: 是否上传
|
|
120
|
-
:param path: 保存的路径。若为 `None`,则保存到 `./reports/bug-YY-MM-DD HH-MM-SS_标题.zip`。
|
|
121
|
-
:return: 保存的路径
|
|
122
|
-
"""
|
|
123
|
-
from kotonebot import device
|
|
124
|
-
from kotonebot.backend.context import ContextStackVars
|
|
125
|
-
import re
|
|
126
|
-
|
|
127
|
-
# 过滤标题中的非法文件名字符
|
|
128
|
-
def sanitize_filename(s: str) -> str:
|
|
129
|
-
# 替换 \/:*?"<>| 为空或下划线
|
|
130
|
-
return re.sub(r'[\\/:*?"<>|]', '_', s)
|
|
131
|
-
|
|
132
|
-
# 确保目录存在
|
|
133
|
-
os.makedirs('logs', exist_ok=True)
|
|
134
|
-
os.makedirs('reports', exist_ok=True)
|
|
135
|
-
|
|
136
|
-
error = ""
|
|
137
|
-
if path is None:
|
|
138
|
-
safe_title = sanitize_filename(title)[:30] or "无标题"
|
|
139
|
-
timestamp = datetime.now().strftime("%y-%m-%d-%H-%M-%S")
|
|
140
|
-
path = f'./reports/bug_{timestamp}_{safe_title}.zip'
|
|
141
|
-
with zipfile.ZipFile(path, 'w', zipfile.ZIP_DEFLATED, compresslevel=9) as zipf:
|
|
142
|
-
# 打包描述文件
|
|
143
|
-
yield "### 打包描述文件..."
|
|
144
|
-
try:
|
|
145
|
-
description_content = f"标题:{title}\n类型:bug\n内容:\n{description}"
|
|
146
|
-
zipf.writestr('description.txt', description_content.encode('utf-8'))
|
|
147
|
-
except Exception as e:
|
|
148
|
-
error += f"保存描述文件失败:{str(e)}\n"
|
|
149
|
-
|
|
150
|
-
# 打包截图
|
|
151
|
-
yield "### 打包上次截图..."
|
|
152
|
-
try:
|
|
153
|
-
stack = ContextStackVars.current()
|
|
154
|
-
screenshot = None
|
|
155
|
-
if stack is not None:
|
|
156
|
-
screenshot = stack._screenshot
|
|
157
|
-
if screenshot is not None:
|
|
158
|
-
img = cv2.imencode('.png', screenshot)[1].tobytes()
|
|
159
|
-
zipf.writestr('last_screenshot.png', img)
|
|
160
|
-
if screenshot is None:
|
|
161
|
-
error += "无上次截图数据\n"
|
|
162
|
-
except Exception as e:
|
|
163
|
-
error += f"保存上次截图失败:{str(e)}\n"
|
|
164
|
-
|
|
165
|
-
# 打包当前截图
|
|
166
|
-
yield "### 打包当前截图..."
|
|
167
|
-
try:
|
|
168
|
-
screenshot = device.screenshot()
|
|
169
|
-
img = cv2.imencode('.png', screenshot)[1].tobytes()
|
|
170
|
-
zipf.writestr('current_screenshot.png', img)
|
|
171
|
-
except Exception as e:
|
|
172
|
-
error += f"保存当前截图失败:{str(e)}\n"
|
|
173
|
-
|
|
174
|
-
# 打包配置文件
|
|
175
|
-
yield "### 打包配置文件..."
|
|
176
|
-
try:
|
|
177
|
-
with open('config.json', 'r', encoding='utf-8') as f:
|
|
178
|
-
zipf.writestr('config.json', f.read())
|
|
179
|
-
except Exception as e:
|
|
180
|
-
error += f"保存配置文件失败:{str(e)}\n"
|
|
181
|
-
|
|
182
|
-
# 打包 logs 文件夹
|
|
183
|
-
if os.path.exists('logs'):
|
|
184
|
-
for root, dirs, files in os.walk('logs'):
|
|
185
|
-
for file in files:
|
|
186
|
-
file_path = os.path.join(root, file)
|
|
187
|
-
arcname = os.path.join('logs', os.path.relpath(file_path, 'logs'))
|
|
188
|
-
zipf.write(file_path, arcname)
|
|
189
|
-
yield f"### 打包 log 文件:{arcname}"
|
|
190
|
-
|
|
191
|
-
# 打包 conf 文件夹
|
|
192
|
-
if os.path.exists('conf'):
|
|
193
|
-
for root, dirs, files in os.walk('conf'):
|
|
194
|
-
for file in files:
|
|
195
|
-
file_path = os.path.join(root, file)
|
|
196
|
-
arcname = os.path.join('conf', os.path.relpath(file_path, 'conf'))
|
|
197
|
-
zipf.write(file_path, arcname)
|
|
198
|
-
yield f"### 打包配置文件:{arcname}"
|
|
199
|
-
|
|
200
|
-
# 写出版本号
|
|
201
|
-
zipf.writestr('version.txt', version)
|
|
202
|
-
|
|
203
|
-
if not upload:
|
|
204
|
-
yield f"### 报告已保存至 {os.path.abspath(path)}"
|
|
205
|
-
return path
|
|
206
|
-
|
|
207
|
-
# 上传报告
|
|
208
|
-
from kotonebot.ui.file_host.sensio import upload as upload_file
|
|
209
|
-
yield "### 上传报告..."
|
|
210
|
-
url = ''
|
|
211
|
-
try:
|
|
212
|
-
url = upload_file(path)
|
|
213
|
-
except Exception as e:
|
|
214
|
-
yield f"### 上传报告失败:{str(e)}\n\n"
|
|
215
|
-
return ''
|
|
216
|
-
|
|
217
|
-
final_msg = f"### 报告导出成功:{url}\n\n"
|
|
218
|
-
expire_time = datetime.now() + timedelta(days=7)
|
|
219
|
-
if error:
|
|
220
|
-
final_msg += "### 但发生了以下错误\n\n"
|
|
221
|
-
final_msg += '\n* '.join(error.strip().split('\n'))
|
|
222
|
-
final_msg += '\n'
|
|
223
|
-
final_msg += f"### 此链接将于 {expire_time.strftime('%Y-%m-%d %H:%M:%S')}(7 天后)过期\n\n"
|
|
224
|
-
final_msg += '### 复制以上文本并反馈给开发者'
|
|
225
|
-
yield final_msg
|
|
226
|
-
return path
|
|
227
|
-
|
|
228
|
-
class KotoneBotUI:
|
|
229
|
-
def __init__(self, kaa: Kaa) -> None:
|
|
230
|
-
self.is_running: bool = False
|
|
231
|
-
self.single_task_running: bool = False
|
|
232
|
-
self.is_stopping: bool = False # 新增:标记是否正在停止过程中
|
|
233
|
-
self.is_single_task_stopping: bool = False # 新增:标记单个任务是否正在停止
|
|
234
|
-
self._kaa = kaa
|
|
235
|
-
self._load_config()
|
|
236
|
-
# IdleModeManager 空闲检测
|
|
237
|
-
def safe_get_is_running():
|
|
238
|
-
try:
|
|
239
|
-
return (self.is_running or self.single_task_running) and not self.is_stopping and not self.is_single_task_stopping and not vars.flow.is_paused
|
|
240
|
-
except ContextNotInitializedError:
|
|
241
|
-
return False
|
|
242
|
-
|
|
243
|
-
def safe_get_is_paused():
|
|
244
|
-
try:
|
|
245
|
-
return vars.flow.is_paused
|
|
246
|
-
except ContextNotInitializedError:
|
|
247
|
-
return False
|
|
248
|
-
|
|
249
|
-
self.idle_mgr = IdleModeManager(
|
|
250
|
-
get_is_running=safe_get_is_running,
|
|
251
|
-
get_is_paused=safe_get_is_paused,
|
|
252
|
-
get_config=lambda: self.current_config.options.idle,
|
|
253
|
-
)
|
|
254
|
-
self._setup_kaa()
|
|
255
|
-
|
|
256
|
-
def _setup_kaa(self) -> None:
|
|
257
|
-
from kotonebot.backend.debug.vars import debug, clear_saved
|
|
258
|
-
|
|
259
|
-
self._kaa.initialize()
|
|
260
|
-
if self.current_config.keep_screenshots:
|
|
261
|
-
debug.auto_save_to_folder = 'dumps'
|
|
262
|
-
debug.enabled = True
|
|
263
|
-
clear_saved()
|
|
264
|
-
else:
|
|
265
|
-
debug.auto_save_to_folder = None
|
|
266
|
-
debug.enabled = False
|
|
267
|
-
|
|
268
|
-
def export_dumps(self) -> str:
|
|
269
|
-
"""导出 dumps 文件夹为 zip 文件"""
|
|
270
|
-
if not os.path.exists('dumps'):
|
|
271
|
-
return "dumps 文件夹不存在"
|
|
272
|
-
|
|
273
|
-
timestamp = datetime.now().strftime('%y-%m-%d-%H-%M-%S')
|
|
274
|
-
zip_filename = f'dumps-{timestamp}.zip'
|
|
275
|
-
|
|
276
|
-
with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED, compresslevel=9) as zipf:
|
|
277
|
-
for root, dirs, files in os.walk('dumps'):
|
|
278
|
-
for file in files:
|
|
279
|
-
file_path = os.path.join(root, file)
|
|
280
|
-
arcname = os.path.relpath(file_path, 'dumps')
|
|
281
|
-
zipf.write(file_path, arcname)
|
|
282
|
-
|
|
283
|
-
return f"已导出到 {zip_filename}"
|
|
284
|
-
|
|
285
|
-
def export_logs(self) -> str:
|
|
286
|
-
"""导出 logs 文件夹为 zip 文件"""
|
|
287
|
-
if not os.path.exists('logs'):
|
|
288
|
-
return "logs 文件夹不存在"
|
|
289
|
-
|
|
290
|
-
timestamp = datetime.now().strftime('%y-%m-%d-%H-%M-%S')
|
|
291
|
-
zip_filename = f'logs-{timestamp}.zip'
|
|
292
|
-
|
|
293
|
-
with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED, compresslevel=9) as zipf:
|
|
294
|
-
for root, dirs, files in os.walk('logs'):
|
|
295
|
-
for file in files:
|
|
296
|
-
file_path = os.path.join(root, file)
|
|
297
|
-
arcname = os.path.relpath(file_path, 'logs')
|
|
298
|
-
zipf.write(file_path, arcname)
|
|
299
|
-
|
|
300
|
-
return f"已导出到 {zip_filename}"
|
|
301
|
-
|
|
302
|
-
def get_button_status(self) -> Tuple[str, bool]:
|
|
303
|
-
"""获取按钮状态和交互性"""
|
|
304
|
-
if not hasattr(self, 'run_status'):
|
|
305
|
-
return "启动", True
|
|
306
|
-
|
|
307
|
-
if not self.run_status.running:
|
|
308
|
-
self.is_running = False
|
|
309
|
-
self.is_stopping = False # 重置停止状态
|
|
310
|
-
return "启动", True
|
|
311
|
-
|
|
312
|
-
if self.is_stopping:
|
|
313
|
-
return "停止中...", False # 停止中时禁用按钮
|
|
314
|
-
|
|
315
|
-
return "停止", True
|
|
316
|
-
|
|
317
|
-
def update_task_status(self) -> List[List[str]]:
|
|
318
|
-
status_list: List[List[str]] = []
|
|
319
|
-
if not hasattr(self, 'run_status'):
|
|
320
|
-
for task_name, task in task_registry.items():
|
|
321
|
-
status_list.append([task.name, "等待中"])
|
|
322
|
-
return status_list
|
|
323
|
-
|
|
324
|
-
for task_status in self.run_status.tasks:
|
|
325
|
-
status_text = {
|
|
326
|
-
'pending': '等待中',
|
|
327
|
-
'running': '运行中',
|
|
328
|
-
'finished': '已完成',
|
|
329
|
-
'error': '出错',
|
|
330
|
-
'cancelled': '已取消'
|
|
331
|
-
}.get(task_status.status, '未知')
|
|
332
|
-
status_list.append([task_status.task.name, status_text])
|
|
333
|
-
return status_list
|
|
334
|
-
|
|
335
|
-
def toggle_run(self) -> Tuple[str, List[List[str]]]:
|
|
336
|
-
if not self.is_running:
|
|
337
|
-
return self.start_run()
|
|
338
|
-
|
|
339
|
-
# 如果正在停止过程中,忽略重复点击
|
|
340
|
-
if self.is_stopping:
|
|
341
|
-
return "停止中...", self.update_task_status()
|
|
342
|
-
|
|
343
|
-
return self.stop_run()
|
|
344
|
-
|
|
345
|
-
def start_run(self) -> Tuple[str, List[List[str]]]:
|
|
346
|
-
self.is_running = True
|
|
347
|
-
self.run_status = self._kaa.start_all()
|
|
348
|
-
# 通知 Idle 管理器进入运行态
|
|
349
|
-
self.idle_mgr.notify_on_start()
|
|
350
|
-
return "停止", self.update_task_status()
|
|
351
|
-
|
|
352
|
-
def stop_run(self) -> Tuple[str, List[List[str]]]:
|
|
353
|
-
self.is_stopping = True # 设置停止状态
|
|
354
|
-
|
|
355
|
-
# 如果当前处于暂停状态,先恢复再停止
|
|
356
|
-
if vars.flow.is_paused:
|
|
357
|
-
gr.Info("检测到任务暂停,正在恢复后停止...")
|
|
358
|
-
vars.flow.request_resume()
|
|
359
|
-
|
|
360
|
-
self.is_running = False
|
|
361
|
-
if self._kaa:
|
|
362
|
-
self.run_status.interrupt()
|
|
363
|
-
gr.Info("正在停止任务...")
|
|
364
|
-
# 通知 Idle 管理器停止态
|
|
365
|
-
self.idle_mgr.notify_on_stop()
|
|
366
|
-
|
|
367
|
-
return "停止中...", self.update_task_status()
|
|
368
|
-
|
|
369
|
-
def start_single_task(self, task_name: str) -> Tuple[str, str]:
|
|
370
|
-
if not task_name:
|
|
371
|
-
gr.Warning("请先选择一个任务")
|
|
372
|
-
return "执行任务", ""
|
|
373
|
-
task = None
|
|
374
|
-
for name, t in task_registry.items():
|
|
375
|
-
if name == task_name:
|
|
376
|
-
task = t
|
|
377
|
-
break
|
|
378
|
-
if task is None:
|
|
379
|
-
gr.Warning(f"任务 {task_name} 未找到")
|
|
380
|
-
return "执行任务", ""
|
|
381
|
-
|
|
382
|
-
gr.Info(f"任务 {task_name} 开始执行")
|
|
383
|
-
self.single_task_running = True
|
|
384
|
-
self.run_status = self._kaa.start([task])
|
|
385
|
-
return "停止任务", f"正在执行任务: {task_name}"
|
|
386
|
-
|
|
387
|
-
def stop_single_task(self) -> Tuple[str, str]:
|
|
388
|
-
self.is_single_task_stopping = True # 设置单个任务停止状态
|
|
389
|
-
|
|
390
|
-
# 如果当前处于暂停状态,先恢复再停止
|
|
391
|
-
if vars.flow.is_paused:
|
|
392
|
-
gr.Info("检测到任务暂停,正在恢复后停止...")
|
|
393
|
-
vars.flow.request_resume()
|
|
394
|
-
|
|
395
|
-
self.single_task_running = False
|
|
396
|
-
if hasattr(self, 'run_status') and self._kaa:
|
|
397
|
-
self.run_status.interrupt()
|
|
398
|
-
gr.Info("正在停止任务...")
|
|
399
|
-
# 通知 Idle 管理器停止态
|
|
400
|
-
self.idle_mgr.notify_on_stop()
|
|
401
|
-
return "停止中...", "正在停止任务..."
|
|
402
|
-
|
|
403
|
-
def toggle_pause(self) -> str:
|
|
404
|
-
"""切换暂停/恢复状态"""
|
|
405
|
-
if vars.flow.is_paused:
|
|
406
|
-
vars.flow.request_resume()
|
|
407
|
-
gr.Info("任务已恢复")
|
|
408
|
-
return "暂停"
|
|
409
|
-
else:
|
|
410
|
-
vars.flow.request_pause()
|
|
411
|
-
gr.Info("任务已暂停")
|
|
412
|
-
return "恢复"
|
|
413
|
-
|
|
414
|
-
def get_pause_button_status(self) -> str:
|
|
415
|
-
"""获取暂停按钮的状态"""
|
|
416
|
-
if vars.flow.is_paused:
|
|
417
|
-
return "恢复"
|
|
418
|
-
else:
|
|
419
|
-
return "暂停"
|
|
420
|
-
|
|
421
|
-
def get_pause_button_with_interactive(self) -> gr.Button:
|
|
422
|
-
"""获取暂停按钮的状态和交互性"""
|
|
423
|
-
try:
|
|
424
|
-
text = "恢复" if vars.flow.is_paused else "暂停"
|
|
425
|
-
except ContextNotInitializedError:
|
|
426
|
-
# ContextNotInitializedError: Forwarded object vars called before initialization.
|
|
427
|
-
# TODO: vars.flow.is_paused 应该要可以在脚本正式启动前就能访问
|
|
428
|
-
text = '未启动'
|
|
429
|
-
# 如果正在停止过程中,禁用暂停按钮
|
|
430
|
-
interactive = not (self.is_stopping or self.is_single_task_stopping)
|
|
431
|
-
return gr.Button(value=text, interactive=interactive)
|
|
432
|
-
|
|
433
|
-
def reload_config(self) -> bool:
|
|
434
|
-
"""
|
|
435
|
-
重新加载配置并重新初始化相关组件
|
|
436
|
-
|
|
437
|
-
:return: 是否成功重新加载
|
|
438
|
-
"""
|
|
439
|
-
try:
|
|
440
|
-
# 重新加载配置文件
|
|
441
|
-
self._load_config()
|
|
442
|
-
|
|
443
|
-
# 重新设置 kaa 的配置
|
|
444
|
-
self._kaa.config_path = "config.json"
|
|
445
|
-
self._kaa.config_type = BaseConfig
|
|
446
|
-
|
|
447
|
-
# 重新初始化 kaa(这会重新创建设备和 Context)
|
|
448
|
-
self._setup_kaa()
|
|
449
|
-
|
|
450
|
-
# 重新加载 Context 中的配置数据
|
|
451
|
-
from kotonebot.backend.context.context import config
|
|
452
|
-
try:
|
|
453
|
-
config.load()
|
|
454
|
-
except ContextNotInitializedError:
|
|
455
|
-
pass
|
|
456
|
-
|
|
457
|
-
logger.info("配置已成功重新加载")
|
|
458
|
-
return True
|
|
459
|
-
except Exception as e:
|
|
460
|
-
logger.error(f"重新加载配置失败:{str(e)}")
|
|
461
|
-
return False
|
|
462
|
-
|
|
463
|
-
def save_settings2(self, return_values: list[ConfigBuilderReturnValue], *args) -> str:
|
|
464
|
-
options = BaseConfig()
|
|
465
|
-
# return_values: (set_func, { 'key': component })
|
|
466
|
-
keys = list(chain.from_iterable([list(data.keys()) for _, data in return_values]))
|
|
467
|
-
# 根据 keys 与 *args 构建 data 字典
|
|
468
|
-
data = dict[ConfigKey, Any]()
|
|
469
|
-
assert len(keys) == len(args), "keys 与 args 长度不一致"
|
|
470
|
-
for key, value in zip(keys, args):
|
|
471
|
-
assert key in CONFIG_KEY_VALUE, f"未知的配置项:{key}"
|
|
472
|
-
key = cast(ConfigKey, key)
|
|
473
|
-
data[key] = value
|
|
474
|
-
|
|
475
|
-
# 先设置options
|
|
476
|
-
for (set_func, _) in return_values:
|
|
477
|
-
set_func(options, data)
|
|
478
|
-
|
|
479
|
-
# 验证规则1:截图方法验证
|
|
480
|
-
screenshot_method = self.current_config.backend.screenshot_impl
|
|
481
|
-
backend_type = self.current_config.backend.type
|
|
482
|
-
|
|
483
|
-
valid_screenshot_methods = {
|
|
484
|
-
'mumu12': ['adb', 'adb_raw', 'uiautomator2', 'nemu_ipc'],
|
|
485
|
-
'leidian': ['adb', 'adb_raw', 'uiautomator2'],
|
|
486
|
-
'custom': ['adb', 'adb_raw', 'uiautomator2'],
|
|
487
|
-
'dmm': ['remote_windows', 'windows']
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
if screenshot_method not in valid_screenshot_methods.get(backend_type, []):
|
|
491
|
-
gr.Warning(f"截图方法 '{screenshot_method}' 不适用于当前选择的模拟器类型,配置未保存。")
|
|
492
|
-
return ""
|
|
493
|
-
|
|
494
|
-
# 验证规则2:若启用培育,那么必须选择培育方案
|
|
495
|
-
if options.produce.enabled and not options.produce.selected_solution_id:
|
|
496
|
-
gr.Warning("启用培育时,必须选择培育方案,配置未保存。")
|
|
497
|
-
return ""
|
|
498
|
-
|
|
499
|
-
# 验证规则3:若启用AP/金币购买,对应的商品不能为空
|
|
500
|
-
if options.purchase.ap_enabled and not options.purchase.ap_items:
|
|
501
|
-
gr.Warning("启用AP购买时,AP商店购买物品不能为空,配置未保存。")
|
|
502
|
-
return ""
|
|
503
|
-
|
|
504
|
-
if options.purchase.money_enabled and not options.purchase.money_items:
|
|
505
|
-
gr.Warning("启用金币购买时,金币商店购买物品不能为空,配置未保存。")
|
|
506
|
-
return ""
|
|
507
|
-
|
|
508
|
-
# 验证通过,保存配置
|
|
509
|
-
self.current_config.options = options
|
|
510
|
-
try:
|
|
511
|
-
save_config(self.config, "config.json")
|
|
512
|
-
|
|
513
|
-
# 尝试热重载配置
|
|
514
|
-
if self.reload_config():
|
|
515
|
-
gr.Success("设置已保存并应用!")
|
|
516
|
-
else:
|
|
517
|
-
gr.Warning("设置已保存,但重新加载失败,请重启程序。")
|
|
518
|
-
return ""
|
|
519
|
-
except Exception as e:
|
|
520
|
-
gr.Warning(f"保存设置失败:{str(e)}")
|
|
521
|
-
return ""
|
|
522
|
-
|
|
523
|
-
def _create_status_tab(self) -> None:
|
|
524
|
-
with gr.Tab("状态"):
|
|
525
|
-
gr.Markdown("## 状态")
|
|
526
|
-
|
|
527
|
-
with gr.Row():
|
|
528
|
-
run_btn = gr.Button("启动", scale=2)
|
|
529
|
-
pause_btn = gr.Button("暂停", scale=1)
|
|
530
|
-
|
|
531
|
-
# 快速设置控制区域
|
|
532
|
-
gr.Markdown("### 快速设置")
|
|
533
|
-
|
|
534
|
-
with gr.Row():
|
|
535
|
-
select_all_btn = gr.Button("全选", scale=1)
|
|
536
|
-
unselect_all_btn = gr.Button("清空", scale=1)
|
|
537
|
-
select_produce_only_btn = gr.Button("只选培育", scale=1)
|
|
538
|
-
unselect_produce_only_btn = gr.Button("只不选培育", scale=1)
|
|
539
|
-
|
|
540
|
-
with gr.Row(elem_classes=["quick-controls-row"]):
|
|
541
|
-
purchase_quick = gr.Checkbox(
|
|
542
|
-
label="商店",
|
|
543
|
-
value=self.current_config.options.purchase.enabled,
|
|
544
|
-
interactive=True,
|
|
545
|
-
elem_classes=["quick-checkbox"]
|
|
546
|
-
)
|
|
547
|
-
assignment_quick = gr.Checkbox(
|
|
548
|
-
label="工作",
|
|
549
|
-
value=self.current_config.options.assignment.enabled,
|
|
550
|
-
interactive=True,
|
|
551
|
-
elem_classes=["quick-checkbox"]
|
|
552
|
-
)
|
|
553
|
-
contest_quick = gr.Checkbox(
|
|
554
|
-
label="竞赛",
|
|
555
|
-
value=self.current_config.options.contest.enabled,
|
|
556
|
-
interactive=True,
|
|
557
|
-
elem_classes=["quick-checkbox"]
|
|
558
|
-
)
|
|
559
|
-
produce_quick = gr.Checkbox(
|
|
560
|
-
label="培育",
|
|
561
|
-
value=self.current_config.options.produce.enabled,
|
|
562
|
-
interactive=True,
|
|
563
|
-
elem_classes=["quick-checkbox"]
|
|
564
|
-
)
|
|
565
|
-
mission_reward_quick = gr.Checkbox(
|
|
566
|
-
label="任务",
|
|
567
|
-
value=self.current_config.options.mission_reward.enabled,
|
|
568
|
-
interactive=True,
|
|
569
|
-
elem_classes=["quick-checkbox"]
|
|
570
|
-
)
|
|
571
|
-
club_reward_quick = gr.Checkbox(
|
|
572
|
-
label="社团",
|
|
573
|
-
value=self.current_config.options.club_reward.enabled,
|
|
574
|
-
interactive=True,
|
|
575
|
-
elem_classes=["quick-checkbox"]
|
|
576
|
-
)
|
|
577
|
-
activity_funds_quick = gr.Checkbox(
|
|
578
|
-
label="活动费",
|
|
579
|
-
value=self.current_config.options.activity_funds.enabled,
|
|
580
|
-
interactive=True,
|
|
581
|
-
elem_classes=["quick-checkbox"]
|
|
582
|
-
)
|
|
583
|
-
presents_quick = gr.Checkbox(
|
|
584
|
-
label="礼物",
|
|
585
|
-
value=self.current_config.options.presents.enabled,
|
|
586
|
-
interactive=True,
|
|
587
|
-
elem_classes=["quick-checkbox"]
|
|
588
|
-
)
|
|
589
|
-
capsule_toys_quick = gr.Checkbox(
|
|
590
|
-
label="扭蛋",
|
|
591
|
-
value=self.current_config.options.capsule_toys.enabled,
|
|
592
|
-
interactive=True,
|
|
593
|
-
elem_classes=["quick-checkbox"]
|
|
594
|
-
)
|
|
595
|
-
upgrade_support_card_quick = gr.Checkbox(
|
|
596
|
-
label="支援卡",
|
|
597
|
-
value=self.current_config.options.upgrade_support_card.enabled,
|
|
598
|
-
interactive=True,
|
|
599
|
-
elem_classes=["quick-checkbox"]
|
|
600
|
-
)
|
|
601
|
-
|
|
602
|
-
def _get_end_action_value() -> str:
|
|
603
|
-
if self.current_config.options.end_game.shutdown:
|
|
604
|
-
return "关机"
|
|
605
|
-
if self.current_config.options.end_game.hibernate:
|
|
606
|
-
return "休眠"
|
|
607
|
-
return "什么都不做"
|
|
608
|
-
|
|
609
|
-
end_action_dropdown = gr.Dropdown(
|
|
610
|
-
label="完成后:",
|
|
611
|
-
choices=["什么都不做", "关机", "休眠"],
|
|
612
|
-
value=_get_end_action_value(),
|
|
613
|
-
interactive=True
|
|
614
|
-
)
|
|
615
|
-
|
|
616
|
-
if self._kaa.upgrade_msg:
|
|
617
|
-
gr.Markdown('### 配置升级报告')
|
|
618
|
-
gr.Markdown(self._kaa.upgrade_msg)
|
|
619
|
-
gr.Markdown('脚本报错或者卡住?前往"反馈"选项卡可以快速导出报告!')
|
|
620
|
-
|
|
621
|
-
# 添加调试模式警告
|
|
622
|
-
if self.current_config.keep_screenshots:
|
|
623
|
-
gr.Markdown(
|
|
624
|
-
'<div style="color: red; font-size: larger;">当前启用了调试功能「保留截图数据」,调试结束后正常使用时建议关闭此选项!</div>',
|
|
625
|
-
elem_classes=["debug-warning"]
|
|
626
|
-
)
|
|
627
|
-
|
|
628
|
-
task_status = gr.Dataframe(
|
|
629
|
-
headers=["任务", "状态"],
|
|
630
|
-
value=self.update_task_status(),
|
|
631
|
-
label="任务状态"
|
|
632
|
-
)
|
|
633
|
-
|
|
634
|
-
# MARK: 状态 - 监听函数
|
|
635
|
-
|
|
636
|
-
def on_run_click(evt: gr.EventData) -> Tuple[gr.Button, List[List[str]]]:
|
|
637
|
-
result = self.toggle_run()
|
|
638
|
-
# 如果正在停止,禁用按钮
|
|
639
|
-
interactive = not self.is_stopping
|
|
640
|
-
button = gr.Button(value=result[0], interactive=interactive)
|
|
641
|
-
return button, result[1]
|
|
642
|
-
|
|
643
|
-
def on_pause_click(evt: gr.EventData) -> str:
|
|
644
|
-
return self.toggle_pause()
|
|
645
|
-
|
|
646
|
-
# 快速设置控制的事件处理函数
|
|
647
|
-
def save_quick_setting(success_msg: str, failed_msg: str):
|
|
648
|
-
"""保存快速设置并立即应用"""
|
|
649
|
-
try:
|
|
650
|
-
# 保存配置
|
|
651
|
-
save_config(self.config, "config.json")
|
|
652
|
-
|
|
653
|
-
# 尝试热重载配置
|
|
654
|
-
if self.reload_config():
|
|
655
|
-
gr.Success(success_msg)
|
|
656
|
-
else:
|
|
657
|
-
gr.Warning(failed_msg)
|
|
658
|
-
except Exception as e:
|
|
659
|
-
gr.Error(f"✗ 保存失败:{str(e)}")
|
|
660
|
-
|
|
661
|
-
def update_and_save_quick_setting(field_name: str, value: bool, display_name: str):
|
|
662
|
-
"""更新字段,并保存快速设置并立即应用"""
|
|
663
|
-
|
|
664
|
-
# 更新配置
|
|
665
|
-
if field_name == 'purchase':
|
|
666
|
-
self.current_config.options.purchase.enabled = value
|
|
667
|
-
elif field_name == 'assignment':
|
|
668
|
-
self.current_config.options.assignment.enabled = value
|
|
669
|
-
elif field_name == 'contest':
|
|
670
|
-
self.current_config.options.contest.enabled = value
|
|
671
|
-
elif field_name == 'produce':
|
|
672
|
-
self.current_config.options.produce.enabled = value
|
|
673
|
-
elif field_name == 'mission_reward':
|
|
674
|
-
self.current_config.options.mission_reward.enabled = value
|
|
675
|
-
elif field_name == 'club_reward':
|
|
676
|
-
self.current_config.options.club_reward.enabled = value
|
|
677
|
-
elif field_name == 'activity_funds':
|
|
678
|
-
self.current_config.options.activity_funds.enabled = value
|
|
679
|
-
elif field_name == 'presents':
|
|
680
|
-
self.current_config.options.presents.enabled = value
|
|
681
|
-
elif field_name == 'capsule_toys':
|
|
682
|
-
self.current_config.options.capsule_toys.enabled = value
|
|
683
|
-
elif field_name == 'upgrade_support_card':
|
|
684
|
-
self.current_config.options.upgrade_support_card.enabled = value
|
|
685
|
-
|
|
686
|
-
# 保存并重载配置
|
|
687
|
-
save_quick_setting(
|
|
688
|
-
f"✓ {display_name} 已{'启用' if value else '禁用'}",
|
|
689
|
-
f"⚠ {display_name} 已保存,但重新加载失败"
|
|
690
|
-
)
|
|
691
|
-
|
|
692
|
-
def batch_select(default: bool, produce_only: bool, success_msg: str) -> None:
|
|
693
|
-
self.current_config.options.purchase.enabled = default
|
|
694
|
-
self.current_config.options.assignment.enabled = default
|
|
695
|
-
self.current_config.options.contest.enabled = default
|
|
696
|
-
self.current_config.options.produce.enabled = produce_only
|
|
697
|
-
self.current_config.options.mission_reward.enabled = default
|
|
698
|
-
self.current_config.options.club_reward.enabled = default
|
|
699
|
-
self.current_config.options.activity_funds.enabled = default
|
|
700
|
-
self.current_config.options.presents.enabled = default
|
|
701
|
-
self.current_config.options.capsule_toys.enabled = default
|
|
702
|
-
self.current_config.options.upgrade_support_card.enabled = default
|
|
703
|
-
|
|
704
|
-
save_quick_setting(success_msg, f"⚠ 数据已保存,但重新加载失败")
|
|
705
|
-
|
|
706
|
-
# MARK: 状态 - UI回调函数
|
|
707
|
-
|
|
708
|
-
run_btn.click(
|
|
709
|
-
fn=on_run_click,
|
|
710
|
-
outputs=[run_btn, task_status]
|
|
711
|
-
)
|
|
712
|
-
|
|
713
|
-
pause_btn.click(
|
|
714
|
-
fn=on_pause_click,
|
|
715
|
-
outputs=[pause_btn]
|
|
716
|
-
)
|
|
717
|
-
|
|
718
|
-
select_all_btn.click(
|
|
719
|
-
fn=lambda: batch_select(True, True, f"✓ 全选成功"),
|
|
720
|
-
outputs=[]
|
|
721
|
-
)
|
|
722
|
-
|
|
723
|
-
unselect_all_btn.click(
|
|
724
|
-
fn=lambda: batch_select(False, False, f"✓ 清空成功"),
|
|
725
|
-
outputs=[]
|
|
726
|
-
)
|
|
727
|
-
|
|
728
|
-
select_produce_only_btn.click(
|
|
729
|
-
fn=lambda: batch_select(False, True, f"✓ 只选培育成功"),
|
|
730
|
-
outputs=[]
|
|
731
|
-
)
|
|
732
|
-
|
|
733
|
-
unselect_produce_only_btn.click(
|
|
734
|
-
fn=lambda: batch_select(True, False, f"✓ 只不选培育成功"),
|
|
735
|
-
outputs=[]
|
|
736
|
-
)
|
|
737
|
-
|
|
738
|
-
# 绑定快速设置控制的事件
|
|
739
|
-
|
|
740
|
-
# 以下回调函数均由.change修改为.input,这样回调函数就只会在用户操作时触发,避免全选功能导致反复触发
|
|
741
|
-
purchase_quick.input(
|
|
742
|
-
fn=lambda x: update_and_save_quick_setting('purchase', x, '商店'),
|
|
743
|
-
inputs=[purchase_quick]
|
|
744
|
-
)
|
|
745
|
-
assignment_quick.input(
|
|
746
|
-
fn=lambda x: update_and_save_quick_setting('assignment', x, '工作'),
|
|
747
|
-
inputs=[assignment_quick]
|
|
748
|
-
)
|
|
749
|
-
contest_quick.input(
|
|
750
|
-
fn=lambda x: update_and_save_quick_setting('contest', x, '竞赛'),
|
|
751
|
-
inputs=[contest_quick]
|
|
752
|
-
)
|
|
753
|
-
produce_quick.input(
|
|
754
|
-
fn=lambda x: update_and_save_quick_setting('produce', x, '培育'),
|
|
755
|
-
inputs=[produce_quick]
|
|
756
|
-
)
|
|
757
|
-
mission_reward_quick.input(
|
|
758
|
-
fn=lambda x: update_and_save_quick_setting('mission_reward', x, '任务奖励'),
|
|
759
|
-
inputs=[mission_reward_quick]
|
|
760
|
-
)
|
|
761
|
-
club_reward_quick.input(
|
|
762
|
-
fn=lambda x: update_and_save_quick_setting('club_reward', x, '社团奖励'),
|
|
763
|
-
inputs=[club_reward_quick]
|
|
764
|
-
)
|
|
765
|
-
activity_funds_quick.input(
|
|
766
|
-
fn=lambda x: update_and_save_quick_setting('activity_funds', x, '活动费'),
|
|
767
|
-
inputs=[activity_funds_quick]
|
|
768
|
-
)
|
|
769
|
-
presents_quick.input(
|
|
770
|
-
fn=lambda x: update_and_save_quick_setting('presents', x, '礼物'),
|
|
771
|
-
inputs=[presents_quick]
|
|
772
|
-
)
|
|
773
|
-
capsule_toys_quick.input(
|
|
774
|
-
fn=lambda x: update_and_save_quick_setting('capsule_toys', x, '扭蛋'),
|
|
775
|
-
inputs=[capsule_toys_quick]
|
|
776
|
-
)
|
|
777
|
-
upgrade_support_card_quick.input(
|
|
778
|
-
fn=lambda x: update_and_save_quick_setting('upgrade_support_card', x, '支援卡升级'),
|
|
779
|
-
inputs=[upgrade_support_card_quick]
|
|
780
|
-
)
|
|
781
|
-
|
|
782
|
-
# 处理完成后操作下拉框
|
|
783
|
-
def save_quick_end_action(action: str):
|
|
784
|
-
try:
|
|
785
|
-
if action == "关机":
|
|
786
|
-
self.current_config.options.end_game.shutdown = True
|
|
787
|
-
self.current_config.options.end_game.hibernate = False
|
|
788
|
-
elif action == "休眠":
|
|
789
|
-
self.current_config.options.end_game.shutdown = False
|
|
790
|
-
self.current_config.options.end_game.hibernate = True
|
|
791
|
-
else: # 什么都不做
|
|
792
|
-
self.current_config.options.end_game.shutdown = False
|
|
793
|
-
self.current_config.options.end_game.hibernate = False
|
|
794
|
-
|
|
795
|
-
save_config(self.config, "config.json")
|
|
796
|
-
|
|
797
|
-
# 尝试热重载配置
|
|
798
|
-
if self.reload_config():
|
|
799
|
-
gr.Success(f"✓ 完成后操作已设置为 {action}")
|
|
800
|
-
else:
|
|
801
|
-
gr.Warning("⚠ 设置已保存,但重新加载失败")
|
|
802
|
-
except Exception as e:
|
|
803
|
-
gr.Error(f"✗ 保存失败:{str(e)}")
|
|
804
|
-
|
|
805
|
-
end_action_dropdown.change(
|
|
806
|
-
fn=save_quick_end_action,
|
|
807
|
-
inputs=[end_action_dropdown]
|
|
808
|
-
)
|
|
809
|
-
|
|
810
|
-
# 添加定时器,分别更新按钮状态和任务状态
|
|
811
|
-
def update_run_button_status():
|
|
812
|
-
text, interactive = self.get_button_status()
|
|
813
|
-
return gr.Button(value=text, interactive=interactive)
|
|
814
|
-
|
|
815
|
-
def update_quick_checkboxes():
|
|
816
|
-
"""更新快速设置区域控件的状态,确保与设置同步"""
|
|
817
|
-
end_action_val = _get_end_action_value()
|
|
818
|
-
return [
|
|
819
|
-
gr.Checkbox(value=self.current_config.options.purchase.enabled),
|
|
820
|
-
gr.Checkbox(value=self.current_config.options.assignment.enabled),
|
|
821
|
-
gr.Checkbox(value=self.current_config.options.contest.enabled),
|
|
822
|
-
gr.Checkbox(value=self.current_config.options.produce.enabled),
|
|
823
|
-
gr.Checkbox(value=self.current_config.options.mission_reward.enabled),
|
|
824
|
-
gr.Checkbox(value=self.current_config.options.club_reward.enabled),
|
|
825
|
-
gr.Checkbox(value=self.current_config.options.activity_funds.enabled),
|
|
826
|
-
gr.Checkbox(value=self.current_config.options.presents.enabled),
|
|
827
|
-
gr.Checkbox(value=self.current_config.options.capsule_toys.enabled),
|
|
828
|
-
gr.Checkbox(value=self.current_config.options.upgrade_support_card.enabled),
|
|
829
|
-
gr.Dropdown(value=end_action_val),
|
|
830
|
-
]
|
|
831
|
-
|
|
832
|
-
gr.Timer(1.0).tick(
|
|
833
|
-
fn=update_run_button_status,
|
|
834
|
-
outputs=[run_btn]
|
|
835
|
-
)
|
|
836
|
-
gr.Timer(1.0).tick(
|
|
837
|
-
fn=self.get_pause_button_with_interactive,
|
|
838
|
-
outputs=[pause_btn]
|
|
839
|
-
)
|
|
840
|
-
gr.Timer(2.0).tick(
|
|
841
|
-
fn=update_quick_checkboxes,
|
|
842
|
-
outputs=[
|
|
843
|
-
purchase_quick, assignment_quick, contest_quick, produce_quick,
|
|
844
|
-
mission_reward_quick, club_reward_quick, activity_funds_quick, presents_quick,
|
|
845
|
-
capsule_toys_quick, upgrade_support_card_quick, end_action_dropdown
|
|
846
|
-
]
|
|
847
|
-
)
|
|
848
|
-
gr.Timer(1.0).tick(
|
|
849
|
-
fn=self.update_task_status,
|
|
850
|
-
outputs=[task_status]
|
|
851
|
-
)
|
|
852
|
-
|
|
853
|
-
def _create_task_tab(self) -> None:
|
|
854
|
-
with gr.Tab("任务"):
|
|
855
|
-
gr.Markdown("## 执行任务")
|
|
856
|
-
|
|
857
|
-
# 创建任务选择下拉框
|
|
858
|
-
task_choices = [task.name for task in task_registry.values()]
|
|
859
|
-
task_dropdown = gr.Dropdown(
|
|
860
|
-
choices=task_choices,
|
|
861
|
-
label="选择要执行的任务",
|
|
862
|
-
info="选择一个要单独执行的任务",
|
|
863
|
-
type="value",
|
|
864
|
-
value=None
|
|
865
|
-
)
|
|
866
|
-
|
|
867
|
-
# 创建执行按钮和暂停按钮
|
|
868
|
-
with gr.Row():
|
|
869
|
-
execute_btn = gr.Button("执行任务", scale=2)
|
|
870
|
-
pause_btn = gr.Button("暂停", scale=1)
|
|
871
|
-
task_result = gr.Markdown("")
|
|
872
|
-
|
|
873
|
-
def toggle_single_task(task_name: str) -> Tuple[gr.Button, str]:
|
|
874
|
-
if self.single_task_running:
|
|
875
|
-
# 如果正在停止过程中,忽略重复点击
|
|
876
|
-
if self.is_single_task_stopping:
|
|
877
|
-
return gr.Button(value="停止中...", interactive=False), "正在停止任务..."
|
|
878
|
-
|
|
879
|
-
result = self.stop_single_task()
|
|
880
|
-
return gr.Button(value=result[0], interactive=False), result[1]
|
|
881
|
-
else:
|
|
882
|
-
result = self.start_single_task(task_name)
|
|
883
|
-
return gr.Button(value=result[0], interactive=True), result[1]
|
|
884
|
-
|
|
885
|
-
def get_task_button_status() -> gr.Button:
|
|
886
|
-
if not hasattr(self, 'run_status') or not self.run_status.running:
|
|
887
|
-
self.single_task_running = False
|
|
888
|
-
self.is_single_task_stopping = False # 重置停止状态
|
|
889
|
-
return gr.Button(value="执行任务", interactive=True)
|
|
890
|
-
|
|
891
|
-
if self.is_single_task_stopping:
|
|
892
|
-
return gr.Button(value="停止中...", interactive=False) # 停止中时禁用按钮
|
|
893
|
-
|
|
894
|
-
return gr.Button(value="停止任务", interactive=True)
|
|
895
|
-
|
|
896
|
-
def get_single_task_status() -> str:
|
|
897
|
-
if not hasattr(self, 'run_status'):
|
|
898
|
-
return ""
|
|
899
|
-
|
|
900
|
-
if not self.run_status.running and self.single_task_running:
|
|
901
|
-
# 任务已结束但状态未更新
|
|
902
|
-
self.single_task_running = False
|
|
903
|
-
|
|
904
|
-
# 检查任务状态
|
|
905
|
-
for task_status in self.run_status.tasks:
|
|
906
|
-
status = task_status.status
|
|
907
|
-
task_name = task_status.task.name
|
|
908
|
-
|
|
909
|
-
if status == 'finished':
|
|
910
|
-
return f"任务 {task_name} 已完成"
|
|
911
|
-
elif status == 'error':
|
|
912
|
-
return f"任务 {task_name} 出错"
|
|
913
|
-
elif status == 'cancelled':
|
|
914
|
-
return f"任务 {task_name} 已取消"
|
|
915
|
-
|
|
916
|
-
return "任务已结束"
|
|
917
|
-
|
|
918
|
-
if self.single_task_running:
|
|
919
|
-
for task_status in self.run_status.tasks:
|
|
920
|
-
if task_status.status == 'running':
|
|
921
|
-
return f"正在执行任务: {task_status.task.name}"
|
|
922
|
-
|
|
923
|
-
return "正在准备执行任务..."
|
|
924
|
-
|
|
925
|
-
return ""
|
|
926
|
-
|
|
927
|
-
def on_pause_click(evt: gr.EventData) -> str:
|
|
928
|
-
return self.toggle_pause()
|
|
929
|
-
|
|
930
|
-
execute_btn.click(
|
|
931
|
-
fn=toggle_single_task,
|
|
932
|
-
inputs=[task_dropdown],
|
|
933
|
-
outputs=[execute_btn, task_result]
|
|
934
|
-
)
|
|
935
|
-
|
|
936
|
-
pause_btn.click(
|
|
937
|
-
fn=on_pause_click,
|
|
938
|
-
outputs=[pause_btn]
|
|
939
|
-
)
|
|
940
|
-
|
|
941
|
-
# 添加定时器更新按钮状态和任务状态
|
|
942
|
-
gr.Timer(1.0).tick(
|
|
943
|
-
fn=get_task_button_status,
|
|
944
|
-
outputs=[execute_btn]
|
|
945
|
-
)
|
|
946
|
-
gr.Timer(1.0).tick(
|
|
947
|
-
fn=self.get_pause_button_with_interactive,
|
|
948
|
-
outputs=[pause_btn]
|
|
949
|
-
)
|
|
950
|
-
gr.Timer(1.0).tick(
|
|
951
|
-
fn=get_single_task_status,
|
|
952
|
-
outputs=[task_result]
|
|
953
|
-
)
|
|
954
|
-
|
|
955
|
-
def _create_emulator_settings(self) -> ConfigBuilderReturnValue:
|
|
956
|
-
gr.Markdown("### 模拟器设置")
|
|
957
|
-
current_tab = 0
|
|
958
|
-
|
|
959
|
-
def _update_emulator_tab_options(impl_value: str, selected_index: int):
|
|
960
|
-
nonlocal current_tab
|
|
961
|
-
current_tab = selected_index
|
|
962
|
-
choices = ['adb', 'adb_raw', 'uiautomator2', 'windows', 'remote_windows', 'nemu_ipc']
|
|
963
|
-
if impl_value not in choices:
|
|
964
|
-
new_value = choices[0]
|
|
965
|
-
else:
|
|
966
|
-
new_value = impl_value
|
|
967
|
-
return new_value
|
|
968
|
-
|
|
969
|
-
with gr.Tabs(selected=self.current_config.backend.type):
|
|
970
|
-
with gr.Tab("MuMu 12", id="mumu12") as tab_mumu12:
|
|
971
|
-
gr.Markdown("已选中 MuMu 12 模拟器")
|
|
972
|
-
mumu_refresh_message = gr.Markdown("<div style='color: red;'>点击下方「刷新」按钮载入信息</div>", visible=True)
|
|
973
|
-
mumu_instance = gr.Dropdown(
|
|
974
|
-
label="选择多开实例",
|
|
975
|
-
choices=[],
|
|
976
|
-
interactive=True
|
|
977
|
-
)
|
|
978
|
-
mumu_refresh_btn = gr.Button("刷新")
|
|
979
|
-
|
|
980
|
-
def refresh_mumu_instances():
|
|
981
|
-
try:
|
|
982
|
-
instances = Mumu12Host.list()
|
|
983
|
-
is_mumu12 = self.current_config.backend.type == 'mumu12'
|
|
984
|
-
current_id = self.current_config.backend.instance_id if is_mumu12 else None
|
|
985
|
-
choices = [(i.name, i.id) for i in instances]
|
|
986
|
-
return gr.Dropdown(choices=choices, value=current_id, interactive=True), gr.Markdown(visible=False)
|
|
987
|
-
except Exception as e:
|
|
988
|
-
logger.exception('Failed to list installed MuMu12')
|
|
989
|
-
gr.Error("获取 MuMu12 模拟器列表失败,请升级模拟器到最新版本。若问题依旧,前往 QQ 群、QQ 频道或 Github 反馈 bug。")
|
|
990
|
-
return gr.Dropdown(choices=[], interactive=True), gr.Markdown(visible=True)
|
|
991
|
-
|
|
992
|
-
mumu_refresh_btn.click(
|
|
993
|
-
fn=refresh_mumu_instances,
|
|
994
|
-
outputs=[mumu_instance, mumu_refresh_message]
|
|
995
|
-
)
|
|
996
|
-
|
|
997
|
-
# 如果当前是 MuMu 模拟器且有配置的 instance_id,立即加载实例列表
|
|
998
|
-
if self.current_config.backend.type == 'mumu12' and self.current_config.backend.instance_id:
|
|
999
|
-
try:
|
|
1000
|
-
instances = Mumu12Host.list()
|
|
1001
|
-
choices = [(i.name, i.id) for i in instances]
|
|
1002
|
-
mumu_instance.choices = choices
|
|
1003
|
-
mumu_instance.value = self.current_config.backend.instance_id
|
|
1004
|
-
mumu_refresh_message.visible = False
|
|
1005
|
-
except Exception as e:
|
|
1006
|
-
logger.exception('Failed to auto-load MuMu12 instances')
|
|
1007
|
-
|
|
1008
|
-
mumu_background_mode = gr.Checkbox(
|
|
1009
|
-
label="MuMu12 模拟器后台保活模式",
|
|
1010
|
-
value=self.current_config.backend.mumu_background_mode,
|
|
1011
|
-
info=BackendConfig.model_fields['mumu_background_mode'].description,
|
|
1012
|
-
interactive=True
|
|
1013
|
-
)
|
|
1014
|
-
|
|
1015
|
-
with gr.Tab("雷电", id="leidian") as tab_leidian:
|
|
1016
|
-
gr.Markdown("已选中雷电模拟器")
|
|
1017
|
-
leidian_refresh_message = gr.Markdown("<div style='color: red;'>点击下方「刷新」按钮载入信息</div>", visible=True)
|
|
1018
|
-
leidian_instance = gr.Dropdown(
|
|
1019
|
-
label="选择多开实例",
|
|
1020
|
-
choices=[],
|
|
1021
|
-
interactive=True
|
|
1022
|
-
)
|
|
1023
|
-
leidian_refresh_btn = gr.Button("刷新")
|
|
1024
|
-
|
|
1025
|
-
def refresh_leidian_instances():
|
|
1026
|
-
try:
|
|
1027
|
-
instances = LeidianHost.list()
|
|
1028
|
-
is_leidian = self.current_config.backend.type == 'leidian'
|
|
1029
|
-
current_id = self.current_config.backend.instance_id if is_leidian else None
|
|
1030
|
-
choices = [(i.name, i.id) for i in instances]
|
|
1031
|
-
return gr.Dropdown(choices=choices, value=current_id, interactive=True), gr.Markdown(visible=False)
|
|
1032
|
-
except Exception as e:
|
|
1033
|
-
logger.exception('Failed to list installed Leidian')
|
|
1034
|
-
gr.Error("获取雷电模拟器列表失败,请前往 QQ 群、QQ 频道或 Github 反馈 bug。")
|
|
1035
|
-
return gr.Dropdown(choices=[], interactive=True), gr.Markdown(visible=True)
|
|
1036
|
-
|
|
1037
|
-
leidian_refresh_btn.click(
|
|
1038
|
-
fn=refresh_leidian_instances,
|
|
1039
|
-
outputs=[leidian_instance, leidian_refresh_message]
|
|
1040
|
-
)
|
|
1041
|
-
|
|
1042
|
-
# 如果当前是雷电模拟器且有配置的 instance_id,立即加载实例列表
|
|
1043
|
-
if self.current_config.backend.type == 'leidian' and self.current_config.backend.instance_id:
|
|
1044
|
-
try:
|
|
1045
|
-
instances = LeidianHost.list()
|
|
1046
|
-
choices = [(i.name, i.id) for i in instances]
|
|
1047
|
-
leidian_instance.choices = choices
|
|
1048
|
-
leidian_instance.value = self.current_config.backend.instance_id
|
|
1049
|
-
leidian_refresh_message.visible = False
|
|
1050
|
-
except Exception as e:
|
|
1051
|
-
logger.exception('Failed to auto-load Leidian instances')
|
|
1052
|
-
# 保持显示刷新提示
|
|
1053
|
-
|
|
1054
|
-
with gr.Tab("自定义", id="custom") as tab_custom:
|
|
1055
|
-
gr.Markdown("已选中自定义模拟器")
|
|
1056
|
-
adb_ip = gr.Textbox(
|
|
1057
|
-
value=self.current_config.backend.adb_ip,
|
|
1058
|
-
label="ADB IP 地址",
|
|
1059
|
-
info=BackendConfig.model_fields['adb_ip'].description,
|
|
1060
|
-
interactive=True
|
|
1061
|
-
)
|
|
1062
|
-
adb_port = gr.Number(
|
|
1063
|
-
value=self.current_config.backend.adb_port,
|
|
1064
|
-
label="ADB 端口",
|
|
1065
|
-
info=BackendConfig.model_fields['adb_port'].description,
|
|
1066
|
-
minimum=1,
|
|
1067
|
-
maximum=65535,
|
|
1068
|
-
step=1,
|
|
1069
|
-
interactive=True
|
|
1070
|
-
)
|
|
1071
|
-
check_emulator = gr.Checkbox(
|
|
1072
|
-
label="检查并启动模拟器",
|
|
1073
|
-
value=self.current_config.backend.check_emulator,
|
|
1074
|
-
info=BackendConfig.model_fields['check_emulator'].description,
|
|
1075
|
-
interactive=True
|
|
1076
|
-
)
|
|
1077
|
-
with gr.Group(visible=self.current_config.backend.check_emulator) as check_emulator_group:
|
|
1078
|
-
emulator_path = gr.Textbox(
|
|
1079
|
-
value=self.current_config.backend.emulator_path,
|
|
1080
|
-
label="模拟器 exe 文件路径",
|
|
1081
|
-
info=BackendConfig.model_fields['emulator_path'].description,
|
|
1082
|
-
interactive=True
|
|
1083
|
-
)
|
|
1084
|
-
adb_emulator_name = gr.Textbox(
|
|
1085
|
-
value=self.current_config.backend.adb_emulator_name,
|
|
1086
|
-
label="ADB 模拟器名称",
|
|
1087
|
-
info=BackendConfig.model_fields['adb_emulator_name'].description,
|
|
1088
|
-
interactive=True
|
|
1089
|
-
)
|
|
1090
|
-
emulator_args = gr.Textbox(
|
|
1091
|
-
value=self.current_config.backend.emulator_args,
|
|
1092
|
-
label="模拟器启动参数",
|
|
1093
|
-
info=BackendConfig.model_fields['emulator_args'].description,
|
|
1094
|
-
interactive=True
|
|
1095
|
-
)
|
|
1096
|
-
check_emulator.change(
|
|
1097
|
-
fn=lambda x: gr.Group(visible=x),
|
|
1098
|
-
inputs=[check_emulator],
|
|
1099
|
-
outputs=[check_emulator_group]
|
|
1100
|
-
)
|
|
1101
|
-
|
|
1102
|
-
with gr.Tab("DMM", id="dmm") as tab_dmm:
|
|
1103
|
-
gr.Markdown("已选中 DMM")
|
|
1104
|
-
|
|
1105
|
-
choices = ['adb', 'adb_raw', 'uiautomator2', 'windows', 'remote_windows', 'nemu_ipc']
|
|
1106
|
-
screenshot_impl = gr.Dropdown(
|
|
1107
|
-
choices=choices,
|
|
1108
|
-
value=self.current_config.backend.screenshot_impl,
|
|
1109
|
-
label="截图方法",
|
|
1110
|
-
info=BackendConfig.model_fields['screenshot_impl'].description,
|
|
1111
|
-
interactive=True
|
|
1112
|
-
)
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
target_screenshot_interval = gr.Number(
|
|
1116
|
-
label="最小截图间隔(秒)",
|
|
1117
|
-
value=self.current_config.backend.target_screenshot_interval,
|
|
1118
|
-
info=BackendConfig.model_fields['target_screenshot_interval'].description,
|
|
1119
|
-
minimum=0,
|
|
1120
|
-
step=0.1,
|
|
1121
|
-
interactive=True
|
|
1122
|
-
)
|
|
1123
|
-
|
|
1124
|
-
tab_mumu12.select(fn=partial(_update_emulator_tab_options, selected_index=0), inputs=[screenshot_impl], outputs=[screenshot_impl])
|
|
1125
|
-
tab_leidian.select(fn=partial(_update_emulator_tab_options, selected_index=1), inputs=[screenshot_impl], outputs=[screenshot_impl])
|
|
1126
|
-
tab_custom.select(fn=partial(_update_emulator_tab_options, selected_index=2), inputs=[screenshot_impl], outputs=[screenshot_impl])
|
|
1127
|
-
tab_dmm.select(fn=partial(_update_emulator_tab_options, selected_index=3), inputs=[screenshot_impl], outputs=[screenshot_impl])
|
|
1128
|
-
|
|
1129
|
-
# 初值
|
|
1130
|
-
if self.current_config.backend.type == 'mumu12':
|
|
1131
|
-
_update_emulator_tab_options(
|
|
1132
|
-
impl_value=self.current_config.backend.screenshot_impl,
|
|
1133
|
-
selected_index=0
|
|
1134
|
-
)
|
|
1135
|
-
elif self.current_config.backend.type == 'leidian':
|
|
1136
|
-
_update_emulator_tab_options(
|
|
1137
|
-
impl_value=self.current_config.backend.screenshot_impl,
|
|
1138
|
-
selected_index=1
|
|
1139
|
-
)
|
|
1140
|
-
elif self.current_config.backend.type == 'custom':
|
|
1141
|
-
_update_emulator_tab_options(
|
|
1142
|
-
impl_value=self.current_config.backend.screenshot_impl,
|
|
1143
|
-
selected_index=2
|
|
1144
|
-
)
|
|
1145
|
-
elif self.current_config.backend.type == 'dmm':
|
|
1146
|
-
_update_emulator_tab_options(
|
|
1147
|
-
impl_value=self.current_config.backend.screenshot_impl,
|
|
1148
|
-
selected_index=3
|
|
1149
|
-
)
|
|
1150
|
-
else:
|
|
1151
|
-
gr.Warning(f"未知的模拟器类型:{self.current_config.backend.type}")
|
|
1152
|
-
|
|
1153
|
-
def set_config(_: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
1154
|
-
# current_tab is updated by _update_emulator_tab_options
|
|
1155
|
-
if current_tab == 0: # Mumu
|
|
1156
|
-
self.current_config.backend.type = 'mumu12'
|
|
1157
|
-
self.current_config.backend.instance_id = data['_mumu_index']
|
|
1158
|
-
self.current_config.backend.mumu_background_mode = data['mumu_background_mode']
|
|
1159
|
-
elif current_tab == 1: # Leidian
|
|
1160
|
-
self.current_config.backend.type = 'leidian'
|
|
1161
|
-
self.current_config.backend.instance_id = data['_leidian_index']
|
|
1162
|
-
elif current_tab == 2: # Custom
|
|
1163
|
-
self.current_config.backend.type = 'custom'
|
|
1164
|
-
self.current_config.backend.instance_id = None
|
|
1165
|
-
self.current_config.backend.adb_ip = data['adb_ip']
|
|
1166
|
-
self.current_config.backend.adb_port = data['adb_port']
|
|
1167
|
-
self.current_config.backend.adb_emulator_name = data['adb_emulator_name']
|
|
1168
|
-
self.current_config.backend.check_emulator = data['check_emulator']
|
|
1169
|
-
self.current_config.backend.emulator_path = data['emulator_path']
|
|
1170
|
-
self.current_config.backend.emulator_args = data['emulator_args']
|
|
1171
|
-
elif current_tab == 3: # DMM
|
|
1172
|
-
self.current_config.backend.type = 'dmm'
|
|
1173
|
-
self.current_config.backend.instance_id = None # DMM doesn't use instance_id here
|
|
1174
|
-
|
|
1175
|
-
# Common settings for all backend types
|
|
1176
|
-
self.current_config.backend.screenshot_impl = data['screenshot_method']
|
|
1177
|
-
self.current_config.backend.target_screenshot_interval = data['target_screenshot_interval']
|
|
1178
|
-
|
|
1179
|
-
return set_config, {
|
|
1180
|
-
'adb_ip': adb_ip,
|
|
1181
|
-
'adb_port': adb_port,
|
|
1182
|
-
'screenshot_method': screenshot_impl,
|
|
1183
|
-
'target_screenshot_interval': target_screenshot_interval,
|
|
1184
|
-
'check_emulator': check_emulator,
|
|
1185
|
-
'emulator_path': emulator_path,
|
|
1186
|
-
'adb_emulator_name': adb_emulator_name,
|
|
1187
|
-
'emulator_args': emulator_args,
|
|
1188
|
-
'_mumu_index': mumu_instance,
|
|
1189
|
-
'_leidian_index': leidian_instance,
|
|
1190
|
-
'mumu_background_mode': mumu_background_mode
|
|
1191
|
-
}
|
|
1192
|
-
|
|
1193
|
-
def _create_purchase_settings(self) -> ConfigBuilderReturnValue:
|
|
1194
|
-
with gr.Column():
|
|
1195
|
-
gr.Markdown("### 商店购买设置")
|
|
1196
|
-
purchase_enabled = gr.Checkbox(
|
|
1197
|
-
label="启用商店购买",
|
|
1198
|
-
value=self.current_config.options.purchase.enabled,
|
|
1199
|
-
info=PurchaseConfig.model_fields['enabled'].description
|
|
1200
|
-
)
|
|
1201
|
-
with gr.Group(visible=self.current_config.options.purchase.enabled) as purchase_group:
|
|
1202
|
-
money_enabled = gr.Checkbox(
|
|
1203
|
-
label="启用金币购买",
|
|
1204
|
-
value=self.current_config.options.purchase.money_enabled,
|
|
1205
|
-
info=PurchaseConfig.model_fields['money_enabled'].description
|
|
1206
|
-
)
|
|
1207
|
-
|
|
1208
|
-
# 添加金币商店商品选择
|
|
1209
|
-
money_items = gr.Dropdown(
|
|
1210
|
-
multiselect=True,
|
|
1211
|
-
choices=list(DailyMoneyShopItems.all()),
|
|
1212
|
-
value=self.current_config.options.purchase.money_items,
|
|
1213
|
-
label="金币商店购买物品",
|
|
1214
|
-
info=PurchaseConfig.model_fields['money_items'].description
|
|
1215
|
-
)
|
|
1216
|
-
|
|
1217
|
-
money_refresh = gr.Checkbox(
|
|
1218
|
-
label="每日一次免费刷新金币商店",
|
|
1219
|
-
value=self.current_config.options.purchase.money_refresh,
|
|
1220
|
-
info=PurchaseConfig.model_fields['money_refresh'].description
|
|
1221
|
-
)
|
|
1222
|
-
|
|
1223
|
-
ap_enabled = gr.Checkbox(
|
|
1224
|
-
label="启用AP购买",
|
|
1225
|
-
value=self.current_config.options.purchase.ap_enabled,
|
|
1226
|
-
info=PurchaseConfig.model_fields['ap_enabled'].description
|
|
1227
|
-
)
|
|
1228
|
-
|
|
1229
|
-
# 转换枚举值为显示文本
|
|
1230
|
-
selected_items: List[str] = []
|
|
1231
|
-
ap_items_map = {
|
|
1232
|
-
APShopItems.PRODUCE_PT_UP: "支援强化点数提升",
|
|
1233
|
-
APShopItems.PRODUCE_NOTE_UP: "笔记数提升",
|
|
1234
|
-
APShopItems.RECHALLENGE: "重新挑战券",
|
|
1235
|
-
APShopItems.REGENERATE_MEMORY: "回忆再生成券"
|
|
1236
|
-
}
|
|
1237
|
-
for item_value in self.current_config.options.purchase.ap_items:
|
|
1238
|
-
item_enum = APShopItems(item_value)
|
|
1239
|
-
if item_enum in ap_items_map:
|
|
1240
|
-
selected_items.append(ap_items_map[item_enum])
|
|
1241
|
-
|
|
1242
|
-
ap_items = gr.Dropdown(
|
|
1243
|
-
multiselect=True,
|
|
1244
|
-
choices=list(ap_items_map.values()),
|
|
1245
|
-
value=selected_items,
|
|
1246
|
-
label="AP商店购买物品",
|
|
1247
|
-
info=PurchaseConfig.model_fields['ap_items'].description
|
|
1248
|
-
)
|
|
1249
|
-
|
|
1250
|
-
purchase_enabled.change(
|
|
1251
|
-
fn=lambda x: gr.Group(visible=x),
|
|
1252
|
-
inputs=[purchase_enabled],
|
|
1253
|
-
outputs=[purchase_group]
|
|
1254
|
-
)
|
|
1255
|
-
|
|
1256
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
1257
|
-
config.purchase.enabled = data['purchase_enabled']
|
|
1258
|
-
config.purchase.money_enabled = data['money_enabled']
|
|
1259
|
-
config.purchase.money_items = [DailyMoneyShopItems(x) for x in data['money_items']]
|
|
1260
|
-
config.purchase.money_refresh = data['money_refresh']
|
|
1261
|
-
config.purchase.ap_enabled = data['ap_enabled']
|
|
1262
|
-
ap_items_enum: List[Literal[0, 1, 2, 3]] = []
|
|
1263
|
-
ap_items_map: Dict[str, APShopItems] = {
|
|
1264
|
-
"支援强化点数提升": APShopItems.PRODUCE_PT_UP,
|
|
1265
|
-
"笔记数提升": APShopItems.PRODUCE_NOTE_UP,
|
|
1266
|
-
"重新挑战券": APShopItems.RECHALLENGE,
|
|
1267
|
-
"回忆再生成券": APShopItems.REGENERATE_MEMORY
|
|
1268
|
-
}
|
|
1269
|
-
for item in data['ap_items']:
|
|
1270
|
-
if item in ap_items_map:
|
|
1271
|
-
ap_items_enum.append(ap_items_map[item].value) # type: ignore
|
|
1272
|
-
config.purchase.ap_items = ap_items_enum
|
|
1273
|
-
|
|
1274
|
-
return set_config, {
|
|
1275
|
-
'purchase_enabled': purchase_enabled,
|
|
1276
|
-
'money_enabled': money_enabled,
|
|
1277
|
-
'ap_enabled': ap_enabled,
|
|
1278
|
-
'ap_items': ap_items,
|
|
1279
|
-
'money_items': money_items,
|
|
1280
|
-
'money_refresh': money_refresh
|
|
1281
|
-
}
|
|
1282
|
-
|
|
1283
|
-
def _create_work_settings(self) -> ConfigBuilderReturnValue:
|
|
1284
|
-
with gr.Column():
|
|
1285
|
-
gr.Markdown("### 工作设置")
|
|
1286
|
-
assignment_enabled = gr.Checkbox(
|
|
1287
|
-
label="启用工作",
|
|
1288
|
-
value=self.current_config.options.assignment.enabled,
|
|
1289
|
-
info=AssignmentConfig.model_fields['enabled'].description
|
|
1290
|
-
)
|
|
1291
|
-
with gr.Group(visible=self.current_config.options.assignment.enabled) as work_group:
|
|
1292
|
-
with gr.Row():
|
|
1293
|
-
with gr.Column():
|
|
1294
|
-
mini_live_reassign = gr.Checkbox(
|
|
1295
|
-
label="启用重新分配 MiniLive",
|
|
1296
|
-
value=self.current_config.options.assignment.mini_live_reassign_enabled,
|
|
1297
|
-
info=AssignmentConfig.model_fields['mini_live_reassign_enabled'].description
|
|
1298
|
-
)
|
|
1299
|
-
mini_live_duration = gr.Dropdown(
|
|
1300
|
-
choices=[4, 6, 12],
|
|
1301
|
-
value=self.current_config.options.assignment.mini_live_duration,
|
|
1302
|
-
label="MiniLive 工作时长",
|
|
1303
|
-
interactive=True,
|
|
1304
|
-
info=AssignmentConfig.model_fields['mini_live_duration'].description
|
|
1305
|
-
)
|
|
1306
|
-
with gr.Column():
|
|
1307
|
-
online_live_reassign = gr.Checkbox(
|
|
1308
|
-
label="启用重新分配 OnlineLive",
|
|
1309
|
-
value=self.current_config.options.assignment.online_live_reassign_enabled,
|
|
1310
|
-
info=AssignmentConfig.model_fields['online_live_reassign_enabled'].description
|
|
1311
|
-
)
|
|
1312
|
-
online_live_duration = gr.Dropdown(
|
|
1313
|
-
choices=[4, 6, 12],
|
|
1314
|
-
value=self.current_config.options.assignment.online_live_duration,
|
|
1315
|
-
label="OnlineLive 工作时长",
|
|
1316
|
-
interactive=True,
|
|
1317
|
-
info=AssignmentConfig.model_fields['online_live_duration'].description
|
|
1318
|
-
)
|
|
1319
|
-
|
|
1320
|
-
assignment_enabled.change(
|
|
1321
|
-
fn=lambda x: gr.Group(visible=x),
|
|
1322
|
-
inputs=[assignment_enabled],
|
|
1323
|
-
outputs=[work_group]
|
|
1324
|
-
)
|
|
1325
|
-
# return assignment_enabled, mini_live_reassign, mini_live_duration, online_live_reassign, online_live_duration
|
|
1326
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
1327
|
-
config.assignment.enabled = data['assignment_enabled']
|
|
1328
|
-
config.assignment.mini_live_reassign_enabled = data['mini_live_reassign']
|
|
1329
|
-
config.assignment.mini_live_duration = data['mini_live_duration']
|
|
1330
|
-
config.assignment.online_live_reassign_enabled = data['online_live_reassign']
|
|
1331
|
-
config.assignment.online_live_duration = data['online_live_duration']
|
|
1332
|
-
|
|
1333
|
-
return set_config, {
|
|
1334
|
-
'assignment_enabled': assignment_enabled,
|
|
1335
|
-
'mini_live_reassign': mini_live_reassign,
|
|
1336
|
-
'mini_live_duration': mini_live_duration,
|
|
1337
|
-
'online_live_reassign': online_live_reassign,
|
|
1338
|
-
'online_live_duration': online_live_duration
|
|
1339
|
-
}
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
def _create_contest_settings(self) -> ConfigBuilderReturnValue:
|
|
1343
|
-
with gr.Column():
|
|
1344
|
-
gr.Markdown("### 竞赛设置")
|
|
1345
|
-
contest_enabled = gr.Checkbox(
|
|
1346
|
-
label="启用竞赛",
|
|
1347
|
-
value=self.current_config.options.contest.enabled,
|
|
1348
|
-
info=ContestConfig.model_fields['enabled'].description
|
|
1349
|
-
)
|
|
1350
|
-
with gr.Group(visible=self.current_config.options.contest.enabled) as contest_group:
|
|
1351
|
-
select_which_contestant = gr.Dropdown(
|
|
1352
|
-
choices=[1, 2, 3],
|
|
1353
|
-
value=self.current_config.options.contest.select_which_contestant,
|
|
1354
|
-
label="选择第几位竞赛目标",
|
|
1355
|
-
interactive=True,
|
|
1356
|
-
info=ContestConfig.model_fields['select_which_contestant'].description
|
|
1357
|
-
)
|
|
1358
|
-
|
|
1359
|
-
when_no_set_choices = [
|
|
1360
|
-
("通知我并跳过竞赛", "remind"),
|
|
1361
|
-
("提醒我并等待手动编成", "wait"),
|
|
1362
|
-
("使用自动编成并提醒我", "auto_set"),
|
|
1363
|
-
("使用自动编成", "auto_set_silent")
|
|
1364
|
-
]
|
|
1365
|
-
when_no_set = gr.Dropdown(
|
|
1366
|
-
choices=when_no_set_choices,
|
|
1367
|
-
value=self.current_config.options.contest.when_no_set,
|
|
1368
|
-
label="竞赛队伍未编成时",
|
|
1369
|
-
interactive=True,
|
|
1370
|
-
info=ContestConfig.model_fields['when_no_set'].description
|
|
1371
|
-
)
|
|
1372
|
-
contest_enabled.change(
|
|
1373
|
-
fn=lambda x: gr.Group(visible=x),
|
|
1374
|
-
inputs=[contest_enabled],
|
|
1375
|
-
outputs=[contest_group]
|
|
1376
|
-
)
|
|
1377
|
-
|
|
1378
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
1379
|
-
config.contest.enabled = data['contest_enabled']
|
|
1380
|
-
config.contest.select_which_contestant = data['select_which_contestant']
|
|
1381
|
-
config.contest.when_no_set = data['when_no_set']
|
|
1382
|
-
|
|
1383
|
-
return set_config, {
|
|
1384
|
-
'contest_enabled': contest_enabled,
|
|
1385
|
-
'select_which_contestant': select_which_contestant,
|
|
1386
|
-
'when_no_set': when_no_set
|
|
1387
|
-
}
|
|
1388
|
-
|
|
1389
|
-
def _create_produce_settings(self) -> ConfigBuilderReturnValue:
|
|
1390
|
-
with gr.Column():
|
|
1391
|
-
gr.Markdown("### 培育设置")
|
|
1392
|
-
produce_enabled = gr.Checkbox(
|
|
1393
|
-
label="启用培育",
|
|
1394
|
-
value=self.current_config.options.produce.enabled,
|
|
1395
|
-
info=ProduceConfig.model_fields['enabled'].description
|
|
1396
|
-
)
|
|
1397
|
-
|
|
1398
|
-
with gr.Group(visible=self.current_config.options.produce.enabled) as produce_group:
|
|
1399
|
-
# 培育方案管理区域
|
|
1400
|
-
solution_manager = ProduceSolutionManager()
|
|
1401
|
-
solutions = solution_manager.list()
|
|
1402
|
-
solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
|
|
1403
|
-
|
|
1404
|
-
selected_solution_id = self.current_config.options.produce.selected_solution_id
|
|
1405
|
-
solution_dropdown = gr.Dropdown(
|
|
1406
|
-
choices=solution_choices,
|
|
1407
|
-
value=selected_solution_id,
|
|
1408
|
-
label="当前使用的培育方案",
|
|
1409
|
-
interactive=True
|
|
1410
|
-
)
|
|
1411
|
-
|
|
1412
|
-
produce_count = gr.Number(
|
|
1413
|
-
minimum=1,
|
|
1414
|
-
value=self.current_config.options.produce.produce_count,
|
|
1415
|
-
label="培育次数",
|
|
1416
|
-
interactive=True,
|
|
1417
|
-
info=ProduceConfig.model_fields['produce_count'].description
|
|
1418
|
-
)
|
|
1419
|
-
|
|
1420
|
-
# 绑定启用状态变化事件
|
|
1421
|
-
def on_produce_enabled_change(enabled):
|
|
1422
|
-
return gr.Group(visible=enabled)
|
|
1423
|
-
|
|
1424
|
-
produce_enabled.change(
|
|
1425
|
-
fn=on_produce_enabled_change,
|
|
1426
|
-
inputs=[produce_enabled],
|
|
1427
|
-
outputs=[produce_group]
|
|
1428
|
-
)
|
|
1429
|
-
|
|
1430
|
-
# 存储设置Tab中的下拉框引用,供培育Tab使用
|
|
1431
|
-
self._settings_solution_dropdown = solution_dropdown
|
|
1432
|
-
|
|
1433
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
1434
|
-
config.produce.enabled = data['produce_enabled']
|
|
1435
|
-
config.produce.selected_solution_id = data.get('selected_solution_id')
|
|
1436
|
-
config.produce.produce_count = data.get('produce_count', 1)
|
|
1437
|
-
|
|
1438
|
-
return set_config, {
|
|
1439
|
-
'produce_enabled': produce_enabled,
|
|
1440
|
-
'selected_solution_id': solution_dropdown,
|
|
1441
|
-
'produce_count': produce_count
|
|
1442
|
-
}
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
def _create_produce_tab(self) -> None:
|
|
1446
|
-
"""创建培育Tab"""
|
|
1447
|
-
with gr.Tab("培育"):
|
|
1448
|
-
gr.Markdown("## 培育管理")
|
|
1449
|
-
|
|
1450
|
-
# 培育方案管理区域
|
|
1451
|
-
solution_manager = ProduceSolutionManager()
|
|
1452
|
-
solutions = solution_manager.list()
|
|
1453
|
-
solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
|
|
1454
|
-
|
|
1455
|
-
selected_solution_id = self.current_config.options.produce.selected_solution_id
|
|
1456
|
-
solution_dropdown = gr.Dropdown(
|
|
1457
|
-
choices=solution_choices,
|
|
1458
|
-
value=selected_solution_id,
|
|
1459
|
-
label="选择培育方案",
|
|
1460
|
-
interactive=True
|
|
1461
|
-
)
|
|
1462
|
-
|
|
1463
|
-
# 获取设置Tab中的下拉框引用
|
|
1464
|
-
settings_dropdown = getattr(self, '_settings_solution_dropdown', None)
|
|
1465
|
-
|
|
1466
|
-
with gr.Row():
|
|
1467
|
-
new_solution_btn = gr.Button("新建培育", scale=1)
|
|
1468
|
-
delete_solution_btn = gr.Button("删除当前培育", scale=1)
|
|
1469
|
-
|
|
1470
|
-
# 培育方案详细设置区域
|
|
1471
|
-
with gr.Group() as solution_settings_group:
|
|
1472
|
-
# 获取当前选中的方案数据
|
|
1473
|
-
current_solution = None
|
|
1474
|
-
if selected_solution_id:
|
|
1475
|
-
try:
|
|
1476
|
-
current_solution = solution_manager.read(selected_solution_id)
|
|
1477
|
-
except ProduceSolutionNotFoundError:
|
|
1478
|
-
pass
|
|
1479
|
-
|
|
1480
|
-
if current_solution is None:
|
|
1481
|
-
# 如果没有选中方案,隐藏所有设置组件
|
|
1482
|
-
solution_name = gr.Textbox(label="方案名称", value="", visible=False)
|
|
1483
|
-
solution_description = gr.Textbox(label="方案描述", value="", visible=False)
|
|
1484
|
-
# 其他设置组件都设为不可见
|
|
1485
|
-
produce_mode = gr.Dropdown(
|
|
1486
|
-
choices=["regular", "pro", "master"],
|
|
1487
|
-
label="培育模式",
|
|
1488
|
-
info="进行一次 REGULAR 培育需要 ~30min,进行一次 PRO 培育需要 ~1h(具体视设备性能而定)。",
|
|
1489
|
-
visible=False
|
|
1490
|
-
)
|
|
1491
|
-
|
|
1492
|
-
# 添加偶像选择
|
|
1493
|
-
idol_choices = []
|
|
1494
|
-
for idol in IdolCard.all():
|
|
1495
|
-
if idol.is_another:
|
|
1496
|
-
idol_choices.append((f'{idol.name} 「{idol.another_name}」', idol.skin_id))
|
|
1497
|
-
else:
|
|
1498
|
-
idol_choices.append((f'{idol.name}', idol.skin_id))
|
|
1499
|
-
|
|
1500
|
-
produce_idols = gr.Dropdown(
|
|
1501
|
-
choices=idol_choices,
|
|
1502
|
-
label="选择要培育的偶像",
|
|
1503
|
-
multiselect=False,
|
|
1504
|
-
info="要培育偶像的 IdolCardSkin.id。",
|
|
1505
|
-
visible=False
|
|
1506
|
-
)
|
|
1507
|
-
kotone_warning = gr.Markdown(visible=False)
|
|
1508
|
-
auto_set_memory = gr.Checkbox(
|
|
1509
|
-
label="自动编成回忆",
|
|
1510
|
-
info="是否自动编成回忆。此选项优先级高于回忆编成编号。",
|
|
1511
|
-
visible=False
|
|
1512
|
-
)
|
|
1513
|
-
with gr.Group(visible=False) as memory_sets_group:
|
|
1514
|
-
memory_sets = gr.Dropdown(
|
|
1515
|
-
choices=[str(i) for i in range(1, 11)],
|
|
1516
|
-
label="回忆编成编号",
|
|
1517
|
-
multiselect=False,
|
|
1518
|
-
info="要使用的回忆编成编号,从 1 开始。",
|
|
1519
|
-
visible=False
|
|
1520
|
-
)
|
|
1521
|
-
auto_set_support = gr.Checkbox(
|
|
1522
|
-
label="自动编成支援卡",
|
|
1523
|
-
info="是否自动编成支援卡。此选项优先级高于支援卡编成编号。",
|
|
1524
|
-
visible=False
|
|
1525
|
-
)
|
|
1526
|
-
with gr.Group(visible=False) as support_card_sets_group:
|
|
1527
|
-
support_card_sets = gr.Dropdown(
|
|
1528
|
-
choices=[str(i) for i in range(1, 11)],
|
|
1529
|
-
label="支援卡编成编号",
|
|
1530
|
-
multiselect=False,
|
|
1531
|
-
info="要使用的支援卡编成编号,从 1 开始。",
|
|
1532
|
-
visible=False
|
|
1533
|
-
)
|
|
1534
|
-
use_pt_boost = gr.Checkbox(
|
|
1535
|
-
label="使用支援强化 Pt 提升",
|
|
1536
|
-
info="是否使用支援强化 Pt 提升。",
|
|
1537
|
-
visible=False
|
|
1538
|
-
)
|
|
1539
|
-
use_note_boost = gr.Checkbox(
|
|
1540
|
-
label="使用笔记数提升",
|
|
1541
|
-
info="是否使用笔记数提升。",
|
|
1542
|
-
visible=False
|
|
1543
|
-
)
|
|
1544
|
-
follow_producer = gr.Checkbox(
|
|
1545
|
-
label="关注租借了支援卡的制作人",
|
|
1546
|
-
info="是否关注租借了支援卡的制作人。",
|
|
1547
|
-
visible=False
|
|
1548
|
-
)
|
|
1549
|
-
self_study_lesson = gr.Dropdown(
|
|
1550
|
-
choices=['dance', 'visual', 'vocal'],
|
|
1551
|
-
label='文化课自习时选项',
|
|
1552
|
-
info='自习课类型。',
|
|
1553
|
-
visible=False
|
|
1554
|
-
)
|
|
1555
|
-
prefer_lesson_ap = gr.Checkbox(
|
|
1556
|
-
label="SP 课程优先",
|
|
1557
|
-
info="优先 SP 课程。启用后,若出现 SP 课程,则会优先执行 SP 课程,而不是推荐课程。若出现多个 SP 课程,随机选择一个。",
|
|
1558
|
-
visible=False
|
|
1559
|
-
)
|
|
1560
|
-
actions_order = gr.Dropdown(
|
|
1561
|
-
choices=[(action.display_name, action.value) for action in ProduceAction],
|
|
1562
|
-
label="行动优先级",
|
|
1563
|
-
info="每一周的行动将会按这里设置的优先级执行。",
|
|
1564
|
-
multiselect=True,
|
|
1565
|
-
visible=False
|
|
1566
|
-
)
|
|
1567
|
-
recommend_card_detection_mode = gr.Dropdown(
|
|
1568
|
-
choices=[
|
|
1569
|
-
(RecommendCardDetectionMode.NORMAL.display_name, RecommendCardDetectionMode.NORMAL.value),
|
|
1570
|
-
(RecommendCardDetectionMode.STRICT.display_name, RecommendCardDetectionMode.STRICT.value)
|
|
1571
|
-
],
|
|
1572
|
-
label="推荐卡检测模式",
|
|
1573
|
-
info="推荐卡检测模式。严格模式下,识别速度会降低,但识别准确率会提高。",
|
|
1574
|
-
visible=False
|
|
1575
|
-
)
|
|
1576
|
-
use_ap_drink = gr.Checkbox(
|
|
1577
|
-
label="AP 不足时自动使用 AP 饮料",
|
|
1578
|
-
info="AP 不足时自动使用 AP 饮料",
|
|
1579
|
-
visible=False
|
|
1580
|
-
)
|
|
1581
|
-
skip_commu = gr.Checkbox(
|
|
1582
|
-
label="检测并跳过交流",
|
|
1583
|
-
info="检测并跳过交流",
|
|
1584
|
-
visible=False
|
|
1585
|
-
)
|
|
1586
|
-
save_solution_btn = gr.Button("保存培育方案", variant="primary", visible=False)
|
|
1587
|
-
else:
|
|
1588
|
-
# 显示选中方案的设置
|
|
1589
|
-
solution_name = gr.Textbox(
|
|
1590
|
-
label="方案名称",
|
|
1591
|
-
value=current_solution.name,
|
|
1592
|
-
interactive=True
|
|
1593
|
-
)
|
|
1594
|
-
solution_description = gr.Textbox(
|
|
1595
|
-
label="方案描述",
|
|
1596
|
-
value=current_solution.description or "",
|
|
1597
|
-
interactive=True
|
|
1598
|
-
)
|
|
1599
|
-
|
|
1600
|
-
produce_mode = gr.Dropdown(
|
|
1601
|
-
choices=["regular", "pro", "master"],
|
|
1602
|
-
value=current_solution.data.mode,
|
|
1603
|
-
label="培育模式",
|
|
1604
|
-
info="进行一次 REGULAR 培育需要 ~30min,进行一次 PRO 培育需要 ~1h(具体视设备性能而定)。"
|
|
1605
|
-
)
|
|
1606
|
-
|
|
1607
|
-
# 添加偶像选择
|
|
1608
|
-
idol_choices = []
|
|
1609
|
-
for idol in IdolCard.all():
|
|
1610
|
-
if idol.is_another:
|
|
1611
|
-
idol_choices.append((f'{idol.name} 「{idol.another_name}」', idol.skin_id))
|
|
1612
|
-
else:
|
|
1613
|
-
idol_choices.append((f'{idol.name}', idol.skin_id))
|
|
1614
|
-
|
|
1615
|
-
produce_idols = gr.Dropdown(
|
|
1616
|
-
choices=idol_choices,
|
|
1617
|
-
value=current_solution.data.idol,
|
|
1618
|
-
label="选择要培育的偶像",
|
|
1619
|
-
multiselect=False,
|
|
1620
|
-
interactive=True,
|
|
1621
|
-
info="要培育偶像的 IdolCardSkin.id。"
|
|
1622
|
-
)
|
|
1623
|
-
|
|
1624
|
-
has_kotone = bool(current_solution.data.idol and "藤田ことね" in current_solution.data.idol)
|
|
1625
|
-
is_strict_mode = current_solution.data.recommend_card_detection_mode == RecommendCardDetectionMode.STRICT
|
|
1626
|
-
kotone_warning = gr.Markdown(
|
|
1627
|
-
visible=has_kotone and not is_strict_mode,
|
|
1628
|
-
value="使用「藤田ことね」进行培育时,确保将「推荐卡检测模式」设置为「严格模式」"
|
|
1629
|
-
)
|
|
1630
|
-
|
|
1631
|
-
auto_set_memory = gr.Checkbox(
|
|
1632
|
-
label="自动编成回忆",
|
|
1633
|
-
value=current_solution.data.auto_set_memory,
|
|
1634
|
-
info="是否自动编成回忆。此选项优先级高于回忆编成编号。"
|
|
1635
|
-
)
|
|
1636
|
-
|
|
1637
|
-
with gr.Group(visible=not current_solution.data.auto_set_memory) as memory_sets_group:
|
|
1638
|
-
memory_sets = gr.Dropdown(
|
|
1639
|
-
choices=[str(i) for i in range(1, 21)], # 最多20个编成位
|
|
1640
|
-
value=str(current_solution.data.memory_set) if current_solution.data.memory_set else None,
|
|
1641
|
-
label="回忆编成编号",
|
|
1642
|
-
multiselect=False,
|
|
1643
|
-
interactive=True,
|
|
1644
|
-
info="要使用的回忆编成编号,从 1 开始。"
|
|
1645
|
-
)
|
|
1646
|
-
|
|
1647
|
-
auto_set_support = gr.Checkbox(
|
|
1648
|
-
label="自动编成支援卡",
|
|
1649
|
-
value=current_solution.data.auto_set_support_card,
|
|
1650
|
-
info="是否自动编成支援卡。此选项优先级高于支援卡编成编号。"
|
|
1651
|
-
)
|
|
1652
|
-
|
|
1653
|
-
with gr.Group(visible=not current_solution.data.auto_set_support_card) as support_card_sets_group:
|
|
1654
|
-
support_card_sets = gr.Dropdown(
|
|
1655
|
-
choices=[str(i) for i in range(1, 21)], # 最多20个编成位
|
|
1656
|
-
value=str(current_solution.data.support_card_set) if current_solution.data.support_card_set else None,
|
|
1657
|
-
label="支援卡编成编号",
|
|
1658
|
-
multiselect=False,
|
|
1659
|
-
interactive=True,
|
|
1660
|
-
info="要使用的支援卡编成编号,从 1 开始。"
|
|
1661
|
-
)
|
|
1662
|
-
use_pt_boost = gr.Checkbox(
|
|
1663
|
-
label="使用支援强化 Pt 提升",
|
|
1664
|
-
value=current_solution.data.use_pt_boost,
|
|
1665
|
-
info="是否使用支援强化 Pt 提升。"
|
|
1666
|
-
)
|
|
1667
|
-
use_note_boost = gr.Checkbox(
|
|
1668
|
-
label="使用笔记数提升",
|
|
1669
|
-
value=current_solution.data.use_note_boost,
|
|
1670
|
-
info="是否使用笔记数提升。"
|
|
1671
|
-
)
|
|
1672
|
-
follow_producer = gr.Checkbox(
|
|
1673
|
-
label="关注租借了支援卡的制作人",
|
|
1674
|
-
value=current_solution.data.follow_producer,
|
|
1675
|
-
info="是否关注租借了支援卡的制作人。"
|
|
1676
|
-
)
|
|
1677
|
-
self_study_lesson = gr.Dropdown(
|
|
1678
|
-
choices=['dance', 'visual', 'vocal'],
|
|
1679
|
-
value=current_solution.data.self_study_lesson,
|
|
1680
|
-
label='文化课自习时选项',
|
|
1681
|
-
info='自习课类型。'
|
|
1682
|
-
)
|
|
1683
|
-
prefer_lesson_ap = gr.Checkbox(
|
|
1684
|
-
label="SP 课程优先",
|
|
1685
|
-
value=current_solution.data.prefer_lesson_ap,
|
|
1686
|
-
info="优先 SP 课程。启用后,若出现 SP 课程,则会优先执行 SP 课程,而不是推荐课程。若出现多个 SP 课程,随机选择一个。"
|
|
1687
|
-
)
|
|
1688
|
-
actions_order = gr.Dropdown(
|
|
1689
|
-
choices=[(action.display_name, action.value) for action in ProduceAction],
|
|
1690
|
-
value=[action.value for action in current_solution.data.actions_order],
|
|
1691
|
-
label="行动优先级",
|
|
1692
|
-
info="每一周的行动将会按这里设置的优先级执行。",
|
|
1693
|
-
multiselect=True
|
|
1694
|
-
)
|
|
1695
|
-
recommend_card_detection_mode = gr.Dropdown(
|
|
1696
|
-
choices=[
|
|
1697
|
-
(RecommendCardDetectionMode.NORMAL.display_name, RecommendCardDetectionMode.NORMAL.value),
|
|
1698
|
-
(RecommendCardDetectionMode.STRICT.display_name, RecommendCardDetectionMode.STRICT.value)
|
|
1699
|
-
],
|
|
1700
|
-
value=current_solution.data.recommend_card_detection_mode.value,
|
|
1701
|
-
label="推荐卡检测模式",
|
|
1702
|
-
info="推荐卡检测模式。严格模式下,识别速度会降低,但识别准确率会提高。"
|
|
1703
|
-
)
|
|
1704
|
-
use_ap_drink = gr.Checkbox(
|
|
1705
|
-
label="AP 不足时自动使用 AP 饮料",
|
|
1706
|
-
value=current_solution.data.use_ap_drink,
|
|
1707
|
-
info="AP 不足时自动使用 AP 饮料"
|
|
1708
|
-
)
|
|
1709
|
-
skip_commu = gr.Checkbox(
|
|
1710
|
-
label="检测并跳过交流",
|
|
1711
|
-
value=current_solution.data.skip_commu,
|
|
1712
|
-
info="检测并跳过交流"
|
|
1713
|
-
)
|
|
1714
|
-
|
|
1715
|
-
# 添加保存按钮
|
|
1716
|
-
save_solution_btn = gr.Button("保存培育方案", variant="primary")
|
|
1717
|
-
|
|
1718
|
-
# 添加事件处理
|
|
1719
|
-
def update_kotone_warning(selected_idol, recommend_card_detection_mode):
|
|
1720
|
-
# Handle case where selected_idol is None (no selection)
|
|
1721
|
-
# selected_idol is a single string (skin_id), not a list
|
|
1722
|
-
if selected_idol is None:
|
|
1723
|
-
has_kotone = False
|
|
1724
|
-
else:
|
|
1725
|
-
has_kotone = "藤田ことね" in selected_idol
|
|
1726
|
-
is_strict_mode = recommend_card_detection_mode == RecommendCardDetectionMode.STRICT.value
|
|
1727
|
-
return gr.Markdown(visible=has_kotone and not is_strict_mode)
|
|
1728
|
-
|
|
1729
|
-
def on_solution_change(solution_id):
|
|
1730
|
-
"""当选择的培育方案改变时,更新所有设置组件"""
|
|
1731
|
-
if not solution_id:
|
|
1732
|
-
return [
|
|
1733
|
-
gr.Textbox(value="", visible=False), # solution_name
|
|
1734
|
-
gr.Textbox(value="", visible=False), # solution_description
|
|
1735
|
-
gr.Dropdown(visible=False), # produce_mode
|
|
1736
|
-
gr.Dropdown(visible=False), # produce_idols
|
|
1737
|
-
gr.Markdown(visible=False), # kotone_warning
|
|
1738
|
-
gr.Checkbox(visible=False), # auto_set_memory
|
|
1739
|
-
gr.Group(visible=False), # memory_sets_group
|
|
1740
|
-
gr.Dropdown(visible=False), # memory_sets
|
|
1741
|
-
gr.Checkbox(visible=False), # auto_set_support
|
|
1742
|
-
gr.Group(visible=False), # support_card_sets_group
|
|
1743
|
-
gr.Dropdown(visible=False), # support_card_sets
|
|
1744
|
-
gr.Checkbox(visible=False), # use_pt_boost
|
|
1745
|
-
gr.Checkbox(visible=False), # use_note_boost
|
|
1746
|
-
gr.Checkbox(visible=False), # follow_producer
|
|
1747
|
-
gr.Dropdown(visible=False), # self_study_lesson
|
|
1748
|
-
gr.Checkbox(visible=False), # prefer_lesson_ap
|
|
1749
|
-
gr.Dropdown(visible=False), # actions_order
|
|
1750
|
-
gr.Dropdown(visible=False), # recommend_card_detection_mode
|
|
1751
|
-
gr.Checkbox(visible=False), # use_ap_drink
|
|
1752
|
-
gr.Checkbox(visible=False), # skip_commu
|
|
1753
|
-
gr.Button(visible=False), # save_solution_btn
|
|
1754
|
-
]
|
|
1755
|
-
|
|
1756
|
-
try:
|
|
1757
|
-
solution = solution_manager.read(solution_id)
|
|
1758
|
-
has_kotone = bool(solution.data.idol and "藤田ことね" in solution.data.idol)
|
|
1759
|
-
is_strict_mode = solution.data.recommend_card_detection_mode == RecommendCardDetectionMode.STRICT
|
|
1760
|
-
|
|
1761
|
-
return [
|
|
1762
|
-
gr.Textbox(value=solution.name, visible=True),
|
|
1763
|
-
gr.Textbox(value=solution.description or "", visible=True),
|
|
1764
|
-
gr.Dropdown(value=solution.data.mode, visible=True),
|
|
1765
|
-
gr.Dropdown(value=solution.data.idol, visible=True),
|
|
1766
|
-
gr.Markdown(visible=has_kotone and not is_strict_mode),
|
|
1767
|
-
gr.Checkbox(value=solution.data.auto_set_memory, visible=True),
|
|
1768
|
-
gr.Group(visible=not solution.data.auto_set_memory),
|
|
1769
|
-
gr.Dropdown(value=str(solution.data.memory_set) if solution.data.memory_set else None, visible=True),
|
|
1770
|
-
gr.Checkbox(value=solution.data.auto_set_support_card, visible=True),
|
|
1771
|
-
gr.Group(visible=not solution.data.auto_set_support_card),
|
|
1772
|
-
gr.Dropdown(value=str(solution.data.support_card_set) if solution.data.support_card_set else None, visible=True),
|
|
1773
|
-
gr.Checkbox(value=solution.data.use_pt_boost, visible=True),
|
|
1774
|
-
gr.Checkbox(value=solution.data.use_note_boost, visible=True),
|
|
1775
|
-
gr.Checkbox(value=solution.data.follow_producer, visible=True),
|
|
1776
|
-
gr.Dropdown(value=solution.data.self_study_lesson, visible=True),
|
|
1777
|
-
gr.Checkbox(value=solution.data.prefer_lesson_ap, visible=True),
|
|
1778
|
-
gr.Dropdown(value=[action.value for action in solution.data.actions_order], visible=True),
|
|
1779
|
-
gr.Dropdown(value=solution.data.recommend_card_detection_mode.value, visible=True),
|
|
1780
|
-
gr.Checkbox(value=solution.data.use_ap_drink, visible=True),
|
|
1781
|
-
gr.Checkbox(value=solution.data.skip_commu, visible=True),
|
|
1782
|
-
gr.Button(visible=True), # save_solution_btn
|
|
1783
|
-
]
|
|
1784
|
-
except ProduceSolutionNotFoundError:
|
|
1785
|
-
gr.Warning(f"培育方案 {solution_id} 不存在")
|
|
1786
|
-
return on_solution_change(None)
|
|
1787
|
-
except Exception as e:
|
|
1788
|
-
gr.Error(f"加载培育方案失败:{str(e)}")
|
|
1789
|
-
return on_solution_change(None)
|
|
1790
|
-
|
|
1791
|
-
def on_new_solution():
|
|
1792
|
-
"""创建新的培育方案"""
|
|
1793
|
-
try:
|
|
1794
|
-
new_solution = solution_manager.new("新培育方案")
|
|
1795
|
-
solution_manager.save(new_solution.id, new_solution)
|
|
1796
|
-
|
|
1797
|
-
# 重新列出所有方案
|
|
1798
|
-
solutions = solution_manager.list()
|
|
1799
|
-
solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
|
|
1800
|
-
|
|
1801
|
-
gr.Success("新培育方案创建成功")
|
|
1802
|
-
|
|
1803
|
-
# 更新培育 Tab 下拉框并保持设置 Tab 当前选中值
|
|
1804
|
-
updated_dropdown_produce = gr.Dropdown(choices=solution_choices, value=new_solution.id)
|
|
1805
|
-
if settings_dropdown is not None:
|
|
1806
|
-
current_selected = self.current_config.options.produce.selected_solution_id
|
|
1807
|
-
updated_dropdown_settings = gr.Dropdown(choices=solution_choices, value=current_selected)
|
|
1808
|
-
return [updated_dropdown_produce, updated_dropdown_settings]
|
|
1809
|
-
else:
|
|
1810
|
-
return updated_dropdown_produce
|
|
1811
|
-
except Exception as e:
|
|
1812
|
-
gr.Error(f"创建培育方案失败:{str(e)}")
|
|
1813
|
-
if settings_dropdown is not None:
|
|
1814
|
-
return [gr.Dropdown(), gr.Dropdown()]
|
|
1815
|
-
else:
|
|
1816
|
-
return gr.Dropdown()
|
|
1817
|
-
|
|
1818
|
-
def on_delete_solution(solution_id):
|
|
1819
|
-
"""删除当前培育方案"""
|
|
1820
|
-
if not solution_id:
|
|
1821
|
-
gr.Warning("请先选择要删除的培育方案")
|
|
1822
|
-
if settings_dropdown is not None:
|
|
1823
|
-
return [gr.Dropdown(), gr.Dropdown()]
|
|
1824
|
-
else:
|
|
1825
|
-
return gr.Dropdown()
|
|
1826
|
-
|
|
1827
|
-
# 若尝试删除当前正在使用的培育方案,则拒绝并提示
|
|
1828
|
-
if solution_id == self.current_config.options.produce.selected_solution_id:
|
|
1829
|
-
gr.Warning("不可删除选中方案。请先在设置中选择其他方案,保存后再删除此方案。")
|
|
1830
|
-
if settings_dropdown is not None:
|
|
1831
|
-
return [gr.Dropdown(), gr.Dropdown()]
|
|
1832
|
-
else:
|
|
1833
|
-
return gr.Dropdown()
|
|
1834
|
-
|
|
1835
|
-
try:
|
|
1836
|
-
solution_manager.delete(solution_id)
|
|
1837
|
-
|
|
1838
|
-
# 重新列出所有方案
|
|
1839
|
-
solutions = solution_manager.list()
|
|
1840
|
-
solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
|
|
1841
|
-
|
|
1842
|
-
gr.Success("培育方案删除成功")
|
|
1843
|
-
# 删除方案后,保持当前培育方案的选择不变
|
|
1844
|
-
current_selected = self.current_config.options.produce.selected_solution_id
|
|
1845
|
-
if current_selected not in [sol.id for sol in solutions]:
|
|
1846
|
-
current_selected = None # 已不存在
|
|
1847
|
-
|
|
1848
|
-
updated_dropdown = gr.Dropdown(choices=solution_choices, value=current_selected)
|
|
1849
|
-
if settings_dropdown is not None:
|
|
1850
|
-
return [updated_dropdown, updated_dropdown]
|
|
1851
|
-
else:
|
|
1852
|
-
return updated_dropdown
|
|
1853
|
-
except Exception as e:
|
|
1854
|
-
gr.Error(f"删除培育方案失败:{str(e)}")
|
|
1855
|
-
if settings_dropdown is not None:
|
|
1856
|
-
return [gr.Dropdown(), gr.Dropdown()]
|
|
1857
|
-
else:
|
|
1858
|
-
return gr.Dropdown()
|
|
1859
|
-
|
|
1860
|
-
def on_save_solution(solution_id, name, description, mode, idols, auto_memory, memory_sets,
|
|
1861
|
-
auto_support, support_card_sets, pt_boost, note_boost, follow_producer, study_lesson, prefer_ap,
|
|
1862
|
-
actions, detection_mode, ap_drink, skip_commu_val):
|
|
1863
|
-
"""保存培育方案"""
|
|
1864
|
-
if not solution_id:
|
|
1865
|
-
gr.Warning("请先选择要保存的培育方案")
|
|
1866
|
-
if settings_dropdown is not None:
|
|
1867
|
-
return [gr.Dropdown(), gr.Dropdown()]
|
|
1868
|
-
else:
|
|
1869
|
-
return gr.Dropdown()
|
|
1870
|
-
|
|
1871
|
-
try:
|
|
1872
|
-
# 构建培育数据
|
|
1873
|
-
produce_data = ProduceData(
|
|
1874
|
-
mode=mode,
|
|
1875
|
-
idol=idols if idols else None,
|
|
1876
|
-
memory_set=int(memory_sets) if memory_sets else None,
|
|
1877
|
-
support_card_set=int(support_card_sets) if support_card_sets else None,
|
|
1878
|
-
auto_set_memory=auto_memory,
|
|
1879
|
-
auto_set_support_card=auto_support,
|
|
1880
|
-
use_pt_boost=pt_boost,
|
|
1881
|
-
use_note_boost=note_boost,
|
|
1882
|
-
follow_producer=follow_producer,
|
|
1883
|
-
self_study_lesson=study_lesson,
|
|
1884
|
-
prefer_lesson_ap=prefer_ap,
|
|
1885
|
-
actions_order=[ProduceAction(action) for action in actions] if actions else [],
|
|
1886
|
-
recommend_card_detection_mode=RecommendCardDetectionMode(detection_mode),
|
|
1887
|
-
use_ap_drink=ap_drink,
|
|
1888
|
-
skip_commu=skip_commu_val
|
|
1889
|
-
)
|
|
1890
|
-
|
|
1891
|
-
# 构建方案对象
|
|
1892
|
-
solution = ProduceSolution(
|
|
1893
|
-
id=solution_id,
|
|
1894
|
-
name=name or "未命名方案",
|
|
1895
|
-
description=description,
|
|
1896
|
-
data=produce_data
|
|
1897
|
-
)
|
|
1898
|
-
|
|
1899
|
-
# 保存方案
|
|
1900
|
-
solution_manager.save(solution_id, solution)
|
|
1901
|
-
|
|
1902
|
-
# 重新列出所有方案(确保没有重复项)
|
|
1903
|
-
solutions = solution_manager.list()
|
|
1904
|
-
solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
|
|
1905
|
-
|
|
1906
|
-
gr.Success("培育方案保存成功")
|
|
1907
|
-
# 根据是否有设置Tab的下拉框来决定返回值
|
|
1908
|
-
updated_dropdown = gr.Dropdown(choices=solution_choices, value=solution_id)
|
|
1909
|
-
if settings_dropdown is not None:
|
|
1910
|
-
return [updated_dropdown, updated_dropdown]
|
|
1911
|
-
else:
|
|
1912
|
-
return updated_dropdown
|
|
1913
|
-
except Exception as e:
|
|
1914
|
-
gr.Error(f"保存培育方案失败:{str(e)}")
|
|
1915
|
-
if settings_dropdown is not None:
|
|
1916
|
-
return [gr.Dropdown(), gr.Dropdown()]
|
|
1917
|
-
else:
|
|
1918
|
-
return gr.Dropdown()
|
|
1919
|
-
|
|
1920
|
-
# 绑定事件
|
|
1921
|
-
# 为所有控件绑定change事件,无论是否有选中方案
|
|
1922
|
-
auto_set_memory.change(
|
|
1923
|
-
fn=lambda x: gr.Group(visible=not x),
|
|
1924
|
-
inputs=[auto_set_memory],
|
|
1925
|
-
outputs=[memory_sets_group]
|
|
1926
|
-
)
|
|
1927
|
-
|
|
1928
|
-
auto_set_support.change(
|
|
1929
|
-
fn=lambda x: gr.Group(visible=not x),
|
|
1930
|
-
inputs=[auto_set_support],
|
|
1931
|
-
outputs=[support_card_sets_group]
|
|
1932
|
-
)
|
|
1933
|
-
|
|
1934
|
-
if current_solution is not None:
|
|
1935
|
-
recommend_card_detection_mode.change(
|
|
1936
|
-
fn=update_kotone_warning,
|
|
1937
|
-
inputs=[produce_idols, recommend_card_detection_mode],
|
|
1938
|
-
outputs=kotone_warning
|
|
1939
|
-
)
|
|
1940
|
-
produce_idols.change(
|
|
1941
|
-
fn=update_kotone_warning,
|
|
1942
|
-
inputs=[produce_idols, recommend_card_detection_mode],
|
|
1943
|
-
outputs=kotone_warning
|
|
1944
|
-
)
|
|
1945
|
-
|
|
1946
|
-
# 绑定方案管理事件
|
|
1947
|
-
solution_dropdown.change(
|
|
1948
|
-
fn=on_solution_change,
|
|
1949
|
-
inputs=[solution_dropdown],
|
|
1950
|
-
outputs=[
|
|
1951
|
-
solution_name, solution_description,
|
|
1952
|
-
produce_mode, produce_idols, kotone_warning,
|
|
1953
|
-
auto_set_memory, memory_sets_group, memory_sets,
|
|
1954
|
-
auto_set_support, support_card_sets_group, support_card_sets,
|
|
1955
|
-
use_pt_boost, use_note_boost, follow_producer,
|
|
1956
|
-
self_study_lesson, prefer_lesson_ap, actions_order,
|
|
1957
|
-
recommend_card_detection_mode, use_ap_drink, skip_commu,
|
|
1958
|
-
save_solution_btn
|
|
1959
|
-
]
|
|
1960
|
-
)
|
|
1961
|
-
|
|
1962
|
-
# 准备输出列表,如果设置Tab的下拉框存在,则同时更新
|
|
1963
|
-
outputs_for_new = [solution_dropdown]
|
|
1964
|
-
outputs_for_delete = [solution_dropdown]
|
|
1965
|
-
outputs_for_save = [solution_dropdown]
|
|
1966
|
-
|
|
1967
|
-
if settings_dropdown is not None:
|
|
1968
|
-
outputs_for_new.append(settings_dropdown)
|
|
1969
|
-
outputs_for_delete.append(settings_dropdown)
|
|
1970
|
-
outputs_for_save.append(settings_dropdown)
|
|
1971
|
-
|
|
1972
|
-
new_solution_btn.click(
|
|
1973
|
-
fn=on_new_solution,
|
|
1974
|
-
outputs=outputs_for_new
|
|
1975
|
-
)
|
|
1976
|
-
|
|
1977
|
-
delete_solution_btn.click(
|
|
1978
|
-
fn=on_delete_solution,
|
|
1979
|
-
inputs=[solution_dropdown],
|
|
1980
|
-
outputs=outputs_for_delete
|
|
1981
|
-
)
|
|
1982
|
-
|
|
1983
|
-
# 绑定保存按钮事件
|
|
1984
|
-
save_solution_btn.click(
|
|
1985
|
-
fn=on_save_solution,
|
|
1986
|
-
inputs=[
|
|
1987
|
-
solution_dropdown, solution_name, solution_description,
|
|
1988
|
-
produce_mode, produce_idols,
|
|
1989
|
-
auto_set_memory, memory_sets, auto_set_support, support_card_sets,
|
|
1990
|
-
use_pt_boost, use_note_boost, follow_producer,
|
|
1991
|
-
self_study_lesson, prefer_lesson_ap, actions_order,
|
|
1992
|
-
recommend_card_detection_mode, use_ap_drink, skip_commu
|
|
1993
|
-
],
|
|
1994
|
-
outputs=outputs_for_save
|
|
1995
|
-
)
|
|
1996
|
-
|
|
1997
|
-
def _create_club_reward_settings(self) -> ConfigBuilderReturnValue:
|
|
1998
|
-
with gr.Column():
|
|
1999
|
-
gr.Markdown("### 社团奖励设置")
|
|
2000
|
-
club_reward_enabled = gr.Checkbox(
|
|
2001
|
-
label="启用社团奖励",
|
|
2002
|
-
value=self.current_config.options.club_reward.enabled,
|
|
2003
|
-
info=ClubRewardConfig.model_fields['enabled'].description
|
|
2004
|
-
)
|
|
2005
|
-
with gr.Group(visible=self.current_config.options.club_reward.enabled) as club_reward_group:
|
|
2006
|
-
selected_note = gr.Dropdown(
|
|
2007
|
-
choices=list(DailyMoneyShopItems.note_items()),
|
|
2008
|
-
value=self.current_config.options.club_reward.selected_note,
|
|
2009
|
-
label="想在社团奖励中获取到的笔记",
|
|
2010
|
-
interactive=True,
|
|
2011
|
-
info=ClubRewardConfig.model_fields['selected_note'].description
|
|
2012
|
-
)
|
|
2013
|
-
club_reward_enabled.change(
|
|
2014
|
-
fn=lambda x: gr.Group(visible=x),
|
|
2015
|
-
inputs=[club_reward_enabled],
|
|
2016
|
-
outputs=[club_reward_group]
|
|
2017
|
-
)
|
|
2018
|
-
|
|
2019
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
2020
|
-
config.club_reward.enabled = data['club_reward_enabled']
|
|
2021
|
-
config.club_reward.selected_note = DailyMoneyShopItems(data['selected_note'])
|
|
2022
|
-
|
|
2023
|
-
return set_config, {
|
|
2024
|
-
'club_reward_enabled': club_reward_enabled,
|
|
2025
|
-
'selected_note': selected_note
|
|
2026
|
-
}
|
|
2027
|
-
|
|
2028
|
-
def _create_capsule_toys_settings(self) -> ConfigBuilderReturnValue:
|
|
2029
|
-
with gr.Column():
|
|
2030
|
-
gr.Markdown("### 扭蛋设置")
|
|
2031
|
-
capsule_toys_enabled = gr.Checkbox(
|
|
2032
|
-
label="是否启用自动扭蛋机",
|
|
2033
|
-
value=self.current_config.options.capsule_toys.enabled,
|
|
2034
|
-
info=CapsuleToysConfig.model_fields['enabled'].description
|
|
2035
|
-
)
|
|
2036
|
-
min_value = 0
|
|
2037
|
-
max_value = 10
|
|
2038
|
-
with gr.Group(visible=self.current_config.options.capsule_toys.enabled) as capsule_toys_group:
|
|
2039
|
-
friend_capsule_toys_count = gr.Number(
|
|
2040
|
-
value=self.current_config.options.capsule_toys.friend_capsule_toys_count,
|
|
2041
|
-
label="好友扭蛋机的扭蛋次数",
|
|
2042
|
-
info=CapsuleToysConfig.model_fields['friend_capsule_toys_count'].description,
|
|
2043
|
-
minimum=0,
|
|
2044
|
-
maximum=5
|
|
2045
|
-
)
|
|
2046
|
-
sense_capsule_toys_count = gr.Number(
|
|
2047
|
-
value=self.current_config.options.capsule_toys.sense_capsule_toys_count,
|
|
2048
|
-
label="感性扭蛋机的扭蛋次数",
|
|
2049
|
-
info=CapsuleToysConfig.model_fields['sense_capsule_toys_count'].description,
|
|
2050
|
-
minimum=0,
|
|
2051
|
-
maximum=5
|
|
2052
|
-
)
|
|
2053
|
-
logic_capsule_toys_count = gr.Number(
|
|
2054
|
-
value=self.current_config.options.capsule_toys.logic_capsule_toys_count,
|
|
2055
|
-
label="逻辑扭蛋机的扭蛋次数",
|
|
2056
|
-
info=CapsuleToysConfig.model_fields['logic_capsule_toys_count'].description,
|
|
2057
|
-
minimum=0,
|
|
2058
|
-
maximum=5
|
|
2059
|
-
)
|
|
2060
|
-
anomaly_capsule_toys_count = gr.Number(
|
|
2061
|
-
value=self.current_config.options.capsule_toys.anomaly_capsule_toys_count,
|
|
2062
|
-
label="非凡扭蛋机的扭蛋次数",
|
|
2063
|
-
info=CapsuleToysConfig.model_fields['anomaly_capsule_toys_count'].description,
|
|
2064
|
-
minimum=0,
|
|
2065
|
-
maximum=5
|
|
2066
|
-
)
|
|
2067
|
-
capsule_toys_enabled.change(
|
|
2068
|
-
fn=lambda x: gr.Group(visible=x),
|
|
2069
|
-
inputs=[capsule_toys_enabled],
|
|
2070
|
-
outputs=[capsule_toys_group]
|
|
2071
|
-
)
|
|
2072
|
-
|
|
2073
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
2074
|
-
config.capsule_toys.enabled = data['capsule_toys_enabled']
|
|
2075
|
-
config.capsule_toys.friend_capsule_toys_count = data['friend_capsule_toys_count']
|
|
2076
|
-
config.capsule_toys.sense_capsule_toys_count = data['sense_capsule_toys_count']
|
|
2077
|
-
config.capsule_toys.logic_capsule_toys_count = data['logic_capsule_toys_count']
|
|
2078
|
-
config.capsule_toys.anomaly_capsule_toys_count = data['anomaly_capsule_toys_count']
|
|
2079
|
-
|
|
2080
|
-
return set_config, {
|
|
2081
|
-
'capsule_toys_enabled': capsule_toys_enabled,
|
|
2082
|
-
'friend_capsule_toys_count': friend_capsule_toys_count,
|
|
2083
|
-
'sense_capsule_toys_count': sense_capsule_toys_count,
|
|
2084
|
-
'logic_capsule_toys_count': logic_capsule_toys_count,
|
|
2085
|
-
'anomaly_capsule_toys_count': anomaly_capsule_toys_count
|
|
2086
|
-
}
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
def _create_start_game_settings(self) -> ConfigBuilderReturnValue:
|
|
2090
|
-
with gr.Column():
|
|
2091
|
-
gr.Markdown("### 启动游戏设置")
|
|
2092
|
-
start_game_enabled = gr.Checkbox(
|
|
2093
|
-
label="是否启用 自动启动游戏",
|
|
2094
|
-
value=self.current_config.options.start_game.enabled,
|
|
2095
|
-
info=StartGameConfig.model_fields['enabled'].description
|
|
2096
|
-
)
|
|
2097
|
-
with gr.Group(visible=self.current_config.options.start_game.enabled) as start_game_group:
|
|
2098
|
-
start_through_kuyo = gr.Checkbox(
|
|
2099
|
-
label="是否通过Kuyo启动游戏",
|
|
2100
|
-
value=self.current_config.options.start_game.start_through_kuyo,
|
|
2101
|
-
info=StartGameConfig.model_fields['start_through_kuyo'].description
|
|
2102
|
-
)
|
|
2103
|
-
game_package_name = gr.Textbox(
|
|
2104
|
-
value=self.current_config.options.start_game.game_package_name,
|
|
2105
|
-
label="游戏包名",
|
|
2106
|
-
info=StartGameConfig.model_fields['game_package_name'].description
|
|
2107
|
-
)
|
|
2108
|
-
kuyo_package_name = gr.Textbox(
|
|
2109
|
-
value=self.current_config.options.start_game.kuyo_package_name,
|
|
2110
|
-
label="Kuyo包名",
|
|
2111
|
-
info=StartGameConfig.model_fields['kuyo_package_name'].description
|
|
2112
|
-
)
|
|
2113
|
-
disable_gakumas_localify = gr.Checkbox(
|
|
2114
|
-
label="禁用 Gakumas Localify 汉化插件",
|
|
2115
|
-
value=self.current_config.options.start_game.disable_gakumas_localify,
|
|
2116
|
-
info=StartGameConfig.model_fields['disable_gakumas_localify'].description
|
|
2117
|
-
)
|
|
2118
|
-
dmm_game_path = gr.Textbox(
|
|
2119
|
-
value=self.current_config.options.start_game.dmm_game_path or "",
|
|
2120
|
-
label="DMM 版游戏路径",
|
|
2121
|
-
info=StartGameConfig.model_fields['dmm_game_path'].description,
|
|
2122
|
-
placeholder="例:F:\\Games\\gakumas\\gakumas.exe"
|
|
2123
|
-
)
|
|
2124
|
-
start_game_enabled.change(
|
|
2125
|
-
fn=lambda x: gr.Group(visible=x),
|
|
2126
|
-
inputs=[start_game_enabled],
|
|
2127
|
-
outputs=[start_game_group]
|
|
2128
|
-
)
|
|
2129
|
-
|
|
2130
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
2131
|
-
config.start_game.enabled = data['start_game_enabled']
|
|
2132
|
-
config.start_game.start_through_kuyo = data['start_through_kuyo']
|
|
2133
|
-
config.start_game.game_package_name = data['game_package_name']
|
|
2134
|
-
config.start_game.kuyo_package_name = data['kuyo_package_name']
|
|
2135
|
-
config.start_game.disable_gakumas_localify = data['disable_gakumas_localify']
|
|
2136
|
-
config.start_game.dmm_game_path = data['dmm_game_path'] if data['dmm_game_path'] else None
|
|
2137
|
-
|
|
2138
|
-
return set_config, {
|
|
2139
|
-
'start_game_enabled': start_game_enabled,
|
|
2140
|
-
'start_through_kuyo': start_through_kuyo,
|
|
2141
|
-
'game_package_name': game_package_name,
|
|
2142
|
-
'kuyo_package_name': kuyo_package_name,
|
|
2143
|
-
'disable_gakumas_localify': disable_gakumas_localify,
|
|
2144
|
-
'dmm_game_path': dmm_game_path
|
|
2145
|
-
}
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
def _create_end_game_settings(self) -> ConfigBuilderReturnValue:
|
|
2149
|
-
with gr.Column():
|
|
2150
|
-
gr.Markdown("### 关闭游戏设置")
|
|
2151
|
-
gr.Markdown("在所有任务执行完毕后执行下面这些操作:\n(执行单个任务时不会触发)")
|
|
2152
|
-
exit_kaa = gr.Checkbox(
|
|
2153
|
-
label="退出 kaa",
|
|
2154
|
-
value=self.current_config.options.end_game.exit_kaa,
|
|
2155
|
-
info=EndGameConfig.model_fields['exit_kaa'].description
|
|
2156
|
-
)
|
|
2157
|
-
kill_game = gr.Checkbox(
|
|
2158
|
-
label="关闭游戏",
|
|
2159
|
-
value=self.current_config.options.end_game.kill_game,
|
|
2160
|
-
info=EndGameConfig.model_fields['kill_game'].description
|
|
2161
|
-
)
|
|
2162
|
-
kill_dmm = gr.Checkbox(
|
|
2163
|
-
label="关闭 DMM",
|
|
2164
|
-
value=self.current_config.options.end_game.kill_dmm,
|
|
2165
|
-
info=EndGameConfig.model_fields['kill_dmm'].description
|
|
2166
|
-
)
|
|
2167
|
-
kill_emulator = gr.Checkbox(
|
|
2168
|
-
label="关闭模拟器",
|
|
2169
|
-
value=self.current_config.options.end_game.kill_emulator,
|
|
2170
|
-
info=EndGameConfig.model_fields['kill_emulator'].description
|
|
2171
|
-
)
|
|
2172
|
-
shutdown = gr.Checkbox(
|
|
2173
|
-
label="关闭系统",
|
|
2174
|
-
value=self.current_config.options.end_game.shutdown,
|
|
2175
|
-
info=EndGameConfig.model_fields['shutdown'].description
|
|
2176
|
-
)
|
|
2177
|
-
hibernate = gr.Checkbox(
|
|
2178
|
-
label="休眠系统",
|
|
2179
|
-
value=self.current_config.options.end_game.hibernate,
|
|
2180
|
-
info=EndGameConfig.model_fields['hibernate'].description
|
|
2181
|
-
)
|
|
2182
|
-
restore_gakumas_localify = gr.Checkbox(
|
|
2183
|
-
label="恢复 Gakumas Localify 汉化插件状态",
|
|
2184
|
-
value=self.current_config.options.end_game.restore_gakumas_localify,
|
|
2185
|
-
info=EndGameConfig.model_fields['restore_gakumas_localify'].description
|
|
2186
|
-
)
|
|
2187
|
-
|
|
2188
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
2189
|
-
config.end_game.exit_kaa = data['exit_kaa']
|
|
2190
|
-
config.end_game.kill_game = data['kill_game']
|
|
2191
|
-
config.end_game.kill_dmm = data['kill_dmm']
|
|
2192
|
-
config.end_game.kill_emulator = data['kill_emulator']
|
|
2193
|
-
config.end_game.shutdown = data['shutdown']
|
|
2194
|
-
config.end_game.hibernate = data['hibernate']
|
|
2195
|
-
config.end_game.restore_gakumas_localify = data['restore_gakumas_localify']
|
|
2196
|
-
|
|
2197
|
-
return set_config, {
|
|
2198
|
-
'exit_kaa': exit_kaa,
|
|
2199
|
-
'kill_game': kill_game,
|
|
2200
|
-
'kill_dmm': kill_dmm,
|
|
2201
|
-
'kill_emulator': kill_emulator,
|
|
2202
|
-
'shutdown': shutdown,
|
|
2203
|
-
'hibernate': hibernate,
|
|
2204
|
-
'restore_gakumas_localify': restore_gakumas_localify
|
|
2205
|
-
}
|
|
2206
|
-
|
|
2207
|
-
def _create_activity_funds_settings(self) -> ConfigBuilderReturnValue:
|
|
2208
|
-
with gr.Column():
|
|
2209
|
-
gr.Markdown("### 活动费设置")
|
|
2210
|
-
activity_funds = gr.Checkbox(
|
|
2211
|
-
label="启用收取活动费",
|
|
2212
|
-
value=self.current_config.options.activity_funds.enabled,
|
|
2213
|
-
info=ActivityFundsConfig.model_fields['enabled'].description
|
|
2214
|
-
)
|
|
2215
|
-
|
|
2216
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
2217
|
-
config.activity_funds.enabled = data['activity_funds']
|
|
2218
|
-
|
|
2219
|
-
return set_config, {
|
|
2220
|
-
'activity_funds': activity_funds
|
|
2221
|
-
}
|
|
2222
|
-
|
|
2223
|
-
def _create_presents_settings(self) -> ConfigBuilderReturnValue:
|
|
2224
|
-
with gr.Column():
|
|
2225
|
-
gr.Markdown("### 礼物设置")
|
|
2226
|
-
presents = gr.Checkbox(
|
|
2227
|
-
label="启用收取礼物",
|
|
2228
|
-
value=self.current_config.options.presents.enabled,
|
|
2229
|
-
info=PresentsConfig.model_fields['enabled'].description
|
|
2230
|
-
)
|
|
2231
|
-
|
|
2232
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
2233
|
-
config.presents.enabled = data['presents']
|
|
2234
|
-
|
|
2235
|
-
return set_config, {
|
|
2236
|
-
'presents': presents
|
|
2237
|
-
}
|
|
2238
|
-
|
|
2239
|
-
def _create_mission_reward_settings(self) -> ConfigBuilderReturnValue:
|
|
2240
|
-
with gr.Column():
|
|
2241
|
-
gr.Markdown("### 任务奖励设置")
|
|
2242
|
-
mission_reward = gr.Checkbox(
|
|
2243
|
-
label="启用领取任务奖励",
|
|
2244
|
-
value=self.current_config.options.mission_reward.enabled,
|
|
2245
|
-
info=MissionRewardConfig.model_fields['enabled'].description
|
|
2246
|
-
)
|
|
2247
|
-
|
|
2248
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
2249
|
-
config.mission_reward.enabled = data['mission_reward']
|
|
2250
|
-
|
|
2251
|
-
return set_config, {
|
|
2252
|
-
'mission_reward': mission_reward
|
|
2253
|
-
}
|
|
2254
|
-
|
|
2255
|
-
def _create_upgrade_support_card_settings(self) -> ConfigBuilderReturnValue:
|
|
2256
|
-
with gr.Column():
|
|
2257
|
-
gr.Markdown("### 升级支援卡设置")
|
|
2258
|
-
upgrade_support_card_enabled = gr.Checkbox(
|
|
2259
|
-
label="启用升级支援卡",
|
|
2260
|
-
value=self.current_config.options.upgrade_support_card.enabled,
|
|
2261
|
-
info=UpgradeSupportCardConfig.model_fields['enabled'].description
|
|
2262
|
-
)
|
|
2263
|
-
|
|
2264
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
2265
|
-
config.upgrade_support_card.enabled = data['upgrade_support_card_enabled']
|
|
2266
|
-
|
|
2267
|
-
return set_config, {
|
|
2268
|
-
'upgrade_support_card_enabled': upgrade_support_card_enabled
|
|
2269
|
-
}
|
|
2270
|
-
|
|
2271
|
-
def _create_trace_settings(self) -> ConfigBuilderReturnValue:
|
|
2272
|
-
with gr.Column():
|
|
2273
|
-
gr.Markdown("### 跟踪设置")
|
|
2274
|
-
trace_recommend_card_detection = gr.Checkbox(
|
|
2275
|
-
label="跟踪推荐卡检测",
|
|
2276
|
-
value=self.current_config.options.trace.recommend_card_detection,
|
|
2277
|
-
info=TraceConfig.model_fields['recommend_card_detection'].description,
|
|
2278
|
-
interactive=True
|
|
2279
|
-
)
|
|
2280
|
-
|
|
2281
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
2282
|
-
config.trace.recommend_card_detection = data['trace_recommend_card_detection']
|
|
2283
|
-
|
|
2284
|
-
return set_config, {
|
|
2285
|
-
'trace_recommend_card_detection': trace_recommend_card_detection
|
|
2286
|
-
}
|
|
2287
|
-
|
|
2288
|
-
def _create_misc_settings(self) -> ConfigBuilderReturnValue:
|
|
2289
|
-
with gr.Column():
|
|
2290
|
-
gr.Markdown("### 杂项设置")
|
|
2291
|
-
check_update = gr.Dropdown(
|
|
2292
|
-
choices=[
|
|
2293
|
-
("启动时检查更新", "startup"),
|
|
2294
|
-
("从不检查更新", "never")
|
|
2295
|
-
],
|
|
2296
|
-
value=self.current_config.options.misc.check_update,
|
|
2297
|
-
label="检查更新时机",
|
|
2298
|
-
info=MiscConfig.model_fields['check_update'].description,
|
|
2299
|
-
interactive=True
|
|
2300
|
-
)
|
|
2301
|
-
auto_install_update = gr.Checkbox(
|
|
2302
|
-
label="自动安装更新",
|
|
2303
|
-
value=self.current_config.options.misc.auto_install_update,
|
|
2304
|
-
info=MiscConfig.model_fields['auto_install_update'].description,
|
|
2305
|
-
interactive=True
|
|
2306
|
-
)
|
|
2307
|
-
expose_to_lan = gr.Checkbox(
|
|
2308
|
-
label="允许局域网访问",
|
|
2309
|
-
value=self.current_config.options.misc.expose_to_lan,
|
|
2310
|
-
info=MiscConfig.model_fields['expose_to_lan'].description,
|
|
2311
|
-
interactive=True
|
|
2312
|
-
)
|
|
2313
|
-
with gr.Row():
|
|
2314
|
-
gr.Button("创建桌面快捷方式").click(
|
|
2315
|
-
fn=self._create_shortcut_button_click(False),
|
|
2316
|
-
outputs=[]
|
|
2317
|
-
)
|
|
2318
|
-
gr.Button("创建一键启动快捷方式").click(
|
|
2319
|
-
fn=self._create_shortcut_button_click(True),
|
|
2320
|
-
outputs=[]
|
|
2321
|
-
)
|
|
2322
|
-
|
|
2323
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
2324
|
-
config.misc.check_update = data['check_update']
|
|
2325
|
-
config.misc.auto_install_update = data['auto_install_update']
|
|
2326
|
-
config.misc.expose_to_lan = data['expose_to_lan']
|
|
2327
|
-
|
|
2328
|
-
return set_config, {
|
|
2329
|
-
'check_update': check_update,
|
|
2330
|
-
'auto_install_update': auto_install_update,
|
|
2331
|
-
'expose_to_lan': expose_to_lan
|
|
2332
|
-
}
|
|
2333
|
-
|
|
2334
|
-
def _create_shortcut_button_click(self, start_immediately: bool) -> Callable[[], None]:
|
|
2335
|
-
def _inner():
|
|
2336
|
-
create_desktop_shortcut(start_immediately)
|
|
2337
|
-
gr.Success("快捷方式创建成功")
|
|
2338
|
-
return _inner
|
|
2339
|
-
|
|
2340
|
-
def _create_idle_settings(self) -> ConfigBuilderReturnValue:
|
|
2341
|
-
with gr.Column():
|
|
2342
|
-
gr.Markdown("### 闲置挂机")
|
|
2343
|
-
idle_enabled = gr.Checkbox(
|
|
2344
|
-
label="启用闲置挂机(任意键暂停、闲置自动恢复)",
|
|
2345
|
-
value=self.current_config.options.idle.enabled,
|
|
2346
|
-
info=IdleModeConfig.model_fields['enabled'].description,
|
|
2347
|
-
interactive=True
|
|
2348
|
-
)
|
|
2349
|
-
idle_seconds = gr.Slider(
|
|
2350
|
-
label="自动恢复触发时间(秒)",
|
|
2351
|
-
minimum=30,
|
|
2352
|
-
maximum=3600,
|
|
2353
|
-
step=10,
|
|
2354
|
-
value=self.current_config.options.idle.idle_seconds,
|
|
2355
|
-
info=IdleModeConfig.model_fields['idle_seconds'].description,
|
|
2356
|
-
interactive=True
|
|
2357
|
-
)
|
|
2358
|
-
idle_minimize_on_pause = gr.Checkbox(
|
|
2359
|
-
label="暂停时最小化游戏窗口",
|
|
2360
|
-
value=self.current_config.options.idle.minimize_on_pause,
|
|
2361
|
-
info=IdleModeConfig.model_fields['minimize_on_pause'].description,
|
|
2362
|
-
interactive=True
|
|
2363
|
-
)
|
|
2364
|
-
|
|
2365
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
2366
|
-
config.idle.enabled = data['idle_enabled']
|
|
2367
|
-
config.idle.idle_seconds = int(data['idle_seconds'])
|
|
2368
|
-
config.idle.minimize_on_pause = data['idle_minimize_on_pause']
|
|
2369
|
-
|
|
2370
|
-
return set_config, {
|
|
2371
|
-
'idle_enabled': idle_enabled,
|
|
2372
|
-
'idle_seconds': idle_seconds,
|
|
2373
|
-
'idle_minimize_on_pause': idle_minimize_on_pause,
|
|
2374
|
-
}
|
|
2375
|
-
|
|
2376
|
-
def _create_debug_settings(self) -> ConfigBuilderReturnValue:
|
|
2377
|
-
"""调试设置:仅在调试时使用"""
|
|
2378
|
-
with gr.Column():
|
|
2379
|
-
gr.Markdown("### 调试设置")
|
|
2380
|
-
gr.Markdown('<div style="color: red;">仅供调试使用。正常运行时务必关闭下面所有的选项。</div>')
|
|
2381
|
-
|
|
2382
|
-
keep_screenshots = gr.Checkbox(
|
|
2383
|
-
label="保留截图数据",
|
|
2384
|
-
value=self.current_config.keep_screenshots,
|
|
2385
|
-
info=UserConfig.model_fields['keep_screenshots'].description,
|
|
2386
|
-
interactive=True
|
|
2387
|
-
)
|
|
2388
|
-
|
|
2389
|
-
trace_recommend_card_detection = gr.Checkbox(
|
|
2390
|
-
label="跟踪推荐卡检测",
|
|
2391
|
-
value=self.current_config.options.trace.recommend_card_detection,
|
|
2392
|
-
info=TraceConfig.model_fields['recommend_card_detection'].description,
|
|
2393
|
-
interactive=True
|
|
2394
|
-
)
|
|
2395
|
-
|
|
2396
|
-
def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
|
|
2397
|
-
# 保留截图数据属于 UserConfig
|
|
2398
|
-
self.current_config.keep_screenshots = data['keep_screenshots']
|
|
2399
|
-
# 跟踪推荐卡检测属于 BaseConfig.trace
|
|
2400
|
-
config.trace.recommend_card_detection = data['trace_recommend_card_detection']
|
|
2401
|
-
|
|
2402
|
-
return set_config, {
|
|
2403
|
-
'keep_screenshots': keep_screenshots,
|
|
2404
|
-
'trace_recommend_card_detection': trace_recommend_card_detection
|
|
2405
|
-
}
|
|
2406
|
-
|
|
2407
|
-
def _create_settings_tab(self) -> None:
|
|
2408
|
-
with gr.Tab("设置"):
|
|
2409
|
-
gr.Markdown("## 设置 <span style='color: red; font-size: 0.8rem; font-weight: normal;'>设置修改后需要保存(网页底部)才会生效!</span>")
|
|
2410
|
-
|
|
2411
|
-
# 模拟器设置
|
|
2412
|
-
emulator_settings = self._create_emulator_settings()
|
|
2413
|
-
|
|
2414
|
-
# 商店购买设置
|
|
2415
|
-
purchase_settings = self._create_purchase_settings()
|
|
2416
|
-
|
|
2417
|
-
# 活动费设置
|
|
2418
|
-
activity_funds_settings = self._create_activity_funds_settings()
|
|
2419
|
-
|
|
2420
|
-
# 礼物设置
|
|
2421
|
-
presents_settings = self._create_presents_settings()
|
|
2422
|
-
|
|
2423
|
-
# 工作设置
|
|
2424
|
-
work_settings = self._create_work_settings()
|
|
2425
|
-
|
|
2426
|
-
# 竞赛设置
|
|
2427
|
-
contest_settings = self._create_contest_settings()
|
|
2428
|
-
|
|
2429
|
-
# 培育设置
|
|
2430
|
-
produce_settings = self._create_produce_settings()
|
|
2431
|
-
|
|
2432
|
-
# 任务奖励设置
|
|
2433
|
-
mission_reward_settings = self._create_mission_reward_settings()
|
|
2434
|
-
|
|
2435
|
-
# 社团奖励设置
|
|
2436
|
-
club_reward_settings = self._create_club_reward_settings()
|
|
2437
|
-
|
|
2438
|
-
# 扭蛋设置
|
|
2439
|
-
capsule_toys_settings = self._create_capsule_toys_settings()
|
|
2440
|
-
|
|
2441
|
-
# 升级支援卡设置
|
|
2442
|
-
upgrade_support_card_settings = self._create_upgrade_support_card_settings()
|
|
2443
|
-
|
|
2444
|
-
# 启动游戏设置
|
|
2445
|
-
start_game_settings = self._create_start_game_settings()
|
|
2446
|
-
|
|
2447
|
-
# 关闭游戏设置
|
|
2448
|
-
end_game_settings = self._create_end_game_settings()
|
|
2449
|
-
|
|
2450
|
-
# 杂项设置
|
|
2451
|
-
misc_settings = self._create_misc_settings()
|
|
2452
|
-
|
|
2453
|
-
# 闲置挂机设置
|
|
2454
|
-
idle_settings = self._create_idle_settings()
|
|
2455
|
-
|
|
2456
|
-
# 调试设置(放在最后)
|
|
2457
|
-
debug_settings = self._create_debug_settings()
|
|
2458
|
-
|
|
2459
|
-
save_btn = gr.Button("保存设置")
|
|
2460
|
-
result = gr.Markdown()
|
|
2461
|
-
|
|
2462
|
-
# 收集所有设置组件
|
|
2463
|
-
all_return_values = [
|
|
2464
|
-
emulator_settings,
|
|
2465
|
-
purchase_settings,
|
|
2466
|
-
activity_funds_settings,
|
|
2467
|
-
presents_settings,
|
|
2468
|
-
work_settings,
|
|
2469
|
-
contest_settings,
|
|
2470
|
-
produce_settings,
|
|
2471
|
-
mission_reward_settings,
|
|
2472
|
-
club_reward_settings,
|
|
2473
|
-
capsule_toys_settings,
|
|
2474
|
-
upgrade_support_card_settings,
|
|
2475
|
-
start_game_settings,
|
|
2476
|
-
end_game_settings,
|
|
2477
|
-
misc_settings,
|
|
2478
|
-
idle_settings,
|
|
2479
|
-
debug_settings
|
|
2480
|
-
] # list of (set_func, { 'key': component, ... })
|
|
2481
|
-
all_components = [list(ret[1].values()) for ret in all_return_values] # [[c1, c2], [c3], ...]
|
|
2482
|
-
all_components = list(chain(*all_components)) # [c1, c2, c3, ...]
|
|
2483
|
-
save_btn.click(
|
|
2484
|
-
fn=partial(self.save_settings2, all_return_values),
|
|
2485
|
-
inputs=all_components,
|
|
2486
|
-
outputs=result
|
|
2487
|
-
)
|
|
2488
|
-
|
|
2489
|
-
def _create_log_tab(self) -> None:
|
|
2490
|
-
with gr.Tab("反馈"):
|
|
2491
|
-
gr.Markdown("## 反馈")
|
|
2492
|
-
gr.Markdown('脚本报错或者卡住?在这里填写信息可以快速反馈!')
|
|
2493
|
-
with gr.Column():
|
|
2494
|
-
report_title = gr.Textbox(label="标题", placeholder="用一句话概括问题")
|
|
2495
|
-
report_type = gr.Dropdown(label="反馈类型", choices=["bug"], value="bug", interactive=False)
|
|
2496
|
-
report_description = gr.Textbox(label="描述", lines=5, placeholder="详细描述问题。例如:什么时候出错、是否每次都出错、出错时的步骤是什么")
|
|
2497
|
-
with gr.Row():
|
|
2498
|
-
upload_report_btn = gr.Button("上传")
|
|
2499
|
-
save_local_report_btn = gr.Button("保存至本地")
|
|
2500
|
-
|
|
2501
|
-
result_text = gr.Markdown("等待操作\n\n\n")
|
|
2502
|
-
|
|
2503
|
-
def on_upload_click(title: str, description: str):
|
|
2504
|
-
yield from _save_bug_report(title, description, self._kaa.version, upload=True)
|
|
2505
|
-
|
|
2506
|
-
def on_save_local_click(title: str, description: str):
|
|
2507
|
-
yield from _save_bug_report(title, description, self._kaa.version, upload=False)
|
|
2508
|
-
|
|
2509
|
-
upload_report_btn.click(
|
|
2510
|
-
fn=on_upload_click,
|
|
2511
|
-
inputs=[report_title, report_description],
|
|
2512
|
-
outputs=[result_text]
|
|
2513
|
-
)
|
|
2514
|
-
save_local_report_btn.click(
|
|
2515
|
-
fn=on_save_local_click,
|
|
2516
|
-
inputs=[report_title, report_description],
|
|
2517
|
-
outputs=[result_text]
|
|
2518
|
-
)
|
|
2519
|
-
|
|
2520
|
-
def _create_whats_new_tab(self) -> None:
|
|
2521
|
-
"""创建更新标签页"""
|
|
2522
|
-
with gr.Tab("更新"):
|
|
2523
|
-
gr.Markdown("## 版本管理")
|
|
2524
|
-
|
|
2525
|
-
# 更新日志
|
|
2526
|
-
with gr.Accordion("更新日志", open=False):
|
|
2527
|
-
from kotonebot.kaa.metadata import WHATS_NEW
|
|
2528
|
-
gr.Markdown(WHATS_NEW)
|
|
2529
|
-
|
|
2530
|
-
# 载入信息按钮
|
|
2531
|
-
load_info_btn = gr.Button("载入信息", variant="primary")
|
|
2532
|
-
|
|
2533
|
-
# 状态信息
|
|
2534
|
-
status_text = gr.Markdown("")
|
|
2535
|
-
|
|
2536
|
-
# 版本选择下拉框(用于安装)
|
|
2537
|
-
version_dropdown = gr.Dropdown(
|
|
2538
|
-
label="选择要安装的版本",
|
|
2539
|
-
choices=[],
|
|
2540
|
-
value=None,
|
|
2541
|
-
visible=False,
|
|
2542
|
-
interactive=True
|
|
2543
|
-
)
|
|
2544
|
-
|
|
2545
|
-
# 安装选定版本按钮
|
|
2546
|
-
install_selected_btn = gr.Button("安装选定版本", visible=False)
|
|
2547
|
-
|
|
2548
|
-
def list_all_versions():
|
|
2549
|
-
"""列出所有可用版本"""
|
|
2550
|
-
import logging
|
|
2551
|
-
logger = logging.getLogger(__name__)
|
|
2552
|
-
|
|
2553
|
-
try:
|
|
2554
|
-
# 构建命令,使用清华镜像源
|
|
2555
|
-
cmd = [
|
|
2556
|
-
sys.executable, "-m", "pip", "index", "versions", "ksaa", "--json", "--pre",
|
|
2557
|
-
"--index-url", "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple",
|
|
2558
|
-
"--trusted-host", "mirrors.tuna.tsinghua.edu.cn"
|
|
2559
|
-
]
|
|
2560
|
-
logger.info(f"执行命令: {' '.join(cmd)}")
|
|
2561
|
-
|
|
2562
|
-
# 使用 pip index versions --json 来获取版本信息
|
|
2563
|
-
result = subprocess.run(
|
|
2564
|
-
cmd,
|
|
2565
|
-
capture_output=True,
|
|
2566
|
-
text=True,
|
|
2567
|
-
timeout=30
|
|
2568
|
-
)
|
|
2569
|
-
|
|
2570
|
-
logger.info(f"命令返回码: {result.returncode}")
|
|
2571
|
-
if result.stdout:
|
|
2572
|
-
logger.info(f"命令输出: {result.stdout[:500]}...") # 只记录前500字符
|
|
2573
|
-
if result.stderr:
|
|
2574
|
-
logger.warning(f"命令错误输出: {result.stderr}")
|
|
2575
|
-
|
|
2576
|
-
if result.returncode != 0:
|
|
2577
|
-
error_msg = f"获取版本列表失败: {result.stderr}"
|
|
2578
|
-
logger.error(error_msg)
|
|
2579
|
-
return (
|
|
2580
|
-
error_msg,
|
|
2581
|
-
gr.Button(value="载入信息", interactive=True),
|
|
2582
|
-
gr.Dropdown(visible=False),
|
|
2583
|
-
gr.Button(visible=False)
|
|
2584
|
-
)
|
|
2585
|
-
|
|
2586
|
-
# 解析 JSON 输出
|
|
2587
|
-
try:
|
|
2588
|
-
data = json.loads(result.stdout)
|
|
2589
|
-
versions = data.get("versions", [])
|
|
2590
|
-
latest_version = data.get("latest", "")
|
|
2591
|
-
installed_version = data.get("installed_version", "")
|
|
2592
|
-
|
|
2593
|
-
logger.info(f"解析到 {len(versions)} 个版本")
|
|
2594
|
-
logger.info(f"最新版本: {latest_version}")
|
|
2595
|
-
logger.info(f"已安装版本: {installed_version}")
|
|
2596
|
-
|
|
2597
|
-
except json.JSONDecodeError as e:
|
|
2598
|
-
error_msg = f"解析版本信息失败: {str(e)}"
|
|
2599
|
-
logger.error(error_msg)
|
|
2600
|
-
return (
|
|
2601
|
-
error_msg,
|
|
2602
|
-
gr.Button(value="载入信息", interactive=True),
|
|
2603
|
-
gr.Dropdown(visible=False),
|
|
2604
|
-
gr.Button(visible=False)
|
|
2605
|
-
)
|
|
2606
|
-
|
|
2607
|
-
if not versions:
|
|
2608
|
-
error_msg = "未找到可用版本"
|
|
2609
|
-
logger.warning(error_msg)
|
|
2610
|
-
return (
|
|
2611
|
-
error_msg,
|
|
2612
|
-
gr.Button(value="载入信息", interactive=True),
|
|
2613
|
-
gr.Dropdown(visible=False),
|
|
2614
|
-
gr.Button(visible=False)
|
|
2615
|
-
)
|
|
2616
|
-
|
|
2617
|
-
# 构建状态信息
|
|
2618
|
-
status_info = []
|
|
2619
|
-
if installed_version:
|
|
2620
|
-
status_info.append(f"**当前安装版本:** {installed_version}")
|
|
2621
|
-
if latest_version:
|
|
2622
|
-
status_info.append(f"**最新版本:** {latest_version}")
|
|
2623
|
-
status_info.append(f"**找到 {len(versions)} 个可用版本**")
|
|
2624
|
-
|
|
2625
|
-
status_message = "\n\n".join(status_info)
|
|
2626
|
-
logger.info(f"版本信息载入完成: {status_message}")
|
|
2627
|
-
|
|
2628
|
-
# 返回更新后的组件
|
|
2629
|
-
return (
|
|
2630
|
-
status_message,
|
|
2631
|
-
gr.Button(value="载入信息", interactive=True),
|
|
2632
|
-
gr.Dropdown(choices=versions, value=versions[0] if versions else None, visible=True, label="选择要安装的版本"),
|
|
2633
|
-
gr.Button(visible=True, value="安装选定版本")
|
|
2634
|
-
)
|
|
2635
|
-
|
|
2636
|
-
except subprocess.TimeoutExpired:
|
|
2637
|
-
error_msg = "获取版本列表超时"
|
|
2638
|
-
logger.error(error_msg)
|
|
2639
|
-
return (
|
|
2640
|
-
error_msg,
|
|
2641
|
-
gr.Button(value="载入信息", interactive=True),
|
|
2642
|
-
gr.Dropdown(visible=False),
|
|
2643
|
-
gr.Button(visible=False)
|
|
2644
|
-
)
|
|
2645
|
-
except Exception as e:
|
|
2646
|
-
error_msg = f"获取版本列表失败: {str(e)}"
|
|
2647
|
-
logger.error(error_msg)
|
|
2648
|
-
return (
|
|
2649
|
-
error_msg,
|
|
2650
|
-
gr.Button(value="载入信息", interactive=True),
|
|
2651
|
-
gr.Dropdown(visible=False),
|
|
2652
|
-
gr.Button(visible=False)
|
|
2653
|
-
)
|
|
2654
|
-
|
|
2655
|
-
def install_selected_version(selected_version: str):
|
|
2656
|
-
"""安装选定的版本"""
|
|
2657
|
-
import logging
|
|
2658
|
-
import threading
|
|
2659
|
-
import time
|
|
2660
|
-
logger = logging.getLogger(__name__)
|
|
2661
|
-
|
|
2662
|
-
if not selected_version:
|
|
2663
|
-
error_msg = "请先选择一个版本"
|
|
2664
|
-
logger.warning(error_msg)
|
|
2665
|
-
return error_msg
|
|
2666
|
-
|
|
2667
|
-
def install_and_exit():
|
|
2668
|
-
"""在后台线程中执行安装并退出程序"""
|
|
2669
|
-
try:
|
|
2670
|
-
# 等待一小段时间确保UI响应已返回
|
|
2671
|
-
time.sleep(1)
|
|
2672
|
-
|
|
2673
|
-
# 构建启动器命令
|
|
2674
|
-
bootstrap_path = os.path.join(os.getcwd(), "bootstrap.pyz")
|
|
2675
|
-
cmd = [sys.executable, bootstrap_path, f"--install-version={selected_version}"]
|
|
2676
|
-
logger.info(f"开始通过启动器安装版本 {selected_version}")
|
|
2677
|
-
logger.info(f"执行命令: {' '.join(cmd)}")
|
|
2678
|
-
|
|
2679
|
-
# 启动启动器进程(不等待完成)
|
|
2680
|
-
subprocess.Popen(
|
|
2681
|
-
cmd,
|
|
2682
|
-
cwd=os.getcwd(),
|
|
2683
|
-
creationflags=subprocess.CREATE_NEW_CONSOLE if os.name == 'nt' else 0
|
|
2684
|
-
)
|
|
2685
|
-
|
|
2686
|
-
# 等待一小段时间确保启动器启动
|
|
2687
|
-
time.sleep(2)
|
|
2688
|
-
|
|
2689
|
-
# 退出当前程序
|
|
2690
|
-
logger.info("安装即将开始,正在退出当前程序...")
|
|
2691
|
-
os._exit(0)
|
|
2692
|
-
|
|
2693
|
-
except Exception as e:
|
|
2694
|
-
raise
|
|
2695
|
-
|
|
2696
|
-
try:
|
|
2697
|
-
# 在后台线程中执行安装和退出
|
|
2698
|
-
install_thread = threading.Thread(target=install_and_exit, daemon=True)
|
|
2699
|
-
install_thread.start()
|
|
2700
|
-
|
|
2701
|
-
return f"正在启动器中安装版本 {selected_version},程序将自动重启..."
|
|
2702
|
-
|
|
2703
|
-
except Exception as e:
|
|
2704
|
-
error_msg = f"启动安装进程失败: {str(e)}"
|
|
2705
|
-
logger.error(error_msg)
|
|
2706
|
-
return error_msg
|
|
2707
|
-
|
|
2708
|
-
def load_info_with_button_state():
|
|
2709
|
-
"""载入信息并管理按钮状态"""
|
|
2710
|
-
import logging
|
|
2711
|
-
logger = logging.getLogger(__name__)
|
|
2712
|
-
|
|
2713
|
-
logger.info("开始载入版本信息")
|
|
2714
|
-
|
|
2715
|
-
# 先禁用按钮
|
|
2716
|
-
yield (
|
|
2717
|
-
"正在载入版本信息...",
|
|
2718
|
-
gr.Button(value="载入中...", interactive=False),
|
|
2719
|
-
gr.Dropdown(visible=False),
|
|
2720
|
-
gr.Button(visible=False)
|
|
2721
|
-
)
|
|
2722
|
-
|
|
2723
|
-
# 执行载入操作
|
|
2724
|
-
result = list_all_versions()
|
|
2725
|
-
logger.info("版本信息载入操作完成")
|
|
2726
|
-
yield result
|
|
2727
|
-
|
|
2728
|
-
# 绑定事件
|
|
2729
|
-
load_info_btn.click(
|
|
2730
|
-
fn=load_info_with_button_state,
|
|
2731
|
-
outputs=[status_text, load_info_btn, version_dropdown, install_selected_btn]
|
|
2732
|
-
)
|
|
2733
|
-
|
|
2734
|
-
install_selected_btn.click(
|
|
2735
|
-
fn=install_selected_version,
|
|
2736
|
-
inputs=[version_dropdown],
|
|
2737
|
-
outputs=[status_text]
|
|
2738
|
-
)
|
|
2739
|
-
|
|
2740
|
-
def _create_screen_tab(self) -> None:
|
|
2741
|
-
with gr.Tab("画面"):
|
|
2742
|
-
gr.Markdown("## 当前设备画面")
|
|
2743
|
-
refresh_btn = gr.Button("刷新画面", variant="primary")
|
|
2744
|
-
WIDTH = 720 // 3
|
|
2745
|
-
HEIGHT = 1280 // 3
|
|
2746
|
-
last_update_text = gr.Markdown("上次更新时间:无数据")
|
|
2747
|
-
screenshot_display = gr.Image(type="numpy", width=WIDTH, height=HEIGHT)
|
|
2748
|
-
|
|
2749
|
-
def update_screenshot():
|
|
2750
|
-
ctx = ContextStackVars.current()
|
|
2751
|
-
if ctx is None:
|
|
2752
|
-
return [None, "上次更新时间:无上下文数据"]
|
|
2753
|
-
screenshot = ctx._screenshot
|
|
2754
|
-
if screenshot is None:
|
|
2755
|
-
return [None, "上次更新时间:无截图数据"]
|
|
2756
|
-
screenshot = cv2.cvtColor(screenshot, cv2.COLOR_BGR2RGB)
|
|
2757
|
-
return screenshot, f"上次更新时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
|
|
2758
|
-
|
|
2759
|
-
refresh_btn.click(
|
|
2760
|
-
fn=update_screenshot,
|
|
2761
|
-
outputs=[screenshot_display, last_update_text]
|
|
2762
|
-
)
|
|
2763
|
-
|
|
2764
|
-
def _load_config(self) -> None:
|
|
2765
|
-
# 加载配置文件
|
|
2766
|
-
config_path = "config.json"
|
|
2767
|
-
self.config = load_config(config_path, type=BaseConfig, use_default_if_not_found=True)
|
|
2768
|
-
if not self.config.user_configs:
|
|
2769
|
-
# 如果没有用户配置,创建一个默认配置
|
|
2770
|
-
default_config = UserConfig[BaseConfig](
|
|
2771
|
-
name="默认配置",
|
|
2772
|
-
category="default",
|
|
2773
|
-
description="默认配置",
|
|
2774
|
-
backend=BackendConfig(),
|
|
2775
|
-
options=BaseConfig()
|
|
2776
|
-
)
|
|
2777
|
-
self.config.user_configs.append(default_config)
|
|
2778
|
-
self.current_config = self.config.user_configs[0]
|
|
2779
|
-
|
|
2780
|
-
|
|
2781
|
-
def create_ui(self) -> gr.Blocks:
|
|
2782
|
-
custom_css = """
|
|
2783
|
-
#container { max-width: 800px; margin: auto; padding: 20px; }
|
|
2784
|
-
.quick-controls-row > div {
|
|
2785
|
-
display: flex !important;
|
|
2786
|
-
flex-wrap: nowrap !important;
|
|
2787
|
-
gap: 0 !important;
|
|
2788
|
-
overflow-x: auto !important;
|
|
2789
|
-
}
|
|
2790
|
-
.quick-controls-row > div > div {
|
|
2791
|
-
min-width: auto !important;
|
|
2792
|
-
padding: 0;
|
|
2793
|
-
}
|
|
2794
|
-
"""
|
|
2795
|
-
with gr.Blocks(title="琴音小助手", css=custom_css) as app:
|
|
2796
|
-
with gr.Column(elem_id="container"):
|
|
2797
|
-
gr.Markdown(f"# 琴音小助手 v{self._kaa.version}")
|
|
2798
|
-
|
|
2799
|
-
with gr.Tabs():
|
|
2800
|
-
self._create_status_tab()
|
|
2801
|
-
self._create_task_tab()
|
|
2802
|
-
self._create_settings_tab()
|
|
2803
|
-
self._create_produce_tab()
|
|
2804
|
-
self._create_log_tab()
|
|
2805
|
-
self._create_whats_new_tab()
|
|
2806
|
-
self._create_screen_tab()
|
|
2807
|
-
|
|
2808
|
-
# 启动 IdleModeManager 后台线程
|
|
2809
|
-
self.idle_mgr.start()
|
|
2810
|
-
|
|
2811
|
-
return app
|
|
2812
|
-
|
|
2813
|
-
def main(kaa: Kaa | None = None, start_immidiately: bool = False) -> None:
|
|
2814
|
-
kaa = kaa or Kaa('./config.json')
|
|
2815
|
-
ui = KotoneBotUI(kaa)
|
|
2816
|
-
app = ui.create_ui()
|
|
2817
|
-
|
|
2818
|
-
if start_immidiately:
|
|
2819
|
-
ui.start_run()
|
|
2820
|
-
|
|
2821
|
-
server_name = "0.0.0.0" if ui.current_config.options.misc.expose_to_lan else "127.0.0.1"
|
|
2822
|
-
app.launch(inbrowser=True, show_error=True, server_name=server_name)
|
|
2823
|
-
|
|
2824
|
-
if __name__ == "__main__":
|
|
2825
|
-
main()
|