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
kotonebot/kaa/main/gr.py DELETED
@@ -1,2825 +0,0 @@
1
- import os
2
- import traceback
3
- import zipfile
4
- import logging
5
- import copy
6
- import sys
7
- import subprocess
8
- import json
9
- from functools import partial
10
- from itertools import chain
11
- from datetime import datetime, timedelta
12
- from typing import List, Dict, Tuple, Literal, Generator, Callable, Any, get_args, cast
13
-
14
- import cv2
15
- import gradio as gr
16
-
17
- from kotonebot.kaa.errors import ProduceSolutionNotFoundError
18
- from kotonebot.kaa.main import Kaa
19
- from kotonebot.kaa.db import IdolCard
20
- from kotonebot.backend.context.context import vars
21
- from kotonebot.errors import ContextNotInitializedError
22
- from kotonebot.client.host import Mumu12Host, LeidianHost
23
- from kotonebot.config.manager import load_config, save_config
24
- from kotonebot.config.base_config import UserConfig, BackendConfig
25
- from kotonebot.backend.context import task_registry, ContextStackVars
26
- from kotonebot.kaa.config import (
27
- BaseConfig, APShopItems, CapsuleToysConfig, ClubRewardConfig, PurchaseConfig, ActivityFundsConfig,
28
- PresentsConfig, AssignmentConfig, ContestConfig, ProduceConfig,
29
- MissionRewardConfig, DailyMoneyShopItems, ProduceAction,
30
- RecommendCardDetectionMode, TraceConfig, StartGameConfig, EndGameConfig, UpgradeSupportCardConfig, MiscConfig,
31
- IdleModeConfig,
32
- )
33
- from kotonebot.kaa.config.produce import ProduceSolution, ProduceSolutionManager, ProduceData
34
- from kotonebot.kaa.application.adapter.misc_adapter import create_desktop_shortcut
35
- from kotonebot.kaa.application.core.idle_mode import IdleModeManager
36
-
37
- logger = logging.getLogger(__name__)
38
- GradioInput = gr.Textbox | gr.Number | gr.Checkbox | gr.Dropdown | gr.Radio | gr.Slider | gr.Tabs | gr.Tab
39
- ConfigKey = Literal[
40
- # backend
41
- 'adb_ip', 'adb_port',
42
- 'screenshot_method', 'keep_screenshots',
43
- 'check_emulator', 'emulator_path',
44
- 'adb_emulator_name', 'emulator_args',
45
- '_mumu_index', '_leidian_index',
46
- 'mumu_background_mode', 'target_screenshot_interval',
47
-
48
- # purchase
49
- 'purchase_enabled',
50
- 'money_enabled', 'ap_enabled',
51
- 'ap_items', 'money_items', 'money_refresh',
52
-
53
- # assignment
54
- 'assignment_enabled',
55
- 'mini_live_reassign', 'mini_live_duration',
56
- 'online_live_reassign', 'online_live_duration',
57
- 'contest_enabled',
58
- 'select_which_contestant', 'when_no_set',
59
-
60
- # produce
61
- 'produce_enabled', 'selected_solution_id', 'produce_count',
62
- 'mission_reward_enabled',
63
-
64
- # club reward
65
- 'club_reward_enabled',
66
- 'selected_note',
67
-
68
- # upgrade support card
69
- 'upgrade_support_card_enabled',
70
-
71
- # capsule toys
72
- 'capsule_toys_enabled', 'friend_capsule_toys_count',
73
- 'sense_capsule_toys_count', 'logic_capsule_toys_count',
74
- 'anomaly_capsule_toys_count',
75
-
76
- # start game
77
- 'start_game_enabled', 'start_through_kuyo',
78
- 'game_package_name', 'kuyo_package_name',
79
- 'disable_gakumas_localify', 'dmm_game_path',
80
-
81
- # end game
82
- 'exit_kaa', 'kill_game', 'kill_dmm',
83
- 'kill_emulator', 'shutdown', 'hibernate',
84
- 'restore_gakumas_localify',
85
-
86
- 'activity_funds',
87
- 'presents',
88
- 'mission_reward',
89
- 'activity_funds_enabled',
90
- 'presents_enabled',
91
- 'trace_recommend_card_detection',
92
-
93
- # misc
94
- 'check_update', 'auto_install_update', 'expose_to_lan',
95
-
96
- # idle
97
- 'idle_enabled', 'idle_seconds', 'idle_minimize_on_pause',
98
-
99
- '_selected_backend_index'
100
-
101
- ]
102
- CONFIG_KEY_VALUE: tuple[str] = get_args(ConfigKey)
103
- ConfigSetFunction = Callable[[BaseConfig, Dict[ConfigKey, Any]], None]
104
- ConfigBuilderReturnValue = Tuple[ConfigSetFunction, Dict[ConfigKey, GradioInput]]
105
-
106
- def _save_bug_report(
107
- title: str,
108
- description: str,
109
- version: str,
110
- upload: bool,
111
- path: str | None = None
112
- ) -> Generator[str, None, str]:
113
- """
114
- 保存报告
115
-
116
- :param title: 标题
117
- :param description: 描述
118
- :param version: 版本号
119
- :param upload: 是否上传
120
- :param path: 保存的路径。若为 `None`,则保存到 `./reports/bug-YY-MM-DD HH-MM-SS_标题.zip`。
121
- :return: 保存的路径
122
- """
123
- from kotonebot import device
124
- from kotonebot.backend.context import ContextStackVars
125
- import re
126
-
127
- # 过滤标题中的非法文件名字符
128
- def sanitize_filename(s: str) -> str:
129
- # 替换 \/:*?"<>| 为空或下划线
130
- return re.sub(r'[\\/:*?"<>|]', '_', s)
131
-
132
- # 确保目录存在
133
- os.makedirs('logs', exist_ok=True)
134
- os.makedirs('reports', exist_ok=True)
135
-
136
- error = ""
137
- if path is None:
138
- safe_title = sanitize_filename(title)[:30] or "无标题"
139
- timestamp = datetime.now().strftime("%y-%m-%d-%H-%M-%S")
140
- path = f'./reports/bug_{timestamp}_{safe_title}.zip'
141
- with zipfile.ZipFile(path, 'w', zipfile.ZIP_DEFLATED, compresslevel=9) as zipf:
142
- # 打包描述文件
143
- yield "### 打包描述文件..."
144
- try:
145
- description_content = f"标题:{title}\n类型:bug\n内容:\n{description}"
146
- zipf.writestr('description.txt', description_content.encode('utf-8'))
147
- except Exception as e:
148
- error += f"保存描述文件失败:{str(e)}\n"
149
-
150
- # 打包截图
151
- yield "### 打包上次截图..."
152
- try:
153
- stack = ContextStackVars.current()
154
- screenshot = None
155
- if stack is not None:
156
- screenshot = stack._screenshot
157
- if screenshot is not None:
158
- img = cv2.imencode('.png', screenshot)[1].tobytes()
159
- zipf.writestr('last_screenshot.png', img)
160
- if screenshot is None:
161
- error += "无上次截图数据\n"
162
- except Exception as e:
163
- error += f"保存上次截图失败:{str(e)}\n"
164
-
165
- # 打包当前截图
166
- yield "### 打包当前截图..."
167
- try:
168
- screenshot = device.screenshot()
169
- img = cv2.imencode('.png', screenshot)[1].tobytes()
170
- zipf.writestr('current_screenshot.png', img)
171
- except Exception as e:
172
- error += f"保存当前截图失败:{str(e)}\n"
173
-
174
- # 打包配置文件
175
- yield "### 打包配置文件..."
176
- try:
177
- with open('config.json', 'r', encoding='utf-8') as f:
178
- zipf.writestr('config.json', f.read())
179
- except Exception as e:
180
- error += f"保存配置文件失败:{str(e)}\n"
181
-
182
- # 打包 logs 文件夹
183
- if os.path.exists('logs'):
184
- for root, dirs, files in os.walk('logs'):
185
- for file in files:
186
- file_path = os.path.join(root, file)
187
- arcname = os.path.join('logs', os.path.relpath(file_path, 'logs'))
188
- zipf.write(file_path, arcname)
189
- yield f"### 打包 log 文件:{arcname}"
190
-
191
- # 打包 conf 文件夹
192
- if os.path.exists('conf'):
193
- for root, dirs, files in os.walk('conf'):
194
- for file in files:
195
- file_path = os.path.join(root, file)
196
- arcname = os.path.join('conf', os.path.relpath(file_path, 'conf'))
197
- zipf.write(file_path, arcname)
198
- yield f"### 打包配置文件:{arcname}"
199
-
200
- # 写出版本号
201
- zipf.writestr('version.txt', version)
202
-
203
- if not upload:
204
- yield f"### 报告已保存至 {os.path.abspath(path)}"
205
- return path
206
-
207
- # 上传报告
208
- from kotonebot.ui.file_host.sensio import upload as upload_file
209
- yield "### 上传报告..."
210
- url = ''
211
- try:
212
- url = upload_file(path)
213
- except Exception as e:
214
- yield f"### 上传报告失败:{str(e)}\n\n"
215
- return ''
216
-
217
- final_msg = f"### 报告导出成功:{url}\n\n"
218
- expire_time = datetime.now() + timedelta(days=7)
219
- if error:
220
- final_msg += "### 但发生了以下错误\n\n"
221
- final_msg += '\n* '.join(error.strip().split('\n'))
222
- final_msg += '\n'
223
- final_msg += f"### 此链接将于 {expire_time.strftime('%Y-%m-%d %H:%M:%S')}(7 天后)过期\n\n"
224
- final_msg += '### 复制以上文本并反馈给开发者'
225
- yield final_msg
226
- return path
227
-
228
- class KotoneBotUI:
229
- def __init__(self, kaa: Kaa) -> None:
230
- self.is_running: bool = False
231
- self.single_task_running: bool = False
232
- self.is_stopping: bool = False # 新增:标记是否正在停止过程中
233
- self.is_single_task_stopping: bool = False # 新增:标记单个任务是否正在停止
234
- self._kaa = kaa
235
- self._load_config()
236
- # IdleModeManager 空闲检测
237
- def safe_get_is_running():
238
- try:
239
- return (self.is_running or self.single_task_running) and not self.is_stopping and not self.is_single_task_stopping and not vars.flow.is_paused
240
- except ContextNotInitializedError:
241
- return False
242
-
243
- def safe_get_is_paused():
244
- try:
245
- return vars.flow.is_paused
246
- except ContextNotInitializedError:
247
- return False
248
-
249
- self.idle_mgr = IdleModeManager(
250
- get_is_running=safe_get_is_running,
251
- get_is_paused=safe_get_is_paused,
252
- get_config=lambda: self.current_config.options.idle,
253
- )
254
- self._setup_kaa()
255
-
256
- def _setup_kaa(self) -> None:
257
- from kotonebot.backend.debug.vars import debug, clear_saved
258
-
259
- self._kaa.initialize()
260
- if self.current_config.keep_screenshots:
261
- debug.auto_save_to_folder = 'dumps'
262
- debug.enabled = True
263
- clear_saved()
264
- else:
265
- debug.auto_save_to_folder = None
266
- debug.enabled = False
267
-
268
- def export_dumps(self) -> str:
269
- """导出 dumps 文件夹为 zip 文件"""
270
- if not os.path.exists('dumps'):
271
- return "dumps 文件夹不存在"
272
-
273
- timestamp = datetime.now().strftime('%y-%m-%d-%H-%M-%S')
274
- zip_filename = f'dumps-{timestamp}.zip'
275
-
276
- with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED, compresslevel=9) as zipf:
277
- for root, dirs, files in os.walk('dumps'):
278
- for file in files:
279
- file_path = os.path.join(root, file)
280
- arcname = os.path.relpath(file_path, 'dumps')
281
- zipf.write(file_path, arcname)
282
-
283
- return f"已导出到 {zip_filename}"
284
-
285
- def export_logs(self) -> str:
286
- """导出 logs 文件夹为 zip 文件"""
287
- if not os.path.exists('logs'):
288
- return "logs 文件夹不存在"
289
-
290
- timestamp = datetime.now().strftime('%y-%m-%d-%H-%M-%S')
291
- zip_filename = f'logs-{timestamp}.zip'
292
-
293
- with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED, compresslevel=9) as zipf:
294
- for root, dirs, files in os.walk('logs'):
295
- for file in files:
296
- file_path = os.path.join(root, file)
297
- arcname = os.path.relpath(file_path, 'logs')
298
- zipf.write(file_path, arcname)
299
-
300
- return f"已导出到 {zip_filename}"
301
-
302
- def get_button_status(self) -> Tuple[str, bool]:
303
- """获取按钮状态和交互性"""
304
- if not hasattr(self, 'run_status'):
305
- return "启动", True
306
-
307
- if not self.run_status.running:
308
- self.is_running = False
309
- self.is_stopping = False # 重置停止状态
310
- return "启动", True
311
-
312
- if self.is_stopping:
313
- return "停止中...", False # 停止中时禁用按钮
314
-
315
- return "停止", True
316
-
317
- def update_task_status(self) -> List[List[str]]:
318
- status_list: List[List[str]] = []
319
- if not hasattr(self, 'run_status'):
320
- for task_name, task in task_registry.items():
321
- status_list.append([task.name, "等待中"])
322
- return status_list
323
-
324
- for task_status in self.run_status.tasks:
325
- status_text = {
326
- 'pending': '等待中',
327
- 'running': '运行中',
328
- 'finished': '已完成',
329
- 'error': '出错',
330
- 'cancelled': '已取消'
331
- }.get(task_status.status, '未知')
332
- status_list.append([task_status.task.name, status_text])
333
- return status_list
334
-
335
- def toggle_run(self) -> Tuple[str, List[List[str]]]:
336
- if not self.is_running:
337
- return self.start_run()
338
-
339
- # 如果正在停止过程中,忽略重复点击
340
- if self.is_stopping:
341
- return "停止中...", self.update_task_status()
342
-
343
- return self.stop_run()
344
-
345
- def start_run(self) -> Tuple[str, List[List[str]]]:
346
- self.is_running = True
347
- self.run_status = self._kaa.start_all()
348
- # 通知 Idle 管理器进入运行态
349
- self.idle_mgr.notify_on_start()
350
- return "停止", self.update_task_status()
351
-
352
- def stop_run(self) -> Tuple[str, List[List[str]]]:
353
- self.is_stopping = True # 设置停止状态
354
-
355
- # 如果当前处于暂停状态,先恢复再停止
356
- if vars.flow.is_paused:
357
- gr.Info("检测到任务暂停,正在恢复后停止...")
358
- vars.flow.request_resume()
359
-
360
- self.is_running = False
361
- if self._kaa:
362
- self.run_status.interrupt()
363
- gr.Info("正在停止任务...")
364
- # 通知 Idle 管理器停止态
365
- self.idle_mgr.notify_on_stop()
366
-
367
- return "停止中...", self.update_task_status()
368
-
369
- def start_single_task(self, task_name: str) -> Tuple[str, str]:
370
- if not task_name:
371
- gr.Warning("请先选择一个任务")
372
- return "执行任务", ""
373
- task = None
374
- for name, t in task_registry.items():
375
- if name == task_name:
376
- task = t
377
- break
378
- if task is None:
379
- gr.Warning(f"任务 {task_name} 未找到")
380
- return "执行任务", ""
381
-
382
- gr.Info(f"任务 {task_name} 开始执行")
383
- self.single_task_running = True
384
- self.run_status = self._kaa.start([task])
385
- return "停止任务", f"正在执行任务: {task_name}"
386
-
387
- def stop_single_task(self) -> Tuple[str, str]:
388
- self.is_single_task_stopping = True # 设置单个任务停止状态
389
-
390
- # 如果当前处于暂停状态,先恢复再停止
391
- if vars.flow.is_paused:
392
- gr.Info("检测到任务暂停,正在恢复后停止...")
393
- vars.flow.request_resume()
394
-
395
- self.single_task_running = False
396
- if hasattr(self, 'run_status') and self._kaa:
397
- self.run_status.interrupt()
398
- gr.Info("正在停止任务...")
399
- # 通知 Idle 管理器停止态
400
- self.idle_mgr.notify_on_stop()
401
- return "停止中...", "正在停止任务..."
402
-
403
- def toggle_pause(self) -> str:
404
- """切换暂停/恢复状态"""
405
- if vars.flow.is_paused:
406
- vars.flow.request_resume()
407
- gr.Info("任务已恢复")
408
- return "暂停"
409
- else:
410
- vars.flow.request_pause()
411
- gr.Info("任务已暂停")
412
- return "恢复"
413
-
414
- def get_pause_button_status(self) -> str:
415
- """获取暂停按钮的状态"""
416
- if vars.flow.is_paused:
417
- return "恢复"
418
- else:
419
- return "暂停"
420
-
421
- def get_pause_button_with_interactive(self) -> gr.Button:
422
- """获取暂停按钮的状态和交互性"""
423
- try:
424
- text = "恢复" if vars.flow.is_paused else "暂停"
425
- except ContextNotInitializedError:
426
- # ContextNotInitializedError: Forwarded object vars called before initialization.
427
- # TODO: vars.flow.is_paused 应该要可以在脚本正式启动前就能访问
428
- text = '未启动'
429
- # 如果正在停止过程中,禁用暂停按钮
430
- interactive = not (self.is_stopping or self.is_single_task_stopping)
431
- return gr.Button(value=text, interactive=interactive)
432
-
433
- def reload_config(self) -> bool:
434
- """
435
- 重新加载配置并重新初始化相关组件
436
-
437
- :return: 是否成功重新加载
438
- """
439
- try:
440
- # 重新加载配置文件
441
- self._load_config()
442
-
443
- # 重新设置 kaa 的配置
444
- self._kaa.config_path = "config.json"
445
- self._kaa.config_type = BaseConfig
446
-
447
- # 重新初始化 kaa(这会重新创建设备和 Context)
448
- self._setup_kaa()
449
-
450
- # 重新加载 Context 中的配置数据
451
- from kotonebot.backend.context.context import config
452
- try:
453
- config.load()
454
- except ContextNotInitializedError:
455
- pass
456
-
457
- logger.info("配置已成功重新加载")
458
- return True
459
- except Exception as e:
460
- logger.error(f"重新加载配置失败:{str(e)}")
461
- return False
462
-
463
- def save_settings2(self, return_values: list[ConfigBuilderReturnValue], *args) -> str:
464
- options = BaseConfig()
465
- # return_values: (set_func, { 'key': component })
466
- keys = list(chain.from_iterable([list(data.keys()) for _, data in return_values]))
467
- # 根据 keys 与 *args 构建 data 字典
468
- data = dict[ConfigKey, Any]()
469
- assert len(keys) == len(args), "keys 与 args 长度不一致"
470
- for key, value in zip(keys, args):
471
- assert key in CONFIG_KEY_VALUE, f"未知的配置项:{key}"
472
- key = cast(ConfigKey, key)
473
- data[key] = value
474
-
475
- # 先设置options
476
- for (set_func, _) in return_values:
477
- set_func(options, data)
478
-
479
- # 验证规则1:截图方法验证
480
- screenshot_method = self.current_config.backend.screenshot_impl
481
- backend_type = self.current_config.backend.type
482
-
483
- valid_screenshot_methods = {
484
- 'mumu12': ['adb', 'adb_raw', 'uiautomator2', 'nemu_ipc'],
485
- 'leidian': ['adb', 'adb_raw', 'uiautomator2'],
486
- 'custom': ['adb', 'adb_raw', 'uiautomator2'],
487
- 'dmm': ['remote_windows', 'windows']
488
- }
489
-
490
- if screenshot_method not in valid_screenshot_methods.get(backend_type, []):
491
- gr.Warning(f"截图方法 '{screenshot_method}' 不适用于当前选择的模拟器类型,配置未保存。")
492
- return ""
493
-
494
- # 验证规则2:若启用培育,那么必须选择培育方案
495
- if options.produce.enabled and not options.produce.selected_solution_id:
496
- gr.Warning("启用培育时,必须选择培育方案,配置未保存。")
497
- return ""
498
-
499
- # 验证规则3:若启用AP/金币购买,对应的商品不能为空
500
- if options.purchase.ap_enabled and not options.purchase.ap_items:
501
- gr.Warning("启用AP购买时,AP商店购买物品不能为空,配置未保存。")
502
- return ""
503
-
504
- if options.purchase.money_enabled and not options.purchase.money_items:
505
- gr.Warning("启用金币购买时,金币商店购买物品不能为空,配置未保存。")
506
- return ""
507
-
508
- # 验证通过,保存配置
509
- self.current_config.options = options
510
- try:
511
- save_config(self.config, "config.json")
512
-
513
- # 尝试热重载配置
514
- if self.reload_config():
515
- gr.Success("设置已保存并应用!")
516
- else:
517
- gr.Warning("设置已保存,但重新加载失败,请重启程序。")
518
- return ""
519
- except Exception as e:
520
- gr.Warning(f"保存设置失败:{str(e)}")
521
- return ""
522
-
523
- def _create_status_tab(self) -> None:
524
- with gr.Tab("状态"):
525
- gr.Markdown("## 状态")
526
-
527
- with gr.Row():
528
- run_btn = gr.Button("启动", scale=2)
529
- pause_btn = gr.Button("暂停", scale=1)
530
-
531
- # 快速设置控制区域
532
- gr.Markdown("### 快速设置")
533
-
534
- with gr.Row():
535
- select_all_btn = gr.Button("全选", scale=1)
536
- unselect_all_btn = gr.Button("清空", scale=1)
537
- select_produce_only_btn = gr.Button("只选培育", scale=1)
538
- unselect_produce_only_btn = gr.Button("只不选培育", scale=1)
539
-
540
- with gr.Row(elem_classes=["quick-controls-row"]):
541
- purchase_quick = gr.Checkbox(
542
- label="商店",
543
- value=self.current_config.options.purchase.enabled,
544
- interactive=True,
545
- elem_classes=["quick-checkbox"]
546
- )
547
- assignment_quick = gr.Checkbox(
548
- label="工作",
549
- value=self.current_config.options.assignment.enabled,
550
- interactive=True,
551
- elem_classes=["quick-checkbox"]
552
- )
553
- contest_quick = gr.Checkbox(
554
- label="竞赛",
555
- value=self.current_config.options.contest.enabled,
556
- interactive=True,
557
- elem_classes=["quick-checkbox"]
558
- )
559
- produce_quick = gr.Checkbox(
560
- label="培育",
561
- value=self.current_config.options.produce.enabled,
562
- interactive=True,
563
- elem_classes=["quick-checkbox"]
564
- )
565
- mission_reward_quick = gr.Checkbox(
566
- label="任务",
567
- value=self.current_config.options.mission_reward.enabled,
568
- interactive=True,
569
- elem_classes=["quick-checkbox"]
570
- )
571
- club_reward_quick = gr.Checkbox(
572
- label="社团",
573
- value=self.current_config.options.club_reward.enabled,
574
- interactive=True,
575
- elem_classes=["quick-checkbox"]
576
- )
577
- activity_funds_quick = gr.Checkbox(
578
- label="活动费",
579
- value=self.current_config.options.activity_funds.enabled,
580
- interactive=True,
581
- elem_classes=["quick-checkbox"]
582
- )
583
- presents_quick = gr.Checkbox(
584
- label="礼物",
585
- value=self.current_config.options.presents.enabled,
586
- interactive=True,
587
- elem_classes=["quick-checkbox"]
588
- )
589
- capsule_toys_quick = gr.Checkbox(
590
- label="扭蛋",
591
- value=self.current_config.options.capsule_toys.enabled,
592
- interactive=True,
593
- elem_classes=["quick-checkbox"]
594
- )
595
- upgrade_support_card_quick = gr.Checkbox(
596
- label="支援卡",
597
- value=self.current_config.options.upgrade_support_card.enabled,
598
- interactive=True,
599
- elem_classes=["quick-checkbox"]
600
- )
601
-
602
- def _get_end_action_value() -> str:
603
- if self.current_config.options.end_game.shutdown:
604
- return "关机"
605
- if self.current_config.options.end_game.hibernate:
606
- return "休眠"
607
- return "什么都不做"
608
-
609
- end_action_dropdown = gr.Dropdown(
610
- label="完成后:",
611
- choices=["什么都不做", "关机", "休眠"],
612
- value=_get_end_action_value(),
613
- interactive=True
614
- )
615
-
616
- if self._kaa.upgrade_msg:
617
- gr.Markdown('### 配置升级报告')
618
- gr.Markdown(self._kaa.upgrade_msg)
619
- gr.Markdown('脚本报错或者卡住?前往"反馈"选项卡可以快速导出报告!')
620
-
621
- # 添加调试模式警告
622
- if self.current_config.keep_screenshots:
623
- gr.Markdown(
624
- '<div style="color: red; font-size: larger;">当前启用了调试功能「保留截图数据」,调试结束后正常使用时建议关闭此选项!</div>',
625
- elem_classes=["debug-warning"]
626
- )
627
-
628
- task_status = gr.Dataframe(
629
- headers=["任务", "状态"],
630
- value=self.update_task_status(),
631
- label="任务状态"
632
- )
633
-
634
- # MARK: 状态 - 监听函数
635
-
636
- def on_run_click(evt: gr.EventData) -> Tuple[gr.Button, List[List[str]]]:
637
- result = self.toggle_run()
638
- # 如果正在停止,禁用按钮
639
- interactive = not self.is_stopping
640
- button = gr.Button(value=result[0], interactive=interactive)
641
- return button, result[1]
642
-
643
- def on_pause_click(evt: gr.EventData) -> str:
644
- return self.toggle_pause()
645
-
646
- # 快速设置控制的事件处理函数
647
- def save_quick_setting(success_msg: str, failed_msg: str):
648
- """保存快速设置并立即应用"""
649
- try:
650
- # 保存配置
651
- save_config(self.config, "config.json")
652
-
653
- # 尝试热重载配置
654
- if self.reload_config():
655
- gr.Success(success_msg)
656
- else:
657
- gr.Warning(failed_msg)
658
- except Exception as e:
659
- gr.Error(f"✗ 保存失败:{str(e)}")
660
-
661
- def update_and_save_quick_setting(field_name: str, value: bool, display_name: str):
662
- """更新字段,并保存快速设置并立即应用"""
663
-
664
- # 更新配置
665
- if field_name == 'purchase':
666
- self.current_config.options.purchase.enabled = value
667
- elif field_name == 'assignment':
668
- self.current_config.options.assignment.enabled = value
669
- elif field_name == 'contest':
670
- self.current_config.options.contest.enabled = value
671
- elif field_name == 'produce':
672
- self.current_config.options.produce.enabled = value
673
- elif field_name == 'mission_reward':
674
- self.current_config.options.mission_reward.enabled = value
675
- elif field_name == 'club_reward':
676
- self.current_config.options.club_reward.enabled = value
677
- elif field_name == 'activity_funds':
678
- self.current_config.options.activity_funds.enabled = value
679
- elif field_name == 'presents':
680
- self.current_config.options.presents.enabled = value
681
- elif field_name == 'capsule_toys':
682
- self.current_config.options.capsule_toys.enabled = value
683
- elif field_name == 'upgrade_support_card':
684
- self.current_config.options.upgrade_support_card.enabled = value
685
-
686
- # 保存并重载配置
687
- save_quick_setting(
688
- f"✓ {display_name} 已{'启用' if value else '禁用'}",
689
- f"⚠ {display_name} 已保存,但重新加载失败"
690
- )
691
-
692
- def batch_select(default: bool, produce_only: bool, success_msg: str) -> None:
693
- self.current_config.options.purchase.enabled = default
694
- self.current_config.options.assignment.enabled = default
695
- self.current_config.options.contest.enabled = default
696
- self.current_config.options.produce.enabled = produce_only
697
- self.current_config.options.mission_reward.enabled = default
698
- self.current_config.options.club_reward.enabled = default
699
- self.current_config.options.activity_funds.enabled = default
700
- self.current_config.options.presents.enabled = default
701
- self.current_config.options.capsule_toys.enabled = default
702
- self.current_config.options.upgrade_support_card.enabled = default
703
-
704
- save_quick_setting(success_msg, f"⚠ 数据已保存,但重新加载失败")
705
-
706
- # MARK: 状态 - UI回调函数
707
-
708
- run_btn.click(
709
- fn=on_run_click,
710
- outputs=[run_btn, task_status]
711
- )
712
-
713
- pause_btn.click(
714
- fn=on_pause_click,
715
- outputs=[pause_btn]
716
- )
717
-
718
- select_all_btn.click(
719
- fn=lambda: batch_select(True, True, f"✓ 全选成功"),
720
- outputs=[]
721
- )
722
-
723
- unselect_all_btn.click(
724
- fn=lambda: batch_select(False, False, f"✓ 清空成功"),
725
- outputs=[]
726
- )
727
-
728
- select_produce_only_btn.click(
729
- fn=lambda: batch_select(False, True, f"✓ 只选培育成功"),
730
- outputs=[]
731
- )
732
-
733
- unselect_produce_only_btn.click(
734
- fn=lambda: batch_select(True, False, f"✓ 只不选培育成功"),
735
- outputs=[]
736
- )
737
-
738
- # 绑定快速设置控制的事件
739
-
740
- # 以下回调函数均由.change修改为.input,这样回调函数就只会在用户操作时触发,避免全选功能导致反复触发
741
- purchase_quick.input(
742
- fn=lambda x: update_and_save_quick_setting('purchase', x, '商店'),
743
- inputs=[purchase_quick]
744
- )
745
- assignment_quick.input(
746
- fn=lambda x: update_and_save_quick_setting('assignment', x, '工作'),
747
- inputs=[assignment_quick]
748
- )
749
- contest_quick.input(
750
- fn=lambda x: update_and_save_quick_setting('contest', x, '竞赛'),
751
- inputs=[contest_quick]
752
- )
753
- produce_quick.input(
754
- fn=lambda x: update_and_save_quick_setting('produce', x, '培育'),
755
- inputs=[produce_quick]
756
- )
757
- mission_reward_quick.input(
758
- fn=lambda x: update_and_save_quick_setting('mission_reward', x, '任务奖励'),
759
- inputs=[mission_reward_quick]
760
- )
761
- club_reward_quick.input(
762
- fn=lambda x: update_and_save_quick_setting('club_reward', x, '社团奖励'),
763
- inputs=[club_reward_quick]
764
- )
765
- activity_funds_quick.input(
766
- fn=lambda x: update_and_save_quick_setting('activity_funds', x, '活动费'),
767
- inputs=[activity_funds_quick]
768
- )
769
- presents_quick.input(
770
- fn=lambda x: update_and_save_quick_setting('presents', x, '礼物'),
771
- inputs=[presents_quick]
772
- )
773
- capsule_toys_quick.input(
774
- fn=lambda x: update_and_save_quick_setting('capsule_toys', x, '扭蛋'),
775
- inputs=[capsule_toys_quick]
776
- )
777
- upgrade_support_card_quick.input(
778
- fn=lambda x: update_and_save_quick_setting('upgrade_support_card', x, '支援卡升级'),
779
- inputs=[upgrade_support_card_quick]
780
- )
781
-
782
- # 处理完成后操作下拉框
783
- def save_quick_end_action(action: str):
784
- try:
785
- if action == "关机":
786
- self.current_config.options.end_game.shutdown = True
787
- self.current_config.options.end_game.hibernate = False
788
- elif action == "休眠":
789
- self.current_config.options.end_game.shutdown = False
790
- self.current_config.options.end_game.hibernate = True
791
- else: # 什么都不做
792
- self.current_config.options.end_game.shutdown = False
793
- self.current_config.options.end_game.hibernate = False
794
-
795
- save_config(self.config, "config.json")
796
-
797
- # 尝试热重载配置
798
- if self.reload_config():
799
- gr.Success(f"✓ 完成后操作已设置为 {action}")
800
- else:
801
- gr.Warning("⚠ 设置已保存,但重新加载失败")
802
- except Exception as e:
803
- gr.Error(f"✗ 保存失败:{str(e)}")
804
-
805
- end_action_dropdown.change(
806
- fn=save_quick_end_action,
807
- inputs=[end_action_dropdown]
808
- )
809
-
810
- # 添加定时器,分别更新按钮状态和任务状态
811
- def update_run_button_status():
812
- text, interactive = self.get_button_status()
813
- return gr.Button(value=text, interactive=interactive)
814
-
815
- def update_quick_checkboxes():
816
- """更新快速设置区域控件的状态,确保与设置同步"""
817
- end_action_val = _get_end_action_value()
818
- return [
819
- gr.Checkbox(value=self.current_config.options.purchase.enabled),
820
- gr.Checkbox(value=self.current_config.options.assignment.enabled),
821
- gr.Checkbox(value=self.current_config.options.contest.enabled),
822
- gr.Checkbox(value=self.current_config.options.produce.enabled),
823
- gr.Checkbox(value=self.current_config.options.mission_reward.enabled),
824
- gr.Checkbox(value=self.current_config.options.club_reward.enabled),
825
- gr.Checkbox(value=self.current_config.options.activity_funds.enabled),
826
- gr.Checkbox(value=self.current_config.options.presents.enabled),
827
- gr.Checkbox(value=self.current_config.options.capsule_toys.enabled),
828
- gr.Checkbox(value=self.current_config.options.upgrade_support_card.enabled),
829
- gr.Dropdown(value=end_action_val),
830
- ]
831
-
832
- gr.Timer(1.0).tick(
833
- fn=update_run_button_status,
834
- outputs=[run_btn]
835
- )
836
- gr.Timer(1.0).tick(
837
- fn=self.get_pause_button_with_interactive,
838
- outputs=[pause_btn]
839
- )
840
- gr.Timer(2.0).tick(
841
- fn=update_quick_checkboxes,
842
- outputs=[
843
- purchase_quick, assignment_quick, contest_quick, produce_quick,
844
- mission_reward_quick, club_reward_quick, activity_funds_quick, presents_quick,
845
- capsule_toys_quick, upgrade_support_card_quick, end_action_dropdown
846
- ]
847
- )
848
- gr.Timer(1.0).tick(
849
- fn=self.update_task_status,
850
- outputs=[task_status]
851
- )
852
-
853
- def _create_task_tab(self) -> None:
854
- with gr.Tab("任务"):
855
- gr.Markdown("## 执行任务")
856
-
857
- # 创建任务选择下拉框
858
- task_choices = [task.name for task in task_registry.values()]
859
- task_dropdown = gr.Dropdown(
860
- choices=task_choices,
861
- label="选择要执行的任务",
862
- info="选择一个要单独执行的任务",
863
- type="value",
864
- value=None
865
- )
866
-
867
- # 创建执行按钮和暂停按钮
868
- with gr.Row():
869
- execute_btn = gr.Button("执行任务", scale=2)
870
- pause_btn = gr.Button("暂停", scale=1)
871
- task_result = gr.Markdown("")
872
-
873
- def toggle_single_task(task_name: str) -> Tuple[gr.Button, str]:
874
- if self.single_task_running:
875
- # 如果正在停止过程中,忽略重复点击
876
- if self.is_single_task_stopping:
877
- return gr.Button(value="停止中...", interactive=False), "正在停止任务..."
878
-
879
- result = self.stop_single_task()
880
- return gr.Button(value=result[0], interactive=False), result[1]
881
- else:
882
- result = self.start_single_task(task_name)
883
- return gr.Button(value=result[0], interactive=True), result[1]
884
-
885
- def get_task_button_status() -> gr.Button:
886
- if not hasattr(self, 'run_status') or not self.run_status.running:
887
- self.single_task_running = False
888
- self.is_single_task_stopping = False # 重置停止状态
889
- return gr.Button(value="执行任务", interactive=True)
890
-
891
- if self.is_single_task_stopping:
892
- return gr.Button(value="停止中...", interactive=False) # 停止中时禁用按钮
893
-
894
- return gr.Button(value="停止任务", interactive=True)
895
-
896
- def get_single_task_status() -> str:
897
- if not hasattr(self, 'run_status'):
898
- return ""
899
-
900
- if not self.run_status.running and self.single_task_running:
901
- # 任务已结束但状态未更新
902
- self.single_task_running = False
903
-
904
- # 检查任务状态
905
- for task_status in self.run_status.tasks:
906
- status = task_status.status
907
- task_name = task_status.task.name
908
-
909
- if status == 'finished':
910
- return f"任务 {task_name} 已完成"
911
- elif status == 'error':
912
- return f"任务 {task_name} 出错"
913
- elif status == 'cancelled':
914
- return f"任务 {task_name} 已取消"
915
-
916
- return "任务已结束"
917
-
918
- if self.single_task_running:
919
- for task_status in self.run_status.tasks:
920
- if task_status.status == 'running':
921
- return f"正在执行任务: {task_status.task.name}"
922
-
923
- return "正在准备执行任务..."
924
-
925
- return ""
926
-
927
- def on_pause_click(evt: gr.EventData) -> str:
928
- return self.toggle_pause()
929
-
930
- execute_btn.click(
931
- fn=toggle_single_task,
932
- inputs=[task_dropdown],
933
- outputs=[execute_btn, task_result]
934
- )
935
-
936
- pause_btn.click(
937
- fn=on_pause_click,
938
- outputs=[pause_btn]
939
- )
940
-
941
- # 添加定时器更新按钮状态和任务状态
942
- gr.Timer(1.0).tick(
943
- fn=get_task_button_status,
944
- outputs=[execute_btn]
945
- )
946
- gr.Timer(1.0).tick(
947
- fn=self.get_pause_button_with_interactive,
948
- outputs=[pause_btn]
949
- )
950
- gr.Timer(1.0).tick(
951
- fn=get_single_task_status,
952
- outputs=[task_result]
953
- )
954
-
955
- def _create_emulator_settings(self) -> ConfigBuilderReturnValue:
956
- gr.Markdown("### 模拟器设置")
957
- current_tab = 0
958
-
959
- def _update_emulator_tab_options(impl_value: str, selected_index: int):
960
- nonlocal current_tab
961
- current_tab = selected_index
962
- choices = ['adb', 'adb_raw', 'uiautomator2', 'windows', 'remote_windows', 'nemu_ipc']
963
- if impl_value not in choices:
964
- new_value = choices[0]
965
- else:
966
- new_value = impl_value
967
- return new_value
968
-
969
- with gr.Tabs(selected=self.current_config.backend.type):
970
- with gr.Tab("MuMu 12", id="mumu12") as tab_mumu12:
971
- gr.Markdown("已选中 MuMu 12 模拟器")
972
- mumu_refresh_message = gr.Markdown("<div style='color: red;'>点击下方「刷新」按钮载入信息</div>", visible=True)
973
- mumu_instance = gr.Dropdown(
974
- label="选择多开实例",
975
- choices=[],
976
- interactive=True
977
- )
978
- mumu_refresh_btn = gr.Button("刷新")
979
-
980
- def refresh_mumu_instances():
981
- try:
982
- instances = Mumu12Host.list()
983
- is_mumu12 = self.current_config.backend.type == 'mumu12'
984
- current_id = self.current_config.backend.instance_id if is_mumu12 else None
985
- choices = [(i.name, i.id) for i in instances]
986
- return gr.Dropdown(choices=choices, value=current_id, interactive=True), gr.Markdown(visible=False)
987
- except Exception as e:
988
- logger.exception('Failed to list installed MuMu12')
989
- gr.Error("获取 MuMu12 模拟器列表失败,请升级模拟器到最新版本。若问题依旧,前往 QQ 群、QQ 频道或 Github 反馈 bug。")
990
- return gr.Dropdown(choices=[], interactive=True), gr.Markdown(visible=True)
991
-
992
- mumu_refresh_btn.click(
993
- fn=refresh_mumu_instances,
994
- outputs=[mumu_instance, mumu_refresh_message]
995
- )
996
-
997
- # 如果当前是 MuMu 模拟器且有配置的 instance_id,立即加载实例列表
998
- if self.current_config.backend.type == 'mumu12' and self.current_config.backend.instance_id:
999
- try:
1000
- instances = Mumu12Host.list()
1001
- choices = [(i.name, i.id) for i in instances]
1002
- mumu_instance.choices = choices
1003
- mumu_instance.value = self.current_config.backend.instance_id
1004
- mumu_refresh_message.visible = False
1005
- except Exception as e:
1006
- logger.exception('Failed to auto-load MuMu12 instances')
1007
-
1008
- mumu_background_mode = gr.Checkbox(
1009
- label="MuMu12 模拟器后台保活模式",
1010
- value=self.current_config.backend.mumu_background_mode,
1011
- info=BackendConfig.model_fields['mumu_background_mode'].description,
1012
- interactive=True
1013
- )
1014
-
1015
- with gr.Tab("雷电", id="leidian") as tab_leidian:
1016
- gr.Markdown("已选中雷电模拟器")
1017
- leidian_refresh_message = gr.Markdown("<div style='color: red;'>点击下方「刷新」按钮载入信息</div>", visible=True)
1018
- leidian_instance = gr.Dropdown(
1019
- label="选择多开实例",
1020
- choices=[],
1021
- interactive=True
1022
- )
1023
- leidian_refresh_btn = gr.Button("刷新")
1024
-
1025
- def refresh_leidian_instances():
1026
- try:
1027
- instances = LeidianHost.list()
1028
- is_leidian = self.current_config.backend.type == 'leidian'
1029
- current_id = self.current_config.backend.instance_id if is_leidian else None
1030
- choices = [(i.name, i.id) for i in instances]
1031
- return gr.Dropdown(choices=choices, value=current_id, interactive=True), gr.Markdown(visible=False)
1032
- except Exception as e:
1033
- logger.exception('Failed to list installed Leidian')
1034
- gr.Error("获取雷电模拟器列表失败,请前往 QQ 群、QQ 频道或 Github 反馈 bug。")
1035
- return gr.Dropdown(choices=[], interactive=True), gr.Markdown(visible=True)
1036
-
1037
- leidian_refresh_btn.click(
1038
- fn=refresh_leidian_instances,
1039
- outputs=[leidian_instance, leidian_refresh_message]
1040
- )
1041
-
1042
- # 如果当前是雷电模拟器且有配置的 instance_id,立即加载实例列表
1043
- if self.current_config.backend.type == 'leidian' and self.current_config.backend.instance_id:
1044
- try:
1045
- instances = LeidianHost.list()
1046
- choices = [(i.name, i.id) for i in instances]
1047
- leidian_instance.choices = choices
1048
- leidian_instance.value = self.current_config.backend.instance_id
1049
- leidian_refresh_message.visible = False
1050
- except Exception as e:
1051
- logger.exception('Failed to auto-load Leidian instances')
1052
- # 保持显示刷新提示
1053
-
1054
- with gr.Tab("自定义", id="custom") as tab_custom:
1055
- gr.Markdown("已选中自定义模拟器")
1056
- adb_ip = gr.Textbox(
1057
- value=self.current_config.backend.adb_ip,
1058
- label="ADB IP 地址",
1059
- info=BackendConfig.model_fields['adb_ip'].description,
1060
- interactive=True
1061
- )
1062
- adb_port = gr.Number(
1063
- value=self.current_config.backend.adb_port,
1064
- label="ADB 端口",
1065
- info=BackendConfig.model_fields['adb_port'].description,
1066
- minimum=1,
1067
- maximum=65535,
1068
- step=1,
1069
- interactive=True
1070
- )
1071
- check_emulator = gr.Checkbox(
1072
- label="检查并启动模拟器",
1073
- value=self.current_config.backend.check_emulator,
1074
- info=BackendConfig.model_fields['check_emulator'].description,
1075
- interactive=True
1076
- )
1077
- with gr.Group(visible=self.current_config.backend.check_emulator) as check_emulator_group:
1078
- emulator_path = gr.Textbox(
1079
- value=self.current_config.backend.emulator_path,
1080
- label="模拟器 exe 文件路径",
1081
- info=BackendConfig.model_fields['emulator_path'].description,
1082
- interactive=True
1083
- )
1084
- adb_emulator_name = gr.Textbox(
1085
- value=self.current_config.backend.adb_emulator_name,
1086
- label="ADB 模拟器名称",
1087
- info=BackendConfig.model_fields['adb_emulator_name'].description,
1088
- interactive=True
1089
- )
1090
- emulator_args = gr.Textbox(
1091
- value=self.current_config.backend.emulator_args,
1092
- label="模拟器启动参数",
1093
- info=BackendConfig.model_fields['emulator_args'].description,
1094
- interactive=True
1095
- )
1096
- check_emulator.change(
1097
- fn=lambda x: gr.Group(visible=x),
1098
- inputs=[check_emulator],
1099
- outputs=[check_emulator_group]
1100
- )
1101
-
1102
- with gr.Tab("DMM", id="dmm") as tab_dmm:
1103
- gr.Markdown("已选中 DMM")
1104
-
1105
- choices = ['adb', 'adb_raw', 'uiautomator2', 'windows', 'remote_windows', 'nemu_ipc']
1106
- screenshot_impl = gr.Dropdown(
1107
- choices=choices,
1108
- value=self.current_config.backend.screenshot_impl,
1109
- label="截图方法",
1110
- info=BackendConfig.model_fields['screenshot_impl'].description,
1111
- interactive=True
1112
- )
1113
-
1114
-
1115
- target_screenshot_interval = gr.Number(
1116
- label="最小截图间隔(秒)",
1117
- value=self.current_config.backend.target_screenshot_interval,
1118
- info=BackendConfig.model_fields['target_screenshot_interval'].description,
1119
- minimum=0,
1120
- step=0.1,
1121
- interactive=True
1122
- )
1123
-
1124
- tab_mumu12.select(fn=partial(_update_emulator_tab_options, selected_index=0), inputs=[screenshot_impl], outputs=[screenshot_impl])
1125
- tab_leidian.select(fn=partial(_update_emulator_tab_options, selected_index=1), inputs=[screenshot_impl], outputs=[screenshot_impl])
1126
- tab_custom.select(fn=partial(_update_emulator_tab_options, selected_index=2), inputs=[screenshot_impl], outputs=[screenshot_impl])
1127
- tab_dmm.select(fn=partial(_update_emulator_tab_options, selected_index=3), inputs=[screenshot_impl], outputs=[screenshot_impl])
1128
-
1129
- # 初值
1130
- if self.current_config.backend.type == 'mumu12':
1131
- _update_emulator_tab_options(
1132
- impl_value=self.current_config.backend.screenshot_impl,
1133
- selected_index=0
1134
- )
1135
- elif self.current_config.backend.type == 'leidian':
1136
- _update_emulator_tab_options(
1137
- impl_value=self.current_config.backend.screenshot_impl,
1138
- selected_index=1
1139
- )
1140
- elif self.current_config.backend.type == 'custom':
1141
- _update_emulator_tab_options(
1142
- impl_value=self.current_config.backend.screenshot_impl,
1143
- selected_index=2
1144
- )
1145
- elif self.current_config.backend.type == 'dmm':
1146
- _update_emulator_tab_options(
1147
- impl_value=self.current_config.backend.screenshot_impl,
1148
- selected_index=3
1149
- )
1150
- else:
1151
- gr.Warning(f"未知的模拟器类型:{self.current_config.backend.type}")
1152
-
1153
- def set_config(_: BaseConfig, data: dict[ConfigKey, Any]) -> None:
1154
- # current_tab is updated by _update_emulator_tab_options
1155
- if current_tab == 0: # Mumu
1156
- self.current_config.backend.type = 'mumu12'
1157
- self.current_config.backend.instance_id = data['_mumu_index']
1158
- self.current_config.backend.mumu_background_mode = data['mumu_background_mode']
1159
- elif current_tab == 1: # Leidian
1160
- self.current_config.backend.type = 'leidian'
1161
- self.current_config.backend.instance_id = data['_leidian_index']
1162
- elif current_tab == 2: # Custom
1163
- self.current_config.backend.type = 'custom'
1164
- self.current_config.backend.instance_id = None
1165
- self.current_config.backend.adb_ip = data['adb_ip']
1166
- self.current_config.backend.adb_port = data['adb_port']
1167
- self.current_config.backend.adb_emulator_name = data['adb_emulator_name']
1168
- self.current_config.backend.check_emulator = data['check_emulator']
1169
- self.current_config.backend.emulator_path = data['emulator_path']
1170
- self.current_config.backend.emulator_args = data['emulator_args']
1171
- elif current_tab == 3: # DMM
1172
- self.current_config.backend.type = 'dmm'
1173
- self.current_config.backend.instance_id = None # DMM doesn't use instance_id here
1174
-
1175
- # Common settings for all backend types
1176
- self.current_config.backend.screenshot_impl = data['screenshot_method']
1177
- self.current_config.backend.target_screenshot_interval = data['target_screenshot_interval']
1178
-
1179
- return set_config, {
1180
- 'adb_ip': adb_ip,
1181
- 'adb_port': adb_port,
1182
- 'screenshot_method': screenshot_impl,
1183
- 'target_screenshot_interval': target_screenshot_interval,
1184
- 'check_emulator': check_emulator,
1185
- 'emulator_path': emulator_path,
1186
- 'adb_emulator_name': adb_emulator_name,
1187
- 'emulator_args': emulator_args,
1188
- '_mumu_index': mumu_instance,
1189
- '_leidian_index': leidian_instance,
1190
- 'mumu_background_mode': mumu_background_mode
1191
- }
1192
-
1193
- def _create_purchase_settings(self) -> ConfigBuilderReturnValue:
1194
- with gr.Column():
1195
- gr.Markdown("### 商店购买设置")
1196
- purchase_enabled = gr.Checkbox(
1197
- label="启用商店购买",
1198
- value=self.current_config.options.purchase.enabled,
1199
- info=PurchaseConfig.model_fields['enabled'].description
1200
- )
1201
- with gr.Group(visible=self.current_config.options.purchase.enabled) as purchase_group:
1202
- money_enabled = gr.Checkbox(
1203
- label="启用金币购买",
1204
- value=self.current_config.options.purchase.money_enabled,
1205
- info=PurchaseConfig.model_fields['money_enabled'].description
1206
- )
1207
-
1208
- # 添加金币商店商品选择
1209
- money_items = gr.Dropdown(
1210
- multiselect=True,
1211
- choices=list(DailyMoneyShopItems.all()),
1212
- value=self.current_config.options.purchase.money_items,
1213
- label="金币商店购买物品",
1214
- info=PurchaseConfig.model_fields['money_items'].description
1215
- )
1216
-
1217
- money_refresh = gr.Checkbox(
1218
- label="每日一次免费刷新金币商店",
1219
- value=self.current_config.options.purchase.money_refresh,
1220
- info=PurchaseConfig.model_fields['money_refresh'].description
1221
- )
1222
-
1223
- ap_enabled = gr.Checkbox(
1224
- label="启用AP购买",
1225
- value=self.current_config.options.purchase.ap_enabled,
1226
- info=PurchaseConfig.model_fields['ap_enabled'].description
1227
- )
1228
-
1229
- # 转换枚举值为显示文本
1230
- selected_items: List[str] = []
1231
- ap_items_map = {
1232
- APShopItems.PRODUCE_PT_UP: "支援强化点数提升",
1233
- APShopItems.PRODUCE_NOTE_UP: "笔记数提升",
1234
- APShopItems.RECHALLENGE: "重新挑战券",
1235
- APShopItems.REGENERATE_MEMORY: "回忆再生成券"
1236
- }
1237
- for item_value in self.current_config.options.purchase.ap_items:
1238
- item_enum = APShopItems(item_value)
1239
- if item_enum in ap_items_map:
1240
- selected_items.append(ap_items_map[item_enum])
1241
-
1242
- ap_items = gr.Dropdown(
1243
- multiselect=True,
1244
- choices=list(ap_items_map.values()),
1245
- value=selected_items,
1246
- label="AP商店购买物品",
1247
- info=PurchaseConfig.model_fields['ap_items'].description
1248
- )
1249
-
1250
- purchase_enabled.change(
1251
- fn=lambda x: gr.Group(visible=x),
1252
- inputs=[purchase_enabled],
1253
- outputs=[purchase_group]
1254
- )
1255
-
1256
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
1257
- config.purchase.enabled = data['purchase_enabled']
1258
- config.purchase.money_enabled = data['money_enabled']
1259
- config.purchase.money_items = [DailyMoneyShopItems(x) for x in data['money_items']]
1260
- config.purchase.money_refresh = data['money_refresh']
1261
- config.purchase.ap_enabled = data['ap_enabled']
1262
- ap_items_enum: List[Literal[0, 1, 2, 3]] = []
1263
- ap_items_map: Dict[str, APShopItems] = {
1264
- "支援强化点数提升": APShopItems.PRODUCE_PT_UP,
1265
- "笔记数提升": APShopItems.PRODUCE_NOTE_UP,
1266
- "重新挑战券": APShopItems.RECHALLENGE,
1267
- "回忆再生成券": APShopItems.REGENERATE_MEMORY
1268
- }
1269
- for item in data['ap_items']:
1270
- if item in ap_items_map:
1271
- ap_items_enum.append(ap_items_map[item].value) # type: ignore
1272
- config.purchase.ap_items = ap_items_enum
1273
-
1274
- return set_config, {
1275
- 'purchase_enabled': purchase_enabled,
1276
- 'money_enabled': money_enabled,
1277
- 'ap_enabled': ap_enabled,
1278
- 'ap_items': ap_items,
1279
- 'money_items': money_items,
1280
- 'money_refresh': money_refresh
1281
- }
1282
-
1283
- def _create_work_settings(self) -> ConfigBuilderReturnValue:
1284
- with gr.Column():
1285
- gr.Markdown("### 工作设置")
1286
- assignment_enabled = gr.Checkbox(
1287
- label="启用工作",
1288
- value=self.current_config.options.assignment.enabled,
1289
- info=AssignmentConfig.model_fields['enabled'].description
1290
- )
1291
- with gr.Group(visible=self.current_config.options.assignment.enabled) as work_group:
1292
- with gr.Row():
1293
- with gr.Column():
1294
- mini_live_reassign = gr.Checkbox(
1295
- label="启用重新分配 MiniLive",
1296
- value=self.current_config.options.assignment.mini_live_reassign_enabled,
1297
- info=AssignmentConfig.model_fields['mini_live_reassign_enabled'].description
1298
- )
1299
- mini_live_duration = gr.Dropdown(
1300
- choices=[4, 6, 12],
1301
- value=self.current_config.options.assignment.mini_live_duration,
1302
- label="MiniLive 工作时长",
1303
- interactive=True,
1304
- info=AssignmentConfig.model_fields['mini_live_duration'].description
1305
- )
1306
- with gr.Column():
1307
- online_live_reassign = gr.Checkbox(
1308
- label="启用重新分配 OnlineLive",
1309
- value=self.current_config.options.assignment.online_live_reassign_enabled,
1310
- info=AssignmentConfig.model_fields['online_live_reassign_enabled'].description
1311
- )
1312
- online_live_duration = gr.Dropdown(
1313
- choices=[4, 6, 12],
1314
- value=self.current_config.options.assignment.online_live_duration,
1315
- label="OnlineLive 工作时长",
1316
- interactive=True,
1317
- info=AssignmentConfig.model_fields['online_live_duration'].description
1318
- )
1319
-
1320
- assignment_enabled.change(
1321
- fn=lambda x: gr.Group(visible=x),
1322
- inputs=[assignment_enabled],
1323
- outputs=[work_group]
1324
- )
1325
- # return assignment_enabled, mini_live_reassign, mini_live_duration, online_live_reassign, online_live_duration
1326
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
1327
- config.assignment.enabled = data['assignment_enabled']
1328
- config.assignment.mini_live_reassign_enabled = data['mini_live_reassign']
1329
- config.assignment.mini_live_duration = data['mini_live_duration']
1330
- config.assignment.online_live_reassign_enabled = data['online_live_reassign']
1331
- config.assignment.online_live_duration = data['online_live_duration']
1332
-
1333
- return set_config, {
1334
- 'assignment_enabled': assignment_enabled,
1335
- 'mini_live_reassign': mini_live_reassign,
1336
- 'mini_live_duration': mini_live_duration,
1337
- 'online_live_reassign': online_live_reassign,
1338
- 'online_live_duration': online_live_duration
1339
- }
1340
-
1341
-
1342
- def _create_contest_settings(self) -> ConfigBuilderReturnValue:
1343
- with gr.Column():
1344
- gr.Markdown("### 竞赛设置")
1345
- contest_enabled = gr.Checkbox(
1346
- label="启用竞赛",
1347
- value=self.current_config.options.contest.enabled,
1348
- info=ContestConfig.model_fields['enabled'].description
1349
- )
1350
- with gr.Group(visible=self.current_config.options.contest.enabled) as contest_group:
1351
- select_which_contestant = gr.Dropdown(
1352
- choices=[1, 2, 3],
1353
- value=self.current_config.options.contest.select_which_contestant,
1354
- label="选择第几位竞赛目标",
1355
- interactive=True,
1356
- info=ContestConfig.model_fields['select_which_contestant'].description
1357
- )
1358
-
1359
- when_no_set_choices = [
1360
- ("通知我并跳过竞赛", "remind"),
1361
- ("提醒我并等待手动编成", "wait"),
1362
- ("使用自动编成并提醒我", "auto_set"),
1363
- ("使用自动编成", "auto_set_silent")
1364
- ]
1365
- when_no_set = gr.Dropdown(
1366
- choices=when_no_set_choices,
1367
- value=self.current_config.options.contest.when_no_set,
1368
- label="竞赛队伍未编成时",
1369
- interactive=True,
1370
- info=ContestConfig.model_fields['when_no_set'].description
1371
- )
1372
- contest_enabled.change(
1373
- fn=lambda x: gr.Group(visible=x),
1374
- inputs=[contest_enabled],
1375
- outputs=[contest_group]
1376
- )
1377
-
1378
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
1379
- config.contest.enabled = data['contest_enabled']
1380
- config.contest.select_which_contestant = data['select_which_contestant']
1381
- config.contest.when_no_set = data['when_no_set']
1382
-
1383
- return set_config, {
1384
- 'contest_enabled': contest_enabled,
1385
- 'select_which_contestant': select_which_contestant,
1386
- 'when_no_set': when_no_set
1387
- }
1388
-
1389
- def _create_produce_settings(self) -> ConfigBuilderReturnValue:
1390
- with gr.Column():
1391
- gr.Markdown("### 培育设置")
1392
- produce_enabled = gr.Checkbox(
1393
- label="启用培育",
1394
- value=self.current_config.options.produce.enabled,
1395
- info=ProduceConfig.model_fields['enabled'].description
1396
- )
1397
-
1398
- with gr.Group(visible=self.current_config.options.produce.enabled) as produce_group:
1399
- # 培育方案管理区域
1400
- solution_manager = ProduceSolutionManager()
1401
- solutions = solution_manager.list()
1402
- solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
1403
-
1404
- selected_solution_id = self.current_config.options.produce.selected_solution_id
1405
- solution_dropdown = gr.Dropdown(
1406
- choices=solution_choices,
1407
- value=selected_solution_id,
1408
- label="当前使用的培育方案",
1409
- interactive=True
1410
- )
1411
-
1412
- produce_count = gr.Number(
1413
- minimum=1,
1414
- value=self.current_config.options.produce.produce_count,
1415
- label="培育次数",
1416
- interactive=True,
1417
- info=ProduceConfig.model_fields['produce_count'].description
1418
- )
1419
-
1420
- # 绑定启用状态变化事件
1421
- def on_produce_enabled_change(enabled):
1422
- return gr.Group(visible=enabled)
1423
-
1424
- produce_enabled.change(
1425
- fn=on_produce_enabled_change,
1426
- inputs=[produce_enabled],
1427
- outputs=[produce_group]
1428
- )
1429
-
1430
- # 存储设置Tab中的下拉框引用,供培育Tab使用
1431
- self._settings_solution_dropdown = solution_dropdown
1432
-
1433
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
1434
- config.produce.enabled = data['produce_enabled']
1435
- config.produce.selected_solution_id = data.get('selected_solution_id')
1436
- config.produce.produce_count = data.get('produce_count', 1)
1437
-
1438
- return set_config, {
1439
- 'produce_enabled': produce_enabled,
1440
- 'selected_solution_id': solution_dropdown,
1441
- 'produce_count': produce_count
1442
- }
1443
-
1444
-
1445
- def _create_produce_tab(self) -> None:
1446
- """创建培育Tab"""
1447
- with gr.Tab("培育"):
1448
- gr.Markdown("## 培育管理")
1449
-
1450
- # 培育方案管理区域
1451
- solution_manager = ProduceSolutionManager()
1452
- solutions = solution_manager.list()
1453
- solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
1454
-
1455
- selected_solution_id = self.current_config.options.produce.selected_solution_id
1456
- solution_dropdown = gr.Dropdown(
1457
- choices=solution_choices,
1458
- value=selected_solution_id,
1459
- label="选择培育方案",
1460
- interactive=True
1461
- )
1462
-
1463
- # 获取设置Tab中的下拉框引用
1464
- settings_dropdown = getattr(self, '_settings_solution_dropdown', None)
1465
-
1466
- with gr.Row():
1467
- new_solution_btn = gr.Button("新建培育", scale=1)
1468
- delete_solution_btn = gr.Button("删除当前培育", scale=1)
1469
-
1470
- # 培育方案详细设置区域
1471
- with gr.Group() as solution_settings_group:
1472
- # 获取当前选中的方案数据
1473
- current_solution = None
1474
- if selected_solution_id:
1475
- try:
1476
- current_solution = solution_manager.read(selected_solution_id)
1477
- except ProduceSolutionNotFoundError:
1478
- pass
1479
-
1480
- if current_solution is None:
1481
- # 如果没有选中方案,隐藏所有设置组件
1482
- solution_name = gr.Textbox(label="方案名称", value="", visible=False)
1483
- solution_description = gr.Textbox(label="方案描述", value="", visible=False)
1484
- # 其他设置组件都设为不可见
1485
- produce_mode = gr.Dropdown(
1486
- choices=["regular", "pro", "master"],
1487
- label="培育模式",
1488
- info="进行一次 REGULAR 培育需要 ~30min,进行一次 PRO 培育需要 ~1h(具体视设备性能而定)。",
1489
- visible=False
1490
- )
1491
-
1492
- # 添加偶像选择
1493
- idol_choices = []
1494
- for idol in IdolCard.all():
1495
- if idol.is_another:
1496
- idol_choices.append((f'{idol.name} 「{idol.another_name}」', idol.skin_id))
1497
- else:
1498
- idol_choices.append((f'{idol.name}', idol.skin_id))
1499
-
1500
- produce_idols = gr.Dropdown(
1501
- choices=idol_choices,
1502
- label="选择要培育的偶像",
1503
- multiselect=False,
1504
- info="要培育偶像的 IdolCardSkin.id。",
1505
- visible=False
1506
- )
1507
- kotone_warning = gr.Markdown(visible=False)
1508
- auto_set_memory = gr.Checkbox(
1509
- label="自动编成回忆",
1510
- info="是否自动编成回忆。此选项优先级高于回忆编成编号。",
1511
- visible=False
1512
- )
1513
- with gr.Group(visible=False) as memory_sets_group:
1514
- memory_sets = gr.Dropdown(
1515
- choices=[str(i) for i in range(1, 11)],
1516
- label="回忆编成编号",
1517
- multiselect=False,
1518
- info="要使用的回忆编成编号,从 1 开始。",
1519
- visible=False
1520
- )
1521
- auto_set_support = gr.Checkbox(
1522
- label="自动编成支援卡",
1523
- info="是否自动编成支援卡。此选项优先级高于支援卡编成编号。",
1524
- visible=False
1525
- )
1526
- with gr.Group(visible=False) as support_card_sets_group:
1527
- support_card_sets = gr.Dropdown(
1528
- choices=[str(i) for i in range(1, 11)],
1529
- label="支援卡编成编号",
1530
- multiselect=False,
1531
- info="要使用的支援卡编成编号,从 1 开始。",
1532
- visible=False
1533
- )
1534
- use_pt_boost = gr.Checkbox(
1535
- label="使用支援强化 Pt 提升",
1536
- info="是否使用支援强化 Pt 提升。",
1537
- visible=False
1538
- )
1539
- use_note_boost = gr.Checkbox(
1540
- label="使用笔记数提升",
1541
- info="是否使用笔记数提升。",
1542
- visible=False
1543
- )
1544
- follow_producer = gr.Checkbox(
1545
- label="关注租借了支援卡的制作人",
1546
- info="是否关注租借了支援卡的制作人。",
1547
- visible=False
1548
- )
1549
- self_study_lesson = gr.Dropdown(
1550
- choices=['dance', 'visual', 'vocal'],
1551
- label='文化课自习时选项',
1552
- info='自习课类型。',
1553
- visible=False
1554
- )
1555
- prefer_lesson_ap = gr.Checkbox(
1556
- label="SP 课程优先",
1557
- info="优先 SP 课程。启用后,若出现 SP 课程,则会优先执行 SP 课程,而不是推荐课程。若出现多个 SP 课程,随机选择一个。",
1558
- visible=False
1559
- )
1560
- actions_order = gr.Dropdown(
1561
- choices=[(action.display_name, action.value) for action in ProduceAction],
1562
- label="行动优先级",
1563
- info="每一周的行动将会按这里设置的优先级执行。",
1564
- multiselect=True,
1565
- visible=False
1566
- )
1567
- recommend_card_detection_mode = gr.Dropdown(
1568
- choices=[
1569
- (RecommendCardDetectionMode.NORMAL.display_name, RecommendCardDetectionMode.NORMAL.value),
1570
- (RecommendCardDetectionMode.STRICT.display_name, RecommendCardDetectionMode.STRICT.value)
1571
- ],
1572
- label="推荐卡检测模式",
1573
- info="推荐卡检测模式。严格模式下,识别速度会降低,但识别准确率会提高。",
1574
- visible=False
1575
- )
1576
- use_ap_drink = gr.Checkbox(
1577
- label="AP 不足时自动使用 AP 饮料",
1578
- info="AP 不足时自动使用 AP 饮料",
1579
- visible=False
1580
- )
1581
- skip_commu = gr.Checkbox(
1582
- label="检测并跳过交流",
1583
- info="检测并跳过交流",
1584
- visible=False
1585
- )
1586
- save_solution_btn = gr.Button("保存培育方案", variant="primary", visible=False)
1587
- else:
1588
- # 显示选中方案的设置
1589
- solution_name = gr.Textbox(
1590
- label="方案名称",
1591
- value=current_solution.name,
1592
- interactive=True
1593
- )
1594
- solution_description = gr.Textbox(
1595
- label="方案描述",
1596
- value=current_solution.description or "",
1597
- interactive=True
1598
- )
1599
-
1600
- produce_mode = gr.Dropdown(
1601
- choices=["regular", "pro", "master"],
1602
- value=current_solution.data.mode,
1603
- label="培育模式",
1604
- info="进行一次 REGULAR 培育需要 ~30min,进行一次 PRO 培育需要 ~1h(具体视设备性能而定)。"
1605
- )
1606
-
1607
- # 添加偶像选择
1608
- idol_choices = []
1609
- for idol in IdolCard.all():
1610
- if idol.is_another:
1611
- idol_choices.append((f'{idol.name} 「{idol.another_name}」', idol.skin_id))
1612
- else:
1613
- idol_choices.append((f'{idol.name}', idol.skin_id))
1614
-
1615
- produce_idols = gr.Dropdown(
1616
- choices=idol_choices,
1617
- value=current_solution.data.idol,
1618
- label="选择要培育的偶像",
1619
- multiselect=False,
1620
- interactive=True,
1621
- info="要培育偶像的 IdolCardSkin.id。"
1622
- )
1623
-
1624
- has_kotone = bool(current_solution.data.idol and "藤田ことね" in current_solution.data.idol)
1625
- is_strict_mode = current_solution.data.recommend_card_detection_mode == RecommendCardDetectionMode.STRICT
1626
- kotone_warning = gr.Markdown(
1627
- visible=has_kotone and not is_strict_mode,
1628
- value="使用「藤田ことね」进行培育时,确保将「推荐卡检测模式」设置为「严格模式」"
1629
- )
1630
-
1631
- auto_set_memory = gr.Checkbox(
1632
- label="自动编成回忆",
1633
- value=current_solution.data.auto_set_memory,
1634
- info="是否自动编成回忆。此选项优先级高于回忆编成编号。"
1635
- )
1636
-
1637
- with gr.Group(visible=not current_solution.data.auto_set_memory) as memory_sets_group:
1638
- memory_sets = gr.Dropdown(
1639
- choices=[str(i) for i in range(1, 21)], # 最多20个编成位
1640
- value=str(current_solution.data.memory_set) if current_solution.data.memory_set else None,
1641
- label="回忆编成编号",
1642
- multiselect=False,
1643
- interactive=True,
1644
- info="要使用的回忆编成编号,从 1 开始。"
1645
- )
1646
-
1647
- auto_set_support = gr.Checkbox(
1648
- label="自动编成支援卡",
1649
- value=current_solution.data.auto_set_support_card,
1650
- info="是否自动编成支援卡。此选项优先级高于支援卡编成编号。"
1651
- )
1652
-
1653
- with gr.Group(visible=not current_solution.data.auto_set_support_card) as support_card_sets_group:
1654
- support_card_sets = gr.Dropdown(
1655
- choices=[str(i) for i in range(1, 21)], # 最多20个编成位
1656
- value=str(current_solution.data.support_card_set) if current_solution.data.support_card_set else None,
1657
- label="支援卡编成编号",
1658
- multiselect=False,
1659
- interactive=True,
1660
- info="要使用的支援卡编成编号,从 1 开始。"
1661
- )
1662
- use_pt_boost = gr.Checkbox(
1663
- label="使用支援强化 Pt 提升",
1664
- value=current_solution.data.use_pt_boost,
1665
- info="是否使用支援强化 Pt 提升。"
1666
- )
1667
- use_note_boost = gr.Checkbox(
1668
- label="使用笔记数提升",
1669
- value=current_solution.data.use_note_boost,
1670
- info="是否使用笔记数提升。"
1671
- )
1672
- follow_producer = gr.Checkbox(
1673
- label="关注租借了支援卡的制作人",
1674
- value=current_solution.data.follow_producer,
1675
- info="是否关注租借了支援卡的制作人。"
1676
- )
1677
- self_study_lesson = gr.Dropdown(
1678
- choices=['dance', 'visual', 'vocal'],
1679
- value=current_solution.data.self_study_lesson,
1680
- label='文化课自习时选项',
1681
- info='自习课类型。'
1682
- )
1683
- prefer_lesson_ap = gr.Checkbox(
1684
- label="SP 课程优先",
1685
- value=current_solution.data.prefer_lesson_ap,
1686
- info="优先 SP 课程。启用后,若出现 SP 课程,则会优先执行 SP 课程,而不是推荐课程。若出现多个 SP 课程,随机选择一个。"
1687
- )
1688
- actions_order = gr.Dropdown(
1689
- choices=[(action.display_name, action.value) for action in ProduceAction],
1690
- value=[action.value for action in current_solution.data.actions_order],
1691
- label="行动优先级",
1692
- info="每一周的行动将会按这里设置的优先级执行。",
1693
- multiselect=True
1694
- )
1695
- recommend_card_detection_mode = gr.Dropdown(
1696
- choices=[
1697
- (RecommendCardDetectionMode.NORMAL.display_name, RecommendCardDetectionMode.NORMAL.value),
1698
- (RecommendCardDetectionMode.STRICT.display_name, RecommendCardDetectionMode.STRICT.value)
1699
- ],
1700
- value=current_solution.data.recommend_card_detection_mode.value,
1701
- label="推荐卡检测模式",
1702
- info="推荐卡检测模式。严格模式下,识别速度会降低,但识别准确率会提高。"
1703
- )
1704
- use_ap_drink = gr.Checkbox(
1705
- label="AP 不足时自动使用 AP 饮料",
1706
- value=current_solution.data.use_ap_drink,
1707
- info="AP 不足时自动使用 AP 饮料"
1708
- )
1709
- skip_commu = gr.Checkbox(
1710
- label="检测并跳过交流",
1711
- value=current_solution.data.skip_commu,
1712
- info="检测并跳过交流"
1713
- )
1714
-
1715
- # 添加保存按钮
1716
- save_solution_btn = gr.Button("保存培育方案", variant="primary")
1717
-
1718
- # 添加事件处理
1719
- def update_kotone_warning(selected_idol, recommend_card_detection_mode):
1720
- # Handle case where selected_idol is None (no selection)
1721
- # selected_idol is a single string (skin_id), not a list
1722
- if selected_idol is None:
1723
- has_kotone = False
1724
- else:
1725
- has_kotone = "藤田ことね" in selected_idol
1726
- is_strict_mode = recommend_card_detection_mode == RecommendCardDetectionMode.STRICT.value
1727
- return gr.Markdown(visible=has_kotone and not is_strict_mode)
1728
-
1729
- def on_solution_change(solution_id):
1730
- """当选择的培育方案改变时,更新所有设置组件"""
1731
- if not solution_id:
1732
- return [
1733
- gr.Textbox(value="", visible=False), # solution_name
1734
- gr.Textbox(value="", visible=False), # solution_description
1735
- gr.Dropdown(visible=False), # produce_mode
1736
- gr.Dropdown(visible=False), # produce_idols
1737
- gr.Markdown(visible=False), # kotone_warning
1738
- gr.Checkbox(visible=False), # auto_set_memory
1739
- gr.Group(visible=False), # memory_sets_group
1740
- gr.Dropdown(visible=False), # memory_sets
1741
- gr.Checkbox(visible=False), # auto_set_support
1742
- gr.Group(visible=False), # support_card_sets_group
1743
- gr.Dropdown(visible=False), # support_card_sets
1744
- gr.Checkbox(visible=False), # use_pt_boost
1745
- gr.Checkbox(visible=False), # use_note_boost
1746
- gr.Checkbox(visible=False), # follow_producer
1747
- gr.Dropdown(visible=False), # self_study_lesson
1748
- gr.Checkbox(visible=False), # prefer_lesson_ap
1749
- gr.Dropdown(visible=False), # actions_order
1750
- gr.Dropdown(visible=False), # recommend_card_detection_mode
1751
- gr.Checkbox(visible=False), # use_ap_drink
1752
- gr.Checkbox(visible=False), # skip_commu
1753
- gr.Button(visible=False), # save_solution_btn
1754
- ]
1755
-
1756
- try:
1757
- solution = solution_manager.read(solution_id)
1758
- has_kotone = bool(solution.data.idol and "藤田ことね" in solution.data.idol)
1759
- is_strict_mode = solution.data.recommend_card_detection_mode == RecommendCardDetectionMode.STRICT
1760
-
1761
- return [
1762
- gr.Textbox(value=solution.name, visible=True),
1763
- gr.Textbox(value=solution.description or "", visible=True),
1764
- gr.Dropdown(value=solution.data.mode, visible=True),
1765
- gr.Dropdown(value=solution.data.idol, visible=True),
1766
- gr.Markdown(visible=has_kotone and not is_strict_mode),
1767
- gr.Checkbox(value=solution.data.auto_set_memory, visible=True),
1768
- gr.Group(visible=not solution.data.auto_set_memory),
1769
- gr.Dropdown(value=str(solution.data.memory_set) if solution.data.memory_set else None, visible=True),
1770
- gr.Checkbox(value=solution.data.auto_set_support_card, visible=True),
1771
- gr.Group(visible=not solution.data.auto_set_support_card),
1772
- gr.Dropdown(value=str(solution.data.support_card_set) if solution.data.support_card_set else None, visible=True),
1773
- gr.Checkbox(value=solution.data.use_pt_boost, visible=True),
1774
- gr.Checkbox(value=solution.data.use_note_boost, visible=True),
1775
- gr.Checkbox(value=solution.data.follow_producer, visible=True),
1776
- gr.Dropdown(value=solution.data.self_study_lesson, visible=True),
1777
- gr.Checkbox(value=solution.data.prefer_lesson_ap, visible=True),
1778
- gr.Dropdown(value=[action.value for action in solution.data.actions_order], visible=True),
1779
- gr.Dropdown(value=solution.data.recommend_card_detection_mode.value, visible=True),
1780
- gr.Checkbox(value=solution.data.use_ap_drink, visible=True),
1781
- gr.Checkbox(value=solution.data.skip_commu, visible=True),
1782
- gr.Button(visible=True), # save_solution_btn
1783
- ]
1784
- except ProduceSolutionNotFoundError:
1785
- gr.Warning(f"培育方案 {solution_id} 不存在")
1786
- return on_solution_change(None)
1787
- except Exception as e:
1788
- gr.Error(f"加载培育方案失败:{str(e)}")
1789
- return on_solution_change(None)
1790
-
1791
- def on_new_solution():
1792
- """创建新的培育方案"""
1793
- try:
1794
- new_solution = solution_manager.new("新培育方案")
1795
- solution_manager.save(new_solution.id, new_solution)
1796
-
1797
- # 重新列出所有方案
1798
- solutions = solution_manager.list()
1799
- solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
1800
-
1801
- gr.Success("新培育方案创建成功")
1802
-
1803
- # 更新培育 Tab 下拉框并保持设置 Tab 当前选中值
1804
- updated_dropdown_produce = gr.Dropdown(choices=solution_choices, value=new_solution.id)
1805
- if settings_dropdown is not None:
1806
- current_selected = self.current_config.options.produce.selected_solution_id
1807
- updated_dropdown_settings = gr.Dropdown(choices=solution_choices, value=current_selected)
1808
- return [updated_dropdown_produce, updated_dropdown_settings]
1809
- else:
1810
- return updated_dropdown_produce
1811
- except Exception as e:
1812
- gr.Error(f"创建培育方案失败:{str(e)}")
1813
- if settings_dropdown is not None:
1814
- return [gr.Dropdown(), gr.Dropdown()]
1815
- else:
1816
- return gr.Dropdown()
1817
-
1818
- def on_delete_solution(solution_id):
1819
- """删除当前培育方案"""
1820
- if not solution_id:
1821
- gr.Warning("请先选择要删除的培育方案")
1822
- if settings_dropdown is not None:
1823
- return [gr.Dropdown(), gr.Dropdown()]
1824
- else:
1825
- return gr.Dropdown()
1826
-
1827
- # 若尝试删除当前正在使用的培育方案,则拒绝并提示
1828
- if solution_id == self.current_config.options.produce.selected_solution_id:
1829
- gr.Warning("不可删除选中方案。请先在设置中选择其他方案,保存后再删除此方案。")
1830
- if settings_dropdown is not None:
1831
- return [gr.Dropdown(), gr.Dropdown()]
1832
- else:
1833
- return gr.Dropdown()
1834
-
1835
- try:
1836
- solution_manager.delete(solution_id)
1837
-
1838
- # 重新列出所有方案
1839
- solutions = solution_manager.list()
1840
- solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
1841
-
1842
- gr.Success("培育方案删除成功")
1843
- # 删除方案后,保持当前培育方案的选择不变
1844
- current_selected = self.current_config.options.produce.selected_solution_id
1845
- if current_selected not in [sol.id for sol in solutions]:
1846
- current_selected = None # 已不存在
1847
-
1848
- updated_dropdown = gr.Dropdown(choices=solution_choices, value=current_selected)
1849
- if settings_dropdown is not None:
1850
- return [updated_dropdown, updated_dropdown]
1851
- else:
1852
- return updated_dropdown
1853
- except Exception as e:
1854
- gr.Error(f"删除培育方案失败:{str(e)}")
1855
- if settings_dropdown is not None:
1856
- return [gr.Dropdown(), gr.Dropdown()]
1857
- else:
1858
- return gr.Dropdown()
1859
-
1860
- def on_save_solution(solution_id, name, description, mode, idols, auto_memory, memory_sets,
1861
- auto_support, support_card_sets, pt_boost, note_boost, follow_producer, study_lesson, prefer_ap,
1862
- actions, detection_mode, ap_drink, skip_commu_val):
1863
- """保存培育方案"""
1864
- if not solution_id:
1865
- gr.Warning("请先选择要保存的培育方案")
1866
- if settings_dropdown is not None:
1867
- return [gr.Dropdown(), gr.Dropdown()]
1868
- else:
1869
- return gr.Dropdown()
1870
-
1871
- try:
1872
- # 构建培育数据
1873
- produce_data = ProduceData(
1874
- mode=mode,
1875
- idol=idols if idols else None,
1876
- memory_set=int(memory_sets) if memory_sets else None,
1877
- support_card_set=int(support_card_sets) if support_card_sets else None,
1878
- auto_set_memory=auto_memory,
1879
- auto_set_support_card=auto_support,
1880
- use_pt_boost=pt_boost,
1881
- use_note_boost=note_boost,
1882
- follow_producer=follow_producer,
1883
- self_study_lesson=study_lesson,
1884
- prefer_lesson_ap=prefer_ap,
1885
- actions_order=[ProduceAction(action) for action in actions] if actions else [],
1886
- recommend_card_detection_mode=RecommendCardDetectionMode(detection_mode),
1887
- use_ap_drink=ap_drink,
1888
- skip_commu=skip_commu_val
1889
- )
1890
-
1891
- # 构建方案对象
1892
- solution = ProduceSolution(
1893
- id=solution_id,
1894
- name=name or "未命名方案",
1895
- description=description,
1896
- data=produce_data
1897
- )
1898
-
1899
- # 保存方案
1900
- solution_manager.save(solution_id, solution)
1901
-
1902
- # 重新列出所有方案(确保没有重复项)
1903
- solutions = solution_manager.list()
1904
- solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
1905
-
1906
- gr.Success("培育方案保存成功")
1907
- # 根据是否有设置Tab的下拉框来决定返回值
1908
- updated_dropdown = gr.Dropdown(choices=solution_choices, value=solution_id)
1909
- if settings_dropdown is not None:
1910
- return [updated_dropdown, updated_dropdown]
1911
- else:
1912
- return updated_dropdown
1913
- except Exception as e:
1914
- gr.Error(f"保存培育方案失败:{str(e)}")
1915
- if settings_dropdown is not None:
1916
- return [gr.Dropdown(), gr.Dropdown()]
1917
- else:
1918
- return gr.Dropdown()
1919
-
1920
- # 绑定事件
1921
- # 为所有控件绑定change事件,无论是否有选中方案
1922
- auto_set_memory.change(
1923
- fn=lambda x: gr.Group(visible=not x),
1924
- inputs=[auto_set_memory],
1925
- outputs=[memory_sets_group]
1926
- )
1927
-
1928
- auto_set_support.change(
1929
- fn=lambda x: gr.Group(visible=not x),
1930
- inputs=[auto_set_support],
1931
- outputs=[support_card_sets_group]
1932
- )
1933
-
1934
- if current_solution is not None:
1935
- recommend_card_detection_mode.change(
1936
- fn=update_kotone_warning,
1937
- inputs=[produce_idols, recommend_card_detection_mode],
1938
- outputs=kotone_warning
1939
- )
1940
- produce_idols.change(
1941
- fn=update_kotone_warning,
1942
- inputs=[produce_idols, recommend_card_detection_mode],
1943
- outputs=kotone_warning
1944
- )
1945
-
1946
- # 绑定方案管理事件
1947
- solution_dropdown.change(
1948
- fn=on_solution_change,
1949
- inputs=[solution_dropdown],
1950
- outputs=[
1951
- solution_name, solution_description,
1952
- produce_mode, produce_idols, kotone_warning,
1953
- auto_set_memory, memory_sets_group, memory_sets,
1954
- auto_set_support, support_card_sets_group, support_card_sets,
1955
- use_pt_boost, use_note_boost, follow_producer,
1956
- self_study_lesson, prefer_lesson_ap, actions_order,
1957
- recommend_card_detection_mode, use_ap_drink, skip_commu,
1958
- save_solution_btn
1959
- ]
1960
- )
1961
-
1962
- # 准备输出列表,如果设置Tab的下拉框存在,则同时更新
1963
- outputs_for_new = [solution_dropdown]
1964
- outputs_for_delete = [solution_dropdown]
1965
- outputs_for_save = [solution_dropdown]
1966
-
1967
- if settings_dropdown is not None:
1968
- outputs_for_new.append(settings_dropdown)
1969
- outputs_for_delete.append(settings_dropdown)
1970
- outputs_for_save.append(settings_dropdown)
1971
-
1972
- new_solution_btn.click(
1973
- fn=on_new_solution,
1974
- outputs=outputs_for_new
1975
- )
1976
-
1977
- delete_solution_btn.click(
1978
- fn=on_delete_solution,
1979
- inputs=[solution_dropdown],
1980
- outputs=outputs_for_delete
1981
- )
1982
-
1983
- # 绑定保存按钮事件
1984
- save_solution_btn.click(
1985
- fn=on_save_solution,
1986
- inputs=[
1987
- solution_dropdown, solution_name, solution_description,
1988
- produce_mode, produce_idols,
1989
- auto_set_memory, memory_sets, auto_set_support, support_card_sets,
1990
- use_pt_boost, use_note_boost, follow_producer,
1991
- self_study_lesson, prefer_lesson_ap, actions_order,
1992
- recommend_card_detection_mode, use_ap_drink, skip_commu
1993
- ],
1994
- outputs=outputs_for_save
1995
- )
1996
-
1997
- def _create_club_reward_settings(self) -> ConfigBuilderReturnValue:
1998
- with gr.Column():
1999
- gr.Markdown("### 社团奖励设置")
2000
- club_reward_enabled = gr.Checkbox(
2001
- label="启用社团奖励",
2002
- value=self.current_config.options.club_reward.enabled,
2003
- info=ClubRewardConfig.model_fields['enabled'].description
2004
- )
2005
- with gr.Group(visible=self.current_config.options.club_reward.enabled) as club_reward_group:
2006
- selected_note = gr.Dropdown(
2007
- choices=list(DailyMoneyShopItems.note_items()),
2008
- value=self.current_config.options.club_reward.selected_note,
2009
- label="想在社团奖励中获取到的笔记",
2010
- interactive=True,
2011
- info=ClubRewardConfig.model_fields['selected_note'].description
2012
- )
2013
- club_reward_enabled.change(
2014
- fn=lambda x: gr.Group(visible=x),
2015
- inputs=[club_reward_enabled],
2016
- outputs=[club_reward_group]
2017
- )
2018
-
2019
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2020
- config.club_reward.enabled = data['club_reward_enabled']
2021
- config.club_reward.selected_note = DailyMoneyShopItems(data['selected_note'])
2022
-
2023
- return set_config, {
2024
- 'club_reward_enabled': club_reward_enabled,
2025
- 'selected_note': selected_note
2026
- }
2027
-
2028
- def _create_capsule_toys_settings(self) -> ConfigBuilderReturnValue:
2029
- with gr.Column():
2030
- gr.Markdown("### 扭蛋设置")
2031
- capsule_toys_enabled = gr.Checkbox(
2032
- label="是否启用自动扭蛋机",
2033
- value=self.current_config.options.capsule_toys.enabled,
2034
- info=CapsuleToysConfig.model_fields['enabled'].description
2035
- )
2036
- min_value = 0
2037
- max_value = 10
2038
- with gr.Group(visible=self.current_config.options.capsule_toys.enabled) as capsule_toys_group:
2039
- friend_capsule_toys_count = gr.Number(
2040
- value=self.current_config.options.capsule_toys.friend_capsule_toys_count,
2041
- label="好友扭蛋机的扭蛋次数",
2042
- info=CapsuleToysConfig.model_fields['friend_capsule_toys_count'].description,
2043
- minimum=0,
2044
- maximum=5
2045
- )
2046
- sense_capsule_toys_count = gr.Number(
2047
- value=self.current_config.options.capsule_toys.sense_capsule_toys_count,
2048
- label="感性扭蛋机的扭蛋次数",
2049
- info=CapsuleToysConfig.model_fields['sense_capsule_toys_count'].description,
2050
- minimum=0,
2051
- maximum=5
2052
- )
2053
- logic_capsule_toys_count = gr.Number(
2054
- value=self.current_config.options.capsule_toys.logic_capsule_toys_count,
2055
- label="逻辑扭蛋机的扭蛋次数",
2056
- info=CapsuleToysConfig.model_fields['logic_capsule_toys_count'].description,
2057
- minimum=0,
2058
- maximum=5
2059
- )
2060
- anomaly_capsule_toys_count = gr.Number(
2061
- value=self.current_config.options.capsule_toys.anomaly_capsule_toys_count,
2062
- label="非凡扭蛋机的扭蛋次数",
2063
- info=CapsuleToysConfig.model_fields['anomaly_capsule_toys_count'].description,
2064
- minimum=0,
2065
- maximum=5
2066
- )
2067
- capsule_toys_enabled.change(
2068
- fn=lambda x: gr.Group(visible=x),
2069
- inputs=[capsule_toys_enabled],
2070
- outputs=[capsule_toys_group]
2071
- )
2072
-
2073
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2074
- config.capsule_toys.enabled = data['capsule_toys_enabled']
2075
- config.capsule_toys.friend_capsule_toys_count = data['friend_capsule_toys_count']
2076
- config.capsule_toys.sense_capsule_toys_count = data['sense_capsule_toys_count']
2077
- config.capsule_toys.logic_capsule_toys_count = data['logic_capsule_toys_count']
2078
- config.capsule_toys.anomaly_capsule_toys_count = data['anomaly_capsule_toys_count']
2079
-
2080
- return set_config, {
2081
- 'capsule_toys_enabled': capsule_toys_enabled,
2082
- 'friend_capsule_toys_count': friend_capsule_toys_count,
2083
- 'sense_capsule_toys_count': sense_capsule_toys_count,
2084
- 'logic_capsule_toys_count': logic_capsule_toys_count,
2085
- 'anomaly_capsule_toys_count': anomaly_capsule_toys_count
2086
- }
2087
-
2088
-
2089
- def _create_start_game_settings(self) -> ConfigBuilderReturnValue:
2090
- with gr.Column():
2091
- gr.Markdown("### 启动游戏设置")
2092
- start_game_enabled = gr.Checkbox(
2093
- label="是否启用 自动启动游戏",
2094
- value=self.current_config.options.start_game.enabled,
2095
- info=StartGameConfig.model_fields['enabled'].description
2096
- )
2097
- with gr.Group(visible=self.current_config.options.start_game.enabled) as start_game_group:
2098
- start_through_kuyo = gr.Checkbox(
2099
- label="是否通过Kuyo启动游戏",
2100
- value=self.current_config.options.start_game.start_through_kuyo,
2101
- info=StartGameConfig.model_fields['start_through_kuyo'].description
2102
- )
2103
- game_package_name = gr.Textbox(
2104
- value=self.current_config.options.start_game.game_package_name,
2105
- label="游戏包名",
2106
- info=StartGameConfig.model_fields['game_package_name'].description
2107
- )
2108
- kuyo_package_name = gr.Textbox(
2109
- value=self.current_config.options.start_game.kuyo_package_name,
2110
- label="Kuyo包名",
2111
- info=StartGameConfig.model_fields['kuyo_package_name'].description
2112
- )
2113
- disable_gakumas_localify = gr.Checkbox(
2114
- label="禁用 Gakumas Localify 汉化插件",
2115
- value=self.current_config.options.start_game.disable_gakumas_localify,
2116
- info=StartGameConfig.model_fields['disable_gakumas_localify'].description
2117
- )
2118
- dmm_game_path = gr.Textbox(
2119
- value=self.current_config.options.start_game.dmm_game_path or "",
2120
- label="DMM 版游戏路径",
2121
- info=StartGameConfig.model_fields['dmm_game_path'].description,
2122
- placeholder="例:F:\\Games\\gakumas\\gakumas.exe"
2123
- )
2124
- start_game_enabled.change(
2125
- fn=lambda x: gr.Group(visible=x),
2126
- inputs=[start_game_enabled],
2127
- outputs=[start_game_group]
2128
- )
2129
-
2130
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2131
- config.start_game.enabled = data['start_game_enabled']
2132
- config.start_game.start_through_kuyo = data['start_through_kuyo']
2133
- config.start_game.game_package_name = data['game_package_name']
2134
- config.start_game.kuyo_package_name = data['kuyo_package_name']
2135
- config.start_game.disable_gakumas_localify = data['disable_gakumas_localify']
2136
- config.start_game.dmm_game_path = data['dmm_game_path'] if data['dmm_game_path'] else None
2137
-
2138
- return set_config, {
2139
- 'start_game_enabled': start_game_enabled,
2140
- 'start_through_kuyo': start_through_kuyo,
2141
- 'game_package_name': game_package_name,
2142
- 'kuyo_package_name': kuyo_package_name,
2143
- 'disable_gakumas_localify': disable_gakumas_localify,
2144
- 'dmm_game_path': dmm_game_path
2145
- }
2146
-
2147
-
2148
- def _create_end_game_settings(self) -> ConfigBuilderReturnValue:
2149
- with gr.Column():
2150
- gr.Markdown("### 关闭游戏设置")
2151
- gr.Markdown("在所有任务执行完毕后执行下面这些操作:\n(执行单个任务时不会触发)")
2152
- exit_kaa = gr.Checkbox(
2153
- label="退出 kaa",
2154
- value=self.current_config.options.end_game.exit_kaa,
2155
- info=EndGameConfig.model_fields['exit_kaa'].description
2156
- )
2157
- kill_game = gr.Checkbox(
2158
- label="关闭游戏",
2159
- value=self.current_config.options.end_game.kill_game,
2160
- info=EndGameConfig.model_fields['kill_game'].description
2161
- )
2162
- kill_dmm = gr.Checkbox(
2163
- label="关闭 DMM",
2164
- value=self.current_config.options.end_game.kill_dmm,
2165
- info=EndGameConfig.model_fields['kill_dmm'].description
2166
- )
2167
- kill_emulator = gr.Checkbox(
2168
- label="关闭模拟器",
2169
- value=self.current_config.options.end_game.kill_emulator,
2170
- info=EndGameConfig.model_fields['kill_emulator'].description
2171
- )
2172
- shutdown = gr.Checkbox(
2173
- label="关闭系统",
2174
- value=self.current_config.options.end_game.shutdown,
2175
- info=EndGameConfig.model_fields['shutdown'].description
2176
- )
2177
- hibernate = gr.Checkbox(
2178
- label="休眠系统",
2179
- value=self.current_config.options.end_game.hibernate,
2180
- info=EndGameConfig.model_fields['hibernate'].description
2181
- )
2182
- restore_gakumas_localify = gr.Checkbox(
2183
- label="恢复 Gakumas Localify 汉化插件状态",
2184
- value=self.current_config.options.end_game.restore_gakumas_localify,
2185
- info=EndGameConfig.model_fields['restore_gakumas_localify'].description
2186
- )
2187
-
2188
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2189
- config.end_game.exit_kaa = data['exit_kaa']
2190
- config.end_game.kill_game = data['kill_game']
2191
- config.end_game.kill_dmm = data['kill_dmm']
2192
- config.end_game.kill_emulator = data['kill_emulator']
2193
- config.end_game.shutdown = data['shutdown']
2194
- config.end_game.hibernate = data['hibernate']
2195
- config.end_game.restore_gakumas_localify = data['restore_gakumas_localify']
2196
-
2197
- return set_config, {
2198
- 'exit_kaa': exit_kaa,
2199
- 'kill_game': kill_game,
2200
- 'kill_dmm': kill_dmm,
2201
- 'kill_emulator': kill_emulator,
2202
- 'shutdown': shutdown,
2203
- 'hibernate': hibernate,
2204
- 'restore_gakumas_localify': restore_gakumas_localify
2205
- }
2206
-
2207
- def _create_activity_funds_settings(self) -> ConfigBuilderReturnValue:
2208
- with gr.Column():
2209
- gr.Markdown("### 活动费设置")
2210
- activity_funds = gr.Checkbox(
2211
- label="启用收取活动费",
2212
- value=self.current_config.options.activity_funds.enabled,
2213
- info=ActivityFundsConfig.model_fields['enabled'].description
2214
- )
2215
-
2216
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2217
- config.activity_funds.enabled = data['activity_funds']
2218
-
2219
- return set_config, {
2220
- 'activity_funds': activity_funds
2221
- }
2222
-
2223
- def _create_presents_settings(self) -> ConfigBuilderReturnValue:
2224
- with gr.Column():
2225
- gr.Markdown("### 礼物设置")
2226
- presents = gr.Checkbox(
2227
- label="启用收取礼物",
2228
- value=self.current_config.options.presents.enabled,
2229
- info=PresentsConfig.model_fields['enabled'].description
2230
- )
2231
-
2232
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2233
- config.presents.enabled = data['presents']
2234
-
2235
- return set_config, {
2236
- 'presents': presents
2237
- }
2238
-
2239
- def _create_mission_reward_settings(self) -> ConfigBuilderReturnValue:
2240
- with gr.Column():
2241
- gr.Markdown("### 任务奖励设置")
2242
- mission_reward = gr.Checkbox(
2243
- label="启用领取任务奖励",
2244
- value=self.current_config.options.mission_reward.enabled,
2245
- info=MissionRewardConfig.model_fields['enabled'].description
2246
- )
2247
-
2248
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2249
- config.mission_reward.enabled = data['mission_reward']
2250
-
2251
- return set_config, {
2252
- 'mission_reward': mission_reward
2253
- }
2254
-
2255
- def _create_upgrade_support_card_settings(self) -> ConfigBuilderReturnValue:
2256
- with gr.Column():
2257
- gr.Markdown("### 升级支援卡设置")
2258
- upgrade_support_card_enabled = gr.Checkbox(
2259
- label="启用升级支援卡",
2260
- value=self.current_config.options.upgrade_support_card.enabled,
2261
- info=UpgradeSupportCardConfig.model_fields['enabled'].description
2262
- )
2263
-
2264
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2265
- config.upgrade_support_card.enabled = data['upgrade_support_card_enabled']
2266
-
2267
- return set_config, {
2268
- 'upgrade_support_card_enabled': upgrade_support_card_enabled
2269
- }
2270
-
2271
- def _create_trace_settings(self) -> ConfigBuilderReturnValue:
2272
- with gr.Column():
2273
- gr.Markdown("### 跟踪设置")
2274
- trace_recommend_card_detection = gr.Checkbox(
2275
- label="跟踪推荐卡检测",
2276
- value=self.current_config.options.trace.recommend_card_detection,
2277
- info=TraceConfig.model_fields['recommend_card_detection'].description,
2278
- interactive=True
2279
- )
2280
-
2281
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2282
- config.trace.recommend_card_detection = data['trace_recommend_card_detection']
2283
-
2284
- return set_config, {
2285
- 'trace_recommend_card_detection': trace_recommend_card_detection
2286
- }
2287
-
2288
- def _create_misc_settings(self) -> ConfigBuilderReturnValue:
2289
- with gr.Column():
2290
- gr.Markdown("### 杂项设置")
2291
- check_update = gr.Dropdown(
2292
- choices=[
2293
- ("启动时检查更新", "startup"),
2294
- ("从不检查更新", "never")
2295
- ],
2296
- value=self.current_config.options.misc.check_update,
2297
- label="检查更新时机",
2298
- info=MiscConfig.model_fields['check_update'].description,
2299
- interactive=True
2300
- )
2301
- auto_install_update = gr.Checkbox(
2302
- label="自动安装更新",
2303
- value=self.current_config.options.misc.auto_install_update,
2304
- info=MiscConfig.model_fields['auto_install_update'].description,
2305
- interactive=True
2306
- )
2307
- expose_to_lan = gr.Checkbox(
2308
- label="允许局域网访问",
2309
- value=self.current_config.options.misc.expose_to_lan,
2310
- info=MiscConfig.model_fields['expose_to_lan'].description,
2311
- interactive=True
2312
- )
2313
- with gr.Row():
2314
- gr.Button("创建桌面快捷方式").click(
2315
- fn=self._create_shortcut_button_click(False),
2316
- outputs=[]
2317
- )
2318
- gr.Button("创建一键启动快捷方式").click(
2319
- fn=self._create_shortcut_button_click(True),
2320
- outputs=[]
2321
- )
2322
-
2323
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2324
- config.misc.check_update = data['check_update']
2325
- config.misc.auto_install_update = data['auto_install_update']
2326
- config.misc.expose_to_lan = data['expose_to_lan']
2327
-
2328
- return set_config, {
2329
- 'check_update': check_update,
2330
- 'auto_install_update': auto_install_update,
2331
- 'expose_to_lan': expose_to_lan
2332
- }
2333
-
2334
- def _create_shortcut_button_click(self, start_immediately: bool) -> Callable[[], None]:
2335
- def _inner():
2336
- create_desktop_shortcut(start_immediately)
2337
- gr.Success("快捷方式创建成功")
2338
- return _inner
2339
-
2340
- def _create_idle_settings(self) -> ConfigBuilderReturnValue:
2341
- with gr.Column():
2342
- gr.Markdown("### 闲置挂机")
2343
- idle_enabled = gr.Checkbox(
2344
- label="启用闲置挂机(任意键暂停、闲置自动恢复)",
2345
- value=self.current_config.options.idle.enabled,
2346
- info=IdleModeConfig.model_fields['enabled'].description,
2347
- interactive=True
2348
- )
2349
- idle_seconds = gr.Slider(
2350
- label="自动恢复触发时间(秒)",
2351
- minimum=30,
2352
- maximum=3600,
2353
- step=10,
2354
- value=self.current_config.options.idle.idle_seconds,
2355
- info=IdleModeConfig.model_fields['idle_seconds'].description,
2356
- interactive=True
2357
- )
2358
- idle_minimize_on_pause = gr.Checkbox(
2359
- label="暂停时最小化游戏窗口",
2360
- value=self.current_config.options.idle.minimize_on_pause,
2361
- info=IdleModeConfig.model_fields['minimize_on_pause'].description,
2362
- interactive=True
2363
- )
2364
-
2365
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2366
- config.idle.enabled = data['idle_enabled']
2367
- config.idle.idle_seconds = int(data['idle_seconds'])
2368
- config.idle.minimize_on_pause = data['idle_minimize_on_pause']
2369
-
2370
- return set_config, {
2371
- 'idle_enabled': idle_enabled,
2372
- 'idle_seconds': idle_seconds,
2373
- 'idle_minimize_on_pause': idle_minimize_on_pause,
2374
- }
2375
-
2376
- def _create_debug_settings(self) -> ConfigBuilderReturnValue:
2377
- """调试设置:仅在调试时使用"""
2378
- with gr.Column():
2379
- gr.Markdown("### 调试设置")
2380
- gr.Markdown('<div style="color: red;">仅供调试使用。正常运行时务必关闭下面所有的选项。</div>')
2381
-
2382
- keep_screenshots = gr.Checkbox(
2383
- label="保留截图数据",
2384
- value=self.current_config.keep_screenshots,
2385
- info=UserConfig.model_fields['keep_screenshots'].description,
2386
- interactive=True
2387
- )
2388
-
2389
- trace_recommend_card_detection = gr.Checkbox(
2390
- label="跟踪推荐卡检测",
2391
- value=self.current_config.options.trace.recommend_card_detection,
2392
- info=TraceConfig.model_fields['recommend_card_detection'].description,
2393
- interactive=True
2394
- )
2395
-
2396
- def set_config(config: BaseConfig, data: dict[ConfigKey, Any]) -> None:
2397
- # 保留截图数据属于 UserConfig
2398
- self.current_config.keep_screenshots = data['keep_screenshots']
2399
- # 跟踪推荐卡检测属于 BaseConfig.trace
2400
- config.trace.recommend_card_detection = data['trace_recommend_card_detection']
2401
-
2402
- return set_config, {
2403
- 'keep_screenshots': keep_screenshots,
2404
- 'trace_recommend_card_detection': trace_recommend_card_detection
2405
- }
2406
-
2407
- def _create_settings_tab(self) -> None:
2408
- with gr.Tab("设置"):
2409
- gr.Markdown("## 设置 <span style='color: red; font-size: 0.8rem; font-weight: normal;'>设置修改后需要保存(网页底部)才会生效!</span>")
2410
-
2411
- # 模拟器设置
2412
- emulator_settings = self._create_emulator_settings()
2413
-
2414
- # 商店购买设置
2415
- purchase_settings = self._create_purchase_settings()
2416
-
2417
- # 活动费设置
2418
- activity_funds_settings = self._create_activity_funds_settings()
2419
-
2420
- # 礼物设置
2421
- presents_settings = self._create_presents_settings()
2422
-
2423
- # 工作设置
2424
- work_settings = self._create_work_settings()
2425
-
2426
- # 竞赛设置
2427
- contest_settings = self._create_contest_settings()
2428
-
2429
- # 培育设置
2430
- produce_settings = self._create_produce_settings()
2431
-
2432
- # 任务奖励设置
2433
- mission_reward_settings = self._create_mission_reward_settings()
2434
-
2435
- # 社团奖励设置
2436
- club_reward_settings = self._create_club_reward_settings()
2437
-
2438
- # 扭蛋设置
2439
- capsule_toys_settings = self._create_capsule_toys_settings()
2440
-
2441
- # 升级支援卡设置
2442
- upgrade_support_card_settings = self._create_upgrade_support_card_settings()
2443
-
2444
- # 启动游戏设置
2445
- start_game_settings = self._create_start_game_settings()
2446
-
2447
- # 关闭游戏设置
2448
- end_game_settings = self._create_end_game_settings()
2449
-
2450
- # 杂项设置
2451
- misc_settings = self._create_misc_settings()
2452
-
2453
- # 闲置挂机设置
2454
- idle_settings = self._create_idle_settings()
2455
-
2456
- # 调试设置(放在最后)
2457
- debug_settings = self._create_debug_settings()
2458
-
2459
- save_btn = gr.Button("保存设置")
2460
- result = gr.Markdown()
2461
-
2462
- # 收集所有设置组件
2463
- all_return_values = [
2464
- emulator_settings,
2465
- purchase_settings,
2466
- activity_funds_settings,
2467
- presents_settings,
2468
- work_settings,
2469
- contest_settings,
2470
- produce_settings,
2471
- mission_reward_settings,
2472
- club_reward_settings,
2473
- capsule_toys_settings,
2474
- upgrade_support_card_settings,
2475
- start_game_settings,
2476
- end_game_settings,
2477
- misc_settings,
2478
- idle_settings,
2479
- debug_settings
2480
- ] # list of (set_func, { 'key': component, ... })
2481
- all_components = [list(ret[1].values()) for ret in all_return_values] # [[c1, c2], [c3], ...]
2482
- all_components = list(chain(*all_components)) # [c1, c2, c3, ...]
2483
- save_btn.click(
2484
- fn=partial(self.save_settings2, all_return_values),
2485
- inputs=all_components,
2486
- outputs=result
2487
- )
2488
-
2489
- def _create_log_tab(self) -> None:
2490
- with gr.Tab("反馈"):
2491
- gr.Markdown("## 反馈")
2492
- gr.Markdown('脚本报错或者卡住?在这里填写信息可以快速反馈!')
2493
- with gr.Column():
2494
- report_title = gr.Textbox(label="标题", placeholder="用一句话概括问题")
2495
- report_type = gr.Dropdown(label="反馈类型", choices=["bug"], value="bug", interactive=False)
2496
- report_description = gr.Textbox(label="描述", lines=5, placeholder="详细描述问题。例如:什么时候出错、是否每次都出错、出错时的步骤是什么")
2497
- with gr.Row():
2498
- upload_report_btn = gr.Button("上传")
2499
- save_local_report_btn = gr.Button("保存至本地")
2500
-
2501
- result_text = gr.Markdown("等待操作\n\n\n")
2502
-
2503
- def on_upload_click(title: str, description: str):
2504
- yield from _save_bug_report(title, description, self._kaa.version, upload=True)
2505
-
2506
- def on_save_local_click(title: str, description: str):
2507
- yield from _save_bug_report(title, description, self._kaa.version, upload=False)
2508
-
2509
- upload_report_btn.click(
2510
- fn=on_upload_click,
2511
- inputs=[report_title, report_description],
2512
- outputs=[result_text]
2513
- )
2514
- save_local_report_btn.click(
2515
- fn=on_save_local_click,
2516
- inputs=[report_title, report_description],
2517
- outputs=[result_text]
2518
- )
2519
-
2520
- def _create_whats_new_tab(self) -> None:
2521
- """创建更新标签页"""
2522
- with gr.Tab("更新"):
2523
- gr.Markdown("## 版本管理")
2524
-
2525
- # 更新日志
2526
- with gr.Accordion("更新日志", open=False):
2527
- from kotonebot.kaa.metadata import WHATS_NEW
2528
- gr.Markdown(WHATS_NEW)
2529
-
2530
- # 载入信息按钮
2531
- load_info_btn = gr.Button("载入信息", variant="primary")
2532
-
2533
- # 状态信息
2534
- status_text = gr.Markdown("")
2535
-
2536
- # 版本选择下拉框(用于安装)
2537
- version_dropdown = gr.Dropdown(
2538
- label="选择要安装的版本",
2539
- choices=[],
2540
- value=None,
2541
- visible=False,
2542
- interactive=True
2543
- )
2544
-
2545
- # 安装选定版本按钮
2546
- install_selected_btn = gr.Button("安装选定版本", visible=False)
2547
-
2548
- def list_all_versions():
2549
- """列出所有可用版本"""
2550
- import logging
2551
- logger = logging.getLogger(__name__)
2552
-
2553
- try:
2554
- # 构建命令,使用清华镜像源
2555
- cmd = [
2556
- sys.executable, "-m", "pip", "index", "versions", "ksaa", "--json", "--pre",
2557
- "--index-url", "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple",
2558
- "--trusted-host", "mirrors.tuna.tsinghua.edu.cn"
2559
- ]
2560
- logger.info(f"执行命令: {' '.join(cmd)}")
2561
-
2562
- # 使用 pip index versions --json 来获取版本信息
2563
- result = subprocess.run(
2564
- cmd,
2565
- capture_output=True,
2566
- text=True,
2567
- timeout=30
2568
- )
2569
-
2570
- logger.info(f"命令返回码: {result.returncode}")
2571
- if result.stdout:
2572
- logger.info(f"命令输出: {result.stdout[:500]}...") # 只记录前500字符
2573
- if result.stderr:
2574
- logger.warning(f"命令错误输出: {result.stderr}")
2575
-
2576
- if result.returncode != 0:
2577
- error_msg = f"获取版本列表失败: {result.stderr}"
2578
- logger.error(error_msg)
2579
- return (
2580
- error_msg,
2581
- gr.Button(value="载入信息", interactive=True),
2582
- gr.Dropdown(visible=False),
2583
- gr.Button(visible=False)
2584
- )
2585
-
2586
- # 解析 JSON 输出
2587
- try:
2588
- data = json.loads(result.stdout)
2589
- versions = data.get("versions", [])
2590
- latest_version = data.get("latest", "")
2591
- installed_version = data.get("installed_version", "")
2592
-
2593
- logger.info(f"解析到 {len(versions)} 个版本")
2594
- logger.info(f"最新版本: {latest_version}")
2595
- logger.info(f"已安装版本: {installed_version}")
2596
-
2597
- except json.JSONDecodeError as e:
2598
- error_msg = f"解析版本信息失败: {str(e)}"
2599
- logger.error(error_msg)
2600
- return (
2601
- error_msg,
2602
- gr.Button(value="载入信息", interactive=True),
2603
- gr.Dropdown(visible=False),
2604
- gr.Button(visible=False)
2605
- )
2606
-
2607
- if not versions:
2608
- error_msg = "未找到可用版本"
2609
- logger.warning(error_msg)
2610
- return (
2611
- error_msg,
2612
- gr.Button(value="载入信息", interactive=True),
2613
- gr.Dropdown(visible=False),
2614
- gr.Button(visible=False)
2615
- )
2616
-
2617
- # 构建状态信息
2618
- status_info = []
2619
- if installed_version:
2620
- status_info.append(f"**当前安装版本:** {installed_version}")
2621
- if latest_version:
2622
- status_info.append(f"**最新版本:** {latest_version}")
2623
- status_info.append(f"**找到 {len(versions)} 个可用版本**")
2624
-
2625
- status_message = "\n\n".join(status_info)
2626
- logger.info(f"版本信息载入完成: {status_message}")
2627
-
2628
- # 返回更新后的组件
2629
- return (
2630
- status_message,
2631
- gr.Button(value="载入信息", interactive=True),
2632
- gr.Dropdown(choices=versions, value=versions[0] if versions else None, visible=True, label="选择要安装的版本"),
2633
- gr.Button(visible=True, value="安装选定版本")
2634
- )
2635
-
2636
- except subprocess.TimeoutExpired:
2637
- error_msg = "获取版本列表超时"
2638
- logger.error(error_msg)
2639
- return (
2640
- error_msg,
2641
- gr.Button(value="载入信息", interactive=True),
2642
- gr.Dropdown(visible=False),
2643
- gr.Button(visible=False)
2644
- )
2645
- except Exception as e:
2646
- error_msg = f"获取版本列表失败: {str(e)}"
2647
- logger.error(error_msg)
2648
- return (
2649
- error_msg,
2650
- gr.Button(value="载入信息", interactive=True),
2651
- gr.Dropdown(visible=False),
2652
- gr.Button(visible=False)
2653
- )
2654
-
2655
- def install_selected_version(selected_version: str):
2656
- """安装选定的版本"""
2657
- import logging
2658
- import threading
2659
- import time
2660
- logger = logging.getLogger(__name__)
2661
-
2662
- if not selected_version:
2663
- error_msg = "请先选择一个版本"
2664
- logger.warning(error_msg)
2665
- return error_msg
2666
-
2667
- def install_and_exit():
2668
- """在后台线程中执行安装并退出程序"""
2669
- try:
2670
- # 等待一小段时间确保UI响应已返回
2671
- time.sleep(1)
2672
-
2673
- # 构建启动器命令
2674
- bootstrap_path = os.path.join(os.getcwd(), "bootstrap.pyz")
2675
- cmd = [sys.executable, bootstrap_path, f"--install-version={selected_version}"]
2676
- logger.info(f"开始通过启动器安装版本 {selected_version}")
2677
- logger.info(f"执行命令: {' '.join(cmd)}")
2678
-
2679
- # 启动启动器进程(不等待完成)
2680
- subprocess.Popen(
2681
- cmd,
2682
- cwd=os.getcwd(),
2683
- creationflags=subprocess.CREATE_NEW_CONSOLE if os.name == 'nt' else 0
2684
- )
2685
-
2686
- # 等待一小段时间确保启动器启动
2687
- time.sleep(2)
2688
-
2689
- # 退出当前程序
2690
- logger.info("安装即将开始,正在退出当前程序...")
2691
- os._exit(0)
2692
-
2693
- except Exception as e:
2694
- raise
2695
-
2696
- try:
2697
- # 在后台线程中执行安装和退出
2698
- install_thread = threading.Thread(target=install_and_exit, daemon=True)
2699
- install_thread.start()
2700
-
2701
- return f"正在启动器中安装版本 {selected_version},程序将自动重启..."
2702
-
2703
- except Exception as e:
2704
- error_msg = f"启动安装进程失败: {str(e)}"
2705
- logger.error(error_msg)
2706
- return error_msg
2707
-
2708
- def load_info_with_button_state():
2709
- """载入信息并管理按钮状态"""
2710
- import logging
2711
- logger = logging.getLogger(__name__)
2712
-
2713
- logger.info("开始载入版本信息")
2714
-
2715
- # 先禁用按钮
2716
- yield (
2717
- "正在载入版本信息...",
2718
- gr.Button(value="载入中...", interactive=False),
2719
- gr.Dropdown(visible=False),
2720
- gr.Button(visible=False)
2721
- )
2722
-
2723
- # 执行载入操作
2724
- result = list_all_versions()
2725
- logger.info("版本信息载入操作完成")
2726
- yield result
2727
-
2728
- # 绑定事件
2729
- load_info_btn.click(
2730
- fn=load_info_with_button_state,
2731
- outputs=[status_text, load_info_btn, version_dropdown, install_selected_btn]
2732
- )
2733
-
2734
- install_selected_btn.click(
2735
- fn=install_selected_version,
2736
- inputs=[version_dropdown],
2737
- outputs=[status_text]
2738
- )
2739
-
2740
- def _create_screen_tab(self) -> None:
2741
- with gr.Tab("画面"):
2742
- gr.Markdown("## 当前设备画面")
2743
- refresh_btn = gr.Button("刷新画面", variant="primary")
2744
- WIDTH = 720 // 3
2745
- HEIGHT = 1280 // 3
2746
- last_update_text = gr.Markdown("上次更新时间:无数据")
2747
- screenshot_display = gr.Image(type="numpy", width=WIDTH, height=HEIGHT)
2748
-
2749
- def update_screenshot():
2750
- ctx = ContextStackVars.current()
2751
- if ctx is None:
2752
- return [None, "上次更新时间:无上下文数据"]
2753
- screenshot = ctx._screenshot
2754
- if screenshot is None:
2755
- return [None, "上次更新时间:无截图数据"]
2756
- screenshot = cv2.cvtColor(screenshot, cv2.COLOR_BGR2RGB)
2757
- return screenshot, f"上次更新时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
2758
-
2759
- refresh_btn.click(
2760
- fn=update_screenshot,
2761
- outputs=[screenshot_display, last_update_text]
2762
- )
2763
-
2764
- def _load_config(self) -> None:
2765
- # 加载配置文件
2766
- config_path = "config.json"
2767
- self.config = load_config(config_path, type=BaseConfig, use_default_if_not_found=True)
2768
- if not self.config.user_configs:
2769
- # 如果没有用户配置,创建一个默认配置
2770
- default_config = UserConfig[BaseConfig](
2771
- name="默认配置",
2772
- category="default",
2773
- description="默认配置",
2774
- backend=BackendConfig(),
2775
- options=BaseConfig()
2776
- )
2777
- self.config.user_configs.append(default_config)
2778
- self.current_config = self.config.user_configs[0]
2779
-
2780
-
2781
- def create_ui(self) -> gr.Blocks:
2782
- custom_css = """
2783
- #container { max-width: 800px; margin: auto; padding: 20px; }
2784
- .quick-controls-row > div {
2785
- display: flex !important;
2786
- flex-wrap: nowrap !important;
2787
- gap: 0 !important;
2788
- overflow-x: auto !important;
2789
- }
2790
- .quick-controls-row > div > div {
2791
- min-width: auto !important;
2792
- padding: 0;
2793
- }
2794
- """
2795
- with gr.Blocks(title="琴音小助手", css=custom_css) as app:
2796
- with gr.Column(elem_id="container"):
2797
- gr.Markdown(f"# 琴音小助手 v{self._kaa.version}")
2798
-
2799
- with gr.Tabs():
2800
- self._create_status_tab()
2801
- self._create_task_tab()
2802
- self._create_settings_tab()
2803
- self._create_produce_tab()
2804
- self._create_log_tab()
2805
- self._create_whats_new_tab()
2806
- self._create_screen_tab()
2807
-
2808
- # 启动 IdleModeManager 后台线程
2809
- self.idle_mgr.start()
2810
-
2811
- return app
2812
-
2813
- def main(kaa: Kaa | None = None, start_immidiately: bool = False) -> None:
2814
- kaa = kaa or Kaa('./config.json')
2815
- ui = KotoneBotUI(kaa)
2816
- app = ui.create_ui()
2817
-
2818
- if start_immidiately:
2819
- ui.start_run()
2820
-
2821
- server_name = "0.0.0.0" if ui.current_config.options.misc.expose_to_lan else "127.0.0.1"
2822
- app.launch(inbrowser=True, show_error=True, server_name=server_name)
2823
-
2824
- if __name__ == "__main__":
2825
- main()