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