ksaa 2025.11__py3-none-any.whl → 2025.11b3__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 (299) hide show
  1. kaa/application/{services → core}/feedback_service.py +1 -1
  2. kaa/config/schema.py +0 -2
  3. kaa/main/gr.py +2733 -71
  4. kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
  5. kaa/resources/game.db +0 -0
  6. kaa/resources/game_ver.txt +0 -0
  7. kaa/sprites/__pycache__/__init__.cpython-310.pyc +0 -0
  8. kaa/tasks/R.py +128 -136
  9. kaa/tasks/daily/purchase.py +1 -33
  10. kaa/tasks/daily/upgrade_support_card.py +2 -12
  11. kaa/tasks/produce/common.py +0 -1
  12. kaa/tasks/produce/in_purodyuusu.py +7 -21
  13. {ksaa-2025.11.dist-info → ksaa-2025.11b3.dist-info}/METADATA +21 -21
  14. {ksaa-2025.11.dist-info → ksaa-2025.11b3.dist-info}/RECORD +275 -299
  15. kaa/__init__.py +0 -0
  16. kaa/application/__init__.py +0 -0
  17. kaa/application/services/__init__.py +0 -0
  18. kaa/application/services/config_service.py +0 -101
  19. kaa/application/services/produce_solution_service.py +0 -83
  20. kaa/application/services/task_service.py +0 -145
  21. kaa/application/ui/__init__.py +0 -0
  22. kaa/application/ui/common.py +0 -123
  23. kaa/application/ui/components/alert.py +0 -251
  24. kaa/application/ui/components/alert.pyi +0 -257
  25. kaa/application/ui/components/categorized_select.pyi +0 -697
  26. kaa/application/ui/facade.py +0 -189
  27. kaa/application/ui/gradio_view.py +0 -135
  28. kaa/application/ui/views/__init__.py +0 -0
  29. kaa/application/ui/views/feedback_view.py +0 -65
  30. kaa/application/ui/views/produce_view.py +0 -251
  31. kaa/application/ui/views/settings_view.py +0 -581
  32. kaa/application/ui/views/status_view.py +0 -171
  33. kaa/application/ui/views/task_view.py +0 -102
  34. kaa/application/ui/views/update_view.py +0 -106
  35. kaa/sprites/41904062-e218-4b28-972a-b5cfcd058d2c.png +0 -0
  36. kaa/sprites/5c49d3b3-656e-4c8c-ae1a-9b0209b9dcc3.png +0 -0
  37. kaa/sprites/ae4742aa-acda-442d-bf73-b3fe7b66e85c.png +0 -0
  38. kaa/util/reactive.py +0 -182
  39. /kaa/application/{services → core}/update_service.py +0 -0
  40. /kaa/sprites/{a32fa779-2fb9-488e-9153-0b99e4352281.png → 03d0acec-15fd-4c21-82ce-122764def185.png} +0 -0
  41. /kaa/sprites/{0a019c0d-26fa-4441-b281-b73060722bc9.png → 03d22cb3-0193-4dcb-8a0d-98b7ca9c2b4c.png} +0 -0
  42. /kaa/sprites/{1d560b06-feac-413d-bf90-07ac045f11fb.png → 0455e229-75c9-44ba-8729-745799746979.png} +0 -0
  43. /kaa/sprites/{98a68736-c4ec-4af1-ac64-40eb48f9c000.png → 049ecbf6-d434-46fa-a42c-a447475269bb.png} +0 -0
  44. /kaa/sprites/{307fcb37-7a90-4a3e-bd3a-64a691aeb5d5.png → 04ea8503-cdd5-4b3e-a33b-63893b92f6ba.png} +0 -0
  45. /kaa/sprites/{2927cceb-29dc-4c35-8614-1df42fc0733b.png → 05251a85-2883-4098-842e-6544391de919.png} +0 -0
  46. /kaa/sprites/{c344b05d-2707-43b0-9e3e-4ec433558dcb.png → 054db45e-1434-4604-91ec-7ac586ca11b5.png} +0 -0
  47. /kaa/sprites/{3fd694ea-8396-4cf3-9ba6-eaf95b61e8c8.png → 06cf74aa-635f-48ab-b965-36981f2063d3.png} +0 -0
  48. /kaa/sprites/{827cec52-d883-46d1-b24b-c11c82b1b459.png → 0814c0fd-6f89-47d3-8089-e8cfde569750.png} +0 -0
  49. /kaa/sprites/{91dbaa9c-7881-4687-bd64-8f25c201d98c.png → 08bde3ff-7554-4bdb-a7f0-193323489d5b.png} +0 -0
  50. /kaa/sprites/{491bd489-7a08-47b4-b1b7-5d0f44cedbca.png → 09222fb0-78a6-4663-8c1f-1d44e881513d.png} +0 -0
  51. /kaa/sprites/{36f11c55-e110-44b7-a800-85f4d7584560.png → 0b436edb-8f6a-429d-87b7-5d4250f651ac.png} +0 -0
  52. /kaa/sprites/{8f5081e4-ed3d-445b-bcf6-2e40c7d08298.png → 0c266b0e-de7a-49c1-9709-b01fb5086f75.png} +0 -0
  53. /kaa/sprites/{0e63e0b7-6874-46e9-86de-8c23e6491f24.png → 0db579bf-d555-4468-8104-c2d2e68d33b1.png} +0 -0
  54. /kaa/sprites/{ccac6d8e-bca2-4ab6-b88b-c0f5ba83df84.png → 114730f6-eddd-4381-b723-aee18cde0d90.png} +0 -0
  55. /kaa/sprites/{4e3a9fd3-86aa-4e14-ae48-46e53a553da2.png → 11870372-dc78-4a80-8320-15bb24da6f25.png} +0 -0
  56. /kaa/sprites/{bdbed86f-553c-458e-9435-d587005b367d.png → 11bc7d35-e58d-4301-a0b0-f557dbd73c7b.png} +0 -0
  57. /kaa/sprites/{546cb160-f99b-4cda-9719-02b38a5393a0.png → 12455dbd-7d70-4435-a3ba-f40654e75c37.png} +0 -0
  58. /kaa/sprites/{3114b2d5-0a96-4eba-9143-b09eabb63612.png → 12f330a6-4eab-4015-b0e3-4e1a35a7b676.png} +0 -0
  59. /kaa/sprites/{58de1cf0-4270-4987-9dc7-3f584f1119d1.png → 14a697d4-0b58-4644-bb2d-8823d2fefcb8.png} +0 -0
  60. /kaa/sprites/{2f7f70ea-f3f0-4d14-8885-1a735ff00545.png → 15605f7a-2206-436c-8a71-011d9f95cf4e.png} +0 -0
  61. /kaa/sprites/{138a527b-2191-4f0f-9e36-1d08bbf6ffb1.png → 15dd89cc-53ed-4c77-a355-62e3bd7a15dd.png} +0 -0
  62. /kaa/sprites/{0343a3b8-8cd6-47af-b956-760dd2c79711.png → 18b13508-c46f-4134-b991-975c0a1b9a74.png} +0 -0
  63. /kaa/sprites/{e82b9645-ee3f-4f63-922e-c1d703344baf.png → 19513e9f-2cbb-4f66-84b7-2ad2faed252d.png} +0 -0
  64. /kaa/sprites/{284a19c3-2c06-48a5-8f78-b4682e8ae19e.png → 1a5c147b-e28e-42ad-893a-7430d8f4fc35.png} +0 -0
  65. /kaa/sprites/{af5a6ae7-a355-492e-86a8-62fa2b06bb54.png → 1b3c84c5-16d1-43a7-8513-719bd7a10450.png} +0 -0
  66. /kaa/sprites/{072b167f-a2f6-4458-815e-a92ca2e6c9eb.png → 1b847790-90e2-44f8-b6d9-4814812006bd.png} +0 -0
  67. /kaa/sprites/{81553259-3b0a-42f7-b7b9-2c6e1dfec6c4.png → 1e57ab88-9962-4024-81df-746529a758f9.png} +0 -0
  68. /kaa/sprites/{78868e34-1c2a-40ee-b08c-c89e6a3aea54.png → 1ef5fa52-b6e1-42d0-947a-ce970eba057d.png} +0 -0
  69. /kaa/sprites/{2dfa926c-83c5-4f40-adfe-ff04ce448264.png → 205e03de-46d9-4983-a2ea-a7f7500d508f.png} +0 -0
  70. /kaa/sprites/{5cb4deb9-2ec5-4452-aba4-390eae2071c7.png → 20bd834e-c99c-4e80-92db-0740e5bbe746.png} +0 -0
  71. /kaa/sprites/{a8ca6a10-ba0a-4416-a27b-3323d38040ab.png → 218a6ab3-93f6-4bb1-9848-8c97ff695945.png} +0 -0
  72. /kaa/sprites/{04c287ed-9ab1-4cd1-af07-8ab61f7f49bc.png → 22071c63-a1bc-4163-8d5a-973b3d579c76.png} +0 -0
  73. /kaa/sprites/{4516d0e4-9280-4f91-ba7d-fc8af83a9996.png → 2460d0c9-50e2-451b-b609-ad466b574395.png} +0 -0
  74. /kaa/sprites/{0899a6e7-6617-4f11-a7a2-9ba377ad6cba.png → 264d021a-b322-4472-8a7b-5f1322aba993.png} +0 -0
  75. /kaa/sprites/{0240342e-b6f3-4ed6-8da5-a64092e6fcde.png → 28335ba3-9a0f-46cd-b66d-047781773264.png} +0 -0
  76. /kaa/sprites/{31b025df-ed25-4bc4-a94a-d05388e9156e.png → 28df544b-72f2-4ed8-8bf3-609ff99633d9.png} +0 -0
  77. /kaa/sprites/{9b91dc78-49e8-41b2-9500-c27cb46023c4.png → 2a82e2d6-0722-433a-87fa-f1752ce0b9b7.png} +0 -0
  78. /kaa/sprites/{97f3fb5a-fce2-4cc5-9da5-f0496e9dd294.png → 2abce6a4-111f-42bb-9255-f98d544108de.png} +0 -0
  79. /kaa/sprites/{0c192ca4-dd10-49b4-b0be-9b1fb4637910.png → 2d8e6464-aceb-41fd-9e78-7523738d5720.png} +0 -0
  80. /kaa/sprites/{14875449-7478-4969-a2d5-91ce34c9d1e4.png → 2f9e2dbb-66a1-4b13-9b9e-d62e10efa6d3.png} +0 -0
  81. /kaa/sprites/{5a337f99-8554-48bf-acb7-364259fbf1b7.png → 307b58f0-20c1-41bd-9eaa-1337fd0e6563.png} +0 -0
  82. /kaa/sprites/{cd601176-0336-41c7-8d3f-31ddf8cf708d.png → 318abb8a-5950-4d22-ac42-77219b5bc1a0.png} +0 -0
  83. /kaa/sprites/{0afb71f5-0752-47af-9ba2-85bdbe4fcbf7.png → 3192a62f-224d-44b1-a0b9-b1fc22de8ec1.png} +0 -0
  84. /kaa/sprites/{4dc5f817-86bc-4433-aeb5-b02c7b63fa8c.png → 31b4c370-696f-4dfc-a918-839495520266.png} +0 -0
  85. /kaa/sprites/{ca258eea-e69a-43c3-ad4c-ac7da0099011.png → 321b7040-87d7-4f87-9b44-ad2972584a11.png} +0 -0
  86. /kaa/sprites/{43d3fe01-27c0-4d3f-a908-aebd00ab219d.png → 330c2207-af32-453b-8db7-889cda83e7cc.png} +0 -0
  87. /kaa/sprites/{861bd6b8-cca7-46b1-9346-83af080e211b.png → 38186efc-850c-4d83-97bc-9417f1494b94.png} +0 -0
  88. /kaa/sprites/{0950d760-6d88-4265-b28c-0790a782a749.png → 38426696-ff13-4f20-9f74-b05855990153.png} +0 -0
  89. /kaa/sprites/{4055dbef-1523-43b7-9183-6b2721b4307b.png → 3a211792-1243-496a-b41e-0e3fd121cd5b.png} +0 -0
  90. /kaa/sprites/{56bc2743-5dd9-4d09-a681-af9d1fec568b.png → 3a4e2d8a-deca-4980-b6c2-37bfc17d2720.png} +0 -0
  91. /kaa/sprites/{3c224540-1571-435a-b8e6-2317e4411438.png → 3a4ec054-2c48-4359-afb9-fa5ea8191d16.png} +0 -0
  92. /kaa/sprites/{9a8bfa87-0e37-4d54-888f-b79f8778d232.png → 3ae72684-1d40-43cf-9508-511c010de64f.png} +0 -0
  93. /kaa/sprites/{16113270-3f35-498a-a29a-52f190d77cc1.png → 3c490171-6810-44f0-b28d-c6b664347a3c.png} +0 -0
  94. /kaa/sprites/{771d1e17-8ef4-417a-b482-26db514e17c6.png → 3cda578a-fa75-4bbd-9cff-be4bc4355a58.png} +0 -0
  95. /kaa/sprites/{b70b958a-9480-4b9b-86a4-5ea099535c36.png → 3e669188-5933-4502-b039-38f4d4649664.png} +0 -0
  96. /kaa/sprites/{0cae32b3-0248-49ad-98dd-d06a89308797.png → 3ea03db7-4de9-45c4-a07b-a9bbc2c63e70.png} +0 -0
  97. /kaa/sprites/{943cde40-f190-40b6-9235-4439fbb4ae50.png → 3ea8e354-2684-46f3-9f5a-43f094717c95.png} +0 -0
  98. /kaa/sprites/{20d01fc0-9a54-4ef5-9983-2bb8414dd94d.png → 3eb9b21b-abbe-49fd-a3a9-6e1c1a6e91d9.png} +0 -0
  99. /kaa/sprites/{0a27a783-0ef8-4f99-8c26-cf89768b5146.png → 3fb84a71-ed15-4989-9598-34e7342f38f5.png} +0 -0
  100. /kaa/sprites/{3658a26d-98d3-462a-abf4-4d8b74aeb134.png → 3ffd2992-fa55-499c-8c3b-193518ebbe07.png} +0 -0
  101. /kaa/sprites/{0d1fd6f0-3a6f-4008-a31a-8189dd09be50.png → 41ff9641-d200-4caa-bcfa-d8389a3438eb.png} +0 -0
  102. /kaa/sprites/{dcbeb7cd-cd57-4daf-b023-ff2c7ef1621a.png → 4370013d-f052-4314-94ff-a342d70754c3.png} +0 -0
  103. /kaa/sprites/{34e50d77-7b95-4bb7-8c62-ad6801dc0e55.png → 455dcf19-63f5-4b0a-99e6-b23d3876d199.png} +0 -0
  104. /kaa/sprites/{5701ecbe-7fed-435c-b409-75f8b0f2df51.png → 45f09e08-53ea-4e08-97dc-70f689bab002.png} +0 -0
  105. /kaa/sprites/{4b88639e-1f17-4e11-90b6-bb122f8cb5ab.png → 4729b509-0f4a-4e96-b186-ec56c680c9e6.png} +0 -0
  106. /kaa/sprites/{20cbf6b8-01db-45fe-a790-dbb7dd639b1d.png → 4eb665ef-7741-40f9-8174-7b6ca66d045b.png} +0 -0
  107. /kaa/sprites/{130cd7fd-767e-4177-9087-71f418f154dd.png → 4f370ff6-61d1-405a-b29e-e6d0b3072194.png} +0 -0
  108. /kaa/sprites/{e4be69f6-6030-4fd8-8a36-fd3938d1734b.png → 4fb1d36c-5fb6-4fe5-9ba3-07e056eb1dfc.png} +0 -0
  109. /kaa/sprites/{45bdb006-bea5-4a1f-bf1a-c3bcb2e99abd.png → 504e4927-bfeb-43ee-aa5c-35cec664a4c8.png} +0 -0
  110. /kaa/sprites/{0f4ac9ae-5e4d-4f3f-b9e0-b76570f2b040.png → 51eb4be2-22fa-4683-82c7-513f5934f7b9.png} +0 -0
  111. /kaa/sprites/{527c3803-1ddd-4f6b-a896-815d3c2e4caa.png → 5247b052-5b45-4e64-b7fc-d566f5d4bc82.png} +0 -0
  112. /kaa/sprites/{a1251011-00a9-402b-82da-1d2744db26cf.png → 545a9032-a676-4d9d-ac74-2b2c9b330d1a.png} +0 -0
  113. /kaa/sprites/{0f8026e8-62a9-49e5-97a6-0d78f33dcfcf.png → 568608bd-a1fa-4faf-ae15-179563a7e84f.png} +0 -0
  114. /kaa/sprites/{1617c180-ce9f-461a-bfdc-390337ecb205.png → 56ac84af-4c85-4b69-b449-98981c1df292.png} +0 -0
  115. /kaa/sprites/{6d302c9d-72cd-49b5-bb11-c39140ffbdd1.png → 57741798-65dd-47eb-b4b1-b3f0e3c3e318.png} +0 -0
  116. /kaa/sprites/{1d92cb8e-49a7-4166-9682-a5807e0c7912.png → 5a49b6d2-2bcb-49bc-a28f-b8bd1441f60a.png} +0 -0
  117. /kaa/sprites/{0f80ac6f-bdf8-4927-8393-c554209f517a.png → 5a677634-99cf-45b5-bc0c-94120872a518.png} +0 -0
  118. /kaa/sprites/{ec0d03db-7c66-46b7-86cc-4acaa6eba1c9.png → 5e2b4bb9-f200-4723-96ac-5f907e28eaaa.png} +0 -0
  119. /kaa/sprites/{791b3367-fb7c-48b5-9a0f-877908e51c4a.png → 5ec51718-1403-4a79-bd85-46e1fe04d8c9.png} +0 -0
  120. /kaa/sprites/{05d7740b-c6ea-453a-b805-7d0a5fe18184.png → 5f2d0b2b-8425-4dd8-8b85-d62f4b75286c.png} +0 -0
  121. /kaa/sprites/{0af981f5-bcc9-48eb-a392-50f79ec5149a.png → 5f4abae0-a1f0-4c8c-9d93-a8525caa9dd0.png} +0 -0
  122. /kaa/sprites/{20ca6d42-c19e-4c3e-b82c-f6642bbe5069.png → 5f6fafd9-43aa-443e-994e-f2688af5e238.png} +0 -0
  123. /kaa/sprites/{6c5698a4-b211-4f38-83a7-51b5f3a36911.png → 6005bf30-fd7c-401e-8efd-050fa97ad7f3.png} +0 -0
  124. /kaa/sprites/{116d3f3a-0255-47ed-b656-c26b41a5cfa8.png → 6069f8bc-2a06-45a4-95ca-1ac9d8fa3b04.png} +0 -0
  125. /kaa/sprites/{02df555c-b19c-4776-8f1b-d1a7e2ed2f82.png → 60896822-de58-4e07-b2d9-86a7f4068de1.png} +0 -0
  126. /kaa/sprites/{bd176e60-3bb2-453f-b2ef-45305b7f21c1.png → 61229c71-303b-4dc9-ba4e-6a14e5ab161e.png} +0 -0
  127. /kaa/sprites/{b406baf0-fa0b-4125-adc6-d370582a6104.png → 622d700e-0fd8-4a92-a286-1e8143c70570.png} +0 -0
  128. /kaa/sprites/{fc86085c-d708-498a-bfa6-92e1a1364c60.png → 62f93327-5946-4a48-aff8-a203483b0562.png} +0 -0
  129. /kaa/sprites/{93f3f6a9-e9d2-45b7-a2b3-1e8b64d10e9b.png → 63b74752-73ce-4020-a7c8-0a71a9f67415.png} +0 -0
  130. /kaa/sprites/{84797a78-97f3-44fa-b3c0-132c914f534a.png → 648d43f6-b251-4d6f-a808-ae7325c91a59.png} +0 -0
  131. /kaa/sprites/{f5e1e7ed-fd35-42c3-97ed-5e9214a50733.png → 64dfeb35-61ad-4e9b-9847-a18530f02584.png} +0 -0
  132. /kaa/sprites/{92f7ef0b-7931-4cd3-afda-c553232eb443.png → 64f8ef99-4766-471b-aeb0-b109704d9615.png} +0 -0
  133. /kaa/sprites/{23922edd-22aa-4514-ba99-65bcd72c2ad1.png → 65f79941-1c78-496a-a67c-c50f4227bd34.png} +0 -0
  134. /kaa/sprites/{9934f05f-ee5f-4131-b08d-aa61d5f3505a.png → 677933e9-1481-4f01-95b4-d55bea51db8c.png} +0 -0
  135. /kaa/sprites/{7c8e37b7-173f-4c03-8f11-bbd47f2a02c2.png → 67edcd91-d2c1-418b-987a-e60263626f56.png} +0 -0
  136. /kaa/sprites/{a4723b5b-2466-4ea4-b7ef-4185bb4dda74.png → 6c032aa7-20e3-4e2e-b1a4-1585141ba22b.png} +0 -0
  137. /kaa/sprites/{1b485aa9-f0c0-4b49-ba75-363a8d6e292c.png → 6f50cd3b-6e46-46c5-99ed-26728d3212ad.png} +0 -0
  138. /kaa/sprites/{06a7097c-fef6-4f2c-bece-26eed414708e.png → 6f6d7af3-8380-439b-9d26-3fbd5a103b49.png} +0 -0
  139. /kaa/sprites/{cea2d5c4-6e79-425e-9e98-7e7dbdee960b.png → 6fadb00b-e32e-4c45-a738-f21b8f48c139.png} +0 -0
  140. /kaa/sprites/{47186b16-f478-4a53-8e49-a132ee4c78db.png → 71913fde-c3db-463d-800d-e1b35fa2c8b4.png} +0 -0
  141. /kaa/sprites/{5588396d-dd38-4ef1-8c37-3041a750b1cc.png → 719297ec-82be-4820-8ecf-8bf6322b81fe.png} +0 -0
  142. /kaa/sprites/{ba1983ce-bf63-4022-9ef3-dcf97030e6c5.png → 71976c1a-5df9-44a5-b4ea-08b5d617d813.png} +0 -0
  143. /kaa/sprites/{0be5a84d-eb1e-4bb3-afcd-923e104190f4.png → 72a8bcd2-3f32-4ee5-8295-eedf441d6a1a.png} +0 -0
  144. /kaa/sprites/{20e1e948-6920-44cd-965e-9e1e37b3fbf2.png → 73b6f3aa-5179-41d6-a82e-22e14aa8cd6a.png} +0 -0
  145. /kaa/sprites/{ba7676fe-4982-4e92-822d-9c1a623420ac.png → 76970b91-7864-4413-bfc7-79c04a48dce7.png} +0 -0
  146. /kaa/sprites/{458b8bbe-9fa5-48d4-907b-66d36baf16a1.png → 7a74b5f5-7a04-4678-8e6e-57b5de127182.png} +0 -0
  147. /kaa/sprites/{45062c9b-a31d-457b-83a2-9b6891384a15.png → 7b4c3a81-8f09-4a00-90ee-d4df3f57e863.png} +0 -0
  148. /kaa/sprites/{31168fe2-8601-4de6-aa40-81e7ce452391.png → 7c4ca388-5167-478a-a32b-0e108edad888.png} +0 -0
  149. /kaa/sprites/{c95e8a90-dd6e-4cca-b74b-85ee90dbd5c1.png → 7c62081d-097a-4514-a69d-69e96201e816.png} +0 -0
  150. /kaa/sprites/{001486b2-f627-4ece-8c93-4dfec47da9b3.png → 7d4709f8-6d0d-493f-819e-74cb0f7c166b.png} +0 -0
  151. /kaa/sprites/{d0d9f650-bb30-4743-81f3-cd7ea8211d5c.png → 7e16af89-bb51-4889-8a7e-25715ff5faa1.png} +0 -0
  152. /kaa/sprites/{9af13381-661d-41cf-b704-e4a9c3691e14.png → 7e8904fd-5863-471f-8e9a-d69d9ca72f8f.png} +0 -0
  153. /kaa/sprites/{7ddaa9db-2287-43ba-8531-065e618ac8ef.png → 7efce7bc-12a5-4a53-9a0a-9fa755649ebd.png} +0 -0
  154. /kaa/sprites/{8b6a1eed-341d-4be1-b0ae-9adc52ed4543.png → 803fb770-6982-4460-8fe0-f9ccd67367c2.png} +0 -0
  155. /kaa/sprites/{3d9a9493-7616-4b2b-867e-44e776d831c0.png → 80800c2e-417d-4118-b726-93aaabfc08bd.png} +0 -0
  156. /kaa/sprites/{4e7f7b91-344c-4fb2-95fe-004831e81b11.png → 81b1b160-2d0f-42ad-924a-9572a54f343a.png} +0 -0
  157. /kaa/sprites/{8e024c75-c872-4e18-bb80-0c5894612815.png → 82200c8c-0916-4601-839a-945f96cc4ebc.png} +0 -0
  158. /kaa/sprites/{acaea032-45b8-4ad8-8b54-ff011750af80.png → 82259f79-2bef-442b-bf16-78cb4f22e3be.png} +0 -0
  159. /kaa/sprites/{46cb87f6-26f7-45f0-b10c-6491f115077e.png → 8299e3e2-cfd5-4380-adce-a46c93b1be4d.png} +0 -0
  160. /kaa/sprites/{9803a197-d873-43cc-9656-d63513e92fad.png → 83c27159-36d2-4ccf-ace7-e5d2169e7e52.png} +0 -0
  161. /kaa/sprites/{16cf9d8b-4f8e-47ce-a63d-fe9bfc3f31e8.png → 861a4faa-2522-41e9-8e20-7bd9180bea5a.png} +0 -0
  162. /kaa/sprites/{f31531b4-79ea-41dc-b23f-e445b818139c.png → 8661bc83-9b0a-4555-8b21-2258b31c7f57.png} +0 -0
  163. /kaa/sprites/{7bb874a3-3fac-4138-83bd-d6461c5793d3.png → 87ed135a-2eb1-4e21-8928-d0307a22ea66.png} +0 -0
  164. /kaa/sprites/{f72e9d65-68e7-4bb6-be44-4b5ed71f0bce.png → 8805fead-f7e2-4905-a42e-05ebba2fbe21.png} +0 -0
  165. /kaa/sprites/{7833fa1e-c842-4efd-a696-c67150a1dfa8.png → 88be2dcc-68ca-4596-9b2c-544a196cab64.png} +0 -0
  166. /kaa/sprites/{c68f1282-4d86-4b1a-b76b-dcf42f3f906b.png → 89437aca-7339-4795-b848-ec529b1e5e8d.png} +0 -0
  167. /kaa/sprites/{c3c495a2-1530-439f-a10e-76ca5d929cce.png → 89841ff0-e834-4a7e-b9d5-00a9490b6b7f.png} +0 -0
  168. /kaa/sprites/{b33bb89c-cabb-4fe0-822f-d911e8b42f82.png → 8a0260f5-b32e-430e-bc98-7b5a77cab6ab.png} +0 -0
  169. /kaa/sprites/{a6269fe5-e719-43ad-b674-ea728e43066b.png → 8bf08bab-7c55-45e1-8433-c2213a323480.png} +0 -0
  170. /kaa/sprites/{f7246b84-e70b-47d3-8166-90f0dc4f2bb6.png → 8c3bc157-022a-4bb1-be74-af1ad254e67f.png} +0 -0
  171. /kaa/sprites/{6b63fca9-a1ec-490e-96e9-fc0beeeb8851.png → 8d09178a-251e-4f74-b023-12233417621b.png} +0 -0
  172. /kaa/sprites/{ce7cec02-4039-4171-87ed-37eccc4ac832.png → 8d416e23-04ef-47bd-8cc8-7f18d1bab736.png} +0 -0
  173. /kaa/sprites/{1dadf765-ddd0-4768-9e91-6d3d08d0ca0d.png → 8f9dd0f0-f9af-4eec-a89e-8f2c92f88a98.png} +0 -0
  174. /kaa/sprites/{a408cdfd-e394-4ada-9f0e-5878e41b8e52.png → 8fbee6fe-9409-407e-8f55-d2d36ab37f6a.png} +0 -0
  175. /kaa/sprites/{5933f6ab-7af4-4731-aac8-d95939a3fbbf.png → 8fdc102b-d8f3-4d16-b8ef-1d804f5aff07.png} +0 -0
  176. /kaa/sprites/{0dbb752b-e60a-459d-80fa-f5b49e8b8e4d.png → 9088f8c0-59f8-41c6-994c-ae283ac94c24.png} +0 -0
  177. /kaa/sprites/{24c2db22-24e2-484e-8c16-8b1c9fe3ed14.png → 922af7d1-75e9-4ac8-a4e7-2dad8bb1ca87.png} +0 -0
  178. /kaa/sprites/{9bc6607d-ce44-467e-a5f4-b3cf30210c13.png → 93e91dd0-0050-48b4-8bf8-c732cd76f0e3.png} +0 -0
  179. /kaa/sprites/{27bcc513-9bab-468a-97b8-ed16f918e2a4.png → 94ed55fe-3ef8-46bc-855a-a7b1dedab801.png} +0 -0
  180. /kaa/sprites/{26683d54-74a9-4e7b-a839-c2e0850d1458.png → 95d715c3-d569-48b5-be7b-c21cd2a160db.png} +0 -0
  181. /kaa/sprites/{1539fcff-8842-478f-98a8-0d1a885d1b43.png → 97a3791d-fa9d-453d-8081-c574fe88b823.png} +0 -0
  182. /kaa/sprites/{d5407f49-fecc-404e-915a-22c9fa16a79a.png → 993a33ac-994b-4eb0-9c1e-b9412d499d67.png} +0 -0
  183. /kaa/sprites/{affc5006-4b67-4490-9fa7-557a7fecb133.png → 99a27ff1-bc1c-48a2-9f9b-0803338d1bd8.png} +0 -0
  184. /kaa/sprites/{7469d458-d308-4469-8bf1-b63e1ddc6a3c.png → 9a9a1f40-d308-4aa5-8d91-60342bc6a4e0.png} +0 -0
  185. /kaa/sprites/{4280fa1d-4223-4fc4-85f9-caf6157cb004.png → 9acd9a59-004f-4e1d-a208-0c293f2702d5.png} +0 -0
  186. /kaa/sprites/{b62f9c30-1faf-47fc-be8f-36db3806c5dc.png → 9f3bfe36-8462-404f-94da-9bc324b1beed.png} +0 -0
  187. /kaa/sprites/{32af48d2-fb5b-4288-930f-eb36edfe2116.png → 9f46f543-d7dc-4836-a210-125d686475f9.png} +0 -0
  188. /kaa/sprites/{dab08e98-9053-4e2a-9e74-cf30298fea22.png → 9f573ac2-9d28-4d92-8e3f-1b78031220dd.png} +0 -0
  189. /kaa/sprites/{f9697f23-07cf-4a14-8b22-d1fc95386c16.png → a2545c5c-b5cc-4fd2-93c1-04c74c17ee16.png} +0 -0
  190. /kaa/sprites/{7def2661-0847-4459-88c6-5270c2e8a32c.png → a2dd125b-9868-4e01-9a46-3b552c2ebdc9.png} +0 -0
  191. /kaa/sprites/{38bb2a90-b2a9-4f85-9025-662e83ab1ed1.png → a34502b4-10bd-42ca-9ada-a9cdb57097dc.png} +0 -0
  192. /kaa/sprites/{8473bc42-1909-4d70-b80d-7eba085c9978.png → a3fe5859-62ba-403e-9367-65db0ad15943.png} +0 -0
  193. /kaa/sprites/{0b83c2e5-ebb4-4a69-8b5f-658774d4c5a6.png → a42ac612-acbd-45cc-88fb-104ff9b7d2d8.png} +0 -0
  194. /kaa/sprites/{38f70a7e-5f7e-4ee6-a7c5-5f8014734719.png → a4c6d967-0251-4b33-acb3-81d24f82d5a4.png} +0 -0
  195. /kaa/sprites/{511232f6-01d6-482a-81a3-2bf79a6e88ed.png → a6ed21f0-4da4-4065-bb59-062a70e132ca.png} +0 -0
  196. /kaa/sprites/{aff3d8ac-d648-434c-9adb-6c1a10aa04b9.png → a7f25aeb-d91b-47e0-ba1a-0c6382380102.png} +0 -0
  197. /kaa/sprites/{459f532f-115c-4527-a897-affa7ddcbd76.png → a888e87e-49fe-405d-b074-3dda30304808.png} +0 -0
  198. /kaa/sprites/{ae5a051e-37f5-4e54-bfc7-64c445ad6fcc.png → a97e2840-1575-4f2c-97df-6a720c644969.png} +0 -0
  199. /kaa/sprites/{cb8d5df6-300b-48e5-ae0b-2b4750c9c092.png → a9ba2741-38da-4448-ab80-f0e5b3c3847f.png} +0 -0
  200. /kaa/sprites/{cda022d1-7898-4006-95c5-b55eceda9d95.png → a9c5aeb0-c0c9-47da-8793-ffe8d172bea0.png} +0 -0
  201. /kaa/sprites/{eab111a6-80bf-45c1-9a74-b44ca76508b7.png → aba47934-f264-49f9-a72c-6ed90b112701.png} +0 -0
  202. /kaa/sprites/{c98d6bc7-45ca-4877-8cd1-6f36d6a86a02.png → abe2757f-84f3-4967-bd05-79c17cb1f32c.png} +0 -0
  203. /kaa/sprites/{a5ba613c-46f4-4442-88e1-fbda4dd65a55.png → acd741da-d4ab-4b76-a6a3-4a2fd25870ef.png} +0 -0
  204. /kaa/sprites/{a88e3da2-98d3-4a64-b7ac-040847028a83.png → ad17ae00-f6ce-4f32-9386-9a8073b5e79a.png} +0 -0
  205. /kaa/sprites/{4059ec2d-cd20-4dd3-8586-e49a4cfa8717.png → ae0ce964-eb8f-45a1-aa4d-f47a5c8c720f.png} +0 -0
  206. /kaa/sprites/{2c5784df-e89b-4b95-a4b9-bac083c0ec08.png → ae106b38-da4f-4b0d-b9c3-541fd58f4de7.png} +0 -0
  207. /kaa/sprites/{e70ce43b-9b3b-4aa0-8b9c-1d5cc4a1d5b0.png → ae73d26b-2d47-4921-a6ec-5bbea32773a3.png} +0 -0
  208. /kaa/sprites/{7d4d06a8-7903-4803-a20b-7f45ffbe9ca7.png → aeab8f9a-fe61-4c2d-a494-ffc19a9cae91.png} +0 -0
  209. /kaa/sprites/{4876c6f3-17a5-4858-b1d1-ebb5619516c5.png → affc87db-2f63-4e4a-855e-6ff608226f1e.png} +0 -0
  210. /kaa/sprites/{3aceddce-09db-422a-8023-e08d41070cc8.png → b02c15b5-04b4-40d9-bb13-267786e8e049.png} +0 -0
  211. /kaa/sprites/{6c82d28f-913c-4444-baa6-2e37c7e24bc6.png → b10281ae-cfaf-4400-b2fb-c8c2b432c8e7.png} +0 -0
  212. /kaa/sprites/{6e603eb6-2336-46d2-ad01-2ba2fc3d4cbd.png → b40bebbf-2800-40fb-b7a2-1c2d5995e747.png} +0 -0
  213. /kaa/sprites/{b5f80604-d7d3-49e0-9934-58f75c393ffb.png → b76add75-2187-428c-9ede-fb43086bacb6.png} +0 -0
  214. /kaa/sprites/{6baaecdd-2817-4ba3-a2da-346ef9ef92fd.png → b77a7e97-dc59-493d-9d76-4ea9c2876978.png} +0 -0
  215. /kaa/sprites/{4a853ac5-24d5-44ac-8ddf-9f501c60a9be.png → b7f62cab-cc24-480e-bf4c-25c43a1e801e.png} +0 -0
  216. /kaa/sprites/{821c86c1-bc35-40bc-95db-f66935a92299.png → b9770cd2-b55f-44dc-965f-f29686fba7da.png} +0 -0
  217. /kaa/sprites/{c295af98-0b43-4f18-bbc3-e59d23055f1b.png → ba8ee2cd-f662-440c-90b3-1e4bfe7bab6b.png} +0 -0
  218. /kaa/sprites/{6a27faad-df3b-49d9-a20f-64ae8e8f9e22.png → bb3990c8-4618-4d96-9365-a4d1213b59f7.png} +0 -0
  219. /kaa/sprites/{e7c00f25-b15a-4403-a201-07b9b168e9f5.png → bbe59f62-c3e7-404c-a313-b50db70de7b5.png} +0 -0
  220. /kaa/sprites/{1472da80-4cbb-41e1-94e8-3ea3defd3b6f.png → bd4cd421-f702-47c0-9f8b-77914973108c.png} +0 -0
  221. /kaa/sprites/{a9f020e9-0e4b-4ddc-b8b8-386009578c15.png → bdb1460e-c5db-494a-a58a-688f72b6bdba.png} +0 -0
  222. /kaa/sprites/{e9fad64b-e4e2-46cb-a820-b2860b38da03.png → bdb72f31-5808-4451-827f-fffc3b616083.png} +0 -0
  223. /kaa/sprites/{8448237d-2db5-49ca-8d55-9fc0e56639a7.png → bf3ff37e-d4fc-42ee-87d6-db1e2040aed5.png} +0 -0
  224. /kaa/sprites/{d8485972-4e67-4190-8d95-60fd3c68b2ce.png → bff753bb-b02e-441b-89e5-14845f18c6f6.png} +0 -0
  225. /kaa/sprites/{bb953e97-7185-4c2c-b177-48d743e90d96.png → c035ac76-39e9-466b-a606-28bc52bc73e8.png} +0 -0
  226. /kaa/sprites/{b93b3c36-79a3-4c1a-944a-20fe6a88c46d.png → c05a600a-d79e-432d-a49f-5b2443d67bd4.png} +0 -0
  227. /kaa/sprites/{4b7426e9-395a-410c-bb99-c6f0a7b81208.png → c0801be3-f07a-4afc-ab0d-7f5d3c4afbd3.png} +0 -0
  228. /kaa/sprites/{b2a04604-15d4-4ff6-86f7-0823e642103f.png → c2100faf-1234-49db-b6d4-5a08a4b08272.png} +0 -0
  229. /kaa/sprites/{011e352f-6e8b-4225-b104-d1b2ccf0761c.png → c4505a31-74c5-4b3d-bfcf-a67c3ef0039e.png} +0 -0
  230. /kaa/sprites/{32de6ba0-859f-4f40-a57e-92bed913e3a7.png → c6b0f9ba-a976-474b-b22d-6fe4391d9373.png} +0 -0
  231. /kaa/sprites/{45af668c-2324-4fe4-83e0-11d65cfaa086.png → c6b6b77b-2ec7-4fb7-8033-f4d061f4e9c8.png} +0 -0
  232. /kaa/sprites/{ba971684-1fe3-47e1-8bdb-d20a0011ea68.png → c76c6ccb-d099-4c3c-9eda-13be33aa48ae.png} +0 -0
  233. /kaa/sprites/{d277a9c3-2b2c-42fc-9fbb-a836413c8cf4.png → c78fb143-18e3-4697-a0c1-6151514f2a7c.png} +0 -0
  234. /kaa/sprites/{7db2d761-ab44-4b3b-85aa-9b9758f97d5d.png → c8c17304-e949-4dfc-b07d-9e7133483e31.png} +0 -0
  235. /kaa/sprites/{aad1ac7d-cfa1-4459-9d46-d39c080bd78e.png → c91874f4-363f-4997-a38e-3e486dfd8043.png} +0 -0
  236. /kaa/sprites/{276c0178-65af-4b69-a3c3-d04253b9ed91.png → c9245201-4d29-4088-a5e0-f4e93d4494b5.png} +0 -0
  237. /kaa/sprites/{b002896d-5093-48e5-9e01-d18bfb240961.png → cb0bbf0f-a25b-4ec4-99bd-f5742270a062.png} +0 -0
  238. /kaa/sprites/{0d2143fa-7e81-4e7a-8a94-c3839719de5b.png → cb15d9a3-78fe-4f03-bd23-90ba6169ddff.png} +0 -0
  239. /kaa/sprites/{7ce3a2d5-efa7-4091-b012-f2870d9df422.png → ccfab3e2-7b6d-4ae3-998b-4e5c1863884a.png} +0 -0
  240. /kaa/sprites/{c05baa1e-02c3-4d02-904f-76086edbb97f.png → cdf310f0-b917-4f92-95a9-893af76e3c3a.png} +0 -0
  241. /kaa/sprites/{89663a2f-c6d3-4bb7-9935-a54d11d0a382.png → cea8f98d-ba68-498f-bd3d-cc10f0d4575b.png} +0 -0
  242. /kaa/sprites/{7156a1b5-cdd7-446e-9caf-d9f6b313ef4d.png → cec36685-85a7-4e84-bbbc-4df70b4f7bac.png} +0 -0
  243. /kaa/sprites/{f35e19ca-7de7-4721-af53-b5f95c5e74fe.png → cf49878d-a1c5-4b9f-9502-1e0d9eaadc49.png} +0 -0
  244. /kaa/sprites/{5d42f16f-3475-4ffb-ac85-3c86fa8fba46.png → d1bdfa3b-34df-488d-9f9b-8c7b04dd4ab3.png} +0 -0
  245. /kaa/sprites/{ef0db31a-fc44-4972-af7e-21c50f0b139c.png → d23a600a-7002-4268-96a4-18dc54928ec6.png} +0 -0
  246. /kaa/sprites/{e5196344-d61a-48ff-bc48-63f8f63c3788.png → d57f792a-f086-4fbe-b4d9-5db629a78d42.png} +0 -0
  247. /kaa/sprites/{16f04ca1-05a3-49c7-88ae-a0d02c1ec2ec.png → d6dd92b3-310f-4f5d-a8ef-b941c3659c0c.png} +0 -0
  248. /kaa/sprites/{c424f4a1-d032-478d-ac82-b1127a429e52.png → d8967770-c64a-4609-a0a5-f46ba81edceb.png} +0 -0
  249. /kaa/sprites/{9d0bf64a-2684-43fa-b9bf-552e60c717b4.png → d8ba1932-978c-451c-a717-d7d2b6db35d9.png} +0 -0
  250. /kaa/sprites/{de047f08-cef2-4b22-846e-fba2a06f8996.png → d91483a2-83fa-4664-8eda-52498c0e77bc.png} +0 -0
  251. /kaa/sprites/{f7e8e937-1eda-4bd3-a3cf-d306cb1973e2.png → d9a636be-a017-4ef5-a70c-c374827008a0.png} +0 -0
  252. /kaa/sprites/{cf302432-c592-4b6f-a6de-53c3e1bef23e.png → dae37bd7-6a34-4eb4-8cd0-3c0c03b4575a.png} +0 -0
  253. /kaa/sprites/{fad8b65b-7d9e-49d8-9f71-6d078aa672ca.png → dc51eccf-9470-495a-9e38-59d4481adbd4.png} +0 -0
  254. /kaa/sprites/{0cdd57aa-9bdd-4c83-9565-de7c229b34e3.png → dcea5aae-322e-4cd4-b218-0eac48690755.png} +0 -0
  255. /kaa/sprites/{c7cad813-2326-4662-9f55-0a15e1dad3dc.png → dcf465c6-ad64-48e7-9c3c-7bc7cfc13a44.png} +0 -0
  256. /kaa/sprites/{9db5de82-8fba-4b69-8faf-ffe7fcea32f8.png → ddb59f04-91a0-4fbd-8921-be13acdab291.png} +0 -0
  257. /kaa/sprites/{f1fa2fc3-c3d4-4040-90f1-7941b98dcee5.png → de81f919-4d01-4a4e-bdc1-ffe6e23a5c22.png} +0 -0
  258. /kaa/sprites/{d73e9e03-b910-42c0-9953-34980bff09f5.png → e05f2c16-926f-48be-bdd0-16182e879394.png} +0 -0
  259. /kaa/sprites/{678073ec-6700-4d94-af41-b392af11201b.png → e2a0c1a6-c0cf-400e-99be-1ed0d35c6ed8.png} +0 -0
  260. /kaa/sprites/{d963e76b-3c25-4bc7-a307-78d97728a819.png → e30922ed-a02f-4ede-9968-1656be5a05b2.png} +0 -0
  261. /kaa/sprites/{e4d0719b-d127-41a0-a250-492f79bf5625.png → e388db01-0870-412d-b8bc-5a512ec997c8.png} +0 -0
  262. /kaa/sprites/{f8babf59-d55e-40c2-a0b7-5d743ab71799.png → e392856d-ac59-4414-8fb8-df93a1a99be4.png} +0 -0
  263. /kaa/sprites/{c71f900b-9689-4800-89a0-e3371d33f47a.png → e57db8c2-c050-43fb-8205-339aeb5875e8.png} +0 -0
  264. /kaa/sprites/{38613745-1cf2-4bf1-9f58-0474b1e46895.png → e687c2ba-2c30-4fc8-804f-fea5815f6765.png} +0 -0
  265. /kaa/sprites/{4b02f8d4-7847-47a5-8f01-7ab5123709e5.png → e6e66204-8a2f-4377-8674-b7d663ff0081.png} +0 -0
  266. /kaa/sprites/{43bc2116-7fe3-4b20-8c8b-3ab2a2b5dd7d.png → e7630ccb-6824-49e3-986f-2a65a2c4a948.png} +0 -0
  267. /kaa/sprites/{b26ac4ff-42a0-45aa-b818-7d7603b52f12.png → e79a2a08-3b58-4ab0-8c2b-769f30cc8591.png} +0 -0
  268. /kaa/sprites/{df11b01f-2ab1-4bfb-831f-bb8dae6a092b.png → ebe22aea-0318-49d8-ab07-ce2eef34265f.png} +0 -0
  269. /kaa/sprites/{bee41ab5-c62e-4a79-a8d0-40f9efbc7e40.png → ec35a0b8-1afa-48ff-ae66-9c1ef966348d.png} +0 -0
  270. /kaa/sprites/{d50d4438-65bc-4849-9a11-7e8b796e1b9d.png → ed6df33a-c7aa-4542-a87b-9cc9cae0465c.png} +0 -0
  271. /kaa/sprites/{ce22506b-7410-4039-94de-dc1bdba8ac00.png → ed854df1-878c-4e0b-8138-9b28d314ede6.png} +0 -0
  272. /kaa/sprites/{e2f64c10-4db0-47c8-b23d-94802493d6fb.png → ed98a341-5dff-4af7-a194-d28232d481a4.png} +0 -0
  273. /kaa/sprites/{fb017237-bac6-4b73-9437-4518e764ef45.png → f0ed1dd3-b227-48c1-8c8c-858dbd84fcc7.png} +0 -0
  274. /kaa/sprites/{aa369159-cc3b-40f2-9fca-bca5b579cf97.png → f1eb4089-8cd1-4830-b00e-40535ddcd116.png} +0 -0
  275. /kaa/sprites/{a31e08c1-d3c3-4a99-a882-4a10de9ba815.png → f237d88e-92ac-4ebf-85e1-80a696b5203a.png} +0 -0
  276. /kaa/sprites/{db25f60d-4772-44f9-85dc-aba4b20cffa2.png → f2f818c9-b0cf-436d-9d3e-6544c5399063.png} +0 -0
  277. /kaa/sprites/{5c735cc5-7801-44e9-a8f1-2d44df4fa919.png → f333118a-81c2-417f-b54f-64dc4e8df613.png} +0 -0
  278. /kaa/sprites/{54d67100-70c7-4a00-afaa-a80771d34893.png → f34e8026-bdfc-47e6-a0ed-49e587ef0f40.png} +0 -0
  279. /kaa/sprites/{ab9e39ae-0856-4254-a6b6-585e82f8bf3b.png → f3a5992b-dabf-4c2b-83e9-4c91c3b7aac8.png} +0 -0
  280. /kaa/sprites/{993f2140-77be-4fe2-8e11-f71c4531bc9a.png → f4195ceb-586a-4a8c-9424-4962239d2120.png} +0 -0
  281. /kaa/sprites/{a408adaa-bfab-4aaf-acf7-08a4a3ebdd4c.png → f485db66-2159-4d31-ba53-0fbb726e7f64.png} +0 -0
  282. /kaa/sprites/{dd6f31d1-510d-4425-a160-958e7e984382.png → f7264cee-fea6-47b5-9f9b-8f3f31c03ea0.png} +0 -0
  283. /kaa/sprites/{eeff3d53-5a40-44c2-9d09-8f246157c72b.png → f7e34403-a53c-4d3f-935b-25b4acb7f7a5.png} +0 -0
  284. /kaa/sprites/{a9868db0-b355-470e-9bbe-033c5efa4b5e.png → f8d8c943-1b36-4391-a7fc-2a49f8966d53.png} +0 -0
  285. /kaa/sprites/{edd2d38d-9071-4094-8931-1a68b6ebe1b8.png → f9157db8-d70b-4d46-9800-5a833ce7eda8.png} +0 -0
  286. /kaa/sprites/{c0478a52-d6c5-4029-848f-e3e22b2de858.png → f9a353b2-958d-4aae-ade4-66bdc6481e35.png} +0 -0
  287. /kaa/sprites/{c54d4b7e-887c-4753-8a9e-6914fc408232.png → fa5b5b92-9c60-4811-a44c-8e897c9632c3.png} +0 -0
  288. /kaa/sprites/{e6f8f2a8-39e3-45e1-8a52-f2dc250bcd95.png → fac7b90a-1174-477b-803b-28798647c307.png} +0 -0
  289. /kaa/sprites/{b00b5890-3743-4064-8311-c5e35b3afbe6.png → fbbb73f9-880e-4c7f-9ec9-276bdab4b394.png} +0 -0
  290. /kaa/sprites/{d14a1c6c-339a-4dfe-9078-950d3518bc3b.png → fce4a481-e71c-4dab-aeac-59ff8b18201b.png} +0 -0
  291. /kaa/sprites/{4c243ed4-9ac2-42ba-89c6-946ffef84120.png → fd8a7a5d-f021-4bfd-83f7-a2dd33325837.png} +0 -0
  292. /kaa/sprites/{9b7eaa4c-2b67-4426-80da-b7538a87ed96.png → fda4b3eb-e31a-448b-8cb3-9126e1ab7deb.png} +0 -0
  293. /kaa/sprites/{8a312cf5-c670-4a52-a03b-fe55e78f8f07.png → fda78372-04b4-4d55-92b1-aedec20d0913.png} +0 -0
  294. /kaa/sprites/{cc727107-139b-4092-bafb-4bc9787bcdfd.png → fe993a91-1a49-488e-b7ff-c1b05b8f2b5f.png} +0 -0
  295. /kaa/sprites/{b5584de5-650e-4fde-b743-ccbd02eab196.png → ff8efb8f-e1a4-4202-a6e1-680eb44f58da.png} +0 -0
  296. {ksaa-2025.11.dist-info → ksaa-2025.11b3.dist-info}/WHEEL +0 -0
  297. {ksaa-2025.11.dist-info → ksaa-2025.11b3.dist-info}/entry_points.txt +0 -0
  298. {ksaa-2025.11.dist-info → ksaa-2025.11b3.dist-info}/licenses/LICENSE +0 -0
  299. {ksaa-2025.11.dist-info → ksaa-2025.11b3.dist-info}/top_level.txt +0 -0
@@ -1,581 +0,0 @@
1
- import logging
2
- import datetime
3
- from typing import List, Any, Callable, Optional
4
-
5
- import gradio as gr
6
- from kotonebot.client.host import Mumu12Host, Mumu12V5Host, LeidianHost
7
-
8
- from kaa.application.ui.components.alert import Alert
9
- from kaa.application.ui.facade import KaaFacade, ConfigValidationError
10
- from kaa.application.ui.common import GradioComponents, GradioInput
11
- from kaa.config.const import DailyMoneyShopItems, APShopItems
12
- from kaa.util.reactive import Ref, getter, setter, of, ref
13
-
14
- logger = logging.getLogger(__name__)
15
-
16
- class SettingsView:
17
- def __init__(self, facade: KaaFacade, components: GradioComponents, config_builders: List[Any]):
18
- self.facade = facade
19
- self.components = components
20
- self.config_builders = config_builders
21
- self.status_text = None
22
- self.facade.save_configs()
23
-
24
- def _handle_config_update(self, update_fn: Callable[[], None], success_msg: Optional[str] = '保存成功') -> str:
25
- """
26
- 统一处理配置更新、保存和错误捕获的 Helper 方法。
27
- :param update_fn: 执行配置修改的函数(闭包)
28
- :return: 状态提示文本
29
- """
30
- try:
31
- # 1. 执行具体的修改逻辑
32
- update_fn()
33
-
34
- # 2. 保存 (持久化)
35
- self.facade.save_configs()
36
-
37
- # 3. 反馈
38
- if success_msg:
39
- gr.Info(success_msg)
40
-
41
- time_str = datetime.datetime.now().strftime("%H:%M:%S")
42
- return f"*设置已保存: {time_str}*"
43
-
44
- except ConfigValidationError as e:
45
- # 恢复配置到修改前 (重载磁盘上的配置以覆盖内存中的无效修改)
46
- # self.facade.config_service.reload()
47
- gr.Warning(f"{str(e)}")
48
- return "*保存失败*"
49
- except Exception as e:
50
- # 恢复配置
51
- # self.facade.config_service.reload()
52
- logger.exception("Failed to update settings")
53
- gr.Warning(f"保存失败,已还原: {str(e)}")
54
- return "*保存失败*"
55
-
56
- def _bind(self, component: GradioInput, ref: Ref):
57
- """
58
- 将组件绑定到配置 Ref。自动选择最佳触发事件。
59
- :param component: Gradio 组件
60
- :param ref: 绑定引用对象
61
- """
62
- def on_change(value):
63
- old = ref.value
64
- if value == old:
65
- return
66
- else:
67
- def update():
68
- ref.value = value
69
- return self._handle_config_update(update)
70
-
71
- # 文本框和数字框使用 blur (失焦) 触发,防止输入中途频繁保存
72
- if isinstance(component, (gr.Textbox, gr.Number)):
73
- component.blur(fn=on_change, inputs=component, outputs=self.status_text)
74
- else:
75
- # Checkbox, Dropdown, Radio 使用 change 触发
76
- component.change(fn=on_change, inputs=component, outputs=self.status_text)
77
-
78
- def create_ui(self):
79
- """Creates the content for the 'Settings' tab."""
80
- gr.Markdown("## 设置")
81
- self.status_text = gr.Markdown("*设置修改后将自动保存并即时生效。*", elem_classes=["text-gray-500", "text-sm"])
82
-
83
- with gr.Tabs():
84
- with gr.Tab("基本"):
85
- self._create_emulator_settings()
86
- self._create_start_game_settings()
87
- self._create_end_game_settings()
88
-
89
- with gr.Tab("日常"):
90
- self._create_purchase_settings()
91
- self._create_work_settings()
92
- self._create_contest_settings()
93
- self._create_reward_settings()
94
-
95
- with gr.Tab("培育"):
96
- self._create_produce_settings()
97
-
98
- with gr.Tab("杂项"):
99
- self._create_misc_settings()
100
- self._create_idle_settings()
101
- self._create_debug_settings()
102
-
103
- def _create_emulator_settings(self):
104
- """Creates the UI for emulator/backend settings."""
105
- # 模拟器设置比较特殊,因为多个组件相互依赖(如 Type 决定 Instance ID)
106
- # 改为使用 _bind + 状态同步的方式
107
- gr.Markdown("### 模拟器设置")
108
-
109
- user_config = self.facade.config_service.get_current_user_config()
110
- backend_config = user_config.backend
111
- current_tab_id = backend_config.type
112
-
113
- # 状态:当前选中的模拟器类型
114
- backend_type_state = gr.State(value=current_tab_id)
115
- self._bind(backend_type_state, ref(of(backend_config).type))
116
-
117
- # 状态:用于在切换 Tab 时传递 instance_id
118
- instance_id_state = gr.State()
119
- self._bind(instance_id_state, ref(of(backend_config).instance_id))
120
-
121
- # 状态:用于记录各个 Tab 的 Dropdown 选中值,解决 Tab 切换时无法获取 hidden 组件值的问题
122
- mumu_init = backend_config.instance_id if backend_config.type == 'mumu12' else None
123
- mumu_state = gr.State(value=mumu_init)
124
-
125
- mumu5_init = backend_config.instance_id if backend_config.type == 'mumu12v5' else None
126
- mumu5_state = gr.State(value=mumu5_init)
127
-
128
- leidian_init = backend_config.instance_id if backend_config.type == 'leidian' else None
129
- leidian_state = gr.State(value=leidian_init)
130
-
131
- # 定义组件容器
132
- comps = {}
133
-
134
- with gr.Tabs(selected=current_tab_id):
135
- # --- MuMu 12 ---
136
- with gr.Tab("MuMu 12 v4.x", id="mumu12") as tab_mumu12:
137
- gr.Markdown("已选中 MuMu 12 v4.x 模拟器")
138
- comps['mumu_idx'] = gr.Dropdown(label="选择多开实例", choices=[], interactive=True)
139
- self._bind(comps['mumu_idx'], ref(of(backend_config).instance_id))
140
- comps['mumu_idx'].change(lambda x: x, inputs=comps['mumu_idx'], outputs=mumu_state)
141
-
142
- comps['mumu_bg'] = gr.Checkbox(
143
- label="MuMu12 模拟器后台保活模式", value=backend_config.mumu_background_mode, interactive=True
144
- )
145
- self._bind(comps['mumu_bg'], ref(of(backend_config).mumu_background_mode))
146
-
147
- self._setup_mumu_refresh(tab_mumu12, comps['mumu_idx'], backend_config, 'mumu12', Mumu12Host)
148
-
149
- tab_mumu12.select(
150
- fn=lambda x: ("mumu12", x),
151
- inputs=[mumu_state],
152
- outputs=[backend_type_state, instance_id_state]
153
- )
154
-
155
- # --- MuMu 12 v5 ---
156
- with gr.Tab("MuMu 12 v5.x", id="mumu12v5") as tab_mumu12v5:
157
- gr.Markdown("已选中 MuMu 12 v5.x 模拟器")
158
- comps['mumu5_idx'] = gr.Dropdown(label="选择多开实例", choices=[], interactive=True)
159
- self._bind(comps['mumu5_idx'], ref(of(backend_config).instance_id))
160
- comps['mumu5_idx'].change(lambda x: x, inputs=comps['mumu5_idx'], outputs=mumu5_state)
161
-
162
- comps['mumu5_bg'] = gr.Checkbox(
163
- label="MuMu12v5 模拟器后台保活模式", value=backend_config.mumu_background_mode, interactive=True
164
- )
165
- self._bind(comps['mumu5_bg'], ref(of(backend_config).mumu_background_mode))
166
-
167
- self._setup_mumu_refresh(tab_mumu12v5, comps['mumu5_idx'], backend_config, 'mumu12v5', Mumu12V5Host)
168
-
169
- tab_mumu12v5.select(
170
- fn=lambda x: ("mumu12v5", x),
171
- inputs=[mumu5_state],
172
- outputs=[backend_type_state, instance_id_state]
173
- )
174
-
175
- # --- Leidian ---
176
- with gr.Tab("雷电", id="leidian") as tab_leidian:
177
- gr.Markdown("已选中雷电模拟器")
178
- comps['leidian_idx'] = gr.Dropdown(label="选择多开实例", choices=[], interactive=True)
179
- self._bind(comps['leidian_idx'], ref(of(backend_config).instance_id))
180
- comps['leidian_idx'].change(lambda x: x, inputs=comps['leidian_idx'], outputs=leidian_state)
181
-
182
- self._setup_mumu_refresh(tab_leidian, comps['leidian_idx'], backend_config, 'leidian', LeidianHost)
183
-
184
- tab_leidian.select(
185
- fn=lambda x: ("leidian", x),
186
- inputs=[leidian_state],
187
- outputs=[backend_type_state, instance_id_state]
188
- )
189
-
190
- # --- Custom ---
191
- with gr.Tab("自定义", id="custom") as tab_custom:
192
- comps['adb_ip'] = gr.Textbox(value=backend_config.adb_ip, label="ADB IP 地址", interactive=True)
193
- self._bind(comps['adb_ip'], ref(of(backend_config).adb_ip))
194
-
195
- comps['adb_port'] = gr.Number(value=backend_config.adb_port, label="ADB 端口", minimum=1, maximum=65535, step=1, interactive=True)
196
- self._bind(comps['adb_port'], ref(of(backend_config).adb_port))
197
-
198
- tab_custom.select(
199
- fn=lambda: ("custom", None),
200
- outputs=[backend_type_state, instance_id_state]
201
- )
202
-
203
- # --- DMM ---
204
- with gr.Tab("DMM", id="dmm") as tab_dmm:
205
- gr.Markdown("已选中 DMM")
206
-
207
- tab_dmm.select(
208
- fn=lambda: ("dmm", None),
209
- outputs=[backend_type_state, instance_id_state]
210
- )
211
-
212
- # 通用设置
213
- comps['screenshot'] = gr.Dropdown(
214
- choices=['adb', 'adb_raw', 'uiautomator2', 'windows', 'remote_windows', 'nemu_ipc'],
215
- value=backend_config.screenshot_impl, label="截图方法", interactive=True
216
- )
217
- self._bind(comps['screenshot'], ref(of(backend_config).screenshot_impl))
218
-
219
- @gr.render(inputs=[comps['screenshot'], backend_type_state])
220
- def _tip(impl: str, backend_type: str):
221
- if not impl or not backend_type:
222
- return
223
-
224
- is_mumu = 'mumu' in backend_type
225
- # 1. 检查 DMM 兼容性
226
- if backend_type == 'dmm':
227
- if impl != 'windows' and impl != 'remote_windows':
228
- Alert(
229
- title="提示",
230
- value="DMM 版本仅支持 `windows` 截图方式",
231
- variant="warning",
232
- show_close=False
233
- )
234
-
235
- # 2. 检查模拟器兼容性
236
- else:
237
- if impl == 'nemu_ipc' and not is_mumu:
238
- Alert(
239
- title="提示",
240
- value="`nemu_ipc` 仅适用于 MuMu 模拟器,其他模拟器请选择 `adb` 或 `uiautomator`",
241
- variant="warning",
242
- show_close=False
243
- )
244
- elif is_mumu and impl in ['adb', 'adb_raw', 'uiautomator2']:
245
- Alert(
246
- title="提示",
247
- value="MuMu 模拟器推荐使用 `nemu_ipc` 截图方式,性能更佳且更稳定",
248
- variant="info",
249
- show_close=False
250
- )
251
- elif impl in ['windows', 'remote_windows']:
252
- Alert(
253
- title="提示",
254
- value="模拟器不支持 `windows` 截图方式,建议使用 `adb` 或 `nemu_ipc`",
255
- variant="warning",
256
- show_close=False
257
- )
258
-
259
- comps['interval'] = gr.Number(
260
- label="最小截图间隔(秒)", value=backend_config.target_screenshot_interval, minimum=0, step=0.1, interactive=True
261
- )
262
- self._bind(comps['interval'], ref(of(backend_config).target_screenshot_interval))
263
-
264
- def _setup_mumu_refresh(self, tab, dropdown, config, type_key, host_cls):
265
- # (辅助方法:为了简化主代码逻辑,将原本的刷新按钮逻辑抽取出来)
266
- refresh_msg = gr.Markdown("<div style='color: red;'>点击下方「刷新」按钮载入信息</div>", visible=True)
267
- refresh_btn = gr.Button("刷新")
268
-
269
- def refresh():
270
- try:
271
- instances = host_cls.list()
272
- is_current = config.type == type_key
273
- current_id = config.instance_id if is_current else None
274
- choices = [(i.name, i.id) for i in instances]
275
- return gr.Dropdown(choices=choices, value=current_id, interactive=True), gr.Markdown(visible=False)
276
- except Exception:
277
- return gr.Dropdown(choices=[], interactive=True), gr.Markdown(visible=True)
278
-
279
- refresh_btn.click(fn=refresh, outputs=[dropdown, refresh_msg])
280
-
281
- # 自动加载
282
- if config.type == type_key and config.instance_id:
283
- try:
284
- instances = host_cls.list()
285
- dropdown.choices = [(i.name, i.id) for i in instances]
286
- dropdown.value = config.instance_id
287
- refresh_msg.visible = False
288
- except:
289
- pass
290
-
291
- def _create_purchase_settings(self):
292
- """Creates the UI for shop purchase settings."""
293
- with gr.Column():
294
- gr.Markdown("### 商店购买设置")
295
- opts = self.facade.config_service.get_options()
296
-
297
- # --- 1. 启用主开关 ---
298
- purchase_enabled = gr.Checkbox(label="启用商店购买", value=opts.purchase.enabled)
299
- self._bind(purchase_enabled, ref(of(opts).purchase.enabled))
300
-
301
- with gr.Group(visible=opts.purchase.enabled) as purchase_group:
302
- # 绑定可见性
303
- purchase_enabled.change(fn=lambda x: gr.Group(visible=x), inputs=purchase_enabled, outputs=purchase_group)
304
-
305
- # --- 2. 金币购买 ---
306
- money_enabled = gr.Checkbox(label="启用金币购买", value=opts.purchase.money_enabled)
307
- self._bind(money_enabled, ref(of(opts).purchase.money_enabled))
308
-
309
- with gr.Group(visible=opts.purchase.money_enabled) as money_group:
310
- money_enabled.change(fn=lambda x: gr.Group(visible=x), inputs=money_enabled, outputs=money_group)
311
-
312
- money_items = gr.Dropdown(
313
- multiselect=True,
314
- choices=[(DailyMoneyShopItems.to_ui_text(item), item.value) for item in DailyMoneyShopItems],
315
- value=[item.value for item in opts.purchase.money_items],
316
- label="金币商店购买物品"
317
- )
318
- self._bind(money_items, ref(of(opts).purchase.money_items))
319
-
320
- money_refresh = gr.Checkbox(label="每日一次免费刷新金币商店", value=opts.purchase.money_refresh)
321
- self._bind(money_refresh, ref(of(opts).purchase.money_refresh))
322
-
323
- # --- 3. AP 购买 ---
324
- ap_enabled = gr.Checkbox(label="启用AP购买", value=opts.purchase.ap_enabled)
325
- self._bind(ap_enabled, ref(of(opts).purchase.ap_enabled))
326
-
327
- ap_items_map = {
328
- APShopItems.PRODUCE_PT_UP: "支援强化点数提升",
329
- APShopItems.PRODUCE_NOTE_UP: "笔记数提升",
330
- APShopItems.RECHALLENGE: "重新挑战券",
331
- APShopItems.REGENERATE_MEMORY: "回忆再生成券"
332
- }
333
-
334
- with gr.Group(visible=opts.purchase.ap_enabled) as ap_group:
335
- ap_enabled.change(fn=lambda x: gr.Group(visible=x), inputs=ap_enabled, outputs=ap_group)
336
-
337
- # 直接使用 (label, value) 的 choices,避免文本到枚举的二次转换
338
- ap_choices = [(label, item.value) for item, label in ap_items_map.items()]
339
- ap_values = [v for v in opts.purchase.ap_items]
340
- ap_items = gr.Dropdown(
341
- multiselect=True,
342
- choices=ap_choices,
343
- value=ap_values,
344
- label="AP商店购买物品",
345
- interactive=True
346
- )
347
-
348
- # 直接保存选中的值列表(Dropdown 返回的是 value 列表)
349
- self._bind(ap_items, ref(of(opts).purchase.ap_items))
350
-
351
- # --- 4. 每周免费礼包 ---
352
- weekly_enabled = gr.Checkbox(label="启用每周免费礼包购买", value=opts.purchase.weekly_enabled)
353
- self._bind(weekly_enabled, ref(of(opts).purchase.weekly_enabled))
354
-
355
- def _create_work_settings(self):
356
- """Creates the UI for work/assignment settings."""
357
- with gr.Column():
358
- gr.Markdown("### 工作设置")
359
- opts = self.facade.config_service.get_options()
360
-
361
- assignment_enabled = gr.Checkbox(label="启用工作", value=opts.assignment.enabled)
362
- self._bind(assignment_enabled, ref(of(opts).assignment.enabled))
363
-
364
- with gr.Group(visible=opts.assignment.enabled) as work_group:
365
- assignment_enabled.change(fn=lambda x: gr.Group(visible=x), inputs=assignment_enabled, outputs=work_group)
366
-
367
- with gr.Row():
368
- with gr.Column():
369
- mini_re = gr.Checkbox(label="启用重新分配 MiniLive", value=opts.assignment.mini_live_reassign_enabled)
370
- self._bind(mini_re, ref(of(opts).assignment.mini_live_reassign_enabled))
371
-
372
- mini_dur = gr.Dropdown(choices=[4, 6, 12], value=opts.assignment.mini_live_duration, label="MiniLive 工作时长", interactive=True)
373
- self._bind(mini_dur, ref(of(opts).assignment.mini_live_duration))
374
-
375
- with gr.Column():
376
- online_re = gr.Checkbox(label="启用重新分配 OnlineLive", value=opts.assignment.online_live_reassign_enabled)
377
- self._bind(online_re, ref(of(opts).assignment.online_live_reassign_enabled))
378
-
379
- online_dur = gr.Dropdown(choices=[4, 6, 12], value=opts.assignment.online_live_duration, label="OnlineLive 工作时长", interactive=True)
380
- self._bind(online_dur, ref(of(opts).assignment.online_live_duration))
381
-
382
- def _create_contest_settings(self):
383
- with gr.Column():
384
- gr.Markdown("### 竞赛设置")
385
- opts = self.facade.config_service.get_options()
386
-
387
- contest_enabled = gr.Checkbox(label="启用竞赛", value=opts.contest.enabled)
388
- self._bind(contest_enabled, ref(of(opts).contest.enabled))
389
-
390
- with gr.Group(visible=opts.contest.enabled) as contest_group:
391
- contest_enabled.change(fn=lambda x: gr.Group(visible=x), inputs=contest_enabled, outputs=contest_group)
392
-
393
- sel = gr.Dropdown(choices=[1, 2, 3], value=opts.contest.select_which_contestant, label="选择第几个挑战者", interactive=True)
394
- self._bind(sel, ref(of(opts).contest.select_which_contestant))
395
-
396
- when_no_set_choices = [
397
- ("通知我并跳过竞赛", "remind"), ("提醒我并等待手动编成", "wait"),
398
- ("使用自动编成并提醒我", "auto_set"), ("使用自动编成", "auto_set_silent")
399
- ]
400
- when_no_set = gr.Dropdown(choices=when_no_set_choices, value=opts.contest.when_no_set, label="竞赛队伍未编成时", interactive=True)
401
- self._bind(when_no_set, ref(of(opts).contest.when_no_set))
402
-
403
- def _create_produce_settings(self):
404
- with gr.Column():
405
- gr.Markdown("### 培育设置")
406
- opts = self.facade.config_service.get_options()
407
- solutions = self.facade.list_produce_solutions()
408
-
409
- produce_enabled = gr.Checkbox(label="启用培育", value=opts.produce.enabled)
410
- self._bind(produce_enabled, ref(of(opts).produce.enabled))
411
-
412
- if not solutions:
413
- alert = Alert("你似乎还没有创建任何培育方案。你需要先到「方案」里创建一个!", "提示", action_text="去创建")
414
- alert.click(fn=lambda: gr.Tabs(selected="produce"), inputs=[], outputs=[self.components.tabs])
415
-
416
- with gr.Group(visible=opts.produce.enabled) as produce_group:
417
- produce_enabled.change(fn=lambda x: gr.Group(visible=x), inputs=produce_enabled, outputs=produce_group)
418
-
419
- solution_choices = [(f"{sol.name} - {sol.description or '无描述'}", sol.id) for sol in solutions]
420
- sol_drop = gr.Dropdown(choices=solution_choices, value=opts.produce.selected_solution_id, label="当前使用的培育方案", interactive=True)
421
- self.components.settings_solution_dropdown = sol_drop
422
- self._bind(sol_drop, ref(of(opts).produce.selected_solution_id))
423
-
424
- cnt = gr.Number(minimum=1, value=opts.produce.produce_count, label="培育次数", interactive=True)
425
- self._bind(cnt, ref(of(opts).produce.produce_count))
426
-
427
- tm_cd = gr.Number(minimum=20, value=opts.produce.produce_timeout_cd, label="推荐卡检测用时上限", interactive=True)
428
- self._bind(tm_cd, ref(of(opts).produce.produce_timeout_cd))
429
-
430
- int_tm = gr.Number(minimum=20, value=opts.produce.interrupt_timeout, label="检测超时时间", interactive=True)
431
- self._bind(int_tm, ref(of(opts).produce.interrupt_timeout))
432
-
433
- fever = gr.Radio(label="培育前开启活动模式", choices=[("不操作", "ignore"), ("自动启用", "on"), ("自动禁用", "off")], value=opts.produce.enable_fever_month, interactive=True, info="某些活动期间,在选择培育模式/难度页面的切换活动开关")
434
- self._bind(fever, ref(of(opts).produce.enable_fever_month))
435
-
436
- def _create_start_game_settings(self):
437
- with gr.Column():
438
- gr.Markdown("### 启动游戏设置")
439
- opts = self.facade.config_service.get_options()
440
- backend_opts = self.facade.config_service.get_current_user_config().backend
441
-
442
- start_game_enabled = gr.Checkbox(label="启用自动启动游戏", value=opts.start_game.enabled, interactive=True)
443
- self._bind(start_game_enabled, ref(of(opts).start_game.enabled))
444
-
445
- with gr.Group(visible=opts.start_game.enabled) as sg_group:
446
- start_game_enabled.change(fn=lambda x: gr.Group(visible=x), inputs=start_game_enabled, outputs=sg_group)
447
-
448
- # DMM Components
449
- d1 = gr.Checkbox(label="自动禁用 Gakumas Localify 汉化", value=opts.start_game.disable_gakumas_localify, interactive=True)
450
- self._bind(d1, ref(of(opts).start_game.disable_gakumas_localify))
451
-
452
- d2 = gr.Textbox(label="DMM 版游戏路径 (可选)", value=opts.start_game.dmm_game_path, interactive=True, placeholder="如:F:\\Games\\gakumas\\gakumas.exe。留空自动识别。")
453
- self._bind(d2, ref(of(opts).start_game.dmm_game_path))
454
-
455
- d3 = gr.Checkbox(label="绕过 DMM 启动器", value=opts.start_game.dmm_bypass, interactive=True)
456
- self._bind(d3, ref(of(opts).start_game.dmm_bypass))
457
-
458
- # Emulator Check Components
459
- check_emu = gr.Checkbox(label="自动启动模拟器", value=backend_opts.check_emulator, interactive=True)
460
- self._bind(check_emu, ref(of(backend_opts).check_emulator))
461
-
462
- kuyo = gr.Checkbox(label="通过Kuyo来启动游戏", value=opts.start_game.start_through_kuyo, interactive=True)
463
- self._bind(kuyo, ref(of(opts).start_game.start_through_kuyo))
464
-
465
- pkg = gr.Textbox(label="游戏包名", value=opts.start_game.game_package_name, interactive=True)
466
- self._bind(pkg, ref(of(opts).start_game.game_package_name))
467
-
468
- with gr.Group(visible=backend_opts.check_emulator) as check_emu_group:
469
- check_emu.change(fn=lambda x: gr.Group(visible=x), inputs=check_emu, outputs=check_emu_group)
470
-
471
- e1 = gr.Textbox(value=backend_opts.emulator_path, label="模拟器 exe 文件路径", interactive=True)
472
- self._bind(e1, ref(of(backend_opts).emulator_path))
473
-
474
- e2 = gr.Textbox(value=backend_opts.adb_emulator_name, label="ADB 模拟器名称", interactive=True)
475
- self._bind(e2, ref(of(backend_opts).adb_emulator_name))
476
-
477
- e3 = gr.Textbox(value=backend_opts.emulator_args, label="模拟器启动参数", interactive=True)
478
- self._bind(e3, ref(of(backend_opts).emulator_args))
479
-
480
- def _create_end_game_settings(self):
481
- with gr.Column():
482
- gr.Markdown("### 全部任务结束后")
483
- gr.Markdown("*注:执行单个任务不会触发下面这些,只有状态页的启动按钮才会触发*")
484
- opts = self.facade.config_service.get_options()
485
-
486
- items = [
487
- ("退出 kaa", of(opts).end_game.exit_kaa),
488
- ("关闭游戏", of(opts).end_game.kill_game),
489
- ("关闭 DMMGamePlayer", of(opts).end_game.kill_dmm),
490
- ("关闭模拟器", of(opts).end_game.kill_emulator),
491
- ("关闭系统", of(opts).end_game.shutdown),
492
- ("休眠系统", of(opts).end_game.hibernate),
493
- ("恢复 Gakumas Localify 汉化状态", of(opts).end_game.restore_gakumas_localify)
494
- ]
495
- for label, proxy in items:
496
- comp = gr.Checkbox(label=label, value=getter(proxy)(), interactive=True)
497
- self._bind(comp, ref(proxy))
498
-
499
- def _create_misc_settings(self):
500
- with gr.Column():
501
- gr.Markdown("### 杂项设置")
502
- opts = self.facade.config_service.get_options()
503
-
504
- c1 = gr.Radio(label="检查更新时机", choices=[("从不", "never"), ("启动时", "startup")], value=opts.misc.check_update, interactive=True)
505
- self._bind(c1, ref(of(opts).misc.check_update))
506
-
507
- c2 = gr.Checkbox(label="自动安装更新", value=opts.misc.auto_install_update, interactive=True)
508
- self._bind(c2, ref(of(opts).misc.auto_install_update))
509
-
510
- c3 = gr.Checkbox(label="允许局域网访问 Web 界面", value=opts.misc.expose_to_lan, interactive=True)
511
- self._bind(c3, ref(of(opts).misc.expose_to_lan))
512
-
513
- c4 = gr.Radio(label="更新通道", choices=[("稳定版", "release"), ("测试版", "beta")], value=opts.misc.update_channel, interactive=True)
514
- self._bind(c4, ref(of(opts).misc.update_channel))
515
-
516
- c5 = gr.Radio(label="日志等级", choices=[("普通", "debug"), ("详细", "verbose")], value=opts.misc.log_level, interactive=True)
517
- self._bind(c5, ref(of(opts).misc.log_level))
518
-
519
- def _create_idle_settings(self):
520
- with gr.Column():
521
- gr.Markdown("### 闲置挂机设置")
522
- opts = self.facade.config_service.get_options()
523
-
524
- i1 = gr.Checkbox(label="启用闲置挂机", value=opts.idle.enabled, interactive=True)
525
- self._bind(i1, ref(of(opts).idle.enabled))
526
-
527
- i2 = gr.Number(label="闲置秒数", value=opts.idle.idle_seconds, minimum=1, step=1, interactive=True)
528
- self._bind(i2, ref(of(opts).idle.idle_seconds))
529
-
530
- i3 = gr.Checkbox(label="按键暂停时最小化窗口", value=opts.idle.minimize_on_pause, interactive=True)
531
- self._bind(i3, ref(of(opts).idle.minimize_on_pause))
532
-
533
- def _create_reward_settings(self):
534
- with gr.Column():
535
- gr.Markdown("### 奖励领取设置")
536
- opts = self.facade.config_service.get_options()
537
-
538
- r1 = gr.Checkbox(label="领取任务奖励", value=opts.mission_reward.enabled, interactive=True)
539
- self._bind(r1, ref(of(opts).mission_reward.enabled))
540
-
541
- club_en = gr.Checkbox(label="领取社团奖励", value=opts.club_reward.enabled, interactive=True)
542
- self._bind(club_en, ref(of(opts).club_reward.enabled))
543
-
544
- r3 = gr.Checkbox(label="收取礼物", value=opts.presents.enabled, interactive=True)
545
- self._bind(r3, ref(of(opts).presents.enabled))
546
-
547
- r4 = gr.Checkbox(label="收取活动费", value=opts.activity_funds.enabled, interactive=True)
548
- self._bind(r4, ref(of(opts).activity_funds.enabled))
549
-
550
- with gr.Group(visible=opts.club_reward.enabled) as club_group:
551
- club_en.change(fn=lambda x: gr.Group(visible=x), inputs=club_en, outputs=club_group)
552
-
553
- note = gr.Dropdown(
554
- label="社团奖励笔记选择",
555
- choices=[(DailyMoneyShopItems.to_ui_text(item), item.value) for item in DailyMoneyShopItems if "Note" in item.name],
556
- value=opts.club_reward.selected_note.value,
557
- interactive=True
558
- )
559
- self._bind(note, ref(of(opts).club_reward.selected_note))
560
-
561
- def _create_debug_settings(self):
562
- with gr.Column():
563
- gr.Markdown("### 调试设置")
564
- gr.Markdown('<div style="color: red;">仅供调试使用。正常运行时务必关闭下面所有的选项。</div>')
565
-
566
- user_config = self.facade.config_service.get_current_user_config()
567
- opts = self.facade.config_service.get_options()
568
-
569
- keep_ss = gr.Checkbox(
570
- label="保留截图数据",
571
- value=user_config.keep_screenshots,
572
- interactive=True
573
- )
574
- self._bind(keep_ss, ref(of(user_config).keep_screenshots))
575
-
576
- trace_rec = gr.Checkbox(
577
- label="跟踪推荐卡检测",
578
- value=opts.trace.recommend_card_detection,
579
- interactive=True
580
- )
581
- self._bind(trace_rec, ref(of(opts).trace.recommend_card_detection))