ksaa 2025.9.post2__py3-none-any.whl → 2025.11__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kaa/__init__.py +0 -0
- kaa/application/__init__.py +0 -0
- kaa/application/core/misc_core.py +4 -1
- kaa/application/services/__init__.py +0 -0
- kaa/application/services/config_service.py +101 -0
- kaa/application/services/feedback_service.py +121 -0
- kaa/application/services/produce_solution_service.py +83 -0
- kaa/application/services/task_service.py +145 -0
- kaa/application/services/update_service.py +208 -0
- kaa/application/ui/__init__.py +0 -0
- kaa/application/ui/common.py +123 -0
- kaa/application/ui/components/alert.py +251 -0
- kaa/application/ui/components/alert.pyi +257 -0
- kaa/application/ui/components/categorized_select.pyi +697 -0
- kaa/application/ui/facade.py +189 -0
- kaa/application/ui/gradio_view.py +135 -0
- kaa/application/ui/views/__init__.py +0 -0
- kaa/application/ui/views/feedback_view.py +65 -0
- kaa/application/ui/views/produce_view.py +251 -0
- kaa/application/ui/views/settings_view.py +581 -0
- kaa/application/ui/views/status_view.py +171 -0
- kaa/application/ui/views/task_view.py +102 -0
- kaa/application/ui/views/update_view.py +106 -0
- kaa/config/schema.py +26 -6
- kaa/errors.py +75 -0
- kaa/main/dmm_host.py +60 -60
- kaa/main/gr.py +60 -3115
- kaa/main/kaa.py +11 -3
- kaa/metadata.py +10 -0
- kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
- kaa/resources/game.db +0 -0
- kaa/resources/game_ver.txt +0 -0
- kaa/resources/idol_cards/i_card-skin-amao-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-amao-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-amao-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-1-000_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-1-000_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-2-000_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-2-000_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-3-000_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-atbm-3-000_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-fktn-3-016_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-fktn-3-016_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-003_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-003_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-009_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-009_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-013_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hmsz-3-013_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hrnm-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hrnm-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hski-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hski-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hume-3-009_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hume-3-009_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hume-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-hume-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-jsna-3-009_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-jsna-3-009_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-jsna-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-jsna-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kcna-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kcna-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kcna-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kcna-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kllj-3-014_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-kllj-3-014_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-shro-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-shro-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-ssmk-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-ssmk-3-015_1.png +0 -0
- kaa/resources/idol_cards/i_card-skin-ttmr-3-015_0.png +0 -0
- kaa/resources/idol_cards/i_card-skin-ttmr-3-015_1.png +0 -0
- kaa/sprites/0cdd57aa-9bdd-4c83-9565-de7c229b34e3.png +0 -0
- kaa/sprites/16f04ca1-05a3-49c7-88ae-a0d02c1ec2ec.png +0 -0
- kaa/sprites/20ca6d42-c19e-4c3e-b82c-f6642bbe5069.png +0 -0
- kaa/sprites/276c0178-65af-4b69-a3c3-d04253b9ed91.png +0 -0
- kaa/sprites/32de6ba0-859f-4f40-a57e-92bed913e3a7.png +0 -0
- kaa/sprites/38613745-1cf2-4bf1-9f58-0474b1e46895.png +0 -0
- kaa/sprites/41904062-e218-4b28-972a-b5cfcd058d2c.png +0 -0
- kaa/sprites/44097699-487f-4932-846a-095a427f4ed8.png +0 -0
- kaa/sprites/459f532f-115c-4527-a897-affa7ddcbd76.png +0 -0
- kaa/sprites/46cb87f6-26f7-45f0-b10c-6491f115077e.png +0 -0
- kaa/sprites/4b02f8d4-7847-47a5-8f01-7ab5123709e5.png +0 -0
- kaa/sprites/4b7426e9-395a-410c-bb99-c6f0a7b81208.png +0 -0
- kaa/sprites/4c243ed4-9ac2-42ba-89c6-946ffef84120.png +0 -0
- kaa/sprites/527c3803-1ddd-4f6b-a896-815d3c2e4caa.png +0 -0
- kaa/sprites/54d67100-70c7-4a00-afaa-a80771d34893.png +0 -0
- kaa/sprites/5588396d-dd38-4ef1-8c37-3041a750b1cc.png +0 -0
- kaa/sprites/5933f6ab-7af4-4731-aac8-d95939a3fbbf.png +0 -0
- kaa/sprites/5c49d3b3-656e-4c8c-ae1a-9b0209b9dcc3.png +0 -0
- kaa/sprites/5c735cc5-7801-44e9-a8f1-2d44df4fa919.png +0 -0
- kaa/sprites/678073ec-6700-4d94-af41-b392af11201b.png +0 -0
- kaa/sprites/6a27faad-df3b-49d9-a20f-64ae8e8f9e22.png +0 -0
- kaa/sprites/6b63fca9-a1ec-490e-96e9-fc0beeeb8851.png +0 -0
- kaa/sprites/6baaecdd-2817-4ba3-a2da-346ef9ef92fd.png +0 -0
- kaa/sprites/6c82d28f-913c-4444-baa6-2e37c7e24bc6.png +0 -0
- kaa/sprites/6d302c9d-72cd-49b5-bb11-c39140ffbdd1.png +0 -0
- kaa/sprites/6e603eb6-2336-46d2-ad01-2ba2fc3d4cbd.png +0 -0
- kaa/sprites/7156a1b5-cdd7-446e-9caf-d9f6b313ef4d.png +0 -0
- kaa/sprites/7469d458-d308-4469-8bf1-b63e1ddc6a3c.png +0 -0
- kaa/sprites/78868e34-1c2a-40ee-b08c-c89e6a3aea54.png +0 -0
- kaa/sprites/7c8e37b7-173f-4c03-8f11-bbd47f2a02c2.png +0 -0
- kaa/sprites/7ce3a2d5-efa7-4091-b012-f2870d9df422.png +0 -0
- kaa/sprites/7db2d761-ab44-4b3b-85aa-9b9758f97d5d.png +0 -0
- kaa/sprites/7ddaa9db-2287-43ba-8531-065e618ac8ef.png +0 -0
- kaa/sprites/7def2661-0847-4459-88c6-5270c2e8a32c.png +0 -0
- kaa/sprites/821c86c1-bc35-40bc-95db-f66935a92299.png +0 -0
- kaa/sprites/8448237d-2db5-49ca-8d55-9fc0e56639a7.png +0 -0
- kaa/sprites/89663a2f-c6d3-4bb7-9935-a54d11d0a382.png +0 -0
- kaa/sprites/8a312cf5-c670-4a52-a03b-fe55e78f8f07.png +0 -0
- kaa/sprites/8b6a1eed-341d-4be1-b0ae-9adc52ed4543.png +0 -0
- kaa/sprites/8e024c75-c872-4e18-bb80-0c5894612815.png +0 -0
- kaa/sprites/92f7ef0b-7931-4cd3-afda-c553232eb443.png +0 -0
- kaa/sprites/9803a197-d873-43cc-9656-d63513e92fad.png +0 -0
- kaa/sprites/9934f05f-ee5f-4131-b08d-aa61d5f3505a.png +0 -0
- kaa/sprites/993f2140-77be-4fe2-8e11-f71c4531bc9a.png +0 -0
- kaa/sprites/9a8bfa87-0e37-4d54-888f-b79f8778d232.png +0 -0
- kaa/sprites/9b7eaa4c-2b67-4426-80da-b7538a87ed96.png +0 -0
- kaa/sprites/9bc6607d-ce44-467e-a5f4-b3cf30210c13.png +0 -0
- kaa/sprites/9db5de82-8fba-4b69-8faf-ffe7fcea32f8.png +0 -0
- kaa/sprites/__pycache__/__init__.cpython-310.pyc +0 -0
- kaa/sprites/a1251011-00a9-402b-82da-1d2744db26cf.png +0 -0
- kaa/sprites/a31e08c1-d3c3-4a99-a882-4a10de9ba815.png +0 -0
- kaa/sprites/a408adaa-bfab-4aaf-acf7-08a4a3ebdd4c.png +0 -0
- kaa/sprites/a408cdfd-e394-4ada-9f0e-5878e41b8e52.png +0 -0
- kaa/sprites/a4723b5b-2466-4ea4-b7ef-4185bb4dda74.png +0 -0
- kaa/sprites/a5ba613c-46f4-4442-88e1-fbda4dd65a55.png +0 -0
- kaa/sprites/a88e3da2-98d3-4a64-b7ac-040847028a83.png +0 -0
- kaa/sprites/a9868db0-b355-470e-9bbe-033c5efa4b5e.png +0 -0
- kaa/sprites/a9f020e9-0e4b-4ddc-b8b8-386009578c15.png +0 -0
- kaa/sprites/aa369159-cc3b-40f2-9fca-bca5b579cf97.png +0 -0
- kaa/sprites/aad1ac7d-cfa1-4459-9d46-d39c080bd78e.png +0 -0
- kaa/sprites/ab9e39ae-0856-4254-a6b6-585e82f8bf3b.png +0 -0
- kaa/sprites/ae4742aa-acda-442d-bf73-b3fe7b66e85c.png +0 -0
- kaa/sprites/aff3d8ac-d648-434c-9adb-6c1a10aa04b9.png +0 -0
- kaa/sprites/affc5006-4b67-4490-9fa7-557a7fecb133.png +0 -0
- kaa/sprites/b002896d-5093-48e5-9e01-d18bfb240961.png +0 -0
- kaa/sprites/b00b5890-3743-4064-8311-c5e35b3afbe6.png +0 -0
- kaa/sprites/b26ac4ff-42a0-45aa-b818-7d7603b52f12.png +0 -0
- kaa/sprites/b2a04604-15d4-4ff6-86f7-0823e642103f.png +0 -0
- kaa/sprites/b33bb89c-cabb-4fe0-822f-d911e8b42f82.png +0 -0
- kaa/sprites/b5584de5-650e-4fde-b743-ccbd02eab196.png +0 -0
- kaa/sprites/b5f80604-d7d3-49e0-9934-58f75c393ffb.png +0 -0
- kaa/sprites/b70b958a-9480-4b9b-86a4-5ea099535c36.png +0 -0
- kaa/sprites/b93b3c36-79a3-4c1a-944a-20fe6a88c46d.png +0 -0
- kaa/sprites/ba7676fe-4982-4e92-822d-9c1a623420ac.png +0 -0
- kaa/sprites/bb953e97-7185-4c2c-b177-48d743e90d96.png +0 -0
- kaa/sprites/bd176e60-3bb2-453f-b2ef-45305b7f21c1.png +0 -0
- kaa/sprites/c0478a52-d6c5-4029-848f-e3e22b2de858.png +0 -0
- kaa/sprites/c05baa1e-02c3-4d02-904f-76086edbb97f.png +0 -0
- kaa/sprites/c295af98-0b43-4f18-bbc3-e59d23055f1b.png +0 -0
- kaa/sprites/c424f4a1-d032-478d-ac82-b1127a429e52.png +0 -0
- kaa/sprites/c5356ad6-0f1e-42be-b090-059f33ea7cee.png +0 -0
- kaa/sprites/c54d4b7e-887c-4753-8a9e-6914fc408232.png +0 -0
- kaa/sprites/c68f1282-4d86-4b1a-b76b-dcf42f3f906b.png +0 -0
- kaa/sprites/c71f900b-9689-4800-89a0-e3371d33f47a.png +0 -0
- kaa/sprites/c7cad813-2326-4662-9f55-0a15e1dad3dc.png +0 -0
- kaa/sprites/c95e8a90-dd6e-4cca-b74b-85ee90dbd5c1.png +0 -0
- kaa/sprites/c98d6bc7-45ca-4877-8cd1-6f36d6a86a02.png +0 -0
- kaa/sprites/ca258eea-e69a-43c3-ad4c-ac7da0099011.png +0 -0
- kaa/sprites/cb8d5df6-300b-48e5-ae0b-2b4750c9c092.png +0 -0
- kaa/sprites/cc727107-139b-4092-bafb-4bc9787bcdfd.png +0 -0
- kaa/sprites/cd601176-0336-41c7-8d3f-31ddf8cf708d.png +0 -0
- kaa/sprites/cda022d1-7898-4006-95c5-b55eceda9d95.png +0 -0
- kaa/sprites/ce22506b-7410-4039-94de-dc1bdba8ac00.png +0 -0
- kaa/sprites/cea2d5c4-6e79-425e-9e98-7e7dbdee960b.png +0 -0
- kaa/sprites/cf302432-c592-4b6f-a6de-53c3e1bef23e.png +0 -0
- kaa/sprites/d0d9f650-bb30-4743-81f3-cd7ea8211d5c.png +0 -0
- kaa/sprites/d14a1c6c-339a-4dfe-9078-950d3518bc3b.png +0 -0
- kaa/sprites/d277a9c3-2b2c-42fc-9fbb-a836413c8cf4.png +0 -0
- kaa/sprites/d50d4438-65bc-4849-9a11-7e8b796e1b9d.png +0 -0
- kaa/sprites/d5407f49-fecc-404e-915a-22c9fa16a79a.png +0 -0
- kaa/sprites/d73e9e03-b910-42c0-9953-34980bff09f5.png +0 -0
- kaa/sprites/d8485972-4e67-4190-8d95-60fd3c68b2ce.png +0 -0
- kaa/sprites/d963e76b-3c25-4bc7-a307-78d97728a819.png +0 -0
- kaa/sprites/dab08e98-9053-4e2a-9e74-cf30298fea22.png +0 -0
- kaa/sprites/db25f60d-4772-44f9-85dc-aba4b20cffa2.png +0 -0
- kaa/sprites/dcbeb7cd-cd57-4daf-b023-ff2c7ef1621a.png +0 -0
- kaa/sprites/dd6f31d1-510d-4425-a160-958e7e984382.png +0 -0
- kaa/sprites/de047f08-cef2-4b22-846e-fba2a06f8996.png +0 -0
- kaa/sprites/df11b01f-2ab1-4bfb-831f-bb8dae6a092b.png +0 -0
- kaa/sprites/e2f64c10-4db0-47c8-b23d-94802493d6fb.png +0 -0
- kaa/sprites/e4be69f6-6030-4fd8-8a36-fd3938d1734b.png +0 -0
- kaa/sprites/e4d0719b-d127-41a0-a250-492f79bf5625.png +0 -0
- kaa/sprites/e5196344-d61a-48ff-bc48-63f8f63c3788.png +0 -0
- kaa/sprites/e6f8f2a8-39e3-45e1-8a52-f2dc250bcd95.png +0 -0
- kaa/sprites/e70ce43b-9b3b-4aa0-8b9c-1d5cc4a1d5b0.png +0 -0
- kaa/sprites/e7c00f25-b15a-4403-a201-07b9b168e9f5.png +0 -0
- kaa/sprites/e82b9645-ee3f-4f63-922e-c1d703344baf.png +0 -0
- kaa/sprites/e9fad64b-e4e2-46cb-a820-b2860b38da03.png +0 -0
- kaa/sprites/eab111a6-80bf-45c1-9a74-b44ca76508b7.png +0 -0
- kaa/sprites/ec0d03db-7c66-46b7-86cc-4acaa6eba1c9.png +0 -0
- kaa/sprites/edd2d38d-9071-4094-8931-1a68b6ebe1b8.png +0 -0
- kaa/sprites/eeff3d53-5a40-44c2-9d09-8f246157c72b.png +0 -0
- kaa/sprites/ef0db31a-fc44-4972-af7e-21c50f0b139c.png +0 -0
- kaa/sprites/f1fa2fc3-c3d4-4040-90f1-7941b98dcee5.png +0 -0
- kaa/sprites/f31531b4-79ea-41dc-b23f-e445b818139c.png +0 -0
- kaa/sprites/f35e19ca-7de7-4721-af53-b5f95c5e74fe.png +0 -0
- kaa/sprites/f5e1e7ed-fd35-42c3-97ed-5e9214a50733.png +0 -0
- kaa/sprites/f7246b84-e70b-47d3-8166-90f0dc4f2bb6.png +0 -0
- kaa/sprites/f7e8e937-1eda-4bd3-a3cf-d306cb1973e2.png +0 -0
- kaa/sprites/f8babf59-d55e-40c2-a0b7-5d743ab71799.png +0 -0
- kaa/sprites/f9697f23-07cf-4a14-8b22-d1fc95386c16.png +0 -0
- kaa/sprites/fad8b65b-7d9e-49d8-9f71-6d078aa672ca.png +0 -0
- kaa/sprites/fb017237-bac6-4b73-9437-4518e764ef45.png +0 -0
- kaa/sprites/fc86085c-d708-498a-bfa6-92e1a1364c60.png +0 -0
- kaa/tasks/R.py +140 -128
- kaa/tasks/common.py +5 -0
- kaa/tasks/daily/contest.py +2 -1
- kaa/tasks/daily/purchase.py +34 -2
- kaa/tasks/daily/upgrade_support_card.py +12 -2
- kaa/tasks/produce/cards.py +5 -4
- kaa/tasks/produce/common.py +202 -105
- kaa/tasks/produce/in_purodyuusu.py +35 -17
- kaa/tasks/produce/non_lesson_actions.py +10 -33
- kaa/tasks/produce/p_drink.py +5 -1
- kaa/tasks/produce/produce.py +12 -1
- kaa/tasks/start_game.py +61 -5
- kaa/util/reactive.py +182 -0
- {ksaa-2025.9.post2.dist-info → ksaa-2025.11.dist-info}/METADATA +31 -27
- {ksaa-2025.9.post2.dist-info → ksaa-2025.11.dist-info}/RECORD +354 -176
- /kaa/sprites/{3504b421-58f2-4ca0-869e-764335d60406.png → 001486b2-f627-4ece-8c93-4dfec47da9b3.png} +0 -0
- /kaa/sprites/{7dc79a8b-bd59-4c93-a638-e49bca276c00.png → 011e352f-6e8b-4225-b104-d1b2ccf0761c.png} +0 -0
- /kaa/sprites/{69f15152-8ee9-4e39-9bfa-6cd1b051bc1e.png → 0240342e-b6f3-4ed6-8da5-a64092e6fcde.png} +0 -0
- /kaa/sprites/{15801cb7-24f6-4504-921b-5e5a37bdc064.png → 02df555c-b19c-4776-8f1b-d1a7e2ed2f82.png} +0 -0
- /kaa/sprites/{55a2ba58-2412-4c39-9c6e-2627092623a2.png → 0343a3b8-8cd6-47af-b956-760dd2c79711.png} +0 -0
- /kaa/sprites/{d62dab9b-d36d-490e-bca5-bfd4b66911d7.png → 04c287ed-9ab1-4cd1-af07-8ab61f7f49bc.png} +0 -0
- /kaa/sprites/{8d99cd97-ae34-488f-b62e-54d54f75e4e8.png → 05d7740b-c6ea-453a-b805-7d0a5fe18184.png} +0 -0
- /kaa/sprites/{66ccbeba-3291-4f1c-8669-d691f24ea9ed.png → 06a7097c-fef6-4f2c-bece-26eed414708e.png} +0 -0
- /kaa/sprites/{609a340b-2cfa-4cef-9e55-fb60c7cabdbb.png → 072b167f-a2f6-4458-815e-a92ca2e6c9eb.png} +0 -0
- /kaa/sprites/{e881ee18-154e-4f0c-91fe-4699d156671d.png → 0899a6e7-6617-4f11-a7a2-9ba377ad6cba.png} +0 -0
- /kaa/sprites/{689eebfd-984c-45c9-812f-26cf9c756bed.png → 0950d760-6d88-4265-b28c-0790a782a749.png} +0 -0
- /kaa/sprites/{76d5d7f7-b23d-4802-8f91-7058f7adcffd.png → 0a019c0d-26fa-4441-b281-b73060722bc9.png} +0 -0
- /kaa/sprites/{ac194536-54e4-49e7-992c-fc82ba401f10.png → 0a27a783-0ef8-4f99-8c26-cf89768b5146.png} +0 -0
- /kaa/sprites/{06ee3b1e-5c99-4ebf-8a23-d6f59cda32b8.png → 0af981f5-bcc9-48eb-a392-50f79ec5149a.png} +0 -0
- /kaa/sprites/{e7709d81-890b-438f-8acb-50492d63022e.png → 0afb71f5-0752-47af-9ba2-85bdbe4fcbf7.png} +0 -0
- /kaa/sprites/{62cc930f-acc2-424a-975f-164009a555f8.png → 0b83c2e5-ebb4-4a69-8b5f-658774d4c5a6.png} +0 -0
- /kaa/sprites/{ad63136d-2360-45e6-b7ef-00e01612c7ce.png → 0be5a84d-eb1e-4bb3-afcd-923e104190f4.png} +0 -0
- /kaa/sprites/{be2985ff-c3ac-4d94-9751-c652dd561db2.png → 0c192ca4-dd10-49b4-b0be-9b1fb4637910.png} +0 -0
- /kaa/sprites/{bca22a82-f72b-46ca-be06-c1e18b7ad27c.png → 0cae32b3-0248-49ad-98dd-d06a89308797.png} +0 -0
- /kaa/sprites/{a694f6e8-6ef9-4761-816a-ad586ce93654.png → 0d1fd6f0-3a6f-4008-a31a-8189dd09be50.png} +0 -0
- /kaa/sprites/{cde4da05-d654-4217-8443-752bc0709742.png → 0d2143fa-7e81-4e7a-8a94-c3839719de5b.png} +0 -0
- /kaa/sprites/{901b48f9-d7b7-46c2-85fa-b07e427ffdaa.png → 0dbb752b-e60a-459d-80fa-f5b49e8b8e4d.png} +0 -0
- /kaa/sprites/{80fa9c6e-fe05-4d3e-ae50-6b7e9a237e0b.png → 0e63e0b7-6874-46e9-86de-8c23e6491f24.png} +0 -0
- /kaa/sprites/{603c5369-9247-404d-bc6d-4719d11de6ea.png → 0f4ac9ae-5e4d-4f3f-b9e0-b76570f2b040.png} +0 -0
- /kaa/sprites/{7f90beb9-8712-4a53-a818-ff7a5e82d71d.png → 0f8026e8-62a9-49e5-97a6-0d78f33dcfcf.png} +0 -0
- /kaa/sprites/{6bcebf50-764b-4bf2-be8e-ba241d8550d7.png → 0f80ac6f-bdf8-4927-8393-c554209f517a.png} +0 -0
- /kaa/sprites/{4396a9b8-b7f0-45f3-8a8f-85773a10eecb.png → 116d3f3a-0255-47ed-b656-c26b41a5cfa8.png} +0 -0
- /kaa/sprites/{9a0172aa-9489-4985-9c65-c5f6db0a0325.png → 130cd7fd-767e-4177-9087-71f418f154dd.png} +0 -0
- /kaa/sprites/{333a1e30-82d3-45b9-8e48-4c127bcb5ec6.png → 138a527b-2191-4f0f-9e36-1d08bbf6ffb1.png} +0 -0
- /kaa/sprites/{cee6ca8f-219c-448d-9ba6-d6722f27b600.png → 1472da80-4cbb-41e1-94e8-3ea3defd3b6f.png} +0 -0
- /kaa/sprites/{94121408-8cd2-46fc-bf27-33b207e4cba8.png → 14875449-7478-4969-a2d5-91ce34c9d1e4.png} +0 -0
- /kaa/sprites/{15da6f78-d89f-480c-9cce-c95e009fd15a.png → 1539fcff-8842-478f-98a8-0d1a885d1b43.png} +0 -0
- /kaa/sprites/{97329116-4d2e-40d7-af96-938afdac4e60.png → 16113270-3f35-498a-a29a-52f190d77cc1.png} +0 -0
- /kaa/sprites/{545068ad-6f17-40d8-99e1-d26bd5700c67.png → 1617c180-ce9f-461a-bfdc-390337ecb205.png} +0 -0
- /kaa/sprites/{e38a2f35-9ac5-4363-bd6d-09893907ea71.png → 16cf9d8b-4f8e-47ce-a63d-fe9bfc3f31e8.png} +0 -0
- /kaa/sprites/{4fc6fae5-386d-434c-893d-5450bd5a6396.png → 1b485aa9-f0c0-4b49-ba75-363a8d6e292c.png} +0 -0
- /kaa/sprites/{4995d301-375b-4d23-a6e5-b26a771fcbe4.png → 1d560b06-feac-413d-bf90-07ac045f11fb.png} +0 -0
- /kaa/sprites/{e16b116c-6a2c-4e5d-8105-8dfc8c4c730f.png → 1d92cb8e-49a7-4166-9682-a5807e0c7912.png} +0 -0
- /kaa/sprites/{be04f096-c46b-4784-8e6c-c1217764f6dd.png → 1dadf765-ddd0-4768-9e91-6d3d08d0ca0d.png} +0 -0
- /kaa/sprites/{d0652541-e289-4bcd-98ec-a88715f5adef.png → 20cbf6b8-01db-45fe-a790-dbb7dd639b1d.png} +0 -0
- /kaa/sprites/{8c4f60d1-d707-4ae5-bd94-d96661ea7bbc.png → 20d01fc0-9a54-4ef5-9983-2bb8414dd94d.png} +0 -0
- /kaa/sprites/{011c52b9-613d-4865-afd3-1f0ddab2bc5b.png → 20e1e948-6920-44cd-965e-9e1e37b3fbf2.png} +0 -0
- /kaa/sprites/{5ee1b47b-f20d-431b-a0bb-d203b9f3e15b.png → 23922edd-22aa-4514-ba99-65bcd72c2ad1.png} +0 -0
- /kaa/sprites/{3d57da0a-b166-4acd-9a8a-b247ba5ad13a.png → 24c2db22-24e2-484e-8c16-8b1c9fe3ed14.png} +0 -0
- /kaa/sprites/{f5145781-949e-4012-9ea9-b0a277dac72b.png → 26683d54-74a9-4e7b-a839-c2e0850d1458.png} +0 -0
- /kaa/sprites/{2987cb9c-5975-41b3-87f7-cc26efdcee74.png → 27bcc513-9bab-468a-97b8-ed16f918e2a4.png} +0 -0
- /kaa/sprites/{c24394f6-ed02-4fb4-8d58-40a7e51b259d.png → 284a19c3-2c06-48a5-8f78-b4682e8ae19e.png} +0 -0
- /kaa/sprites/{da615a2f-3334-462c-8535-40067ad1c857.png → 2927cceb-29dc-4c35-8614-1df42fc0733b.png} +0 -0
- /kaa/sprites/{0a430b29-9841-407a-a102-ea6420beeaae.png → 2c5784df-e89b-4b95-a4b9-bac083c0ec08.png} +0 -0
- /kaa/sprites/{3867054e-a686-4dab-89fb-6a9def58dfe1.png → 2dfa926c-83c5-4f40-adfe-ff04ce448264.png} +0 -0
- /kaa/sprites/{d1a6547e-7c58-4500-a7f4-cf462f44395f.png → 2f7f70ea-f3f0-4d14-8885-1a735ff00545.png} +0 -0
- /kaa/sprites/{4a5e8c39-4e80-4202-9886-be1a58073fd6.png → 307fcb37-7a90-4a3e-bd3a-64a691aeb5d5.png} +0 -0
- /kaa/sprites/{151dc2ce-fce4-4741-ac6e-cc8213f54137.png → 3114b2d5-0a96-4eba-9143-b09eabb63612.png} +0 -0
- /kaa/sprites/{1aa14c42-8682-4a75-b4a2-4715481a2381.png → 31168fe2-8601-4de6-aa40-81e7ce452391.png} +0 -0
- /kaa/sprites/{f3400d73-4f61-4027-b5d8-03765a63a186.png → 31b025df-ed25-4bc4-a94a-d05388e9156e.png} +0 -0
- /kaa/sprites/{0c211c20-096e-4572-8e74-3867904db1f6.png → 32af48d2-fb5b-4288-930f-eb36edfe2116.png} +0 -0
- /kaa/sprites/{0803c844-7085-4492-ad68-0ce3b11f9840.png → 34e50d77-7b95-4bb7-8c62-ad6801dc0e55.png} +0 -0
- /kaa/sprites/{bd5b168a-de03-46b3-b1b7-9fa9667f4642.png → 3658a26d-98d3-462a-abf4-4d8b74aeb134.png} +0 -0
- /kaa/sprites/{562deb0a-99bd-4e95-80ff-f933a73c28ad.png → 36f11c55-e110-44b7-a800-85f4d7584560.png} +0 -0
- /kaa/sprites/{9c827df9-2e47-4bec-95b7-8ccad6377a28.png → 38bb2a90-b2a9-4f85-9025-662e83ab1ed1.png} +0 -0
- /kaa/sprites/{eebbccac-25a9-465e-b7c8-3bfdaf0bf0b9.png → 38f70a7e-5f7e-4ee6-a7c5-5f8014734719.png} +0 -0
- /kaa/sprites/{6f79221a-8c47-423e-ac72-27d97c559d63.png → 3aceddce-09db-422a-8023-e08d41070cc8.png} +0 -0
- /kaa/sprites/{3fe4ec28-3b2a-4042-ace1-ceec5c8f48b1.png → 3c224540-1571-435a-b8e6-2317e4411438.png} +0 -0
- /kaa/sprites/{f2913d0b-342c-4de0-8235-fe3f1c580d2e.png → 3d9a9493-7616-4b2b-867e-44e776d831c0.png} +0 -0
- /kaa/sprites/{a8bef06b-9287-4f54-b96e-19463031d26f.png → 3fd694ea-8396-4cf3-9ba6-eaf95b61e8c8.png} +0 -0
- /kaa/sprites/{fd16e035-699c-4dc9-9721-61443cd6fd63.png → 4055dbef-1523-43b7-9183-6b2721b4307b.png} +0 -0
- /kaa/sprites/{606d4740-8af9-40f6-af18-ad9f73cecf68.png → 4059ec2d-cd20-4dd3-8586-e49a4cfa8717.png} +0 -0
- /kaa/sprites/{9ea3c9b4-80f3-44b9-90e3-cfc406f814be.png → 4280fa1d-4223-4fc4-85f9-caf6157cb004.png} +0 -0
- /kaa/sprites/{436ec8e4-aa4a-4b1f-940a-2ab55baa098d.png → 43bc2116-7fe3-4b20-8c8b-3ab2a2b5dd7d.png} +0 -0
- /kaa/sprites/{39815c36-38c5-4066-aff5-2177c232b4f4.png → 43d3fe01-27c0-4d3f-a908-aebd00ab219d.png} +0 -0
- /kaa/sprites/{9c6378a9-62ed-4881-bc6f-2166bbb470c7.png → 45062c9b-a31d-457b-83a2-9b6891384a15.png} +0 -0
- /kaa/sprites/{e630b33a-e73e-4271-96b9-860b94fb48ca.png → 4516d0e4-9280-4f91-ba7d-fc8af83a9996.png} +0 -0
- /kaa/sprites/{916391a4-09b7-409c-ba25-391b61a65e62.png → 458b8bbe-9fa5-48d4-907b-66d36baf16a1.png} +0 -0
- /kaa/sprites/{9092a171-66f0-47dc-99dd-bb5d7359077a.png → 45af668c-2324-4fe4-83e0-11d65cfaa086.png} +0 -0
- /kaa/sprites/{297fb9e0-9553-40fb-ad08-f5ab718ef119.png → 45bdb006-bea5-4a1f-bf1a-c3bcb2e99abd.png} +0 -0
- /kaa/sprites/{1bf95df3-255f-4e89-9b17-0af77f4affd6.png → 47186b16-f478-4a53-8e49-a132ee4c78db.png} +0 -0
- /kaa/sprites/{1f6805bb-dff1-4d4c-82bf-74563056cc81.png → 4876c6f3-17a5-4858-b1d1-ebb5619516c5.png} +0 -0
- /kaa/sprites/{b2c8ac50-87a3-4cdd-a895-9704a9674163.png → 491bd489-7a08-47b4-b1b7-5d0f44cedbca.png} +0 -0
- /kaa/sprites/{484594b4-06a2-4ec3-8a85-e7af3b012125.png → 4a853ac5-24d5-44ac-8ddf-9f501c60a9be.png} +0 -0
- /kaa/sprites/{f6e26f3c-2548-4507-8651-53917e0fe82a.png → 4b88639e-1f17-4e11-90b6-bb122f8cb5ab.png} +0 -0
- /kaa/sprites/{935d8115-245f-42ff-ad74-55f4e6d140b1.png → 4dc5f817-86bc-4433-aeb5-b02c7b63fa8c.png} +0 -0
- /kaa/sprites/{b379d704-fc45-42f9-a45c-d81a6c5ee951.png → 4e3a9fd3-86aa-4e14-ae48-46e53a553da2.png} +0 -0
- /kaa/sprites/{7df9b645-ff88-4459-8ba7-450da538cfd9.png → 4e7f7b91-344c-4fb2-95fe-004831e81b11.png} +0 -0
- /kaa/sprites/{24b3cf5c-0586-41cc-abfb-df48de07fa77.png → 511232f6-01d6-482a-81a3-2bf79a6e88ed.png} +0 -0
- /kaa/sprites/{101a9c54-ab8c-4b5d-a4e0-686b93b4e1d9.png → 546cb160-f99b-4cda-9719-02b38a5393a0.png} +0 -0
- /kaa/sprites/{74e4c222-0006-4295-99d0-a01aa8b94dc2.png → 56bc2743-5dd9-4d09-a681-af9d1fec568b.png} +0 -0
- /kaa/sprites/{d11f07b1-f2e9-4c41-9ad9-81529121afd4.png → 5701ecbe-7fed-435c-b409-75f8b0f2df51.png} +0 -0
- /kaa/sprites/{6dd4ca2b-69ca-4099-9e69-2144ce9a4d28.png → 58de1cf0-4270-4987-9dc7-3f584f1119d1.png} +0 -0
- /kaa/sprites/{48eb2e27-7419-4136-9642-7af1a6f83ed9.png → 5a337f99-8554-48bf-acb7-364259fbf1b7.png} +0 -0
- /kaa/sprites/{ccad6a54-73f6-48b8-a86f-16b9e0f46e41.png → 5cb4deb9-2ec5-4452-aba4-390eae2071c7.png} +0 -0
- /kaa/sprites/{f136dd9f-43c8-44cc-b081-1f86d7ce38d4.png → 5d42f16f-3475-4ffb-ac85-3c86fa8fba46.png} +0 -0
- /kaa/sprites/{52aba1bd-1e82-46a7-8003-0aac11586a38.png → 6c5698a4-b211-4f38-83a7-51b5f3a36911.png} +0 -0
- /kaa/sprites/{0ec56b89-81f2-478d-907e-b04aab199e86.png → 771d1e17-8ef4-417a-b482-26db514e17c6.png} +0 -0
- /kaa/sprites/{c23c29cc-ef42-46d8-8b58-283b74a254cc.png → 7833fa1e-c842-4efd-a696-c67150a1dfa8.png} +0 -0
- /kaa/sprites/{2bb41b59-61f8-4109-a550-faa6a14708de.png → 791b3367-fb7c-48b5-9a0f-877908e51c4a.png} +0 -0
- /kaa/sprites/{47cbfa79-0b33-4ccc-b762-21e3a141a7bc.png → 7bb874a3-3fac-4138-83bd-d6461c5793d3.png} +0 -0
- /kaa/sprites/{fc77cc87-f8eb-4b33-834c-ee5d2af5ca44.png → 7d4d06a8-7903-4803-a20b-7f45ffbe9ca7.png} +0 -0
- /kaa/sprites/{b581ae5b-cb67-4bf9-8ffe-72b8ba56d887.png → 81553259-3b0a-42f7-b7b9-2c6e1dfec6c4.png} +0 -0
- /kaa/sprites/{eda88516-ac6b-4f26-b074-f8e6e2ae42a5.png → 827cec52-d883-46d1-b24b-c11c82b1b459.png} +0 -0
- /kaa/sprites/{9966acd5-973a-4afb-a006-c1fa66cfe679.png → 8473bc42-1909-4d70-b80d-7eba085c9978.png} +0 -0
- /kaa/sprites/{c16ae471-7d60-4c1f-9981-1090414a7ea0.png → 84797a78-97f3-44fa-b3c0-132c914f534a.png} +0 -0
- /kaa/sprites/{df54b1e4-035c-4937-9360-19b4733826e6.png → 861bd6b8-cca7-46b1-9346-83af080e211b.png} +0 -0
- /kaa/sprites/{436b9822-c946-4d2e-a432-8f3159705b37.png → 8f5081e4-ed3d-445b-bcf6-2e40c7d08298.png} +0 -0
- /kaa/sprites/{5bb33faa-8236-4e17-92bd-ad709795f261.png → 91dbaa9c-7881-4687-bd64-8f25c201d98c.png} +0 -0
- /kaa/sprites/{95e11d11-f330-4906-a128-6492f95176e8.png → 93f3f6a9-e9d2-45b7-a2b3-1e8b64d10e9b.png} +0 -0
- /kaa/sprites/{dd59548d-0800-49d3-8701-b2b2e8512c36.png → 943cde40-f190-40b6-9235-4439fbb4ae50.png} +0 -0
- /kaa/sprites/{7678902c-57df-4cf8-87ef-11c85f02214b.png → 97f3fb5a-fce2-4cc5-9da5-f0496e9dd294.png} +0 -0
- /kaa/sprites/{d051b4c3-354e-4d69-95f6-14f5017ed79e.png → 98a68736-c4ec-4af1-ac64-40eb48f9c000.png} +0 -0
- /kaa/sprites/{a9029026-7a7e-4f8e-9620-bd451bfdf284.png → 9af13381-661d-41cf-b704-e4a9c3691e14.png} +0 -0
- /kaa/sprites/{5a892ef3-543b-4fad-bdca-5358314d6be7.png → 9b91dc78-49e8-41b2-9500-c27cb46023c4.png} +0 -0
- /kaa/sprites/{920ea830-31a8-4256-b247-7b9507030783.png → 9d0bf64a-2684-43fa-b9bf-552e60c717b4.png} +0 -0
- /kaa/sprites/{b37685c3-74a8-4393-ad79-c445ab2d77be.png → a32fa779-2fb9-488e-9153-0b99e4352281.png} +0 -0
- /kaa/sprites/{9f81bc0f-da2c-4321-a185-b2d8a3f0d390.png → a6269fe5-e719-43ad-b674-ea728e43066b.png} +0 -0
- /kaa/sprites/{2beaba86-119e-4a1c-8cf4-e03c4d0d957a.png → a8ca6a10-ba0a-4416-a27b-3323d38040ab.png} +0 -0
- /kaa/sprites/{f258af39-e8be-4e19-aafc-bfedce9793c0.png → acaea032-45b8-4ad8-8b54-ff011750af80.png} +0 -0
- /kaa/sprites/{ed7adff5-1604-4ade-ac2b-a30167ef457c.png → ae5a051e-37f5-4e54-bfc7-64c445ad6fcc.png} +0 -0
- /kaa/sprites/{30604b47-7c8b-4dd5-b926-fd33bad575c7.png → af5a6ae7-a355-492e-86a8-62fa2b06bb54.png} +0 -0
- /kaa/sprites/{36e6c1ea-8de5-4640-8340-b8f532ef40c0.png → b406baf0-fa0b-4125-adc6-d370582a6104.png} +0 -0
- /kaa/sprites/{42bfc60c-0249-4910-ad04-80e559b52c6b.png → b62f9c30-1faf-47fc-be8f-36db3806c5dc.png} +0 -0
- /kaa/sprites/{56bcde1a-5cd7-493d-a2cd-2a63394c0c36.png → ba1983ce-bf63-4022-9ef3-dcf97030e6c5.png} +0 -0
- /kaa/sprites/{8e648675-1a52-4926-92cf-64c7cb5c2a59.png → ba971684-1fe3-47e1-8bdb-d20a0011ea68.png} +0 -0
- /kaa/sprites/{3af1e6de-e718-4a09-8ee9-88be21cd4b3d.png → bdbed86f-553c-458e-9435-d587005b367d.png} +0 -0
- /kaa/sprites/{e2944d47-159f-4200-b476-8d5db41d30c0.png → bee41ab5-c62e-4a79-a8d0-40f9efbc7e40.png} +0 -0
- /kaa/sprites/{bfaf3273-76bf-457a-88b7-6816af742a30.png → c344b05d-2707-43b0-9e3e-4ec433558dcb.png} +0 -0
- /kaa/sprites/{7df273dc-69f7-45b9-a782-b221783f851b.png → c3c495a2-1530-439f-a10e-76ca5d929cce.png} +0 -0
- /kaa/sprites/{76262c30-a2ee-45ba-8279-ca682cee0bd6.png → ccac6d8e-bca2-4ab6-b88b-c0f5ba83df84.png} +0 -0
- /kaa/sprites/{574b2741-c4ac-4ee4-a544-f4f499e4a21e.png → ce7cec02-4039-4171-87ed-37eccc4ac832.png} +0 -0
- /kaa/sprites/{6dead493-c4e6-4ba9-ac56-abe8c511abbd.png → f72e9d65-68e7-4bb6-be44-4b5ed71f0bce.png} +0 -0
- {ksaa-2025.9.post2.dist-info → ksaa-2025.11.dist-info}/WHEEL +0 -0
- {ksaa-2025.9.post2.dist-info → ksaa-2025.11.dist-info}/entry_points.txt +0 -0
- {ksaa-2025.9.post2.dist-info → ksaa-2025.11.dist-info}/licenses/LICENSE +0 -0
- {ksaa-2025.9.post2.dist-info → ksaa-2025.11.dist-info}/top_level.txt +0 -0
|
@@ -31,8 +31,18 @@ def upgrade_support_card():
|
|
|
31
31
|
device.click(image.expect_wait(R.Common.ButtonIdolSupportCard, timeout=5))
|
|
32
32
|
sleep(2)
|
|
33
33
|
|
|
34
|
-
#
|
|
35
|
-
|
|
34
|
+
# 重试10次
|
|
35
|
+
for retry_idx in range(10):
|
|
36
|
+
logger.debug(f'Scrolling down to find low-level support cards, attempt {retry_idx + 1}/10')
|
|
37
|
+
# 往下滑,划到最底部
|
|
38
|
+
scrollbar = Scrollable()
|
|
39
|
+
scrollbar.to(1)
|
|
40
|
+
sleep(0.1)
|
|
41
|
+
scrollbar.update()
|
|
42
|
+
if scrollbar.position >= 0.99:
|
|
43
|
+
logger.debug('Successfully scrolled to the bottom.')
|
|
44
|
+
break
|
|
45
|
+
sleep(0.5)
|
|
36
46
|
|
|
37
47
|
# 点击左上角第一张支援卡
|
|
38
48
|
# 点击位置百分比: (0.18, 0.34)
|
kaa/tasks/produce/cards.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import logging
|
|
2
1
|
from functools import partial
|
|
3
2
|
from typing import Callable, NamedTuple, Literal
|
|
4
3
|
|
|
@@ -9,6 +8,7 @@ from cv2.typing import MatLike
|
|
|
9
8
|
from kaa.db.drink import Drink
|
|
10
9
|
from kaa.game_ui.drinks_overview import locate_all_drinks_in_3_drink_slots
|
|
11
10
|
from kaa.tasks import R
|
|
11
|
+
from kaa.tasks.common import skip
|
|
12
12
|
from kaa.config import conf
|
|
13
13
|
from kaa.game_ui import dialog
|
|
14
14
|
from kaa.tasks.produce.common import acquisition_date_change_dialog
|
|
@@ -16,6 +16,7 @@ from kaa.util.trace import trace
|
|
|
16
16
|
from kotonebot.primitives import RectTuple, Rect
|
|
17
17
|
from kotonebot import action, Interval, Countdown, device, image, sleep, ocr, contains, use_screenshot, color
|
|
18
18
|
from kotonebot.backend.loop import Loop
|
|
19
|
+
from kotonebot import logging
|
|
19
20
|
|
|
20
21
|
class SkillCard(NamedTuple):
|
|
21
22
|
available: bool
|
|
@@ -143,7 +144,7 @@ def do_cards(
|
|
|
143
144
|
DRINK_MAX_RETRIES = 5
|
|
144
145
|
|
|
145
146
|
for _ in Loop(interval=1/30):
|
|
146
|
-
|
|
147
|
+
skip()
|
|
147
148
|
img = device.screenshot()
|
|
148
149
|
|
|
149
150
|
# 技能卡自选移动对话框
|
|
@@ -420,7 +421,7 @@ def detect_recommended_card(
|
|
|
420
421
|
filtered_results = list(filter(partial(threshold_predicate, card_count), results))
|
|
421
422
|
if not filtered_results:
|
|
422
423
|
max_result = max(results, key=lambda x: x.score)
|
|
423
|
-
logger.
|
|
424
|
+
logger.verbose("Max card detect result (discarded): value=%d score=%.4f borders=(%.4f, %.4f, %.4f, %.4f)",
|
|
424
425
|
max_result.type,
|
|
425
426
|
max_result.score,
|
|
426
427
|
max_result.left_score,
|
|
@@ -430,7 +431,7 @@ def detect_recommended_card(
|
|
|
430
431
|
)
|
|
431
432
|
return None
|
|
432
433
|
filtered_results.sort(key=lambda x: x.score, reverse=True)
|
|
433
|
-
logger.
|
|
434
|
+
logger.debug("Max card detect result: value=%d score=%.4f borders=(%.4f, %.4f, %.4f, %.4f)",
|
|
434
435
|
filtered_results[0].type,
|
|
435
436
|
filtered_results[0].score,
|
|
436
437
|
filtered_results[0].left_score,
|
kaa/tasks/produce/common.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
from typing import Literal
|
|
2
1
|
from logging import getLogger
|
|
2
|
+
from typing import Literal, Callable
|
|
3
3
|
|
|
4
|
+
from cv2.typing import MatLike
|
|
4
5
|
from kotonebot import (
|
|
5
6
|
ocr,
|
|
6
7
|
device,
|
|
@@ -10,16 +11,23 @@ from kotonebot import (
|
|
|
10
11
|
Loop,
|
|
11
12
|
Interval,
|
|
12
13
|
)
|
|
13
|
-
from
|
|
14
|
-
from kaa.tasks.start_game import wait_for_home
|
|
14
|
+
from kotonebot.util import Countdown
|
|
15
15
|
from kotonebot.primitives import Rect
|
|
16
16
|
from kaa.tasks import R
|
|
17
|
+
from kaa.tasks.common import skip
|
|
17
18
|
from .p_drink import acquire_p_drink
|
|
18
19
|
from kotonebot.util import measure_time
|
|
20
|
+
from kotonebot.backend.core import Image
|
|
21
|
+
from kotonebot.errors import UnrecoverableError
|
|
22
|
+
|
|
23
|
+
from kaa.tasks import R
|
|
19
24
|
from kaa.config import conf
|
|
25
|
+
from .p_drink import acquire_p_drink
|
|
20
26
|
from kaa.tasks.actions.loading import loading
|
|
21
|
-
from kaa.
|
|
27
|
+
from kaa.config.schema import produce_solution
|
|
28
|
+
from kaa.tasks.start_game import wait_for_home
|
|
22
29
|
from kaa.tasks.actions.commu import handle_unread_commu
|
|
30
|
+
from kaa.game_ui import CommuEventButtonUI, dialog, badge
|
|
23
31
|
|
|
24
32
|
logger = getLogger(__name__)
|
|
25
33
|
|
|
@@ -77,6 +85,7 @@ def acquire_skill_card():
|
|
|
77
85
|
if acquire_btn := image.find(R.InPurodyuusu.AcquireBtnDisabled):
|
|
78
86
|
logger.debug("Click acquire button")
|
|
79
87
|
device.click(acquire_btn)
|
|
88
|
+
sleep(0.2)
|
|
80
89
|
break
|
|
81
90
|
|
|
82
91
|
@action('选择P物品', screenshot_mode='auto')
|
|
@@ -257,109 +266,197 @@ def acquisition_date_change_dialog() -> AcquisitionType | None:
|
|
|
257
266
|
|
|
258
267
|
return None
|
|
259
268
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
return
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
269
|
+
# TODO: 这里要改善一下输出日志。
|
|
270
|
+
# Acquisitions finished. Handled: xxx(event name or 'none'). Checked: 12(number of acquisitions) / 12(number of acquisitions)
|
|
271
|
+
class ProduceInterrupt:
|
|
272
|
+
def __init__(self, *, timeout: float | None = None):
|
|
273
|
+
"""
|
|
274
|
+
:param timeout: 超时时间,单位秒。默认为 None,表示使用配置文件中的时间。
|
|
275
|
+
"""
|
|
276
|
+
timeout = timeout or conf().produce.interrupt_timeout
|
|
277
|
+
self.cd = Countdown(timeout)
|
|
278
|
+
|
|
279
|
+
@staticmethod
|
|
280
|
+
def _check_loading(img: MatLike) -> AcquisitionType | None:
|
|
281
|
+
"""检查加载画面"""
|
|
282
|
+
if loading():
|
|
283
|
+
logger.info("Loading...")
|
|
284
|
+
return "Loading"
|
|
285
|
+
return None
|
|
286
|
+
|
|
287
|
+
@staticmethod
|
|
288
|
+
def _check_skip_commu(img: MatLike) -> AcquisitionType | None:
|
|
289
|
+
"""检查跳过未读交流"""
|
|
290
|
+
logger.debug("Check skip commu...")
|
|
291
|
+
if produce_solution().data.skip_commu and handle_unread_commu(img):
|
|
292
|
+
return "SkipCommu"
|
|
293
|
+
return None
|
|
294
|
+
|
|
295
|
+
@staticmethod
|
|
296
|
+
def _check_pdrink_max(img: MatLike) -> AcquisitionType | None:
|
|
297
|
+
"""检查P饮料到达上限"""
|
|
298
|
+
logger.debug("Check PDrink max...")
|
|
299
|
+
# TODO: 需要封装一个更好的实现方式。比如 wait_stable?
|
|
285
300
|
if image.find(R.InPurodyuusu.TextPDrinkMax):
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
if
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
301
|
+
logger.debug("PDrink max found")
|
|
302
|
+
device.screenshot()
|
|
303
|
+
if image.find(R.InPurodyuusu.TextPDrinkMax):
|
|
304
|
+
# 有对话框标题,但是没找到确认按钮
|
|
305
|
+
# 可能是需要勾选一个饮料
|
|
306
|
+
# 也有可能是对话框正在往下退出
|
|
307
|
+
if not image.find(R.InPurodyuusu.ButtonLeave, colored=True):
|
|
308
|
+
logger.info("No leave button found, click checkbox")
|
|
309
|
+
if image.find(R.Common.CheckboxUnchecked, colored=True):
|
|
310
|
+
device.click()
|
|
311
|
+
sleep(0.2)
|
|
312
|
+
device.screenshot()
|
|
313
|
+
if leave := image.find(R.InPurodyuusu.ButtonLeave, colored=True):
|
|
314
|
+
logger.info("Leave button found")
|
|
315
|
+
device.click(leave)
|
|
316
|
+
return "PDrinkMax"
|
|
317
|
+
return None
|
|
318
|
+
|
|
319
|
+
@staticmethod
|
|
320
|
+
def _check_pdrink_max_confirm(img: MatLike) -> AcquisitionType | None:
|
|
321
|
+
"""检查P饮料到达上限确认提示框"""
|
|
322
|
+
# [kotonebot-resource/sprites/jp/in_purodyuusu/screenshot_pdrink_max_confirm.png]
|
|
302
323
|
if image.find(R.InPurodyuusu.TextPDrinkMaxConfirmTitle):
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
if handle_skill_card_enhance():
|
|
312
|
-
return "PSkillCardEnhanceSelect"
|
|
313
|
-
device.click(10, 10)
|
|
314
|
-
|
|
315
|
-
# 技能卡自选删除
|
|
316
|
-
if image.find(R.InPurodyuusu.IconTitleSkillCardRemoval):
|
|
317
|
-
if handle_skill_card_removal():
|
|
318
|
-
return "PSkillCardRemoveSelect"
|
|
319
|
-
device.click(10, 10)
|
|
320
|
-
|
|
321
|
-
# 网络中断弹窗
|
|
322
|
-
logger.debug("Check network error popup...")
|
|
323
|
-
if (image.find(R.Common.TextNetworkError)
|
|
324
|
-
and (btn_retry := image.find(R.Common.ButtonRetry))
|
|
325
|
-
):
|
|
326
|
-
logger.info("Network error popup found")
|
|
327
|
-
device.click(btn_retry)
|
|
328
|
-
return "NetworkError"
|
|
329
|
-
device.click(10, 10)
|
|
330
|
-
|
|
331
|
-
# 物品选择对话框
|
|
332
|
-
logger.debug("Check award select dialog...")
|
|
333
|
-
if image.find(R.InPurodyuusu.TextClaim):
|
|
334
|
-
logger.info("Award select dialog found.")
|
|
335
|
-
|
|
336
|
-
# P饮料选择
|
|
337
|
-
logger.debug("Check PDrink select...")
|
|
338
|
-
if image.find(R.InPurodyuusu.TextPDrink):
|
|
339
|
-
logger.info("PDrink select found")
|
|
340
|
-
acquire_p_drink()
|
|
341
|
-
return "PDrinkSelect"
|
|
342
|
-
# 技能卡选择
|
|
343
|
-
logger.debug("Check skill card select...")
|
|
344
|
-
if image.find(R.InPurodyuusu.TextSkillCard):
|
|
345
|
-
logger.info("Acquire skill card found")
|
|
346
|
-
acquire_skill_card()
|
|
347
|
-
return "PSkillCardSelect"
|
|
348
|
-
# P物品选择
|
|
349
|
-
logger.debug("Check PItem select...")
|
|
350
|
-
if image.find(R.InPurodyuusu.TextPItem):
|
|
351
|
-
logger.info("Acquire PItem found")
|
|
352
|
-
select_p_item()
|
|
353
|
-
return "PItemSelect"
|
|
354
|
-
device.click(10, 10)
|
|
355
|
-
|
|
356
|
-
# 日期变更
|
|
357
|
-
result = acquisition_date_change_dialog()
|
|
358
|
-
if result is not None:
|
|
359
|
-
return result
|
|
360
|
-
device.click(10, 10)
|
|
324
|
+
logger.debug("PDrink max confirm found")
|
|
325
|
+
device.screenshot()
|
|
326
|
+
if image.find(R.InPurodyuusu.TextPDrinkMaxConfirmTitle):
|
|
327
|
+
if confirm := image.find(R.Common.ButtonConfirm):
|
|
328
|
+
logger.info("Confirm button found")
|
|
329
|
+
device.click(confirm)
|
|
330
|
+
return "PDrinkMax"
|
|
331
|
+
return None
|
|
361
332
|
|
|
362
|
-
|
|
333
|
+
@staticmethod
|
|
334
|
+
def _check_skill_card_enhance(img: MatLike) -> AcquisitionType | None:
|
|
335
|
+
"""检查技能卡自选强化"""
|
|
336
|
+
if image.find(R.InPurodyuusu.IconTitleSkillCardEnhance):
|
|
337
|
+
if handle_skill_card_enhance():
|
|
338
|
+
return "PSkillCardEnhanceSelect"
|
|
339
|
+
return None
|
|
340
|
+
|
|
341
|
+
@staticmethod
|
|
342
|
+
def _check_skill_card_removal(img: MatLike) -> AcquisitionType | None:
|
|
343
|
+
"""检查技能卡自选删除"""
|
|
344
|
+
if image.find(R.InPurodyuusu.IconTitleSkillCardRemoval):
|
|
345
|
+
if handle_skill_card_removal():
|
|
346
|
+
return "PSkillCardRemoveSelect"
|
|
347
|
+
return None
|
|
348
|
+
|
|
349
|
+
@staticmethod
|
|
350
|
+
def _check_network_error(img: MatLike) -> AcquisitionType | None:
|
|
351
|
+
"""检查网络中断弹窗"""
|
|
352
|
+
logger.debug("Check network error popup...")
|
|
353
|
+
if (image.find(R.Common.TextNetworkError)
|
|
354
|
+
and (btn_retry := image.find(R.Common.ButtonRetry))
|
|
355
|
+
):
|
|
356
|
+
logger.info("Network error popup found")
|
|
357
|
+
device.click(btn_retry)
|
|
358
|
+
return "NetworkError"
|
|
359
|
+
return None
|
|
360
|
+
|
|
361
|
+
@staticmethod
|
|
362
|
+
def _check_award_select(img: MatLike) -> AcquisitionType | None:
|
|
363
|
+
"""检查物品选择对话框"""
|
|
364
|
+
logger.debug("Check award select dialog...")
|
|
365
|
+
if image.find(R.InPurodyuusu.TextClaim):
|
|
366
|
+
logger.info("Award select dialog found.")
|
|
367
|
+
|
|
368
|
+
# P饮料选择
|
|
369
|
+
logger.debug("Check PDrink select...")
|
|
370
|
+
if image.find(R.InPurodyuusu.TextPDrink):
|
|
371
|
+
logger.info("PDrink select found")
|
|
372
|
+
acquire_p_drink()
|
|
373
|
+
return "PDrinkSelect"
|
|
374
|
+
# 技能卡选择
|
|
375
|
+
logger.debug("Check skill card select...")
|
|
376
|
+
if image.find(R.InPurodyuusu.TextSkillCard):
|
|
377
|
+
logger.info("Acquire skill card found")
|
|
378
|
+
acquire_skill_card()
|
|
379
|
+
return "PSkillCardSelect"
|
|
380
|
+
# P物品选择
|
|
381
|
+
logger.debug("Check PItem select...")
|
|
382
|
+
if image.find(R.InPurodyuusu.TextPItem):
|
|
383
|
+
logger.info("Acquire PItem found")
|
|
384
|
+
select_p_item()
|
|
385
|
+
return "PItemSelect"
|
|
386
|
+
return None
|
|
387
|
+
|
|
388
|
+
@staticmethod
|
|
389
|
+
def _check_date_change(img: MatLike) -> AcquisitionType | None:
|
|
390
|
+
"""检查日期变更"""
|
|
391
|
+
result = acquisition_date_change_dialog()
|
|
392
|
+
if result is not None:
|
|
393
|
+
return result
|
|
394
|
+
return None
|
|
395
|
+
|
|
396
|
+
handlers = [
|
|
397
|
+
_check_loading,
|
|
398
|
+
_check_skip_commu,
|
|
399
|
+
_check_pdrink_max,
|
|
400
|
+
_check_pdrink_max_confirm,
|
|
401
|
+
_check_skill_card_enhance,
|
|
402
|
+
_check_skill_card_removal,
|
|
403
|
+
_check_network_error,
|
|
404
|
+
_check_award_select,
|
|
405
|
+
_check_date_change
|
|
406
|
+
]
|
|
407
|
+
|
|
408
|
+
@classmethod
|
|
409
|
+
@action('处理培育事件', screenshot_mode='manual')
|
|
410
|
+
def check(cls) -> AcquisitionType | None:
|
|
411
|
+
"""处理行动开始前和结束后可能需要处理的事件"""
|
|
412
|
+
img = device.screenshot()
|
|
413
|
+
logger.info("Acquisition stuffs...")
|
|
414
|
+
|
|
415
|
+
# 检查各个可能的中断事件
|
|
416
|
+
for handler in cls.handlers:
|
|
417
|
+
result = handler(img)
|
|
418
|
+
if result:
|
|
419
|
+
return result
|
|
420
|
+
skip()
|
|
421
|
+
|
|
422
|
+
return None
|
|
423
|
+
|
|
424
|
+
def resolve(self, end_condition: Callable[[], bool] | Image | None = None):
|
|
425
|
+
self.cd.reset().start()
|
|
426
|
+
result: Literal[False] | AcquisitionType | None = False
|
|
427
|
+
for l in Loop():
|
|
428
|
+
if end_condition is not None:
|
|
429
|
+
if callable(end_condition) and end_condition():
|
|
430
|
+
break
|
|
431
|
+
elif isinstance(end_condition, Image) and image.find(end_condition):
|
|
432
|
+
break
|
|
433
|
+
else:
|
|
434
|
+
if result is None:
|
|
435
|
+
break
|
|
436
|
+
|
|
437
|
+
if self.cd.expired():
|
|
438
|
+
raise UnrecoverableError("ProduceInterrupt.resolve timed out after 180 seconds")
|
|
439
|
+
|
|
440
|
+
img = l.screenshot
|
|
441
|
+
if img is None:
|
|
442
|
+
img = device.screenshot()
|
|
443
|
+
for handler in self.handlers:
|
|
444
|
+
result = handler(img)
|
|
445
|
+
if result:
|
|
446
|
+
break
|
|
447
|
+
skip()
|
|
448
|
+
|
|
449
|
+
def handle(self):
|
|
450
|
+
"""处理中断事件,并检查是否超时。"""
|
|
451
|
+
if self.cd.expired():
|
|
452
|
+
raise UnrecoverableError('Unable to detect produce scene. Reseason: timed out.')
|
|
453
|
+
return self.check()
|
|
454
|
+
|
|
455
|
+
def until(self, end_img: Image):
|
|
456
|
+
"""
|
|
457
|
+
持续处理中断事件,直到指定图片出现为止。
|
|
458
|
+
"""
|
|
459
|
+
return self.resolve(lambda: image.find(end_img) is not None)
|
|
363
460
|
|
|
364
461
|
def until_acquisition_clear():
|
|
365
462
|
"""
|
|
@@ -369,7 +466,7 @@ def until_acquisition_clear():
|
|
|
369
466
|
结束条件:任意
|
|
370
467
|
"""
|
|
371
468
|
interval = Interval(0.6)
|
|
372
|
-
while
|
|
469
|
+
while ProduceInterrupt.check():
|
|
373
470
|
interval.wait()
|
|
374
471
|
|
|
375
472
|
ORANGE_RANGE = ((14, 87, 23)), ((37, 211, 255))
|
|
@@ -2,9 +2,10 @@ import logging
|
|
|
2
2
|
from typing_extensions import assert_never
|
|
3
3
|
from typing import Literal
|
|
4
4
|
|
|
5
|
-
from kaa.config.schema import produce_solution
|
|
5
|
+
from kaa.config.schema import conf, produce_solution
|
|
6
6
|
from kaa.game_ui.schedule import Schedule
|
|
7
7
|
from kaa.tasks import R
|
|
8
|
+
from kaa.tasks.common import skip
|
|
8
9
|
from ..actions import loading
|
|
9
10
|
from kaa.game_ui import WhiteFilter, dialog
|
|
10
11
|
from ..actions.scenes import at_home
|
|
@@ -14,7 +15,7 @@ from kotonebot.errors import UnrecoverableError
|
|
|
14
15
|
from kotonebot.util import Countdown, cropped
|
|
15
16
|
from kotonebot.backend.loop import Loop
|
|
16
17
|
from kaa.config import ProduceAction, RecommendCardDetectionMode
|
|
17
|
-
from ..produce.common import until_acquisition_clear, commu_event,
|
|
18
|
+
from ..produce.common import until_acquisition_clear, commu_event, ProduceInterrupt
|
|
18
19
|
from kotonebot import ocr, device, contains, image, regex, action, sleep, wait
|
|
19
20
|
from ..produce.non_lesson_actions import (
|
|
20
21
|
enter_allowance, allowance_available,
|
|
@@ -141,9 +142,10 @@ def handle_recommended_action(final_week: bool = False) -> ProduceAction | None:
|
|
|
141
142
|
return recommended
|
|
142
143
|
|
|
143
144
|
|
|
144
|
-
@action('等待进入行动场景')
|
|
145
|
+
@action('等待进入行动场景', screenshot_mode='manual')
|
|
145
146
|
def until_action_scene(week_first: bool = False):
|
|
146
147
|
"""等待进入行动场景"""
|
|
148
|
+
pi = ProduceInterrupt()
|
|
147
149
|
for _ in Loop(interval=0.2):
|
|
148
150
|
if not image.find_multi([
|
|
149
151
|
R.InPurodyuusu.TextPDiary, # 普通周
|
|
@@ -158,13 +160,13 @@ def until_action_scene(week_first: bool = False):
|
|
|
158
160
|
# [screenshots/produce/in_produce/initial_commu_event.png]
|
|
159
161
|
if week_first and commu_event():
|
|
160
162
|
continue
|
|
161
|
-
if
|
|
163
|
+
if pi.handle():
|
|
162
164
|
continue
|
|
163
165
|
else:
|
|
164
166
|
logger.info("Now at action scene.")
|
|
165
167
|
return
|
|
166
168
|
|
|
167
|
-
@action('等待进入练习场景')
|
|
169
|
+
@action('等待进入练习场景', screenshot_mode='manual')
|
|
168
170
|
def until_practice_scene():
|
|
169
171
|
"""等待进入练习场景"""
|
|
170
172
|
for _ in Loop():
|
|
@@ -173,7 +175,7 @@ def until_practice_scene():
|
|
|
173
175
|
else:
|
|
174
176
|
break
|
|
175
177
|
|
|
176
|
-
@action('等待进入考试场景')
|
|
178
|
+
@action('等待进入考试场景', screenshot_mode='manual')
|
|
177
179
|
def until_exam_scene():
|
|
178
180
|
"""等待进入考试场景"""
|
|
179
181
|
# NOTE: is_exam_scene() 通过 OCR 剩余回合数判断是否处于考试场景。
|
|
@@ -342,7 +344,7 @@ def produce_end(has_live: bool = True):
|
|
|
342
344
|
elif image.find(R.Produce.TextSkipLiveDialogTitle):
|
|
343
345
|
logger.info("Confirming skip live.")
|
|
344
346
|
device.click(image.expect_wait(R.Common.IconButtonCheck))
|
|
345
|
-
|
|
347
|
+
skip()
|
|
346
348
|
else:
|
|
347
349
|
break
|
|
348
350
|
# 选择封面
|
|
@@ -385,7 +387,7 @@ def produce_end(has_live: bool = True):
|
|
|
385
387
|
break
|
|
386
388
|
else:
|
|
387
389
|
device.click_center()
|
|
388
|
-
|
|
390
|
+
skip() # 为了兼容has_live==False的情况
|
|
389
391
|
sleep(2)
|
|
390
392
|
# 后续动画
|
|
391
393
|
logger.info("Waiting for memory generation animation completed...")
|
|
@@ -534,7 +536,7 @@ def handle_action(action: ProduceAction, final_week: bool = False) -> ProduceAct
|
|
|
534
536
|
logger.warning("Unknown action: %s", action)
|
|
535
537
|
return None
|
|
536
538
|
|
|
537
|
-
def week_normal(week_first: bool = False):
|
|
539
|
+
def week_normal(week_first: bool = False) -> bool:
|
|
538
540
|
until_action_scene(week_first)
|
|
539
541
|
logger.info("Handling actions...")
|
|
540
542
|
action: ProduceAction | None = None
|
|
@@ -570,7 +572,9 @@ def week_normal(week_first: bool = False):
|
|
|
570
572
|
assert_never(action)
|
|
571
573
|
until_action_scene()
|
|
572
574
|
|
|
573
|
-
|
|
575
|
+
return True # 继续执行下一周
|
|
576
|
+
|
|
577
|
+
def week_final_lesson() -> bool:
|
|
574
578
|
until_action_scene()
|
|
575
579
|
action: ProduceAction | None = None
|
|
576
580
|
actions = produce_solution().data.actions_order
|
|
@@ -597,6 +601,8 @@ def week_final_lesson():
|
|
|
597
601
|
raise ValueError("Action is None.")
|
|
598
602
|
case _:
|
|
599
603
|
assert_never(action)
|
|
604
|
+
|
|
605
|
+
return True # 继续执行下一周
|
|
600
606
|
|
|
601
607
|
def week_mid_and_final_exam_common():
|
|
602
608
|
logger.info("Wait for exam scene...")
|
|
@@ -607,23 +613,27 @@ def week_mid_and_final_exam_common():
|
|
|
607
613
|
sleep(0.5)
|
|
608
614
|
loading.wait_loading_end()
|
|
609
615
|
|
|
610
|
-
def week_mid_exam():
|
|
616
|
+
def week_mid_exam() -> bool:
|
|
611
617
|
logger.info("Week mid exam started.")
|
|
612
618
|
|
|
613
619
|
week_mid_and_final_exam_common()
|
|
614
620
|
|
|
615
621
|
if exam('mid'):
|
|
616
622
|
until_action_scene() # 考试通过
|
|
623
|
+
return True
|
|
617
624
|
else:
|
|
618
625
|
produce_end(has_live=False) # 考试不合格
|
|
626
|
+
return False
|
|
619
627
|
|
|
620
|
-
def week_final_exam():
|
|
628
|
+
def week_final_exam() -> bool:
|
|
621
629
|
logger.info("Week final exam started.")
|
|
622
630
|
|
|
623
631
|
week_mid_and_final_exam_common()
|
|
624
632
|
|
|
625
633
|
exam('final')
|
|
634
|
+
|
|
626
635
|
produce_end()
|
|
636
|
+
return False
|
|
627
637
|
|
|
628
638
|
@action('执行 Regular 培育', screenshot_mode='manual-inherit')
|
|
629
639
|
def hajime_regular(week: int = -1, start_from: int = 1):
|
|
@@ -656,7 +666,9 @@ def hajime_regular(week: int = -1, start_from: int = 1):
|
|
|
656
666
|
else:
|
|
657
667
|
for i, w in enumerate(weeks[start_from-1:]):
|
|
658
668
|
logger.info("Week %d started.", i + start_from)
|
|
659
|
-
w()
|
|
669
|
+
if not w():
|
|
670
|
+
logger.info("Exit produce after week %d.", i + start_from)
|
|
671
|
+
break
|
|
660
672
|
|
|
661
673
|
@action('执行 PRO 培育', screenshot_mode='manual-inherit')
|
|
662
674
|
def hajime_pro(week: int = -1, start_from: int = 1):
|
|
@@ -690,7 +702,9 @@ def hajime_pro(week: int = -1, start_from: int = 1):
|
|
|
690
702
|
else:
|
|
691
703
|
for i, w in enumerate(weeks[start_from-1:]):
|
|
692
704
|
logger.info("Week %d started.", i + start_from)
|
|
693
|
-
w()
|
|
705
|
+
if not w():
|
|
706
|
+
logger.info("Exit produce after week %d.", i + start_from)
|
|
707
|
+
break
|
|
694
708
|
|
|
695
709
|
@action("执行 MASTER 培育", screenshot_mode='manual-inherit')
|
|
696
710
|
def hajime_master(week: int = -1, start_from: int = 1):
|
|
@@ -726,7 +740,9 @@ def hajime_master(week: int = -1, start_from: int = 1):
|
|
|
726
740
|
else:
|
|
727
741
|
for i, w in enumerate(weeks[start_from-1:]):
|
|
728
742
|
logger.info("Week %d started.", i + start_from)
|
|
729
|
-
w()
|
|
743
|
+
if not w():
|
|
744
|
+
logger.info("Exit produce after week %d.", i + start_from)
|
|
745
|
+
break
|
|
730
746
|
|
|
731
747
|
@action('是否在考试场景')
|
|
732
748
|
def is_exam_scene():
|
|
@@ -750,8 +766,10 @@ def detect_produce_scene() -> ProduceStage:
|
|
|
750
766
|
结束状态:游戏主页面\n
|
|
751
767
|
"""
|
|
752
768
|
logger.info("Detecting current produce stage...")
|
|
753
|
-
|
|
769
|
+
cd = Countdown(conf().produce.interrupt_timeout).start()
|
|
754
770
|
for _ in Loop():
|
|
771
|
+
if cd.expired():
|
|
772
|
+
raise UnrecoverableError('Unable to detect produce scene. Reseason: timed out.')
|
|
755
773
|
# 行动场景
|
|
756
774
|
texts = ocr.ocr()
|
|
757
775
|
if (
|
|
@@ -769,7 +787,7 @@ def detect_produce_scene() -> ProduceStage:
|
|
|
769
787
|
logger.info("Detection result: At exam scene.")
|
|
770
788
|
return 'exam-ongoing'
|
|
771
789
|
else:
|
|
772
|
-
if
|
|
790
|
+
if ProduceInterrupt.check():
|
|
773
791
|
# 继续循环检测
|
|
774
792
|
pass
|
|
775
793
|
elif commu_event():
|